diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 1db6be7ea..5f2612681 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -120,6 +120,7 @@ body: description: Select Immersive Intelligence version. options: - 0.3.1 + - 0.3.1-dev4 - 0.3.1-dev3-test1 - 0.3.1-dev2 - 0.3.1-dev1 diff --git a/gradle.properties b/gradle.properties index a03e347ea..9b69a0c16 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,7 +15,7 @@ mcmod_Contributors=Pabilo8,Carver,Sch modForge=1.12.2-14.23.5.2847 modMappings=snapshot_20171003 #Project Data -modVersion=0.3.1-dev3-test1 +modVersion=0.3.1-dev4 modGroup=pl.pabilo8 modName=immersiveintelligence # Private Team II Maven diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/LogisticTag.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/LogisticTag.java index de45699b0..693584d61 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/LogisticTag.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/LogisticTag.java @@ -211,7 +211,7 @@ public NBTTagCompound serializeNBT() .withString("origin", origin) .withString("destination", destination) .withColor("color", IIColor.fromDye(color)) - .withUUID("owner", owner) + .conditionally(owner!=null, tis -> tis.withUUID("owner", owner)) .withInt("batch_number", batchNumber) .unwrap(); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/enums/ComponentRole.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/enums/ComponentRole.java index 46a5eeb8b..a34f3730e 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/enums/ComponentRole.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/enums/ComponentRole.java @@ -1,9 +1,10 @@ package pl.pabilo8.immersiveintelligence.api.ammo.enums; import pl.pabilo8.immersiveintelligence.common.util.IIColor; -import pl.pabilo8.immersiveintelligence.common.util.ISerializableEnum; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; +import pl.pabilo8.immersiveintelligence.common.util.ILocalizedEnum; -public enum ComponentRole implements ISerializableEnum +public enum ComponentRole implements ILocalizedEnum { GENERAL_PURPOSE(0xaaaaaa), SHRAPNEL(0x3f4f57), @@ -32,4 +33,10 @@ public IIColor getColor() { return color; } + + @Override + public String geLocaleKey() + { + return IIReference.DESCRIPTION_KEY+"bullet_type."; + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/enums/FuseType.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/enums/FuseType.java index 57b58daa9..9a9fd2717 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/enums/FuseType.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/enums/FuseType.java @@ -1,11 +1,9 @@ package pl.pabilo8.immersiveintelligence.api.ammo.enums; -import pl.pabilo8.immersiveintelligence.common.util.ISerializableEnum; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; +import pl.pabilo8.immersiveintelligence.common.util.ILocalizedEnum; -import javax.annotation.Nonnull; -import java.util.Arrays; - -public enum FuseType implements ISerializableEnum +public enum FuseType implements ILocalizedEnum { CONTACT('\u29b0'), TIMED('\u29b1'), @@ -18,11 +16,9 @@ public enum FuseType implements ISerializableEnum this.symbol = symbol; } - //TODO: 28.05.2024 replace with IIUtils.enumValue - @Nonnull - public static FuseType v(String s) + @Override + public String geLocaleKey() { - String ss = s.toUpperCase(); - return Arrays.stream(values()).filter(e -> e.name().equals(ss)).findFirst().orElse(CONTACT); + return IIReference.DESCRIPTION_KEY+"bullet_fuse."; } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/parts/IAmmoTypeItem.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/parts/IAmmoTypeItem.java index 27469762b..5e9d156d0 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/parts/IAmmoTypeItem.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/parts/IAmmoTypeItem.java @@ -13,6 +13,7 @@ import pl.pabilo8.immersiveintelligence.api.ammo.enums.PropellantType; import pl.pabilo8.immersiveintelligence.api.utils.ItemTooltipHandler; import pl.pabilo8.immersiveintelligence.api.utils.ItemTooltipHandler.IAdvancedTooltipItem; +import pl.pabilo8.immersiveintelligence.common.IIUtils; import pl.pabilo8.immersiveintelligence.common.entity.ammo.EntityAmmoBase; import pl.pabilo8.immersiveintelligence.common.util.IIColor; import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; @@ -183,7 +184,7 @@ default FuseType getFuseType(ItemStack stack) { if(!ItemNBTHelper.hasKey(stack, NBT_FUSE)) makeDefault(stack); - return FuseType.v(ItemNBTHelper.getString(stack, NBT_FUSE)); + return IIUtils.enumValue(FuseType.class, ItemNBTHelper.getString(stack, NBT_FUSE)); } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/utils/AmmoFactory.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/utils/AmmoFactory.java index 2b51ca690..c44ac8d9b 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/utils/AmmoFactory.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/ammo/utils/AmmoFactory.java @@ -17,6 +17,7 @@ import pl.pabilo8.immersiveintelligence.common.IILogger; import pl.pabilo8.immersiveintelligence.common.entity.ammo.EntityAmmoBase; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunAimCoordinate; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -115,7 +116,21 @@ public AmmoFactory(World world) public AmmoFactory setStack(ItemStack stack) { this.stack = stack; - this.ammo = ((IAmmoType)stack.getItem()); + this.ammo = this.ammo==null?((IAmmoType)stack.getItem()): this.ammo; + return this; + } + + /** + * Sets the ammo to create, used when the ammo type can't be determined directly from the stack, f.e. in turrets + * + * @param ammo The ammo to create + * @return The factory + */ + @SuppressWarnings("rawtypes") + public AmmoFactory setAmmo(@Nonnull IAmmoType ammo) + { + //noinspection unchecked + this.ammo = (IAmmoType)ammo; return this; } @@ -195,6 +210,12 @@ public AmmoFactory setPositionAndVelocity(Vec3d pos, Vec3d dir, float velocit return this; } + public AmmoFactory setPositionAndVelocity(Vec3d positionVector, GunAimCoordinate aim, float offset, float velocity) + { + Vec3d target = aim.getTarget(0); + return setPositionAndVelocity(positionVector.add(target.scale(offset)), target, offset); + } + /** * Sets the owner of the ammo * @@ -252,6 +273,8 @@ public AmmoFactory setUseArtilleryAngles(boolean useArtilleryAngles) return this; } + //--- Ammo Entity Creation ---// + /** * Builds the ammo based on passed data and spawns it in the world. * @@ -272,7 +295,7 @@ public E create() public E create(@Nullable Consumer action) { //Invalid ammo type - if(ammo==null) + if(ammo==null||stack==null||stack.isEmpty()) return null; //No position or direction passed @@ -356,4 +379,21 @@ public boolean isValidAmmo(ItemStack stack) return false; return stack.getItem()==ammo&&!((IAmmoTypeItem)ammo).isBulletCore(stack); } + + //--- Getters ---// + + public World getWorld() + { + return world.get(); + } + + public Vec3d getPos() + { + return pos; + } + + public Vec3d getDirection() + { + return dir; + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/crafting/BulletComponentStack.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/crafting/BulletComponentStack.java index 80af3159d..b29205c67 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/crafting/BulletComponentStack.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/crafting/BulletComponentStack.java @@ -1,6 +1,5 @@ package pl.pabilo8.immersiveintelligence.api.crafting; -import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.INBTSerializable; @@ -30,7 +29,7 @@ private BulletComponentStack(String name, int amount, @Nonnull NBTTagCompound ta { this.name = name; this.amount = amount; - this.tagCompound = tag; + this.tagCompound = tag.copy(); Optional first = AmmoRegistry.getAllComponents().stream() .filter(comp -> this.name.equals(comp.getName())) @@ -41,7 +40,12 @@ private BulletComponentStack(String name, int amount, @Nonnull NBTTagCompound ta public BulletComponentStack(AmmoComponent component, @Nullable NBTTagCompound tag) { - this(component.getName(), 16, tag==null?new NBTTagCompound(): tag); + this(component, 16, tag); + } + + public BulletComponentStack(AmmoComponent component, int amount, @Nullable NBTTagCompound tag) + { + this(component.getName(), amount, tag==null?new NBTTagCompound(): tag); } public BulletComponentStack() @@ -49,13 +53,18 @@ public BulletComponentStack() this("", 0, new NBTTagCompound()); } + public BulletComponentStack copy() + { + return new BulletComponentStack(name, amount, tagCompound); + } + @Override public NBTTagCompound serializeNBT() { NBTTagCompound nbt = new NBTTagCompound(); nbt.setString("name", name); nbt.setInteger("amount", amount); - nbt.setTag("nbt", tagCompound); + nbt.setTag("nbt", tagCompound.copy()); return nbt; } @@ -65,7 +74,7 @@ public void deserializeNBT(NBTTagCompound nbt) { name = nbt.getString("name"); amount = nbt.getInteger("amount"); - tagCompound = nbt.getCompoundTag("nbt"); + tagCompound = nbt.getCompoundTag("nbt").copy(); Optional first = AmmoRegistry.getAllComponents().stream() .filter(comp -> this.name.equals(comp.getName())) @@ -76,7 +85,7 @@ public void deserializeNBT(NBTTagCompound nbt) public boolean isEmpty() { - return name.isEmpty()||amount==0; + return name.isEmpty()||amount==0||component==null; } public boolean isFluid() @@ -86,30 +95,34 @@ public boolean isFluid() public boolean matches(ItemStack stack) { - if(isEmpty()||component==null) + if(isEmpty()) return true; + if(stack.isEmpty()||component==null) + return false; NBTTagCompound stackTag = stack.getTagCompound(); if(stackTag==null) stackTag = new NBTTagCompound(); - return component.getName().equals(name)&&this.tagCompound.equals(stackTag); + return component.getMaterial().matchesItemStackIgnoringSize(stack)&&this.tagCompound.equals(stackTag); } public boolean matches(FluidStack fs) { if(isEmpty()) return true; + if(fs==null||component==null||component.getMaterial().fluid==null) + return false; NBTTagCompound stackTag = fs.tag==null?new NBTTagCompound(): fs.tag; - return fs.getFluid().getName().equals(name)&&this.tagCompound.equals(stackTag); + return fs.isFluidEqual(component.getMaterial().fluid)&&this.tagCompound.equals(stackTag); } public void subtract(int amount) { this.amount = Math.max(0, this.amount-amount); - if(amount==0) + if(this.amount==0) { tagCompound = new NBTTagCompound(); name = ""; @@ -135,7 +148,7 @@ public float getAmountPercentage() @SideOnly(Side.CLIENT) public String getTranslatedName() { - return I18n.format("ie.manual.entry.bullet_component."+name); + return component!=null?component.getTranslatedName(): ""; } public AmmoComponent getComponent() diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/crafting/ProjectileWorkshopRecipe.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/crafting/ProjectileWorkshopRecipe.java index dbdcbb57a..70656ee0b 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/crafting/ProjectileWorkshopRecipe.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/crafting/ProjectileWorkshopRecipe.java @@ -17,9 +17,27 @@ **/ public class ProjectileWorkshopRecipe extends IIMultiblockRecipe { + public static final String FILLING_RECIPE_NAME = "core_filling"; + public static final ProjectileWorkshopRecipe CORE_FILLING = new ProjectileWorkshopRecipe(); + + @Nullable public IAmmoTypeItem ammo; public boolean isFilling; - public ItemStack effect, ingredient; + public ItemStack effect = ItemStack.EMPTY, ingredient = ItemStack.EMPTY; + + /** + * Single hard-coded recipe used by Core Filler mode. + */ + private ProjectileWorkshopRecipe() + { + super(FILLING_RECIPE_NAME); + this.isFilling = true; + + this.setTimeAndEnergy( + ProjectileWorkshop.fillingTime, + ProjectileWorkshop.fillingEnergyUsage + ); + } /** * Production recipe @@ -42,25 +60,9 @@ public ProjectileWorkshopRecipe(IAmmoTypeItem ammo, AmmoCore core, CoreTyp ); } - //Filling recipe - /*public ProjectileWorkshopRecipe(ItemStack inputStack, BulletComponentStack component) - { - assert inputStack.getItem() instanceof IAmmoTypeItem; - - this.ammo = (IAmmoTypeItem)inputStack.getItem(); - this.isFilling = true; - - this.totalProcessTime = ProjectileWorkshop.fillingTime; - this.energyPerTick = ProjectileWorkshop.fillingEnergyUsage; - - this.effect = inputStack.copy(); - this.effect.setCount(1); - ammo.addComponents(this.effect, component.getComponent(), component.tagCompound); - }*/ - public ItemStack getEffect() { - return effect; + return effect.copy(); } @Nullable diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/data/IIDataTypeUtils.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/data/IIDataTypeUtils.java index 0aa392ef2..d5203bffc 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/data/IIDataTypeUtils.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/data/IIDataTypeUtils.java @@ -38,7 +38,7 @@ public static void registerDataTypes() //number types registerType("integer", DataTypeInteger.class, DataTypeInteger::new, IIColor.fromPackedRGB(0x26732e), false); registerType("float", DataTypeFloat.class, DataTypeFloat::new, IIColor.fromPackedRGB(0x0d6b68), false); - registerType("vector", DataTypeVector.class, DataTypeVector::new, IIColor.fromPackedRGB(0x9d8900), false); + registerType("vector", DataTypeVector.class, DataTypeVector::new, IIColor.fromPackedRGB(0x9d8900), true); registerGenericType("number", NumericDataType.class); //text types diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/data/types/DataTypeExpression.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/data/types/DataTypeExpression.java index 4c914bf44..9edc4ef24 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/data/types/DataTypeExpression.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/data/types/DataTypeExpression.java @@ -100,7 +100,8 @@ public void valueFromNBT(NBTTagCompound nbt) { this.operation = IIDataOperationUtils.getOperationInstance(nbt.getString("Operation")); this.meta = this.operation.getMeta(); - this.requiredVariable = nbt.getString("requiredVariable").charAt(0); + String required = nbt.getString("requiredVariable"); + this.requiredVariable = required.isEmpty()?' ': required.charAt(0); this.data = new DataType[meta.allowedTypes().length]; for(int i = 0; i < meta.allowedTypes().length; i++) diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/style/StyleConstraints.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/style/StyleConstraints.java index d2d741a34..4d99d174c 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/style/StyleConstraints.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/style/StyleConstraints.java @@ -10,14 +10,14 @@ public class StyleConstraints { private final String defaultStyle; - private final boolean allowColorCustomization; + private final PaintStyleConstraint colorCustomization; private final Set styles; private final Set decorations; - public StyleConstraints(String defaultStyle, boolean allowColorCustomization, Set styles, Set decorations) + public StyleConstraints(String defaultStyle, PaintStyleConstraint colorCustomization, Set styles, Set decorations) { this.defaultStyle = defaultStyle; - this.allowColorCustomization = allowColorCustomization; + this.colorCustomization = colorCustomization; this.styles = styles; this.decorations = decorations; } @@ -27,9 +27,9 @@ public String getDefaultStyle() return defaultStyle; } - public boolean allowsColorCustomization() + public PaintStyleConstraint getColorCustomization() { - return allowColorCustomization; + return colorCustomization; } public Set getStyles() @@ -41,4 +41,11 @@ public Set getDecorations() { return decorations; } + + public enum PaintStyleConstraint + { + NOT_APPLICABLE, + ANY_COLOR, + PAINTS_COLOR_ONLY + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/style/StyleCustomization.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/style/StyleCustomization.java index e09c4a84f..4765324ba 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/style/StyleCustomization.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/style/StyleCustomization.java @@ -3,6 +3,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagString; import net.minecraftforge.common.util.INBTSerializable; +import pl.pabilo8.immersiveintelligence.api.style.StyleConstraints.PaintStyleConstraint; import pl.pabilo8.immersiveintelligence.common.util.IIColor; import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; @@ -62,6 +63,8 @@ public StyleCustomization withStyle(String style) public StyleCustomization withColor(IIColor color) { + if(constraints.getColorCustomization()==PaintStyleConstraint.PAINTS_COLOR_ONLY) + color = color.constraintToPaintSystem(); this.color = color; return this; } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/upgrade/Upgrade.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/upgrade/Upgrade.java index 13e1b4333..03911d364 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/upgrade/Upgrade.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/upgrade/Upgrade.java @@ -30,6 +30,7 @@ public class Upgrade private final ResLoc id, icon; private int progressRequired, progressStages; private UpgradePurpose purpose; + private boolean isWorkInProgress = false; public Upgrade(String name) { @@ -70,24 +71,51 @@ public Upgrade withProgressStages(int progressRequired) } + /** + * Sets the required progress, used for calculating the time it takes to install the upgrade. Adjusted by the amount of animated components drawn during the upgrade install.* + * + * @return this + */ public Upgrade withRequiredProgress(int progress) { this.progressRequired = progress; return this; } + /** + * Sets the upgrade purpose, used for categorizing upgrades in the tech tree and applying special rules to them. + * + * @return this + */ public Upgrade withType(UpgradePurpose type) { this.purpose = type; return this; } + /** + * Adds information about a benefit that this upgrade provides, shown in the upgrade tooltip. + * Benefits are purely informational and do not have to be applied in any way. + * + * @return this + */ public Upgrade withBenefit(UpgradeBenefit benefit) { this.benefits.add(benefit); return this; } + /** + * Marks the upgrade as Work-In-Progress and does not allow players to install it. + * + * @return this + */ + public Upgrade withWIPStatus() + { + this.isWorkInProgress = true; + return this; + } + //--- Getters ---// public ResourceLocation getId() @@ -101,6 +129,11 @@ public String getName() return id.getResourcePath(); } + public boolean isWorkInProgress() + { + return this.isWorkInProgress; + } + public UpgradePurpose getPurpose() { return purpose; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/upgrade/UpgradeManager.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/upgrade/UpgradeManager.java index d16439d79..08ad60027 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/upgrade/UpgradeManager.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/upgrade/UpgradeManager.java @@ -1,10 +1,13 @@ package pl.pabilo8.immersiveintelligence.api.upgrade; +import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagString; import net.minecraftforge.common.util.INBTSerializable; import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeUtils.UpgradeOperation; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Tools; +import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; +import pl.pabilo8.immersiveintelligence.common.network.messages.MessageIITileSync; import pl.pabilo8.immersiveintelligence.common.util.ResLoc; import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; @@ -204,5 +207,7 @@ private void sendTileUpdate() { if(parent instanceof TileEntityMultiblockIIBase) ((TileEntityMultiblockIIBase)parent).updateTileForEvent(SyncEvents.TILE_UPGRADES_MODIFIED); + else if(parent instanceof TileEntityIEBase) + IIPacketHandler.sendToClient(new MessageIITileSync(((TileEntityIEBase)parent))); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/camera/ICameraEntity.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/camera/ICameraEntity.java index 09fb8068a..b90b3f7ca 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/camera/ICameraEntity.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/camera/ICameraEntity.java @@ -1,15 +1,17 @@ package pl.pabilo8.immersiveintelligence.api.utils.camera; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.util.math.Vec3d; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoom; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; /** * @author Pabilo8 (pabilo@iiteam.net) * @since 14.02.2023 */ -@SideOnly(Side.CLIENT) public interface ICameraEntity { /** @@ -26,6 +28,16 @@ public interface ICameraEntity */ float getCameraYaw(EntityPlayer cameraPlayer, float partialTicks); + /** + * @param cameraPlayer client player + * @param partialTicks partial ticks when rendering + * @return camera roll angle + */ + default float getCameraRoll(EntityPlayer cameraPlayer, float partialTicks) + { + return 0; + } + /** * @param cameraPlayer client player * @param partialTicks partial ticks when rendering @@ -33,8 +45,29 @@ public interface ICameraEntity */ Vec3d getCameraPos(EntityPlayer cameraPlayer, float partialTicks); - default void setCameraParameters(EntityPlayer cameraPlayer, float partialTicks) + boolean isCameraEnabled(EntityPlayer player); + + default boolean isThirdPersonAllowed(EntityPlayer cameraPlayer) { + return true; + } + + //--- Zooming ---// + + @Nullable + default IAdvancedZoom getZoom() + { + return null; + } + /** + * Allows to use a zoom-providing ItemStack. Used for vehicles, where the player can use inventory items like binoculars. + * + * @return the ItemStack providing the zoom, or an empty stack if none + */ + @Nonnull + default ItemStack getZoomStack() + { + return ItemStack.EMPTY; } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/camera/IEntityZoomProvider.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/camera/IEntityZoomProvider.java deleted file mode 100644 index 01316c45d..000000000 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/camera/IEntityZoomProvider.java +++ /dev/null @@ -1,18 +0,0 @@ -package pl.pabilo8.immersiveintelligence.api.utils.camera; - -import net.minecraft.item.ItemStack; -import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoomTool; - -/** - * @author Pabilo8 (pabilo@iiteam.net) - * @since 21.01.2021 - */ -public interface IEntityZoomProvider -{ - IAdvancedZoomTool getZoom(); - - default ItemStack getZoomStack() - { - return ItemStack.EMPTY; - } -} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/camera/ZoomSettings.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/camera/ZoomSettings.java new file mode 100644 index 000000000..271f79a65 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/camera/ZoomSettings.java @@ -0,0 +1,51 @@ +package pl.pabilo8.immersiveintelligence.api.utils.camera; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoom; + +/** + * @author Pabilo8 (pabilo@iiteam.net) + * @ii-approved 0.3.1 + * @since 15.05.2026 + */ +public class ZoomSettings implements IAdvancedZoom +{ + private boolean zoomEnabled = false; + private final float[] zoomSteps; + private final ResourceLocation overlayTexture; + + public ZoomSettings(float[] zoomSteps, ResourceLocation overlayTexture) + { + this.zoomSteps = zoomSteps; + this.overlayTexture = overlayTexture; + } + + public ZoomSettings withZoomEnabled(boolean zoomEnabled) + { + this.zoomEnabled = zoomEnabled; + return this; + } + + @Override + public boolean shouldZoom(ItemStack stack, EntityPlayer player) + { + return zoomEnabled; + } + + @Override + public float[] getZoomSteps(ItemStack stack, EntityPlayer player) + { + return zoomSteps; + } + + @SideOnly(Side.CLIENT) + @Override + public ResourceLocation getZoomOverlayTexture(ItemStack stack, EntityPlayer player) + { + return overlayTexture; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/tools/IAdvancedZoomTool.java b/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/tools/IAdvancedZoom.java similarity index 95% rename from src/main/java/pl/pabilo8/immersiveintelligence/api/utils/tools/IAdvancedZoomTool.java rename to src/main/java/pl/pabilo8/immersiveintelligence/api/utils/tools/IAdvancedZoom.java index d8f195c1a..7b251dfaf 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/tools/IAdvancedZoomTool.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/api/utils/tools/IAdvancedZoom.java @@ -10,7 +10,7 @@ * @author Pabilo8 (pabilo@iiteam.net) * @since 27.09.2019 */ -public interface IAdvancedZoomTool +public interface IAdvancedZoom { /** * @return whether this item is valid for zooming in diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/ClientEventHandler.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/ClientEventHandler.java index 27400ee6b..64cd5ca7c 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/ClientEventHandler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/ClientEventHandler.java @@ -22,6 +22,7 @@ import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager.FogMode; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.IResourceManager; @@ -31,7 +32,6 @@ import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumHand; @@ -57,6 +57,7 @@ import net.minecraftforge.event.GameRuleChangeEvent; import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.event.world.WorldEvent.Load; +import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; @@ -72,7 +73,7 @@ import pl.pabilo8.immersiveintelligence.api.utils.ItemTooltipHandler; import pl.pabilo8.immersiveintelligence.api.utils.ItemTooltipHandler.IAdvancedTooltipItem; import pl.pabilo8.immersiveintelligence.api.utils.ItemTooltipHandler.IItemScrollable; -import pl.pabilo8.immersiveintelligence.api.utils.camera.IEntityZoomProvider; +import pl.pabilo8.immersiveintelligence.api.utils.camera.ICameraEntity; import pl.pabilo8.immersiveintelligence.client.fx.ScreenShake; import pl.pabilo8.immersiveintelligence.client.fx.utils.ParticleSystem; import pl.pabilo8.immersiveintelligence.client.gui.GuiWidgetAustralianTabs; @@ -99,18 +100,15 @@ import pl.pabilo8.immersiveintelligence.common.*; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Graphics; -import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Tools.TripodPeriscope; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMachinegun; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMortar; -import pl.pabilo8.immersiveintelligence.common.entity.EntityTripodPeriscope; +import pl.pabilo8.immersiveintelligence.common.entity.EntityCamera; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMountedWeapon; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat; import pl.pabilo8.immersiveintelligence.common.item.ItemIIPrintedPage.PageType; import pl.pabilo8.immersiveintelligence.common.item.weapons.ItemIIGunBase; import pl.pabilo8.immersiveintelligence.common.item.weapons.ItemIIRailgunOverride; import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; -import pl.pabilo8.immersiveintelligence.common.network.messages.MessageEntityNBTSync; import pl.pabilo8.immersiveintelligence.common.network.messages.MessageItemScrollableSwitch; import pl.pabilo8.immersiveintelligence.common.network.messages.MessageManualClose; import pl.pabilo8.immersiveintelligence.common.util.IIColor; @@ -142,11 +140,9 @@ public class ClientEventHandler implements ISelectiveResourceReloadListener private static final ArrayList TEXT_OVERLAYS = new ArrayList<>(); private static final ArrayList IN_WORLD_OVERLAYS = new ArrayList<>(); private static final ArrayList SCREEN_SHAKE_EFFECTS = new ArrayList<>(); - public static boolean mgAiming = false; - public static ArrayList aimingPlayers = new ArrayList<>(); public static GuiScreen lastGui = null; //Whether the Light Engineer Armor is worn - public static boolean gotTheDrip; + public static boolean gotTheDrip = false, nightVisionActive = false; static { @@ -195,13 +191,6 @@ public static void handleBipedRotations(ModelBiped model, Entity entity) model.bipedHead.rotateAngleZ = 0f; model.bipedHeadwear.rotateAngleZ = 0f; - - if(aimingPlayers.contains(entity)) - { - model.bipedHead.rotateAngleZ = -0.35f; - model.bipedHeadwear.rotateAngleZ = -0.35f; - } - //Handle a vehicle's passenger animations Entity vehicle = living.getRidingEntity(); //Vehicle seats have no renderer, use the vehicle renderer for the action @@ -279,53 +268,49 @@ else if((item instanceof ItemIIGunBase||item instanceof ItemIIRailgunOverride)&& model.bipedRightArm.rotationPointZ += IIMath.clampedLerp3Par(0, 2f, 0, v); } - else + else if(living.isSneaking()&&item==IIContent.itemBinoculars) { - // TODO: 19.09.2021 animation for left hand (requires model offset changes) - } - else if(living.isSneaking()&&item==IIContent.itemBinoculars) - { - model.bipedRightArm.rotateAngleY = model.bipedHead.rotateAngleY-0.25f; - model.bipedLeftArm.rotateAngleY = model.bipedHead.rotateAngleY+0.25f; + model.bipedRightArm.rotateAngleY = model.bipedHead.rotateAngleY-0.25f; + model.bipedLeftArm.rotateAngleY = model.bipedHead.rotateAngleY+0.25f; - model.bipedRightArm.rotateAngleX = model.bipedHead.rotateAngleX-2f; - model.bipedLeftArm.rotateAngleX = model.bipedRightArm.rotateAngleX; + model.bipedRightArm.rotateAngleX = model.bipedHead.rotateAngleX-2f; + model.bipedLeftArm.rotateAngleX = model.bipedRightArm.rotateAngleX; - int id = heldItem.getMetadata(); - BinocularsRenderer.INSTANCE.render(id==1?ItemNBTHelper.getBoolean(heldItem, "wasUsed")?2: 1: id, model.bipedHead, true); - } - else if(item==IIContent.itemMineDetector) - { - float v = MineDetectorRenderer.instance.renderBase(living, 2.125f, true); + int id = heldItem.getMetadata(); + BinocularsRenderer.INSTANCE.render(id==1?ItemNBTHelper.getBoolean(heldItem, "wasUsed")?2: 1: id, model.bipedHead, true); + } + else if(item==IIContent.itemMineDetector) + { + float v = MineDetectorRenderer.instance.renderBase(living, 2.125f, true); - model.bipedRightArm.rotateAngleY = model.bipedBody.rotateAngleY-0.45f; - model.bipedLeftArm.rotateAngleY = model.bipedBody.rotateAngleY+0.45f; + model.bipedRightArm.rotateAngleY = model.bipedBody.rotateAngleY-0.45f; + model.bipedLeftArm.rotateAngleY = model.bipedBody.rotateAngleY+0.45f; - model.bipedRightArm.rotateAngleX = -1.25f-(1f-v)*0.5f; - model.bipedLeftArm.rotateAngleX = model.bipedRightArm.rotateAngleX; - } - else if(item==IIContent.itemNavalMine) - if(right) - { - model.bipedRightArm.rotateAngleX -= 0.5f; + model.bipedRightArm.rotateAngleX = -1.25f-(1f-v)*0.5f; model.bipedLeftArm.rotateAngleX = model.bipedRightArm.rotateAngleX; } - else - { - model.bipedLeftArm.rotateAngleX -= 0.5f; - model.bipedRightArm.rotateAngleX = model.bipedLeftArm.rotateAngleX; - } - else if(item==IIContent.itemGrenade) - { - float use = 1f-MathHelper.clamp(((EntityLivingBase)entity).getItemInUseCount()/(float)heldItem.getMaxItemUseDuration(), 0, 1); - if(right) + else if(item==IIContent.itemNavalMine) + if(right) + { + model.bipedRightArm.rotateAngleX -= 0.5f; + model.bipedLeftArm.rotateAngleX = model.bipedRightArm.rotateAngleX; + } + else + { + model.bipedLeftArm.rotateAngleX -= 0.5f; + model.bipedRightArm.rotateAngleX = model.bipedLeftArm.rotateAngleX; + } + else if(item==IIContent.itemGrenade) { - model.rightArmPose = ArmPose.EMPTY; - //model.leftArmPose=ArmPose.EMPTY; - float hh = -(4.5f-model.bipedHead.rotateAngleX); - model.bipedRightArm.rotateAngleX = use!=1?use > 0f?use < 0.35f?use/0.35f*hh: hh: 0f: 0f; + float use = 1f-MathHelper.clamp(((EntityLivingBase)entity).getItemInUseCount()/(float)heldItem.getMaxItemUseDuration(), 0, 1); + if(right) + { + model.rightArmPose = ArmPose.EMPTY; + //model.leftArmPose=ArmPose.EMPTY; + float hh = -(4.5f-model.bipedHead.rotateAngleX); + model.bipedRightArm.rotateAngleX = use!=1?use > 0f?use < 0.35f?use/0.35f*hh: hh: 0f: 0f; + } } - } } } @@ -648,12 +633,13 @@ public void onRenderWorldLast(RenderWorldLastEvent event) @SubscribeEvent(priority = EventPriority.HIGH) public void onRenderOverlayPre(Pre event) { - if(ClientUtils.mc().player==null||event.getType()!=ElementType.CROSSHAIRS) + Minecraft mc = ClientUtils.mc(); + if(mc.player==null||event.getType()!=ElementType.CROSSHAIRS) return; for(EnumHand hand : EnumHand.values()) { - ItemStack stack = ClientUtils.mc().player.getHeldItem(hand); + ItemStack stack = mc.player.getHeldItem(hand); if(stack.getItem().getTileEntityItemStackRenderer() instanceof ISpecificHandRenderer) if(((ISpecificHandRenderer)stack.getItem().getTileEntityItemStackRenderer()).shouldCancelCrosshair(stack, hand)) { @@ -662,9 +648,9 @@ public void onRenderOverlayPre(Pre event) } } - RayTraceResult mop = ClientUtils.mc().objectMouseOver; - EntityPlayer player = ClientUtils.mc().player; - // + RayTraceResult mop = mc.objectMouseOver; + EntityPlayer player = mc.player; + float partialTicks = event.getPartialTicks(); //Iterate HUD backgrounds for(GuiOverlayBase hud : HUD_BACKGROUNDS) @@ -678,99 +664,32 @@ public void onRenderOverlayPre(Pre event) Entity ridden = player.getRidingEntity(); Entity lowestRidden = ridden==null?null: ridden.getLowestRidingEntity(); - //--- Entity Zoom Handling ---// - - if(lowestRidden instanceof IEntityZoomProvider) - { - boolean pressed = ClientProxy.keybindZoom.isKeyDown(); - if(pressed^mgAiming&&ridden instanceof EntityMachinegun) - { - NBTTagCompound tag = new NBTTagCompound(); - tag.setBoolean("clientMessage", true); - tag.setBoolean("aiming", pressed); - IIPacketHandler.sendToServer(new MessageEntityNBTSync(ridden, tag)); - ((EntityMachinegun)ridden).aiming = pressed; - } - mgAiming = pressed; - } - else mgAiming = false; - //--- Camera Handling ---// - if(mgAiming) + if(lowestRidden instanceof ICameraEntity) { - ClientUtils.mc().gameSettings.thirdPersonView = 0; - - if(lowestRidden instanceof EntityMachinegun) + ICameraEntity cameraEntity = (ICameraEntity)lowestRidden; + if(!cameraEntity.isCameraEnabled(player)) + CameraHandler.setEnabled(false); + else { - EntityMachinegun mg = (EntityMachinegun)lowestRidden; - float px = (float)mg.posX, py = (float)mg.posY, pz = (float)mg.posZ; - - float yaw = mg.gunYaw; - float pitch = mg.gunPitch; - - EntityLivingBase psg = (EntityLivingBase)mg.getPassengers().get(0); - float true_head_angle = MathHelper.wrapDegrees(psg.prevRotationYawHead-mg.setYaw); - float true_head_angle2 = MathHelper.wrapDegrees(psg.rotationPitch); - - if(mg.gunYaw < true_head_angle) - yaw += ClientUtils.mc().getRenderPartialTicks()*2f; - else if(mg.gunYaw > true_head_angle) - yaw -= ClientUtils.mc().getRenderPartialTicks()*2f; - - if(Math.ceil(mg.gunYaw) <= Math.ceil(true_head_angle)+1f&&Math.ceil(mg.gunYaw) >= Math.ceil(true_head_angle)-1f) - yaw = true_head_angle; - - if(mg.gunPitch < true_head_angle2) - pitch += ClientUtils.mc().getRenderPartialTicks(); - else if(mg.gunPitch > true_head_angle2) - pitch -= ClientUtils.mc().getRenderPartialTicks(); - - yaw = mg.tripod?MathHelper.clamp(yaw, -82.5F, 82.5F): MathHelper.clamp(yaw, -45.0F, 45.0F); - pitch = MathHelper.clamp(pitch, -20, 20); - - yaw += mg.recoilYaw; - pitch += mg.recoilPitch; - - double true_angle = Math.toRadians(180-mg.setYaw-yaw); - double true_angle2 = Math.toRadians(pitch); - - boolean hasScope = mg.getZoom().shouldZoom(mg.gun, null); - - Vec3d gun_end = IIMath.offsetPosDirection(2.25f-(hasScope?1.25f: 0), true_angle, true_angle2); - Vec3d gun_height = IIMath.offsetPosDirection(0.25f+(hasScope?0.125f: 0f), true_angle, true_angle2+90); - - CameraHandler.setCameraPos(px+0.85*(gun_end.x+gun_height.x), py-1.5f+0.4025+0.85*(gun_end.y+gun_height.y), pz+0.85*(gun_end.z+gun_height.z)); - CameraHandler.setCameraAngle(mg.setYaw+yaw, pitch, 0); + if(!cameraEntity.isThirdPersonAllowed(player)) + mc.gameSettings.thirdPersonView = -1; + + CameraHandler.setCameraPos(cameraEntity.getCameraPos(player, partialTicks)); + CameraHandler.setCameraAngle( + cameraEntity.getCameraYaw(player, partialTicks), + cameraEntity.getCameraPitch(player, partialTicks), + cameraEntity.getCameraRoll(player, partialTicks) + ); CameraHandler.setEnabled(true); } - else if(lowestRidden instanceof EntityMortar) - { - EntityMortar mg = (EntityMortar)lowestRidden; - // CameraHandler.isZooming = false; - if(mg.shootingProgress!=0) - CameraHandler.fovZoom = 0; - - CameraHandler.setCameraPos(mg.posX, mg.posY+0.75, mg.posZ); - CameraHandler.setCameraAngle(mg.rotationYaw, 1+(1f-mg.rotationPitch/-90f)*-1.5f, 0); - CameraHandler.setEnabled(mg.shootingProgress==0); - } - else if(lowestRidden instanceof EntityTripodPeriscope) - { - EntityTripodPeriscope mg = (EntityTripodPeriscope)lowestRidden; - float px = (float)mg.posX, py = (float)mg.posY, pz = (float)mg.posZ; - - CameraHandler.setCameraPos(px, py+1.25, pz); - ClientUtils.mc().player.rotationPitch = MathHelper.clamp(ClientUtils.mc().player.rotationPitch, -50, 50); - ClientUtils.mc().player.prevRotationPitch = MathHelper.clamp(ClientUtils.mc().player.prevRotationPitch, -50, 50); - float y = MathHelper.wrapDegrees(360+mg.periscopeNextYaw-mg.periscopeYaw); - float currentYaw = MathHelper.wrapDegrees(mg.periscopeYaw+event.getPartialTicks()*(Math.signum(y)*MathHelper.clamp(Math.abs(y), 0, TripodPeriscope.turnSpeed))); - - CameraHandler.setCameraAngle(currentYaw, ClientUtils.mc().player.rotationPitch, 0); - CameraHandler.setEnabled(true); - } +//mc.gameSettings.thirdPersonView = -1; +// CameraHandler.setCameraPos(mg.posX, mg.posY+0.75, mg.posZ); +// CameraHandler.setCameraAngle(mg.rotationYaw, 1+(1f-mg.rotationPitch/-90f)*-1.5f, 0); +// CameraHandler.setEnabled(mg.shootingProgress==0); } else CameraHandler.setEnabled(false); @@ -839,18 +758,15 @@ else if(CameraHandler.zoom!=null) if(ridingEntity instanceof EntityVehicleSeat) { EntityVehicleSeat riding = (EntityVehicleSeat)ridingEntity; - if(riding.info!=null&&riding.info.passMouseButtonEvent(event)) + if(riding.info!=null&&riding.info.passMouseButtonEvent(event)&&event.isButtonstate()) event.setCanceled(true); } - else if(ridingEntity instanceof EntityMachinegun) - if(event.getButton()==1) - { - NBTTagCompound tag = new NBTTagCompound(); - tag.setBoolean("clientMessage", true); - tag.setBoolean("shoot", event.isButtonstate()); - IIPacketHandler.sendToServer(new MessageEntityNBTSync(ridingEntity, tag)); + else if(ridingEntity instanceof EntityMountedWeapon) + { + EntityMountedWeapon weapon = (EntityMountedWeapon)ridingEntity; + if(weapon.controls!=null&&weapon.controls.passMouseButtonEvent(event)&&event.isButtonstate()) event.setCanceled(true); - } + } } /** @@ -963,7 +879,7 @@ public void onRenderHand(RenderSpecificHandEvent event) { //Check ridden entity for custom hand rendering Entity ridden = ClientUtils.mc().player.getRidingEntity(); - if(ridden instanceof EntityVehicleSeat) + if(ridden instanceof EntityVehicleSeat||ridden instanceof EntityMountedWeapon) { event.setCanceled(true); return; @@ -1061,7 +977,6 @@ public void onWorldLoad(Load event) return; //Reset static variables - aimingPlayers.clear(); blockDamageClient.clear(); //Reload the particle system @@ -1077,16 +992,17 @@ public void onGameRuleChange(GameRuleChangeEvent event) @SubscribeEvent public void onPostClientTick(ClientTickEvent event) { - if(event.phase==Phase.END) - { - if(ParticleSystem.INSTANCE!=null) - ParticleSystem.INSTANCE.updateParticles(); + if(event.phase!=Phase.END) + return; + Minecraft mc = ClientUtils.mc(); - if(!Weapons.bulletsWhistleSound) - return; + if(ParticleSystem.INSTANCE!=null) + ParticleSystem.INSTANCE.updateParticles(); + + if(mc.world!=null&&mc.player!=null) + { //Make close bullets produce a whistling sound - Minecraft mc = ClientUtils.mc(); - if(mc.world!=null&&mc.player!=null) + if(Weapons.bulletsWhistleSound) { List bullets = mc.world.getEntitiesWithinAABB(EntityAmmoProjectile.class, mc.player.getEntityBoundingBox().grow(3)); for(EntityAmmoProjectile bullet : bullets) @@ -1094,8 +1010,24 @@ public void onPostClientTick(ClientTickEvent event) //higher the velocity (howitzers), lower the tone bullet.playSound(IISounds.bulletFlyby, 0.6f, 1.75f-MathHelper.clamp(bullet.getVelocity()/6f, 0.5f, 1.75f)); } + + //Handle nightvision effect + if(OpenGlHelper.shadersSupported) + { + PotionEffect effect = mc.player.getActivePotionEffect(IIPotions.infraredVision); + if(effect!=null&&!nightVisionActive) + { + mc.entityRenderer.loadShader(IIReference.RES_II.with("shaders/post/nightvision.json")); + ClientRegistry.registerEntityShader(EntityCamera.class, IIReference.RES_II.with("shaders/post/nightvision.json")); + nightVisionActive = true; + } + else if(effect==null&&nightVisionActive) + { + mc.entityRenderer.stopUseShader(); + ClientRegistry.registerEntityShader(EntityCamera.class, null); + nightVisionActive = false; + } + } } } - - } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/ClientProxy.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/ClientProxy.java index 08bf350a2..8897e4f2f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/ClientProxy.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/ClientProxy.java @@ -57,6 +57,7 @@ import pl.pabilo8.immersiveintelligence.api.ShrapnelHandler; import pl.pabilo8.immersiveintelligence.api.ShrapnelHandler.Shrapnel; import pl.pabilo8.immersiveintelligence.api.ammo.AmmoRegistry; +import pl.pabilo8.immersiveintelligence.api.ammo.parts.AmmoComponent; import pl.pabilo8.immersiveintelligence.api.ammo.parts.IAmmoTypeItem; import pl.pabilo8.immersiveintelligence.api.crafting.recipe.IIMultiblockRecipe; import pl.pabilo8.immersiveintelligence.api.data.IIDataTypeUtils; @@ -66,8 +67,9 @@ import pl.pabilo8.immersiveintelligence.client.fx.IIParticles; import pl.pabilo8.immersiveintelligence.client.fx.utils.ParticleRegistry; import pl.pabilo8.immersiveintelligence.client.fx.utils.ParticleSystem; -import pl.pabilo8.immersiveintelligence.client.gui.block.GuiUpgrade; +import pl.pabilo8.immersiveintelligence.client.gui.block.GuiTileUpgrade; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTextures; +import pl.pabilo8.immersiveintelligence.client.gui.entity.GuiEntityUpgrade; import pl.pabilo8.immersiveintelligence.client.manual.IIManualCategory; import pl.pabilo8.immersiveintelligence.client.manual.categories.*; import pl.pabilo8.immersiveintelligence.client.model.IIModelRegistry; @@ -80,10 +82,7 @@ import pl.pabilo8.immersiveintelligence.client.render.ammunition.NavalMineRenderer.NavalMineItemstackRenderer; import pl.pabilo8.immersiveintelligence.client.render.entity.*; import pl.pabilo8.immersiveintelligence.client.render.entity.hans.HansRenderer; -import pl.pabilo8.immersiveintelligence.client.render.entity.vehicle.FieldGunRenderer; -import pl.pabilo8.immersiveintelligence.client.render.entity.vehicle.FieldHowitzerRenderer; -import pl.pabilo8.immersiveintelligence.client.render.entity.vehicle.MotorbikeRenderer; -import pl.pabilo8.immersiveintelligence.client.render.entity.vehicle.TrackedMotorbikeRenderer; +import pl.pabilo8.immersiveintelligence.client.render.entity.vehicle.*; import pl.pabilo8.immersiveintelligence.client.render.entity.weapon.MachinegunRenderer; import pl.pabilo8.immersiveintelligence.client.render.entity.weapon.MortarRenderer; import pl.pabilo8.immersiveintelligence.client.render.entity.weapon.TripodPeriscopeRenderer; @@ -109,13 +108,13 @@ import pl.pabilo8.immersiveintelligence.client.util.font.IIFontRendererCustomGlyphs; import pl.pabilo8.immersiveintelligence.common.*; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Factions; +import pl.pabilo8.immersiveintelligence.common.ammo.components.factory.AmmoComponentFluid; import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataMerger; import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityRedstoneBuffer; import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntitySmallDataBuffer; import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityTimedBuffer; import pl.pabilo8.immersiveintelligence.common.block.fortification.tileentity.TileEntityMineSign; import pl.pabilo8.immersiveintelligence.common.block.metal_device.BlockIIMetalDevice.IIBlockTypes_MetalDevice; -import pl.pabilo8.immersiveintelligence.common.block.metal_device.tileentity.TileEntityLatexCollector; import pl.pabilo8.immersiveintelligence.common.block.metal_device.tileentity.conveyors.*; import pl.pabilo8.immersiveintelligence.common.block.multiblock.gate_multiblock.multiblock.MultiblockAluminiumChainFenceGate.TileEntityAluminiumChainFenceGate; import pl.pabilo8.immersiveintelligence.common.block.multiblock.gate_multiblock.multiblock.MultiblockAluminiumFenceGate.TileEntityAluminiumFenceGate; @@ -138,10 +137,14 @@ import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.naval_mine.EntityNavalMine; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.naval_mine.EntityNavalMineAnchor; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMachinegun; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMortar; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityTripodPeriscope; import pl.pabilo8.immersiveintelligence.common.entity.tactile.EntityAMTTactile; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityDrone; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityMotorbike; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityTrackedMotorbike; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun.EntityFieldFlak; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun.EntityFieldGun; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun.EntityFieldHowitzer; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat; @@ -180,6 +183,7 @@ public class ClientProxy extends CommonProxy public static KeyBinding keybindManualReload, keybindArmorHelmet, keybindArmorExosuit, keybindZoom; public static KeyBinding keybindVehicleEngine, keybindVehicleClutch, keybindVehicleTowing; public static KeyBinding keybindVehicleGearUp, keybindVehicleGearDown, keybindVehicleReductionSwitch; + public static KeyBinding keybindVehicleGunUp, keybindVehicleGunDown, keybindVehicleGunLeft, keybindVehicleGunRight; private EasyNBT storedGuiData = EasyNBT.newNBT(); private HashMap, Block> TEISRRegistryQueue = new HashMap<>(); @@ -332,13 +336,21 @@ public Object getClientGuiElement(int ID, EntityPlayer player, World world, int EnumHand hand; TileEntity te = world.getTileEntity(new BlockPos(x, y, z)); ItemStack stack = player.getHeldItem(hand = (player.getHeldItem(EnumHand.MAIN_HAND).getItem() instanceof IGuiItem?EnumHand.MAIN_HAND: EnumHand.OFF_HAND)); + Entity entity = y==Integer.MIN_VALUE?world.getEntityByID(x): null; - if(ID==IIGUI.UPGRADE.ordinal()&&te instanceof IUpgradableDevice) + if(ID==IIGUI.UPGRADE_TILE.ordinal()&&te instanceof IUpgradableDevice) { IUpgradableDevice upgradeMaster = ((IUpgradableDevice)te).master(); if(upgradeMaster!=null) //noinspection rawtypes,unchecked - return new GuiUpgrade(player, ((TileEntityIEBase)upgradeMaster)); + return new GuiTileUpgrade(player, ((TileEntityIEBase)upgradeMaster)); + } + if(ID==IIGUI.UPGRADE_ENTITY.ordinal()&&entity instanceof IUpgradableDevice) + { + IUpgradableDevice upgradeMaster = ((IUpgradableDevice)entity).master(); + if(upgradeMaster!=null) + //noinspection rawtypes,unchecked + return new GuiEntityUpgrade(player, ((Entity)upgradeMaster)); } GuiScreen gui = null; @@ -387,6 +399,7 @@ public void preInit(FMLPreInitializationEvent event) registerEntityRenderer(EntityDrone.class, DroneRenderer::new); //Towables registerEntityRenderer(EntityFieldHowitzer.class, FieldHowitzerRenderer::new); + registerEntityRenderer(EntityFieldFlak.class, FieldFlakRenderer::new); registerEntityRenderer(EntityFieldGun.class, FieldGunRenderer::new); registerEntityRenderer(EntityTripodPeriscope.class, TripodPeriscopeRenderer::new); @@ -465,14 +478,11 @@ else if(bullet instanceof ItemIIAmmoRevolver) ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySmallDataBuffer.class, new SmallDataBufferRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDataMerger.class, new DataMergerRenderer()); registerTileRenderer(DataDebuggerRenderer.class); - - //TODO: 29.12.2023 latex collector renderer - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLatexCollector.class, new LatexCollectorRenderer()); + registerTileRenderer(LatexCollectorRenderer.class); //Decorations ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMineSign.class, new MineSignRenderer()); - //Tools IIContent.itemTripodPeriscope.setTileEntityItemStackRenderer(TripodPeriscopeRenderer.instance); IIContent.itemMortar.setTileEntityItemStackRenderer(MortarRenderer.instance); @@ -687,6 +697,16 @@ public void init(FMLInitializationEvent event) keybindVehicleReductionSwitch = new IIKeybind("vehicle.gear2.toggle", Keyboard.KEY_G, IIKeybind.CATEGORY_VEHICLES) .withContext(IIKeybind.VEHICLE_KEY_CONTEXT).register(); + //Vehicle Gun Keybinds + keybindVehicleGunUp = new IIKeybind("vehicle.gun.up", Keyboard.KEY_UP, IIKeybind.CATEGORY_VEHICLES) + .withContext(IIKeybind.VEHICLE_KEY_CONTEXT).register(); + keybindVehicleGunDown = new IIKeybind("vehicle.gun.down", Keyboard.KEY_DOWN, IIKeybind.CATEGORY_VEHICLES) + .withContext(IIKeybind.VEHICLE_KEY_CONTEXT).register(); + keybindVehicleGunLeft = new IIKeybind("vehicle.gun.left", Keyboard.KEY_LEFT, IIKeybind.CATEGORY_VEHICLES) + .withContext(IIKeybind.VEHICLE_KEY_CONTEXT).register(); + keybindVehicleGunRight = new IIKeybind("vehicle.gun.right", Keyboard.KEY_RIGHT, IIKeybind.CATEGORY_VEHICLES) + .withContext(IIKeybind.VEHICLE_KEY_CONTEXT).register(); + //Register shaders ShaderUtil.init(); @@ -727,6 +747,11 @@ public void postInit(FMLPostInitializationEvent event) ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(IIContent.blockMetalDevice), IIBlockTypes_MetalDevice.SMALL_DATA_BUFFER.getMeta(), TileEntitySmallDataBuffer.class); ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(IIContent.blockMetalDevice), IIBlockTypes_MetalDevice.DATA_MERGER.getMeta(), TileEntityDataMerger.class); + //Fix colors for fluid ammo components on client + for(AmmoComponent component : AmmoRegistry.getAllComponents()) + if(component instanceof AmmoComponentFluid) + ((AmmoComponentFluid)component).setOverrideColor(IIClientUtils.getFluidTextureColor(((AmmoComponentFluid)component).getFluid())); + //Load Models reloadModels(); IIMultiblockRecipe.loadAllClientSideContent(); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/fx/utils/ParticleDrawStages.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/fx/utils/ParticleDrawStages.java index 796fc01fc..69623d40a 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/fx/utils/ParticleDrawStages.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/fx/utils/ParticleDrawStages.java @@ -102,16 +102,14 @@ public void prepareRender(BufferBuilder buffer, float partialTicks) else GlStateManager.disableTexture2D(); + if(applyLighting) + GlStateManager.enableLighting(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, destFactor); if(this.renderThroughBlocks) GlStateManager.disableDepth(); if(shader!=null) ShaderUtil.useShader(shader, shaderParameters.apply(partialTicks)); - if(applyLighting) - { - GlStateManager.enableLighting(); - - } buffer.begin(GL11.GL_QUADS, vertexFormat); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/fx/utils/ParticleRegistry.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/fx/utils/ParticleRegistry.java index bb825de57..9c8228079 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/fx/utils/ParticleRegistry.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/fx/utils/ParticleRegistry.java @@ -2,10 +2,7 @@ import blusunrize.immersiveengineering.client.ClientUtils; import com.google.gson.JsonObject; -import net.minecraft.client.particle.Particle; -import net.minecraft.client.particle.ParticleCloud; import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -16,17 +13,20 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import pl.pabilo8.immersiveintelligence.api.ammo.PenetrationRegistry; +import pl.pabilo8.immersiveintelligence.client.IIClientUtils; import pl.pabilo8.immersiveintelligence.client.fx.factories.ParticleFactory; import pl.pabilo8.immersiveintelligence.client.fx.particles.AbstractParticle; import pl.pabilo8.immersiveintelligence.client.render.IReloadableModelContainer; -import pl.pabilo8.immersiveintelligence.client.util.tmt.ModelRendererTurbo; import pl.pabilo8.immersiveintelligence.common.IILogger; import pl.pabilo8.immersiveintelligence.common.util.*; import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; import javax.annotation.Nullable; import javax.vecmath.Vector2f; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Set; import java.util.function.Supplier; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -395,90 +395,25 @@ debrisMotion, new Vector2f(IIParticleUtils.randFloat.get()*4, IIParticleUtils.ra } } - - } - - public static void spawnGunfireFX(Vec3d pos, Vec3d direction, float size) - { - ParticleRegistry.spawnParticle("ammo/gunfire", pos, Vec3d.ZERO, IIParticleUtils.toVector2f(direction)) - .withProperty(ParticleProperties.SIZE, size*0.25f); - /*ParticleGunfire particle = new ParticleGunfire(getWorld(), pos, motion, size); - ParticleSystem.addEffect(particle);*/ - } - - //TODO: 04.05.2024 replace with AMT models - public static void spawnTMTModelFX(Vec3d pos, Vec3d motion, float size, ModelRendererTurbo model, ResourceLocation texture) - { - /*Particle particle = new ParticleTMTModel(getWorld(), pos, motion, size, model, texture); - Minecraft.getMinecraft().effectRenderer.addEffect(particle);*/ - } - - public static void spawnFlameFX(Vec3d pos, Vec3d motion, float size, int lifeTime) - { - /*ParticleFlame particle = new ParticleFlame(getWorld(), pos, motion, size, lifeTime); - ParticleSystem.addEffect(particle);*/ - } - - public static void spawnFlameExplosion(Vec3d pos, float size, Random rand) - { - - for(int i = 0; i < 20*size; i += 1) - { - Vec3d v = new Vec3d(1, 0, 0).rotateYaw(i/20f*360f); - - ParticleCloud particle = (ParticleCloud)spawnVanillaParticle(EnumParticleTypes.CLOUD, pos, IIParticleUtils.withY(v.scale(0.25), 0.125)); - if(particle!=null) - { - particle.setRBGColorF(rand.nextFloat()*0.125f, rand.nextFloat()*0.125f, 0); - particle.multipleParticleScaleBy(2.5f); - particle.setMaxAge(10); - } - - } - - } public static void spawnGasCloud(Vec3d pos, float size, Fluid fluid) { //Check if fluid is not null - if(fluid==null) return; - - //Get the color of the fluid - int color = fluid.getColor(); //Assuming the Fluid class has this method - float red = ((color>>16)&255)/255.0F; - float green = ((color>>8)&255)/255.0F; - float blue = (color&255)/255.0F; - - //Spawn multiple particles for the gas cloud effect - for(int i = 0; i < 40*size; i++) - { - //Randomly distribute particles in a larger spherical area - double offsetX = (Math.random()-0.5)*size*3.5; //Increased spread - double offsetY = (Math.random()-0.5)*size*2; //Increased vertical spread - double offsetZ = (Math.random()-0.5)*size*3.5; //Increased spread + if(fluid==null) + return; - Vec3d particlePos = pos.add(new Vec3d(offsetX, offsetY-1.0, offsetZ)); //Lower spawn point by 1 block + IIColor color = IIClientUtils.getFluidTextureColor(fluid); - ParticleCloud particle = (ParticleCloud)spawnVanillaParticle(EnumParticleTypes.CLOUD, particlePos, Vec3d.ZERO); - if(particle!=null) - { - particle.setRBGColorF(red, green, blue); //Set the color of the particle - particle.setMaxAge(160); //Adjust lifespan as needed - particle.multipleParticleScaleBy(5f); //Adjust scale if necessary - } - } + for(int i = 0; i < 10; i++) + spawnParticle("smoke/gas_cloud", pos.add(IIParticleUtils.getRandXZ().scale(size/2)), Vec3d.ZERO, new Vector2f(0, 0)) + .withProperty(ParticleProperties.SIZE, size*1.5f) + .withProperty(ParticleProperties.MAX_LIFETIME, (int)size*55) + .withProperty(ParticleProperties.COLOR, color); } //--- Utils ---// - private static Particle spawnVanillaParticle(EnumParticleTypes particle, Vec3d pos, Vec3d motion) - { - return ClientUtils.mc().effectRenderer.spawnEffectParticle(particle.getParticleID(), - pos.x, pos.y, pos.z, - motion.x, motion.y, motion.z); - } - private static class ParticleFileEntry { ResLoc path; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiAmmunitionCrate.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiAmmunitionCrate.java index c261c2ff7..583e83e5c 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiAmmunitionCrate.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiAmmunitionCrate.java @@ -2,29 +2,24 @@ import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ResourceLocation; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoGuiCategory; -import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoResource; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTemplate; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTextures; +import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.IIGUI; import pl.pabilo8.immersiveintelligence.common.block.metal_device.tileentity.effect_crate.TileEntityAmmunitionCrate; import pl.pabilo8.immersiveintelligence.common.gui.ContainerAmmunitionCrate; -import pl.pabilo8.immersiveintelligence.common.util.IIReference; +import pl.pabilo8.immersiveintelligence.common.util.IIColor; /** * @author Pabilo8 (pabilo@iiteam.net) * @since 17.05.2019 */ -@DecoTemplate(name = "ammunitioncrate", category = DecoGuiCategory.GENERIC_TILE) -public class GuiAmmunitionCrate extends DecoGui +@DecoTemplate(name = "ammunition_crate", category = DecoGuiCategory.GENERIC_TILE) +public class GuiAmmunitionCrate extends DecoTileGui { - @DecoResource - public static final ResourceLocation TEXTURE_AMMO = IIReference.RES_II.with("gui/ammunition_crate"); - public GuiAmmunitionCrate(EntityPlayer player, TileEntityAmmunitionCrate tile) { super(player, tile, IIGUI.AMMUNITION_CRATE); @@ -33,23 +28,32 @@ public GuiAmmunitionCrate(EntityPlayer player, TileEntityAmmunitionCrate tile) @Override public void onInit() { + final IIColor backgroundColor = IIColor.fromPackedRGB(0xd0ebc2); startBackground() - .withBox(null, 0, 0, 176, 76) - .withBox(DecoTextures.BG_WOODEN, DecoTextures.TEMPLATE_ROUND_WOODEN, 0, 87, 176, 92) + .withBox(DecoTextures.BG_STEEL_ROUGH, DecoTextures.TEMPLATE_ROUND, 0, 0, 176, 126+8, backgroundColor) + .withTitleBar(tile) + .conditionally(tile.isUpgradeInstalled(IIContent.UPGRADE_MG_LOADER), builder -> builder + .withNextLayer() + .withBox(DecoTextures.BG_STEEL_ROUGH, DecoTextures.TEMPLATE_ROUND, 176, 0, 48, 126+8, backgroundColor) + .withInventorySlots(SlotStyle.VANILLA, container.inputMG) + ) + .withNextLayer() + .withBox(DecoTextures.BG_WOODEN, DecoTextures.TEMPLATE_ROUND_WOODEN, 0, 126+8, 176, 92) .withInventorySlots(SlotStyle.VANILLA, container.playerInventory) - .withInventorySlots(SlotStyle.IE_CUSTOM1, container.slotsInputrevolver) - .withInventorySlots(SlotStyle.IE_CUSTOM1, container.slotsInputbullet) - .withInventorySlots(SlotStyle.IE_CUSTOM1, container.slotsInputshell) + .withInventorySlots(SlotStyle.VANILLA, container.inputRevolver) + .withInventorySlots(SlotStyle.VANILLA, container.inputBullet) + .withInventorySlots(SlotStyle.VANILLA, container.inputShell) .withInventoryTitleBar() .build(); - addComponents( + + /*addComponents( new DecoImage(0, -45) .withSize(175, 132) .withImageLocation(TEXTURE_AMMO, true) .withUV(256, 0, 0, 175, 132) - ); + );*/ } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiChemicalBath.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiChemicalBath.java index e45e62457..9a8d77b21 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiChemicalBath.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiChemicalBath.java @@ -2,7 +2,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.fml.common.Optional.Method; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBar; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoFluidTank; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; @@ -21,7 +21,7 @@ * @since 10.07.2019 */ @DecoTemplate(name = "chemical_bath", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiChemicalBath extends DecoGui +public class GuiChemicalBath extends DecoTileGui { @DecoResource public static ResLoc TEXTURE = IIReference.RES_II.with("gui/chemical_bath"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiChemicalPainter.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiChemicalPainter.java index 28fbed2b1..c6d6aa689 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiChemicalPainter.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiChemicalPainter.java @@ -3,7 +3,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.Optional.Method; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoColorPickerPanel; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBar; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoFluidTank; @@ -27,7 +27,7 @@ * @since 10.07.2019 */ @DecoTemplate(name = "chemical_painter", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiChemicalPainter extends DecoGui +public class GuiChemicalPainter extends DecoTileGui { @DecoResource public static final ResourceLocation TEXTURE = IIReference.RES_II.with("gui/chemical_painter"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiCoagulator.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiCoagulator.java index 16b3d32e5..8a1ad49af 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiCoagulator.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiCoagulator.java @@ -2,7 +2,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBar; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoFluidTank; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoItemStackDisplay; @@ -21,7 +21,7 @@ * @since 12.12.2025 */ @DecoTemplate(name = "coagulator", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiCoagulator extends DecoGui +public class GuiCoagulator extends DecoTileGui { @DecoResource public static final ResourceLocation TEXTURE = IIReference.RES_II.with("gui/coagulator"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiDataMerger.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiDataMerger.java deleted file mode 100644 index dcf5c83b1..000000000 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiDataMerger.java +++ /dev/null @@ -1,173 +0,0 @@ -package pl.pabilo8.immersiveintelligence.client.gui.block; - -import blusunrize.immersiveengineering.client.ClientUtils; -import blusunrize.immersiveengineering.client.gui.GuiIEContainerBase; -import blusunrize.immersiveengineering.client.gui.elements.GuiButtonIE; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.math.MathHelper; -import org.lwjgl.input.Keyboard; -import org.lwjgl.opengl.GL11; -import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; -import pl.pabilo8.immersiveintelligence.api.data.DataPacket; -import pl.pabilo8.immersiveintelligence.api.data.types.DataTypeInteger; -import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType; -import pl.pabilo8.immersiveintelligence.client.gui.ITabbedGui; -import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoColors; -import pl.pabilo8.immersiveintelligence.common.IIUtils; -import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataMerger; -import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataMerger.DataMergerSendMode; -import pl.pabilo8.immersiveintelligence.common.gui.ContainerDataMerger; -import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; -import pl.pabilo8.immersiveintelligence.common.network.messages.MessageIITileSync; -import pl.pabilo8.immersiveintelligence.common.util.IIReference; -import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; - -import java.io.IOException; -import java.util.ArrayList; - -/** - * @author Pabilo8 (pabilo@iiteam.net) - * @since 30.06.2019 - */ -public class GuiDataMerger extends GuiIEContainerBase implements ITabbedGui -{ - public static final String texture = ImmersiveIntelligence.MODID+":textures/gui/data_merger.png"; - - public TileEntityDataMerger tile; - public InventoryPlayer playerInv; - public DataPacket settingsPacket; - public GuiButtonIE buttonForward, buttonBackward; - - public GuiDataMerger(EntityPlayer player, TileEntityDataMerger tile) - { - super(new ContainerDataMerger(player, tile)); - this.ySize = 222; - this.playerInv = player.inventory; - this.tile = tile; - this.settingsPacket = tile.settingsPacket; - } - - @Override - public void initGui() - { - super.initGui(); - - this.buttonList.clear(); - addButton(buttonForward = new GuiButtonIE(0, guiLeft+4, guiTop+16, 8, 6, "", texture, 128, 222).setHoverOffset(8, 0)); - addButton(buttonBackward = new GuiButtonIE(1, guiLeft+4, guiTop+24, 8, 6, "", texture, 128, 228).setHoverOffset(8, 0)); - - } - - @Override - public void updateScreen() - { - super.updateScreen(); - } - - @Override - protected void actionPerformed(GuiButton button) - { - if(button==buttonForward||button==buttonBackward) - { - //cycle the mode depending on button - tile.mode = IIUtils.cycleEnum(button==buttonForward, DataMergerSendMode.class, tile.mode); - //send update to server side - IIPacketHandler.sendToServer(new MessageIITileSync(tile, EasyNBT.newNBT().withByte("mode", tile.mode.ordinal()))); - } - } - - @Override - public void drawScreen(int mx, int my, float partial) - { - super.drawScreen(mx, my, partial); - this.fontRenderer.drawString(I18n.format(IIReference.DESCRIPTION_KEY+"data_merger."+tile.mode), guiLeft+14, guiTop+19, DecoColors.H1.getPackedRGB()); - - ArrayList tooltip = new ArrayList<>(); - - int i = 0; - for(char c : DataPacket.VARIABLE_NAMES) - { - int xoff = (int)Math.floor(i/6f), yoff = i%6; - int col = 0xefefef; - if(settingsPacket.get(c) instanceof DataTypeInteger) - { - int o = ((DataTypeInteger)settingsPacket.get(c)).value; - switch(o) - { - case -2: - col = 0x26732e; - break; - case -1: - col = 0x7c9d4b; - break; - case 1: - col = 0xe5a64d; - break; - case 2: - col = 0x922020; - break; - } - } - this.fontRenderer.drawString(String.valueOf(c), guiLeft+54+(xoff*20)+6-(int)(fontRenderer.getCharWidth(c)/2f), guiTop+16+(yoff*20)+2, col); - i += 1; - } - - } - - @Override - public void onGuiClosed() - { - IIPacketHandler.sendToServer(new MessageIITileSync(tile, EasyNBT.newNBT().withTag("packet", settingsPacket.serializeNBT()))); - super.onGuiClosed(); - } - - @Override - protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException - { - super.mouseClicked(mouseX, mouseY, mouseButton); - if(mouseX >= guiLeft+54&&mouseX <= guiLeft+166&&mouseY >= guiTop+16&&mouseY <= guiTop+128) - { - boolean fw; - if(mouseButton==0&&!Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) - fw = true; - else if(mouseButton==1||Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) - fw = false; - else - return; - - int i_pos_x = (int)Math.floor((mouseX-guiLeft-54)/20f); - int i_pos_y = (int)Math.floor((mouseY-guiTop-16)/20f); - - if(mouseX <= guiLeft+(i_pos_x*20)+12+54&&mouseY <= guiTop+(i_pos_y*20)+12+16) - switchMode(DataPacket.VARIABLE_NAMES[i_pos_y+(i_pos_x*6)], fw); - } - } - - /** - * Draws the background layer of this container (behind the items). - */ - @Override - protected void drawGuiContainerBackgroundLayer(float f, int mx, int my) - { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - ClientUtils.bindTexture(texture); - this.drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - } - - void switchMode(char c, boolean forward) - { - DataType p = settingsPacket.get(c); - //increment or decrement the number, clamp it between -2 and 2 - if(p instanceof DataTypeInteger) - settingsPacket.set(c, new DataTypeInteger( - MathHelper.clamp(((DataTypeInteger)p).value+(forward?1: -1), -2, 2) - )); - else - //if there's no such variable, set it to -1 or 1, as 0 is the default state - settingsPacket.set(c, new DataTypeInteger(forward?1: -1)); - } - -} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiDataRedstoneInterface.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiDataRedstoneInterface.java index 65e73500d..f349c06eb 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiDataRedstoneInterface.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiDataRedstoneInterface.java @@ -7,7 +7,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import pl.pabilo8.immersiveintelligence.client.IIClientUtils; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.DecoComponent.MouseButton; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoArrows; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; @@ -38,7 +38,7 @@ * @since 09.02.2020 */ @DecoTemplate(name = "data_redstone_interface", category = DecoGuiCategory.DATA_TILE) -public class GuiDataRedstoneInterface extends DecoGui +public class GuiDataRedstoneInterface extends DecoTileGui { @DecoResource public static ResourceLocation PROGRESS_IMAGE = ResLoc.of(IIReference.RES_II, "gui/data_input_machine"); @@ -116,7 +116,7 @@ public void onInit() new DecoList(32, 8) .withSize(136+24+8+2, 120) - .withEntries(redstoneToData ? dataSettings : redstoneSettings) + .withEntries(redstoneToData?dataSettings: redstoneSettings) .withCreateAction(ConversionSetting::new) .withScroll(scroll) .withGuiSaveAction(gui -> this.scroll = gui.getScroll()) diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiElectrolyzer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiElectrolyzer.java index a413163f9..d591a1c1e 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiElectrolyzer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiElectrolyzer.java @@ -3,7 +3,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.Optional.Method; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBar; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoFluidTank; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; @@ -22,7 +22,7 @@ * @since 10.07.2019 */ @DecoTemplate(name = "electrolyzer", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiElectrolyzer extends DecoGui +public class GuiElectrolyzer extends DecoTileGui { @DecoResource public static final ResourceLocation TEXTURE = ResLoc.of(IIReference.RES_II, "gui/electrolyzer"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiFiller.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiFiller.java index 8d8c70ce5..f31821d98 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiFiller.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiFiller.java @@ -3,7 +3,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.Optional.Method; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBar; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoDustTank; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; @@ -23,7 +23,7 @@ * @since 10.07.2019 */ @DecoTemplate(name = "filler", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiFiller extends DecoGui +public class GuiFiller extends DecoTileGui { @DecoResource public static final ResourceLocation TEXTURE = IIReference.RES_II.with("gui/filler"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiFuelStation.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiFuelStation.java index f286bc239..aaf86a32a 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiFuelStation.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiFuelStation.java @@ -2,7 +2,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBar; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoFluidTank; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; @@ -18,7 +18,7 @@ * @since 10.07.2019 */ @DecoTemplate(name = "fuel_station", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiFuelStation extends DecoGui +public class GuiFuelStation extends DecoTileGui { @DecoResource public static final ResourceLocation TEXTURE = IIReference.RES_II.with("gui/fuel_station"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiGearbox.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiGearbox.java index 5b6ce9416..77a952cb0 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiGearbox.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiGearbox.java @@ -3,7 +3,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.text.TextFormatting; import pl.pabilo8.immersiveintelligence.api.rotary.IIRotaryUtils; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBarGroup; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; @@ -17,7 +17,7 @@ * @since 10.07.2019 */ @DecoTemplate(name = "wooden_gearbox", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiGearbox extends DecoGui +public class GuiGearbox extends DecoTileGui { public GuiGearbox(EntityPlayer player, TileEntityGearbox tile) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiMedicalCrate.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiMedicalCrate.java index d496cf09c..c553be1e3 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiMedicalCrate.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiMedicalCrate.java @@ -2,7 +2,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoFluidTank; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; @@ -23,7 +23,7 @@ */ @DecoTemplate(name = "medicalcrate", category = DecoGuiCategory.GENERIC_TILE) -public class GuiMedicalCrate extends DecoGui +public class GuiMedicalCrate extends DecoTileGui { @DecoResource diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiMetalCrate.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiMetalCrate.java index ab7c75331..906c2aaa0 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiMetalCrate.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiMetalCrate.java @@ -1,7 +1,7 @@ package pl.pabilo8.immersiveintelligence.client.gui.block; import net.minecraft.entity.player.EntityPlayer; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoGuiCategory; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTemplate; @@ -15,7 +15,7 @@ * @since 17.05.2019 */ @DecoTemplate(name = "metal_crate", category = DecoGuiCategory.GENERIC_TILE) -public class GuiMetalCrate extends DecoGui> +public class GuiMetalCrate extends DecoTileGui> { public GuiMetalCrate(EntityPlayer player, TileEntityMetalCrate tile) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiPrecisionAssembler.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiPrecisionAssembler.java index 239d7bc06..c9a9a7f36 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiPrecisionAssembler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiPrecisionAssembler.java @@ -3,7 +3,7 @@ import blusunrize.immersiveengineering.common.util.Utils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBar; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage.ImageAnimationDirection; @@ -25,7 +25,7 @@ */ @DecoTemplate(name = "precision_assembler", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiPrecisionAssembler extends DecoGui +public class GuiPrecisionAssembler extends DecoTileGui { @DecoResource public static final ResourceLocation TEXTURE_PRE = IIReference.RES_II.with("gui/precision_assembler"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiPrintingPress.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiPrintingPress.java index d77478639..9495a41a8 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiPrintingPress.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiPrintingPress.java @@ -2,7 +2,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBar; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoFluidTank; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; @@ -23,7 +23,7 @@ * @since 10.07.2019 */ @DecoTemplate(name = "printing_press", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiPrintingPress extends DecoGui +public class GuiPrintingPress extends DecoTileGui { @DecoResource public static ResourceLocation TEXTURE = ResLoc.of(IIReference.RES_II, "gui/printing_press"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiProjectileWorkshop.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiProjectileWorkshop.java index 01b54e7dc..b2df81d98 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiProjectileWorkshop.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiProjectileWorkshop.java @@ -1,12 +1,14 @@ package pl.pabilo8.immersiveintelligence.client.gui.block; import blusunrize.immersiveengineering.api.crafting.IngredientStack; +import blusunrize.immersiveengineering.common.IEContent; import blusunrize.immersiveengineering.common.util.Utils; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.TextFormatting; import pl.pabilo8.immersiveintelligence.api.ammo.AmmoRegistry; import pl.pabilo8.immersiveintelligence.api.ammo.enums.CoreType; import pl.pabilo8.immersiveintelligence.api.ammo.enums.FuseType; @@ -18,7 +20,9 @@ import pl.pabilo8.immersiveintelligence.api.ammo.utils.AmmoBallisticsCache; import pl.pabilo8.immersiveintelligence.api.ammo.utils.AmmoBallisticsCache.CachedBallisticStats; import pl.pabilo8.immersiveintelligence.api.ammo.utils.IIAmmoUtils; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.api.crafting.BulletComponentStack; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoDropdown; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.label.DecoLabel; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoEntryPanelBuilder; @@ -27,6 +31,7 @@ import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoItemStackDisplay; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoScenarioDisplay; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage.ImageAnimationDirection; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; import pl.pabilo8.immersiveintelligence.client.util.amt.parts.AMTBullet; @@ -37,11 +42,13 @@ import pl.pabilo8.immersiveintelligence.common.IIUtils; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityProjectileWorkshop; import pl.pabilo8.immersiveintelligence.common.gui.ContainerProjectileWorkshop; +import pl.pabilo8.immersiveintelligence.common.util.IIColor; import pl.pabilo8.immersiveintelligence.common.util.IIReference; import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; import pl.pabilo8.immersiveintelligence.common.util.multiblock.util.MultiblockInteractablePart; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -52,8 +59,10 @@ * @since 10.07.2019 */ @DecoTemplate(name = "projectile_workshop", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiProjectileWorkshop extends DecoGui +public class GuiProjectileWorkshop extends DecoTileGui { + private static final String GUI_KEY = IIReference.GUI_LABEL_KEY+"projectile_workshop."; + @DecoResource public static ResourceLocation PROGRESS_BAR = IIReference.RES_II.with("gui/projectile_workshop"); @DecoResource @@ -83,7 +92,7 @@ public class GuiProjectileWorkshop extends DecoGui coreTypeDropdown; private IAmmoTypeItem ammoType; private AmmoCore ammoCore; @@ -93,8 +102,6 @@ public class GuiProjectileWorkshop extends DecoGui 0.5f?tile.lid1: tile.lid2), true); + syncAnimatedParts(openedPart = Utils.RAND.nextGaussian() > 0.5f?tile.lid1: tile.lid2, true); //Add background startBackground() - .withBox(DecoTextures.BG_STEEL_ROUGH, DecoTextures.TEMPLATE_SQUARE, 0, 0, 256, 130) + .withBox(DecoTextures.BG_STEEL_ROUGH, DecoTextures.TEMPLATE_SQUARE, 0, 0, hasFillerUpgrade?176: 256, 130) .withTitleBar(tile) .withNextLayer() - .withBox(DecoTextures.BG_WOODEN, DecoTextures.TEMPLATE_ROUND_WOODEN, 44, 136, 176, 92) + .withBox(DecoTextures.BG_WOODEN, DecoTextures.TEMPLATE_ROUND_WOODEN, hasFillerUpgrade?0: 44, 136, 176, 92) .withInventorySlots(SlotStyle.VANILLA, container.playerInventory) .withInventoryTitleBar() @@ -135,6 +142,13 @@ public void onInit() .withNextLayer() .withBox(DecoTextures.BG_PAPER, DecoTextures.TEMPLATE_TICKET, 44, 18, 96, 72) ) + .conditionally(hasFillerUpgrade, builder -> builder + .withInventorySlots(SlotStyle.IE_INPUT, container.inputSlot) + .withInventorySlots(SlotStyle.IE_INPUT, container.componentInputSlot) + .withNextLayer() + .withBox(DecoTextures.BG_PAPER, DecoTextures.TEMPLATE_PAPER, 4, 128+8-64-4, 176-4-8, 64) + .withTitleBar(GUI_KEY+"component_info", DecoAlignment.TOP_LEFT) + ) .build(); //Add foreground @@ -150,7 +164,113 @@ public void onInit() private void addCoreFillerComponents() { + //Upgraded + addComponents( + //Energy bar + new DecoBar(176-8, 4) + .withSize(12, 64) + .withTemplate(DecoTemplates.BAR_ELECTRIC_ENERGY.apply(tile.energyStorage)), + //Right-side paper panel + this.fillerInfoPanel = new DecoPanel(4, 128+8-64+4) + .withSize(176, 64) + .withBackground(null), + //Stored component display + new DecoItemStackDisplay(176/2-9, 12) + .withSize(16, 16) + .withOnTooltip(gui -> { + AmmoComponent current = tile.componentInside.getComponent(); + if(current==null||tile.componentInside.amount <= 0) + return Collections.singleton(I18n.format("gui.immersiveengineering.empty")); + return Arrays.asList( + tile.componentInside.getColor().getHexCol(tile.componentInside.getTranslatedName()), + tile.componentInside.amount+" mB" + ); + }) + .withBackgroundTexture(DecoSprite.atlasSprite(DecoTextures.SLOT_IE, 32, true)) + .withProgressBar(partialTicks -> tile.componentInside.getAmountPercentage(), + () -> new IIColor[]{tile.componentInside.getColor()} + ), + new DecoItemStackDisplay(176-8-24+2, 45-8) + .withSize(16, 16) + .withBackgroundTexture(DecoSprite.atlasSprite(DecoTextures.SLOT_IE, 32, true)), + + //Progress bar background + new DecoImage(8+64+8+2+1-48-2, 28+4+4+4+1) + .withSize(48, 8) + .withImageLocation(PROGRESS_BAR, true) + .withUV(64, 16, 11, 16+48, 11+8), + new DecoImage(8+64+8+2+1, 28+4+4) + .withSize(8, 19) + .withImageLocation(PROGRESS_BAR, true) + .withUV(64, 37, 19, 37+8, 19+19), + new DecoImage(8+64+8+2+1+2+8, 28+4+4+4) + .withSize(48, 10) + .withImageLocation(PROGRESS_BAR, true) + .withUV(64, 16, 0, 16+48, 10), + + //Progress bar + new DecoImage(8+64+8+2+1-48, 28+4+4+4+1+1) + .withSize(44, 6) + .withImageLocation(PROGRESS_BAR, true) + .withUV(64, 0, 47, 44, 47+6) + .withAnimation(ImageAnimationDirection.LEFT_TO_RIGHT, DecoGuiUtils.getMultiblockProductionSingleProgress(tile, 0f, 0.45f)), + new DecoImage(8+64+8+2+1, 28+4+4) + .withSize(8, 19) + .withImageLocation(PROGRESS_BAR, true) + .withUV(64, 45, 19, 45+8, 19+19) + .withAnimation(ImageAnimationDirection.LEFT_TO_RIGHT, DecoGuiUtils.getMultiblockProductionSingleProgress(tile, 0.45f, 0.55f)), + new DecoImage(8+64+8+2+1+2+8+2, 28+4+4+4+2) + .withSize(44, 6) + .withImageLocation(PROGRESS_BAR, true) + .withUV(64, 0, 39, 44, 39+6) + .withAnimation(ImageAnimationDirection.LEFT_TO_RIGHT, DecoGuiUtils.getMultiblockProductionSingleProgress(tile, 0.55f, 1f)) + ); + + addValueListener(() -> tile.componentInside.serializeNBT().toString()+"|"+tile.componentFillAmount) + .addObserver(hash -> updateFillerInfo()); + updateFillerInfo(); + } + + private void updateFillerInfo() + { + BulletComponentStack stack = tile.componentInside; + this.fillerInfoPanel.cleanup(); + if(stack==null||stack.isEmpty()||stack.component==null) + return; + fillerInfoPanel.addLabel(TextFormatting.ITALIC+stack.component.getTranslatedName(), 4, 0) + .withSize(76, 9) + .withAlign(DecoAlignment.LEFT); + fillerInfoPanel.addLabel(I18n.format(GUI_KEY+"component.role", stack.component.getRole().getLocalizedName()), 4, 12) + .withSize(100, 9) + .withAlign(DecoAlignment.LEFT); + fillerInfoPanel.addLabel(I18n.format(GUI_KEY+"component.density", stack.component.getDensity()), 4, 24) + .withSize(100, 9) + .withAlign(DecoAlignment.LEFT); + fillerInfoPanel.addLabel(I18n.format(GUI_KEY+"component.slots_taken", stack.component.getSlotsTaken()), 4, 36) + .withSize(100, 9) + .withAlign(DecoAlignment.LEFT); + if(stack.component.showInManual()) + fillerInfoPanel.addComponent(new DecoButton(176-6-16-8-2, -4) + .withSize(20, 20) + + .withBackground(DecoTextures.COMPONENT_BUTTON) + .withBackgroundColor(IIColor.fromPackedRGB(0x7A7ABC)) + .withPadding(2, 2, 2, 2) + .withIconAlignment(DecoAlignment.CENTER) + //Engineer's Manual + .withIcon(new ItemStack(IEContent.itemTool, 1, 3)) + .withTranslatedTooltip(IIReference.GUI_TOOLTIP_KEY+"widget.manual.page") + + .withOnLMBPressed(() -> { + int index = AmmoRegistry.getAllComponents().stream() + .filter(AmmoPart::showInManual) + .filter(c -> !c.getMaterial().getExampleStack().isEmpty()) + .collect(Collectors.toList()) + .indexOf(stack.component); + openManualWidget("bullet_components", index); + }) + ); } private void addCoreWorkshopComponents() @@ -176,12 +296,12 @@ private void addCoreWorkshopComponents() new DecoLabel(fontRenderer, 20, 2) .withSize(48, 18) .withAlign(DecoAlignment.LEFT) - .withText("Core") + .withText(GUI_KEY+"entry.core") ) .withElementApplyMethod(this::drawCoreTypeEntry) - .withElementTooltip(typeMeta -> "a") + .withElementTooltip(typeMeta -> GUI_KEY+"tooltip.core_type") ) - .withTranslatedTooltip("Core Type"), + .withTranslatedTooltip(GUI_KEY+"tooltip.core_type"), new DecoDropdown>(0, 93) .withSize(144, 20) @@ -203,13 +323,13 @@ private void addCoreWorkshopComponents() new DecoLabel(fontRenderer, 20, 2) .withSize(48, 18) .withAlign(DecoAlignment.LEFT) - .withText("Type") + .withText(GUI_KEY+"entry.type") ) .withElementApplyMethod(this::drawAmmoTypeEntry) - .withElementTooltip(typeMeta -> "a") + .withElementTooltip(typeMeta -> I18n.format(GUI_KEY+"tooltip.ammunition_type")) ) - .withTranslatedTooltip("Ammunition Type"), + .withTranslatedTooltip(GUI_KEY+"tooltip.ammunition_type"), //3D display and cost label item scenario = new DecoScenarioDisplay(46, 20) .withSize(80, 60) @@ -229,14 +349,28 @@ private void addCoreWorkshopComponents() .withSize(12, 69) .withTemplate(DecoTemplates.BAR_ELECTRIC_ENERGY.apply(tile.energyStorage)), - //Progress bar + //Progress bar background new DecoImage(8, 28) - .withSize(37, 39) + .withSize(16, 29) + .withImageLocation(PROGRESS_BAR, true) + .withUV(64, 0, 0, 16, 29), + new DecoImage(8, 28+29) + .withSize(37, 10) .withImageLocation(PROGRESS_BAR, true) - .withUV(64, 0, 0, 37, 39) + .withUV(64, 0, 29, 37, 29+10), + //Progress bar + new DecoImage(8+2, 28+2) + .withSize(12, 27) + .withImageLocation(PROGRESS_BAR, true) + .withUV(64, 52, 26, 52+12, 26+27) + .withAnimation(ImageAnimationDirection.TOP_TO_BOTTOM, DecoGuiUtils.getMultiblockProductionSingleProgress(tile, 0f, 0.6f)), + new DecoImage(8+2+4, 28+2+27+1) + .withSize(29, 7) + .withImageLocation(PROGRESS_BAR, true) + .withUV(64, 35, 57, 35+29, 57+7) + .withAnimation(ImageAnimationDirection.LEFT_TO_RIGHT, DecoGuiUtils.getMultiblockProductionSingleProgress(tile, 0.6f, 1f)) ); - addLabel("Cost:", 48, 79) - .withSize(78, 9); + addLabel(GUI_KEY+"cost", 48, 79); costLabel = addLabel("", 48, 79) .withSize(62, 9) .withAlign(DecoAlignment.RIGHT); @@ -251,7 +385,7 @@ private void updateCoreInfo() { exampleStackDisplay.withStack(ItemStack.EMPTY); scenario.withModel(false, new AMTLocator("missingno", Vec3d.ZERO)); - costLabel.withText("Cost: 250 Pabulions and one Yevreiski Cent"); + costLabel.withText(GUI_KEY+"invalid_cost"); return; } @@ -264,7 +398,7 @@ private void updateCoreInfo() .withSelectedEntry(coreType); //List cost, available materials and update 3D model - costLabel.withText(ammoType.getCoreMaterialNeeded()+"x"); + costLabel.withRawText(I18n.format(GUI_KEY+"unit.multiplier", ammoType.getCoreMaterialNeeded())); List stacks = AmmoRegistry.getAllCores().stream() .map(AmmoCore::getMaterial) .map(IngredientStack::getExampleStack) @@ -280,7 +414,7 @@ private void updateCoreInfo() ammoInfoPanel.cleanup(); //Core material dropdown ammoInfoPanel.addLabel(new DecoLabel(fontRenderer, 0, 8) - .addText("Material Preview") + .withText(GUI_KEY+"material_preview") .withSize(ammoInfoPanel.width, 8) .withAlign(DecoAlignment.CENTER) ); @@ -304,7 +438,7 @@ private void updateCoreInfo() new DecoLabel(fontRenderer, 20, 2) .withSize(48, 16) .withAlign(DecoAlignment.LEFT) - .withText("Type") + .withText(GUI_KEY+"entry.type") ) .withElementApplyMethod(this::drawAmmoCoreEntry) @@ -317,19 +451,19 @@ private void updateCoreInfo() //Core ammoInfoPanel.addLabel(new DecoLabel(fontRenderer, 0, 37) - .addText("Core") + .withText(GUI_KEY+"section.core") .withSize(ammoInfoPanel.width, 8) .withAlign(DecoAlignment.CENTER) ); addImageWithLabel(1, 45, COMPONENT_SLOTS, coreType.getComponentSlots(), - "Component Slots"); + GUI_KEY+"tooltip.component_slots"); addImageWithLabel(ammoInfoPanel.width/2, 45, COMPONENT_SHAPE, "desc.immersiveintelligence.effect_shape."+coreType.getEffectShape().getName().toLowerCase(), - "Component Effect Shape"); + GUI_KEY+"tooltip.component_effect_shape"); - addImageWithLabel(1, 45+13, COMPONENT_EFFICIENCY, coreType.getComponentEffectivenessMod()*ammoCore.getExplosionModifier()+"x", - "Component Efficiency Modifier", "Determines potency.", "Responsible for explosive power, chemical gas concentration."); - addImageWithLabel(ammoInfoPanel.width/2, 45+13, COMPONENT_SIZE, Utils.formatDouble(ammoType.getComponentSize(), "0.##")+"x", - "Component Size Multiplier", "Determines component volume, responsible for explosion radius, gas spread range multiplier."); + addImageWithLabel(1, 45+13, COMPONENT_EFFICIENCY, I18n.format(GUI_KEY+"unit.multiplier", coreType.getComponentEffectivenessMod()*ammoCore.getExplosionModifier()), + GUI_KEY+"tooltip.component_efficiency", GUI_KEY+"tooltip.component_efficiency.line1", GUI_KEY+"tooltip.component_efficiency.line2"); + addImageWithLabel(ammoInfoPanel.width/2, 45+13, COMPONENT_SIZE, I18n.format(GUI_KEY+"unit.multiplier", Utils.formatDouble(ammoType.getComponentSize(), "0.##")), + GUI_KEY+"tooltip.component_size", GUI_KEY+"tooltip.component_size.line1"); //Ballistics if(ammoType.getClass().isAnnotationPresent(IIAmmoProjectile.class)) @@ -338,30 +472,32 @@ private void updateCoreInfo() assert projectileInfo!=null; CachedBallisticStats stats = AmmoBallisticsCache.get(ammoType, ammoType.getAmmoStack(ammoCore, coreType, FuseType.CONTACT)); ammoInfoPanel.addLabel(new DecoLabel(fontRenderer, 0, 73) - .addText("Ballistics") + .withText(GUI_KEY+"section.ballistics") .withSize(ammoInfoPanel.width, 8) .withAlign(DecoAlignment.CENTER) ); addImageWithLabel(1, 81-2, MASS, Utils.formatDouble(ammoType.getCoreMass(ammoCore, new AmmoComponent[0]), "0.##"), - "Core Mass"); + GUI_KEY+"tooltip.core_mass"); addImageWithLabel(ammoInfoPanel.width/2, 81-2, DAMAGE, Utils.formatDouble(ammoType.getDamage()*ammoCore.getDamageModifier()*coreType.getDamageMod(), "0.##"), - "Damage Dealt"); - addImageWithLabel(1, 81+13, VELOCITY, ammoType.getVelocity()+" b/t", - "Velocity"); + GUI_KEY+"tooltip.damage_dealt"); + addImageWithLabel(1, 81+13, VELOCITY, I18n.format(GUI_KEY+"unit.blocks_per_tick", ammoType.getVelocity()), + GUI_KEY+"tooltip.velocity"); addImageWithLabel(ammoInfoPanel.width/2, 81+13, AVAILABLE_FUZES, ammoType.getAllowedFuseTypes().length+"/"+FuseType.values().length, - "Available Fuzes"); + GUI_KEY+"tooltip.available_fuzes"); addImageWithLabel(1, 81+13+13, PENETRATION_HARDNESS, - Utils.formatDouble(IIAmmoUtils.getCombinedDepth(ammoType, coreType), "0.##")+"b "+ - I18n.format("desc.immersiveintelligence.penetration_hardness."+IIAmmoUtils.getCombinedHardness(ammoCore, coreType).getName().toLowerCase()), - "Penetration Hardness"); + I18n.format(GUI_KEY+"value.penetration_hardness", + Utils.formatDouble(IIAmmoUtils.getCombinedDepth(ammoType, coreType), "0.##"), + I18n.format("desc.immersiveintelligence.penetration_hardness."+IIAmmoUtils.getCombinedHardness(ammoCore, coreType).getName().toLowerCase()) + ), + GUI_KEY+"tooltip.penetration_hardness"); /*addImageWithLabel(ammoInfoPanel.width/2, 81+13+13, MAX_PENETRATION_DEPTH, , "Max. Penetration Depth");*/ - addImageWithLabel(1, 81+13+13+13, FLAT_TRAJECTORY_RANGE, Utils.formatDouble(stats.getMaxDirectRange(), "0.##")+"b", - "Flat-Trajectory Range"); + addImageWithLabel(1, 81+13+13+13, FLAT_TRAJECTORY_RANGE, I18n.format(GUI_KEY+"unit.blocks", Utils.formatDouble(stats.getMaxDirectRange(), "0.##")), + GUI_KEY+"tooltip.flat_trajectory_range"); addImageWithLabel(ammoInfoPanel.width/2, 81+13+13+13, ARTILLERY_RANGE, projectileInfo.artillery()? - Utils.formatDouble(stats.getGetMaxArtilleryRange(), "0.##")+"b": "-", - "Max. Artillery Range"); + I18n.format(GUI_KEY+"unit.blocks", Utils.formatDouble(stats.getGetMaxArtilleryRange(), "0.##")): "-", + GUI_KEY+"tooltip.max_artillery_range"); } } @@ -406,7 +542,11 @@ private void addImageWithLabel(int x, int y, ResourceLocation icon, Object value @Override protected EasyNBT onSaveTileData() { - return super.onSaveTileData() + EasyNBT nbt = super.onSaveTileData(); + if(hasFillerUpgrade) + return nbt.withInt("component_fill_amount", tile.componentFillAmount); + + return nbt .withEnum("core_type", coreType) .withString("produced_bullet", ammoType.getName()); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiRepairCrate.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiRepairCrate.java index 7b9c69847..980e6684a 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiRepairCrate.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiRepairCrate.java @@ -2,7 +2,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoGuiCategory; @@ -21,7 +21,7 @@ * @since 24.10.2025 */ @DecoTemplate(name = "repaircrate", category = DecoGuiCategory.GENERIC_TILE) -public class GuiRepairCrate extends DecoGui +public class GuiRepairCrate extends DecoTileGui { @DecoResource diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSawmill.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSawmill.java index 66bb2f178..73c4c6d49 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSawmill.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSawmill.java @@ -2,7 +2,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBarGroup; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage.ImageAnimationDirection; @@ -21,7 +21,7 @@ * @since 10.07.2019 */ @DecoTemplate(name = "wooden_gearbox", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiSawmill extends DecoGui +public class GuiSawmill extends DecoTileGui { @DecoResource public static final ResourceLocation PROGRESS_ARROW = ResLoc.of(IIReference.RES_II, "gui/sawmill"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSkycartStation.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSkycartStation.java index 35dba9928..f653afc51 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSkycartStation.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSkycartStation.java @@ -3,7 +3,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.text.TextFormatting; import pl.pabilo8.immersiveintelligence.api.rotary.IIRotaryUtils; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBarGroup; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; @@ -20,7 +20,7 @@ * @since 10.07.2019 */ @DecoTemplate(name = "skycart_station", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiSkycartStation extends DecoGui +public class GuiSkycartStation extends DecoTileGui { public GuiSkycartStation(EntityPlayer player, TileEntitySkyCartStation tile) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSkycrateStation.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSkycrateStation.java index 8ba8f7c2c..c95d84044 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSkycrateStation.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSkycrateStation.java @@ -3,7 +3,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.text.TextFormatting; import pl.pabilo8.immersiveintelligence.api.rotary.IIRotaryUtils; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBarGroup; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; @@ -20,7 +20,7 @@ * @since 10.07.2019 */ @DecoTemplate(name = "skycrate_station", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiSkycrateStation extends DecoGui +public class GuiSkycrateStation extends DecoTileGui { public GuiSkycrateStation(EntityPlayer player, TileEntitySkyCrateStation tile) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSmallCrate.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSmallCrate.java index 86f9277a5..ba27b1a29 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSmallCrate.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiSmallCrate.java @@ -1,7 +1,7 @@ package pl.pabilo8.immersiveintelligence.client.gui.block; import net.minecraft.entity.player.EntityPlayer; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoGuiCategory; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTemplate; @@ -15,7 +15,7 @@ * @since 17.05.2019 */ @DecoTemplate(name = "small_crate", category = DecoGuiCategory.GENERIC_TILE) -public class GuiSmallCrate extends DecoGui> +public class GuiSmallCrate extends DecoTileGui> { public GuiSmallCrate(EntityPlayer player, TileEntitySmallCrate tile) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiUpgrade.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiTileUpgrade.java similarity index 95% rename from src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiUpgrade.java rename to src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiTileUpgrade.java index 6af64d921..3dba60d5e 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiUpgrade.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/GuiTileUpgrade.java @@ -12,7 +12,7 @@ import pl.pabilo8.immersiveintelligence.api.upgrade.Upgrade; import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeTechTree; import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeUtils.UpgradeOperation; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoTreeDisplay; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.label.DecoLabel; @@ -28,7 +28,7 @@ import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTModel; import pl.pabilo8.immersiveintelligence.common.IIGUI; -import pl.pabilo8.immersiveintelligence.common.gui.ContainerUpgrade; +import pl.pabilo8.immersiveintelligence.common.gui.ContainerTileUpgrade; import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; import pl.pabilo8.immersiveintelligence.common.network.messages.MessageBeginMachineUpgrade; import pl.pabilo8.immersiveintelligence.common.util.IIColor; @@ -45,8 +45,8 @@ * @author Pabilo8 (pabilo@iiteam.net) * @since 10.07.2019 */ -@DecoTemplate(name = "upgrade", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiUpgrade extends DecoGui> +@DecoTemplate(name = "upgrade_tile", category = DecoGuiCategory.PRODUCTION_TILE) +public class GuiTileUpgrade extends DecoTileGui> { private final UpgradeTechTree techTree; private DecoTreeDisplay techTreeDisplay; @@ -56,9 +56,9 @@ public class GuiUpgrade +public class GuiVulcanizer extends DecoTileGui { @DecoResource public static final ResourceLocation TEXTURE = IIReference.RES_II.with("gui/vulcanizer"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/ammunition_production/GuiAmmunitionAssembler.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/ammunition_production/GuiAmmunitionAssembler.java index c4987e454..b9e5c88bc 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/ammunition_production/GuiAmmunitionAssembler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/ammunition_production/GuiAmmunitionAssembler.java @@ -1,21 +1,30 @@ package pl.pabilo8.immersiveintelligence.client.gui.block.ammunition_production; +import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; +import pl.pabilo8.immersiveintelligence.api.ammo.enums.FuseType; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoDropdown; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.label.DecoLabel; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoEntryPanelBuilder; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoPanel; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBar; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoItemStackDisplay; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.text.DecoTextField; -import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.text.util.TextFilter; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage.ImageAnimationDirection; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; import pl.pabilo8.immersiveintelligence.common.IIGUI; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityAmmunitionAssembler; import pl.pabilo8.immersiveintelligence.common.gui.ContainerAmmunitionAssembler; import pl.pabilo8.immersiveintelligence.common.util.IIColor; import pl.pabilo8.immersiveintelligence.common.util.IIReference; import pl.pabilo8.immersiveintelligence.common.util.ResLoc; - -import static pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTextures.*; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -25,14 +34,14 @@ */ @DecoTemplate(name = "ammunition_assembler", category = DecoGuiCategory.PRODUCTION_TILE) -public class GuiAmmunitionAssembler extends DecoGui +public class GuiAmmunitionAssembler extends DecoTileGui { - @DecoResource - public static ResourceLocation TEXTURE_AMMOAS = ResLoc.of(IIReference.RES_II.with("gui/ammunition_assembler")); - - private DecoButton btnProximity, btnContact, btnTime; - private DecoTextField fuseTextField; + public static ResourceLocation TEXTURE = ResLoc.of(IIReference.RES_II.with("gui/ammunition_assembler")); + @SyncNBT(events = SyncEvents.TILE_CLIENT_MESSAGE) + public FuseType fuseType; + @SyncNBT(events = SyncEvents.TILE_CLIENT_MESSAGE) + public int fuseConfig; public GuiAmmunitionAssembler(EntityPlayer player, TileEntityAmmunitionAssembler tile) { @@ -44,51 +53,98 @@ public GuiAmmunitionAssembler(EntityPlayer player, TileEntityAmmunitionAssembler public void onInit() { startBackground() - .withBox(DecoTextures.BG_STEEL_ROUGH, 0, 0, 176, 76) + .withBox(DecoTextures.BG_STEEL_ROUGH, 0, 0, 176, 76+24) .withTitleBar(tile) - .withInventorySlots(SlotStyle.IE_INPUT, container.inputSlot) + .withInventorySlots(SlotStyle.IE_INPUT, container.coreSlot, container.casingSlot) .withInventorySlots(SlotStyle.IE_OUTPUT, container.outputSlot) - .withBox(DecoTextures.BG_WOODEN, DecoTextures.TEMPLATE_ROUND_WOODEN, 0, 76, 176, 92) + .withBox(DecoTextures.BG_WOODEN, DecoTextures.TEMPLATE_ROUND_WOODEN, 0, 76+24, 176, 92) .withInventoryTitleBar() - .withBox(DecoTextures.BG_BLUEPRINT, 100, 0, 76, 70) .withInventorySlots(SlotStyle.VANILLA, container.playerInventory) .build(); + //Set synced variables + this.fuseType = tile.fuseType; + this.fuseConfig = tile.fuseConfig; + + DecoPanel configPanel; addComponents( + //Energy bar new DecoBar(150+11, 0) .withTemplate(DecoTemplates.BAR_ELECTRIC_ENERGY.apply(tile.energyStorage)), - new DecoButton(100, 10) - .withIcon(ICON_PROXIMITY) - .withTranslatedTooltip("PROXIMITY"), - - new DecoButton(120, 10) - .withIcon(ICON_CONTACT) - .withTranslatedTooltip("CONTACT"), + //Progress + new DecoImage(8+64+8+2+1-48-2-4+24-1, 28+4+4+4+1-16) + .withSize(64, 32) + .withImageLocation(TEXTURE, true) + .withUV(64, 0, 0, 64, 32), + new DecoImage(8+64+8+2+1-48-2-4+1+24-1, 28+4+4+4+1-16+1) + .withSize(64, 30) + .withImageLocation(TEXTURE, true) + .withUV(64, 0, 34, 64, 34+30) + .withAnimation(ImageAnimationDirection.LEFT_TO_RIGHT, DecoGuiUtils.getMultiblockProductionMultiProgress(tile)), + + new DecoItemStackDisplay(8+64+8+2+1-48-2-4+64+2, 28+4+4+4+1-16+8), + + //Config bar + configPanel = new DecoPanel(0, 76-2) + .withBackground(DecoTextures.BG_PAPER) + .withBackgroundMask(DecoTextures.TEMPLATE_PAPER) + .withSize(176, 24) + ); - new DecoButton(140, 10) - .withIcon(ICON_TIME) - .withTranslatedTooltip("TIMED"), + DecoLabel configLabel = configPanel.addLabel("pole wspaniale", 4+80+2, 2) + .withAlign(DecoAlignment.RIGHT) + .withSize(64-12, 18); - new DecoTextField(96, 40) - .withSize(65, 18) + DecoTextField textField; + configPanel.addComponents( + (textField = new DecoTextField(176-32-4, 2)) + .withSize(32, 18) .withTextColor(IIColor.WHITE) - .withText("Fuze Time") - -/** - - new DecoImage(20, 20) - .withSize(118, 33) - .withImageLocation(TEXTURE_AMMOAS, false) - .withUV(256, 127, 177, 122, 209), - - new DecoImage(20, 20) - .withSize(118, 33) - .withImageLocation(TEXTURE_AMMOAS, false) - .withUV(256, 0, 177, 245, 209) - .withAnimation(ImageAnimationDirection.LEFT_TO_RIGHT, DecoGuiUtils.getMultiblockProductionMultiProgress(tile)) - **/ + .withFilter(TextFilter.DECIMAL) + .withText(this.fuseConfig) + .withOnTextChanged(newValue -> { + //Contact fuse has no config value + if(this.fuseType==FuseType.CONTACT) + textField.withText(newValue = "0"); + this.fuseConfig = newValue.isEmpty()?0: Integer.parseInt(newValue); + }), + new DecoDropdown(4, 2) + .withEntries(FuseType.values()) + .withDisplayFunction(new DecoEntryPanelBuilder() + //Type Icon, Label, and Letter + .withComponent("icon", new DecoImage(2, 2) + .withSize(16, 16) + ) + .withLabel("label", + new DecoLabel(fontRenderer, 20, 2) + .withSize(48, 18) + .withAlign(DecoAlignment.LEFT) + .withText("Proximity") + ) + .withElementApplyMethod(this::drawFuseEntry) + ) + .withScrollBarBackground(DecoTextures.COMPONENT_SLIDER_PAPER) + .withBackground(DecoTextures.COMPONENT_BUTTON_PAPER) + .withListBackground(DecoTextures.COMPONENT_TEXT_FIELD) + .withOnSelectedEntry((oldFuse, newFuse) -> { + textField.withDisabled(newFuse==FuseType.CONTACT); + textField.visible = newFuse!=FuseType.CONTACT; + configLabel.visible = newFuse!=FuseType.CONTACT; + this.fuseType = newFuse; + configLabel.withText(I18n.format(IIReference.GUI_LABEL_KEY+"ammunition_assembler.fuse_config."+newFuse.getName())) + .withTranslatedTooltip(IIReference.GUI_LABEL_KEY+"ammunition_assembler.fuse_config."+newFuse.getName()+".tooltip"); + }) + .withSelectedEntry(this.fuseType) + .withSize(80, 20) ); } + private void drawFuseEntry(FuseType fuseType, DecoEntryPanelBuilder builder) + { + builder.label("label").withRawText(fuseType.getLocalizedName()); + builder.component("icon", DecoImage.class) + .withImageLocation(ResLoc.of(IIReference.RES_II, "gui/deco/icons/icon_fuse_"+fuseType.getName()), true); + } + } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/arithmetic_logic_machine/GuiArithmeticLogicMachine.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/arithmetic_logic_machine/GuiArithmeticLogicMachine.java index a33fdf447..7e8fb5fd0 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/arithmetic_logic_machine/GuiArithmeticLogicMachine.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/arithmetic_logic_machine/GuiArithmeticLogicMachine.java @@ -14,7 +14,7 @@ import pl.pabilo8.immersiveintelligence.api.data.types.DataTypeNull; import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType; import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType.TypeMetaInfo; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoTab; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoList; @@ -45,7 +45,7 @@ * @since 30.06.2019 */ @DecoTemplate(name = "arithmetic_logic_machine", category = DecoGuiCategory.DATA_TILE) -public class GuiArithmeticLogicMachine extends DecoGui implements IDataMachineGui +public class GuiArithmeticLogicMachine extends DecoTileGui implements IDataMachineGui { @SyncNBT public int editedCircuit = 0; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/arithmetic_logic_machine/GuiArithmeticLogicMachineEdit.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/arithmetic_logic_machine/GuiArithmeticLogicMachineEdit.java index 913f5abcb..28827904e 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/arithmetic_logic_machine/GuiArithmeticLogicMachineEdit.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/arithmetic_logic_machine/GuiArithmeticLogicMachineEdit.java @@ -2,6 +2,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import pl.pabilo8.immersiveintelligence.api.data.DataPacket; import pl.pabilo8.immersiveintelligence.api.data.DataVariable; import pl.pabilo8.immersiveintelligence.api.data.IIDataOperationUtils; @@ -11,7 +12,7 @@ import pl.pabilo8.immersiveintelligence.api.data.types.DataTypeExpression; import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType; import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType.TypeMetaInfo; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoArrows; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoDropdownDataLetters; @@ -28,13 +29,17 @@ import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.IIGUI; +import pl.pabilo8.immersiveintelligence.common.IIUtils; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityArithmeticLogicMachine; import pl.pabilo8.immersiveintelligence.common.gui.ContainerArithmeticLogicMachine; +import pl.pabilo8.immersiveintelligence.common.item.data.ItemIIFunctionalCircuit; import pl.pabilo8.immersiveintelligence.common.util.IIColor; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; import javax.annotation.Nullable; import java.util.Collection; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -44,7 +49,7 @@ * @since 30.06.2019 */ @DecoTemplate(name = "arithmetic_logic_machine_edit", category = DecoGuiCategory.DATA_TILE) -public class GuiArithmeticLogicMachineEdit extends DecoGui +public class GuiArithmeticLogicMachineEdit extends DecoTileGui { @SyncNBT public DataVariable variableToEdit; @@ -52,6 +57,7 @@ public class GuiArithmeticLogicMachineEdit extends DecoGui circuitOperations; + private DataPacket packet; private DataTypeExpression edited; private ItemStack circuitStack; private boolean cancel = false; @@ -74,18 +80,27 @@ public void onInit() syncAnimatedParts(tile.keyboard, true); //Get circuit and list of all allowed operations - this.circuitStack = tile.getInventory().get(editedCircuit); + this.circuitStack = editedCircuit >= 0&&editedCircuit < tile.getInventory().size()?tile.getInventory().get(editedCircuit): ItemStack.EMPTY; + this.packet = this.packet==null?getCircuitPacket().clone(): this.packet; this.circuitOperations = IIContent.itemCircuit.getOperationsList(this.circuitStack).stream() .map(IIDataOperationUtils::getOperationMeta) + .filter(Objects::nonNull) .collect(Collectors.toList()); //Get currently edited operation DataType value = variableToEdit.getValue(); - this.edited = value instanceof DataTypeExpression?(DataTypeExpression)value: new DataTypeExpression(); + this.edited = value instanceof DataTypeExpression?(DataTypeExpression)value.clone(): new DataTypeExpression(); //If the current operation is not valid for this circuit, set it to the first valid one - if(this.edited.getMeta()==DataOperationNull.INSTANCE_META) - this.edited.setOperation(IIDataOperationUtils.getOperationInstance(circuitOperations.iterator().next().name())); + if(!isOperationAllowed(this.edited.getMeta())) + { + DataOperationMeta firstOperation = circuitOperations.isEmpty()?DataOperationNull.INSTANCE_META: circuitOperations.iterator().next(); + this.edited.setOperation(IIDataOperationUtils.getOperationInstance(firstOperation.name())); + } + + //A cloned packet without the currently edited variable is required, so the selector knows which variable names are unavailable + DataPacket constraints = packet.clone(); + constraints.remove(variableToEdit.getName()); //Build background startBackground() @@ -108,11 +123,10 @@ public void onInit() addComponents( //Variable name selector new DecoDropdownDataLetters(32+4+6+1-32, 4+8+2+1) - .withConstraints(new DataPacket()) //TODO: 23.09.2025 replace with actual packet + .withConstraints(constraints) .withSelectedEntry((Character)variableToEdit.getName()) .withTranslatedTooltip("desc.immersiveintelligence.variable_properties") - .withOnSelectedEntry((oldChar, newChar) -> { - })//changeVariableName(newChar)) + .withOnSelectedEntry((oldChar, newChar) -> changeVariableName(newChar)) .withTextColor(DecoColors.H1, IIColor.fromPackedRGB(0x35322c)) .withBackground(DecoTextures.COMPONENT_DROPDOWN_DATA_LETTER_PAPER) .withDropdownSymbol(DecoTextures.COMPONENT_DROPDOWN_SYMBOL_PAPER), @@ -121,8 +135,8 @@ public void onInit() .withSize(8, 14) .withBackground(DecoTextures.COMPONENT_ARROWS_PAPER) .withOnArrow(arrow -> { - //char cycled = IIUtils.cycleDataPacketCharsAvoiding(variableToEdit.getName(), arrow, false, cloned); - //changeVariableName(cycled); + char cycled = IIUtils.cycleDataPacketCharsAvoiding(variableToEdit.getName(), arrow, false, constraints); + changeVariableName(cycled); }), //Operation selector @@ -139,6 +153,7 @@ public void onInit() .withDisplayFunction(getOperationDropdownDisplayFunction()) .withOnSelectedEntry((oldMeta, newMeta) -> { cancel = true; + storeEditorOutput(); edited.setOperation(IIDataOperationUtils.getOperationInstance(newMeta.name())); variableToEdit = new DataVariable(variableToEdit.getName(), edited); refreshGUI(); @@ -146,10 +161,28 @@ public void onInit() new DecoButton(162+16-4, 2+8+4+1) .withTemplate(DecoTemplates.ACTION_BUTTON_DUPLICATE) - .withSize(18, 18), + .withSize(18, 18) + .withOnLMBPressed(() -> { + char name = findNextFreeVariableName(); + if(name=='\0') + return; + cancel = true; + storeEditorOutput(); + packet.with(variableToEdit); + variableToEdit = new DataVariable(name, edited.clone()); + refreshGUI(); + }), new DecoButton(162+16-4+1+18, 2+8+4+1) .withTemplate(DecoTemplates.ACTION_BUTTON_CLEAR) .withSize(18, 18) + .withOnLMBPressed(() -> { + cancel = true; + edited = new DataTypeExpression(); + if(!circuitOperations.isEmpty()) + edited.setOperation(IIDataOperationUtils.getOperationInstance(circuitOperations.iterator().next().name())); + variableToEdit = new DataVariable(variableToEdit.getName(), edited); + refreshGUI(); + }) ); //Add editor @@ -160,6 +193,8 @@ public void onInit() .withText("ii.gui.editor.editor_style") .withCurrentState(this.codeEditMode) .withOnToggle(result -> { + cancel = true; + storeEditorOutput(); this.codeEditMode = result; refreshGUI(); }) @@ -168,20 +203,102 @@ public void onInit() addComponents( new DecoButton(xSize-48-4-4-4-2, 128+8-16+32-2+3+16+2+4) .withBackground(DecoTextures.COMPONENT_BUTTON_ROUND) - .withText("desc.immersiveintelligence.variable_apply") + .withText("ii.gui.button.apply") .withSize(48, 12) - .withOnPressed((gui, button, mouseX, mouseY) -> changeGUI(IIGUI.ARITHMETIC_LOGIC_MACHINE_VARIABLES)), + .withOnPressed((gui, button, mouseX, mouseY) -> { + cancel = false; + return changeGUI(IIGUI.ARITHMETIC_LOGIC_MACHINE_VARIABLES); + }), new DecoButton(xSize-48*2-4-4-4-2, 128+8+32-16-2+3+16+2+4) .withBackground(DecoTextures.COMPONENT_BUTTON_ROUND) - .withText("Cancel") + .withText("ii.gui.button.cancel") .withSize(48, 12) .withOnPressed((gui, button, mouseX, mouseY) -> { - //cancel = true; + cancel = true; return changeGUI(IIGUI.ARITHMETIC_LOGIC_MACHINE_VARIABLES); }) ); } + private void changeVariableName(Character newName) + { + //Do nothing if the name remains the same + if(newName==null||newName==variableToEdit.getName()) + return; + + cancel = true; + storeEditorOutput(); + + //Remove existing variable and place it in the packet with the new name + packet.remove(variableToEdit.getName()); + variableToEdit = new DataVariable(newName, edited); + refreshGUI(); + } + + private char findNextFreeVariableName() + { + DataPacket currentPacket = packet.clone(); + currentPacket.remove(variableToEdit.getName()); + for(char c : DataPacket.VARIABLE_NAMES) + if(!currentPacket.has(c)) + return c; + return '\0'; + } + + private boolean isOperationAllowed(DataOperationMeta meta) + { + return meta!=null&&circuitOperations.stream().anyMatch(m -> m.name().equals(meta.name())); + } + + private DataPacket getCircuitPacket() + { + if(tile.getInventory().size() <= editedCircuit) + return new DataPacket(); + ItemStack stack = tile.getInventory().get(editedCircuit); + if(stack.isEmpty()||!(stack.getItem() instanceof ItemIIFunctionalCircuit)) + return new DataPacket(); + return ((ItemIIFunctionalCircuit)stack.getItem()).getStoredData(stack); + } + + private void storeEditorOutput() + { + if(editor==null) + return; + DataType output = editor.outputType(); + if(output instanceof DataTypeExpression) + edited = (DataTypeExpression)output; + variableToEdit = new DataVariable(variableToEdit.getName(), edited); + } + + private void updateLocalCircuitStack(DataPacket packet) + { + if(tile.getInventory().size() <= editedCircuit) + return; + ItemStack stack = tile.getInventory().get(editedCircuit); + if(stack.isEmpty()||!(stack.getItem() instanceof ItemIIFunctionalCircuit)) + return; + ((ItemIIFunctionalCircuit)stack.getItem()).writeDataToItem(stack, packet); + tile.getInventory().set(editedCircuit, stack); + } + + @Override + protected EasyNBT onSaveTileData() + { + EasyNBT nbt = super.onSaveTileData(); + if(editor==null||cancel) + return nbt; + + storeEditorOutput(); + DataPacket updatedPacket = packet.with(variableToEdit); + updateLocalCircuitStack(updatedPacket); + + NBTTagCompound expressions = EasyNBT.newNBT() + .withInt("page", editedCircuit) + .withSerializable("list", updatedPacket) + .unwrap(); + return nbt.withTag("expressions", expressions); + } + private DecoElementDisplay getOperationDropdownDisplayFunction() { return new DecoEntryPanelBuilder() @@ -208,6 +325,6 @@ private DecoElementDisplay getOperationDropdownDisplayFunctio panel.component("image", DecoImage.class) .withImageLocation(metaInfo.getTextureLocation(), true); }) - .withElementTooltip(operation -> "datasystem.immersiveintelligence.function"+operation.name()+".desc"); + .withElementTooltip(operation -> "datasystem.immersiveintelligence.function."+operation.name()+".desc"); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_input_machine/GuiDataInputMachine.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_input_machine/GuiDataInputMachine.java index 358986636..189af4cc4 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_input_machine/GuiDataInputMachine.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_input_machine/GuiDataInputMachine.java @@ -9,7 +9,7 @@ import pl.pabilo8.immersiveintelligence.api.data.types.DataTypeNull; import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType; import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType.TypeMetaInfo; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.DecoComponent; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.DecoComponent.MouseButton; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; @@ -42,7 +42,7 @@ * @since 30.06.2019 */ @DecoTemplate(name = "data_input_machine", category = DecoGuiCategory.DATA_TILE) -public class GuiDataInputMachine extends DecoGui implements IDataMachineGui +public class GuiDataInputMachine extends DecoTileGui implements IDataMachineGui { @DecoResource public static ResourceLocation ICON_SEND_PACKET = ResLoc.of(IIReference.RES_II, "gui/tab_icons/send_packet"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_input_machine/GuiDataInputMachineEdit.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_input_machine/GuiDataInputMachineEdit.java index ee719ec4f..13df45f3b 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_input_machine/GuiDataInputMachineEdit.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_input_machine/GuiDataInputMachineEdit.java @@ -6,17 +6,15 @@ import pl.pabilo8.immersiveintelligence.api.data.IDataMachineGui; import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType; import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType.TypeMetaInfo; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoArrows; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoDropdownDataLetters; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoDropdown; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.data_editor.DecoDataEditor; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.label.DecoLabel; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoEntryPanelBuilder; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; -import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; +import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.IIGUI; import pl.pabilo8.immersiveintelligence.common.IIUtils; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityDataInputMachine; @@ -35,7 +33,7 @@ * @since 30.06.2019 */ @DecoTemplate(name = "data_input_machine_edit", category = DecoGuiCategory.DATA_TILE) -public class GuiDataInputMachineEdit extends DecoGui implements IDataMachineGui +public class GuiDataInputMachineEdit extends DecoTileGui implements IDataMachineGui { @SyncNBT public DataVariable variableToEdit; @@ -120,32 +118,9 @@ public void onInit() .withSize(116, 18) .withDropdownWidth(116) .withMaxDisplayedEntries(5) - .withEntries(DecoDataEditor.getEditorTypes(false)) + .withEntries(DecoDataEditor.getEditorTypes(tile.isUpgradeInstalled(IIContent.UPGRADE_ADVANCED_DATA))) .withSelectedEntry(variableToEdit.getValue().getTypeMeta()) - .withDisplayFunction(new DecoEntryPanelBuilder>() - .withHeight(18) - .withBackground(DecoTextures.BG_PAPER) - .withBackgroundMask(DecoTextures.TEMPLATE_PAPER) - //Type Icon, Label, and Letter - .withComponent("image", new DecoImage(3, 1) - .withSize(16, 16)) - .withLabel("typeLabel", - new DecoLabel(fontRenderer, 20, 1) - .withSize(48, 18) - .withAlign(DecoAlignment.LEFT) - .withText("Integer") - ) - .withElementApplyMethod((typeMeta, panel) -> { - //type label (f.e. integer) - panel.label("typeLabel") - .withText(typeMeta.getTranslatedName()) - .withTextColor(typeMeta.color.withBrightness(0.4f)); - //type icon - panel.component("image", DecoImage.class) - .withImageLocation(typeMeta.getTextureLocation(), true); - }) - .withElementTooltip(typeMeta -> "a") - ) + .withDisplayFunction(DecoTemplates.getDataTypeEntryDisplay()) .withOnSelectedEntry((typeMetaInfo, typeMetaInfo2) -> { cancel = true; variableToEdit = new DataVariable(variableToEdit.getName(), typeMetaInfo2.supplier.get()); @@ -154,7 +129,7 @@ public void onInit() new DecoButton(xSize-48-4-4-4-2, 153) .withBackground(DecoTextures.COMPONENT_BUTTON_ROUND) - .withText("Apply") + .withText("ii.gui.button.apply") .withSize(48, 12) .withOnPressed((gui, button, mouseX, mouseY) -> { cancel = false; @@ -162,7 +137,7 @@ public void onInit() }), new DecoButton(xSize-96-4-4-4-2, 153) .withBackground(DecoTextures.COMPONENT_BUTTON_ROUND) - .withText("Cancel") + .withText("ii.gui.button.cancel") .withSize(48, 12) .withOnPressed((gui, button, mouseX, mouseY) -> { cancel = true; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_merger/GuiDataMerger.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_merger/GuiDataMerger.java new file mode 100644 index 000000000..bc16e0d9d --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_merger/GuiDataMerger.java @@ -0,0 +1,144 @@ +package pl.pabilo8.immersiveintelligence.client.gui.block.data_merger; + +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.label.DecoLabel; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoEntryPanelBuilder; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskList; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskList.ListMode; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; +import pl.pabilo8.immersiveintelligence.common.IIGUI; +import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataMerger; +import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataMerger.DataMergeRule; +import pl.pabilo8.immersiveintelligence.common.gui.ContainerDataMerger; +import pl.pabilo8.immersiveintelligence.common.util.IIColor; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyCollection; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; + +/** + * Main Data Merger GUI: list of request/job merge rules. + * + * @author Pabilo8 (pabilo@iiteam.net) + * @updated 02.06.2026 + */ +@DecoTemplate(name = "data_merger", category = DecoGuiCategory.DATA_TILE) +public class GuiDataMerger extends DecoTileGui +{ + private static final String KEY = IIReference.GUI_LABEL_KEY+"data_merger."; + + @SyncNBT(events = SyncEvents.TILE_CLIENT_MESSAGE) + public EasyCollection rules; + @SyncNBT + public int editedRule = -1; + @SyncNBT + public ListMode mode = ListMode.JOBS; + + public GuiDataMerger(EntityPlayer player, TileEntityDataMerger tile) + { + super(player, tile, IIGUI.DATA_MERGER); + if(tile!=null) + rules = tile.mergeRules.clone(); + } + + @Override + public void onInit() + { + if(rules==null) + rules = new EasyCollection<>(DataMergeRule::new); + + startBackground() + .withBox(DecoTextures.BG_STEEL, 0, 0, 176, 168-8) + .withTitleBar(tile) + .withNextLayer() + .withBox(DecoTextures.BG_WOODEN, DecoTextures.TEMPLATE_ROUND_WOODEN, 0, 168-8, 176, 92) + .withInventorySlots(SlotStyle.VANILLA, container.playerInventory) + .withInventoryTitleBar() + .withFrame(DecoTextures.FRAME_WOODEN_THIN, 4, false, new boolean[]{true, false, false, false}) + .withNextLayer() + .withBox(DecoTextures.BG_STEEL, DecoTextures.TEMPLATE_SQUARE, 0, 168-8-20, 176, 20) + .build(); + + DecoTaskList ruleList; + addComponent((ruleList = new DecoTaskList<>(2, 4)) + .withSize(176-4, 116) + .withEntries(rules) + .withIsJobPredicate(DataMergeRule::isJob) + .withModeHandling(mode, m -> mode = m) + .withBlankTaskSupplier(() -> { + DataMergeRule rule = new DataMergeRule(); + rule.usageLimit = ruleList.getMode()==ListMode.REQUESTS?1: -1; + return rule; + }) + .withDisplayFunction(new DecoEntryPanelBuilder() + .withBackground(DecoTextures.BG_PAPER) + .withBackgroundMask(DecoTextures.TEMPLATE_TICKET) + .withComponent("variable", new DecoButton(3, 2) + .withSize(20, 16) + .withDisabled(true) + .withTextDisabledColor(IIColor.fromPackedRGB(0xafafaf)) + ) + .withLabel("route", new DecoLabel(fontRenderer, 26, 5) + .withSize(116, 12) + .withAlign(DecoAlignment.LEFT) + ) + .withComponent(p -> new DecoButton(p.width-17+1-14, 3) + .withTemplate(DecoTemplates.ACTION_BUTTON_EDIT) + .withOnLMBPressed(() -> { + editedRule = rules.indexOf(p.getCurrentElement()); + if(editedRule >= 0) + changeGUI(IIGUI.DATA_MERGER_EDIT); + }) + ) + .withComponent(p -> new DecoButton(p.width-17+1, 3) + .withTemplate(DecoTemplates.ACTION_BUTTON_REMOVE) + .withOnLMBPressed(() -> { + int index = rules.indexOf(p.getCurrentElement()); + if(index >= 0) + { + rules.remove(index); + refreshGUI(); + } + }) + ) + .withElementApplyMethod((rule, panel) -> { + panel.component("variable", DecoButton.class) + .withRawText(String.valueOf(rule.variable)) + .withBackground(DecoTextures.COMPONENT_BUTTON_PAPER) + .withBackgroundColor(rule.triggerForwarding?DecoColors.ACTION_ADD: DecoColors.ACTION_REMOVE); + + StringBuilder sb = new StringBuilder(); + if(rule.acceptLeft) + sb.append(I18n.format(KEY+"left")); + if(rule.acceptRight) + { + if(sb.length() > 0) + sb.append(", "); + sb.append(I18n.format(KEY+"right")); + } + if(rule.triggerForwarding) + { + if(sb.length() > 0) + sb.append(" -> "); + sb.append(I18n.format(KEY+"send")); + } + + panel.label("route").withRawText(sb.toString()); + }) + ) + ); + } + + @Override + protected EasyNBT onSaveTileData() + { + return super.onSaveTileData() + .withSerializable("rules", rules); + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_merger/GuiDataMergerEdit.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_merger/GuiDataMergerEdit.java new file mode 100644 index 000000000..42180bb7d --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_merger/GuiDataMergerEdit.java @@ -0,0 +1,196 @@ +package pl.pabilo8.immersiveintelligence.client.gui.block.data_merger; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import pl.pabilo8.immersiveintelligence.api.data.DataPacket; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoCheckbox; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoDropdownDataLetters; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoPanel; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskList.ListMode; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.text.DecoTextField; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.text.util.TextFilter; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; +import pl.pabilo8.immersiveintelligence.common.IIGUI; +import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataMerger; +import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataMerger.DataMergeRule; +import pl.pabilo8.immersiveintelligence.common.gui.ContainerDataMerger; +import pl.pabilo8.immersiveintelligence.common.util.IIColor; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; +import pl.pabilo8.immersiveintelligence.common.util.IIStringUtil; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyCollection; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; + +/** + * Data Merger rule editor. + * + * @author Pabilo8 (pabilo@iiteam.net) + * @updated 02.06.2026 + */ +@DecoTemplate(name = "data_merger_edit", category = DecoGuiCategory.DATA_TILE) +public class GuiDataMergerEdit extends DecoTileGui +{ + private static final String KEY = IIReference.GUI_LABEL_KEY+"data_merger."; + + @SyncNBT(events = SyncEvents.TILE_CLIENT_MESSAGE) + public EasyCollection rules; + @SyncNBT + public int editedRule = -1; + @SyncNBT + public ListMode mode = ListMode.JOBS; + @SyncNBT + public DataMergeRule edited = new DataMergeRule(); + + private boolean cancel = true, loaded = false; + + public GuiDataMergerEdit(EntityPlayer player, TileEntityDataMerger tile) + { + super(player, tile, IIGUI.DATA_MERGER_EDIT); + if(tile!=null) + rules = tile.mergeRules.clone(); + } + + @Override + public void onInit() + { + if(rules==null) + rules = new EasyCollection<>(DataMergeRule::new); + if(editedRule < 0||editedRule >= rules.size()) + { + cancel = true; + changeGUI(IIGUI.DATA_MERGER); + return; + } + if(!loaded) + { + edited = rules.get(editedRule).copy(); + loaded = true; + } + + startBackground() + .withBox(DecoTextures.BG_STEEL, 0, 0, 176, 168-8) + .withTitleBar(KEY+"rule_properties") + .withNextLayer() + .withBox(DecoTextures.BG_WOODEN, DecoTextures.TEMPLATE_ROUND_WOODEN, 0, 168-8, 176, 92) + .withInventorySlots(SlotStyle.VANILLA, container.playerInventory) + .withInventoryTitleBar() + .withFrame(DecoTextures.FRAME_WOODEN_THIN, 4, false, new boolean[]{true, false, false, false}) + .withNextLayer() + .withBox(DecoTextures.BG_STEEL, DecoTextures.TEMPLATE_ROUND, 4, 8+4, 168-4, 72+8) + .withTitleBar(KEY+"inputs", DecoAlignment.TOP_LEFT) + .withNextLayer() + .withBox(DecoTextures.BG_STEEL, DecoTextures.TEMPLATE_ROUND, 4, 8+4+72-4+16, 168-4, 84-16-8-8) + .withTitleBar(KEY+"override_policy", DecoAlignment.TOP_LEFT) + .build(); + + DecoPanel panel = addComponent(new DecoPanel(12, 16)) + .withSize(216, 128) + .withBackground(null); + + addInputSection(panel, 0); + addPolicySection(panel, 96-4); + + addComponents( + new DecoButton(xSize-48-4, 156+8-8-2) + .withBackground(DecoTextures.COMPONENT_BUTTON_ROUND) + .withText("ii.gui.button.apply") + .withSize(48, 12) + .withOnPressed((gui, button, mouseX, mouseY) -> { + rules.set(editedRule, edited.copy()); + cancel = false; + return changeGUI(IIGUI.DATA_MERGER); + }), + new DecoButton(xSize-48*2-4, 156+8-8-2) + .withBackground(DecoTextures.COMPONENT_BUTTON_ROUND) + .withText("ii.gui.button.cancel") + .withSize(48, 12) + .withOnPressed((gui, button, mouseX, mouseY) -> { + cancel = true; + return changeGUI(IIGUI.DATA_MERGER); + }) + ); + } + + private void addInputSection(DecoPanel panel, int yy) + { + DecoPanel panelPaper = panel.addComponent(new DecoPanel(-4, yy+4) + .withBackground(DecoTextures.BG_PAPER) + .withBackgroundMask(DecoTextures.TEMPLATE_PAPER) + .withSize(176-8-12+4, 18) + ); + panelPaper.addLabel(KEY+"variable", 4, 6) + .withSize(48, 9) + .withAlign(DecoAlignment.LEFT); + panelPaper.addComponent(new DecoDropdownDataLetters(176-8-12+4-18, 0) + .withConstraints(new DataPacket()) + .withSelectedEntry((Character)edited.variable) + .withTextColor(DecoColors.H1, IIColor.fromPackedRGB(0x35322c)) + .withBackground(DecoTextures.COMPONENT_DROPDOWN_DATA_LETTER_PAPER) + .withDropdownSymbol(DecoTextures.COMPONENT_DROPDOWN_SYMBOL_PAPER) + .withOnSelectedEntry((oldChar, newChar) -> edited.variable = newChar) + ); + + panel.addComponent(new DecoCheckbox(0, yy+22) + .withSize(84, 12) + .withText(KEY+"accept_left") + .withChecked(edited.acceptLeft) + .withOnToggle(checked -> edited.acceptLeft = checked) + .withTranslatedTooltip(KEY+"accept_left.tooltip") + ); + panel.addComponent(new DecoCheckbox(0, yy+22+12) + .withSize(84, 12) + .withText(KEY+"accept_right") + .withChecked(edited.acceptRight) + .withOnToggle(checked -> edited.acceptRight = checked) + .withTranslatedTooltip(KEY+"accept_right.tooltip") + ); + panel.addComponent(new DecoCheckbox(0, yy+22+12+12) + .withSize(120, 12) + .withText(KEY+"trigger_forwarding") + .withChecked(edited.triggerForwarding) + .withOnToggle(checked -> edited.triggerForwarding = checked) + .withTranslatedTooltip(KEY+"trigger_forwarding.tooltip") + ); + + panel.addLabel(KEY+"usage_limit", 0, yy+22+12+12+8+4+3) + .withSize(74, 9) + .withAlign(DecoAlignment.LEFT) + .withTranslatedTooltip(KEY+"usage_limit.tooltip"); + panel.addComponent(new DecoTextField(78, yy+22+12+12+8+4-1) + .withSize(42, 16) + .withFilter(TextFilter.DECIMAL) + .withText(edited.usageLimit < 0?"": String.valueOf(edited.usageLimit)) + .withOnTextChanged(text -> edited.usageLimit = text==null||text.trim().isEmpty()?-1: IIStringUtil.parseInt(text.trim())) + .withTranslatedTooltip(KEY+"usage_limit.tooltip") + ); + } + + private void addPolicySection(DecoPanel panel, int yy) + { + panel.addComponent(new DecoCheckbox(0, yy) + .withSize(164, 12) + .withText(KEY+"right_overrides_cached") + .withTranslatedTooltip(KEY+"right_overrides_cached.tooltip") + .withChecked(edited.rightOverridesCachedValue) + .withOnToggle(checked -> edited.rightOverridesCachedValue = checked) + ); + panel.addComponent(new DecoCheckbox(0, yy+16) + .withSize(164, 12) + .withText(KEY+"right_overrides_value") + .withTranslatedTooltip(KEY+"right_overrides_value.tooltip") + .withChecked(edited.rightOverridesValue) + .withOnToggle(checked -> edited.rightOverridesValue = checked) + ); + } + + @Override + protected EasyNBT onSaveTileData() + { + return super.onSaveTileData() + .conditionally(!cancel&&rules!=null, easyNBT -> easyNBT.withSerializable("rules", rules)); + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_router/GuiDataRouter.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_router/GuiDataRouter.java new file mode 100644 index 000000000..2395e7878 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_router/GuiDataRouter.java @@ -0,0 +1,130 @@ +package pl.pabilo8.immersiveintelligence.client.gui.block.data_router; + +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.label.DecoLabel; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoEntryPanelBuilder; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskList; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskList.ListMode; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; +import pl.pabilo8.immersiveintelligence.common.IIGUI; +import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataRouter; +import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataRouter.DataRoutingRule; +import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataRouter.RoutingAction; +import pl.pabilo8.immersiveintelligence.common.gui.ContainerDataRouter; +import pl.pabilo8.immersiveintelligence.common.util.IIColor; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyCollection; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; + +/** + * Main Data Router GUI: list of request/job routing rules. + * + * @author Pabilo8 (pabilo@iiteam.net) + * @updated 02.06.2026 + */ +@DecoTemplate(name = "data_router", category = DecoGuiCategory.DATA_TILE) +public class GuiDataRouter extends DecoTileGui +{ + private static final String KEY = IIReference.GUI_LABEL_KEY+"data_router."; + + @SyncNBT(events = SyncEvents.TILE_CLIENT_MESSAGE) + public EasyCollection rules; + @SyncNBT + public int editedRule = -1; + @SyncNBT + public ListMode mode = ListMode.JOBS; + + public GuiDataRouter(EntityPlayer player, TileEntityDataRouter tile) + { + super(player, tile, IIGUI.DATA_ROUTER); + if(tile!=null) + rules = tile.routingRules.clone(); + } + + @Override + public void onInit() + { + if(rules==null) + rules = new EasyCollection<>(DataRoutingRule::new); + + startBackground() + .withBox(DecoTextures.BG_STEEL, 0, 0, 176, 168-8) + .withTitleBar(tile) + .withNextLayer() + .withBox(DecoTextures.BG_WOODEN, DecoTextures.TEMPLATE_ROUND_WOODEN, 0, 168-8, 176, 92) + .withInventorySlots(SlotStyle.VANILLA, container.playerInventory) + .withInventoryTitleBar() + .withFrame(DecoTextures.FRAME_WOODEN_THIN, 4, false, new boolean[]{true, false, false, false}) + .withNextLayer() + .withBox(DecoTextures.BG_STEEL, DecoTextures.TEMPLATE_SQUARE, 0, 168-8-20, 176, 20) + .build(); + + DecoTaskList ruleList; + addComponent((ruleList = new DecoTaskList<>(2, 4)) + .withSize(176-4, 116) + .withEntries(rules) + .withIsJobPredicate(DataRoutingRule::isJob) + .withModeHandling(mode, m -> mode = m) + .withBlankTaskSupplier(() -> { + DataRoutingRule rule = new DataRoutingRule(); + rule.usageLimit = ruleList.getMode()==ListMode.REQUESTS?1: -1; + return rule; + }) + .withDisplayFunction(new DecoEntryPanelBuilder() + .withBackground(DecoTextures.BG_PAPER) + .withBackgroundMask(DecoTextures.TEMPLATE_TICKET) + .withComponent("action", new DecoButton(3, 2) + .withSize(36, 16) + .withDisabled(true) + .withTextDisabledColor(IIColor.fromPackedRGB(0xafafaf)) + ) + .withLabel("route", new DecoLabel(fontRenderer, 3+36+2, 5) + .withSize(58, 12) + .withAlign(DecoAlignment.LEFT) + ) + .withComponent(p -> new DecoButton(p.width-17+1-14, 2) + .withTemplate(DecoTemplates.ACTION_BUTTON_EDIT) + .withOnLMBPressed(() -> { + editedRule = rules.indexOf(p.getCurrentElement()); + if(editedRule >= 0) + changeGUI(IIGUI.DATA_ROUTER_EDIT); + }) + ) + .withComponent(p -> new DecoButton(p.width-17+1, 2) + .withTemplate(DecoTemplates.ACTION_BUTTON_REMOVE) + .withOnLMBPressed(() -> { + int index = rules.indexOf(p.getCurrentElement()); + if(index >= 0) + { + rules.remove(index); + refreshGUI(); + } + }) + ) + .withElementApplyMethod((rule, panel) -> { + panel.component("action", DecoButton.class) + .withRawText(rule.action.getLocalizedName()) + .withBackground(DecoTextures.COMPONENT_BUTTON_PAPER) + .withBackgroundColor(rule.action==RoutingAction.ALLOW?DecoColors.ACTION_ADD: DecoColors.ACTION_REMOVE); + panel.label("route").withRawText(I18n.format(KEY+"into", + I18n.format(IIReference.DESCRIPTION_KEY+"side."+rule.outgoingSide.getName()) + )); + }) + ) + ); + } + + @Override + protected EasyNBT onSaveTileData() + { + return super.onSaveTileData() + .withSerializable("rules", rules); + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_router/GuiDataRouterEdit.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_router/GuiDataRouterEdit.java new file mode 100644 index 000000000..70f3ed855 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/data_router/GuiDataRouterEdit.java @@ -0,0 +1,276 @@ +package pl.pabilo8.immersiveintelligence.client.gui.block.data_router; + +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import pl.pabilo8.immersiveintelligence.api.data.DataPacket; +import pl.pabilo8.immersiveintelligence.api.data.types.DataTypeNull; +import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType; +import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType.TypeMetaInfo; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoCheckbox; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoDropdownDataLetters; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoDropdown; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoElementDisplays; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.data_editor.DecoDataEditor; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoPanel; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskList.ListMode; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.text.DecoTextField; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.text.util.TextFilter; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; +import pl.pabilo8.immersiveintelligence.common.IIGUI; +import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataRouter; +import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataRouter.DataRoutingRule; +import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataRouter.RoutingAction; +import pl.pabilo8.immersiveintelligence.common.gui.ContainerDataRouter; +import pl.pabilo8.immersiveintelligence.common.util.IIColor; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; +import pl.pabilo8.immersiveintelligence.common.util.IIStringUtil; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyCollection; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; + +import javax.annotation.Nullable; + +/** + * Data Router rule editor. + * + * @author Pabilo8 (pabilo@iiteam.net) + * @updated 02.06.2026 + */ +@DecoTemplate(name = "data_router_edit", category = DecoGuiCategory.DATA_TILE) +public class GuiDataRouterEdit extends DecoTileGui +{ + private static final String KEY = IIReference.GUI_LABEL_KEY+"data_router."; + + @SyncNBT(events = SyncEvents.TILE_CLIENT_MESSAGE) + public EasyCollection rules; + @SyncNBT + public int editedRule = -1; + @SyncNBT + public ListMode mode = ListMode.JOBS; + @SyncNBT + public DataRoutingRule edited = new DataRoutingRule(); + @Nullable + private DecoDataEditor valueEditor; + private boolean cancel = true, loaded = false; + + public GuiDataRouterEdit(EntityPlayer player, TileEntityDataRouter tile) + { + super(player, tile, IIGUI.DATA_ROUTER_EDIT); + if(tile!=null) + rules = tile.routingRules.clone(); + } + + @Override + public void onInit() + { + if(rules==null) + rules = new EasyCollection<>(DataRoutingRule::new); + if(editedRule < 0||editedRule >= rules.size()) + { + cancel = true; + changeGUI(IIGUI.DATA_ROUTER); + return; + } + if(!loaded) + { + edited = rules.get(editedRule).copy(); + loaded = true; + } + + startBackground() + .withBox(DecoTextures.BG_STEEL, 0, 0, 240, 184+12) + .withTitleBar(KEY+"rule_properties") + .withBox(DecoTextures.BG_WOODEN, DecoTextures.TEMPLATE_ROUND_WOODEN, 32, 184+12, 176, 92) + .withInventorySlots(SlotStyle.VANILLA, container.playerInventory) + .withInventoryTitleBar() + .withNextLayer() + + .withBox(DecoTextures.BG_STEEL, DecoTextures.TEMPLATE_ROUND, 4, 8+4, 224+8, 48-8) + .withTitleBar(KEY+"routing", DecoAlignment.TOP_LEFT) + .withNextLayer() + + .withBox(DecoTextures.BG_STEEL, DecoTextures.TEMPLATE_ROUND, 4, 8+4+48-4, 224+8, 128+12) + .withTitleBar(KEY+"packet_filters", DecoAlignment.TOP_LEFT) + .withNextLayer() + .build(); + + DecoPanel panel = addComponent(new DecoPanel(12, 16)) + .withSize(216, 8+4+48-4+128+4) + .withBackground(null); + + int yy = 0; + addRoutingSection(panel, yy); + yy += 48; + addPacketFilterSection(panel, yy); + yy += 14; + addValueFilterSection(panel, yy); + + addComponents( + new DecoButton(xSize-48-4-4-4-2+2, 180+8-8-4+16) + .withBackground(DecoTextures.COMPONENT_BUTTON_ROUND) + .withText("ii.gui.button.apply") + .withSize(48, 12) + .withOnPressed((gui, button, mouseX, mouseY) -> { + storeEditorValue(); + rules.set(editedRule, edited.copy()); + cancel = false; + return changeGUI(IIGUI.DATA_ROUTER); + }), + new DecoButton(xSize-48*2-4-4-4-2+2, 180+8-8-4+16) + .withBackground(DecoTextures.COMPONENT_BUTTON_ROUND) + .withText("ii.gui.button.cancel") + .withSize(48, 12) + .withOnPressed((gui, button, mouseX, mouseY) -> { + cancel = true; + return changeGUI(IIGUI.DATA_ROUTER); + }) + ); + } + + private void addRoutingSection(DecoPanel panel, int yy) + { + panel.addLabel(KEY+"incoming", 0, yy+5) + .withSize(46, 9) + .withAlign(DecoAlignment.LEFT); + for(int i = 0; i < EnumFacing.VALUES.length; i++) + { + EnumFacing side = EnumFacing.VALUES[i]; + int x = 48+(i%3)*24; + int y = yy+(i/3)*12+4; + panel.addComponent(new DecoCheckbox(x, y) + .withSize(24, 10) + .withRawText(String.valueOf(side.getName().toUpperCase().charAt(0))) + .withTranslatedTooltip(IIReference.DESCRIPTION_KEY+"side."+side.getName()) + .withChecked(edited.receivingSides[side.ordinal()]) + .withOnToggle(checked -> edited.receivingSides[side.ordinal()] = checked) + ); + } + + panel.addLabel(KEY+"outgoing", 132, yy+3) + .withSize(40, 9) + .withAlign(DecoAlignment.LEFT); + panel.addComponent(new DecoDropdown(172, yy) + .withSize(42, 16) + .withDropdownWidth(70) + .withEntries(EnumFacing.VALUES) + .withSelectedEntry(edited.outgoingSide) + .withOnSelectedEntry((oldSide, newSide) -> edited.outgoingSide = newSide) + .withDisplayFunction(DecoElementDisplays.getSimpleTextDisplay(side -> + I18n.format(IIReference.DESCRIPTION_KEY+"side."+side.getName()) + )) + ); + + panel.addLabel(KEY+"action", 132, yy+18) + .withSize(40, 9) + .withAlign(DecoAlignment.LEFT); + panel.addComponent(new DecoDropdown(172, yy+15) + .withSize(42, 16) + .withDropdownWidth(70) + .withEntries(RoutingAction.values()) + .withSelectedEntry(edited.action) + .withOnSelectedEntry((oldAction, newAction) -> edited.action = newAction) + ); + } + + private void addPacketFilterSection(DecoPanel panel, int yy) + { + panel.addComponent(new DecoCheckbox(0, yy) + .withSize(56, 12) + .withText(KEY+"filter.color") + .withChecked(edited.useColorFilter) + .withOnToggle(checked -> edited.useColorFilter = checked) + ); + panel.addComponent(new DecoDropdown(58-8, yy) + .withTemplate(DecoTemplates.DYE_COLOR_DROPDOWN) + .withSize(56+8, 12) + .withDropdownWidth(80) + .withSelectedEntry(edited.packetColor) + .withOnSelectedEntry((oldColor, newColor) -> edited.packetColor = newColor) + ); + + panel.addComponent(new DecoCheckbox(120, yy) + .withSize(56, 12) + .withText(KEY+"filter.address") + .withChecked(edited.useAddressFilter) + .withOnToggle(checked -> edited.useAddressFilter = checked) + ); + panel.addComponent(new DecoTextField(178, yy-2) + .withSize(36, 16) + .withFilter(TextFilter.DECIMAL) + .withText(edited.packetAddress < 0?"": String.valueOf(edited.packetAddress)) + .withOnTextChanged(text -> edited.packetAddress = text==null||text.trim().isEmpty()?-1: IIStringUtil.parseInt(text.trim())) + ); + } + + private void addValueFilterSection(DecoPanel panel, int yy) + { + valueEditor = null; + panel.addComponent(new DecoCheckbox(0, yy+2) + .withSize(92, 12) + .withText(KEY+"filter.value") + .withChecked(edited.useValueFilter) + .withOnToggle(checked -> { + storeEditorValue(); + edited.useValueFilter = checked; + refreshGUI(); + }) + ); + + if(edited.useValueFilter) + { + panel.addComponent(new DecoDropdownDataLetters(96, yy) + .withConstraints(new DataPacket()) + .withSelectedEntry((Character)edited.valueVariable) + .withTextColor(DecoColors.H1, IIColor.fromPackedRGB(0x35322c)) + .withOnSelectedEntry((oldChar, newChar) -> edited.valueVariable = newChar) + ); + panel.addComponent(new DecoDropdown>(96+18, yy) + .withSize(128-24, 18) + .withDropdownWidth(116) + .withMaxDisplayedEntries(5) + .withEntries(DecoDataEditor.getEditorTypes(false)) + .withSelectedEntry(edited.expectedValue.getTypeMeta()) + .withDisplayFunction(DecoTemplates.getDataTypeEntryDisplay()) + .withOnSelectedEntry((oldType, newType) -> { + storeEditorValue(); + edited.expectedValue = newType==null?new DataTypeNull(): newType.supplier.get(); + refreshGUI(); + }) + ); + + yy += 32; + panel.addComponent(new DecoCheckbox(63, yy-16+1) + .withSize(102, 12) + .withText(KEY+"remove_control_variable") + .withChecked(edited.removeControlVariable) + .withOnToggle(checked -> edited.removeControlVariable = checked) + ); + + valueEditor = DecoDataEditor.getEditorFor(edited.expectedValue, 8, yy); + int editorHeight = panel.height-yy; + if(valueEditor!=null) + addComponent(valueEditor) + .withSize(214+12, editorHeight); + } + } + + private void storeEditorValue() + { + if(valueEditor!=null&&edited!=null&&edited.useValueFilter) + edited.expectedValue = valueEditor.outputType(); + } + + @Override + protected EasyNBT onSaveTileData() + { + return super.onSaveTileData() + .conditionally(!cancel&&rules!=null, easyNBT -> easyNBT.withSerializable("rules", rules)); + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacement.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacement.java index 362240386..2ee33876b 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacement.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacement.java @@ -1,18 +1,20 @@ package pl.pabilo8.immersiveintelligence.client.gui.block.emplacement; import net.minecraft.entity.player.EntityPlayer; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoAlignment; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTextures; import pl.pabilo8.immersiveintelligence.common.IIGUI; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.TileEntityEmplacement; import pl.pabilo8.immersiveintelligence.common.gui.ContainerEmplacement; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; /** * @author Pabilo8 (pabilo@iiteam.net) * @since 16.07.2021 */ -public abstract class GuiEmplacement extends DecoGui +public abstract class GuiEmplacement extends DecoTileGui { public GuiEmplacement(EntityPlayer player, TileEntityEmplacement tile, IIGUI gui) { @@ -26,9 +28,19 @@ public void onInit() .withBox(DecoTextures.BG_STEEL_ROUGH, 0, 0, 152+96, 152+8) .withTitleBar(tile) .withNextLayer() + //Bad practicle, I know, but it was a must + .conditionally(this instanceof GuiEmplacementPageStorage, builder -> builder + .withBox(DecoTextures.BG_STEEL, DecoTextures.TEMPLATE_SQUARE, 4, 8+8, 152+96-8, 76-8-8) + .withTitleBar(IIReference.GUI_LABEL_KEY+"emplacement.platform_inventory", DecoAlignment.TOP_LEFT) + .withInventorySlots(SlotStyle.VANILLA, container.slotsBaseInventory) + .withNextLayer() + .withBox(DecoTextures.BG_STEEL, DecoTextures.TEMPLATE_SQUARE, 4, 76+4+8, 152+96-8, 76-8-8) + .withTitleBar(IIReference.GUI_LABEL_KEY+"emplacement.base_inventory", DecoAlignment.TOP_LEFT) + .withInventorySlots(SlotStyle.VANILLA, container.slotsPlatformInventory)) + .withNextLayer() .withBox(DecoTextures.BG_WOODEN, DecoTextures.TEMPLATE_ROUND_WOODEN, 32, 152+8, 176, 92) .withFrame(DecoTextures.FRAME_WOODEN_THIN, 4, false, new boolean[]{true, false, false, false}) - .withInventorySlots(SlotStyle.VANILLA, container.inventorySlots) + .withInventorySlots(SlotStyle.VANILLA, container.playerInventory) .withInventoryTitleBar() .build(); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacementPageConfig.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacementPageConfig.java index 2ab5deb5e..da76683bc 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacementPageConfig.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacementPageConfig.java @@ -1,20 +1,24 @@ package pl.pabilo8.immersiveintelligence.client.gui.block.emplacement; +import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoSlider; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoSwitch; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoPanel; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoMapDisplay; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.map.DecoMapDefaultColorMapper; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.map.scanners.BlockTypeScanner; -import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoGuiCategory; -import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTemplate; -import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTextures; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; import pl.pabilo8.immersiveintelligence.common.IIGUI; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityArtilleryHowitzer; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityFlagpole; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.TileEntityEmplacement; import pl.pabilo8.immersiveintelligence.common.util.IIColor; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -23,6 +27,12 @@ @DecoTemplate(name = "emplacement_config", category = DecoGuiCategory.TERRITORY_CONTROL_TILE) public class GuiEmplacementPageConfig extends GuiEmplacement { + private static final String KEY = IIReference.GUI_LABEL_KEY+"emplacement.config."; + @SyncNBT(events = {SyncEvents.TILE_CLIENT_MESSAGE}) + public boolean redstoneControlEnabled, dataControlEnabled; + @SyncNBT(events = {SyncEvents.TILE_CLIENT_MESSAGE}) + public float weaponHideHealthThreshold, weaponRepairSatisfactoryThreshold; + public GuiEmplacementPageConfig(EntityPlayer player, TileEntityEmplacement tile) { super(player, tile, IIGUI.EMPLACEMENT_CONFIG); @@ -86,5 +96,59 @@ public void onInit() .withBackground(DecoTextures.BG_PAPER) .withBackgroundMask(DecoTextures.TEMPLATE_PAPER) ); + + addLabel(I18n.format(KEY+"vision_range", calculateRange(sightRange, pos)), 4, 132+8-1) + .withSize(120, 10) + .withAlign(DecoAlignment.LEFT); + addLabel(I18n.format(KEY+"attack_range", calculateRange(fireRange, pos)), 4, 142+8-1) + .withSize(120, 10) + .withAlign(DecoAlignment.LEFT); + + addComponent(new DecoSwitch(136-4-2, 16-2) + .withText(KEY+"reacts_redstone") + .withSize(22, 14) + .withCurrentState(this.redstoneControlEnabled = tile.redstoneControlEnabled) + .withOnToggle(value -> this.redstoneControlEnabled = value) + .withTranslatedTooltip(KEY+"reacts_redstone.tooltip")); + addComponent(new DecoSwitch(136-4-2, 34-2-8+2) + .withText(KEY+"reacts_data") + .withSize(22, 14) + .withCurrentState(this.dataControlEnabled = tile.dataControlEnabled) + .withOnToggle(value -> this.dataControlEnabled = value) + .withTranslatedTooltip(KEY+"reacts_data.tooltip")); + + addLabel(KEY+"hide_health", 136-4-2, 60-20-2) + .withSize(110, 24) + .withWrapping(true) + .withAlign(DecoAlignment.LEFT); + addComponent(new DecoSlider(136-4-2+1, 72-20+8) + .withSize(110, 12) + .withRange(0f, 1f) + .withValue(this.weaponHideHealthThreshold = tile.weaponHideHealthThreshold) + .withOnValueChanged(value -> this.weaponHideHealthThreshold = value) + .withBarColors(DecoColors.ARMOR_INTEGRITY_1, DecoColors.ARMOR_INTEGRITY_2) + .withTranslatedTooltip(KEY+"hide_health.tooltip")); + + addLabel(KEY+"resurface_health", 136-4-2, 60-20+32-2) + .withSize(110, 24) + .withWrapping(true) + .withAlign(DecoAlignment.LEFT); + addComponent(new DecoSlider(136-4-2+1, 72-20+8+32) + .withSize(110, 12) + .withRange(0f, 1f) + .withValue(this.weaponRepairSatisfactoryThreshold = tile.weaponRepairSatisfactoryThreshold) + .withOnValueChanged(value -> this.weaponRepairSatisfactoryThreshold = Math.max(tile.weaponHideHealthThreshold, value)) + .withBarColors(DecoColors.ARMOR_INTEGRITY_1, DecoColors.ARMOR_INTEGRITY_2) + .withTranslatedTooltip(KEY+"resurface_health.tooltip")); + + } + + private String calculateRange(AxisAlignedBB range, BlockPos center) + { + double value = Math.max( + Math.max(Math.abs(range.minX-center.getX()), Math.abs(range.maxX-center.getX())), + Math.max(Math.abs(range.minZ-center.getZ()), Math.abs(range.maxZ-center.getZ())) + ); + return String.valueOf((int)Math.ceil(value)); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacementPageFireMissions.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacementPageFireMissions.java index 87edabd73..761d93538 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacementPageFireMissions.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacementPageFireMissions.java @@ -1,7 +1,7 @@ package pl.pabilo8.immersiveintelligence.client.gui.block.emplacement; import net.minecraft.entity.player.EntityPlayer; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskJobList; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskList; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoGuiCategory; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTemplate; import pl.pabilo8.immersiveintelligence.common.IIGUI; @@ -24,7 +24,7 @@ public void onInit() { super.onInit(); addComponents( - new DecoTaskJobList<>(0, 0) + new DecoTaskList<>(0, 0) .withSize(96, 152-32) .withShowJobsTab(false) ); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacementPageStorage.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacementPageStorage.java index abb80079c..81f41b455 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacementPageStorage.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/emplacement/GuiEmplacementPageStorage.java @@ -12,11 +12,14 @@ /** * @author Pabilo8 (pabilo@iiteam.net) + * @updated 02.06.2026 * @since 16.07.2021 */ @DecoTemplate(name = "emplacement_storage", category = DecoGuiCategory.TERRITORY_CONTROL_TILE) public class GuiEmplacementPageStorage extends GuiEmplacement { + private static final String KEY = IIReference.GUI_LABEL_KEY+"emplacement."; + public GuiEmplacementPageStorage(EntityPlayer player, TileEntityEmplacement tile) { super(player, tile, IIGUI.EMPLACEMENT_STORAGE); @@ -28,17 +31,12 @@ public void onInit() super.onInit(); DecoPanel panelPlatform, panelBase; addComponents( - panelPlatform = new DecoPanel(4, 8+8) + panelPlatform = new DecoPanel(4, 8+8-4) .withSize(152+96-8, 76-8) - .withBackground(DecoTextures.BG_STEEL) - .withBackgroundMask(DecoTextures.TEMPLATE_SQUARE) - .withTitleLabel(IIReference.GUI_LABEL_KEY+"emplacement.platform_inventory", DecoAlignment.TOP_LEFT), - - panelBase = new DecoPanel(4, 76+4+8) + .withBackground(null), + panelBase = new DecoPanel(4, 76+4+8-4) .withSize(152+96-8, 76-8) - .withBackground(DecoTextures.BG_STEEL) - .withBackgroundMask(DecoTextures.TEMPLATE_SQUARE) - .withTitleLabel(IIReference.GUI_LABEL_KEY+"emplacement.base_inventory", DecoAlignment.TOP_LEFT) + .withBackground(null) ); panelBase.addComponents( @@ -64,6 +62,17 @@ public void onInit() ); tile.currentWeapon.initializeGUI(panelBase, panelPlatform); } + else + { + panelPlatform.addLabel(KEY+"no_weapon", 8, 18) + .withSize(panelPlatform.width-16, 12) + .withAlign(DecoAlignment.CENTER) + .withTextColor(DecoColors.H2); + panelBase.addLabel(KEY+"no_weapon", 8, 18) + .withSize(panelBase.width-16, 12) + .withAlign(DecoAlignment.CENTER) + .withTextColor(DecoColors.H2); + } } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/flagpole/GuiFlagpole.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/flagpole/GuiFlagpole.java index 8ad0bfec7..33ede1c38 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/flagpole/GuiFlagpole.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/flagpole/GuiFlagpole.java @@ -2,7 +2,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.math.BlockPos; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoCheckbox; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoSwitch; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoDropdown; @@ -32,7 +32,7 @@ * @since 27.12.2025 */ @DecoTemplate(name = "flagpole", category = DecoGuiCategory.TERRITORY_CONTROL_TILE) -public class GuiFlagpole extends DecoGui +public class GuiFlagpole extends DecoTileGui { @SyncNBT public boolean filterFlagpoles = true, filterWeapons = true, filterLogistics = true, filterIntelligence = true, filterWireNetworks = true; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/flagpole/GuiFlagpoleFaction.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/flagpole/GuiFlagpoleFaction.java index 8a3526515..ed0d734d7 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/flagpole/GuiFlagpoleFaction.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/flagpole/GuiFlagpoleFaction.java @@ -5,7 +5,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemBanner; import net.minecraft.item.ItemStack; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoSwitch; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoDropdown; @@ -43,7 +43,7 @@ * @since 27.12.2025 */ @DecoTemplate(name = "flagpole_faction", category = DecoGuiCategory.TERRITORY_CONTROL_TILE) -public class GuiFlagpoleFaction extends DecoGui +public class GuiFlagpoleFaction extends DecoTileGui { private String factionName = null; private IIColor factionColor = null; @@ -202,32 +202,36 @@ protected boolean initialize() .withTitleLabel("Permissions", DecoAlignment.TOP) ); - panelPerms.addLabel("Role:", 4, 8+2-1) - .withSize(panelPerms.width-72-2, 14) - .withAlign(DecoAlignment.LEFT); - panelPerms.addComponents( - new DecoDropdown(panelPerms.width-72, 8+2-2) - .withSize(72-4, 14) - .withEntries(identity.getAvailableRoles().values()) - .withDisplayFunction(DecoElementDisplays.getSimpleTextDisplay(PermissionRole::getDisplayName)) - .withSelectedEntry(selectedRole = identity.getRoleOf(playerContainer.player.getUniqueID())) - .withOnSelectedEntry((oldRole, newRole) -> selectedRole = newRole), - new DecoList(2, 12+8+2+1) - .withSize(panelPerms.width-4-2, panelPerms.height-32+8-2) - .withEntries(PermissionCategory.values()) - .withDisplayFunction(new DecoEntryPanelBuilder() - .withHeight(18) - .withComponent("toggle", p -> new DecoSwitch(2, 2) - .withOnToggle(change -> IIPacketHandler.sendToServer(MessageDiplomacyAction.changePermission(selectedRole, - p.getCurrentElement(), change))) - ) - .withElementApplyMethod((permission, panel) -> { - panel.component("toggle", DecoSwitch.class) - .withCurrentState(selectedRole.isAllowed(permission)) - .withText(permission.getFullLocaleKey()); - }) - ) - ); + selectedRole = identity.getRoleOf(playerContainer.player.getUniqueID()); + if(selectedRole!=null) + { + panelPerms.addLabel("Role:", 4, 8+2-1) + .withSize(panelPerms.width-72-2, 14) + .withAlign(DecoAlignment.LEFT); + panelPerms.addComponents( + new DecoDropdown(panelPerms.width-72, 8+2-2) + .withSize(72-4, 14) + .withEntries(identity.getAvailableRoles().values()) + .withDisplayFunction(DecoElementDisplays.getSimpleTextDisplay(PermissionRole::getDisplayName)) + .withSelectedEntry(selectedRole) + .withOnSelectedEntry((oldRole, newRole) -> selectedRole = newRole), + new DecoList(2, 12+8+2+1) + .withSize(panelPerms.width-4-2, panelPerms.height-32+8-2) + .withEntries(PermissionCategory.values()) + .withDisplayFunction(new DecoEntryPanelBuilder() + .withHeight(18) + .withComponent("toggle", p -> new DecoSwitch(2, 2) + .withOnToggle(change -> IIPacketHandler.sendToServer(MessageDiplomacyAction.changePermission(selectedRole, + p.getCurrentElement(), change))) + ) + .withElementApplyMethod((permission, panel) -> { + panel.component("toggle", DecoSwitch.class) + .withCurrentState(selectedRole.isAllowed(permission)) + .withText(permission.getFullLocaleKey()); + }) + ) + ); + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/inserter/GuiInserter.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/inserter/GuiInserter.java index 0ac030ba7..3d68e4b61 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/inserter/GuiInserter.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/inserter/GuiInserter.java @@ -5,15 +5,15 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoDropdown; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoElementDisplays; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.label.DecoLabel; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoEntryPanelBuilder; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoIngredientStackPickerPanel; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoPanel; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskJobList; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskJobList.ListMode; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskList; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskList.ListMode; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBar; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoItemStackDisplay; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.text.DecoTextField; @@ -41,14 +41,14 @@ * @since 20.01.2026 */ @DecoTemplate(name = "inserter", category = DecoGuiCategory.DATA_TILE) -public class GuiInserter extends DecoGui +public class GuiInserter extends DecoTileGui { private static final String INSERTER_KEY = IIReference.GUI_LABEL_KEY+"inserter."; - private ListMode mode = ListMode.TASKS; - private DecoTaskJobList taskJobList; + private ListMode mode = ListMode.JOBS; + private DecoTaskList taskList; private DecoPanel panelDetails; @SyncNBT(events = SyncEvents.TILE_CLIENT_MESSAGE) - private EasyMultiTypeCollection tasks; + public EasyMultiTypeCollection tasks; @Nullable private InserterTask selected; @@ -74,7 +74,7 @@ public void onInit() .withBox(DecoTextures.BG_STEEL, DecoTextures.TEMPLATE_SQUARE, 108, 8+3, 120+16, 130+16-2) .build(); - addComponent((taskJobList = new DecoTaskJobList<>(0, 2)) + addComponent((taskList = new DecoTaskList<>(0, 2)) .withSize(108, 116) .withEntries(tasks) .withIsJobPredicate(InserterTask::isJob) @@ -84,7 +84,7 @@ public void onInit() if(!taskSupplier.isPresent()) return null; InserterTask created = taskSupplier.get().get(); - created.isJob = (taskJobList.getMode()==ListMode.JOBS); + created.isJob = (taskList.getMode()==ListMode.JOBS); return created; }) .withOnSelectedChanged(task -> { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/packer/GuiPacker.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/packer/GuiPacker.java index 442cae8ad..867eb7e6a 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/packer/GuiPacker.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/packer/GuiPacker.java @@ -8,7 +8,7 @@ import pl.pabilo8.immersiveintelligence.api.PackerHandler; import pl.pabilo8.immersiveintelligence.api.PackerHandler.PackerActionType; import pl.pabilo8.immersiveintelligence.api.PackerHandler.PackerTask; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoCheckbox; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoDropdown; @@ -17,8 +17,8 @@ import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoIngredientStackPickerPanel; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoIngredientStackPickerPanel.PickerPanelMode; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoPanel; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskJobList; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskJobList.ListMode; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskList; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskList.ListMode; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBar; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoFluidTank; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoItemStackDisplay; @@ -53,7 +53,7 @@ * @since 25.08.2022 */ @DecoTemplate(name = "packer", category = DecoGuiCategory.DATA_TILE) -public class GuiPacker extends DecoGui +public class GuiPacker extends DecoTileGui { @DecoResource public static ResourceLocation ICON_LABELER = ResLoc.of(RES_II, "gui/upgrade/packer_naming"); @@ -61,10 +61,10 @@ public class GuiPacker extends DecoGui @SyncNBT(events = SyncEvents.TILE_CLIENT_MESSAGE) public EasyCollection tasks; @SyncNBT - public ListMode mode = ListMode.TASKS; + public ListMode mode = ListMode.JOBS; private PackerActionType actionType; - private DecoTaskJobList taskJobList; + private DecoTaskList taskList; private DecoPanel panelDetails, panelResources; private DecoCheckbox expiresCheckbox; private DecoTextField expiresTextField; @@ -117,14 +117,14 @@ public void onInit() } // Replace mode tabs + list + action buttons with a single component - addComponent((taskJobList = new DecoTaskJobList<>(0, 0)) + addComponent((taskList = new DecoTaskList<>(0, 0)) .withSize(108, 116+12-8) .withEntries(tasks) - .withIsJobPredicate(t -> t.expirationAmount!=-1) + .withIsJobPredicate(t -> t.expirationAmount==-1) .withModeHandling(mode, m -> mode = m) .withBlankTaskSupplier(() -> { PackerTask created = new PackerTask(PackerHandler.PackerPutMode.ALL_POSSIBLE, actionType, new IngredientStack("*")); - created.expirationAmount = (taskJobList.getMode()==ListMode.TASKS)?-1: 1; + created.expirationAmount = (taskList.getMode()==ListMode.JOBS)?-1: 1; return created; }) .withOnSelectedChanged(task -> { @@ -390,6 +390,8 @@ private void updateExpiresFields() expiresCheckbox.withChecked(selected.expirationAmount!=-1); if(expiresTextField!=null) expiresTextField.withText(selected.expirationAmount==-1?"": String.valueOf(selected.expirationAmount)); + if(taskList!=null) + taskList.setMode(selected.expirationAmount==-1?ListMode.JOBS: ListMode.REQUESTS); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/packer/GuiPackerLabeler.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/packer/GuiPackerLabeler.java index 1a308e572..2267857e8 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/packer/GuiPackerLabeler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/packer/GuiPackerLabeler.java @@ -6,7 +6,7 @@ import net.minecraft.nbt.NBTTagCompound; import pl.pabilo8.immersiveintelligence.api.LogisticTag; import pl.pabilo8.immersiveintelligence.api.PackerHandler.LabelingTask; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoCheckbox; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.label.DecoLabel; @@ -14,7 +14,8 @@ import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoIngredientStackPickerPanel; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoIngredientStackPickerPanel.PickerPanelMode; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoPanel; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskJobList; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskList; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoTaskList.ListMode; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoItemStackDisplay; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.text.DecoTextField; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.text.util.TextFilter; @@ -45,12 +46,14 @@ * @since 25.08.2022 */ @DecoTemplate(name = "packer_labeler", category = DecoGuiCategory.DATA_TILE) -public class GuiPackerLabeler extends DecoGui +public class GuiPackerLabeler extends DecoTileGui { @SyncNBT(events = SyncEvents.TILE_CLIENT_MESSAGE) public EasyCollection labels; + @SyncNBT + public ListMode mode = ListMode.JOBS; - private DecoTaskJobList taskList; + private DecoTaskList taskList; private DecoPanel panelDetails; private DecoCheckbox expiresCheckbox, serialStartCheckbox; private DecoTextField expiresTextField, serialStartTextField; @@ -96,15 +99,16 @@ public void onInit() addLinkTab(IIGUI.PACKER, DecoTextures.ICON_TASKS, "tasks_module"); addLinkTab(IIGUI.PACKER_LABELER, GuiPacker.ICON_LABELER, "labeler_module"); - // Replace list + action buttons with a standardized component (no Jobs tab here) - addComponent((taskList = new DecoTaskJobList<>(0, 0)) + // Replace mode tabs + list + action buttons with a standardized component + addComponent((taskList = new DecoTaskList<>(0, 0)) .withSize(108, 116+12-8) .withEntries(labels) - .withIsJobPredicate(t -> false) + .withIsJobPredicate(t -> t.expirationAmount==-1) + .withModeHandling(mode, m -> mode = m) .withBlankTaskSupplier(() -> { LabelingTask created = new LabelingTask(); created.filter = new IngredientStack("*"); - created.expirationAmount = -1; + created.expirationAmount = (taskList.getMode()==ListMode.JOBS)?-1: 1; created.serialBatch = 0; return created; }) @@ -298,6 +302,8 @@ private void updateExpiresFields() expiresCheckbox.withChecked(selected.expirationAmount!=-1); if(expiresTextField!=null) expiresTextField.withText(selected.expirationAmount==-1?"": String.valueOf(selected.expirationAmount)); + if(taskList!=null) + taskList.setMode(selected.expirationAmount==-1?ListMode.JOBS: ListMode.REQUESTS); } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/radar/GuiRadar.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/radar/GuiRadar.java index e69893f19..0ef65986f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/radar/GuiRadar.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/radar/GuiRadar.java @@ -7,7 +7,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoCheckbox; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBar; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoMapDisplay; @@ -34,7 +34,7 @@ * @since 28.04.2023 */ @DecoTemplate(name = "radar", category = DecoGuiCategory.TERRITORY_CONTROL_TILE) -public class GuiRadar extends DecoGui +public class GuiRadar extends DecoTileGui { @DecoResource public static ResourceLocation ICON_RADAR = ResLoc.of(IIReference.RES_II, "gui/tab_icons/radar"); @@ -64,7 +64,7 @@ public void onInit() //Tabs addLinkTab(IIGUI.RADAR, GuiRadar.ICON_RADAR, "radar_module"); - addLinkTab(IIGUI.RADAR_CONFIG, DecoTextures.ICON_CONFIG, "config_module"); + addLinkTab(IIGUI.RADAR_CONFIG, DecoTextures.ICON_CONFIG, "configuration_module"); addLinkTab(IIGUI.RADAR_TARGETS, DecoTextures.ICON_TARGETS, "targets_module"); BlockPos pos = tile.getPos(); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/radar/GuiRadarConfig.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/radar/GuiRadarConfig.java index 0e01b00b5..9e826f480 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/radar/GuiRadarConfig.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/radar/GuiRadarConfig.java @@ -1,7 +1,7 @@ package pl.pabilo8.immersiveintelligence.client.gui.block.radar; import net.minecraft.entity.player.EntityPlayer; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoGuiCategory; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTemplate; @@ -15,7 +15,7 @@ * @since 28.04.2023 */ @DecoTemplate(name = "radar_config", category = DecoGuiCategory.TERRITORY_CONTROL_TILE) -public class GuiRadarConfig extends DecoGui +public class GuiRadarConfig extends DecoTileGui { public GuiRadarConfig(EntityPlayer player, TileEntityRadar tile) { @@ -35,7 +35,7 @@ public void onInit() //Tabs addLinkTab(IIGUI.RADAR, GuiRadar.ICON_RADAR, "radar_module"); - addLinkTab(IIGUI.RADAR_CONFIG, DecoTextures.ICON_CONFIG, "config_module"); + addLinkTab(IIGUI.RADAR_CONFIG, DecoTextures.ICON_CONFIG, "configuration_module"); addLinkTab(IIGUI.RADAR_TARGETS, DecoTextures.ICON_TARGETS, "targets_module"); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/radar/GuiRadarTargets.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/radar/GuiRadarTargets.java index d33aa0f9c..0038be262 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/radar/GuiRadarTargets.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/block/radar/GuiRadarTargets.java @@ -1,7 +1,7 @@ package pl.pabilo8.immersiveintelligence.client.gui.block.radar; import net.minecraft.entity.player.EntityPlayer; -import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoTileGui; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoGuiCategory; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTemplate; @@ -15,7 +15,7 @@ * @since 28.04.2023 */ @DecoTemplate(name = "radar_targets", category = DecoGuiCategory.TERRITORY_CONTROL_TILE) -public class GuiRadarTargets extends DecoGui +public class GuiRadarTargets extends DecoTileGui { public GuiRadarTargets(EntityPlayer player, TileEntityRadar tile) { @@ -37,7 +37,7 @@ public void onInit() //Tabs addLinkTab(IIGUI.RADAR, GuiRadar.ICON_RADAR, "radar_module"); - addLinkTab(IIGUI.RADAR_CONFIG, DecoTextures.ICON_CONFIG, "config_module"); + addLinkTab(IIGUI.RADAR_CONFIG, DecoTextures.ICON_CONFIG, "configuration_module"); addLinkTab(IIGUI.RADAR_TARGETS, DecoTextures.ICON_TARGETS, "targets_module"); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoEntityGui.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoEntityGui.java new file mode 100644 index 000000000..f1d6c69bb --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoEntityGui.java @@ -0,0 +1,68 @@ +package pl.pabilo8.immersiveintelligence.client.gui.deco; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import pl.pabilo8.immersiveintelligence.api.style.IStyleCustomizable; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.widget.DecoManualWidget; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.widget.DecoStyleWidget; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoGuiCategory; +import pl.pabilo8.immersiveintelligence.common.IIGUI; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; + +/** + * Deco GUI backed by an Entity. + *

+ * The concrete entity GUI supplies its container directly, because IIGUI currently has tile and item factories only. + * Entity sync is intentionally left to concrete subclasses until a project-wide entity GUI packet exists. + *

+ */ +public abstract class DecoEntityGui extends DecoGui +{ + protected final E entity; + + public DecoEntityGui(EntityPlayer player, E entity, IIGUI iigui) + { + //noinspection unchecked + super(player, (C)iigui.containerFromEntity.apply(player, entity), entity, iigui); + this.entity = entity; + } + + @Override + protected void onInitStandardAddons() + { + if(category==DecoGuiCategory.VEHICLE_ENTITY) + addWidget(new DecoManualWidget()); + if(entity instanceof IStyleCustomizable) + addWidget(new DecoStyleWidget(((IStyleCustomizable)entity))); + } + + @Override + protected boolean isStoredGuiDataValid(EasyNBT nbt) + { + if(!super.isStoredGuiDataValid(nbt)||entity==null) + return false; + final boolean[] valid = {false}; + nbt.checkSetString("entity", s -> valid[0] = getEntityGuiKey().equals(s)); + return valid[0]; + } + + @Override + protected EasyNBT createGuiDataTag() + { + EasyNBT nbt = super.createGuiDataTag(); + if(entity!=null) + nbt.withString("entity", getEntityGuiKey()); + return nbt; + } + + protected String getEntityGuiKey() + { + return entity.dimension+":"+entity.getEntityId(); + } + + public E getEntity() + { + return entity; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoGui.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoGui.java index 8dd429838..93c64aae7 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoGui.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoGui.java @@ -1,10 +1,7 @@ package pl.pabilo8.immersiveintelligence.client.gui.deco; import blusunrize.immersiveengineering.api.ApiUtils; -import blusunrize.immersiveengineering.api.DimensionBlockPos; import blusunrize.immersiveengineering.client.ClientUtils; -import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase; -import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiLabel; @@ -16,6 +13,7 @@ import net.minecraft.client.shader.Framebuffer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.ITextComponent; @@ -33,7 +31,6 @@ import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; -import pl.pabilo8.immersiveintelligence.api.style.IStyleCustomizable; import pl.pabilo8.immersiveintelligence.client.ClientProxy; import pl.pabilo8.immersiveintelligence.client.IIClientUtils; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.DecoComponent; @@ -43,25 +40,17 @@ import pl.pabilo8.immersiveintelligence.client.gui.deco.component.label.DecoLabel; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.widget.DecoComponentWidgetBase; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.widget.DecoManualWidget; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.widget.DecoOwnershipWidget; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.widget.DecoStyleWidget; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; import pl.pabilo8.immersiveintelligence.client.render.IReloadableModelContainer; import pl.pabilo8.immersiveintelligence.client.util.amt.AMTUtils; import pl.pabilo8.immersiveintelligence.common.IIGUI; import pl.pabilo8.immersiveintelligence.common.IILogger; import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; -import pl.pabilo8.immersiveintelligence.common.network.messages.MessageBooleanAnimatedPartsSync; import pl.pabilo8.immersiveintelligence.common.network.messages.MessageGuiNBT; -import pl.pabilo8.immersiveintelligence.common.network.messages.MessageIITileSync; import pl.pabilo8.immersiveintelligence.common.util.IIReference; import pl.pabilo8.immersiveintelligence.common.util.ResLoc; -import pl.pabilo8.immersiveintelligence.common.util.diplomacy.property.IOwnableProperty; import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; import pl.pabilo8.immersiveintelligence.common.util.easynbt.NBTSerialisation; -import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; -import pl.pabilo8.immersiveintelligence.common.util.multiblock.util.MultiblockInteractablePart; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -78,47 +67,43 @@ import java.util.function.Supplier; /** + * Common base for Deco GUIs. *

- * Introducing Deco, Immersive Intelligence's new GUI framework designed to be - *

    - *
  • Dynamic
  • - *
  • Elegant
  • - *
  • Compact
  • - *
  • Optimized
  • - *
- * Offering a variety of {@link pl.pabilo8.immersiveintelligence.client.gui.deco.component components}, - * {@link pl.pabilo8.immersiveintelligence.client.gui.deco.component.widget widgets} and a tile-based - * {@link DecoBackgroundBuilder} to make GUI creation easier and more efficient + * This class owns the reusable GUI mechanics: component lifecycle, widgets, labels, tooltips, + * value listeners, background drawing, JEI taken-space data and GUI screenshot export. + * Context-specific behaviour is supplied by subclasses such as {@link DecoTileGui}, + * {@link DecoEntityGui} and {@link DecoItemGui}. *

- * Class for advanced GUIs that store data in the client proxy NBT and use components for their display
- * Use annotation {@link DecoTemplate} to specify traits + * Use annotation {@link DecoTemplate} to specify traits. * * @author Pabilo8 (pabilo@iiteam.net) * @since 04.01.2025 */ -public abstract class DecoGui> extends GuiContainer +@SuppressWarnings({"rawtypes", "unchecked"}) +public abstract class DecoGui extends GuiContainer { private static final int MAX_WIDGET_TIME = 40; + private static final String NBT_GUI_NAME = "decoGui"; //Gui basics protected final String name; - protected final T tile; + protected final T context; protected final C container; protected final DecoGuiCategory category; protected final InventoryPlayer playerContainer; + protected final IIGUI gui; //Components protected final List tabList = new ArrayList<>(); protected final List widgetTabList = new ArrayList<>(); private final List> widgetList = new ArrayList<>(); private final List> valueListeners = new ArrayList<>(); - private final IIGUI gui; /** - * if true, the GUI won't perform saving to NBT during {@link #onGuiClosed()}, used for transitions between GUIs + * if true, the GUI won't perform default closing cleanup during {@link #onGuiClosed()}, used for transitions between GUIs */ protected boolean changeGUIFlag = false, refreshGUIFlag = false; //Background - private DecoBackgroundBuilder backgroundBuilder; + private DecoBackgroundBuilder backgroundBuilder; private List takenSpace; private DecoComponent focusedElement; private DecoComponent hoveredElement; @@ -130,26 +115,15 @@ public abstract class DecoGui)button).setParentGUI(this); for(DecoComponentWidgetBase widget : widgetList) widget.setParentGUI(this); - - } /** @@ -246,12 +218,15 @@ public final void initGui() */ protected void onInitStandardAddons() { - if(category==DecoGuiCategory.DATA_TILE||category==DecoGuiCategory.PRODUCTION_TILE||category==DecoGuiCategory.TERRITORY_CONTROL_TILE) - addWidget(new DecoManualWidget()); - if(tile instanceof IOwnableProperty) - addWidget(new DecoOwnershipWidget(((IOwnableProperty)tile))); - if(tile instanceof IStyleCustomizable) - addWidget(new DecoStyleWidget(((IStyleCustomizable)tile))); + + } + + /** + * Called when no {@link DecoBackgroundBuilder} was supplied. + */ + protected void onNoBackgroundBuilder() + { + xSize = ySize = 64; } /** @@ -427,7 +402,7 @@ protected final DecoLabel addLabel(DecoLabel label) */ protected DecoBackgroundBuilder startBackground() { - return this.backgroundBuilder = new DecoBackgroundBuilder<>(this); + return this.backgroundBuilder = new DecoBackgroundBuilder(this); } //--- GUI Rendering Methods ---// @@ -460,15 +435,7 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks) { if(refreshGUIFlag) { - if(backgroundBuilder!=null) - backgroundBuilder.cleanup(); - //Cleanup components - for(GuiButton b : buttonList) - if(b instanceof DecoComponent) - ((DecoComponent)b).cleanup(); - //Cleanup widgets - for(DecoComponentWidgetBase widget : widgetList) - widget.cleanup(); + cleanupDecoGui(); initGui(); refreshGUIFlag = false; } @@ -547,6 +514,19 @@ private void drawWidgets(int mouseX, int mouseY, float partialTicks) } } + protected void openManualWidget(String pageName, int index) + { + widgetList.stream() + .filter(widget -> widget instanceof DecoManualWidget) + .map(widget -> (DecoManualWidget)widget) + .findFirst().ifPresent(widget -> { + if(currentWidget!=widget) + setCurrentWidget(widget); + widget.setCurrentPage(pageName, index); + requestFocus(widget); + }); + } + /** * Renders the tooltip for a hovered-over component or itemstack. * @@ -690,27 +670,26 @@ protected final void mouseClickMove(int mouseX, int mouseY, int clickedMouseButt } /** - * Triggered upon closing the GUI. Saves the GUI data to {@link ClientProxy} and (optionally) sends a sync message to the tile entity. + * Triggered upon closing the GUI. Saves the GUI data to {@link ClientProxy} and delegates context-specific sync to subclasses. */ @Override public void onGuiClosed() { super.onGuiClosed(); - //Save GUI data if(!changeGUIFlag) { - //Send an NBT sync message to the tile entity - EasyNBT nbt = onSaveTileData(); - if(!nbt.isEmpty()) - IIPacketHandler.sendToServer(new MessageIITileSync(tile, nbt)); - //Clean stored data - ((ClientProxy)ImmersiveIntelligence.proxy).setStoredGuiData(); + onGuiClosedWithoutTransition(); + clearStoredGuiData(); } else saveGuiData(); - //Perform background and component cleanup + cleanupDecoGui(); + } + + protected void cleanupDecoGui() + { if(backgroundBuilder!=null) backgroundBuilder.cleanup(); for(GuiButton b : buttonList) @@ -721,6 +700,14 @@ public void onGuiClosed() widget.cleanup(); } + /** + * Called when the GUI is closed normally, not when it is changing to another GUI. + */ + protected void onGuiClosedWithoutTransition() + { + + } + //--- Component Events ---// protected List getTooltip() @@ -763,19 +750,16 @@ public void requestFocus(DecoComponent component) //--- NBT ---// /** - * Called upon start and synchronisation, loads the data from the client proxy + * Called upon start and synchronisation, loads the data from the client proxy. * * @return The NBT compound containing the data */ - private EasyNBT loadGuiData() + protected EasyNBT loadGuiData() { - //Load GUI data from the proxy - assert ImmersiveIntelligence.proxy instanceof ClientProxy; - ClientProxy proxy = (ClientProxy)ImmersiveIntelligence.proxy; + ClientProxy proxy = getClientProxy(); EasyNBT nbt = proxy.getStoredGuiData(); - //Return a valid compound or an empty one if location mismatch - if(!nbt.hasKey("pos")||!new DimensionBlockPos(tile).equals(nbt.getDimPos("pos"))) + if(!isStoredGuiDataValid(nbt)) return proxy.setStoredGuiData(); //Deserialize all SyncNBT fields @@ -784,17 +768,24 @@ private EasyNBT loadGuiData() return nbt; } + /** + * Checks whether stored GUI NBT belongs to this GUI instance. + */ + protected boolean isStoredGuiDataValid(EasyNBT nbt) + { + final boolean[] valid = {false}; + nbt.checkSetString(NBT_GUI_NAME, s -> valid[0] = s.equals(name)); + return valid[0]; + } + /** * Called upon closing the GUI, gathers and saves the data to the client proxy. * * @return The NBT compound containing the data */ - private EasyNBT saveGuiData() + protected EasyNBT saveGuiData() { - //Save basic identification - assert ImmersiveIntelligence.proxy instanceof ClientProxy; - EasyNBT nbt = ((ClientProxy)ImmersiveIntelligence.proxy).setStoredGuiData() - .withDimPos("pos", new DimensionBlockPos(tile)); + EasyNBT nbt = createGuiDataTag(); //Save component data for(GuiButton button : buttonList) @@ -812,15 +803,23 @@ private EasyNBT saveGuiData() } /** - * Called upon closing the GUI, collects data to be passed in a {@link MessageIITileSync} to the tile entity. - * - * @return The NBT compound containing the data + * Creates the client-side GUI persistence tag. Subclasses add their own identity keys here. */ - protected EasyNBT onSaveTileData() + protected EasyNBT createGuiDataTag() { - EasyNBT nbt = EasyNBT.newNBT(); - NBTSerialisation.synchroniseFor(this, (tag, gui) -> tag.serializeForEvent(gui, nbt.unwrap(), SyncEvents.TILE_CLIENT_MESSAGE)); - return nbt; + return getClientProxy().setStoredGuiData() + .withString(NBT_GUI_NAME, name); + } + + protected final void clearStoredGuiData() + { + getClientProxy().setStoredGuiData(); + } + + protected final ClientProxy getClientProxy() + { + assert ImmersiveIntelligence.proxy instanceof ClientProxy; + return (ClientProxy)ImmersiveIntelligence.proxy; } @Nullable @@ -867,8 +866,11 @@ public final List getTakenSpace() List takenSpace = new ArrayList<>(); //Add rectangles from the background builder if(backgroundBuilder!=null) - for(DecoBackgroundTile rect : backgroundBuilder.getTakenSpace()) + for(Object object : backgroundBuilder.getTakenSpace()) + { + DecoBackgroundTile rect = (DecoBackgroundTile)object; takenSpace.add(new Rectangle(guiLeft+rect.x, guiTop+rect.y, rect.width, rect.height)); + } //Add rectangles for each tab for(DecoTab tab : tabList) @@ -880,27 +882,14 @@ public final List getTakenSpace() //Previous widget takenSpace.add(new Rectangle(0, 0, 0, 0)); - //Current wigdet + //Current widget takenSpace.add(new Rectangle(0, 0, 0, 0)); return this.takenSpace = takenSpace; } - /** - * @return the tile entity associated with this GUI - */ - public T getTile() - { - return tile; - } - //--- Utilities ---// - public void syncAnimatedParts(MultiblockInteractablePart part, boolean state) - { - IIPacketHandler.sendToServer(new MessageBooleanAnimatedPartsSync(part.getID(), state, tile)); - } - public final boolean refreshGUI() { return changeGUI(this.gui); @@ -925,32 +914,45 @@ public final boolean changeGUI(@Nullable IIGUI newGUI) } /** - * Changes the GUI to the specified one, ensuring data is saved and sent to the server + * Changes the GUI to the specified one, ensuring data is saved and sent to the server. * - * @param newGUI the new GUI to change to, null will close the current GUI - * @param guiData additional data to save for the GUI - * @param tileData additional data to save for the tile entity + * @param newGUI the new GUI to change to, null will close the current GUI + * @param guiData additional data to save for the GUI + * @param contextData additional data to save for the backing object */ - public final boolean changeGUI(@Nullable IIGUI newGUI, @Nullable EasyNBT guiData, @Nullable EasyNBT tileData) + public final boolean changeGUI(@Nullable IIGUI newGUI, @Nullable EasyNBT guiData, @Nullable EasyNBT contextData) { //Switch the Change GUI flag to prevent double saving this.changeGUIFlag = true; - //Save Tile Entity data - EasyNBT nbt = onSaveTileData().conditionally(tileData!=null, e -> e.mergeWith(tileData)); - if(!nbt.isEmpty()) - IIPacketHandler.sendToServer(new MessageIITileSync(tile, nbt)); + //Save context-specific data first + onBeforeGuiChange(contextData); //Save GUI data saveGuiData().conditionally(guiData!=null, e -> e.mergeWith(guiData)); - //Send change GUI message + return sendGuiChangeMessage(newGUI); + } + + /** + * Gives subclasses a chance to sync their backing object before a GUI transition. + */ + protected void onBeforeGuiChange(@Nullable EasyNBT contextData) + { + + } + + /** + * Sends the actual GUI transition message. + */ + protected boolean sendGuiChangeMessage(@Nullable IIGUI newGUI) + { if(newGUI==null) IIPacketHandler.sendToServer(MessageGuiNBT.closeGuiMessage()); - else if(newGUI!=gui) - IIPacketHandler.sendToServer(new MessageGuiNBT(newGUI, tile)); - else + else if(newGUI==gui) refreshGUIFlag = true; + else + return false; return true; } @@ -1056,8 +1058,9 @@ private void exportCurrentGui() //Draw widgets drawWidgets(0, 0, 0); - //Draw tiled background, - backgroundBuilder.draw(); + //Draw tiled background, if present + if(backgroundBuilder!=null) + backgroundBuilder.draw(); GlStateManager.color(1f, 1f, 1f, 1f); GlStateManager.enableAlpha(); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoHelpBox.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoHelpBox.java deleted file mode 100644 index be907af4d..000000000 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoHelpBox.java +++ /dev/null @@ -1,51 +0,0 @@ -package pl.pabilo8.immersiveintelligence.client.gui.deco; - -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.resources.I18n; - -/** - * A class for displaying help information when hovering over a part of the gui - * - * @author Pabilo8 (pabilo@iiteam.net) - * @since 19.01.2024 - */ -public class DecoHelpBox -{ - /** - * The x position of the box - */ - public int x; - /** - * The y position of the box - */ - public int y; - /** - * The width of the box - */ - public int width; - /** - * The height of the box - */ - public int height; - /** - * The translated text to display in the box - */ - public String text; - - public DecoHelpBox(int x, int y, int width, int height, String helpText) - { - this.x = x; - this.y = y; - this.width = width; - this.height = height; - this.text = I18n.format(helpText); - } - - /** - * @param gui component this box is attached to - */ - public DecoHelpBox(GuiButton gui, String helpText) - { - this(gui.x, gui.y, gui.width, gui.height, helpText); - } -} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoItemGui.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoItemGui.java new file mode 100644 index 000000000..3a67620ef --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoItemGui.java @@ -0,0 +1,66 @@ +package pl.pabilo8.immersiveintelligence.client.gui.deco; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import pl.pabilo8.immersiveintelligence.common.IIGUI; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIItemBase; + +/** + * Deco GUI backed by an ItemStack and a {@link ContainerIIItemBase}. + */ +public abstract class DecoItemGui extends DecoGui +{ + protected final ItemStack itemStack; + protected final EnumHand hand; + + public DecoItemGui(EntityPlayer player, ItemStack heldStack, EnumHand hand, IIGUI iigui) + { + super(player, createContainer(player, heldStack, hand, iigui), heldStack==null?ItemStack.EMPTY: heldStack, iigui); + this.itemStack = heldStack==null?ItemStack.EMPTY: heldStack; + this.hand = hand; + } + + @SuppressWarnings("unchecked") + private static C createContainer(EntityPlayer player, ItemStack heldStack, EnumHand hand, IIGUI iigui) + { + return player==null||heldStack==null||hand==null||iigui.containerFromStack==null?null: + (C)iigui.containerFromStack.apply(player, heldStack, hand); + } + + @Override + protected void onNoBackgroundBuilder() + { + // Item GUIs often use a hand-drawn texture and set xSize/ySize in onInit(). + } + + @Override + protected boolean isStoredGuiDataValid(EasyNBT nbt) + { + if(!super.isStoredGuiDataValid(nbt)||hand==null) + return false; + final boolean[] valid = {false}; + nbt.checkSetString("hand", s -> valid[0] = hand.name().equals(s)); + return valid[0]; + } + + @Override + protected EasyNBT createGuiDataTag() + { + EasyNBT nbt = super.createGuiDataTag(); + if(hand!=null) + nbt.withString("hand", hand.name()); + return nbt; + } + + public ItemStack getItemStack() + { + return itemStack; + } + + public EnumHand getHand() + { + return hand; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoTileGui.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoTileGui.java new file mode 100644 index 000000000..328010e25 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/DecoTileGui.java @@ -0,0 +1,121 @@ +package pl.pabilo8.immersiveintelligence.client.gui.deco; + +import blusunrize.immersiveengineering.api.DimensionBlockPos; +import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase; +import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; +import net.minecraft.entity.player.EntityPlayer; +import pl.pabilo8.immersiveintelligence.api.style.IStyleCustomizable; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.widget.DecoManualWidget; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.widget.DecoOwnershipWidget; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.widget.DecoStyleWidget; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoGuiCategory; +import pl.pabilo8.immersiveintelligence.common.IIGUI; +import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; +import pl.pabilo8.immersiveintelligence.common.network.messages.MessageBooleanAnimatedPartsSync; +import pl.pabilo8.immersiveintelligence.common.network.messages.MessageGuiNBT; +import pl.pabilo8.immersiveintelligence.common.network.messages.MessageIITileSync; +import pl.pabilo8.immersiveintelligence.common.util.diplomacy.property.IOwnableProperty; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.NBTSerialisation; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; +import pl.pabilo8.immersiveintelligence.common.util.multiblock.util.MultiblockInteractablePart; + +import javax.annotation.Nullable; + +/** + * Deco GUI backed by a TileEntity. + */ +public abstract class DecoTileGui> extends DecoGui +{ + protected final T tile; + + public DecoTileGui(EntityPlayer player, T tile, IIGUI iigui) + { + super(player, createContainer(player, tile, iigui), tile, iigui); + this.tile = tile; + } + + @SuppressWarnings("unchecked") + private static > C createContainer(EntityPlayer player, T tile, IIGUI iigui) + { + return player==null?null: (C)iigui.containerFromTile.apply(player, tile); + } + + @Override + protected void onInitStandardAddons() + { + if(category==DecoGuiCategory.DATA_TILE||category==DecoGuiCategory.PRODUCTION_TILE||category==DecoGuiCategory.TERRITORY_CONTROL_TILE) + addWidget(new DecoManualWidget()); + if(tile instanceof IOwnableProperty) + addWidget(new DecoOwnershipWidget(((IOwnableProperty)tile))); + if(tile instanceof IStyleCustomizable) + addWidget(new DecoStyleWidget(((IStyleCustomizable)tile))); + } + + @Override + protected boolean isStoredGuiDataValid(EasyNBT nbt) + { + return tile!=null&&nbt.hasKey("pos")&&new DimensionBlockPos(tile).equals(nbt.getDimPos("pos")); + } + + @Override + protected EasyNBT createGuiDataTag() + { + return super.createGuiDataTag() + .withDimPos("pos", new DimensionBlockPos(tile)); + } + + @Override + protected void onGuiClosedWithoutTransition() + { + EasyNBT nbt = onSaveTileData(); + if(!nbt.isEmpty()) + IIPacketHandler.sendToServer(new MessageIITileSync(tile, nbt)); + } + + @Override + protected void onBeforeGuiChange(@Nullable EasyNBT tileData) + { + EasyNBT nbt = onSaveTileData().conditionally(tileData!=null, e -> e.mergeWith(tileData)); + if(!nbt.isEmpty()) + IIPacketHandler.sendToServer(new MessageIITileSync(tile, nbt)); + } + + @Override + protected boolean sendGuiChangeMessage(@Nullable IIGUI newGUI) + { + if(newGUI==null) + IIPacketHandler.sendToServer(MessageGuiNBT.closeGuiMessage()); + else if(newGUI!=gui) + IIPacketHandler.sendToServer(new MessageGuiNBT(newGUI, tile)); + else + refreshGUIFlag = true; + return true; + } + + /** + * Called upon closing or changing the GUI, collects data to be passed in a {@link MessageIITileSync} to the tile entity. + * + * @return The NBT compound containing the data + */ + protected EasyNBT onSaveTileData() + { + EasyNBT nbt = EasyNBT.newNBT(); + NBTSerialisation.synchroniseFor(this, (tag, gui) -> tag.serializeForEvent(gui, nbt.unwrap(), SyncEvents.TILE_CLIENT_MESSAGE)); + return nbt; + } + + /** + * @return the tile entity associated with this GUI + */ + public T getTile() + { + return tile; + } + + public void syncAnimatedParts(MultiblockInteractablePart part, boolean state) + { + IIPacketHandler.sendToServer(new MessageBooleanAnimatedPartsSync(part.getID(), state, tile)); + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/DecoComponent.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/DecoComponent.java index 80b383bbb..a1e19079d 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/DecoComponent.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/DecoComponent.java @@ -1,14 +1,12 @@ package pl.pabilo8.immersiveintelligence.client.gui.deco.component; import blusunrize.immersiveengineering.client.ClientUtils; -import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase; -import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.resources.I18n; +import net.minecraft.inventory.Container; import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; import pl.pabilo8.immersiveintelligence.common.util.IIMath; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; import javax.annotation.Nullable; import java.util.*; @@ -80,7 +78,7 @@ public List getTooltip() //--- Property Setters ---// - public > void setParentGUI(DecoGui parent) + public void setParentGUI(DecoGui parent) { this.parentGui = parent; this.x += parent.guiLeft; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/data_editor/DecoCodeEditor.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/data_editor/DecoCodeEditor.java index 46c2def9b..784ed7f95 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/data_editor/DecoCodeEditor.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/data_editor/DecoCodeEditor.java @@ -42,6 +42,7 @@ protected boolean initialize() @Override public DataType outputType() { - return null; + // The code view is currently a read-only preview; never return null, or applying the editor would erase the variable. + return dataType; } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/data_editor/DecoDataEditor.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/data_editor/DecoDataEditor.java index 336e0d8ff..765f99994 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/data_editor/DecoDataEditor.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/data_editor/DecoDataEditor.java @@ -75,7 +75,7 @@ public static List> getEditorTypes(boolean advanced) { return EDITORS.keySet().stream() .map(IIDataTypeUtils.metaTypesByClass::get) - //.filter(typeMetaInfo -> !advanced||typeMetaInfo.isAdvancedType()) + .filter(typeMetaInfo -> advanced||!typeMetaInfo.isAdvancedType()) .collect(Collectors.toList()); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/data_editor/DecoDataEditorExpression.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/data_editor/DecoDataEditorExpression.java index a0d907093..7a6a7536f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/data_editor/DecoDataEditorExpression.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/data_editor/DecoDataEditorExpression.java @@ -1,29 +1,42 @@ package pl.pabilo8.immersiveintelligence.client.gui.deco.component.data_editor; -import net.minecraft.util.text.TextFormatting; +import pl.pabilo8.immersiveintelligence.api.data.DataPacket; import pl.pabilo8.immersiveintelligence.api.data.IIDataTypeUtils; import pl.pabilo8.immersiveintelligence.api.data.operations.DataOperation.DataOperationMeta; import pl.pabilo8.immersiveintelligence.api.data.types.DataTypeAccessor; import pl.pabilo8.immersiveintelligence.api.data.types.DataTypeExpression; import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType; import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType.TypeMetaInfo; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoTab; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoTabGroup; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.*; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoDropdown; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoPanel; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoAlignment; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoColors; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTemplates; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTextures; -import pl.pabilo8.immersiveintelligence.common.util.IIStringUtil; +import pl.pabilo8.immersiveintelligence.common.util.IIColor; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; + +import javax.annotation.Nullable; /** + * Visual editor for {@link DataTypeExpression} used by the Arithmetic-Logic Machine. + * * @author Pabilo8 (pabilo@iiteam.net) * @since 07.09.2021 */ public class DecoDataEditorExpression extends DecoDataEditor { private int page = 0; + @Nullable private DecoPanel editor; + @Nullable + private DecoDataEditor argumentEditor; + @Nullable + private DecoDropdownDataLetters argumentAccessorDropdown; + @Nullable + private DecoDropdownDataLetters conditionDropdown; + private boolean conditionEnabled; public DecoDataEditorExpression(int x, int y, DataTypeExpression dataType) { @@ -36,90 +49,277 @@ protected boolean initialize() cleanup(); if(!super.initialize()) return false; + DataOperationMeta meta = dataType.getMeta(); + ensureArgumentArray(meta); + if(page < 0||page > meta.params().length) + page = 0; + + addComponent(buildTabs(meta)); + + if(page==0) + initializePropertiesPage(); + else + initializeArgumentPage(meta, page-1); + + return true; + } - //Initialize tabs - DecoTabGroup groups = new DecoTabGroup(0, 4) + private DecoTabGroup buildTabs(DataOperationMeta meta) + { + DecoTabGroup group = new DecoTabGroup(0, 4) .withSize(width, 12) .withHorizontalAlignment(true) .withTab((DecoTab)new DecoTab() - .withText("Properties") + .withText(IIReference.DESCRIPTION_KEY+"variable_properties") .withPadding(4, 2, 4, 2) .withOnPressed((gui, button, mouseX, mouseY) -> setPage(0)) - .withTranslatedTooltip("Properties", IIStringUtil.getItalicString(TextFormatting.GRAY+"Edit expression properties, like conditional variables.")) + .withTranslatedTooltip(IIReference.DESCRIPTION_KEY+"variable_properties.tooltip") ); + String[] params = meta.params(); for(int paramID = 0; paramID < params.length; paramID++) { int finalParamID = paramID+1; - groups.withTab((DecoTab)new DecoTab() + group.withTab((DecoTab)new DecoTab() .withText("datasystem.immersiveintelligence.function."+meta.name()+".param."+params[paramID]) .withPadding(4, 2, 4, 2) .withOnPressed((gui, button, mouseX, mouseY) -> setPage(finalParamID)) ); } - addComponents(groups); + return group; + } - //Initialize editor - removeComponent(this.editor); - if(page==0) - { - this.editor = addComponent(new DecoPanel(0, 16)) - .withSize(width, height-16) - .withBackground(null); - this.editor.addLabel("Here be parameters", 2, 2); - } - else - { - DataType argument = dataType.getArgument(page-1); + private void initializePropertiesPage() + { + this.editor = addComponent(new DecoPanel(0, 16)) + .withSize(width, height-16) + .withBackground(null) + .withBackgroundMask(null); - DecoPanel typePanel = addComponent(new DecoPanel(0, 16) - .withSize(width, 20) - .withBackground(DecoTextures.BG_PAPER) - .withBackgroundMask(DecoTextures.TEMPLATE_PAPER) - ); + assert editor!=null; - typePanel.addLabel("Type", 4, 2) - .withSize(30, 16) - .withAlign(DecoAlignment.LEFT); - typePanel.addComponents(new DecoDropdown>(34, 2) - .withSize(width-32-2-16-2-2, 16) - .withDropdownWidth(width-16) - .withBackground(DecoTextures.COMPONENT_BUTTON_PAPER) - .withDropdownSymbol(DecoTextures.COMPONENT_DROPDOWN_SYMBOL_PAPER) - .withEntries(IIDataTypeUtils.metaTypesByClass.get(DataTypeAccessor.class), - IIDataTypeUtils.metaTypesByClass.get(meta.allowedTypes()[page-1]) - ), - new DecoButton(width-17-2, 2) - .withText("@") - .withSize(16, 16) - .withBackground(DecoTextures.COMPONENT_BUTTON_PAPER) - ); + conditionEnabled = dataType.getRequiredVariable()!=' '; - //Get editor - this.editor = DecoDataEditor.getEditorFor(argument, 0, 36); - if(editor!=null) - addComponent(editor.withSize(this.width, this.height-36) - .withBackground(DecoTextures.BG_STEEL) - .withBackgroundMask(DecoTextures.TEMPLATE_PAPER) - ); - } - return true; + DecoPanel basePanel = editor.addComponent(new DecoPanel(0, 0) + .withSize(width, 36) + .withBackground(DecoTextures.BG_PAPER) + .withBackgroundMask(DecoTextures.TEMPLATE_PAPER) + ); + + basePanel.addLabel(IIReference.DESCRIPTION_KEY+"conditional_variable", 4, 5) + .withSize(width-8, 10) + .withAlign(DecoAlignment.LEFT) + .withTranslatedTooltip(IIReference.DESCRIPTION_KEY+"conditional_variable.enabled.tooltip"); + + editor.addComponent(new DecoSwitch(6, 18) + .withText(IIReference.DESCRIPTION_KEY+"conditional_variable.enabled") + .withCurrentState(conditionEnabled) + .withOnToggle(state -> { + conditionEnabled = state; + if(conditionDropdown!=null) + conditionDropdown.visible = conditionDropdown.enabled = state; + }) + ).withSize(72, 12) + .withTranslatedTooltip(IIReference.DESCRIPTION_KEY+"conditional_variable.enabled.tooltip"); + + editor.addComponent((conditionDropdown = new DecoDropdownDataLetters(width-26, 16-4)) + .withConstraints(new DataPacket()) + .withSelectedEntry((Character)(conditionEnabled?dataType.getRequiredVariable(): 'a')) + .withTranslatedTooltip(IIReference.DESCRIPTION_KEY+"conditional_variable.tooltip") + .withTextColor(DecoColors.H1, IIColor.fromPackedRGB(0x35322c)) + .withBackground(DecoTextures.COMPONENT_DROPDOWN_DATA_LETTER_PAPER) + .withDropdownSymbol(DecoTextures.COMPONENT_DROPDOWN_SYMBOL_PAPER) + ); + conditionDropdown.withSize(18, 18); + conditionDropdown.visible = conditionDropdown.enabled = conditionEnabled; + } + + private void initializeArgumentPage(DataOperationMeta meta, int argumentID) + { + Class expectedType = meta.allowedTypes()[argumentID]; + DataType argument = getArgument(argumentID, expectedType); + boolean accessor = argument instanceof DataTypeAccessor; + + this.editor = addComponent(new DecoPanel(0, 16)) + .withSize(width, height-16) + .withBackground(null) + .withBackgroundMask(null); + + TypeMetaInfo accessorMeta = IIDataTypeUtils.metaTypesByClass.get(DataTypeAccessor.class); + TypeMetaInfo expectedMeta = IIDataTypeUtils.metaTypesByClass.get(expectedType); + + DecoPanel paperPanel; + editor.addComponents( + paperPanel = new DecoPanel(0, 0) + .withSize(width, 24) + .withBackground(DecoTextures.BG_PAPER) + .withBackgroundMask(DecoTextures.TEMPLATE_PAPER), + new DecoDropdown>(34, 3) + .withSize(width-34-22, 16) + .withDropdownWidth(width-16) + .withMaxDisplayedEntries(4) + .withScrollBarBackground(DecoTextures.COMPONENT_SLIDER_PAPER) + .withBackground(DecoTextures.COMPONENT_BUTTON_PAPER) + .withListBackground(DecoTextures.COMPONENT_TEXT_FIELD) + .withDropdownSymbol(DecoTextures.COMPONENT_DROPDOWN_SYMBOL_PAPER) + .withEntries(accessorMeta, expectedMeta) + .withSelectedEntry(accessor?accessorMeta: expectedMeta) + .withDisplayFunction(DecoTemplates.getDataTypeEntryDisplay()) + .withOnSelectedEntry((oldType, newType) -> { + storeCurrentPageOutput(); + if(newType!=null&&newType.type==DataTypeAccessor.class) + setArgument(argumentID, new DataTypeAccessor(getCurrentAccessorVariable(argument))); + else + setArgument(argumentID, normalizeArgument(argument, expectedType)); + refreshPage(); + }), + new DecoButton(width-20, 3) + .withText("@") + .withSize(16, 16) + .withBackground(DecoTextures.COMPONENT_BUTTON_PAPER) + .withTranslatedTooltip(IIReference.DESCRIPTION_KEY+"expression.accessor.tooltip") + .withOnLMBPressed(() -> { + storeCurrentPageOutput(); + DataType current = getArgument(argumentID, expectedType); + if(current instanceof DataTypeAccessor) + setArgument(argumentID, normalizeArgument(current, expectedType)); + else + setArgument(argumentID, new DataTypeAccessor('a')); + refreshPage(); + }) + ); + paperPanel.addLabel(IIReference.DESCRIPTION_KEY+"variable_type", 4, 5) + .withSize(30, 16) + .withAlign(DecoAlignment.LEFT); + + if(accessor) + initializeAccessorArgument(argument); + else + initializeLiteralArgument(argument, expectedType); + } + + private void initializeAccessorArgument(DataType argument) + { + assert editor!=null; + editor.addLabel("datasystem.immersiveintelligence.datatype.accessor", 4, 30) + .withSize(60, 16) + .withAlign(DecoAlignment.LEFT); + editor.addComponent( + (argumentAccessorDropdown = new DecoDropdownDataLetters(64, 27)) + .withConstraints(new DataPacket()) + .withSelectedEntry((Character)getCurrentAccessorVariable(argument)) + .withTranslatedTooltip(IIReference.DESCRIPTION_KEY+"expression.accessor.tooltip") + .withTextColor(IIColor.fromPackedRGB(0x161c26), IIColor.fromPackedRGB(0x35322c)) + .withBackground(DecoTextures.COMPONENT_DROPDOWN_DATA_LETTER_PAPER) + .withDropdownSymbol(DecoTextures.COMPONENT_DROPDOWN_SYMBOL_PAPER) + ); + argumentAccessorDropdown.withSize(18, 18); + } + + private void initializeLiteralArgument(DataType argument, Class expectedType) + { + argumentEditor = DecoDataEditor.getEditorFor(argument, 4, 27); + assert editor!=null; + if(argumentEditor!=null) + editor.addComponent(argumentEditor) + .withSize(width-8, height-43); + else + editor.addLabel(IIReference.DESCRIPTION_KEY+"no_editor", 4, 30) + .withSize(width-8, 16) + .withAlign(DecoAlignment.LEFT) + .withTextColor(IIDataTypeUtils.metaTypesByClass.get(expectedType).color.withBrightness(0.4f)); } + //--- Utils ---// + private boolean setPage(int page) { if(page==this.page) return false; + storeCurrentPageOutput(); this.page = page; - this.initialized = false; + refreshPage(); return true; } + private void refreshPage() + { + this.argumentEditor = null; + this.argumentAccessorDropdown = null; + this.conditionDropdown = null; + this.initialized = false; + } + + private void storeCurrentPageOutput() + { + if(page==0) + { + if(conditionDropdown!=null) + { + Character selected = conditionDropdown.getSelectedEntry(); + dataType.setRequiredVariable(conditionEnabled?(selected==null?'a': selected): ' '); + } + else if(!conditionEnabled) + dataType.setRequiredVariable(' '); + return; + } + + int argumentID = page-1; + if(dataType.data==null||argumentID < 0||argumentID >= dataType.data.length) + return; + + DataType current = dataType.data[argumentID]; + if(current instanceof DataTypeAccessor) + { + Character selected = argumentAccessorDropdown==null?null: argumentAccessorDropdown.getSelectedEntry(); + setArgument(argumentID, new DataTypeAccessor(selected==null?'a': selected)); + } + else if(argumentEditor!=null) + setArgument(argumentID, argumentEditor.outputType()); + } + + private void ensureArgumentArray(DataOperationMeta meta) + { + if(dataType.data==null||dataType.data.length!=meta.allowedTypes().length) + dataType.setOperation(dataType.getOperation()); + } + + private DataType getArgument(int index, Class expectedType) + { + ensureArgumentArray(dataType.getMeta()); + if(index < 0||index >= dataType.data.length) + return IIDataTypeUtils.getVarInstance(expectedType); + DataType argument = dataType.data[index]; + if(argument instanceof DataTypeAccessor) + return argument; + return normalizeArgument(argument, expectedType); + } + + private DataType normalizeArgument(@Nullable DataType argument, Class expectedType) + { + if(argument!=null&&expectedType.isAssignableFrom(argument.getClass())) + return argument.clone(); + return IIDataTypeUtils.getVarInstance(expectedType); + } + + private void setArgument(int index, DataType value) + { + if(dataType.data==null||index < 0||index >= dataType.data.length) + return; + dataType.data[index] = value; + } + + private char getCurrentAccessorVariable(DataType argument) + { + return argument instanceof DataTypeAccessor?((DataTypeAccessor)argument).variable: 'a'; + } + @Override public DataTypeExpression outputType() { + storeCurrentPageOutput(); return dataType; } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/panel/DecoPanel.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/panel/DecoPanel.java index af53cd5a0..a4aa203df 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/panel/DecoPanel.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/panel/DecoPanel.java @@ -1,13 +1,12 @@ package pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel; import blusunrize.immersiveengineering.client.ClientUtils; -import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase; -import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager.DestFactor; import net.minecraft.client.renderer.GlStateManager.SourceFactor; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.I18n; +import net.minecraft.inventory.Container; import org.lwjgl.opengl.GL11; import pl.pabilo8.immersiveintelligence.client.IIClientUtils; import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; @@ -20,7 +19,6 @@ import pl.pabilo8.immersiveintelligence.client.util.IIDrawUtils; import pl.pabilo8.immersiveintelligence.common.util.IIColor; import pl.pabilo8.immersiveintelligence.common.util.ResLoc; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; import javax.annotation.Nullable; import java.util.ArrayList; @@ -50,7 +48,7 @@ public DecoPanel(int x, int y) } @Override - public > void setParentGUI(DecoGui parent) + public void setParentGUI(DecoGui parent) { super.setParentGUI(parent); for(DecoLabel label : labels) diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/panel/DecoTaskJobList.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/panel/DecoTaskList.java similarity index 77% rename from src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/panel/DecoTaskJobList.java rename to src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/panel/DecoTaskList.java index db60e4e11..e1317ede1 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/panel/DecoTaskJobList.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/panel/DecoTaskList.java @@ -22,9 +22,9 @@ import static pl.pabilo8.immersiveintelligence.common.util.IIReference.GUI_LABEL_KEY; /** - * Generic "task/job editor list" component: + * Generic "request/job editor list" component: *
    - *
  • mode tabs (Tasks/Jobs)
  • + *
  • mode tabs (Requests/Jobs)
  • *
  • scrolled list
  • *
  • add/remove/duplicate/clear buttons
  • *
@@ -33,20 +33,20 @@ * @ii-approved 0.3.1 * @implSpec Callers must provide:
    *
  • entries (full list)
  • - *
  • predicate telling whether entry is a "job"
  • + *
  • predicate telling whether entry is a "job"; non-job entries are shown as requests
  • *
  • entry renderer + click callback
  • *
  • button actions (usually implemented by the GUI owning the data)
  • *
* @since 08.02.2026 */ -public class DecoTaskJobList> extends DecoPanel +public class DecoTaskList> extends DecoPanel { private static final int TAB_H = 18; private static final int BTN_W = 25, BTN_H = 14, BTN_GAP = 1; private static final int LIST_Y_OFF = 8+TAB_H-4; private int listWidth, listHeight; - private ListMode mode = ListMode.TASKS; + private ListMode mode = ListMode.JOBS; private EasyCollection allEntries; private Predicate isJobPredicate = t -> false; private DecoList list; @@ -66,7 +66,7 @@ public class DecoTaskJobList> extends @Nullable private Consumer onSelectedChanged; - public DecoTaskJobList(int x, int y) + public DecoTaskList(int x, int y) { super(x, y); withBackground(null); @@ -76,29 +76,29 @@ public DecoTaskJobList(int x, int y) //--- Setters ---// @Override - public DecoTaskJobList withSize(int width, int height) + public DecoTaskList withSize(int width, int height) { this.listWidth = width; this.listHeight = height; //noinspection unchecked - return (DecoTaskJobList)super.withSize(listWidth, LIST_Y_OFF+listHeight+4+BTN_H+4); + return (DecoTaskList)super.withSize(listWidth, LIST_Y_OFF+listHeight+4+BTN_H+4); } - public DecoTaskJobList withEntries(EasyCollection entries) + public DecoTaskList withEntries(EasyCollection entries) { this.allEntries = entries; refreshListEntries(); return this; } - public DecoTaskJobList withIsJobPredicate(Predicate predicate) + public DecoTaskList withIsJobPredicate(Predicate predicate) { this.isJobPredicate = predicate!=null?predicate: (t -> false); refreshListEntries(); return this; } - public DecoTaskJobList withDisplayFunction(DecoEntryPanelBuilder builder) + public DecoTaskList withDisplayFunction(DecoEntryPanelBuilder builder) { this.displayFunction = builder; if(list!=null) @@ -106,9 +106,9 @@ public DecoTaskJobList withDisplayFunction(DecoEntryPanelBuilder builder) return this; } - public DecoTaskJobList withModeHandling(@Nullable ListMode initialMode, Consumer onModeChanged) + public DecoTaskList withModeHandling(@Nullable ListMode initialMode, Consumer onModeChanged) { - this.mode = mode==null?ListMode.TASKS: mode; + this.mode = normalizeMode(initialMode); this.onModeChanged = onModeChanged; return this; } @@ -116,7 +116,7 @@ public DecoTaskJobList withModeHandling(@Nullable ListMode initialMode, Consu /** * Fired whenever selection changes (including becoming null due to filtering/mode change). */ - public DecoTaskJobList withOnSelectedChanged(@Nullable Consumer onSelectedChanged) + public DecoTaskList withOnSelectedChanged(@Nullable Consumer onSelectedChanged) { this.onSelectedChanged = onSelectedChanged; return this; @@ -125,7 +125,7 @@ public DecoTaskJobList withOnSelectedChanged(@Nullable Consumer onSelected /** * Supplies a new blank task for the Add button. */ - public DecoTaskJobList withBlankTaskSupplier(@Nullable Supplier blankTaskSupplier) + public DecoTaskList withBlankTaskSupplier(@Nullable Supplier blankTaskSupplier) { this.blankTaskSupplier = blankTaskSupplier; return this; @@ -134,7 +134,7 @@ public DecoTaskJobList withBlankTaskSupplier(@Nullable Supplier blankTaskS /** * For GUIs that only have a single list type but still want standardized list + buttons. */ - public DecoTaskJobList withShowJobsTab(boolean showJobsTab) + public DecoTaskList withShowJobsTab(boolean showJobsTab) { this.showJobsTab = showJobsTab; return this; @@ -147,12 +147,17 @@ public ListMode getMode() public void setMode(ListMode mode) { - this.mode = mode==null?ListMode.TASKS: mode; + this.mode = normalizeMode(mode); if(onModeChanged!=null) onModeChanged.accept(this.mode); refreshListEntries(); } + private static ListMode normalizeMode(@Nullable ListMode mode) + { + return mode==null||mode==ListMode.TASKS?ListMode.REQUESTS: mode; + } + @Nullable public T getSelected() { @@ -160,7 +165,7 @@ public T getSelected() } /** - * @return entries visible in the current tab (after applying TASKS/JOBS filter). + * @return entries visible in the current tab (after applying REQUESTS/JOBS filter). */ public List getFilteredEntries() { @@ -181,7 +186,7 @@ private void refreshListEntries() //Drop selection if it moved out of current view if(selected!=null&&((mode==ListMode.JOBS)!=isJobPredicate.test(selected))) - setSelected(selected); + setSelected(null); } @Override @@ -191,29 +196,30 @@ protected boolean initialize() return false; //Mode tabs - DecoButton tabTasks = new DecoButton(0, 4) - .withSize(listWidth/2, TAB_H) - .withBackground(DecoTextures.COMPONENT_TAB_VERTICAL) - .withText(GUI_LABEL_KEY+"task_editor.tasks") - .withTranslatedTooltip(GUI_LABEL_KEY+"task_editor.tasks.tooltip") - .withOnLMBPressed(() -> setMode(ListMode.TASKS)); - - DecoButton tabJobs = new DecoButton(listWidth/2, 4) + DecoButton tabJobs = new DecoButton(0, 4) .withSize(listWidth/2, TAB_H) .withBackground(DecoTextures.COMPONENT_TAB_VERTICAL) .withText(GUI_LABEL_KEY+"task_editor.jobs") .withTranslatedTooltip(GUI_LABEL_KEY+"task_editor.jobs.tooltip") .withOnLMBPressed(() -> setMode(ListMode.JOBS)); - addComponent(tabTasks); + DecoButton tabRequests = new DecoButton(listWidth/2, 4) + .withSize(listWidth/2, TAB_H) + .withBackground(DecoTextures.COMPONENT_TAB_VERTICAL) + .withText(GUI_LABEL_KEY+"task_editor.requests") + .withTranslatedTooltip(GUI_LABEL_KEY+"task_editor.requests.tooltip") + .withOnLMBPressed(() -> setMode(ListMode.REQUESTS)); + addComponent(tabJobs); + addComponent(tabRequests); if(!showJobsTab) { - //stretch tasks tab; hide jobs tab - tabTasks.withSize(listWidth, TAB_H); + //stretch requests tab; hide jobs tab + tabRequests.withSize(listWidth, TAB_H); + tabRequests.x = tabJobs.x; tabJobs.visible = tabJobs.enabled = false; - this.mode = ListMode.TASKS; + this.mode = ListMode.REQUESTS; } //List @@ -292,7 +298,7 @@ private void onDuplicatePressed() //Create a new blank task and copy data from selected into it. T created = allEntries.copyEntry(selected); //Ensure duplicate is visible in current mode, otherwise switch mode to match it - setMode(isJobPredicate.test(created)?ListMode.JOBS: ListMode.TASKS); + setMode(isJobPredicate.test(created)?ListMode.JOBS: ListMode.REQUESTS); refreshListEntries(); } @@ -302,7 +308,7 @@ private void onClearPressed() if(allEntries==null) return; //Clear only current mode - allEntries.removeIf(t -> isJobPredicate.test(t)^this.mode!=ListMode.JOBS); + allEntries.removeIf(t -> isJobPredicate.test(t)!=(this.mode==ListMode.JOBS)); selected = null; refreshListEntries(); } @@ -318,7 +324,12 @@ private void setSelected(@Nullable T selected) public enum ListMode implements ISerializableEnum { - TASKS, - JOBS + REQUESTS, + JOBS, + /** + * @deprecated Use REQUESTS. Kept only so older GUI-sync data and external references do not hard-fail. + */ + @Deprecated + TASKS } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/storage/DecoItemStackDisplay.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/storage/DecoItemStackDisplay.java index 6237e7f2b..907817ca5 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/storage/DecoItemStackDisplay.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/storage/DecoItemStackDisplay.java @@ -11,6 +11,7 @@ import pl.pabilo8.immersiveintelligence.client.IIClientUtils; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.DecoComponent; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoAlignment; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoColors; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoSprite; import pl.pabilo8.immersiveintelligence.client.util.IIDrawUtils; import pl.pabilo8.immersiveintelligence.client.util.amt.AMTUtils; @@ -23,6 +24,7 @@ import java.util.Collections; import java.util.List; import java.util.function.Function; +import java.util.function.Supplier; /** * Displays an item stack inside a Deco GUI. @@ -43,7 +45,8 @@ public class DecoItemStackDisplay extends DecoComponent private DecoSprite backgroundSprite; private Function progressBarValue; - private IIColor barGradientColor1 = IIColor.fromPackedRGB(0xb51500), barGradientColor2 = IIColor.fromPackedRGB(0x600b00); + private Supplier barGradientColorSupplier = + () -> new IIColor[]{DecoColors.GRADIENT1, DecoColors.GRADIENT2}; private DecoAlignment iconAlignment = DecoAlignment.CENTER; private int iconSize = 16; private int cachedIconX, cachedIconY; @@ -74,10 +77,15 @@ public DecoItemStackDisplay withStack(IngredientStack stack) } public DecoItemStackDisplay withProgressBar(Function progressBarValue, IIColor barGradientColor1, IIColor barGradientColor2) + { + final IIColor[] array = new IIColor[]{barGradientColor1, barGradientColor2}; + return withProgressBar(progressBarValue, () -> array); + } + + public DecoItemStackDisplay withProgressBar(Function progressBarValue, Supplier barGradientColorSupplier) { this.progressBarValue = progressBarValue; - this.barGradientColor1 = barGradientColor1; - this.barGradientColor2 = barGradientColor2; + this.barGradientColorSupplier = barGradientColorSupplier; return this; } @@ -174,14 +182,17 @@ protected void draw(int mouseX, int mouseY, float partialTicks) } if(progressBarValue!=null) { + GlStateManager.disableTexture2D(); float progress = MathHelper.clamp(progressBarValue.apply(partialTicks), 0, 1); + IIColor[] colors = barGradientColorSupplier.get(); IIDrawUtils.startColored() .drawColorGradient( x+width+padding[0]-padding[2]+2, y-padding[1]+padding[3]+height-((height+padding[1]+padding[3]-4)*progress), 2, ((height+padding[1]+padding[3]-4)*progress), - barGradientColor1, barGradientColor2 + colors[0], colors.length > 1?colors[1]: colors[0] ) .finish(); + GlStateManager.enableTexture2D(); } GlStateManager.translate(cachedIconX, cachedIconY, 0); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/storage/DecoItemStackListDisplay.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/storage/DecoItemStackListDisplay.java deleted file mode 100644 index d2690c9a6..000000000 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/storage/DecoItemStackListDisplay.java +++ /dev/null @@ -1,259 +0,0 @@ -package pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage; - -import blusunrize.immersiveengineering.client.ClientUtils; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.util.ITooltipFlag.TooltipFlags; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.text.TextFormatting; -import pl.pabilo8.immersiveintelligence.client.IIClientUtils; -import pl.pabilo8.immersiveintelligence.client.gui.deco.component.DecoComponent; -import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoAlignment; -import pl.pabilo8.immersiveintelligence.client.util.IIDrawUtils; -import pl.pabilo8.immersiveintelligence.common.util.IIColor; - -import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; -import java.util.Collections; -import java.util.List; -import java.util.function.Supplier; - -/** - * Displays a whole list of item stacks inside a Deco GUI as a grid. - * - * @author Pabilo8 (pabilo@iiteam.net) - * @ii-approved 0.3.1 - * @since 08.01.2026 - */ -@ParametersAreNonnullByDefault -public class DecoItemStackListDisplay extends DecoComponent -{ - private Supplier> stacksSupplier = Collections::emptyList; - - protected int[] padding = new int[]{2, 2, 2, 2}; - private ResourceLocation backgroundTexture; - - private DecoAlignment contentAlignment = DecoAlignment.CENTER; - - private int slotSize = 16; - private int forcedSlotsPerRow = -1; - - private int cachedContentX, cachedContentY; - private int cachedSlotsPerRow = 1; - private int cachedRows = 1; - private int cachedContentW = 0, cachedContentH = 0; - private int lastMouseX, lastMouseY; - - private TooltipFlags tooltipFlag; - - public DecoItemStackListDisplay(int x, int y) - { - super(x, y); - withForcedAdvancedTooltip(false); - withOnTooltip(this::onDisplayTooltip); - } - - public DecoItemStackListDisplay withStacks(List stacks) - { - this.stacksSupplier = () -> stacks; - this.initialized = false; - return this; - } - - public DecoItemStackListDisplay withStacks(Supplier> stacksSupplier) - { - this.stacksSupplier = stacksSupplier; - this.initialized = false; - return this; - } - - public DecoItemStackListDisplay withBackgroundTexture(@Nullable ResourceLocation backgroundTexture) - { - this.backgroundTexture = backgroundTexture; - return this; - } - - public DecoItemStackListDisplay withPadding(int[] padding) - { - this.padding = padding; - this.initialized = false; - return this; - } - - public DecoItemStackListDisplay withContentAlignment(DecoAlignment alignment) - { - this.contentAlignment = alignment; - this.initialized = false; - return this; - } - - public DecoItemStackListDisplay withSlotSize(int slotSize) - { - this.slotSize = MathHelper.clamp(slotSize, 8, 32); - this.initialized = false; - return this; - } - - /** - * Set to -1 to auto-compute. - */ - public DecoItemStackListDisplay withForcedSlotsPerRow(int forcedSlotsPerRow) - { - this.forcedSlotsPerRow = forcedSlotsPerRow; - this.initialized = false; - return this; - } - - public DecoItemStackListDisplay withForcedAdvancedTooltip(boolean forcedAdvancedTooltip) - { - this.tooltipFlag = forcedAdvancedTooltip||ClientUtils.mc().gameSettings.advancedItemTooltips? - TooltipFlags.ADVANCED: TooltipFlags.NORMAL; - this.initialized = false; - return this; - } - - @Override - protected boolean initialize() - { - int xPad = padding[0]+padding[2]; - int yPad = padding[1]+padding[3]; - - int contentBoxW = Math.max(0, width-xPad); - int contentBoxH = Math.max(0, height-yPad); - - int computed = contentBoxW/slotSize; - if(forcedSlotsPerRow > 0) - cachedSlotsPerRow = forcedSlotsPerRow; - else - cachedSlotsPerRow = Math.max(1, computed); - - // Derive rows from current stack count (0 -> 1 row, renders nothing but alignment stays stable) - int count = Math.max(0, getStacks().size()); - cachedRows = Math.max(1, (int)Math.ceil(count/(double)cachedSlotsPerRow)); - - // Actual grid size (may exceed box vertically; caller can size component accordingly) - cachedContentW = cachedSlotsPerRow*slotSize; - cachedContentH = cachedRows*slotSize; - - cachedContentX = contentAlignment.getAlignX(x+padding[0], width, cachedContentW); - cachedContentY = contentAlignment.getAlignY(y+padding[1], height, cachedContentH); - - return true; - } - - private List getStacks() - { - List s = stacksSupplier.get(); - return s==null?Collections.emptyList(): s; - } - - private int getHoveredIndex(int mouseX, int mouseY) - { - if(mouseX < cachedContentX||mouseY < cachedContentY) - return -1; - - int localX = mouseX-cachedContentX; - int localY = mouseY-cachedContentY; - - int col = localX/slotSize; - int row = localY/slotSize; - - if(col < 0||row < 0||col >= cachedSlotsPerRow||row >= cachedRows) - return -1; - - int idx = row*cachedSlotsPerRow+col; - return idx; - } - - private ItemStack getStackAt(int index) - { - List stacks = getStacks(); - if(index < 0||index >= stacks.size()) - return ItemStack.EMPTY; - return stacks.get(index); - } - - private List onDisplayTooltip(DecoItemStackListDisplay gui) - { - int hovered = getHoveredIndex(gui.lastMouseX, gui.lastMouseY); - ItemStack stack = getStackAt(hovered); - if(stack.isEmpty()) - return Collections.emptyList(); - - List tooltip = stack.getTooltip(ClientUtils.mc().player, tooltipFlag); - for(int i = 1; i < tooltip.size(); i++) - tooltip.set(i, TextFormatting.GRAY+tooltip.get(i)); - return tooltip; - } - - @Override - protected void draw(int mouseX, int mouseY, float partialTicks) - { - GlStateManager.pushMatrix(); - - this.lastMouseX = mouseX; - this.lastMouseY = mouseY; - if(backgroundTexture!=null) - { - bindAtlas(); - IIDrawUtils.startTexturedColored() - .drawConnectedTexColorRect(x-padding[0], y-padding[1], width, height, IIColor.WHITE, backgroundTexture, 32, 32, 8, 8) - .finish(); - } - - List stacks = getStacks(); - if(!stacks.isEmpty()) - { - GlStateManager.enableDepth(); - GlStateManager.enableRescaleNormal(); - GlStateManager.color(1.0F, 1.0F, 1.0F); - RenderHelper.enableGUIStandardItemLighting(); - - for(int i = 0; i < stacks.size(); i++) - { - int col = i%cachedSlotsPerRow; - int row = i/cachedSlotsPerRow; - - int px = cachedContentX+col*slotSize; - int py = cachedContentY+row*slotSize; - - GlStateManager.pushMatrix(); - GlStateManager.translate(px, py, 0); - - // Render in a "slotSize x slotSize" square by scaling vanilla 16x16 item render - float scale = 16f/(float)slotSize; - GlStateManager.scale(1f/scale, 1f/scale, 1f); - - ItemStack stack = stacks.get(i); - ClientUtils.mc().getRenderItem().renderItemAndEffectIntoGUI(stack, 0, 0); - ClientUtils.mc().getRenderItem().renderItemOverlayIntoGUI(IIClientUtils.fontRegular, stack, 0, 0, null); - - GlStateManager.popMatrix(); - } - - RenderHelper.disableStandardItemLighting(); - GlStateManager.disableRescaleNormal(); - GlStateManager.disableDepth(); - } - - GlStateManager.popMatrix(); - } - - @Override - public void cleanup() - { - - } - - @Nullable - @Override - public Object getProvidedIngredient() - { - int hovered = getHoveredIndex(this.lastMouseX, this.lastMouseY); - ItemStack stack = getStackAt(hovered); - return stack.isEmpty()?null: stack; - } -} - diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/widget/DecoManualWidget.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/widget/DecoManualWidget.java index 5201967a6..94fbcbab4 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/widget/DecoManualWidget.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/widget/DecoManualWidget.java @@ -150,4 +150,15 @@ public DecoTab provideTab() .withTranslatedTooltip(IIReference.GUI_TOOLTIP_KEY+"widget.manual.show"); } + public void setCurrentPage(String page) + { + setCurrentPage(page, 0); + } + + public void setCurrentPage(String page, int index) + { + wrapper.setSelectedEntry(page); + wrapper.page = index; + } + } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/widget/DecoStyleWidget.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/widget/DecoStyleWidget.java index ba0592c0a..40c02db62 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/widget/DecoStyleWidget.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/component/widget/DecoStyleWidget.java @@ -2,15 +2,19 @@ import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase; import net.minecraft.client.resources.I18n; +import net.minecraft.entity.Entity; import net.minecraft.util.text.TextFormatting; import pl.pabilo8.immersiveintelligence.api.style.IStyleCustomizable; +import pl.pabilo8.immersiveintelligence.api.style.StyleConstraints.PaintStyleConstraint; import pl.pabilo8.immersiveintelligence.api.style.StyleCustomization; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoColorPicker; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoTab; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoDropdown; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.label.DecoLabel; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoAlignment; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTextures; import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; +import pl.pabilo8.immersiveintelligence.common.network.messages.MessageEntityNBTSync; import pl.pabilo8.immersiveintelligence.common.network.messages.MessageIITileSync; import pl.pabilo8.immersiveintelligence.common.util.IIColor; import pl.pabilo8.immersiveintelligence.common.util.IIReference; @@ -23,14 +27,14 @@ */ public class DecoStyleWidget extends DecoComponentWidgetBase { - private final IStyleCustomizable tile; + private final IStyleCustomizable customizable; private final StyleCustomization style; - public DecoStyleWidget(IStyleCustomizable tile) + public DecoStyleWidget(IStyleCustomizable customizable) { super(); - this.tile = tile; - this.style = tile.getStyle(); + this.customizable = customizable; + this.style = customizable.getStyle(); withSize(128, 128+32); withBackground(DecoTextures.BG_PAPER); withBackgroundMask(DecoTextures.TEMPLATE_PAPER); @@ -57,12 +61,35 @@ protected boolean initialize() .withBackground(DecoTextures.COMPONENT_BUTTON_PAPER) .withDropdownSymbol(DecoTextures.COMPONENT_DROPDOWN_SYMBOL_PAPER) .withOnSelectedEntry((oldStyle, newStyle) -> { - tile.getStyle().withStyle(newStyle); - IIPacketHandler.sendToServer(new MessageIITileSync((TileEntityIEBase)tile, EasyNBT.newNBT() - .withTag("style", tile.getStyle().serializeNBT()).unwrap() - )); + customizable.getStyle().withStyle(newStyle); + //Notify the server side of the new style + if(customizable instanceof TileEntityIEBase) + IIPacketHandler.sendToServer(new MessageIITileSync((TileEntityIEBase)customizable, EasyNBT.newNBT() + .withTag("style", customizable.getStyle().serializeNBT()).unwrap() + )); + else if(customizable instanceof Entity) + IIPacketHandler.sendToServer(new MessageEntityNBTSync((Entity)customizable, EasyNBT.newNBT() + .withTag("style", customizable.getStyle().serializeNBT()).unwrap() + )); }) ); + if(style.getConstraints().getColorCustomization()!=PaintStyleConstraint.NOT_APPLICABLE) + addComponent(new DecoColorPicker(32, 10+16+headInfo.getTotalHeight()) + .withWidth(width-32-4) + .withColor(style.getColor()) + .withOnColorChanged(newColor -> { + customizable.getStyle().withColor(newColor); + //Notify the server side of the new color + if(customizable instanceof TileEntityIEBase) + IIPacketHandler.sendToServer(new MessageIITileSync((TileEntityIEBase)customizable, EasyNBT.newNBT() + .withTag("style", customizable.getStyle().serializeNBT()).unwrap() + )); + else if(customizable instanceof Entity) + IIPacketHandler.sendToServer(new MessageEntityNBTSync((Entity)customizable, EasyNBT.newNBT() + .withTag("style", customizable.getStyle().serializeNBT()).unwrap() + )); + }) + ); return true; } return false; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/tree/upgrade/UpgradeTreeNodeRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/tree/upgrade/UpgradeTreeNodeRenderer.java index 5bd67492a..57a2169c2 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/tree/upgrade/UpgradeTreeNodeRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/tree/upgrade/UpgradeTreeNodeRenderer.java @@ -73,6 +73,12 @@ public Collection getTooltip(@Nonnull IDecoTreeNode node) List tooltip = new ArrayList<>(); tooltip.add(upgrade.getLocalizedName()); + if(upgrade.isWorkInProgress()) + { + tooltip.add(IIColor.MC_YELLOW.getHexCol(I18n.format("ie.manual.entry.wip_warning0"))); + tooltip.add(IIColor.MC_YELLOW.getHexCol(I18n.format("ie.manual.entry.wip_warning.upgrade"))); + } + List description = IIClientUtils.fontRegular.listFormattedStringToWidth( I18n.format(String.format("machineupgrade.%s.%s.desc", upgrade.getId().getResourceDomain(), diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoBackgroundBuilder.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoBackgroundBuilder.java index 5a094bdc1..cf3f54a13 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoBackgroundBuilder.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoBackgroundBuilder.java @@ -2,13 +2,14 @@ import blusunrize.immersiveengineering.client.ClientUtils; import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase; -import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager.DestFactor; import net.minecraft.client.renderer.GlStateManager.SourceFactor; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.I18n; +import net.minecraft.entity.Entity; +import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; @@ -23,7 +24,6 @@ import pl.pabilo8.immersiveintelligence.client.util.IIDrawUtils; import pl.pabilo8.immersiveintelligence.common.util.IIColor; import pl.pabilo8.immersiveintelligence.common.util.ResLoc; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; import javax.annotation.Nonnull; import java.util.ArrayList; @@ -38,7 +38,7 @@ * @ii-approved 0.3.1 * @since 07.01.2025 **/ -public class DecoBackgroundBuilder> +public class DecoBackgroundBuilder { private final List> backgroundTiles = new ArrayList<>(); private final List backgroundFrames = new ArrayList<>(); @@ -241,23 +241,34 @@ public DecoBackgroundBuilder withTitleBar(String title) /** * Adds a title bar component to the GUI * - * @param tile tile to get the title from + * @param type type to get the title from */ - public DecoBackgroundBuilder withTitleBar(T tile) + public DecoBackgroundBuilder withTitleBar(T type) { - ITextComponent displayName = tile.getDisplayName(); - if(displayName==null&&tile.hasWorld()) + ITextComponent displayName = null; + if(type instanceof TileEntityIEBase) { - World world = tile.getWorld(); - BlockPos pos = tile.getPos(); - if(world.isBlockLoaded(pos)) + TileEntityIEBase tile = (TileEntityIEBase)type; + displayName = tile.getDisplayName(); + if(displayName==null&&tile.hasWorld()) { - IBlockState state = world.getBlockState(tile.getPos()); - displayName = new TextComponentString(new ItemStack(state.getBlock(), 1, state.getBlock().getMetaFromState(state)).getDisplayName()); + World world = tile.getWorld(); + BlockPos pos = tile.getPos(); + if(world.isBlockLoaded(pos)) + { + IBlockState state = world.getBlockState(tile.getPos()); + displayName = new TextComponentString(new ItemStack(state.getBlock(), 1, state.getBlock().getMetaFromState(state)).getDisplayName()); + } } - } - return withTitleBar(displayName.getUnformattedText(), DecoAlignment.TOP); + else if(type instanceof ItemStack) + displayName = new TextComponentString(((ItemStack)type).getDisplayName()); + else if(type instanceof Entity) + displayName = ((Entity)type).getDisplayName(); + + if(displayName!=null) + return withTitleBar(displayName.getUnformattedText(), DecoAlignment.TOP); + return this; } /** diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoColors.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoColors.java index a1e5480b3..ba7541ebb 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoColors.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoColors.java @@ -38,4 +38,7 @@ public class DecoColors public static final IIColor REACTIVE_ARMOR_INTEGRITY_2 = IIColor.fromPackedRGB(0x30383b); public static final IIColor STRUCTURAL_INTEGRITY_1 = IIColor.fromPackedRGB(0x79675a); public static final IIColor STRUCTURAL_INTEGRITY_2 = IIColor.fromPackedRGB(0x4a3035); + + public static final IIColor GRADIENT1 = IIColor.fromPackedRGB(0xb51500); + public static final IIColor GRADIENT2 = IIColor.fromPackedRGB(0x600b00); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoGuiCategory.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoGuiCategory.java index 4ad7e46b0..210595821 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoGuiCategory.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoGuiCategory.java @@ -12,7 +12,9 @@ public enum DecoGuiCategory { GENERIC_TILE, GENERIC_ITEM, + GENERIC_ENTITY, PRODUCTION_TILE, TERRITORY_CONTROL_TILE, - DATA_TILE + DATA_TILE, + VEHICLE_ENTITY } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoTemplates.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoTemplates.java index 7afac319f..68fed6684 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoTemplates.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoTemplates.java @@ -5,6 +5,7 @@ import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType.TypeMetaInfo; import pl.pabilo8.immersiveintelligence.api.rotary.IRotaryEnergy; import pl.pabilo8.immersiveintelligence.client.IIClientUtils; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.DecoComponent.DecoComponentTemplate; @@ -165,4 +166,30 @@ public class DecoTemplates }) ); + public static DecoEntryPanelBuilder> getDataTypeEntryDisplay() + { + return new DecoEntryPanelBuilder>() + .withHeight(18) + .withBackground(DecoTextures.BG_PAPER) + .withBackgroundMask(DecoTextures.TEMPLATE_PAPER) + //Type Icon, Label, and Letter + .withComponent("image", new DecoImage(3, 1) + .withSize(16, 16)) + .withLabel("typeLabel", + new DecoLabel(IIClientUtils.fontRegular, 20, 1) + .withSize(48, 18) + .withAlign(DecoAlignment.LEFT) + .withText("Integer") + ) + .withElementApplyMethod((typeMeta, panel) -> { + //type label (f.e. integer) + panel.label("typeLabel") + .withText(typeMeta.getTranslatedName()) + .withTextColor(typeMeta.color.withBrightness(0.4f)); + //type icon + panel.component("image", DecoImage.class) + .withImageLocation(typeMeta.getTextureLocation(), true); + }) + .withElementTooltip(typeMeta -> "a"); + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoTextures.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoTextures.java index ce1429394..b8bb74bff 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoTextures.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/deco/util/DecoTextures.java @@ -129,8 +129,11 @@ public class DecoTextures public static final ResLoc ICON_ENERGY_OUTPUT = ResLoc.of(RES_TEXTURES_DECO_ICON, "icon_energy_output"); public static final ResLoc ICON_ENERGY_INPUT = ResLoc.of(RES_TEXTURES_DECO_ICON, "icon_energy_input"); public static final ResLoc ICON_ENERGY = ResLoc.of(RES_TEXTURES_DECO_ICON, "icon_energy"); - public static final ResLoc ICON_CONTACT = ResLoc.of(RES_TEXTURES_DECO_ICON, "icon_contact"); - public static final ResLoc ICON_PROXIMITY = ResLoc.of(RES_TEXTURES_DECO_ICON, "icon_proximity"); + + //--- Ammo Icons ---// + public static final ResLoc ICON_CONTACT = ResLoc.of(RES_TEXTURES_DECO_ICON, "icon_fuse_contact"); + public static final ResLoc ICON_TIMED = ResLoc.of(RES_TEXTURES_DECO_ICON, "icon_fuse_timed"); + public static final ResLoc ICON_PROXIMITY = ResLoc.of(RES_TEXTURES_DECO_ICON, "icon_fuse_proximity"); //--- Deco Bar Icons ---// public static final ResLoc ICON_ACTION_DUPLICATE = ResLoc.of(RES_TEXTURES_DECO_ICON, "action_duplicate"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/entity/GuiEntityUpgrade.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/entity/GuiEntityUpgrade.java new file mode 100644 index 000000000..2d67789e2 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/entity/GuiEntityUpgrade.java @@ -0,0 +1,256 @@ +package pl.pabilo8.immersiveintelligence.client.gui.entity; + +import blusunrize.immersiveengineering.api.crafting.IngredientStack; +import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.TextFormatting; +import pl.pabilo8.immersiveintelligence.api.upgrade.IUpgradableDevice; +import pl.pabilo8.immersiveintelligence.api.upgrade.Upgrade; +import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeTechTree; +import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeUtils.UpgradeOperation; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoEntityGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.button.DecoButton; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.collection.DecoTreeDisplay; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.label.DecoLabel; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoPanel; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoBar; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoItemStackDisplay; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoScenarioDisplay; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.visual.DecoImage; +import pl.pabilo8.immersiveintelligence.client.gui.deco.tree.IDecoTreeNode; +import pl.pabilo8.immersiveintelligence.client.gui.deco.tree.upgrade.UpgradeTechTreeWrapper; +import pl.pabilo8.immersiveintelligence.client.gui.deco.tree.upgrade.UpgradeTreeNodeRenderer; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.*; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; +import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTModel; +import pl.pabilo8.immersiveintelligence.common.IIGUI; +import pl.pabilo8.immersiveintelligence.common.gui.ContainerEntityUpgrade; +import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; +import pl.pabilo8.immersiveintelligence.common.network.messages.MessageBeginMachineUpgrade; +import pl.pabilo8.immersiveintelligence.common.util.IIColor; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; +import pl.pabilo8.immersiveintelligence.common.util.ResLoc; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; + +import javax.annotation.Nonnull; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @author Pabilo8 (pabilo@iiteam.net) + * @since 10.07.2019 + */ +@DecoTemplate(name = "upgrade_tile", category = DecoGuiCategory.GENERIC_ENTITY) +public class GuiEntityUpgrade extends DecoEntityGui> +{ + private final UpgradeTechTree techTree; + private DecoTreeDisplay techTreeDisplay; + private DecoPanel panelInfo; + + @SyncNBT(nullable = true) + public String lastUpgrade; + private DecoScenarioDisplay scenario; + + public GuiEntityUpgrade(EntityPlayer player, T tile) + { + super(player, tile, IIGUI.UPGRADE_ENTITY); + this.techTree = tile!=null?UpgradeTechTree.getTreeFor(tile): null; + } + + @Override + public void onInit() + { + ResLoc style = DecoTextures.BG_STEEL; + switch(entity.getUpgradableMachineStyle()) + { + case WOODEN: + style = DecoTextures.BG_WOODEN; + break; + case BRICKS: + style = DecoTextures.BG_BRICKS; + break; + case CONCRETE: + style = DecoTextures.BG_CONCRETE; + break; + case SANDBAGS: + style = DecoTextures.BG_SANDBAGS; + break; + case STEEL: + default: + break; + } + + startBackground() + .withBox(style, 0, 0, 256, 152+8+8) + .withTitleBar("desc.immersiveintelligence.upgrade_gui.title") + .withNextLayer() + .withBox(DecoTextures.BG_WOODEN, DecoTextures.TEMPLATE_ROUND_WOODEN, 40, 136+24+8, 176, 92) + .withFrame(DecoTextures.FRAME_WOODEN_THIN, 4, false, new boolean[]{true, false, false, false}) + .withInventorySlots(SlotStyle.VANILLA, container.inventorySlots) + .withInventoryTitleBar() + .build(); + + //Upgrade + addComponents( + new DecoPanel(4, 4+8) + .withSize(108, 152) + .withBackground(DecoTextures.BG_PAPER) + .withBackgroundMask(DecoTextures.TEMPLATE_SQUARE), + scenario = new DecoScenarioDisplay(4+2, 4+2+8) + .withSize(108-4, 96) + .withBackgroundColor(IIColor.BLACK.withAlpha(32)) + .withScale(0.125f) + .withRotation(-12.5f, 5) + .withRotationAnimation(240, 0) + .withInteractionAllowed(true), + new DecoButton(118-4, 16-8-4+14-14+8) + .withSize(69, 14) + .withBackground(DecoTextures.COMPONENT_TAB_VERTICAL) + .withText(IIReference.DESCRIPTION_KEY+"upgrade_gui.tech_tree") + .withOnLMBPressed(() -> { + panelInfo.visible = panelInfo.enabled = false; + techTreeDisplay.visible = techTreeDisplay.enabled = true; + refreshModelPreview(null); + }), + new DecoButton(118-4+69, 16-8-4+14-14+8) + .withSize(69, 14) + .withBackground(DecoTextures.COMPONENT_TAB_VERTICAL) + .withText(IIReference.DESCRIPTION_KEY+"upgrade_gui.info") + .withOnLMBPressed(() -> { + panelInfo.visible = panelInfo.enabled = true; + techTreeDisplay.visible = techTreeDisplay.enabled = false; + if(lastUpgrade!=null&&!lastUpgrade.isEmpty()) + refreshModelPreview(Upgrade.getUpgradeByID(ResLoc.of(lastUpgrade))); + }), + panelInfo = new DecoPanel(118-4, 16-8-4+14+8) + .withSize(146-8, 146-8) + .withBackground(DecoTextures.BG_STEEL) + .withBackgroundMask(DecoTextures.TEMPLATE_SQUARE), + techTreeDisplay = new DecoTreeDisplay(118-4, 16-8-4+14+8) + .withTree(new UpgradeTechTreeWrapper(techTree, entity) + { + @Override + public void onNodeClicked(@Nonnull IDecoTreeNode node) + { + panelInfo.visible = panelInfo.enabled = true; + techTreeDisplay.visible = techTreeDisplay.enabled = false; + showUpgrade(node.getUserData()); + refreshModelPreview(node.getUserData()); + } + }) + .withNodeRenderer(new UpgradeTreeNodeRenderer()) + .withSize(146-8, 146-8) + .withBackground(DecoSprite.atlasSprite(DecoTextures.BG_DARK, 64)) + ); + + if(lastUpgrade==null) + { + showUpgrade(null); + refreshModelPreview(null); + } + else + { + Upgrade current = Upgrade.getUpgradeByID(ResLoc.of(lastUpgrade)); + showUpgrade(current); + refreshModelPreview(current); + } + } + + private void showUpgrade(Upgrade upgrade) + { + panelInfo.cleanup(); + if(upgrade!=null) + { + //Name and descriptionm + panelInfo.addLabel(upgrade.getLocalizedName(), 2+20, 2) + .withSize(panelInfo.width-4-20, 20) + .withWrapping(true) + .withAlign(DecoAlignment.CENTER); + DecoLabel descLabel = panelInfo.addLabel(TextFormatting.ITALIC+I18n.format(String.format("machineupgrade.%s.%s.desc", + upgrade.getId().getResourceDomain(), + upgrade.getId().getResourcePath().replace("/", "."))), + 4, 22) + .withSize(panelInfo.width-8, 20) + .withWrapping(true) + .withAlign(DecoAlignment.TOP_LEFT); + + //Icon + panelInfo.addComponent(new DecoImage(4, 4)) + .withSize(16, 16) + .withImageLocation(upgrade.getIcon(), true); + //Required stacks + List requiredStacks = upgrade.getRequiredStacks(); + for(int i = 0; i < requiredStacks.size(); i++) + { + panelInfo.addComponent(new DecoItemStackDisplay(2+(i%7*20), 22+2+descLabel.getTotalHeight()+(i/7))) + .withSize(18, 18) + .withStack(requiredStacks.get(i)); + } + + //Required energy + int energyRequired = (int)(upgrade.getProgressRequired()*0.75f); + panelInfo.addComponent(new DecoBar(4, 22+64+28-16)) + .withTemplate(DecoTemplates.BAR_ELECTRIC_ENERGY_INPUT) + .withLimits(0, energyRequired, upgrade::getProgressRequired) + .withSize(panelInfo.width-4-4, 12) + .withHorizontalMode(true); + + //Install button + final boolean shouldInstall = !entity.isUpgradeInstalled(upgrade); + final boolean canInstall = entity.addUpgrade(upgrade, UpgradeOperation.PROBE); + DecoButton button = panelInfo.addComponent(new DecoButton(4, 22+64+28)) + .withWidth(panelInfo.width-8) + .withText(IIReference.DESCRIPTION_KEY+(shouldInstall?"upgrade_gui.install": "upgrade_gui.remove")) + .withOnLMBPressed(() -> { + IIPacketHandler.sendToServer(new MessageBeginMachineUpgrade(entity, upgrade, this.mc.player, shouldInstall)); + closeGUI(); + }); + + if(shouldInstall&&!canInstall) + button.enabled = false; + } + } + + private void refreshModelPreview(Upgrade upgrade) + { + ArrayList builder = new ArrayList<>(); + + //Add base model + ResLoc baseRes = techTree.getModelLocation(); + if(baseRes!=null) + builder.add(new AMTModel(DefaultVertexFormats.ITEM, baseRes)); + + //Collect all installed upgrades + ArrayList upgrades = new ArrayList<>(entity.getAllInstalledUpgrades()); + //Remove incompatible from preview and add requirements + if(upgrade!=null) + { + upgrades.removeAll(techTree.getAllIncompatibleUpgrades(upgrade)); + upgrades.addAll(techTree.getAllRequiredUpgrades(upgrade.getPurpose())); + upgrades.add(upgrade); + } + + //Add all installed upgrades + upgrades.stream().distinct() + .map(techTree::getUpgradeModelLocation) + .filter(Objects::nonNull) + .map(upgradeRes -> new AMTModel(DefaultVertexFormats.ITEM, upgradeRes)) + .forEach(builder::add); + + //Build + AMTModel built = new AMTModel(builder.toArray(new AMTModel[0])); + Vec3d center = built.findActualModelCenter(); + Vec3d size = built.findModelSize(); + float maxEdge = (float)Math.max(size.x, Math.max(size.y, size.z)); + + scenario.withModel(false, built); + scenario.withOrigin(center.x, center.y, center.z); + scenario.withTranslation(-center.x, -center.y, -center.z); + scenario.withScale(Math.min(maxEdge==0?0.125f: (0.125f/(maxEdge/6f)), 0.325f)); + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/inworld_overlay/VehicleDebugOverlay.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/inworld_overlay/VehicleDebugOverlay.java index e76e13825..f404778d5 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/inworld_overlay/VehicleDebugOverlay.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/inworld_overlay/VehicleDebugOverlay.java @@ -15,12 +15,12 @@ import pl.pabilo8.immersiveintelligence.client.IIClientUtils; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Graphics; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityVehicleBase; -import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleDurability; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehiclePart; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleWheel; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.VerticalForces; import pl.pabilo8.immersiveintelligence.common.util.IIColor; import pl.pabilo8.immersiveintelligence.common.util.entity.IIEntityUtils; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; import javax.annotation.Nonnull; import java.util.List; @@ -42,7 +42,7 @@ public void draw(@Nonnull EntityPlayer player, @Nonnull World world, RayTraceRes double posY = player.lastTickPosY+(player.posY-player.lastTickPosY)*(double)partialTicks; double posZ = player.lastTickPosZ+(player.posZ-player.lastTickPosZ)*(double)partialTicks; boolean displayWheelBoxes = true; - boolean displayNames = true; + boolean displayNames = false; if(!Graphics.vehicleDebugOverlay) return; @@ -115,7 +115,7 @@ else if(part.durability!=vehicle.durabilityMain) GlStateManager.rotate(-player.rotationPitch, 1, 0, 0); GlStateManager.scale(0.0625f/2, -0.0625f/2, 0.0625f/2); - VehicleDurability durability = part.getDurability(); + SyncedDurability durability = part.getDurability(); String[] lines; if(durability!=null) lines = new String[]{ diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/item/GuiCasingPouch.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/item/GuiCasingPouch.java index a6672b99d..deceefd8d 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/item/GuiCasingPouch.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/item/GuiCasingPouch.java @@ -1,46 +1,64 @@ package pl.pabilo8.immersiveintelligence.client.gui.item; -import blusunrize.immersiveengineering.client.gui.GuiIEContainerBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumHand; -import pl.pabilo8.immersiveintelligence.client.IIClientUtils; +import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoItemGui; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoPanel; +import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoItemStackDisplay; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoBackgroundBuilder.SlotStyle; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoGuiCategory; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTemplate; +import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTextures; +import pl.pabilo8.immersiveintelligence.common.IIContent; +import pl.pabilo8.immersiveintelligence.common.IIGUI; import pl.pabilo8.immersiveintelligence.common.gui.ContainerCasingPouch; -import pl.pabilo8.immersiveintelligence.common.util.IIReference; -import pl.pabilo8.immersiveintelligence.common.util.ResLoc; +import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIAmmoCasing.Casing; +import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIBulletMagazine.Magazines; +import pl.pabilo8.immersiveintelligence.common.util.IIColor; /** * @author Pabilo8 (pabilo@iiteam.net) * @since 25.09.2023 */ -public class GuiCasingPouch extends GuiIEContainerBase +@DecoTemplate(name = "casing_pouch", category = DecoGuiCategory.GENERIC_TILE) +public class GuiCasingPouch extends DecoItemGui { - private static final ResLoc texture = IIReference.RES_TEXTURES_GUI.with("casing_pouch").withExtension(ResLoc.EXT_PNG); - private final ItemStack pouch; - public GuiCasingPouch(EntityPlayer player, ItemStack heldStack, EnumHand hand) { - super(new ContainerCasingPouch(player, heldStack, hand)); - this.pouch = heldStack; - xSize = 176; - ySize = 173; - } - - /** - * Draw the foreground layer for the GuiContainer (everything in front of the items) - */ - @Override - protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) - { - IIClientUtils.drawStringCentered(this.fontRenderer, this.pouch.getDisplayName(), 0, 6, xSize, 0, 0xffc596); -// this.fontRenderer.drawString(this.pouch.getDisplayName(), 8, 6, 0xffc596); + super(player, heldStack, hand, IIGUI.CASING_POUCH); } @Override - protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + public void onInit() { - IIClientUtils.bindTexture(texture); - this.drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + startBackground() + .withBox(DecoTextures.BG_STEEL_ROUGH, DecoTextures.TEMPLATE_ROUND, 0, 0, 176, 5*16, IIColor.fromPackedRGB(0x8dae77)) + .withStandaloneFrame(6, 4, 176-12, 5*16-10, DecoTextures.FRAME_CORNERS_BRASS, 4, true) + .withTitleBar(itemStack) + .withInventorySlots(SlotStyle.VANILLA, container.slotsCasing) + .withInventorySlots(SlotStyle.VANILLA, container.slotsMagazine) + .withBox(DecoTextures.BG_WOODEN, DecoTextures.TEMPLATE_ROUND_WOODEN, 0, 5*16, 176, 92) + .withInventorySlots(SlotStyle.VANILLA, container.playerInventory) + .withInventoryTitleBar() + .build(); + DecoPanel infoPanel = addComponent(new DecoPanel(64*2+8-2, 14) + .withSize(20, 16*4-6) + .withBackground(DecoTextures.BG_PAPER) + .withBackgroundMask(DecoTextures.TEMPLATE_PAPER) + ); + infoPanel.addComponent(new DecoItemStackDisplay(2, 2) + .withStack(IIContent.itemAmmoCasing.getStack(Casing.MG_2BCAL)) + .withOnTooltip(null) + ); + infoPanel.addComponent(new DecoItemStackDisplay(2, 20) + .withStack(IIContent.itemAmmoCasing.getStack(Casing.MG_2BCAL)) + .withOnTooltip(null) + ); + infoPanel.addComponent(new DecoItemStackDisplay(2, 19+19+1) + .withStack(IIContent.itemBulletMagazine.getStack(Magazines.MACHINEGUN)) + .withOnTooltip(null) + ); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/GuiOverlayTripodPeriscope.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/GuiOverlayTripodPeriscope.java index fd7458de0..437b10e3c 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/GuiOverlayTripodPeriscope.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/GuiOverlayTripodPeriscope.java @@ -8,7 +8,7 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.RayTraceResult.Type; import pl.pabilo8.immersiveintelligence.client.util.CameraHandler; -import pl.pabilo8.immersiveintelligence.common.entity.EntityTripodPeriscope; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityTripodPeriscope; import pl.pabilo8.immersiveintelligence.common.util.IIReference; import javax.annotation.Nonnull; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/gun/GuiOverlayGunBase.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/gun/GuiOverlayGunBase.java index c946cd3e2..8bf51f647 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/gun/GuiOverlayGunBase.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/gun/GuiOverlayGunBase.java @@ -9,6 +9,7 @@ import pl.pabilo8.immersiveintelligence.client.util.IIDrawUtils; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.util.IIColor; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunAmmoProvider; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -16,14 +17,17 @@ */ public abstract class GuiOverlayGunBase extends GuiOverlayBase { - void drawMagazine(ItemStack magazine, int width, int height) + protected void drawMagazine(GunAmmoProvider provider, int width, int height) { - drawMagazine(width, height, - IIContent.itemBulletMagazine.readInventory(magazine) - ); + drawMagazine(provider.getAmmoList(), width, height); + } + + protected void drawMagazine(ItemStack magazine, int width, int height) + { + drawMagazine(IIContent.itemBulletMagazine.readInventory(magazine), width, height); } - public void drawMagazine(int width, int height, NonNullList ammo) + protected void drawMagazine(NonNullList ammo, int width, int height) { IIDrawUtils draw = IIDrawUtils.startTexturedColored(); draw.drawTexColorRect(width-38, height-27, 36, 25, IIColor.WHITE, 15/256f, (15+36)/256f, 29/256f, (29+25)/256f); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/gun/GuiOverlayMachinegun.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/gun/GuiOverlayMachinegun.java index 34df9f3b3..a46ced272 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/gun/GuiOverlayMachinegun.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/gun/GuiOverlayMachinegun.java @@ -6,8 +6,8 @@ import net.minecraftforge.fluids.FluidStack; import pl.pabilo8.immersiveintelligence.client.IIClientUtils; import pl.pabilo8.immersiveintelligence.client.util.IIDrawUtils; -import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.Machinegun; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMachinegun; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMachinegun; +import pl.pabilo8.immersiveintelligence.common.item.weapons.ItemIIWeaponUpgrade.WeaponUpgrade; import pl.pabilo8.immersiveintelligence.common.util.IIColor; import javax.annotation.Nonnull; @@ -19,7 +19,8 @@ */ public class GuiOverlayMachinegun extends GuiOverlayGunBase { - private IIColor colorFrom = IIColor.fromPackedRGB(0xdf9916), colorTo = IIColor.fromPackedRGB(0xba0f0f); + private final IIColor colorFrom = IIColor.fromPackedRGB(0xdf9916); + private final IIColor colorTo = IIColor.fromPackedRGB(0xba0f0f); @Override public boolean shouldDraw(@Nonnull EntityPlayer player, @Nullable RayTraceResult mouseOver) @@ -33,34 +34,37 @@ public void draw(@Nonnull EntityPlayer player, @Nullable RayTraceResult mouseOve final EntityMachinegun mg = (EntityMachinegun)player.getRidingEntity(); assert mg!=null; - IIDrawUtils draw; - - if(mg.hasSecondMag) - drawMagazine(mg.magazine2, width, height); - - drawMagazine(mg.magazine1, width, height); - + //Draw loaded ammo + if(mg.upgrades.contains(WeaponUpgrade.BELT_FED_LOADER)) + drawMagazine(mg.loadingCrate, width, height); + else + { + if(mg.upgrades.contains(WeaponUpgrade.SECOND_MAGAZINE)) + drawMagazine(mg.loadingMagazine2, width, height); + drawMagazine(mg.loadingMagazine1, width, height); + } bindHUDTexture(); - draw = IIDrawUtils.startTexturedColored() + + //Draw Overheat + IIDrawUtils draw = IIDrawUtils.startTexturedColored() .setOffset(width-38-24, height) .drawTexColorRect(0, -20, 22, 18, IIColor.WHITE, 0/256f, 22/256f, 62/256f, 80/256f) .inBetween((x, y) -> { - IIClientUtils.drawGradientBar(x+1, y-19, 3, 16, colorFrom, colorTo, mg.overheating/(float)Machinegun.maxOverheat); + IIClientUtils.drawGradientBar(x+1, y-19, 3, 16, colorFrom, colorTo, mg.recoil.getOverheat(0)); bindHUDTexture(); }) .drawTexColorRect(5, -19, 16, 16, IIColor.WHITE, 16/256f, 32/256f, 0, 16/256f); draw.addOffset(0, -18); //Draw Water - if(mg.tankCapacity > 0) + if(mg.upgrades.contains(WeaponUpgrade.WATER_COOLING)) { final FluidStack fluid = mg.tank.getFluid(); draw.drawTexColorRect(0, -20, 22, 18, IIColor.WHITE, 0/256f, 22/256f, 62/256f, 80/256f) .inBetween((x, y) -> { if(fluid==null) return; - - float hh = 16*((float)mg.tank.getFluidAmount()/(float)mg.tankCapacity); + float hh = 16f*mg.tank.getFillPercentage(); ClientUtils.drawRepeatedFluidSprite(fluid, x+1, y-3-hh, 3, hh); bindHUDTexture(); }) @@ -68,11 +72,11 @@ public void draw(@Nonnull EntityPlayer player, @Nullable RayTraceResult mouseOve .addOffset(0, -18); } //Draw Shield - if(mg.maxShieldStrength > 0) + if(mg.upgrades.contains(WeaponUpgrade.SHIELD)) { draw .drawTexColorRect(0, -20, 22, 18, IIColor.WHITE, 0/256f, 22/256f, 62/256f, 80/256f) - .inBetween((x, y) -> IIClientUtils.drawArmorBar(x+1, y-19, 3, 16, mg.shieldStrength/mg.maxShieldStrength)) + .inBetween((x, y) -> IIClientUtils.drawArmorBar(x+1, y-19, 3, 16, (float)mg.shield.getDamageFactor())) .drawTexColorRect(5, -19, 16, 16, IIColor.WHITE, 32/256f, 48/256f, 0, 16/256f); } draw.finish(); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/gun/GuiOverlayRifle.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/gun/GuiOverlayRifle.java index ebc88dd4d..31c5f0785 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/gun/GuiOverlayRifle.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/gui/overlay/gun/GuiOverlayRifle.java @@ -40,7 +40,7 @@ public void draw(@Nonnull EntityPlayer player, @Nullable RayTraceResult mouseOve NonNullList ammo = NonNullList.create(); for(NBTBase nbtBase : IIContent.itemRifle.getAmmoList(stack)) ammo.add(new ItemStack(((NBTTagCompound)nbtBase))); - drawMagazine(width, height, ammo); + drawMagazine(ammo, width, height); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/model/TextureRecoloringRegistry.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/model/TextureRecoloringRegistry.java index f4acbcd5c..f29877e3a 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/model/TextureRecoloringRegistry.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/model/TextureRecoloringRegistry.java @@ -66,7 +66,7 @@ public static SpriteRecolored getRecoloredTextureSprite(ResourceLocation base, I RecolorableTexture texture = RECOLORABLE_TEXTURES.get(base); if(texture==null) return null; - return texture.recoloredVariants.get(color); + return texture.recoloredVariants.get(color.constraintToPaintSystem()); } private static class RecolorableTexture diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/FieldFlakRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/FieldFlakRenderer.java new file mode 100644 index 000000000..9e803b45f --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/FieldFlakRenderer.java @@ -0,0 +1,133 @@ +package pl.pabilo8.immersiveintelligence.client.render.entity.vehicle; + +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.math.MathHelper; +import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeTechTree; +import pl.pabilo8.immersiveintelligence.client.util.amt.AMTUtils; +import pl.pabilo8.immersiveintelligence.client.util.amt.animation.IIAnimationCachedMap; +import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTCachedModelBuilder; +import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTCrossVariantReference; +import pl.pabilo8.immersiveintelligence.client.util.amt.parts.AMT; +import pl.pabilo8.immersiveintelligence.client.util.amt.parts.AMTBipedAdapter; +import pl.pabilo8.immersiveintelligence.client.util.amt.parts.AMTLocator; +import pl.pabilo8.immersiveintelligence.client.util.amt.parts.AMTParticle; +import pl.pabilo8.immersiveintelligence.client.util.amt.renderer.IIEntityRenderer.RegisteredEntityRenderer; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun.EntityFieldFlak; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat; + +@RegisteredEntityRenderer(clazz = EntityFieldFlak.class, name = "vehicle/field_flak") +public class FieldFlakRenderer extends IIVehicleRenderer +{ + private IIAnimationCachedMap aimYaw, aimPitch, load1, load2, unload1, unload2, fire1, fire2; + private IIAnimationCachedMap forward, backward, left, right; + private AMTCrossVariantReference bipedGunner, bipedCommander; + + public FieldFlakRenderer(RenderManager renderManager) + { + super(renderManager); + } + + @Override + public void draw(EntityFieldFlak entity, BufferBuilder buf, float partialTicks, Tessellator tes) + { + //Apply vehicle transforms + double rotYaw = MathHelper.clampedLerp(entity.prevRotationYaw, entity.rotationYaw, partialTicks); + GlStateManager.rotate((float)(rotYaw-90), 0, 1, 0); + //TODO: 29.05.2026 proper rotations after Trej fixes the model + + model.getVariant(entity, entity.getStyle()); + + //Animate wheels + applyWheelAnimations(entity, partialTicks); + + //General animations + aimPitch.apply(1f-entity.aim.getPitchNormalized(partialTicks)); + aimYaw.apply(1f-entity.aim.getYawNormalized(partialTicks)); + + if(entity.ammoProviderMagazine1.isReloading()) + load1.apply(entity.ammoProviderMagazine1.getLoadingProgress(partialTicks)); + if(entity.ammoProviderMagazine2.isReloading()) + load2.apply(entity.ammoProviderMagazine2.getLoadingProgress(partialTicks)); + + //Finally, render + model.render(tes, buf); + } + + @Override + public void compileModels() + { + //Assemble main model + model = AMTCachedModelBuilder.startEntityModel(EntityFieldFlak.class) + .withModel(modelFile) + .withHeader(headerFile) + .withTextureProvider(this::replaceVehicleTextures) + .withModelProvider((entity, header) -> new AMT[]{ + new AMTBipedAdapter("hans_gunner", header), + new AMTBipedAdapter("hans_commander", header), + new AMTLocator("turret_base", header), + new AMTParticle("cannon1_fire", header), + new AMTParticle("cannon2_fire", header) + }) + .build(); + + //Passenger display references + this.bipedGunner = new AMTCrossVariantReference<>("hans_gunner", model); + this.bipedCommander = new AMTCrossVariantReference<>("hans_commander", model); + + //General animations + load1 = IIAnimationCachedMap.create(model, animationsDirectory.with("load1")); + load2 = IIAnimationCachedMap.create(model, animationsDirectory.with("load2")); + unload1 = IIAnimationCachedMap.create(model, animationsDirectory.with("unload1")); + unload2 = IIAnimationCachedMap.create(model, animationsDirectory.with("unload2")); + fire1 = IIAnimationCachedMap.create(model, animationsDirectory.with("fire1")); + fire2 = IIAnimationCachedMap.create(model, animationsDirectory.with("fire2")); + + aimYaw = IIAnimationCachedMap.create(model, animationsDirectory.with("aim_yaw")); + aimPitch = IIAnimationCachedMap.create(model, animationsDirectory.with("aim_pitch")); + + forward = IIAnimationCachedMap.create(model, animationsDirectory.with("forward")); + backward = IIAnimationCachedMap.create(model, animationsDirectory.with("backward")); + left = IIAnimationCachedMap.create(model, animationsDirectory.with("left")); + right = IIAnimationCachedMap.create(model, animationsDirectory.with("right")); + + wheelAnimations = new WheelAnimationBuilder() + .withWheel(e -> e.partWheelRight, "wheel1") + .withWheel(e -> e.partWheelLeft, "wheel2") + .build(); + + //Upgrade system + UpgradeTechTree.getTreeFor(EntityFieldFlak.class) + .withBaseModelLocation(modelFile); + } + + @Override + protected void nullifyModels() + { + AMTUtils.disposeOf(model); + } + + @Override + public boolean handleBipedRotations(ModelBiped model, EntityFieldFlak entity, EntityLivingBase passenger, float partialTicks) + { + EntityVehicleSeat seat = (EntityVehicleSeat)passenger.getRidingEntity(); + if(seat==null) + return false; + //Select animation adapter based on seat + switch(seat.info.getSeatID()) + { + case "gunner": + //bipedGunner.get().applyAnimationStateTo(model); + return true; + case "commander": + //bipedCommander.get().applyAnimationStateTo(model); + return true; + default: + return false; + } + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/FieldHowitzerRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/FieldHowitzerRenderer.java index c68a813f2..67110b54f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/FieldHowitzerRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/FieldHowitzerRenderer.java @@ -4,20 +4,25 @@ import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.EntityLivingBase; -import pl.pabilo8.immersiveintelligence.client.util.amt.AMTLoader; +import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeTechTree; import pl.pabilo8.immersiveintelligence.client.util.amt.AMTUtils; -import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTCachedModel; +import pl.pabilo8.immersiveintelligence.client.util.amt.animation.IIAnimationCachedMap; +import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTCachedModelBuilder; +import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTCrossVariantReference; +import pl.pabilo8.immersiveintelligence.client.util.amt.parts.AMT; +import pl.pabilo8.immersiveintelligence.client.util.amt.parts.AMTBipedAdapter; +import pl.pabilo8.immersiveintelligence.client.util.amt.parts.AMTParticle; import pl.pabilo8.immersiveintelligence.client.util.amt.renderer.IIEntityRenderer.RegisteredEntityRenderer; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun.EntityFieldHowitzer; -import pl.pabilo8.immersiveintelligence.common.util.IIReference; -import pl.pabilo8.immersiveintelligence.common.util.ResLoc; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat; @RegisteredEntityRenderer(clazz = EntityFieldHowitzer.class, name = "vehicle/field_howitzer") public class FieldHowitzerRenderer extends IIVehicleRenderer { - private static AMTCachedModel model; + private IIAnimationCachedMap load, fire, aimPitch; + private IIAnimationCachedMap forward, backward, left, right; + private AMTCrossVariantReference bipedGunner, bipedCommander; public FieldHowitzerRenderer(RenderManager renderManager) { @@ -27,19 +32,67 @@ public FieldHowitzerRenderer(RenderManager renderManager) @Override public void draw(EntityFieldHowitzer entity, BufferBuilder buf, float partialTicks, Tessellator tes) { + //Apply vehicle transforms + applyVehicleTransforms(entity, partialTicks); + model.getVariant(entity, entity.getStyle()); + model.defaultize(); + //Animate wheels + applyWheelAnimations(entity, partialTicks); + + //General animations + aimPitch.apply(1f-entity.aim.getPitchNormalized(partialTicks)); + + if(entity.ammoProvider.isReloading()) + load.apply(entity.ammoProvider.getLoadingProgress(partialTicks)); + if(entity.commanderControls.getKey("forward")) + forward.apply(1f); + else if(entity.commanderControls.getKey("backwards")) + backward.apply(1f); + else if(entity.commanderControls.getKey("turnLeft")) + left.apply(1f); + else if(entity.commanderControls.getKey("turnRight")) + right.apply(1f); + + //Finally, render + model.render(tes, buf); } @Override public void compileModels() { + //Assemble main model + model = AMTCachedModelBuilder.startEntityModel(EntityFieldHowitzer.class) + .withModel(modelFile) + .withHeader(headerFile) + .withTextureProvider(this::replaceVehicleTextures) + .withModelProvider((entity, header) -> new AMT[]{ + new AMTBipedAdapter("hans_gunner", header), + new AMTBipedAdapter("hans_commander", header), + new AMTParticle("fire", header) + }) + .build(); - } + //Passenger display references + this.bipedGunner = new AMTCrossVariantReference<>("hans_gunner", model); + this.bipedCommander = new AMTCrossVariantReference<>("hans_commander", model); - @Override - public void registerSprites(TextureMap map) - { - AMTLoader.preloadTexturesFromMTL(ResLoc.of(IIReference.RES_ENTITY_MODEL, "vehicle/field_howitzer/field_howitzer.obj").withExtension(ResLoc.EXT_MTL), map); + //General animations + load = IIAnimationCachedMap.create(model, animationsDirectory.with("load")); + fire = IIAnimationCachedMap.create(model, animationsDirectory.with("fire")); + aimPitch = IIAnimationCachedMap.create(model, animationsDirectory.with("aim_pitch")); + forward = IIAnimationCachedMap.create(model, animationsDirectory.with("forward")); + backward = IIAnimationCachedMap.create(model, animationsDirectory.with("backward")); + left = IIAnimationCachedMap.create(model, animationsDirectory.with("left")); + right = IIAnimationCachedMap.create(model, animationsDirectory.with("right")); + wheelAnimations = new WheelAnimationBuilder() + .withWheel(e -> e.partWheelRight, "wheel1") + .withWheel(e -> e.partWheelLeft, "wheel2") + .build(); + + //Upgrade system + UpgradeTechTree.getTreeFor(EntityFieldHowitzer.class) + .withBaseModelLocation(modelFile); } @Override @@ -51,6 +104,20 @@ protected void nullifyModels() @Override public boolean handleBipedRotations(ModelBiped model, EntityFieldHowitzer entity, EntityLivingBase passenger, float partialTicks) { - return false; + EntityVehicleSeat seat = (EntityVehicleSeat)passenger.getRidingEntity(); + if(seat==null) + return false; + //Select animation adapter based on seat + switch(seat.info.getSeatID()) + { + case "gunner": + bipedGunner.get().applyAnimationStateTo(model); + return true; + case "commander": + bipedCommander.get().applyAnimationStateTo(model); + return true; + default: + return false; + } } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/IIVehicleRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/IIVehicleRenderer.java index 7c4eba858..378512e5e 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/IIVehicleRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/IIVehicleRenderer.java @@ -51,7 +51,7 @@ public abstract class IIVehicleRenderer> extends protected ResLoc modelDirectory, animationsDirectory; protected ResLoc modelFile, headerFile, mtlFile; - protected IIVehicleRenderer(RenderManager render) + public IIVehicleRenderer(RenderManager render) { super(render); @@ -153,9 +153,9 @@ protected void applyGearboxAnimation(VehicleTransmission transmission, IIAnim } - protected > void applyEngineAnimation(T engineBase, - IIAnimationCachedMap startingAnimation, IIAnimationCachedMap runningAnimation, - float partialTicks) + protected > void applyEngineAnimation(T engineBase, + IIAnimationCachedMap startingAnimation, IIAnimationCachedMap runningAnimation, + float partialTicks) { if(engineBase.isStarting()) startingAnimation.apply(engineBase.getStartingProgress(partialTicks)); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/TrackedMotorbikeRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/TrackedMotorbikeRenderer.java index 5f2cf652a..85a427e37 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/TrackedMotorbikeRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/vehicle/TrackedMotorbikeRenderer.java @@ -7,6 +7,7 @@ import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.EntityLivingBase; +import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeTechTree; import pl.pabilo8.immersiveintelligence.client.util.amt.AMTLoader; import pl.pabilo8.immersiveintelligence.client.util.amt.AMTUtils; import pl.pabilo8.immersiveintelligence.client.util.amt.animation.IIAnimationCachedMap; @@ -23,7 +24,7 @@ @RegisteredEntityRenderer(clazz = EntityFieldHowitzer.class, name = "vehicle/tracked_motorbike") public class TrackedMotorbikeRenderer extends IIVehicleRenderer { - private IIAnimationCachedMap engine, engineStarting, transmission, turn, passengerDefault; + private IIAnimationCachedMap engine, engineStarting, turn, passengerDefault; private IIAnimationCachedMap gearPrimary, gearSecondary; private IIAnimationCachedMap gearPrimaryReverse, gearPrimary1, gearPrimary2, gearSecondaryOverdrive, gearSecondaryReduction; private AMTCrossVariantReference trackLeft, trackRight; @@ -51,7 +52,6 @@ public void draw(EntityTrackedMotorbike entity, BufferBuilder buf, float partial //General animations passengerDefault.apply(0); turn.apply((entity.partWheelFront.getSteeringAngle()/45f)*-0.5f+0.5f); - transmission.apply(AMTUtils.getDebugProgress(8, partialTicks)); //Gearbox animations applyGearboxAnimation(entity.transmission1, gearSecondary, partialTicks, gearSecondaryOverdrive); @@ -105,7 +105,6 @@ public void compileModels() //General animations engine = IIAnimationCachedMap.create(model, animationsDirectory.with("engine")); engineStarting = IIAnimationCachedMap.create(model, animationsDirectory.with("start_engine")); - transmission = IIAnimationCachedMap.create(model, animationsDirectory.with("transmission")); turn = IIAnimationCachedMap.create(model, animationsDirectory.with("turn")); passengerDefault = IIAnimationCachedMap.create(model, animationsDirectory.with("hans_default")); wheelAnimations = new WheelAnimationBuilder() @@ -129,6 +128,10 @@ public void compileModels() gearSecondary = IIAnimationCachedMap.create(model, animationsDirectory.with("gearbox_secondary")); gearSecondaryOverdrive = IIAnimationCachedMap.create(model, animationsDirectory.with("gear_secondary_overdrive")); gearSecondaryReduction = IIAnimationCachedMap.create(model, animationsDirectory.with("gear_secondary_reduction")); + + //Upgrade system + UpgradeTechTree.getTreeFor(EntityTrackedMotorbike.class) + .withBaseModelLocation(modelFile); } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/weapon/MachinegunRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/weapon/MachinegunRenderer.java index 8b57aea1e..d79591032 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/weapon/MachinegunRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/weapon/MachinegunRenderer.java @@ -20,16 +20,17 @@ import pl.pabilo8.immersiveintelligence.client.model.weapon.ModelMachinegun; import pl.pabilo8.immersiveintelligence.client.render.IPassengerAnimationsRenderer; import pl.pabilo8.immersiveintelligence.client.render.IReloadableModelContainer; +import pl.pabilo8.immersiveintelligence.client.util.amt.AMTUtils; import pl.pabilo8.immersiveintelligence.client.util.tmt.ModelRendererTurbo; import pl.pabilo8.immersiveintelligence.client.util.tmt.TmtNamedBoxGroup; -import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.Machinegun; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.metal_device.BlockIIMetalDevice.IIBlockTypes_MetalDevice; import pl.pabilo8.immersiveintelligence.common.block.metal_device.tileentity.effect_crate.TileEntityAmmunitionCrate; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMachinegun; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMachinegun; import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIAmmoBase; import pl.pabilo8.immersiveintelligence.common.item.weapons.ItemIIMachinegun; +import pl.pabilo8.immersiveintelligence.common.item.weapons.ItemIIWeaponUpgrade.WeaponUpgrade; import pl.pabilo8.immersiveintelligence.common.util.IIReference; import pl.pabilo8.immersiveintelligence.common.util.IISkinHandler; import pl.pabilo8.immersiveintelligence.common.util.IISkinHandler.IISpecialSkin; @@ -57,7 +58,7 @@ public MachinegunRenderer(RenderManager renderManager) reloadModels(); } - public static void renderMachinegun(ItemStack stack, @Nullable EntityMachinegun entity) + public static void renderMachinegun(ItemStack stack, @Nullable EntityMachinegun entity, float partialTicks) { GlStateManager.pushMatrix(); List renderParts = new ArrayList<>(defaultGunParts); @@ -84,12 +85,9 @@ public static void renderMachinegun(ItemStack stack, @Nullable EntityMachinegun } specialText = I18n.format("skin.immersiveintelligence."+skin+".name"); - skin = ((skin.isEmpty()&&!canApply)?IIContent.itemMachinegun.getSkinnableDefaultTextureLocation(): IIReference.SKIN_LOCATION+skin+"/"); - - + skin = skin.isEmpty()?IIContent.itemMachinegun.getSkinnableDefaultTextureLocation(): IIReference.SKIN_LOCATION+skin+"/"; ClientUtils.bindTexture(skin+texture); - for(Entry, BiConsumer>> s : upgrades.entrySet()) { if(s.getKey()!=null&&s.getValue()!=null&&s.getKey().test(stack)) @@ -98,49 +96,24 @@ public static void renderMachinegun(ItemStack stack, @Nullable EntityMachinegun if(entity!=null) { - float yaw = entity.gunYaw, pitch = entity.gunPitch; - if(entity.setupTime < 1&&entity.getPassengers().size() > 0&&entity.getPassengers().get(0) instanceof EntityLivingBase) - { - EntityLivingBase psg = (EntityLivingBase)entity.getPassengers().get(0); - - float true_head_angle = MathHelper.wrapDegrees(psg.prevRotationYawHead-entity.setYaw); - float true_head_angle2 = MathHelper.wrapDegrees(psg.rotationPitch); - - if(entity.gunYaw < true_head_angle) - yaw += ClientUtils.mc().getRenderPartialTicks()*2f; - else if(entity.gunYaw > true_head_angle) - yaw -= ClientUtils.mc().getRenderPartialTicks()*2f; - - if(Math.ceil(entity.gunYaw) <= Math.ceil(true_head_angle)+1f&&Math.ceil(entity.gunYaw) >= Math.ceil(true_head_angle)-1f) - yaw = true_head_angle; - - if(entity.gunPitch < true_head_angle2) - pitch += ClientUtils.mc().getRenderPartialTicks(); - else if(entity.gunPitch > true_head_angle2) - pitch -= ClientUtils.mc().getRenderPartialTicks(); - - yaw = entity.tripod?MathHelper.clamp(yaw, -82.5F, 82.5F): MathHelper.clamp(yaw, -45.0F, 45.0F); - pitch = MathHelper.clamp(pitch, -20, 20); - - yaw += entity.recoilYaw; - pitch += entity.recoilPitch; - - pitch = MathHelper.clamp(pitch, -20, 20); - } + float yaw = entity.aim.getYaw(partialTicks)-entity.aim.getCenterYaw(), pitch = entity.aim.getPitch(partialTicks); + boolean tripod = entity.upgrades.contains(WeaponUpgrade.TRIPOD); + if(tripod) + GlStateManager.translate(0f, 0.5, 0f); GlStateManager.translate(0f, -0.34375, 0f); - float setup = Math.max(entity.setupTime-ClientUtils.mc().getRenderPartialTicks(), 0); - GlStateManager.rotate(-25f*(setup/(float)entity.maxSetupTime), 1, 0, 0); - GlStateManager.translate(0, 0.25*(setup/(float)entity.maxSetupTime), 0); + float setup = AMTUtils.getAnimationProgress(entity.setupTime, entity.maxSetupTime, true, partialTicks); + GlStateManager.rotate(-25f*setup, 1, 0, 0); + GlStateManager.translate(0, 0.25*setup, 0); if(drawText) { GlStateManager.pushMatrix(); GlStateManager.scale(0.85, 0.85, 0.85); - GlStateManager.rotate(180-entity.setYaw, 0f, 1f, 0f); + GlStateManager.rotate(180-entity.aim.getCenterYaw(), 0f, 1f, 0f); GlStateManager.rotate(-yaw, 0f, 1f, 0f); GlStateManager.rotate(-pitch, 1, 0, 0); - GlStateManager.translate(-0.5f, 0.34375, 1.65625+(pitch/20*0.25)); + GlStateManager.translate(-0.5f, 0.34375, 1.65625+pitch/20*0.25); GlStateManager.rotate(90, 0, 1, 0); GlStateManager.scale(-1, -1, 1); @@ -162,35 +135,26 @@ else if(entity.gunPitch > true_head_angle2) { GlStateManager.pushMatrix(); GlStateManager.scale(0.85, 0.85, 0.85); - GlStateManager.rotate(180-entity.setYaw, 0f, 1f, 0f); + GlStateManager.rotate(180-entity.aim.getCenterYaw(), 0f, 1f, 0f); GlStateManager.translate(-0.5f, 0.34375+0.0625, 1.65625); - nmod.render(0.0625f, setup/(float)entity.maxSetupTime); + nmod.render(0.0625f, setup); GlStateManager.popMatrix(); } else { GlStateManager.pushMatrix(); GlStateManager.scale(0.85, 0.85, 0.85); - GlStateManager.rotate(180-entity.setYaw, 0f, 1f, 0f); + GlStateManager.rotate(180-entity.aim.getCenterYaw(), 0f, 1f, 0f); GlStateManager.rotate(-yaw, 0f, 1f, 0f); GlStateManager.rotate(-pitch, 1, 0, 0); - GlStateManager.translate(-0.5f, 0.34375, 1.65625+(pitch/20*0.25)); + GlStateManager.translate(-0.5f, 0.34375, 1.65625+pitch/20*0.25); switch(nmod.getName()) { case "ammo": { - boolean should_render = false; - if(entity.currentlyLoaded==1) - { - - float progress = entity.magazine1.isEmpty()?1f-Math.min(2*(float)entity.clipReload/(float)Machinegun.clipReloadTime, 1): (float)entity.clipReload/(float)Machinegun.clipReloadTime; - GlStateManager.translate(0f, 0.375f*progress, 0f); - should_render = true; - } - else if(!entity.magazine1.isEmpty()) - should_render = true; - + boolean should_render = entity.loadingMagazine1.getLoadingProgress(partialTicks) > 0; + GlStateManager.translate(0f, 0.375f*(1f-entity.loadingMagazine1.getLoadingProgress(partialTicks)), 0f); if(should_render) nmod.render(0.0625f); break; @@ -199,18 +163,18 @@ else if(!entity.magazine1.isEmpty()) nmod.render(0.0625f); IAmmoModel, EntityAmmoProjectile> mm = AmmoRegistry.getModel(IIContent.itemAmmoMachinegun); GlStateManager.pushMatrix(); - GlStateManager.translate(0.69f, 0.65f, -0.0625f+(-0.0625f*1.5f)); + GlStateManager.translate(0.69f, 0.65f, -0.0625f+-0.0625f*1.5f); GlStateManager.rotate(180, 0, 1, 0); GlStateManager.rotate(90, 1, 0, 0); GlStateManager.scale(0.5f, 0.5f, 0.5f); - BlockPos cratePos = entity.getPosition().offset(EnumFacing.fromAngle(entity.setYaw).getOpposite()).down(); + BlockPos cratePos = entity.getPosition().offset(EnumFacing.fromAngle(entity.aim.getCenterYaw()).getOpposite()).down(); if(entity.getEntityWorld().getTileEntity(cratePos) instanceof TileEntityAmmunitionCrate) { - TileEntityAmmunitionCrate crate = ((TileEntityAmmunitionCrate)entity.getEntityWorld().getTileEntity(cratePos)); + TileEntityAmmunitionCrate crate = (TileEntityAmmunitionCrate)entity.getEntityWorld().getTileEntity(cratePos); assert crate!=null; - int beltLength = (int)(24+(Math.max(Math.abs(entity.gunYaw)-55, 0)/2)-(Math.max(entity.gunPitch-20, 0)/2)); + int beltLength = (int)(24+Math.max(Math.abs(entity.aim.getYaw(0f))-55, 0)/2-Math.max(entity.aim.getPitch(partialTicks)-20, 0)/2); if(crate.open&&crate.isUpgradeInstalled(IIContent.UPGRADE_MG_LOADER)) { @@ -226,11 +190,11 @@ else if(!entity.magazine1.isEmpty()) } beltLength -= 4; - float ammoDir = ((entity.gunYaw)/(entity.tripod?90f: 50f))*(1-((Math.abs(entity.gunPitch))/40f)); - float ammoTurn = entity.tripod?((Math.abs(entity.gunYaw)/90f)*(beltLength > 24?(beltLength-24)/24f: 1)): 0; + float ammoDir = entity.aim.getYaw(0f)/(tripod?90f: 50f)*(1-Math.abs(entity.aim.getPitch(partialTicks))/40f); + float ammoTurn = tripod?Math.abs(entity.aim.getYaw(0f))/90f*(beltLength > 24?(beltLength-24)/24f: 1): 0; GlStateManager.pushMatrix(); - for(int i = 0; i < 4&&ammoStacks.size() > 0; i++) + for(int i = 0; i < 4&&!ammoStacks.isEmpty(); i++) { mm.renderAmmoComplete(false, ammoStacks.get(0)); GlStateManager.rotate(180f/4f, 0, 1, 0); @@ -244,7 +208,7 @@ else if(!entity.magazine1.isEmpty()) GlStateManager.translate(-0.25f, 0, 0.25); GlStateManager.pushMatrix(); - for(int i = 0; i < beltLength&&ammoStacks.size() > 0; i++) + for(int i = 0; i < beltLength&&!ammoStacks.isEmpty(); i++) { mm.renderAmmoComplete(false, ammoStacks.get(0)); GlStateManager.translate(0f, 0, 0.125f); @@ -266,34 +230,25 @@ else if(!entity.magazine1.isEmpty()) break; case "second_magazine_mag": { - boolean should_render = false; - if(entity.currentlyLoaded==2) - { - - float progress = entity.magazine2.isEmpty()?1f-Math.min(2*(float)entity.clipReload/(float)Machinegun.clipReloadTime, 1): (float)entity.clipReload/(float)Machinegun.clipReloadTime; - GlStateManager.translate(0f, 0.375f*progress, 0f); - should_render = true; - } - else if(!entity.magazine2.isEmpty()) - should_render = true; - + boolean should_render = entity.loadingMagazine2.getLoadingProgress(partialTicks) > 0; + GlStateManager.translate(0f, 0.375f*(entity.loadingMagazine2.getLoadingProgress(partialTicks)), 0f); if(should_render) nmod.render(0.0625f); break; } case "slide": - if(((entity.currentlyLoaded==1&&entity.magazine1.isEmpty())||(entity.currentlyLoaded==2&&entity.magazine2.isEmpty()))&&((float)entity.clipReload/(float)Machinegun.clipReloadTime) > 0.5) - { - float curr = (((float)entity.clipReload/(float)Machinegun.clipReloadTime)-0.5f)/0.5f; - float progress; - if(curr > 0.65) - progress = 1f-((curr-0.65f)/0.35f); - else - progress = (curr/0.65f); - GlStateManager.translate(0f, 0f, progress*0.375); - } - nmod.render(0.0625f); - break; + //if(entity.currentlyLoaded==1) + { + float curr = (entity.gunHandler.getLoadingProgress(partialTicks)-0.5f)/0.5f; + float progress; + if(curr > 0.65) + progress = 1f-(curr-0.65f)/0.35f; + else + progress = curr/0.65f; + GlStateManager.translate(0f, 0f, progress*0.375); + } + nmod.render(0.0625f); + break; case "shield": ClientUtils.bindTexture(skin+nmod.getTexturePath()); nmod.render(0.0625f); @@ -318,9 +273,9 @@ else if(!entity.magazine2.isEmpty()) nmod.render(0.0625f, 1f); continue; } - if(nmod.getName().equals("ammo")&&!(ItemNBTHelper.hasKey(stack, "magazine1")&&!(new ItemStack(ItemNBTHelper.getTagCompound(stack, "magazine1")).isEmpty()))) + if(nmod.getName().equals("ammo")&&!(ItemNBTHelper.hasKey(stack, "magazine1")&&!new ItemStack(ItemNBTHelper.getTagCompound(stack, "magazine1")).isEmpty())) continue; - if(nmod.getName().equals("second_magazine_mag")&&!(ItemNBTHelper.hasKey(stack, "magazine2")&&!(new ItemStack(ItemNBTHelper.getTagCompound(stack, "magazine2")).isEmpty()))) + if(nmod.getName().equals("second_magazine_mag")&&!(ItemNBTHelper.hasKey(stack, "magazine2")&&!new ItemStack(ItemNBTHelper.getTagCompound(stack, "magazine2")).isEmpty())) continue; for(ModelRendererTurbo m : nmod.getModel()) @@ -335,7 +290,7 @@ else if(!entity.magazine2.isEmpty()) * Renders the desired {@code T} type Entity. */ @Override - public void doRender(EntityMachinegun entity, double x, double y, double z, float f0, float f1) + public void doRender(EntityMachinegun entity, double x, double y, double z, float entityYaw, float partialTicks) { GlStateManager.pushMatrix(); @@ -345,8 +300,9 @@ public void doRender(EntityMachinegun entity, double x, double y, double z, floa GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); RenderHelper.enableStandardItemLighting(); - if(entity.gun!=null&&!entity.gun.isEmpty()) - renderMachinegun(entity.gun, entity); + ItemStack stack = entity.getOriginStack(); + if(!stack.isEmpty()) + renderMachinegun(stack, entity, partialTicks); GlStateManager.disableBlend(); @@ -384,8 +340,9 @@ public void reloadModels() @Override public boolean handleBipedRotations(ModelBiped model, EntityMachinegun mg, EntityLivingBase passenger, float partialTicks) { - float ff = (float)(-1.35f-Math.toRadians(mg.gunPitch)*1.25); - float true_head_angle = MathHelper.wrapDegrees(passenger.prevRotationYawHead-mg.setYaw); + float ff = (float)(-1.35f-Math.toRadians(mg.aim.getPitch(partialTicks))*1.25); + float setYaw = mg.aim.getCenterYaw(); + float true_head_angle = MathHelper.wrapDegrees(passenger.prevRotationYawHead-setYaw); float wtime; mg.applyOrientationToEntity(passenger); @@ -394,21 +351,23 @@ public boolean handleBipedRotations(ModelBiped model, EntityMachinegun mg, Entit model.bipedLeftArm.rotateAngleY = .08726f+3.14f/6f; IBlockState state = passenger.world.getBlockState(passenger.getPosition()); - if(!mg.tripod&&state.getMaterial().isSolid()&&!(state.getBlock()==IIContent.blockMetalDevice&&state.getValue(IIContent.blockMetalDevice.property)==IIBlockTypes_MetalDevice.AMMUNITION_CRATE)) + boolean tripod = mg.upgrades.contains(WeaponUpgrade.TRIPOD); + float aimYaw = mg.aim.getYaw(0f)-setYaw; + if(!tripod&&state.getMaterial().isSolid()&&!(state.getBlock()==IIContent.blockMetalDevice&&state.getValue(IIContent.blockMetalDevice.property)==IIBlockTypes_MetalDevice.AMMUNITION_CRATE)) { - if(Math.abs(mg.gunYaw-true_head_angle) > 5) + if(Math.abs(aimYaw-true_head_angle) > 5) { wtime = Math.abs((mg.getEntityWorld().getTotalWorldTime()+partialTicks)%20/20f-0.5f)/0.5f; wtime *= 0.25f; - if(mg.setupTime > 0) + if(!mg.isSetupComplete()) wtime = 0; - if(mg.gunYaw < true_head_angle) + if(aimYaw < true_head_angle) { model.bipedRightLeg.rotateAngleY = -wtime*2f; model.bipedLeftLeg.rotateAngleY = wtime*2f; } - else if(mg.gunYaw > true_head_angle) + else if(aimYaw > true_head_angle) { model.bipedRightLeg.rotateAngleY = -wtime*2f; model.bipedLeftLeg.rotateAngleY = wtime*2f; @@ -419,8 +378,8 @@ else if(mg.gunYaw > true_head_angle) model.bipedRightLeg.rotateAngleX += 1.5f; model.bipedLeftLeg.rotateAngleX += 1.5f; - model.bipedRightArm.rotateAngleX += ff-0.5; - model.bipedLeftArm.rotateAngleX += ff-0.5; + model.bipedRightArm.rotateAngleX += ff-0.5f; + model.bipedLeftArm.rotateAngleX += ff-0.5f; model.bipedRightLeg.rotationPointY = 0f; model.bipedLeftLeg.rotationPointY = 0f; @@ -428,10 +387,10 @@ else if(mg.gunYaw > true_head_angle) model.bipedRightLeg.rotationPointZ = 12f; model.bipedLeftLeg.rotationPointZ = 12f; - float maxRotation = mg.tripod?82.5F: 45.0F; + float maxRotation = 45.0F; - model.bipedRightLeg.rotateAngleY += mg.gunYaw/maxRotation; - model.bipedLeftLeg.rotateAngleY += mg.gunYaw/maxRotation; + model.bipedRightLeg.rotateAngleY += aimYaw/maxRotation; + model.bipedLeftLeg.rotateAngleY += aimYaw/maxRotation; //model.bipedLeftLeg.rotateAngleY += ff+1f; @@ -440,16 +399,16 @@ else if(mg.gunYaw > true_head_angle) { wtime = Math.abs((mg.getEntityWorld().getTotalWorldTime()+partialTicks)%40/40f-0.5f)/0.5f-0.5f; wtime *= 0.65f; - if(mg.setupTime > 0) + if(!mg.isSetupComplete()) wtime = 0; model.bipedBody.rotateAngleX -= 0.0625f; - if(Math.abs(mg.gunYaw-true_head_angle) > 5) - if(mg.gunYaw < true_head_angle) + if(Math.abs(aimYaw-true_head_angle) > 5) + if(aimYaw < true_head_angle) { model.bipedRightLeg.rotateAngleX = wtime*2f; model.bipedLeftLeg.rotateAngleX = -wtime*2f; } - else if(mg.gunYaw > true_head_angle) + else if(aimYaw > true_head_angle) { model.bipedRightLeg.rotateAngleX = -wtime*2f; model.bipedLeftLeg.rotateAngleX = wtime*2f; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/weapon/MortarRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/weapon/MortarRenderer.java index b79bd3737..489ca31c0 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/weapon/MortarRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/weapon/MortarRenderer.java @@ -21,7 +21,7 @@ import pl.pabilo8.immersiveintelligence.client.util.tmt.ModelRendererTurbo; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.Mortar; import pl.pabilo8.immersiveintelligence.common.IIContent; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMortar; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMortar; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -52,7 +52,7 @@ public void doRender(EntityMortar entity, double x, double y, double z, float en float progress = MathHelper.clamp(((entity.setupTime+partialTicks)/Mortar.setupTime), 0, 1); bindTexture(TEXTURE); - GlStateManager.rotate(-entityYaw+90, 0, 1, 0); + GlStateManager.rotate(-entity.aim.getYaw(partialTicks)+90, 0, 1, 0); if(progress==1) renderNormal(entity, entityYaw, partialTicks, (entity.shootingProgress+partialTicks)/Mortar.shootTime); @@ -68,7 +68,7 @@ private void renderNormal(EntityMortar entity, float entityYaw, float partialTic { GlStateManager.pushMatrix(); - float pitch = MathHelper.clamp((((entity.rotationPitch)+80)/25f), 0, 1); + float pitch = entity.aim.getPitchNormalized(partialTicks); //0.0625f, 35f, 0.60625f, 0.25f //-0.25f, 10f, 0f, 0.125f @@ -102,7 +102,7 @@ private void renderNormal(EntityMortar entity, float entityYaw, float partialTic { float f = (progress-0.2f)/0.3f; - if(entity.getPassengers().size() > 0) + if(!entity.getPassengers().isEmpty()) { Entity psg = entity.getPassengers().get(0); if(psg instanceof EntityLivingBase) diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/weapon/TripodPeriscopeRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/weapon/TripodPeriscopeRenderer.java index ba787bdb7..618471a4a 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/weapon/TripodPeriscopeRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/entity/weapon/TripodPeriscopeRenderer.java @@ -17,7 +17,7 @@ import pl.pabilo8.immersiveintelligence.client.render.IReloadableModelContainer; import pl.pabilo8.immersiveintelligence.client.util.tmt.ModelRendererTurbo; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Tools.TripodPeriscope; -import pl.pabilo8.immersiveintelligence.common.entity.EntityTripodPeriscope; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityTripodPeriscope; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -49,9 +49,9 @@ public void doRender(EntityTripodPeriscope entity, double x, double y, double z, ClientUtils.bindTexture(texture); if(progress==1) - renderNormal(entity, entityYaw, partialTicks, progress); + renderNormal(entity, 0, partialTicks, progress); else - renderProgress(entity, entityYaw, partialTicks, progress); + renderProgress(entity, 0, partialTicks, progress); GlStateManager.disableBlend(); GlStateManager.disableRescaleNormal(); @@ -61,7 +61,6 @@ public void doRender(EntityTripodPeriscope entity, double x, double y, double z, private void renderNormal(EntityTripodPeriscope entity, float entityYaw, float partialTicks, float progress) { GlStateManager.pushMatrix(); - GlStateManager.rotate(entityYaw, 0, 1, 0); for(ModelRendererTurbo mod : model.baseModel) mod.render(); @@ -72,11 +71,11 @@ private void renderNormal(EntityTripodPeriscope entity, float entityYaw, float p for(ModelRendererTurbo mod : model.leg3Model) mod.render(); - float yy = MathHelper.wrapDegrees(360+entity.periscopeNextYaw-entity.periscopeYaw); - float yaw = MathHelper.wrapDegrees(entity.periscopeYaw+(Math.signum(yy)*MathHelper.clamp(Math.abs(yy), 0, TripodPeriscope.turnSpeed*partialTicks))); + float yy = MathHelper.wrapDegrees(360+entity.aim.getTargetYaw()-entity.aim.getYaw(partialTicks)); + float yaw = MathHelper.wrapDegrees(entity.aim.getYaw(partialTicks)+(Math.signum(yy)*MathHelper.clamp(Math.abs(yy), 0, TripodPeriscope.turnSpeed*partialTicks))); GlStateManager.popMatrix(); - GlStateManager.rotate(-yaw+90, 0, 1, 0); + GlStateManager.rotate(-entity.aim.getYaw(partialTicks)+90, 0, 1, 0); for(ModelRendererTurbo mod : model.periscopeModel) mod.render(); @@ -120,7 +119,7 @@ private void renderProgress(EntityTripodPeriscope entity, float entityYaw, float GlStateManager.color(1f, 1f, 1f, Math.min(periscopePlacementProgress, 1)); GlStateManager.translate(0.0625f/2f, (1f-periscopePlacementProgress)*1.5f, -0.0625f/2f); GlStateManager.rotate(periscopeRotationProgress*720, 0, 1, 0); - GlStateManager.rotate(-entity.periscopeYaw+90, 0, 1, 0); + GlStateManager.rotate(-entity.aim.getYaw(partialTicks)+90, 0, 1, 0); if(tripodProgress > 0) { for(ModelRendererTurbo mod : model.periscopeModel) @@ -164,13 +163,13 @@ public boolean handleBipedRotations(ModelBiped model, EntityTripodPeriscope mg, model.bipedHeadwear.rotateAngleY = 0; - if(Math.abs(mg.periscopeYaw-true_head_angle) > 5) - if(mg.periscopeYaw < true_head_angle) + if(Math.abs(mg.aim.getYaw(partialTicks)-true_head_angle) > 5) + if(mg.aim.getYaw(partialTicks) < true_head_angle) { model.bipedRightLeg.rotateAngleZ = -(1f-wtime)*0.25f; model.bipedLeftLeg.rotateAngleZ = -wtime*0.25f-0.25f; } - else if(mg.periscopeYaw > true_head_angle) + else if(mg.aim.getYaw(partialTicks) > true_head_angle) { model.bipedRightLeg.rotateAngleZ = (1f-wtime)*0.25f+0.25f; model.bipedLeftLeg.rotateAngleZ = wtime*0.25f; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/item/MachinegunItemStackRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/item/MachinegunItemStackRenderer.java index a31d19026..fea22a0d0 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/item/MachinegunItemStackRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/item/MachinegunItemStackRenderer.java @@ -20,7 +20,7 @@ public void renderByItem(ItemStack itemStackIn, float partialTicks) GlStateManager.pushMatrix(); RenderHelper.enableStandardItemLighting(); - MachinegunRenderer.renderMachinegun(itemStackIn, null); + MachinegunRenderer.renderMachinegun(itemStackIn, null, 0); GlStateManager.popMatrix(); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/item/MineDetectorRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/item/MineDetectorRenderer.java index a7fef8c4a..0531c037f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/item/MineDetectorRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/item/MineDetectorRenderer.java @@ -75,15 +75,15 @@ public float renderBase(EntityLivingBase player, float distance, boolean flipY) v *= 1.125f; } - //v=distance; - //v=distance-(((player.world.getTotalWorldTime()%100)/100f)*distance); + v = distance; + v = distance-(((player.world.getTotalWorldTime()%100)/100f)*distance); - //GlStateManager.rotate(player.cameraPitch,1,0,0); + GlStateManager.rotate(player.cameraPitch, 1, 0, 0); GlStateManager.translate(0, 1, -v); GlStateManager.rotate(90, 0, 1, 0); GlStateManager.scale(-1, -1, 1); - //GlStateManager.rotate(player.rotationYawHead,0,1,0); - //GlStateManager.rotate(180,0,1,0); + GlStateManager.rotate(player.rotationYawHead, 0, 1, 0); + GlStateManager.rotate(180, 0, 1, 0); for(ModelRendererTurbo mod : model.baseModel) mod.render(); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/metal_device/LatexCollectorRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/metal_device/LatexCollectorRenderer.java index 96b0b15db..798335ce5 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/metal_device/LatexCollectorRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/metal_device/LatexCollectorRenderer.java @@ -1,106 +1,71 @@ package pl.pabilo8.immersiveintelligence.client.render.metal_device; -import blusunrize.immersiveengineering.api.IEProperties; -import blusunrize.immersiveengineering.client.ClientUtils; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.block.model.IBakedModel; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraftforge.client.model.obj.OBJModel; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandlerItem; -import org.lwjgl.opengl.GL11; +import pl.pabilo8.immersiveintelligence.client.util.amt.AMTUtils; +import pl.pabilo8.immersiveintelligence.client.util.amt.animation.IIAnimationCompiledMap; +import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTModel; +import pl.pabilo8.immersiveintelligence.client.util.amt.parts.AMT; +import pl.pabilo8.immersiveintelligence.client.util.amt.parts.AMTFluid; +import pl.pabilo8.immersiveintelligence.client.util.amt.renderer.IITileRenderer; +import pl.pabilo8.immersiveintelligence.client.util.amt.renderer.IITileRenderer.RegisteredTileRenderer; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Machines.LatexCollector; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.metal_device.tileentity.TileEntityLatexCollector; - -import static blusunrize.immersiveengineering.api.IEProperties.FACING_HORIZONTAL; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; /** * @author Pabilo8 (pabilo@iiteam.net) + * @updated 13.05.2026 + * @ii-approved 0.3.1 * @since 30.08.2020 */ -public class LatexCollectorRenderer extends TileEntitySpecialRenderer +@RegisteredTileRenderer(name = "latex_collector", clazz = TileEntityLatexCollector.class) +public class LatexCollectorRenderer extends IITileRenderer { - // TODO: 11.07.2022 adapt to AMT + private IIAnimationCompiledMap placeBucket, extractorVisibility; + private AMTModel model; + private AMTFluid latex; @Override - public void render(TileEntityLatexCollector te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + public void draw(TileEntityLatexCollector te, BufferBuilder buf, float partialTicks, Tessellator tes) { - if(te!=null) - { - GlStateManager.pushMatrix(); - GlStateManager.translate(x, y, z); - GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); - - if(!te.bucket.isEmpty()) - { - - float progress = MathHelper.clamp(1f-((te.bucketTime-partialTicks)/10f), 0, 1); - - GlStateManager.enableBlend(); - GlStateManager.pushMatrix(); - GlStateManager.enableAlpha(); - GlStateManager.color(1f, 1f, 1f, 0.25f); - GlStateManager.translate(0, 0, 0); - - final BlockRendererDispatcher blockRenderer = Minecraft.getMinecraft().getBlockRendererDispatcher(); - BlockPos blockPos = te.getPos(); - IBlockState state = getWorld().getBlockState(te.getPos()).withProperty(IEProperties.BOOLEANS[0], true).withProperty(FACING_HORIZONTAL, te.facing); - IBakedModel model = blockRenderer.getBlockModelShapes().getModelForState(state); - - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder worldRenderer = tessellator.getBuffer(); - - RenderHelper.disableStandardItemLighting(); - GlStateManager.blendFunc(770, 771); - GlStateManager.enableBlend(); - GlStateManager.disableCull(); - - ClientUtils.bindAtlas(); - - worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); - Vec3d vv = new Vec3d(blockPos).scale(-1).add(new Vec3d(0, 0.5, 0).add(new Vec3d(te.facing.getOpposite().getDirectionVec())).scale(0.5).scale((1-Math.min(progress, 1)))); - worldRenderer.setTranslation(vv.x, vv.y, vv.z); - - blockRenderer.getBlockModelRenderer().renderModel(te.getWorld(), model, state, blockPos, worldRenderer, true); - worldRenderer.setTranslation(0.0D, 0.0D, 0.0D); - tessellator.draw(); - - float atime = te.timer; - if(!te.bucket.isEmpty()&&te.timer==0&&te.bucket.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) - { - IFluidHandlerItem cap = te.bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); - if(cap!=null) - { - FluidStack drain = cap.drain(1000, false); - atime += drain!=null&&drain.amount==1000?LatexCollector.collectTime: 0; - } - } - float amount = Math.min((atime+(!te.bucket.isEmpty()&&te.isNextToTree()?(partialTicks*te.getIncomeModifier()): 0))/(float)LatexCollector.collectTime, 1f); - if(progress >= 1&&amount > 0) - { - GlStateManager.translate(0.5, 0, 0.5); - GlStateManager.rotate(-te.facing.getHorizontalAngle(), 0, 1, 0); - GlStateManager.translate(-0.25, 0.3125+(0.655*amount), -0.125); - GlStateManager.rotate(90, 1, 0, 0); - GlStateManager.scale(0.0625f, 0.0625f, 0.0625f); - ClientUtils.drawRepeatedFluidSprite(new FluidStack(IIContent.fluidLatex, 1), 0f, 0f, 8, 8); - } - - RenderHelper.enableStandardItemLighting(); - - GlStateManager.popMatrix(); - GlStateManager.disableBlend(); - } + //Bucket place animation + float bucketProgress = 0f; + if(!te.bucket.isEmpty()) + bucketProgress = AMTUtils.getAnimationProgress(te.bucketTime, 10f, true, partialTicks); + placeBucket.apply(bucketProgress); + //Chain and extractor visibility + boolean nextToTree = te.isNextToTree(); + extractorVisibility.apply(nextToTree?1f: 0f); + + //Apply latex level + float atime = te.timer; + latex.withLevel(Math.min((atime+(!te.bucket.isEmpty()&&nextToTree?(partialTicks*te.getIncomeModifier()): 0))/(float)LatexCollector.collectTime, 1f)); + + //Render + applyStandardRotation(te.facing); + model.render(tes, buf); + } - GlStateManager.popMatrix(); + @Override + public void compileModels(IBlockState state, OBJModel model) + { + this.model = new AMTModel(state, model, header -> new AMT[]{ + this.latex = new AMTFluid("latex", header) + .withFluid(new FluidStack(IIContent.fluidLatex, 1000)) + }); + this.placeBucket = IIAnimationCompiledMap.create(this.model, IIReference.RES_II.with("latex_collector/place_bucket")); + this.extractorVisibility = IIAnimationCompiledMap.create(this.model, IIReference.RES_II.with("latex_collector/extractor")); + } - } + @Override + protected void nullifyModels() + { + this.model = AMTUtils.disposeOf(this.model); + this.latex = null; } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/ArithmeticLogicMachineRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/ArithmeticLogicMachineRenderer.java index c67440a71..1ff8e1a48 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/ArithmeticLogicMachineRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/ArithmeticLogicMachineRenderer.java @@ -7,6 +7,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.MathHelper; import net.minecraftforge.client.model.obj.OBJModel; +import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeTechTree; import pl.pabilo8.immersiveintelligence.client.util.amt.AMTUtils; import pl.pabilo8.immersiveintelligence.client.util.amt.animation.IIAnimationCachedMap; import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTCachedModel; @@ -125,6 +126,11 @@ public void compileModels(IBlockState state, OBJModel model) this.animationDrawer = IIAnimationCachedMap.create(this.model, ResLoc.of(IIReference.RES_II, "arithmetic_logic_machine/open_drawer")); this.animationDoor = IIAnimationCachedMap.create(this.model, ResLoc.of(IIReference.RES_II, "arithmetic_logic_machine/open_door")); this.animationKeyboard = IIAnimationCachedMap.create(this.model, ResLoc.of(IIReference.RES_II, "arithmetic_logic_machine/open_keyboard")); + + UpgradeTechTree.getTreeFor(TileEntityArithmeticLogicMachine.class) + .withBaseModelLocation(IIReference.RES_BLOCK_MODEL.with("multiblock/arithmetic_logic_machine/arithmetic_logic_machine_preview.obj")) + .withUpgradeModelLocation(IIContent.UPGRADE_MEMORY, resFolder.with("upgrades/circuit_racks.obj")) + .withUpgradeModelLocation(IIContent.UPGRADE_CIRCUIT_RACKS, resFolder.with("upgrades/memory.obj")); } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/DataInputMachineRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/DataInputMachineRenderer.java index d7452f67f..532df4cf6 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/DataInputMachineRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/DataInputMachineRenderer.java @@ -6,10 +6,14 @@ import net.minecraftforge.client.model.obj.OBJModel; import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeTechTree; import pl.pabilo8.immersiveintelligence.client.util.amt.AMTUtils; -import pl.pabilo8.immersiveintelligence.client.util.amt.animation.IIAnimationCompiledMap; -import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTModel; +import pl.pabilo8.immersiveintelligence.client.util.amt.animation.IIAnimationCachedMap; +import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTCachedModel; +import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTCachedModelBuilder; +import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTUpgradeCachedModel; +import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTUpgradeCachedModel.MachineCachedUpgradeModelBuilder; import pl.pabilo8.immersiveintelligence.client.util.amt.renderer.IIMultiblockRenderer; import pl.pabilo8.immersiveintelligence.client.util.amt.renderer.IITileRenderer.RegisteredTileRenderer; +import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityDataInputMachine; import pl.pabilo8.immersiveintelligence.common.util.IIReference; import pl.pabilo8.immersiveintelligence.common.util.ResLoc; @@ -23,14 +27,16 @@ @RegisteredTileRenderer(name = "multiblock/data_input_machine", clazz = TileEntityDataInputMachine.class) public class DataInputMachineRenderer extends IIMultiblockRenderer { - private AMTModel model; - private IIAnimationCompiledMap animationDrawer, animationHatch, animationProgrammingStart; + private AMTCachedModel model; + private AMTUpgradeCachedModel upgradeAdvancedData; + private IIAnimationCachedMap animationDrawer, animationHatch, animationProgrammingStart; @Override public void drawAnimated(TileEntityDataInputMachine te, BufferBuilder buf, float partialTicks, Tessellator tes) { //Reset model to default state - model.defaultize(); + this.model.getVariant(te, te.upgradeManager); + this.model.defaultize(); animationDrawer.apply(te.drawer.getProgress(partialTicks)); animationHatch.apply(te.hatch.getProgress(partialTicks)); @@ -42,6 +48,10 @@ public void drawAnimated(TileEntityDataInputMachine te, BufferBuilder buf, float //Draw applyStandardMirroring(te, true); + + //Display upgrade construction + upgradeAdvancedData.apply(te, tes, buf, partialTicks); + //Render model.render(tes, buf); applyStandardMirroring(te, false); @@ -51,6 +61,7 @@ public void drawAnimated(TileEntityDataInputMachine te, BufferBuilder buf, float public void drawSimple(BufferBuilder buf, float partialTicks, Tessellator tes) { //Reset model to default state + model.getBase(); model.defaultize(); //Render model.render(tes, buf); @@ -60,15 +71,31 @@ public void drawSimple(BufferBuilder buf, float partialTicks, Tessellator tes) public void compileModels(IBlockState state, OBJModel model) { //model loading - this.model = new AMTModel(state, model); + ResLoc resFolder = IIReference.RES_II.with("models/block/multiblock/data_input_machine/"); + AMTCachedModelBuilder modelBuilder = + AMTCachedModelBuilder.startTileEntityModel(TileEntityDataInputMachine.class) + .withModel(model) + .withHeader(resFolder.with("data_input_machine.obj.amt")); + + //upgrade models + this.upgradeAdvancedData = new MachineCachedUpgradeModelBuilder<>(modelBuilder) + .withUpgrade(IIContent.UPGRADE_ADVANCED_DATA) + .withConstructionModel(resFolder.with("upgrades/advanced_data.obj")) + .withAnimation(ResLoc.of(IIReference.RES_II, "data_input_machine/upgrade_advanced_data")) + .build(); + + //finish main model + this.model = modelBuilder.build(); //animations - animationDrawer = IIAnimationCompiledMap.create(this.model, ResLoc.of(IIReference.RES_II, "data_input_machine/drawer")); - animationHatch = IIAnimationCompiledMap.create(this.model, ResLoc.of(IIReference.RES_II, "data_input_machine/hatch")); - animationProgrammingStart = IIAnimationCompiledMap.create(this.model, ResLoc.of(IIReference.RES_II, "data_input_machine/programming_start")); + animationDrawer = IIAnimationCachedMap.create(this.model, ResLoc.of(IIReference.RES_II, "data_input_machine/drawer")); + animationHatch = IIAnimationCachedMap.create(this.model, ResLoc.of(IIReference.RES_II, "data_input_machine/hatch")); + animationProgrammingStart = IIAnimationCachedMap.create(this.model, ResLoc.of(IIReference.RES_II, "data_input_machine/programming_start")); UpgradeTechTree.getTreeFor(TileEntityDataInputMachine.class) - .withBaseModelLocation(IIReference.RES_BLOCK_MODEL.with("multiblock/data_input_machine/data_input_machine.obj")); + .withBaseModelLocation(IIReference.RES_BLOCK_MODEL.with("multiblock/data_input_machine/data_input_machine_preview.obj")) + .withUpgradeModelLocation(IIContent.UPGRADE_ADVANCED_DATA, IIReference.RES_BLOCK_MODEL.with( + "multiblock/data_input_machine/upgrades/advanced_data.obj")); } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/PrintingPressRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/PrintingPressRenderer.java index 7b19203ed..f508bb91d 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/PrintingPressRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/PrintingPressRenderer.java @@ -5,6 +5,7 @@ import net.minecraft.client.renderer.Tessellator; import net.minecraft.item.ItemStack; import net.minecraftforge.client.model.obj.OBJModel; +import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeTechTree; import pl.pabilo8.immersiveintelligence.client.util.amt.AMTUtils; import pl.pabilo8.immersiveintelligence.client.util.amt.animation.IIAnimationCompiledMap; import pl.pabilo8.immersiveintelligence.client.util.amt.models.AMTModel; @@ -12,6 +13,7 @@ import pl.pabilo8.immersiveintelligence.client.util.amt.parts.AMTItem; import pl.pabilo8.immersiveintelligence.client.util.amt.renderer.IIMultiblockRenderer; import pl.pabilo8.immersiveintelligence.client.util.amt.renderer.IITileRenderer.RegisteredTileRenderer; +import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.multiblock.MultiblockPrintingPress; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityPrintingPress; import pl.pabilo8.immersiveintelligence.common.util.IIReference; import pl.pabilo8.immersiveintelligence.common.util.ResLoc; @@ -36,8 +38,8 @@ public void drawAnimated(TileEntityPrintingPress te, BufferBuilder buf, float pa model.defaultize(); animationDefault.apply(0); - itemModel.setStack(te.inventory.get(TileEntityPrintingPress.SLOT_PAPER)); - stackModel.setStack(te.inventory.get(TileEntityPrintingPress.SLOT_OUTPUT)); + itemModel.setStack(te.inventory.get(MultiblockPrintingPress.SLOT_PAPER)); + stackModel.setStack(te.inventory.get(MultiblockPrintingPress.SLOT_OUTPUT)); if(!te.processQueue.isEmpty()) { @@ -82,6 +84,9 @@ public void compileModels(IBlockState state, OBJModel model) //animations animationDefault = IIAnimationCompiledMap.create(this.model, ResLoc.of(IIReference.RES_II, "printing_press/default")); animationWork = IIAnimationCompiledMap.create(this.model, ResLoc.of(IIReference.RES_II, "printing_press/work")); + + UpgradeTechTree.getTreeFor(TileEntityPrintingPress.class) + .withBaseModelLocation(IIReference.RES_BLOCK_MODEL.with("multiblock/printing_press/printing_press_inv.obj")); } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/ProjectileWorkshopRenderer.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/ProjectileWorkshopRenderer.java index d447a85b9..3d4e6b3eb 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/ProjectileWorkshopRenderer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/render/multiblock/metal/ProjectileWorkshopRenderer.java @@ -99,6 +99,6 @@ public void compileModels(IBlockState state, OBJModel model) coreFiller = IIAnimationCompiledMap.create(this.model, ResLoc.of(IIReference.RES_II, "projectile_workshop/production_filling")); UpgradeTechTree.getTreeFor(TileEntityProjectileWorkshop.class) - .withBaseModelLocation(IIReference.RES_BLOCK_MODEL.with("multiblock/projectile_workshop/projectile_workshop.obj")); + .withBaseModelLocation(IIReference.RES_BLOCK_MODEL.with("multiblock/projectile_workshop/projectile_workshop_inv.obj")); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/util/CameraHandler.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/util/CameraHandler.java index 0c3685433..46c33c730 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/util/CameraHandler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/util/CameraHandler.java @@ -7,11 +7,11 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import pl.pabilo8.immersiveintelligence.api.utils.camera.IEntityZoomProvider; -import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoomTool; -import pl.pabilo8.immersiveintelligence.client.ClientEventHandler; +import pl.pabilo8.immersiveintelligence.api.utils.camera.ICameraEntity; +import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoom; import pl.pabilo8.immersiveintelligence.common.entity.EntityCamera; /** @@ -25,12 +25,18 @@ public class CameraHandler //--- ZoomHandler ---// public static float fovZoom = 1; public static ZoomType type = null; - public static IAdvancedZoomTool zoom; + public static IAdvancedZoom zoom; public static ItemStack stack; + //--- CameraHandler ---// private static EntityCamera camera; private static boolean enabled = false; + public static void setCameraPos(Vec3d pos) + { + setCameraPos(pos.x, pos.y, pos.z); + } + public static void setCameraPos(BlockPos pos) { setCameraPos(pos.getX()+0.5, pos.getY(), pos.getZ()+0.5); @@ -101,21 +107,24 @@ private static boolean handleZoomLogic() Entity lowestRidden; //Zoom provider is an item in player's hand - if((stack = player.getHeldItem(EnumHand.MAIN_HAND)).getItem() instanceof IAdvancedZoomTool) + if((stack = player.getHeldItem(EnumHand.MAIN_HAND)).getItem() instanceof IAdvancedZoom) { type = ZoomType.ITEM_MAINHAND; - zoom = (IAdvancedZoomTool)(stack.getItem()); + zoom = (IAdvancedZoom)(stack.getItem()); } - else if((stack = player.getHeldItem(EnumHand.OFF_HAND)).getItem() instanceof IAdvancedZoomTool) + else if((stack = player.getHeldItem(EnumHand.OFF_HAND)).getItem() instanceof IAdvancedZoom) { type = ZoomType.ITEM_OFFHAND; - zoom = (IAdvancedZoomTool)(stack.getItem()); + zoom = (IAdvancedZoom)(stack.getItem()); } //Zoom provider is an entity ridden by player - else if(ClientEventHandler.mgAiming&&(lowestRidden = player.getLowestRidingEntity()) instanceof IEntityZoomProvider) + else if((lowestRidden = player.getLowestRidingEntity()) instanceof ICameraEntity) { + ICameraEntity camera = (ICameraEntity)lowestRidden; + if(!camera.isCameraEnabled(player)) + return false; type = ZoomType.RIDING; - zoom = ((IEntityZoomProvider)lowestRidden).getZoom(); + zoom = camera.getZoom(); } else return false; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/util/IIKeybind.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/util/IIKeybind.java index 911f2beff..6d8a9cfc4 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/util/IIKeybind.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/util/IIKeybind.java @@ -2,9 +2,11 @@ import blusunrize.immersiveengineering.client.ClientUtils; import net.minecraft.client.settings.KeyBinding; +import net.minecraft.entity.Entity; import net.minecraftforge.client.settings.IKeyConflictContext; import net.minecraftforge.fml.client.registry.ClientRegistry; import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMountedWeapon; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat; /** @@ -21,7 +23,8 @@ public class IIKeybind extends KeyBinding @Override public boolean isActive() { - return ClientUtils.mc().player.getRidingEntity() instanceof EntityVehicleSeat; + Entity seat = ClientUtils.mc().player.getRidingEntity(); + return seat instanceof EntityVehicleSeat||seat instanceof EntityMountedWeapon; } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/util/ShaderUtil.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/util/ShaderUtil.java index 37b9b95ea..448c85866 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/util/ShaderUtil.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/util/ShaderUtil.java @@ -61,6 +61,7 @@ public static boolean useShader(@Nullable Shaders shader, @Nonnull float... para if(shader==null||!shader.use()) return false; + shader.setInt("lightmap", 1); switch(shader) { case BLUEPRINT: @@ -246,6 +247,11 @@ int getRef(String name) return ARBShaderObjects.glGetUniformLocationARB(programID, name); } + void setInt(String name, int value) + { + ARBShaderObjects.glUniform1iARB(getRef(name), value); + } + void setFloat(String name, float value) { ARBShaderObjects.glUniform1fARB(getRef(name), value); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/util/amt/AMTLoader.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/util/amt/AMTLoader.java index 877157e13..a57889ba3 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/util/amt/AMTLoader.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/util/amt/AMTLoader.java @@ -88,7 +88,7 @@ public static JsonObject readServerFileToJson(@Nonnull ResourceLocation res, Str public static IIAnimation loadAnimation(@Nonnull ResourceLocation res) { ResourceLocation fullRes = new ResourceLocation(res.getResourceDomain(), "animations/"+res.getResourcePath()+".json"); - return new IIAnimation(res, readFileToJSON(fullRes, "model header")); + return new IIAnimation(res, readFileToJSON(fullRes, "animation")); } public static IIAnimation loadAnimationServer(@Nonnull ResourceLocation res) diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/client/util/carversound/CompoundSound.java b/src/main/java/pl/pabilo8/immersiveintelligence/client/util/carversound/CompoundSound.java index 7042c73cb..70ac3c630 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/client/util/carversound/CompoundSound.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/client/util/carversound/CompoundSound.java @@ -64,8 +64,16 @@ public void setVolume(float volume) this.volume = volume; } + public void setPosition(Vec3d position) + { + this.xPosF = (float)position.x; + this.yPosF = (float)position.y; + this.zPosF = (float)position.z; + } + public void start() { Minecraft.getMinecraft().getSoundHandler().playSound(this); } + } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/CommonProxy.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/CommonProxy.java index 4ed0f6e49..c95583910 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/CommonProxy.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/CommonProxy.java @@ -22,6 +22,7 @@ import blusunrize.immersiveengineering.common.items.IEItemInterfaces.IGuiItem; import blusunrize.immersiveengineering.common.util.ChatUtils; import blusunrize.immersiveengineering.common.util.IEPotions; +import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; import net.minecraft.block.Block; import net.minecraft.block.BlockTNT; import net.minecraft.block.state.IBlockState; @@ -84,7 +85,10 @@ import pl.pabilo8.immersiveintelligence.common.crafting.IIRecipes; import pl.pabilo8.immersiveintelligence.common.crafting.RecipePowerpackAdvanced; import pl.pabilo8.immersiveintelligence.common.crafting.RecipeSkinCraftingHandler; -import pl.pabilo8.immersiveintelligence.common.entity.*; +import pl.pabilo8.immersiveintelligence.common.entity.EntityHans; +import pl.pabilo8.immersiveintelligence.common.entity.EntityParachute; +import pl.pabilo8.immersiveintelligence.common.entity.EntitySkyCrate; +import pl.pabilo8.immersiveintelligence.common.entity.EntitySkycrateInternal; import pl.pabilo8.immersiveintelligence.common.entity.ammo.component.*; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.*; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.naval_mine.EntityNavalMine; @@ -99,14 +103,19 @@ import pl.pabilo8.immersiveintelligence.common.entity.minecart.crate.EntityMinecartCrateReinforced; import pl.pabilo8.immersiveintelligence.common.entity.minecart.crate.EntityMinecartCrateSteel; import pl.pabilo8.immersiveintelligence.common.entity.minecart.crate.EntityMinecartCrateWooden; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMachinegun; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMortar; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityTripodPeriscope; import pl.pabilo8.immersiveintelligence.common.entity.tactile.EntityAMTTactile; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityDrone; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityMotorbike; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityTrackedMotorbike; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun.EntityFieldFlak; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun.EntityFieldGun; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun.EntityFieldHowitzer; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat; -import pl.pabilo8.immersiveintelligence.common.gui.ContainerUpgrade; +import pl.pabilo8.immersiveintelligence.common.gui.ContainerEntityUpgrade; +import pl.pabilo8.immersiveintelligence.common.gui.ContainerTileUpgrade; import pl.pabilo8.immersiveintelligence.common.item.ItemIIMinecart.Minecarts; import pl.pabilo8.immersiveintelligence.common.item.crafting.material.ItemIIMaterialDust.MaterialsDust; import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; @@ -724,6 +733,7 @@ public void init(FMLInitializationEvent event) registerEntity(i++, EntityMotorbike.class, "motorbike", 64, 1, false); registerEntity(i++, EntityTrackedMotorbike.class, "tracked_motorbike", 64, 1, false); registerEntity(i++, EntityFieldHowitzer.class, "field_howitzer", 64, 1, false); + registerEntity(i++, EntityFieldFlak.class, "field_flak", 64, 1, false); registerEntity(i++, EntityFieldGun.class, "field_gun", 64, 1, false); registerEntity(i++, EntityTripodPeriscope.class, "tripod_periscope", 64, 1, true); @@ -790,12 +800,21 @@ public Object getServerGuiElement(int ID, EntityPlayer player, World world, int EnumHand hand; TileEntity te = world.getTileEntity(new BlockPos(x, y, z)); ItemStack stack = player.getHeldItem(hand = (player.getHeldItem(EnumHand.MAIN_HAND).getItem() instanceof IGuiItem?EnumHand.MAIN_HAND: EnumHand.OFF_HAND)); + Entity entity = y==Integer.MIN_VALUE?world.getEntityByID(x): null; - if(ID==IIGUI.UPGRADE.ordinal()&&te instanceof IUpgradableDevice) + if(ID==IIGUI.UPGRADE_TILE.ordinal()&&te instanceof IUpgradableDevice) { IUpgradableDevice upgradeMaster = ((IUpgradableDevice)te).master(); if(upgradeMaster!=null) - return new ContainerUpgrade(player, (TileEntityIEBase & IUpgradableDevice)upgradeMaster); + //noinspection rawtypes,unchecked + return new ContainerTileUpgrade(player, (TileEntityIEBase & IUpgradableDevice)upgradeMaster); + } + if(ID==IIGUI.UPGRADE_ENTITY.ordinal()&&entity instanceof IUpgradableDevice) + { + IUpgradableDevice upgradeMaster = ((IUpgradableDevice)entity).master(); + if(upgradeMaster!=null) + //noinspection rawtypes,unchecked + return new ContainerEntityUpgrade<>(player, (Entity & IUpgradableDevice & IIEInventory)upgradeMaster); } if(IIGUI.values().length > ID) diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/EventHandler.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/EventHandler.java index 7473b81f6..77e506160 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/EventHandler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/EventHandler.java @@ -2,7 +2,10 @@ import blusunrize.immersiveengineering.api.MultiblockHandler.MultiblockFormEvent.Post; import blusunrize.immersiveengineering.common.util.ItemNBTHelper; +import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MultiPartEntityPart; import net.minecraft.entity.ai.EntityAINearestAttackableTarget; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.player.EntityPlayer; @@ -13,6 +16,7 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.util.DamageSource; import net.minecraft.util.EntityDamageSourceIndirect; +import net.minecraft.util.EnumHand; import net.minecraft.util.SoundCategory; import net.minecraft.world.GameRules; import net.minecraft.world.GameRules.ValueType; @@ -27,6 +31,7 @@ import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.player.EntityItemPickupEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteract; import net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock; import net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickEmpty; import net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickItem; @@ -42,9 +47,11 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; +import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; import pl.pabilo8.immersiveintelligence.api.ammo.penetration.DamageBlockPos; import pl.pabilo8.immersiveintelligence.api.ammo.utils.IIAmmoUtils; import pl.pabilo8.immersiveintelligence.api.ammo.utils.PenetrationCache; +import pl.pabilo8.immersiveintelligence.api.upgrade.IUpgradableDevice; import pl.pabilo8.immersiveintelligence.api.utils.IAdvancedMultiblock; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Ammunition; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons; @@ -52,8 +59,9 @@ import pl.pabilo8.immersiveintelligence.common.compat.IICompatModule; import pl.pabilo8.immersiveintelligence.common.crafting.IIRecipes; import pl.pabilo8.immersiveintelligence.common.entity.EntityHans; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMachinegun; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMountedWeapon; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat; import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIBulletMagazine; import pl.pabilo8.immersiveintelligence.common.item.armor.ItemIILightEngineerBoots; import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; @@ -119,10 +127,8 @@ else if(event.getSource()==DamageSource.IN_FIRE||event.getSource()==DamageSource } //springs else if(event.getSource()==DamageSource.FALL) - { if(ItemIIUpgradeableArmor.isArmorWithUpgrade(boots, "springs")) event.setCanceled(true); - } } //--- World Load Handling ---// @@ -232,9 +238,8 @@ public void onWorldTick(WorldTickEvent event) @SubscribeEvent public void onMultiblockForm(Post event) { + //Required by Advanced Structures! if(event.isCancelable()&&!event.isCanceled()&&event.getMultiblock().getClass().isAnnotationPresent(IAdvancedMultiblock.class)) - { - //Required by Advanced Structures! if(!IIItemUtils.isAdvancedHammer(event.getHammer())) { if(!event.getEntityPlayer().getEntityWorld().isRemote) @@ -242,15 +247,16 @@ public void onMultiblockForm(Post event) IIStringUtil.getItemStackTextComponent(IIContent.itemHammer.getStack(1))); event.setCanceled(true); } - } } - //Cancel when using a machinegun @SubscribeEvent(priority = EventPriority.HIGH) public void onItemUse(RightClickBlock event) { - EntityLivingBase living = event.getEntityLiving(); - if(living.isRiding()&&living.getRidingEntity() instanceof EntityMachinegun) + if(!event.getEntity().isRiding()) + return; + Entity baseEntity = event.getEntity().getRidingEntity(); + //Cancel when using a vehicle + if(baseEntity instanceof EntityMountedWeapon||baseEntity instanceof EntityVehicleSeat) { event.setResult(Result.DENY); event.setCanceled(true); @@ -261,8 +267,11 @@ public void onItemUse(RightClickBlock event) @SubscribeEvent(priority = EventPriority.HIGH) public void onBlockUse(RightClickItem event) { - //Machinegun - if(event.getEntity().isRiding()&&event.getEntity().getRidingEntity() instanceof EntityMachinegun) + if(!event.getEntity().isRiding()) + return; + Entity baseEntity = event.getEntity().getRidingEntity(); + //Cancel when using a vehicle + if(baseEntity instanceof EntityMountedWeapon||baseEntity instanceof EntityVehicleSeat) { event.setResult(Result.DENY); event.setCanceled(true); @@ -273,10 +282,12 @@ public void onBlockUse(RightClickItem event) @SubscribeEvent(priority = EventPriority.HIGH) public void onEmptyRightclick(RightClickEmpty event) { - if(event.getEntity().isRiding()&&event.getEntity().getRidingEntity() instanceof EntityMachinegun) - { + if(!event.getEntity().isRiding()) + return; + Entity baseEntity = event.getEntity().getRidingEntity(); + //Cancel when using a vehicle + if(baseEntity instanceof EntityMountedWeapon||baseEntity instanceof EntityVehicleSeat) event.setResult(Result.DENY); - } } @SubscribeEvent @@ -299,6 +310,33 @@ public void onBreakBlock(BreakEvent event) } } + @SubscribeEvent + public void onPlayerInteractEntityInteract(EntityInteract event) + { + EntityPlayer player = event.getEntityPlayer(); + + //Display upgrade GUI for compatible entities when using a wrench + if(IIItemUtils.isWrench(player.getHeldItem(EnumHand.MAIN_HAND))||IIItemUtils.isWrench(player.getHeldItem(EnumHand.OFF_HAND))) + { + Entity interacted = event.getTarget(); + if(interacted instanceof MultiPartEntityPart) + interacted = (Entity)((MultiPartEntityPart)interacted).parent; + if(interacted instanceof IUpgradableDevice) + { + if(!(interacted instanceof IIEInventory)) + { + IILogger.error("Cannot open upgrade GUI for "+interacted+", it does not implement IIEInventory!"); + return; + } + //Open entity GUI + player.openGui(ImmersiveIntelligence.INSTANCE, IIGUI.UPGRADE_ENTITY.ordinal(), + interacted.world, interacted.getEntityId(), Integer.MIN_VALUE, 0); + } + } + + } + + //--- Hanses ---// @SubscribeEvent(priority = EventPriority.LOW) @@ -316,12 +354,10 @@ public void onLivingUpdate(LivingUpdateEvent event) EntityPlayer player = (EntityPlayer)living; //Potion effects + //Apply radiation if(world.getTotalWorldTime()%20==0) - { - //Apply radiation if(!player.isCreative()&&biome==IIContent.biomeWasteland) living.addPotionEffect(new PotionEffect(IIPotions.radiation, 2000, 0, false, false)); - } //Handle powerpack crafted with armor if(!living.getItemStackFromSlot(EntityEquipmentSlot.CHEST).isEmpty() @@ -395,10 +431,8 @@ else if(event.getSource()==DamageSource.IN_FIRE||event.getSource()==DamageSource } //springs else if(event.getSource()==DamageSource.FALL) - { if(ItemIIUpgradeableArmor.isArmorWithUpgrade(boots, "springs")) event.setCanceled(true); - } } /** @@ -418,9 +452,7 @@ public void onLivingFallEvent(LivingFallEvent event) if(!(piece.getItem() instanceof ItemIILightEngineerBoots)) continue; ItemIILightEngineerBoots boots = (ItemIILightEngineerBoots)piece.getItem(); if(boots.hasUpgrade(piece, "internal_springs")) - { event.setDistance(0); - } } } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/IIConfigHandler.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/IIConfigHandler.java index 9f9edd74d..087a133e1 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/IIConfigHandler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/IIConfigHandler.java @@ -1822,7 +1822,7 @@ public static class Machinegun public static int clipReloadTime = 35; @Comment({"Time required to fire a single bullet in MG."}) - public static int bulletFireTime = 2; + public static int fireDelay = 2; @Comment({"Time required to set up the MG (in ticks)."}) public static int setupTime = 50; @@ -1836,8 +1836,10 @@ public static class Machinegun @Comment({"Amount of vertical recoil after taking a shot."}) public static float recoilVertical = 2.5f; + //Upgrades + @Comment({"Fire rate multiplier when heavy barrel is mouted on mg."}) - public static float heavyBarrelFireRateMultiplier = 0.25f; + public static int heavyBarrelFireDelay = 1; @Comment({"Horizontal recoil after taking a shot with heavy barrel mounted."}) public static float recoilHBHorizontal = 1.25f; @@ -1881,10 +1883,10 @@ public static class Machinegun @Comment({"Max zoom of a machinegun with a scope mounted (in Blu's Unit of Distance Measurementâ„¢)."}) @RequiresMcRestart - public static float[] machinegunScopeMaxZoom = new float[]{0.55f, 0.35f, 0.15f}; + public static float[] machinegunScopeZoom = new float[]{0.15f, 0.35f, 0.55f}; @Comment({"Shield's initial strength (resistance vs attacks)."}) - public static float shieldStrengthInitial = 45; + public static int shieldStrengthInitial = 45; @Comment({"Setup time multiplier when a shield is mouted on mg."}) public static float shieldSetupTimeMultiplier = 0.5f; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/IIContent.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/IIContent.java index e18ccadbf..9193851a8 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/IIContent.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/IIContent.java @@ -134,10 +134,12 @@ public class IIContent .withType(UpgradePurpose.SPECIAL); //allows printing bound pages, books and newspapers public static final Upgrade UPGRADE_PRESS_BATCHING = new Upgrade("printing_press/batching") - .withType(UpgradePurpose.SPECIAL); + .withType(UpgradePurpose.SPECIAL) + .withWIPStatus(); //allows printing envelopes public static final Upgrade UPGRADE_PRESS_ENVELOPER = new Upgrade("printing_press/enveloper") - .withType(UpgradePurpose.SPECIAL); + .withType(UpgradePurpose.SPECIAL) + .withWIPStatus(); //allows the radar to detect radio signal emitters and send their positions public static final Upgrade UPGRADE_RADIO_LOCATORS = new Upgrade("radio_locators"); @@ -158,7 +160,8 @@ public class IIContent .withType(UpgradePurpose.DATA); //arithemtic logic machine upgrade public static final Upgrade UPGRADE_MEMORY = new Upgrade("memory") - .withType(UpgradePurpose.DATA); + .withType(UpgradePurpose.DATA) + .withWIPStatus(); public static final Upgrade UPGRADE_CIRCUIT_RACKS = new Upgrade("circuit_racks") .withType(UpgradePurpose.CAPACITY); @@ -190,7 +193,8 @@ public class IIContent new UpgradeEmplacementWeapon<>("guided_missile_launcher", EmplacementWeaponGuidedMissileLauncher::new); public static final Upgrade UPGRADE_SOVEREIGNTY = new Upgrade("sovereignty") - .withType(UpgradePurpose.DEFENSE_SYSTEM); + .withType(UpgradePurpose.DEFENSE_SYSTEM) + .withWIPStatus(); public static final Upgrade UPGRADE_EMPLACEMENT_FALLBACK_GRENADES = new Upgrade("emplacement/emergency_smoke") .withType(UpgradePurpose.DEFENSE_SYSTEM); @@ -202,16 +206,20 @@ public class IIContent public static final Upgrade UPGRADE_EMPLACEMENT_MACHINEGUN_WATERCOOLED = new Upgrade("emplacement/machinegun/watercooled") .withType(UpgradePurpose.EFFICIENCY); public static final Upgrade UPGRADE_EMPLACEMENT_MACHINEGUN_BUNKER = new Upgrade("emplacement/machinegun/additional_fortifications") - .withType(UpgradePurpose.ARMOR); + .withType(UpgradePurpose.ARMOR) + .withWIPStatus(); public static final Upgrade UPGRADE_FLAGPOLE_CAPTURE_DEFIANCE = new Upgrade("flagpole/capture_defiance") .withType(UpgradePurpose.DEFENSE_SYSTEM); public static final Upgrade UPGRADE_FLAGPOLE_TASER_LOCKS = new Upgrade("flagpole/taser_locks") - .withType(UpgradePurpose.DEFENSE_SYSTEM); + .withType(UpgradePurpose.DEFENSE_SYSTEM) + .withWIPStatus(); public static final Upgrade UPGRADE_FLAGPOLE_DISTRESS_SIGNAL = new Upgrade("flagpole/distress_signal") - .withType(UpgradePurpose.DEFENSE_SYSTEM); + .withType(UpgradePurpose.DEFENSE_SYSTEM) + .withWIPStatus(); public static final Upgrade UPGRADE_FLAGPOLE_UNIT_POST = new Upgrade("flagpole/unit_post") - .withType(UpgradePurpose.FULL_CONVERSION); + .withType(UpgradePurpose.FULL_CONVERSION) + .withWIPStatus(); public static final Upgrade UPGRADE_VEHICLE_SMALL_STORAGE = new Upgrade("vehicle/small/storage") .withType(UpgradePurpose.CAPACITY); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/IICreativeTab.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/IICreativeTab.java index 1b5051675..40cdfc284 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/IICreativeTab.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/IICreativeTab.java @@ -623,7 +623,7 @@ public void addExampleAmmo(NonNullList list) ItemStack stackP2 = addAmmo(list, item, name+"/P2 Spitzkopfgeschoss", IIContent.ammoCoreSteel, CoreType.PIERCING, FuseType.CONTACT); ItemStack stackP5 = addAmmo(list, item, name+"/P5 Phosphorpatrone", - IIContent.ammoCoreBrass, CoreType.PIERCING, FuseType.CONTACT, IIContent.ammoComponentHMX); + IIContent.ammoCoreBrass, CoreType.PIERCING, FuseType.CONTACT, IIContent.ammoComponentWhitePhosphorus); ItemStack stackW1 = addAmmo(list, item, name+"/W1 Flakpatrone", IIContent.ammoCoreBrass, CoreType.CANISTER, FuseType.PROXIMITY, IIContent.ammoComponentWhitePhosphorus, AmmoRegistry.getComponent("shrapnel_steel"), IIContent.ammoComponentTracerPowder); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/IIGUI.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/IIGUI.java index dbb740523..bc097ed1c 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/IIGUI.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/IIGUI.java @@ -4,6 +4,7 @@ import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; import mezz.jei.api.IModRegistry; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -19,6 +20,10 @@ import pl.pabilo8.immersiveintelligence.client.gui.block.arithmetic_logic_machine.GuiArithmeticLogicMachineEdit; import pl.pabilo8.immersiveintelligence.client.gui.block.data_input_machine.GuiDataInputMachine; import pl.pabilo8.immersiveintelligence.client.gui.block.data_input_machine.GuiDataInputMachineEdit; +import pl.pabilo8.immersiveintelligence.client.gui.block.data_merger.GuiDataMerger; +import pl.pabilo8.immersiveintelligence.client.gui.block.data_merger.GuiDataMergerEdit; +import pl.pabilo8.immersiveintelligence.client.gui.block.data_router.GuiDataRouter; +import pl.pabilo8.immersiveintelligence.client.gui.block.data_router.GuiDataRouterEdit; import pl.pabilo8.immersiveintelligence.client.gui.block.emplacement.GuiEmplacementPageConfig; import pl.pabilo8.immersiveintelligence.client.gui.block.emplacement.GuiEmplacementPageFireMissions; import pl.pabilo8.immersiveintelligence.client.gui.block.emplacement.GuiEmplacementPageStorage; @@ -35,9 +40,11 @@ import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui.DecoResourcesLoader; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoResource; import pl.pabilo8.immersiveintelligence.client.gui.deco.util.DecoTemplate; +import pl.pabilo8.immersiveintelligence.client.gui.entity.GuiEntityUpgrade; import pl.pabilo8.immersiveintelligence.client.gui.item.GuiCasingPouch; import pl.pabilo8.immersiveintelligence.client.gui.item.GuiPrintedPage; import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataMerger; +import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataRouter; import pl.pabilo8.immersiveintelligence.common.block.metal_device.tileentity.TileEntityMetalCrate; import pl.pabilo8.immersiveintelligence.common.block.metal_device.tileentity.effect_crate.TileEntityAmmunitionCrate; import pl.pabilo8.immersiveintelligence.common.block.metal_device.tileentity.effect_crate.TileEntityMedicalCrate; @@ -55,7 +62,8 @@ import pl.pabilo8.immersiveintelligence.common.gui.*; import pl.pabilo8.immersiveintelligence.common.util.ISerializableEnum; import pl.pabilo8.immersiveintelligence.common.util.ResLoc; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIEntityBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; import pl.pabilo8.immersiveintelligence.common.util.lambda.TriFunction; import javax.annotation.Nonnull; @@ -121,6 +129,9 @@ public enum IIGUI implements ISerializableEnum FUEL_STATION(TileEntityFuelStation.class, ContainerFuelStation::new), DATA_MERGER(TileEntityDataMerger.class, ContainerDataMerger::new), + DATA_MERGER_EDIT(TileEntityDataMerger.class, ContainerDataMerger::new), + DATA_ROUTER(TileEntityDataRouter.class, ContainerDataRouter::getMainGui), + DATA_ROUTER_EDIT(TileEntityDataRouter.class, ContainerDataRouter::getEditGui), INSERTER(TileEntityInserterBase.class, ContainerInserter::new), GEARBOX(TileEntityGearbox.class, ContainerGearbox::new), @@ -129,8 +140,12 @@ public enum IIGUI implements ISerializableEnum SAWMILL(TileEntitySawmill.class, ContainerSawmill::new), @SuppressWarnings({"rawtypes", "unchecked"}) - UPGRADE(TileEntityIEBase.class, - (player, te) -> new ContainerUpgrade(player, te) + UPGRADE_TILE(TileEntityIEBase.class, + (player, te) -> new ContainerTileUpgrade(player, te) + ), + @SuppressWarnings({"rawtypes", "unchecked"}) + UPGRADE_ENTITY(Entity.class, + (player, entity) -> new ContainerEntityUpgrade(player, entity) ), VULCANIZER(TileEntityVulcanizer.class, ContainerVulcanizer::new), @@ -153,13 +168,18 @@ public enum IIGUI implements ISerializableEnum RADAR_TARGETS(TileEntityRadar.class, ContainerRadar::new); public final Class teClass; + public final Class entityClass; public final BiFunction containerFromTile; + public final BiFunction containerFromEntity; public final TriFunction containerFromStack; public boolean item; + @SideOnly(Side.CLIENT) public BiFunction guiFromTile; @SideOnly(Side.CLIENT) public TriFunction guiFromStack; + @SideOnly(Side.CLIENT) + private BiFunction guiFromEntity; //Required for JEI @SideOnly(Side.CLIENT) public Class> guiClass; @@ -167,11 +187,27 @@ public enum IIGUI implements ISerializableEnum /** * TileEntity GUI constructor */ - IIGUI(@Nonnull Class teClass, BiFunction containerFromTile) + IIGUI(@Nonnull Class teClass, @Nonnull BiFunction containerFunction) { - this.teClass = teClass; - //noinspection unchecked - this.containerFromTile = (player, tileEntity) -> containerFromTile.apply(player, (T)tileEntity); + if(TileEntity.class.isAssignableFrom(teClass)) + { + //noinspection unchecked + this.teClass = (Class)teClass; + this.entityClass = null; + //noinspection unchecked + this.containerFromTile = (player, tileEntity) -> containerFunction.apply(player, (T)tileEntity); + this.containerFromEntity = null; + } + else if(Entity.class.isAssignableFrom(teClass)) + { + this.teClass = null; + //noinspection unchecked + this.entityClass = (Class)teClass; + this.containerFromTile = null; + this.containerFromEntity = (player, entity) -> containerFunction.apply(player, (T)entity); + } + else + throw new IllegalArgumentException("Invalid GUI subject class: "+teClass); this.containerFromStack = null; this.item = false; } @@ -179,10 +215,12 @@ IIGUI(@Nonnull Class teClass, BiFunction containerFromStack) + IIGUI(@Nonnull TriFunction containerFromStack) { this.teClass = null; + this.entityClass = null; this.containerFromTile = null; + this.containerFromEntity = null; this.containerFromStack = containerFromStack; this.item = true; } @@ -193,7 +231,9 @@ IIGUI(@Nonnull Class teClass, BiFunction IIGUI(@Nonnull Class teClass, BiFunction new GuiUpgrade(player, tile)); - - IIGUI.FLAGPOLE.setClientDecoGui(GuiFlagpole::new); - IIGUI.FLAGPOLE_FACTION.setClientDecoGui(GuiFlagpoleFaction::new); - IIGUI.EMPLACEMENT_STORAGE.setClientDecoGui(GuiEmplacementPageStorage::new); - IIGUI.EMPLACEMENT_CONFIG.setClientDecoGui(GuiEmplacementPageConfig::new); - IIGUI.EMPLACEMENT_TARGET_FILTERS.setClientDecoGui(GuiEmplacementPageTargetFilters::new); - IIGUI.EMPLACEMENT_FIRE_MISSIONS.setClientDecoGui(GuiEmplacementPageFireMissions::new); - - IIGUI.FILLER.setClientDecoGui(GuiFiller::new); - IIGUI.CHEMICAL_PAINTER.setClientDecoGui(GuiChemicalPainter::new); - - IIGUI.AMMUNITION_ASSEMBLER.setClientDecoGui(GuiAmmunitionAssembler::new); - IIGUI.PROJECTILE_WORKSHOP.setClientDecoGui(GuiProjectileWorkshop::new); - - IIGUI.RADAR.setClientDecoGui(GuiRadar::new); - IIGUI.RADAR_CONFIG.setClientDecoGui(GuiRadarConfig::new); - IIGUI.RADAR_TARGETS.setClientDecoGui(GuiRadarTargets::new); - IIGUI.COAGULATOR.setClientDecoGui(GuiCoagulator::new); - IIGUI.VULCANIZER.setClientDecoGui(GuiVulcanizer::new); + IIGUI.UPGRADE_TILE.setClientTileGui((player, tile) -> new GuiTileUpgrade(player, tile)); + //noinspection rawtypes,unchecked + IIGUI.UPGRADE_ENTITY.setClientEntityGui((player, tile) -> new GuiEntityUpgrade(player, tile)); + + IIGUI.FLAGPOLE.setClientTileGui(GuiFlagpole::new); + IIGUI.FLAGPOLE_FACTION.setClientTileGui(GuiFlagpoleFaction::new); + IIGUI.EMPLACEMENT_STORAGE.setClientTileGui(GuiEmplacementPageStorage::new); + IIGUI.EMPLACEMENT_CONFIG.setClientTileGui(GuiEmplacementPageConfig::new); + IIGUI.EMPLACEMENT_TARGET_FILTERS.setClientTileGui(GuiEmplacementPageTargetFilters::new); + IIGUI.EMPLACEMENT_FIRE_MISSIONS.setClientTileGui(GuiEmplacementPageFireMissions::new); + + IIGUI.FILLER.setClientTileGui(GuiFiller::new); + IIGUI.CHEMICAL_PAINTER.setClientTileGui(GuiChemicalPainter::new); + + IIGUI.AMMUNITION_ASSEMBLER.setClientTileGui(GuiAmmunitionAssembler::new); + IIGUI.PROJECTILE_WORKSHOP.setClientTileGui(GuiProjectileWorkshop::new); + + IIGUI.RADAR.setClientTileGui(GuiRadar::new); + IIGUI.RADAR_CONFIG.setClientTileGui(GuiRadarConfig::new); + IIGUI.RADAR_TARGETS.setClientTileGui(GuiRadarTargets::new); + IIGUI.COAGULATOR.setClientTileGui(GuiCoagulator::new); + IIGUI.VULCANIZER.setClientTileGui(GuiVulcanizer::new); } @SideOnly(Side.CLIENT) @@ -280,16 +325,9 @@ public static void registerDecoJEICompat(IModRegistry registry) registry.addAdvancedGuiHandlers(new DecoGuiJEIHandler<>(gui)); } - @SideOnly(Side.CLIENT) - @Deprecated - public void setClientGui(BiFunction guiFromTile) - { - this.guiFromTile = (player, tileEntity) -> guiFromTile.apply(player, (T)tileEntity); - } - @SideOnly(Side.CLIENT) @SuppressWarnings("unchecked") - public > void setClientDecoGui(BiFunction> guiFromTile) + public > void setClientTileGui(BiFunction> guiFromTile) { Class> klass = (Class>)guiFromTile.apply(null, null).getClass(); this.guiFromTile = (player, tileEntity) -> guiFromTile.apply(player, (T)tileEntity); @@ -303,9 +341,7 @@ public > List resources = new ArrayList<>(); for(Field field : klass.getFields()) - { if(field.isAnnotationPresent(DecoResource.class)&&Modifier.isStatic(field.getModifiers())) - { try { Object value = field.get(null); @@ -319,8 +355,6 @@ else if(value instanceof String) { IILogger.error("Failed to access field "+field.getName()+" in class "+klass.getName(), e); } - } - } if(!resources.isEmpty()) new DecoResourcesLoader(this.getName().replace("gui_", ""), resources); @@ -330,6 +364,13 @@ else if(value instanceof String) public void setClientStackGui(TriFunction guiFromStack) { this.guiFromStack = guiFromStack; - item = true; + this.item = true; + } + + @SideOnly(Side.CLIENT) + public > void setClientEntityGui(BiFunction> guiFromEntity) + { + this.guiFromEntity = (player, entity) -> guiFromEntity.apply(player, (T)entity); + this.item = false; } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/IISounds.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/IISounds.java index c5b269ee0..2c0d33009 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/IISounds.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/IISounds.java @@ -277,6 +277,8 @@ public class IISounds public static SoundEvent constructionElectricWrench = registerSound("construction_electric_wrench"); @ModSound(sounds = {"construction/wrench/wrench{0..2}"}, subtitle = "construction") public static SoundEvent constructionWrench = registerSound("construction_wrench"); + @ModSound(sounds = {"weapons/weapon_placed/weapon_placed{0..1}"}, subtitle = "*") + public static SoundEvent weaponPlaced = registerSound("weapon_placed"); //--- Guns ---// //Ammo Pickup @@ -517,14 +519,20 @@ public class IISounds public static SoundEvent impactFlesh = registerSound("impact_flesh"); //--- Vehicle ---// - @ModSound(sounds = {"motorbike/start"}, subtitle = "*") - public static SoundEvent motorbikeStart = registerSound("motorbike_start"); - @ModSound(sounds = {"motorbike/start_no_fuel"}, subtitle = "motorbike_start") - public static SoundEvent motorbikeStartNoFuel = registerSound("motorbike_start_no_fuel"); - @ModSound(sounds = {"motorbike/engine"}, subtitle = "*") - public static SoundEvent motorbikeEngine = registerSound("motorbike_engine"); - @ModSound(sounds = {"motorbike/horn"}, subtitle = "*") - public static SoundEvent motorbikeHorn = registerSound("motorbike_horn"); + @ModSound(sounds = {"vehicle/horn"}, subtitle = "*") + public static SoundEvent vehicleHorn = registerSound("vehicle_horn"); + @ModSound(sounds = {"vehicle/engine_light/start"}, subtitle = "*") + public static SoundEvent engineLightStart = registerSound("engine_light_start"); + @ModSound(sounds = {"vehicle/engine_light/start_no_fuel"}, subtitle = "light_engine_start") + public static SoundEvent engineLightStartNoFuel = registerSound("engine_light_start_no_fuel"); + @ModSound(sounds = {"vehicle/engine_light/engine"}, subtitle = "*") + public static SoundEvent engineLight = registerSound("engine_light"); + public static MultiSound engineLightLoop = new MultiSound(engineLight); + + //--- Aircraft ---// + @ModSound(sounds = {"vehicle/drone/drone_propeller"}, subtitle = "*") + public static SoundEvent dronePropeller = registerSound("drone_propeller"); + public static MultiSound dronePropellerLoop = new MultiSound(dronePropeller); //--- Hans ---// //public static SoundEvent hans_test_pl = registerSound("hans_test_pl"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/IIUtils.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/IIUtils.java index 4fc3cf628..e13861f59 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/IIUtils.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/IIUtils.java @@ -16,9 +16,12 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.resources.I18n; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.MobEffects; import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.NonNullList; @@ -52,11 +55,7 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; +import java.util.*; import java.util.function.Function; import java.util.function.Predicate; @@ -400,6 +399,30 @@ public static void giveOrDropStack(@Nonnull Entity entity, ItemStack stack) Utils.dropStackAtPos(entity.world, entity.getPosition(), stack); } + /** + * Applies infrared vision to the entity if it's dark enough, otherwise blinds it. + * + * @return true if infrared vision was applied, false if the entity was blinded + */ + public static boolean applyInfraredVision(Entity entity, int duration) + { + //Entity does not support potion effects + if(!(entity instanceof EntityLivingBase)||entity.world.isRemote) + return false; + + //Apply infrared in darkness or blind the entity + if(entity.world.getLightBrightness(entity.getPosition()) <= 0.5f) + { + ((EntityLivingBase)entity).addPotionEffect(new PotionEffect(IIPotions.infraredVision, duration, 1, true, false)); + return true; + } + else + { + ((EntityLivingBase)entity).addPotionEffect(new PotionEffect(MobEffects.BLINDNESS, 240, 1, false, false)); + return false; + } + } + @Nullable public static T requireMaster(@Nullable T object, @Nonnull Function master) { @@ -447,7 +470,13 @@ public static T getAnnotation(Class annotationClass, O @Nonnull public static & ISerializableEnum> T enumValue(Class en, String name) { - return Enum.valueOf(en, name.toUpperCase()); + try + { + return Enum.valueOf(en, name.toUpperCase()); + } catch(IllegalArgumentException ignored) + { + return en.getEnumConstants()[0]; + } } /** diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/explosives/AmmoComponentHMX.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/explosives/AmmoComponentHMX.java index 0f3efcf67..dfa355456 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/explosives/AmmoComponentHMX.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/explosives/AmmoComponentHMX.java @@ -34,7 +34,7 @@ public IngredientStack getMaterial() public void onEffect(World world, Vec3d pos, Vec3d dir, ComponentEffectShape shape, NBTTagCompound tag, float componentSize, float multiplier, Entity owner) { new IIExplosion(world, owner, pos, dir, - 12*componentSize, 18*multiplier, shape, false, componentSize > 0.125f, false) + 10*componentSize, 16*multiplier, shape, false, componentSize > 0.125f, false) .doExplosion(); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/explosives/AmmoComponentRDX.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/explosives/AmmoComponentRDX.java index 20d77a1ca..fa4783b12 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/explosives/AmmoComponentRDX.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/explosives/AmmoComponentRDX.java @@ -34,7 +34,7 @@ public IngredientStack getMaterial() public void onEffect(World world, Vec3d pos, Vec3d dir, ComponentEffectShape shape, NBTTagCompound tag, float componentSize, float multiplier, Entity owner) { new IIExplosion(world, owner, pos, dir, - 9*componentSize, 10*multiplier, shape, false, componentSize > 0.125f, false) + 8*componentSize, 8*multiplier, shape, false, componentSize > 0.125f, false) .doExplosion(); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/factory/AmmoComponentFluid.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/factory/AmmoComponentFluid.java index a2219e516..39e9fdc28 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/factory/AmmoComponentFluid.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/factory/AmmoComponentFluid.java @@ -28,7 +28,8 @@ */ public class AmmoComponentFluid extends AmmoComponent { - Fluid fluid; + private final Fluid fluid; + private IIColor overrideColor = null; public AmmoComponentFluid(Fluid fluid) { @@ -59,6 +60,24 @@ public boolean showInManual() return false; } + @Override + public IIColor getColor() + { + if(this.overrideColor!=null) + return this.overrideColor; + return super.getColor(); + } + + public Fluid getFluid() + { + return fluid; + } + + public void setOverrideColor(IIColor overrideColor) + { + this.overrideColor = overrideColor; + } + @Override public void onEffect(World world, Vec3d pos, Vec3d dir, ComponentEffectShape shape, NBTTagCompound tag, float size, float multiplier, Entity owner) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/factory/AmmoComponentShrapnel.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/factory/AmmoComponentShrapnel.java index 07f2514a5..8ea4e3b7f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/factory/AmmoComponentShrapnel.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/factory/AmmoComponentShrapnel.java @@ -50,7 +50,7 @@ public void onEffect(World world, Vec3d pos, Vec3d dir, ComponentEffectShape sha { Vec3d v = new Vec3d(0, -1, 0); Vec3d throwerPos = pos.addVector(0, 3, 0); - for(int i = 0; i < 50*multiplier; i++) + for(int i = 0; i < 20*size; i++) { Vec3d vecDir = v.addVector(Utils.RAND.nextGaussian()*.25f, Utils.RAND.nextGaussian()*.25f, Utils.RAND.nextGaussian()*.25f); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/incendiary/AmmoComponentWhitePhosphorus.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/incendiary/AmmoComponentWhitePhosphorus.java index 841c14902..6ac826052 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/incendiary/AmmoComponentWhitePhosphorus.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/ammo/components/incendiary/AmmoComponentWhitePhosphorus.java @@ -2,26 +2,31 @@ import blusunrize.immersiveengineering.api.crafting.IngredientStack; import blusunrize.immersiveengineering.common.util.IEPotions; -import blusunrize.immersiveengineering.common.util.Utils; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityAreaEffectCloud; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; -import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.DamageSource; import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import pl.pabilo8.immersiveintelligence.api.ammo.enums.ComponentEffectShape; import pl.pabilo8.immersiveintelligence.api.ammo.enums.ComponentRole; import pl.pabilo8.immersiveintelligence.api.ammo.parts.AmmoComponent; -import pl.pabilo8.immersiveintelligence.common.IIPotions; +import pl.pabilo8.immersiveintelligence.common.IILogger; import pl.pabilo8.immersiveintelligence.common.IISounds; +import pl.pabilo8.immersiveintelligence.common.IIUtils; import pl.pabilo8.immersiveintelligence.common.entity.ammo.component.EntityWhitePhosphorus; import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; import pl.pabilo8.immersiveintelligence.common.network.messages.MessageParticleEffect; import pl.pabilo8.immersiveintelligence.common.util.IIColor; import javax.annotation.Nullable; +import java.util.Set; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -46,87 +51,68 @@ public IngredientStack getMaterial() @Override public void onEffect(World world, Vec3d pos, Vec3d dir, ComponentEffectShape shape, NBTTagCompound tag, float size, float multiplier, @Nullable Entity owner) { - // CLOUD shape: similar to what you implemented earlier - if(shape==ComponentEffectShape.ORB) - { - // Effect logic for cloud shape (similar to your original implementation) - if(world.isRemote) - return; - - Vec3d v = dir.scale(-1); // Reverse direction for effect shaping + BlockPos blockPos = new BlockPos(pos); + if(size > 0.2) IIPacketHandler.playRangedSound(world, pos, IISounds.explosionIncendiary, SoundCategory.NEUTRAL, (int)(40*multiplier), 1f, 1f); + else + world.playSound(null, blockPos, SoundEvents.BLOCK_LAVA_EXTINGUISH, SoundCategory.BLOCKS, 1f, 1f); - // Spawn phosphorus fragments - for(int i = 0; i < 30*multiplier; i++) - { - Vec3d vecDir = new Vec3d(1, 0, 0).rotateYaw(i/(30f*multiplier)*360f).add(v); - EntityWhitePhosphorus shrap = new EntityWhitePhosphorus(world, pos.x+vecDir.x, pos.y+v.y+1f, pos.z+vecDir.z, 0, 0, 0); - - shrap.motionX = vecDir.x*0.35f; - shrap.motionY = 0.1f+(Utils.RAND.nextDouble()*0.2f); - shrap.motionZ = vecDir.z*0.35f; - - world.spawnEntity(shrap); - } + //Spawn main phosphorus entity, shared between all modes + EntityWhitePhosphorus main = new EntityWhitePhosphorus(world, pos.x-dir.x, pos.y-dir.y, pos.z-dir.z, 0, 0, 0); + main.motionX = -dir.x*0.75; + main.motionY = -dir.y*0.75; + main.motionZ = -dir.z*0.75; - // Send particle effect message to nearby clients - IIPacketHandler.sendToClient(new MessageParticleEffect("white_phosphorus", world, - pos.addVector(0, 1, 0), - Vec3d.ZERO, 0, 0, null - )); - - // Area of effect cloud (applies potion effects) - EntityAreaEffectCloud cloud = new EntityAreaEffectCloud(world, pos.x+v.x, pos.y+v.y+1f, pos.z+v.z); - cloud.addEffect(new PotionEffect(IIPotions.brokenArmor, Math.round(240), 2)); - cloud.addEffect(new PotionEffect(IEPotions.flammable, Math.round(240), 4)); - cloud.addEffect(new PotionEffect(IEPotions.stunned, Math.round(160), 2)); - cloud.addEffect(new PotionEffect(IEPotions.flashed, Math.round(270), 1)); - cloud.setRadius(3f*multiplier); - cloud.setDuration(Math.round(20f+(10f*Utils.RAND.nextFloat()))); - cloud.setParticle(EnumParticleTypes.CLOUD); - world.spawnEntity(cloud); - } - // BURST shape: a more explosive spread of shrapnel and effects - else if(shape==ComponentEffectShape.STAR) + if(size > 0.2f) { - if(world.isRemote) - return; - - // Play a more intense sound for burst explosion - IIPacketHandler.playRangedSound(world, pos, IISounds.explosionIncendiary, SoundCategory.NEUTRAL, (int)(60*multiplier), 1.2f, 1.2f); - - // Spawn shrapnel in a wider, explosive pattern - for(int i = 0; i < 50*multiplier; i++) - { - // Adjust angles to spread more widely for burst effect - Vec3d vecDir = new Vec3d(1, 0, 0).rotateYaw(i/(50f*multiplier)*360f).add(dir); - EntityWhitePhosphorus shrap = new EntityWhitePhosphorus(world, pos.x+vecDir.x, pos.y+dir.y+1f, pos.z+vecDir.z, 0, 0, 0); - - // Burst fragments have higher speed and randomness - shrap.motionX = vecDir.x*0.6f; - shrap.motionY = 0.2f+(Utils.RAND.nextDouble()*0.3f); - shrap.motionZ = vecDir.z*0.6f; - - world.spawnEntity(shrap); - } - - // Send particle effect with burst ID - IIPacketHandler.sendToClient(new MessageParticleEffect("white_phosphorus_burst", world, - pos.addVector(0, 1, 0), - Vec3d.ZERO, 0, 0, null - )); + //Set fire to surrounding blocks in a radius + Set blocks = IIUtils.getBlocksInOrb(world, blockPos, size*4f); + for(BlockPos block : blocks) + if(world.isAirBlock(block)) + world.setBlockState(block, Blocks.FIRE.getDefaultState()); + } + //Deal fire damage to all entities around + for(Entity entity : world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(blockPos).grow(4f))) + { + if(entity instanceof EntityLivingBase) + ((EntityLivingBase)entity).addPotionEffect(new PotionEffect(IEPotions.flammable, 80, 1)); + entity.attackEntityFrom(DamageSource.IN_FIRE, 10f*multiplier); + entity.setFire(40); + } - // A larger, faster dissipating cloud - EntityAreaEffectCloud cloud = new EntityAreaEffectCloud(world, pos.x+dir.x, pos.y+dir.y+1f, pos.z+dir.z); - cloud.addEffect(new PotionEffect(IIPotions.brokenArmor, Math.round(180), 3)); - cloud.addEffect(new PotionEffect(IEPotions.flammable, Math.round(180), 5)); - cloud.addEffect(new PotionEffect(IEPotions.stunned, Math.round(120), 3)); - cloud.addEffect(new PotionEffect(IEPotions.flashed, Math.round(220), 2)); - cloud.setRadius(4.5f*multiplier); // Burst shape has a larger radius - cloud.setDuration(Math.round(15f+(8f*Utils.RAND.nextFloat()))); // Burst effect lasts a bit shorter - cloud.setParticle(EnumParticleTypes.EXPLOSION_LARGE); - world.spawnEntity(cloud); + switch(shape) + { + case ORB: + case STAR: + case CONE: + IIPacketHandler.sendToClient(new MessageParticleEffect("phosphorus/orb", world, pos, Vec3d.ZERO, 0, 0, null)); + main.motionX = 0; + main.motionY = 0.4; + main.motionZ = 0; + + float particlesInLayer = 10f*size; + // Spawn shrapnel in a wider, explosive pattern + for(int i = 0; i < 2*particlesInLayer; i++) + { + Vec3d vecDir = dir.scale(i < size*10?-1: -2).rotateYaw(i/(particlesInLayer)*360f); + EntityWhitePhosphorus shrap = new EntityWhitePhosphorus(world, pos.x+vecDir.x, pos.y-dir.y, pos.z+vecDir.z, 0, 0, 0); + + vecDir = vecDir.scale(2); + shrap.motionX = vecDir.x*0.125f; + shrap.motionY = (vecDir.y+(i < size*10?2: 0.5))*0.125f*2; + shrap.motionZ = vecDir.z*0.125f; + world.spawnEntity(shrap); + } + break; + case LINE: + IILogger.info("Line!"); + Set blocks = IIUtils.getBlocksInOrb(world, blockPos, 1f); + for(BlockPos block : blocks) + if(world.isAirBlock(block)) + world.setBlockState(block, Blocks.FIRE.getDefaultState()); + break; } + world.spawnEntity(main); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/data_device/tileentity/TileEntityDataMerger.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/data_device/tileentity/TileEntityDataMerger.java index 3fe0746e5..052bc47f3 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/data_device/tileentity/TileEntityDataMerger.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/data_device/tileentity/TileEntityDataMerger.java @@ -2,10 +2,8 @@ import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IBlockBounds; import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IDirectionalTile; -import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IGuiTile; import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IPlayerInteraction; import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase; -import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -15,49 +13,107 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.ITickable; import net.minecraft.util.NonNullList; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.INBTSerializable; import pl.pabilo8.immersiveintelligence.api.data.DataPacket; import pl.pabilo8.immersiveintelligence.api.data.IIDataHandlingUtils; import pl.pabilo8.immersiveintelligence.api.data.device.IDataDevice; +import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType; import pl.pabilo8.immersiveintelligence.common.IIGUI; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyCollection; +import pl.pabilo8.immersiveintelligence.common.util.multiblock.IIMultiblockInterfaces.IIIGuiMultiblockTile; +import pl.pabilo8.immersiveintelligence.common.util.multiblock.IIMultiblockInterfaces.IIIInventory; -import javax.annotation.Nullable; +import javax.annotation.Nonnull; +import java.util.ArrayList; +import java.util.List; /** * @author Pabilo8 (pabilo@iiteam.net) - * @updated 24.06.2025 + * @updated 02.06.2026 * @since 17.05.2019 */ -public class TileEntityDataMerger extends TileEntityIEBase implements IPlayerInteraction, ITickable, IBlockBounds, IDirectionalTile, IDataDevice, IGuiTile, IIEInventory +public class TileEntityDataMerger extends TileEntityIEBase implements IPlayerInteraction, ITickable, IBlockBounds, IDirectionalTile, IDataDevice, IIIGuiMultiblockTile, IIIInventory { public EnumFacing facing = EnumFacing.NORTH; - public DataPacket settingsPacket = new DataPacket(); - public DataMergerSendMode mode = DataMergerSendMode.SEND_ON_BOTH; - DataPacket packetLeft = new DataPacket(); - DataPacket packetRight = new DataPacket(); + + public EasyCollection mergeRules = new EasyCollection<>(DataMergeRule::new); + public DataPacket packetLeft = new DataPacket(); + public DataPacket packetRight = new DataPacket(); @Override public void readCustomNBT(NBTTagCompound nbt, boolean descPacket) { - mode = DataMergerSendMode.values()[nbt.getByte("mode")]; facing = EnumFacing.getFront(nbt.getInteger("facing")); - settingsPacket = new DataPacket(nbt.getCompoundTag("packet")); + if(nbt.hasKey("rules", Constants.NBT.TAG_LIST)) + mergeRules.deserializeNBT(nbt.getTagList("rules", Constants.NBT.TAG_COMPOUND)); + else if(nbt.hasKey("packet", Constants.NBT.TAG_COMPOUND)) + migrateLegacySettings(new DataPacket(nbt.getCompoundTag("packet"))); + packetLeft = new DataPacket(nbt.getCompoundTag("packetLeft")); packetRight = new DataPacket(nbt.getCompoundTag("packetRight")); - } @Override public void writeCustomNBT(NBTTagCompound nbt, boolean descPacket) { - nbt.setByte("mode", (byte)mode.ordinal()); nbt.setInteger("facing", facing.ordinal()); - - nbt.setTag("packet", settingsPacket.serializeNBT()); + nbt.setTag("rules", mergeRules.serializeNBT()); nbt.setTag("packetLeft", packetLeft.serializeNBT()); nbt.setTag("packetRight", packetRight.serializeNBT()); } + private void migrateLegacySettings(DataPacket settingsPacket) + { + mergeRules.clear(); + + for(char c : DataPacket.VARIABLE_NAMES) + IIDataHandlingUtils.optionalInt(c, settingsPacket).ifPresent(integer -> { + int mode = integer+2; + if(mode < 0||mode >= VariableMergeMode.values().length) + return; + + VariableMergeMode legacy = VariableMergeMode.values()[mode]; + if(legacy==VariableMergeMode.RETAIN_ORIGINAL) + return; + + DataMergeRule rule = new DataMergeRule(); + rule.variable = c; + rule.triggerForwarding = true; + rule.usageLimit = -1; + + switch(legacy) + { + case PREFER_RIGHT: + rule.acceptLeft = true; + rule.acceptRight = true; + rule.rightOverridesCachedValue = true; + rule.rightOverridesValue = true; + break; + case FORCE_RIGHT: + rule.acceptLeft = false; + rule.acceptRight = true; + rule.rightOverridesCachedValue = true; + rule.rightOverridesValue = true; + break; + case PREFER_LEFT: + rule.acceptLeft = true; + rule.acceptRight = true; + rule.rightOverridesCachedValue = false; + rule.rightOverridesValue = true; + break; + case FORCE_LEFT: + rule.acceptLeft = true; + rule.acceptRight = false; + rule.rightOverridesCachedValue = false; + rule.rightOverridesValue = true; + break; + } + mergeRules.add(rule); + }); + } + @Override public boolean interact(EnumFacing side, EntityPlayer player, EnumHand hand, ItemStack heldItem, float hitX, float hitY, float hitZ) { @@ -74,10 +130,13 @@ public void receiveMessageFromServer(NBTTagCompound message) public void receiveMessageFromClient(NBTTagCompound message) { super.receiveMessageFromClient(message); - if(message.hasKey("mode")) - mode = DataMergerSendMode.values()[message.getByte("mode")]; - if(message.hasKey("packet")) - settingsPacket.deserializeNBT(message.getCompoundTag("packet")); + if(message.hasKey("rules", Constants.NBT.TAG_LIST)) + { + mergeRules.deserializeNBT(message.getTagList("rules", Constants.NBT.TAG_COMPOUND)); + markDirty(); + if(world!=null) + world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); + } } @Override @@ -131,53 +190,52 @@ public boolean canRotate(EnumFacing axis) @Override public void onReceive(DataPacket packet, EnumFacing side) { - boolean send = mode==DataMergerSendMode.SEND_ON_BOTH; + boolean fromLeft = side==facing.rotateYCCW(); + boolean fromRight = side==facing.rotateY(); - //Incoming packet on the left - if(side==facing.rotateYCCW()) - { - packetLeft = packet.clone(); - send = send||mode==DataMergerSendMode.SEND_LEFT_ONLY; - } + //The merger only listens to its two input sides. + if(!fromLeft&&!fromRight) + return; - //Incoming packet on the right - if(side==facing.rotateY()) + DataPacket incoming = packet.clone(); + DataPacket cache = fromLeft?packetLeft: packetRight; + boolean shouldForward = false; + List expiredRules = new ArrayList<>(); + + //Accept variables into the side cache and check if this packet should trigger output. + for(DataMergeRule rule : mergeRules) + if(rule.acceptsSide(fromLeft, fromRight)&&incoming.has(rule.variable)) + { + cache.set(rule.variable, incoming.get(rule.variable).clone()); + if(rule.triggerForwarding) + shouldForward = true; + + rule.consumeUse(); + if(rule.isExpired()) + expiredRules.add(rule); + } + + if(!shouldForward) { - packetRight = packet.clone(); - send = send||mode==DataMergerSendMode.SEND_RIGHT_ONLY; + if(!expiredRules.isEmpty()) + { + mergeRules.removeAll(expiredRules); + markDirty(); + } + return; } - if(!send) - return; + DataPacket outgoing = incoming.clone(); + for(DataMergeRule rule : mergeRules) + rule.applyTo(outgoing, incoming, packetLeft, packetRight); - for(char c : DataPacket.VARIABLE_NAMES) - IIDataHandlingUtils.optionalInt(c, packet).ifPresent(integer -> { - switch(VariableMergeMode.values()[integer+2]) - { - //Original - case RETAIN_ORIGINAL: - break; - //Left - case FORCE_LEFT: - packet.set(c, packetLeft.get(c)); - break; - case PREFER_LEFT: - if(packetLeft.has(c)) - packet.set(c, packetLeft.get(c)); - break; - //Right - case FORCE_RIGHT: - packet.set(c, packetRight.get(c)); - break; - case PREFER_RIGHT: - if(packetRight.has(c)) - packet.set(c, packetRight.get(c)); - break; - } - }); + if(!expiredRules.isEmpty()) + { + mergeRules.removeAll(expiredRules); + markDirty(); + } - //Send packet - IIDataHandlingUtils.sendPacketAdjacently(packet, world, this.pos, facing); + IIDataHandlingUtils.sendPacketAdjacently(outgoing, world, this.pos, facing); } @Override @@ -187,16 +245,15 @@ public boolean canOpenGui() } @Override - public int getGuiID() + public TileEntity master() { - return IIGUI.DATA_MERGER.ordinal(); + return this; } - @Nullable @Override - public TileEntity getGuiMaster() + public IIGUI getGUI() { - return this; + return IIGUI.DATA_MERGER; } @Override @@ -223,14 +280,115 @@ public void doGraphicalUpdates(int slot) } - public enum DataMergerSendMode + public static class DataMergeRule implements INBTSerializable { - SEND_ON_BOTH, - SEND_LEFT_ONLY, - SEND_RIGHT_ONLY, + public char variable = 'a'; + public boolean acceptLeft = true; + public boolean acceptRight = true; + public boolean triggerForwarding = true; + + /** + * When both side caches hold the variable, true gives priority to right; false gives priority to left. + */ + public boolean rightOverridesCachedValue = true; + + /** + * When true, the selected cached value can replace the variable already present in the outgoing packet. + * When false, the incoming packet's value is preserved and the cache only fills missing variables. + */ + public boolean rightOverridesValue = true; + + /** + * -1 means infinite Job. Non-negative values are Requests and are decremented when the rule accepts a variable. + */ + public int usageLimit = -1; + + public boolean isJob() + { + return usageLimit < 0; + } + + public boolean acceptsSide(boolean fromLeft, boolean fromRight) + { + return (fromLeft&&acceptLeft)||(fromRight&&acceptRight); + } + + public void consumeUse() + { + if(usageLimit > 0) + usageLimit--; + } + + public boolean isExpired() + { + return usageLimit==0; + } + + public DataMergeRule copy() + { + DataMergeRule copy = new DataMergeRule(); + copy.deserializeNBT(serializeNBT()); + return copy; + } + + public void applyTo(DataPacket outgoing, DataPacket incoming, DataPacket leftCache, DataPacket rightCache) + { + DataType cached = getSelectedCachedValue(leftCache, rightCache); + if(cached==null) + return; + + //Preserve the incoming packet value unless this rule is allowed to override it. + if(incoming.has(variable)&&!rightOverridesValue) + return; + + outgoing.set(variable, cached.clone()); + } + + private DataType getSelectedCachedValue(DataPacket leftCache, DataPacket rightCache) + { + boolean hasLeft = acceptLeft&&leftCache.has(variable); + boolean hasRight = acceptRight&&rightCache.has(variable); + + if(hasLeft&&hasRight) + return rightOverridesCachedValue?rightCache.get(variable): leftCache.get(variable); + else if(hasRight) + return rightCache.get(variable); + else if(hasLeft) + return leftCache.get(variable); + return null; + } + + @Nonnull + @Override + public NBTTagCompound serializeNBT() + { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("variable", String.valueOf(variable)); + nbt.setBoolean("accept_left", acceptLeft); + nbt.setBoolean("accept_right", acceptRight); + nbt.setBoolean("trigger_forwarding", triggerForwarding); + nbt.setBoolean("right_overrides_cached", rightOverridesCachedValue); + nbt.setBoolean("right_overrides_value", rightOverridesValue); + nbt.setInteger("usage_limit", usageLimit); + return nbt; + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) + { + String variableString = nbt.getString("variable"); + variable = variableString.isEmpty()?'a': variableString.charAt(0); + + acceptLeft = !nbt.hasKey("accept_left")||nbt.getBoolean("accept_left"); + acceptRight = !nbt.hasKey("accept_right")||nbt.getBoolean("accept_right"); + triggerForwarding = !nbt.hasKey("trigger_forwarding")||nbt.getBoolean("trigger_forwarding"); + rightOverridesCachedValue = !nbt.hasKey("right_overrides_cached")||nbt.getBoolean("right_overrides_cached"); + rightOverridesValue = !nbt.hasKey("right_overrides_value")||nbt.getBoolean("right_overrides_value"); + usageLimit = nbt.hasKey("usage_limit")?nbt.getInteger("usage_limit"): -1; + } } - enum VariableMergeMode + private enum VariableMergeMode { PREFER_RIGHT, FORCE_RIGHT, diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/data_device/tileentity/TileEntityDataRouter.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/data_device/tileentity/TileEntityDataRouter.java index 4490df61f..4903ed519 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/data_device/tileentity/TileEntityDataRouter.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/data_device/tileentity/TileEntityDataRouter.java @@ -1,128 +1,377 @@ package pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity; -import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IBlockBounds; -import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IDirectionalTile; -import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IHammerInteraction; -import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IPlayerInteraction; import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumDyeColor; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.ITickable; +import net.minecraft.util.NonNullList; +import net.minecraftforge.common.util.INBTSerializable; import pl.pabilo8.immersiveintelligence.api.data.DataPacket; -import pl.pabilo8.immersiveintelligence.api.data.device.IDataConnector; +import pl.pabilo8.immersiveintelligence.api.data.IIDataHandlingUtils; +import pl.pabilo8.immersiveintelligence.api.data.IIDataTypeUtils; import pl.pabilo8.immersiveintelligence.api.data.device.IDataDevice; import pl.pabilo8.immersiveintelligence.api.data.types.DataTypeInteger; -import pl.pabilo8.immersiveintelligence.common.IIUtils; -import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; +import pl.pabilo8.immersiveintelligence.api.data.types.DataTypeNull; +import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType; +import pl.pabilo8.immersiveintelligence.common.IIGUI; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; +import pl.pabilo8.immersiveintelligence.common.util.ILocalizedEnum; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyCollection; +import pl.pabilo8.immersiveintelligence.common.util.multiblock.IIMultiblockInterfaces.IIIGuiMultiblockTile; +import pl.pabilo8.immersiveintelligence.common.util.multiblock.IIMultiblockInterfaces.IIIInventory; import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Arrays; /** + * A device that routes incoming {@link DataPacket DataPackets} according to an ordered rule list. + * * @author Pabilo8 (pabilo@iiteam.net) + * @updated 02.06.2026 * @since 17.05.2019 */ -public class TileEntityDataRouter extends TileEntityIEBase implements IPlayerInteraction, IHammerInteraction, ITickable, IBlockBounds, IDirectionalTile, IDataDevice +public class TileEntityDataRouter extends TileEntityIEBase implements IDataDevice, IIIGuiMultiblockTile, IIIInventory { - public EnumFacing facing = EnumFacing.NORTH; - char variable = '0'; + public EasyCollection routingRules; - @Override - public void readCustomNBT(NBTTagCompound nbt, boolean descPacket) + public TileEntityDataRouter() { - variable = nbt.getString("variable").charAt(0); - + super(); + this.routingRules = new EasyCollection<>(DataRoutingRule::new); + migrateLegacyVariableRouter("0"); } @Override - public void writeCustomNBT(NBTTagCompound nbt, boolean descPacket) + public void readCustomNBT(NBTTagCompound nbt, boolean descPacket) { - nbt.setString("variable", String.valueOf(variable)); + if(nbt.hasKey("rules")) + routingRules.deserializeNBT(nbt.getTagList("rules", 10)); + else if(nbt.hasKey("variable")) + migrateLegacyVariableRouter(nbt.getString("variable")); } @Override - public boolean interact(EnumFacing side, EntityPlayer player, EnumHand hand, ItemStack heldItem, float hitX, float hitY, float hitZ) + public void writeCustomNBT(NBTTagCompound nbt, boolean descPacket) { - return false; + nbt.setTag("rules", routingRules.serializeNBT()); } @Override - public void receiveMessageFromServer(NBTTagCompound message) + public void receiveMessageFromClient(@Nonnull NBTTagCompound message) { - super.receiveMessageFromServer(message); + super.receiveMessageFromClient(message); + if(message.hasKey("rules")) + { + routingRules.deserializeNBT(message.getTagList("rules", 10)); + markDirty(); + if(world!=null) + world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); + } } @Override - public void update() + public void onReceive(DataPacket packet, EnumFacing side) { + if(world==null||world.isRemote||packet==null||side==null) + return; + + boolean changed = false; + for(DataRoutingRule rule : routingRules) + { + if(!rule.matches(packet, side)) + continue; + + rule.consumeUse(); + changed = true; + if(rule.action==RoutingAction.DENY) + break; + + DataPacket outgoingPacket = rule.getOutgoingPacket(packet); + IIDataHandlingUtils.sendPacketAdjacently(outgoingPacket, world, pos, rule.outgoingSide); + } + + if(changed) + { + routingRules.removeIf(DataRoutingRule::isExpired); + markDirty(); + if(world!=null) + world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); + } } + //--- IIIGuiMultiblockTile ---// + @Override - public float[] getBlockBounds() + public boolean canOpenGui() { - return new float[]{0f, 0f, 0f, 1f, 1f, 1f}; + return true; } @Override - public EnumFacing getFacing() + public TileEntity master() { - return facing; + return this; } @Override - public void setFacing(EnumFacing facing) + public IIGUI getGUI() { - this.facing = facing; + return IIGUI.DATA_ROUTER; } + //--- IIEInventory ---// + @Override - public int getFacingLimitation() + public NonNullList getInventory() { - return 2; + return NonNullList.create(); } @Override - public boolean mirrorFacingOnPlacement(EntityLivingBase placer) + public boolean isStackValid(int slot, ItemStack stack) { return false; } - @Override - public boolean canHammerRotate(EnumFacing side, float hitX, float hitY, float hitZ, EntityLivingBase entity) + public enum RoutingAction implements ILocalizedEnum { - return !entity.isSneaking(); - } + ALLOW, + DENY; - @Override - public boolean canRotate(EnumFacing axis) - { - return !axis.getAxis().isVertical(); + @Override + public String geLocaleKey() + { + return IIReference.GUI_LABEL_KEY+"data_router.action."; + } } - @Override - public void onReceive(DataPacket packet, EnumFacing side) + public static class DataRoutingRule implements INBTSerializable { - if(packet.get(variable) instanceof DataTypeInteger) + public final boolean[] receivingSides = new boolean[6]; + public EnumFacing outgoingSide = EnumFacing.NORTH; + + public boolean useColorFilter = false; + public EnumDyeColor packetColor = EnumDyeColor.WHITE; + public boolean useAddressFilter = false; + public int packetAddress = -1; + + public String requiredVariables = ""; + public boolean useValueFilter = false; + public char valueVariable = 'a'; + public DataType expectedValue = new DataTypeNull(); + + /** + * -1 means infinite, any positive number means request-style finite use count. + */ + public int usageLimit = -1; + public RoutingAction action = RoutingAction.ALLOW; + public boolean removeControlVariable = false; + + public DataRoutingRule() + { + Arrays.fill(receivingSides, true); + } + + public boolean isJob() + { + return usageLimit < 0; + } + + public boolean isExpired() { - int c = ((DataTypeInteger)packet.get(variable)).value; - if(world.isBlockLoaded(this.pos.offset(EnumFacing.getFront(c)))&&world.getTileEntity(this.pos.offset(EnumFacing.getFront(c))) instanceof IDataConnector) + return usageLimit==0; + } + + public void consumeUse() + { + if(usageLimit > 0) + usageLimit--; + } + + public boolean matches(@Nonnull DataPacket packet, @Nonnull EnumFacing receivedFrom) + { + if(isExpired()||!receivingSides[receivedFrom.ordinal()]) + return false; + + NBTTagCompound packetNBT = null; + if(useColorFilter||useAddressFilter) + packetNBT = packet.serializeNBT(); + + if(useColorFilter) + { + int color = packetNBT.hasKey("color")?packetNBT.getInteger("color"): EnumDyeColor.WHITE.getMetadata(); + if(color!=packetColor.getMetadata()) + return false; + } + + if(useAddressFilter) { - IDataConnector d = (IDataConnector)world.getTileEntity(this.pos.offset(EnumFacing.getFront(c))); - d.sendPacket(packet); + int address = packetNBT.hasKey("address")?packetNBT.getInteger("address"): -1; + if(address!=packetAddress) + return false; } + + for(char variable : requiredVariables.toCharArray()) + if(DataPacket.isValidVariable(variable)&&!packet.has(variable)) + return false; + + if(useValueFilter) + { + if(!DataPacket.isValidVariable(valueVariable)||!packet.has(valueVariable)) + return false; + + DataType actual = packet.get(valueVariable); + if(actual==null||actual.getClass()!=expectedValue.getClass()) + return false; + + return actual.valueToNBT().equals(expectedValue.valueToNBT()); + } + + return true; + } + + public DataPacket getOutgoingPacket(@Nonnull DataPacket source) + { + DataPacket outgoing = source.clone(); + if(removeControlVariable) + { + if(useValueFilter&&DataPacket.isValidVariable(valueVariable)) + outgoing.remove(valueVariable); + else + for(char variable : requiredVariables.toCharArray()) + if(DataPacket.isValidVariable(variable)) + outgoing.remove(variable); + } + return outgoing; + } + + @Nonnull + public DataRoutingRule copy() + { + DataRoutingRule rule = new DataRoutingRule(); + rule.deserializeNBT(this.serializeNBT()); + return rule; + } + + //--- NBT ---// + + @Override + public NBTTagCompound serializeNBT() + { + NBTTagCompound nbt = new NBTTagCompound(); + int[] receiving = new int[receivingSides.length]; + for(int i = 0; i < receivingSides.length; i++) + receiving[i] = receivingSides[i]?1: 0; + + nbt.setIntArray("receivingSides", receiving); + nbt.setInteger("outgoingSide", outgoingSide.ordinal()); + + nbt.setBoolean("useColorFilter", useColorFilter); + nbt.setInteger("packetColor", packetColor.getMetadata()); + nbt.setBoolean("useAddressFilter", useAddressFilter); + nbt.setInteger("packetAddress", packetAddress); + + nbt.setString("requiredVariables", sanitizeVariables(requiredVariables, true)); + nbt.setBoolean("useValueFilter", useValueFilter); + nbt.setString("valueVariable", String.valueOf(valueVariable)); + nbt.setTag("expectedValue", expectedValue.valueToNBT()); + + nbt.setInteger("usageLimit", usageLimit); + nbt.setString("action", action.name()); + nbt.setBoolean("removeControlVariable", removeControlVariable); + return nbt; + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) + { + Arrays.fill(receivingSides, true); + int[] receiving = nbt.getIntArray("receivingSides"); + for(int i = 0; i < Math.min(receiving.length, receivingSides.length); i++) + receivingSides[i] = receiving[i]!=0; + + outgoingSide = getFacingSafe(nbt.getInteger("outgoingSide")); + + useColorFilter = nbt.getBoolean("useColorFilter"); + packetColor = EnumDyeColor.byMetadata(nbt.getInteger("packetColor")); + useAddressFilter = nbt.getBoolean("useAddressFilter"); + packetAddress = nbt.hasKey("packetAddress")?nbt.getInteger("packetAddress"): -1; + + requiredVariables = sanitizeVariables(nbt.getString("requiredVariables"), true); + useValueFilter = nbt.getBoolean("useValueFilter"); + String valueVariableString = nbt.getString("valueVariable"); + valueVariable = sanitizeVariable(valueVariableString.isEmpty()?'a': valueVariableString.charAt(0), 'a'); + expectedValue = nbt.hasKey("expectedValue")?IIDataTypeUtils.getVarFromNBT(nbt.getCompoundTag("expectedValue")): new DataTypeNull(); + + usageLimit = nbt.hasKey("usageLimit")?nbt.getInteger("usageLimit"): -1; + try + { + action = RoutingAction.valueOf(nbt.getString("action")); + } catch(IllegalArgumentException exception) + { + action = RoutingAction.ALLOW; + } + removeControlVariable = nbt.getBoolean("removeControlVariable"); } + //--- Utilities ---// + + public static String sanitizeVariables(@Nullable String variables, boolean keepUnique) + { + if(variables==null||variables.isEmpty()) + return ""; + + StringBuilder builder = new StringBuilder(); + for(char c : variables.toCharArray()) + if(DataPacket.isValidVariable(c)&&(!keepUnique||builder.indexOf(String.valueOf(c)) < 0)) + builder.append(c); + return builder.toString(); + } + + public static char sanitizeVariable(char variable, char fallback) + { + return DataPacket.isValidVariable(variable)?variable: fallback; + } + + private static EnumFacing getFacingSafe(int ordinal) + { + return ordinal >= 0&&ordinal < EnumFacing.VALUES.length?EnumFacing.VALUES[ordinal]: EnumFacing.NORTH; + } } - @Override - public boolean hammerUseSide(@Nonnull EnumFacing side, @Nonnull EntityPlayer player, float hitX, float hitY, float hitZ) + /** + * Migrates the old router rules based around a single control variable + * + * @param variableName old control variable + */ + private void migrateLegacyVariableRouter(String variableName) { - variable = IIUtils.cycleDataPacketChars(variable, hitY >= 0.5f, false); - IIPacketHandler.sendChatString(player, String.valueOf(variable)); - return true; + if(variableName==null||variableName.isEmpty()) + return; + migrateLegacyVariableRouter(variableName.charAt(0)); + } + + private void migrateLegacyVariableRouter(char variable) + { + if(!DataPacket.isValidVariable(variable)) + return; + + routingRules.clear(); + for(EnumFacing side : EnumFacing.VALUES) + { + DataRoutingRule rule = new DataRoutingRule(); + rule.outgoingSide = side; + rule.useValueFilter = true; + rule.valueVariable = variable; + rule.expectedValue = new DataTypeInteger(side.ordinal()); + rule.action = RoutingAction.ALLOW; + rule.removeControlVariable = false; + rule.usageLimit = -1; + routingRules.add(rule); + } } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/BlockIIMetalDevice.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/BlockIIMetalDevice.java index c82d2d7a5..48f5a1b3e 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/BlockIIMetalDevice.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/BlockIIMetalDevice.java @@ -54,21 +54,6 @@ public BlockIIMetalDevice() IIBlockTypes_MetalDevice.SMALL_DATA_BUFFER, IIBlockTypes_MetalDevice.DATA_MERGER); } - @Override - public String getMappingsExtension(int meta, boolean itemBlock) - { - switch(IIBlockTypes_MetalDevice.values()[meta]) - { - default: - return null; - - case AMMUNITION_CRATE: - case MEDIC_CRATE: - case REPAIR_CRATE: - return IIBlockTypes_MetalDevice.values()[meta].getName(); - } - } - @Nonnull public EnumBlockRenderType getRenderType(IBlockState state) { @@ -109,7 +94,7 @@ public enum IIBlockTypes_MetalDevice implements IITileProviderEnum @IIBlockProperties(category = IICategory.ELECTRONICS) @EnumTileProvider(tile = TileEntityMetalCrate.class) METAL_CRATE, - @IIBlockProperties(category = IICategory.LOGISTICS) + @IIBlockProperties(category = IICategory.LOGISTICS, needsCustomState = true) @EnumTileProvider(tile = TileEntityAmmunitionCrate.class) AMMUNITION_CRATE, @IIBlockProperties(category = IICategory.ELECTRONICS) @@ -130,16 +115,16 @@ public enum IIBlockTypes_MetalDevice implements IITileProviderEnum @IIBlockProperties(category = IICategory.ELECTRONICS) @EnumTileProvider(tile = TileEntityDataMerger.class) DATA_MERGER, - @IIBlockProperties(category = IICategory.LOGISTICS) + @IIBlockProperties(category = IICategory.LOGISTICS, needsCustomState = true) @EnumTileProvider(tile = TileEntityMedicalCrate.class) MEDIC_CRATE, - @IIBlockProperties(category = IICategory.LOGISTICS) + @IIBlockProperties(category = IICategory.LOGISTICS, needsCustomState = true) @EnumTileProvider(tile = TileEntityRepairCrate.class) REPAIR_CRATE, - @IIBlockProperties(category = IICategory.TOOLS) + @IIBlockProperties(category = IICategory.TOOLS, needsCustomState = true) @EnumTileProvider(tile = TileEntityLatexCollector.class) LATEX_COLLECTOR } -} \ No newline at end of file +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/TileEntityLatexCollector.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/TileEntityLatexCollector.java index 1358114bd..e722aa5d8 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/TileEntityLatexCollector.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/TileEntityLatexCollector.java @@ -5,6 +5,7 @@ import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IPlayerInteraction; import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.resources.I18n; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; @@ -13,9 +14,15 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.ITickable; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedTextOverlay; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Machines.LatexCollector; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.simple.BlockIIRubberLog; @@ -28,7 +35,7 @@ * @author Pabilo8 (pabilo@iiteam.net) * @since 19.05.2021 */ -public class TileEntityLatexCollector extends TileEntityIEBase implements IPlayerInteraction, ITickable, IBlockBounds, IDirectionalTile +public class TileEntityLatexCollector extends TileEntityIEBase implements IPlayerInteraction, ITickable, IBlockBounds, IDirectionalTile, IAdvancedTextOverlay { public EnumFacing facing = EnumFacing.NORTH; public ItemStack bucket = ItemStack.EMPTY; @@ -43,7 +50,7 @@ public void readCustomNBT(NBTTagCompound nbt, boolean descPacket) bucket = new ItemStack(nbt.getCompoundTag("bucket")); if(nbt.hasKey("noSetup")) bucketTime = 0; - this.timer = nbt.getFloat("timer"); // FIX: was writing into NBT, should read from it + this.timer = nbt.getFloat("timer"); } @Override @@ -53,7 +60,7 @@ public void writeCustomNBT(NBTTagCompound nbt, boolean descPacket) nbt.setTag("bucket", bucket.serializeNBT()); if(bucketTime < 10) nbt.setBoolean("noSetup", true); - nbt.setFloat("timer", timer); // FIX: was reading from NBT, should write into it + nbt.setFloat("timer", timer); } /** @@ -226,4 +233,20 @@ public boolean canRotate(EnumFacing axis) { return false; } + + //--- IAdvancedTextOverlay ---// + + @SideOnly(Side.CLIENT) + @Override + public String[] getOverlayText(EntityPlayer player, RayTraceResult mop) + { + int latex = (int)MathHelper.clamp(timer/LatexCollector.collectTime*1000, 0f, 1000f); + if(latex==0) + return new String[]{I18n.format("gui.immersiveengineering.empty")}; + + return new String[]{ + IIContent.fluidLatex.getLocalizedName(new FluidStack(IIContent.fluidLatex, latex)), + TextFormatting.GRAY.toString()+latex+"/1000 mB" + }; + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/effect_crate/TileEntityAmmunitionCrate.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/effect_crate/TileEntityAmmunitionCrate.java index 48d503f1d..3bc1238bd 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/effect_crate/TileEntityAmmunitionCrate.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/effect_crate/TileEntityAmmunitionCrate.java @@ -38,9 +38,7 @@ public class TileEntityAmmunitionCrate extends TileEntityEffectCrate static { UpgradeTechTree.getTreeFor(TileEntityAmmunitionCrate.class) - .withUpgrade(IIContent.UPGRADE_INSERTER, UpgradeTier.TIER_1) - .withUpgrade(IIContent.UPGRADE_MG_LOADER, UpgradeTier.TIER_2) - .withDependency(IIContent.UPGRADE_INSERTER, IIContent.UPGRADE_MG_LOADER); + .withUpgrade(IIContent.UPGRADE_MG_LOADER, UpgradeTier.TIER_1); } public TileEntityAmmunitionCrate() diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/effect_crate/TileEntityEffectCrate.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/effect_crate/TileEntityEffectCrate.java index 6dc2a6c1b..a19922708 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/effect_crate/TileEntityEffectCrate.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/effect_crate/TileEntityEffectCrate.java @@ -19,7 +19,6 @@ import net.minecraft.util.math.*; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraft.world.storage.loot.ILootContainer; @@ -28,7 +27,6 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; -import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; import pl.pabilo8.immersiveintelligence.api.upgrade.IManagedUpgradableDevice; import pl.pabilo8.immersiveintelligence.api.upgrade.IUpgradableDevice; import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeManager; @@ -117,7 +115,7 @@ public boolean canRotate(EnumFacing axis) @Nullable public ITextComponent getDisplayName() { - return name!=null?new TextComponentString(name): new TextComponentTranslation("tile."+ImmersiveIntelligence.MODID+".metal_device.metal_crate.name"); + return name!=null?new TextComponentString(name): null; } @Override @@ -177,6 +175,8 @@ public void readCustomNBT(NBTTagCompound nbt, boolean descPacket) open = nbt.getBoolean("open"); if(nbt.hasKey("facing")) setFacing(EnumFacing.getFront(nbt.getInteger("facing"))); + if(nbt.hasKey("upgrades")) + upgradeManager.deserializeNBT(nbt.getCompoundTag("upgrades")); energyStorage = nbt.getInteger("energyStorage"); if(!descPacket) @@ -197,6 +197,7 @@ public void writeCustomNBT(NBTTagCompound nbt, boolean descPacket) nbt.setBoolean("open", open); nbt.setInteger("facing", facing.getIndex()); nbt.setInteger("energyStorage", energyStorage); + nbt.setTag("upgrades", upgradeManager.serializeNBT()); if(!descPacket) { if(lootTable!=null) @@ -221,6 +222,8 @@ public void onAnimationChangeServer(boolean state, int part) @Override public void receiveMessageFromServer(NBTTagCompound message) { + if(message.hasKey("upgrades")) + upgradeManager.deserializeNBT(message.getCompoundTag("upgrades")); if(message.hasKey("focused")) focusedEntity = world.getEntityByID(message.getInteger("focused")); else diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/inserter/TileEntityInserterBase.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/inserter/TileEntityInserterBase.java index 7028fece9..1472bd1f7 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/inserter/TileEntityInserterBase.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/metal_device/tileentity/inserter/TileEntityInserterBase.java @@ -25,6 +25,7 @@ import net.minecraft.util.ITickable; import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3i; import net.minecraft.world.World; @@ -706,17 +707,13 @@ public NBTTagCompound serializeNBT() NBTTagCompound nbt = new NBTTagCompound(); nbt.setString("name", getName()); if(facingIn!=null) - { nbt.setInteger("facingIn", facingIn.getIndex()); - if(distanceIn!=-1) - nbt.setInteger("distanceIn", distanceIn); - } + if(distanceIn!=-1) + nbt.setInteger("distanceIn", MathHelper.clamp(distanceIn, -1, 2)); if(facingOut!=null) - { nbt.setInteger("facingOut", facingOut.getIndex()); - if(distanceOut!=-1) - nbt.setInteger("distanceOut", distanceOut); - } + if(distanceOut!=-1) + nbt.setInteger("distanceOut", MathHelper.clamp(distanceOut, -1, 2)); nbt.setTag("stack", stack.writeToNBT(new NBTTagCompound())); nbt.setBoolean("isJob", isJob); @@ -731,17 +728,13 @@ public NBTTagCompound serializeNBT() public void deserializeNBT(NBTTagCompound nbt) { if(nbt.hasKey("facingIn")) - { facingIn = EnumFacing.getFront(nbt.getInteger("facingIn")); - if(nbt.hasKey("distanceIn")) - distanceIn = nbt.getInteger("distanceIn"); - } + if(nbt.hasKey("distanceIn")) + distanceIn = MathHelper.clamp(nbt.getInteger("distanceIn"), -1, 2); if(nbt.hasKey("facingOut")) - { facingOut = EnumFacing.getFront(nbt.getInteger("facingOut")); - if(nbt.hasKey("distanceOut")) - distanceOut = nbt.getInteger("distanceOut"); - } + if(nbt.hasKey("distanceOut")) + distanceOut = MathHelper.clamp(nbt.getInteger("distanceOut"), -1, 2); if(nbt.hasKey("stack")) { stack = IngredientStack.readFromNBT(nbt.getCompoundTag("stack")); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/multiblock/MultiblockPacker.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/multiblock/MultiblockPacker.java index 3f23aece5..10b98823d 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/multiblock/MultiblockPacker.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/multiblock/MultiblockPacker.java @@ -28,8 +28,9 @@ public MultiblockPacker() .withUpgrade(IIContent.UPGRADE_PACKER_FLUID, UpgradeTier.TIER_1) .withUpgrade(IIContent.UPGRADE_PACKER_ENERGY, UpgradeTier.TIER_1) .withLockOut(IIContent.UPGRADE_PACKER_FLUID, IIContent.UPGRADE_PACKER_ENERGY) - .withUpgrade(IIContent.UPGRADE_PACKER_NAMING, UpgradeTier.TIER_1) - .withUpgrade(IIContent.UPGRADE_PACKER_RAILWAY, UpgradeTier.TIER_1); + .withUpgrade(IIContent.UPGRADE_PACKER_NAMING, UpgradeTier.TIER_1); + //TODO: 02.06.2026 actually implement + //.withUpgrade(IIContent.UPGRADE_PACKER_RAILWAY, UpgradeTier.TIER_1); } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/multiblock/MultiblockPrintingPress.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/multiblock/MultiblockPrintingPress.java index f4ea15066..b78944754 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/multiblock/MultiblockPrintingPress.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/multiblock/MultiblockPrintingPress.java @@ -3,6 +3,8 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.Vec3i; import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; +import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeTechTree; +import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeUtils.UpgradeTier; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.BlockIIMetalMultiblock0.MetalMultiblocks0; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityPrintingPress; @@ -15,6 +17,10 @@ */ public class MultiblockPrintingPress extends MultiblockStuctureBase { + public static final int SLOT_PAPER = 0; + public static final int SLOT_OUTPUT = 1; + public static final int SLOT_BUCKET_IN = 2; + public static final int SLOT_BUCKET_OUT = 3; public static MultiblockPrintingPress INSTANCE; public MultiblockPrintingPress() @@ -22,6 +28,11 @@ public MultiblockPrintingPress() super(new ResourceLocation(ImmersiveIntelligence.MODID, "multiblocks/printing_press")); offset = new Vec3i(1, 1, 0); INSTANCE = this; + + UpgradeTechTree.getTreeFor(TileEntityPrintingPress.class) + .withUpgrade(IIContent.UPGRADE_PRESS_PUNCHTAPES, UpgradeTier.TIER_1) + .withUpgrade(IIContent.UPGRADE_PRESS_BATCHING, UpgradeTier.TIER_1) + .withUpgrade(IIContent.UPGRADE_PRESS_ENVELOPER, UpgradeTier.TIER_1); } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/tileentity/TileEntityArithmeticLogicMachine.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/tileentity/TileEntityArithmeticLogicMachine.java index 68d3c6dac..91e2098e7 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/tileentity/TileEntityArithmeticLogicMachine.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/tileentity/TileEntityArithmeticLogicMachine.java @@ -2,15 +2,12 @@ import blusunrize.immersiveengineering.api.energy.immersiveflux.FluxStorageAdvanced; import blusunrize.immersiveengineering.common.util.Utils; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.NonNullList; import net.minecraft.util.SoundCategory; -import org.apache.commons.lang3.ArrayUtils; -import net.minecraft.entity.player.EntityPlayer; -import javax.annotation.Nullable; import pl.pabilo8.immersiveintelligence.api.data.DataPacket; -import pl.pabilo8.immersiveintelligence.api.data.IIDataHandlingUtils; import pl.pabilo8.immersiveintelligence.api.data.types.DataTypeExpression; import pl.pabilo8.immersiveintelligence.api.data.types.generic.DataType; import pl.pabilo8.immersiveintelligence.api.upgrade.IManagedUpgradableDevice; @@ -34,14 +31,15 @@ import pl.pabilo8.immersiveintelligence.common.util.multiblock.util.MultiblockPOI; import javax.annotation.Nonnull; +import javax.annotation.Nullable; /** * @author Pabilo8 (pabilo@iiteam.net) * @author Avalon (avalon@iiteam.net) * @updated 08.01.2024 * @ii-approved 0.3.1 - * @since 28.06.2019 * @updated 03.30.2026 + * @since 28.06.2019 */ public class TileEntityArithmeticLogicMachine extends TileEntityMultiblockIIGeneric implements IIIGuiMultiblockTile, IBooleanAnimatedPartsBlock, IManagedUpgradableDevice @@ -85,18 +83,25 @@ protected void dummyCleanup() public void receiveMessageFromClient(@Nonnull NBTTagCompound message) { super.receiveMessageFromClient(message); - //Receive edits from GUI + //Receive expression edits from the circuit editor GUI if(message.hasKey("expressions")) { - //Get updated expressions NBTTagCompound expressions = message.getCompoundTag("expressions"); int page = expressions.getInteger("page"); + if(page < 0||page >= inventory.size()) + return; + //Update circuit stack ItemStack stack = inventory.get(page); + if(stack.isEmpty()||!(stack.getItem() instanceof ItemIIFunctionalCircuit)) + return; + DataPacket packet = new DataPacket(expressions.getCompoundTag("list")); ((ItemIIFunctionalCircuit)stack.getItem()).writeDataToItem(stack, packet); inventory.set(page, stack); + markDirty(); + forceTileUpdate(); } } @@ -116,8 +121,10 @@ protected int[] listAllPOI(MultiblockPOI poi) { case ENERGY_INPUT: return getPOI("energy"); - case DATA: - return getPOI("data"); + case DATA_INPUT: + return getPOI("data_in"); + case DATA_OUTPUT: + return getPOI("data_out"); case MISC_CONTROL_PANEL: return getPOI("front_panel"); case MISC_CRATE: @@ -132,11 +139,11 @@ protected int[] listAllPOI(MultiblockPOI poi) public void receiveData(DataPacket packet, int pos) { //Prepare reply packet - boolean fromLeft = ArrayUtils.contains(getPOI("data_left"), pos); DataPacket newPacket = packet.clone(); //Process received packet with circuits - int circuitsAmount = isUpgradeInstalled(IIContent.UPGRADE_CIRCUIT_RACKS)?MultiblockArithmeticLogicMachine.CIRCUITS_UPGRADED: MultiblockArithmeticLogicMachine.CIRCUITS_BASE; + int circuitsAmount = isUpgradeInstalled(IIContent.UPGRADE_CIRCUIT_RACKS)?MultiblockArithmeticLogicMachine.CIRCUITS_UPGRADED: + MultiblockArithmeticLogicMachine.CIRCUITS_BASE; boolean[] circuit = new boolean[circuitsAmount]; DataPacket[] cPacket = new DataPacket[circuitsAmount]; @@ -168,17 +175,14 @@ public void receiveData(DataPacket packet, int pos) DataTypeExpression exp = ((DataTypeExpression)var); char condition = exp.getRequiredVariable(); - //Respect condition, if set - if(condition==' '||IIDataHandlingUtils.asBoolean(condition, packet)) + //Respect condition, if set: expressions with a required variable only run when that variable is present in the input packet. + if(condition==' '||packet.has(condition)) newPacket.set(c, exp.getValue(newPacket)); } } //Send reply to opposite side - sendData(newPacket, - fromLeft?facing.rotateY(): facing.rotateYCCW(), - (fromLeft?getPOI("data_right"): getPOI("data_left"))[0] - ); + sendData(newPacket, getDirection("data_out"), getPOI("data_out")[0]); } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/tileentity/TileEntityArtilleryHowitzer.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/tileentity/TileEntityArtilleryHowitzer.java index 6210bc3ec..cbc8f51ff 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/tileentity/TileEntityArtilleryHowitzer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/tileentity/TileEntityArtilleryHowitzer.java @@ -27,6 +27,8 @@ import pl.pabilo8.immersiveintelligence.api.data.IIDataHandlingUtils; import pl.pabilo8.immersiveintelligence.api.data.types.*; import pl.pabilo8.immersiveintelligence.api.utils.IBooleanAnimatedPartsBlock; +import pl.pabilo8.immersiveintelligence.client.fx.utils.IIParticleUtils; +import pl.pabilo8.immersiveintelligence.client.fx.utils.ParticleProperties; import pl.pabilo8.immersiveintelligence.client.fx.utils.ParticleRegistry; import pl.pabilo8.immersiveintelligence.client.util.carversound.ConditionCompoundSound; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Machines.ArtilleryHowitzer; @@ -350,7 +352,8 @@ private void fireGun(int i) if(world.isRemote) { Vec3d gun_end_particle = gunVec.scale(4.5); - ParticleRegistry.spawnGunfireFX(getGunPosition().add(gun_end_particle), gunVec, 8f); + ParticleRegistry.spawnParticle("ammo/gunfire", getGunPosition().add(gun_end_particle), Vec3d.ZERO, IIParticleUtils.toVector2f(gunVec)) + .withProperty(ParticleProperties.SIZE, 4f); } IIPacketHandler.playRangedSound(world, gunEnd, diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/tileentity/TileEntityPrintingPress.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/tileentity/TileEntityPrintingPress.java index 2ac9ce51a..9fa4e34ff 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/tileentity/TileEntityPrintingPress.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock0/tileentity/TileEntityPrintingPress.java @@ -29,6 +29,9 @@ import pl.pabilo8.immersiveintelligence.api.data.DataPacket; import pl.pabilo8.immersiveintelligence.api.data.IIDataHandlingUtils; import pl.pabilo8.immersiveintelligence.api.data.types.DataTypeInteger; +import pl.pabilo8.immersiveintelligence.api.upgrade.IManagedUpgradableDevice; +import pl.pabilo8.immersiveintelligence.api.upgrade.Upgrade; +import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeManager; import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedTextOverlay; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Machines.PrintingPress; import pl.pabilo8.immersiveintelligence.common.IIContent; @@ -46,6 +49,7 @@ import pl.pabilo8.immersiveintelligence.common.util.multiblock.production.TileEntityMultiblockProductionMulti; import pl.pabilo8.immersiveintelligence.common.util.multiblock.util.MultiblockPOI; +import javax.annotation.Nonnull; import javax.annotation.Nullable; /** @@ -53,18 +57,16 @@ * @updated 13.12.2023 * @since 28.06.2019 */ -public class TileEntityPrintingPress extends TileEntityMultiblockProductionMulti implements ITactileListener, IPlayerInteraction, IAdvancedTextOverlay +public class TileEntityPrintingPress extends TileEntityMultiblockProductionMulti + implements ITactileListener, IPlayerInteraction, IAdvancedTextOverlay, IManagedUpgradableDevice { - /** - * Inventory slots IDs - */ - public static final int SLOT_PAPER = 0, SLOT_OUTPUT = 1, SLOT_BUCKET_IN = 2, SLOT_BUCKET_OUT = 3; - @SyncNBT(time = 40, events = {SyncEvents.TILE_GUI_OPENED, SyncEvents.TILE_RECIPE_CHANGED}) public MultiFluidTank tank; + @SyncNBT(name = "upgrades", events = SyncEvents.TILE_UPGRADES_MODIFIED) + public UpgradeManager upgradeManager; - private IItemHandler inputHandler = getSingleInventoryHandler(SLOT_PAPER, true, true); - private IItemHandler outputHandler = getSingleInventoryHandler(SLOT_OUTPUT, true, true); + private IItemHandler inputHandler = getSingleInventoryHandler(MultiblockPrintingPress.SLOT_PAPER, true, true); + private IItemHandler outputHandler = getSingleInventoryHandler(MultiblockPrintingPress.SLOT_OUTPUT, true, true); private TactileManager tactileManager = null; private EasyCollection printRequestsQueue; @@ -76,6 +78,7 @@ public TileEntityPrintingPress() this.energyStorage = new FluxStorageAdvanced(PrintingPress.energyCapacity); this.inventory = NonNullList.withSize(4, ItemStack.EMPTY); this.printRequestsQueue = new EasyCollection<>(PrintingRequest::new); + this.upgradeManager = new UpgradeManager<>(this); } @Override @@ -94,6 +97,7 @@ protected void dummyCleanup() this.inputHandler = null; this.outputHandler = null; this.tactileManager = null; + this.upgradeManager = null; } @Override @@ -104,7 +108,7 @@ protected void onUpdate() if(!world.isRemote) tactileManager.defaultize(); - if(IIUtils.handleBucketTankInteraction(tank, inventory, SLOT_BUCKET_IN, SLOT_BUCKET_OUT, true, + if(IIUtils.handleBucketTankInteraction(tank, inventory, MultiblockPrintingPress.SLOT_BUCKET_IN, MultiblockPrintingPress.SLOT_BUCKET_OUT, true, fs -> IIContent.fluidInkBlack.equals(fs.getFluid())|| IIContent.fluidInkCyan.equals(fs.getFluid())|| IIContent.fluidInkMagenta.equals(fs.getFluid())|| @@ -171,7 +175,7 @@ public void receiveData(DataPacket packet, int pos) String printingMode = IIDataHandlingUtils.asString('m', packet); PrintingRecipe.streamRecipes(PrintingRecipe.class) - .filter(recipe -> recipe.getInput().matchesItemStack(inventory.get(SLOT_PAPER))) + .filter(recipe -> recipe.getInput().matchesItemStack(inventory.get(MultiblockPrintingPress.SLOT_PAPER))) .filter(recipe -> recipe.getCategoryName().equals(printingMode)) .findFirst() .ifPresent(printingRecipe -> { @@ -193,12 +197,12 @@ public boolean isStackValid(int slot, ItemStack stack) { switch(slot) { - case SLOT_PAPER: + case MultiblockPrintingPress.SLOT_PAPER: return Utils.compareToOreName(stack, "pageEmpty"); - case SLOT_OUTPUT: + case MultiblockPrintingPress.SLOT_OUTPUT: return Utils.compareToOreName(stack, "pageWritten")||Utils.compareToOreName(stack, "pageEmpty"); - case SLOT_BUCKET_IN: - case SLOT_BUCKET_OUT: + case MultiblockPrintingPress.SLOT_BUCKET_IN: + case MultiblockPrintingPress.SLOT_BUCKET_OUT: return stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); default: return false; @@ -221,12 +225,12 @@ public int getMaxProductionQueue() @Override protected IIMultiblockProcess findNewProductionProcess() { - // Check for queued orders + //Check for queued orders if(printRequestsQueue.isEmpty()) return null; PrintingRequest found = printRequestsQueue.get(0); - ItemStack input = inputHandler.extractItem(SLOT_PAPER, 1, true); + ItemStack input = inputHandler.extractItem(MultiblockPrintingPress.SLOT_PAPER, 1, true); if(!found.recipe.getInput().matchesItemStack(input)) return null; @@ -235,6 +239,11 @@ protected IIMultiblockProcess findNewProductionProcess() ItemStack result = function.apply(input, found.data); int[] inkCost = function.getInkTypesRequired(found.data); + //Check if the required upgrade is installed + Upgrade requiredUpgrade = function.getUpgradeRequired(); + if(requiredUpgrade!=null&&!isUpgradeInstalled(requiredUpgrade)) + return null; + //Check if there's enough ink FluidStack[] fs = { new FluidStack(IIContent.fluidInkCyan, inkCost[0]), @@ -247,7 +256,7 @@ protected IIMultiblockProcess findNewProductionProcess() return null; //Use resources - inputHandler.extractItem(SLOT_PAPER, 1, false); + inputHandler.extractItem(MultiblockPrintingPress.SLOT_PAPER, 1, false); for(FluidStack f : fs) tank.drain(f, true); @@ -336,7 +345,7 @@ protected boolean isTankAvailable(int pos, int tank) @Override public int getSlotLimit(int slot) { - return slot==SLOT_OUTPUT?12: super.getSlotLimit(slot); + return slot==MultiblockPrintingPress.SLOT_OUTPUT?12: super.getSlotLimit(slot); } @Override @@ -392,6 +401,15 @@ public String[] getOverlayText(EntityPlayer player, RayTraceResult mop) return new String[0]; } + //--- IManagedUpgradableDevice ---// + + @Nonnull + @Override + public UpgradeManager getUpgradeManager() + { + return upgradeManager; + } + //--- Utilities ---// public static class PrintingRequest implements INBTSerializable diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockAmmunitionAssembler.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockAmmunitionAssembler.java index 91f0204fd..25f82b324 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockAmmunitionAssembler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockAmmunitionAssembler.java @@ -11,6 +11,10 @@ public class MultiblockAmmunitionAssembler extends MultiblockStuctureBase { + public static final int SLOT_CORE = 0; + public static final int SLOT_CASING = 1; + public static final int SLOT_OUTPUT = 2; + public static final String NBT_KEY_EFFECT = "effect"; public static MultiblockAmmunitionAssembler INSTANCE; public MultiblockAmmunitionAssembler() diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockEmplacement.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockEmplacement.java index 2939ee1bc..dc7a2a214 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockEmplacement.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockEmplacement.java @@ -5,6 +5,7 @@ import net.minecraft.util.math.Vec3i; import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; import pl.pabilo8.immersiveintelligence.api.style.StyleConstraints; +import pl.pabilo8.immersiveintelligence.api.style.StyleConstraints.PaintStyleConstraint; import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeTechTree; import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeUtils.UpgradePurpose; import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeUtils.UpgradeTier; @@ -29,7 +30,7 @@ public MultiblockEmplacement() super(new ResourceLocation(ImmersiveIntelligence.MODID, "multiblocks/emplacement")); offset = new Vec3i(1, 4, 0); INSTANCE = this; - STYLE_CONSTRAINTS = new StyleConstraints("sandbags", false, + STYLE_CONSTRAINTS = new StyleConstraints("sandbags", PaintStyleConstraint.NOT_APPLICABLE, Sets.newHashSet("sandbags", "wooden", "steel", "bricks", "concrete"), Collections.emptySet() ); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockFlagpole.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockFlagpole.java index b7b4e34b2..bbcadaac1 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockFlagpole.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockFlagpole.java @@ -5,6 +5,7 @@ import net.minecraft.util.math.Vec3i; import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; import pl.pabilo8.immersiveintelligence.api.style.StyleConstraints; +import pl.pabilo8.immersiveintelligence.api.style.StyleConstraints.PaintStyleConstraint; import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeTechTree; import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeUtils.UpgradeTier; import pl.pabilo8.immersiveintelligence.common.IIContent; @@ -25,7 +26,7 @@ public MultiblockFlagpole() super(new ResourceLocation(ImmersiveIntelligence.MODID, "multiblocks/flagpole")); offset = new Vec3i(1, 3, 0); INSTANCE = this; - STYLE_CONSTRAINTS = new StyleConstraints("sandbags", false, + STYLE_CONSTRAINTS = new StyleConstraints("sandbags", PaintStyleConstraint.NOT_APPLICABLE, Sets.newHashSet("sandbags", "wooden", "steel", "bricks", "concrete"), Collections.emptySet() ); @@ -33,9 +34,10 @@ public MultiblockFlagpole() UpgradeTechTree.getTreeFor(TileEntityFlagpole.class) .reset() .withUpgrade(IIContent.UPGRADE_FLAGPOLE_CAPTURE_DEFIANCE, UpgradeTier.TIER_1) - .withUpgrade(IIContent.UPGRADE_FLAGPOLE_TASER_LOCKS, UpgradeTier.TIER_1) + .withUpgrade(IIContent.UPGRADE_FLAGPOLE_TASER_LOCKS, UpgradeTier.TIER_2) .withUpgrade(IIContent.UPGRADE_FLAGPOLE_UNIT_POST, UpgradeTier.TIER_1) .withUpgrade(IIContent.UPGRADE_FLAGPOLE_DISTRESS_SIGNAL, UpgradeTier.TIER_1) + .withDependency(IIContent.UPGRADE_FLAGPOLE_CAPTURE_DEFIANCE, IIContent.UPGRADE_FLAGPOLE_TASER_LOCKS) .withLockOut(IIContent.UPGRADE_FLAGPOLE_UNIT_POST, IIContent.UPGRADE_FLAGPOLE_TASER_LOCKS); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockFuelStation.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockFuelStation.java index 7e0d7f5c8..925bea8d8 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockFuelStation.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockFuelStation.java @@ -5,6 +5,7 @@ import net.minecraft.util.math.Vec3i; import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; import pl.pabilo8.immersiveintelligence.api.style.StyleConstraints; +import pl.pabilo8.immersiveintelligence.api.style.StyleConstraints.PaintStyleConstraint; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.BlockIIMetalMultiblock1.MetalMultiblocks1; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityFuelStation; @@ -27,7 +28,7 @@ public MultiblockFuelStation() super(new ResourceLocation(ImmersiveIntelligence.MODID, "multiblocks/fuel_station")); offset = new Vec3i(0, 1, 0); INSTANCE = this; - STYLE_CONSTRAINTS = new StyleConstraints("wooden", false, + STYLE_CONSTRAINTS = new StyleConstraints("wooden", PaintStyleConstraint.NOT_APPLICABLE, Sets.newHashSet("wooden", "naval", "steel"), Collections.emptySet() ); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockProjectileWorkshop.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockProjectileWorkshop.java index c1f462a01..65755f5c1 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockProjectileWorkshop.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/multiblock/MultiblockProjectileWorkshop.java @@ -13,6 +13,9 @@ public class MultiblockProjectileWorkshop extends MultiblockStuctureBase { + public static final int SLOT_INPUT = 0; + public static final int SLOT_COMPONENT_INPUT = 1; + public static final int SLOT_OUTPUT = 2; public static MultiblockProjectileWorkshop INSTANCE; public MultiblockProjectileWorkshop() diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityAmmunitionAssembler.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityAmmunitionAssembler.java index 7ec0db4cd..a512c59c6 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityAmmunitionAssembler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityAmmunitionAssembler.java @@ -19,6 +19,7 @@ import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Machines.AmmunitionAssembler; import pl.pabilo8.immersiveintelligence.common.IIGUI; import pl.pabilo8.immersiveintelligence.common.IISounds; +import pl.pabilo8.immersiveintelligence.common.IIUtils; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.multiblock.MultiblockAmmunitionAssembler; import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; import pl.pabilo8.immersiveintelligence.common.network.messages.MessageBooleanAnimatedPartsSync; @@ -38,28 +39,34 @@ */ public class TileEntityAmmunitionAssembler extends TileEntityMultiblockProductionMulti implements IBooleanAnimatedPartsBlock { - public static final int SLOT_CORE = 0, SLOT_CASING = 1, SLOT_OUTPUT = 2; - public static final String NBT_KEY_EFFECT = "effect"; - @SyncNBT(events = {SyncEvents.TILE_GUI_OPENED, SyncEvents.TILE_CLIENT_MESSAGE}) - public FuseType fuse = FuseType.CONTACT; + public FuseType fuseType = FuseType.CONTACT; + //depends on fuse type: time for timed fuse, distance for proximity fuse @SyncNBT(events = {SyncEvents.TILE_GUI_OPENED, SyncEvents.TILE_CLIENT_MESSAGE}) - public int fuseConfig = 0; //depends on fuse type: time for timed fuse, distance for proximity fuse + public int fuseConfig = 0; @SyncNBT public MultiblockInteractablePart hatch; //inventory: core, casing - IItemHandler coreInputHandler = getSingleInventoryHandler(SLOT_CORE, true, false); - IItemHandler casingInputHandler = getSingleInventoryHandler(SLOT_CASING, true, false); + private IItemHandler coreInputHandler = getSingleInventoryHandler(MultiblockAmmunitionAssembler.SLOT_CORE, true, false); + private IItemHandler casingInputHandler = getSingleInventoryHandler(MultiblockAmmunitionAssembler.SLOT_CASING, true, false); public TileEntityAmmunitionAssembler() { super(MultiblockAmmunitionAssembler.INSTANCE); energyStorage = new FluxStorageAdvanced(AmmunitionAssembler.energyCapacity); - inventory = NonNullList.withSize(4, ItemStack.EMPTY); + inventory = NonNullList.withSize(3, ItemStack.EMPTY); hatch = new MultiblockInteractablePart(10); } + @Override + protected void dummyCleanup() + { + super.dummyCleanup(); + this.coreInputHandler = this.casingInputHandler = null; + this.hatch = null; + } + @Override protected void onUpdate() { @@ -99,9 +106,9 @@ public boolean isStackValid(int i, ItemStack stack) { switch(i) { - case SLOT_CORE: + case MultiblockAmmunitionAssembler.SLOT_CORE: return stack.getItem() instanceof IAmmoTypeItem&&((IAmmoTypeItem)stack.getItem()).isBulletCore(stack); - case SLOT_CASING: + case MultiblockAmmunitionAssembler.SLOT_CASING: return AmmunitionAssemblerRecipe.streamRecipes(AmmunitionAssemblerRecipe.class) .anyMatch(a -> a.casingInput.matchesItemStackIgnoringSize(stack)); default: @@ -132,17 +139,17 @@ public int getMaxProductionQueue() @Override protected IIMultiblockProcess findNewProductionProcess() { - if(!inventory.get(SLOT_CORE).isEmpty()&&!inventory.get(SLOT_CASING).isEmpty()) + if(!inventory.get(MultiblockAmmunitionAssembler.SLOT_CORE).isEmpty()&&!inventory.get(MultiblockAmmunitionAssembler.SLOT_CASING).isEmpty()) for(AmmunitionAssemblerRecipe recipe : AmmunitionAssemblerRecipe.getRecipes(AmmunitionAssemblerRecipe.class)) - if(!recipe.advanced&&recipe.casingInput.matchesItemStack(inventory.get(SLOT_CASING))&&recipe.coreInput.matches(inventory.get(SLOT_CORE))) + if(!recipe.advanced&&recipe.casingInput.matchesItemStack(inventory.get(MultiblockAmmunitionAssembler.SLOT_CASING))&&recipe.coreInput.matches(inventory.get(MultiblockAmmunitionAssembler.SLOT_CORE))) { IIMultiblockProcess process = new IIMultiblockProcess<>(recipe) - .withNBT(nbt -> nbt.withItemStack(NBT_KEY_EFFECT, recipe.process.apply(inventory.get(SLOT_CORE), inventory.get(SLOT_CASING))) - .withItemStack("core", inventory.get(SLOT_CORE)) + .withNBT(nbt -> nbt.withItemStack(MultiblockAmmunitionAssembler.NBT_KEY_EFFECT, recipe.process.apply(inventory.get(MultiblockAmmunitionAssembler.SLOT_CORE), inventory.get(MultiblockAmmunitionAssembler.SLOT_CASING))) + .withItemStack("core", inventory.get(MultiblockAmmunitionAssembler.SLOT_CORE)) .withString("ammo", recipe.ammoItem.getName()) ); - inventory.get(SLOT_CORE).shrink(1); - inventory.get(SLOT_CASING).shrink(1); + inventory.get(MultiblockAmmunitionAssembler.SLOT_CORE).shrink(1); + inventory.get(MultiblockAmmunitionAssembler.SLOT_CASING).shrink(1); return process; } return null; @@ -173,7 +180,7 @@ protected boolean attemptProductionOutput(IIMultiblockProcess process) { - outputOrDrop(process.processData.getItemStack(NBT_KEY_EFFECT), null, facing.getOpposite(), 34); + outputOrDrop(process.processData.getItemStack(MultiblockAmmunitionAssembler.NBT_KEY_EFFECT), null, facing.getOpposite(), 34); } //--- Data Handling ---// @@ -182,14 +189,14 @@ protected void onProductionFinish(IIMultiblockProcess public void receiveData(DataPacket packet, int pos) { if(packet.has('f')) - fuse = FuseType.v(packet.get('f').toString()); + fuseType = IIUtils.enumValue(FuseType.class, packet.get('f').toString()); } public ItemStack getProductionResult(int processID) { if(processQueue.size() <= processID) return ItemStack.EMPTY; - return this.processQueue.get(processID).processData.getItemStack(NBT_KEY_EFFECT); + return this.processQueue.get(processID).processData.getItemStack(MultiblockAmmunitionAssembler.NBT_KEY_EFFECT); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityFlagpole.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityFlagpole.java index c61367d4f..1c4a05dfe 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityFlagpole.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityFlagpole.java @@ -13,6 +13,7 @@ import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeManager; import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeUtils.MachineStyle; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Machines.Flagpole; +import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.IIGUI; import pl.pabilo8.immersiveintelligence.common.IILogger; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.multiblock.MultiblockFlagpole; @@ -223,10 +224,18 @@ public MultiblockHealth getHealthManager() return health; } + @Override + public boolean damageHealth(float damage) + { + if(isUpgradeInstalled(IIContent.UPGRADE_FLAGPOLE_CAPTURE_DEFIANCE)) + damage /= 2; + return IManagedDamageResistantMultiblock.super.damageHealth(damage); + } + @Override public float getExplosionResistance() { - return 3; + return isUpgradeInstalled(IIContent.UPGRADE_FLAGPOLE_CAPTURE_DEFIANCE)?6: 3; } //--- IIIGuiMultiblockTile ---// diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityHeavyAmmunitionAssembler.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityHeavyAmmunitionAssembler.java index 30b45cbfa..bc4cde48b 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityHeavyAmmunitionAssembler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityHeavyAmmunitionAssembler.java @@ -16,6 +16,7 @@ import pl.pabilo8.immersiveintelligence.api.data.DataPacket; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Machines.AmmunitionAssembler; import pl.pabilo8.immersiveintelligence.common.IIGUI; +import pl.pabilo8.immersiveintelligence.common.IIUtils; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.multiblock.MultiblockHeavyAmmunitionAssembler; import pl.pabilo8.immersiveintelligence.common.entity.tactile.TactileManager; import pl.pabilo8.immersiveintelligence.common.entity.tactile.TactileManager.ITactileListener; @@ -189,7 +190,7 @@ protected void onProductionFinish(IIMultiblockProcess public void receiveData(DataPacket packet, int pos) { if(packet.has('f')) - fuse = FuseType.v(packet.get('f').toString()); + fuse = IIUtils.enumValue(FuseType.class, packet.get('f').toString()); } public ItemStack getProductionResult() diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityProjectileWorkshop.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityProjectileWorkshop.java index 5e455a551..be4c132c2 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityProjectileWorkshop.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/TileEntityProjectileWorkshop.java @@ -6,14 +6,20 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; import net.minecraft.util.NonNullList; import net.minecraft.util.SoundCategory; import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import pl.pabilo8.immersiveintelligence.api.ammo.AmmoRegistry; import pl.pabilo8.immersiveintelligence.api.ammo.enums.CoreType; import pl.pabilo8.immersiveintelligence.api.ammo.parts.AmmoComponent; +import pl.pabilo8.immersiveintelligence.api.ammo.parts.AmmoCore; import pl.pabilo8.immersiveintelligence.api.ammo.parts.IAmmoTypeItem; import pl.pabilo8.immersiveintelligence.api.crafting.BulletComponentStack; import pl.pabilo8.immersiveintelligence.api.crafting.ProjectileWorkshopRecipe; @@ -38,6 +44,7 @@ import pl.pabilo8.immersiveintelligence.common.util.multiblock.util.MultiblockPOI; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.Arrays; import java.util.Optional; @@ -50,34 +57,39 @@ public class TileEntityProjectileWorkshop extends TileEntityMultiblockProductionSingle implements IManagedUpgradableDevice, IBooleanAnimatedPartsBlock { - public static final int SLOT_INPUT = 0, SLOT_COMPONENT_INPUT = 1, SLOT_OUTPUT = 2; - - //for core production @Nonnull public IAmmoTypeItem producedAmmo = IIContent.itemAmmoHeavyArtillery; - @Nonnull @SyncNBT(events = {SyncEvents.TILE_GUI_OPENED, SyncEvents.TILE_CLIENT_MESSAGE}) public CoreType coreType = producedAmmo.getAllowedCoreTypes()[0]; - - //how many slots to fill @SyncNBT - public int fillAmount = 1; + public int componentFillAmount = 1; @SyncNBT public BulletComponentStack componentInside = new BulletComponentStack(); + private static final int COMPONENT_AMOUNT_PER_ITEM = 16; + /** * Stores fluids to be converted to ammo components */ @SyncNBT - public FluidTank tanksFiller = new FluidTank(ProjectileWorkshop.componentTankCapacity); + public FluidTank tanksFiller = new FluidTank(ProjectileWorkshop.componentTankCapacity) + { + @Override + public boolean canFillFluidType(FluidStack fluid) + { + return fluid!=null + &&getComponentForFluid(fluid).isPresent() + &&(componentInside.isEmpty()||componentInside.matches(fluid)); + } + }; @SyncNBT public MultiblockInteractablePart lid1, lid2; @SyncNBT(name = "upgrades", events = SyncEvents.TILE_UPGRADES_MODIFIED) public UpgradeManager upgrades; - IItemHandler inputHandler = new IEInventoryHandler(1, this, 0, true, false); - IItemHandler componentInputHandler = new IEInventoryHandler(1, this, 1, true, false); + private IItemHandler inputHandler = new IEInventoryHandler(1, this, 0, true, false); + private IItemHandler componentInputHandler = new IEInventoryHandler(1, this, 1, true, false); public TileEntityProjectileWorkshop() { @@ -98,6 +110,7 @@ protected void dummyCleanup() tanksFiller = null; upgrades = null; componentInside = null; + inputHandler = componentInputHandler = null; } @Override @@ -108,26 +121,11 @@ protected void onUpdate() lid2.update(); upgrades.update(); - //fill component tank + //Fill the internal ammunition component store from both item and fluid input. if(isUpgradeInstalled(IIContent.UPGRADE_CORE_FILLER)&&!world.isRemote) { - if(!componentInputHandler.getStackInSlot(0).isEmpty()) - { - ItemStack stack = componentInputHandler.getStackInSlot(0); - if(componentInside.isEmpty()) - { - Optional matching = AmmoRegistry.getAllComponents().stream().filter(comp -> comp.getMaterial().matchesItemStackIgnoringSize(stack)).findFirst(); - matching.ifPresent(component -> componentInside = new BulletComponentStack(component, componentInputHandler.extractItem(0, 1, false).getTagCompound())); - } - else - { - if(componentInside.matches(stack)&&componentInside.amount+16 <= ProjectileWorkshop.componentCapacity) - { - componentInside.amount += 16; - componentInputHandler.extractItem(0, 1, false); - } - } - } + pullComponentItem(); + pullComponentFluid(); } //Stop working when the machine is disabled @@ -170,6 +168,10 @@ public void receiveMessageFromServer(@Nonnull NBTTagCompound message) IAmmoTypeItem bb = AmmoRegistry.getAmmoItem(message.getString("produced_bullet")); producedAmmo = bb==null?IIContent.itemAmmoHeavyArtillery: bb; } + if(message.hasKey("core_type")) + coreType = CoreType.v(message.getString("core_type")); + if(message.hasKey("component_fill_amount")) + componentFillAmount = Math.max(1, message.getInteger("component_fill_amount")); } @Override @@ -181,6 +183,10 @@ public void receiveMessageFromClient(NBTTagCompound message) IAmmoTypeItem bb = AmmoRegistry.getAmmoItem(message.getString("produced_bullet")); producedAmmo = bb==null?IIContent.itemAmmoHeavyArtillery: bb; } + if(message.hasKey("core_type")) + coreType = CoreType.v(message.getString("core_type")); + if(message.hasKey("component_fill_amount")) + componentFillAmount = Math.max(1, message.getInteger("component_fill_amount")); } @Override @@ -205,9 +211,9 @@ protected int[] listAllPOI(MultiblockPOI poi) @Override public boolean isStackValid(int slot, ItemStack stack) { - if(slot==SLOT_COMPONENT_INPUT&&isUpgradeInstalled(IIContent.UPGRADE_CORE_FILLER)) + if(slot==MultiblockProjectileWorkshop.SLOT_COMPONENT_INPUT&&isUpgradeInstalled(IIContent.UPGRADE_CORE_FILLER)) return AmmoRegistry.getAllComponents().stream().anyMatch(comp -> comp.getMaterial().matchesItemStackIgnoringSize(stack)); - else if(slot==SLOT_INPUT) + else if(slot==MultiblockProjectileWorkshop.SLOT_INPUT) { if(isUpgradeInstalled(IIContent.UPGRADE_CORE_FILLER)) return stack.getItem() instanceof IAmmoTypeItem&&((IAmmoTypeItem)stack.getItem()).isBulletCore(stack); @@ -220,61 +226,180 @@ else if(slot==SLOT_INPUT) @Override public int getSlotLimit(int i) { - return i==1?1: 64; + return i==MultiblockProjectileWorkshop.SLOT_COMPONENT_INPUT?1: 64; } - @Override - protected IIMultiblockProcess findNewProductionProcess() + + private int getFluidPerComponentAmount() { - //filling - /*if(hasUpgrade(IIContent.UPGRADE_CORE_FILLER)) - { - //check for valid component and ammo core - if(componentInside.isEmpty()||inventory.get(SLOT_INPUT).isEmpty()) - return null; - - ItemStack stack = inventory.get(SLOT_INPUT); - IAmmoTypeItem ammo = (IAmmoTypeItem)stack.getItem(); - int componentSlotsTaken = componentInside.component.getSlotsTaken()*fillAmount; - int remainingSlots = ammo.getCoreType(stack).getComponentSlots()- - Arrays.stream(ammo.getComponents(stack)) - .map(AmmoComponent::getSlotsTaken) - .reduce(0, Integer::sum); - - //check if there is enough space in the ammo - if(!componentInside.component.matchesBullet(ammo)||remainingSlots-componentSlotsTaken < 0) - return null; - - IIMultiblockProcess out = new IIMultiblockProcess<>(new ProjectileWorkshopRecipe(stack, componentInside)); - stack.shrink(1); - componentInside.subtract(ammo.getCoreMaterialNeeded()); - return out; + return Math.max(1, ProjectileWorkshop.componentTankCapacity/ProjectileWorkshop.componentCapacity); + } + + private Optional getComponentForFluid(FluidStack fluid) + { + if(fluid==null) + return Optional.empty(); + + return AmmoRegistry.getAllComponents().stream() + .filter(component -> component.getMaterial().fluid!=null) + .filter(component -> fluid.isFluidEqual(component.getMaterial().fluid)) + .findFirst(); + } + + private void pullComponentItem() + { + ItemStack stack = componentInputHandler.getStackInSlot(0); + if(stack.isEmpty()) + return; + + Optional matching = AmmoRegistry.getAllComponents().stream() + .filter(comp -> comp.getMaterial().matchesItemStackIgnoringSize(stack)) + .findFirst(); + if(!matching.isPresent()) + return; + + AmmoComponent component = matching.get(); + if(componentInside.isEmpty()) + { + if(COMPONENT_AMOUNT_PER_ITEM <= ProjectileWorkshop.componentCapacity) + { + ItemStack extracted = componentInputHandler.extractItem(0, 1, false); + componentInside = new BulletComponentStack(component, COMPONENT_AMOUNT_PER_ITEM, extracted.getTagCompound()); + } } - else //production + else if(componentInside.matches(stack) + &&componentInside.amount+COMPONENT_AMOUNT_PER_ITEM <= ProjectileWorkshop.componentCapacity) { - ItemStack stack = inventory.get(SLOT_INPUT); - if(stack.isEmpty()) - return null; + componentInside.amount += COMPONENT_AMOUNT_PER_ITEM; + componentInputHandler.extractItem(0, 1, false); + } + } + + private void pullComponentFluid() + { + FluidStack fluid = tanksFiller.getFluid(); + if(fluid==null) + return; - Optional first = AmmoRegistry.getAllCores() - .stream() - .filter(core -> core.getMaterial().matchesItemStackIgnoringSize(inventory.get(0))) - .findFirst(); + Optional matching = getComponentForFluid(fluid); + if(!matching.isPresent()) + return; + + if(!componentInside.isEmpty()&&!componentInside.matches(fluid)) + return; - if(!first.isPresent()||stack.getCount() < producedAmmo.getCoreMaterialNeeded()) - return null; + int fluidPerAmount = getFluidPerComponentAmount(); + int freeAmount = ProjectileWorkshop.componentCapacity-componentInside.amount; + int availableAmount = fluid.amount/fluidPerAmount; + int acceptedAmount = Math.min(freeAmount, availableAmount); - IIMultiblockProcess out = new IIMultiblockProcess<>(new ProjectileWorkshopRecipe(producedAmmo, first.get(), coreType)); - stack.shrink(producedAmmo.getCoreMaterialNeeded()); - return out; - }*/ - return null; + if(acceptedAmount <= 0) + return; + + if(componentInside.isEmpty()) + { + NBTTagCompound tag = fluid.tag==null?new NBTTagCompound(): fluid.tag.copy(); + componentInside = new BulletComponentStack(matching.get(), 0, tag); + } + + componentInside.amount += acceptedAmount; + tanksFiller.drain(acceptedAmount*fluidPerAmount, true); + } + + private int getRemainingComponentSlots(IAmmoTypeItem ammo, ItemStack stack) + { + return ammo.getCoreType(stack).getComponentSlots() + -Arrays.stream(ammo.getComponents(stack)) + .mapToInt(AmmoComponent::getSlotsTaken) + .sum(); + } + + private boolean canApplyComponent(ItemStack stack, IAmmoTypeItem ammo, AmmoComponent component, int fillAmount) + { + if(!component.matchesBullet(ammo)) + return false; + + int componentSlotsTaken = component.getSlotsTaken()*fillAmount; + return getRemainingComponentSlots(ammo, stack) >= componentSlotsTaken; + } + + @Override + protected IIMultiblockProcess findNewProductionProcess() + { + if(isUpgradeInstalled(IIContent.UPGRADE_CORE_FILLER)) + return findNewFillingProcess(); + return findNewCoreProductionProcess(); + } + + private IIMultiblockProcess findNewCoreProductionProcess() + { + ItemStack stack = inventory.get(MultiblockProjectileWorkshop.SLOT_INPUT); + if(stack.isEmpty()) + return null; + + Optional first = AmmoRegistry.getAllCores() + .stream() + .filter(core -> core.getMaterial().matchesItemStackIgnoringSize(stack)) + .findFirst(); + + if(!first.isPresent()||stack.getCount() < producedAmmo.getCoreMaterialNeeded()) + return null; + + ProjectileWorkshopRecipe recipe = new ProjectileWorkshopRecipe(producedAmmo, first.get(), coreType); + stack.shrink(producedAmmo.getCoreMaterialNeeded()); + return new IIMultiblockProcess<>(recipe); + } + + private IIMultiblockProcess findNewFillingProcess() + { + ItemStack stack = inventory.get(MultiblockProjectileWorkshop.SLOT_INPUT); + if(stack.isEmpty()||!(stack.getItem() instanceof IAmmoTypeItem)) + return null; + + IAmmoTypeItem ammo = (IAmmoTypeItem)stack.getItem(); + if(!ammo.isBulletCore(stack)) + return null; + + if(componentInside.isEmpty()||componentInside.component==null) + return null; + + int fillAmount = Math.max(1, componentFillAmount); + if(componentInside.amount < fillAmount) + return null; + + ItemStack effect = stack.copy(); + effect.setCount(1); + + AmmoComponent component = componentInside.component; + BulletComponentStack usedComponent = new BulletComponentStack(component, fillAmount, componentInside.tagCompound.copy()); + boolean canFill = canApplyComponent(effect, ammo, component, fillAmount); + + if(canFill) + { + for(int i = 0; i < fillAmount; i++) + ammo.addComponents(effect, component, componentInside.tagCompound.copy()); + componentInside.subtract(fillAmount); + } + + stack.shrink(1); + + IIMultiblockProcess process = new IIMultiblockProcess<>(ProjectileWorkshopRecipe.CORE_FILLING) + .withNBT(nbt -> nbt + .withItemStack("effect", effect) + .withBoolean("filled", canFill) + .withSerializable("component", usedComponent) + ); + process.maxTicks *= ammo.getCaliber(); + return process; } @Override protected IIMultiblockProcess getProcessByName(String name) { + if(ProjectileWorkshopRecipe.FILLING_RECIPE_NAME.equals(name)) + return new IIMultiblockProcess<>(ProjectileWorkshopRecipe.CORE_FILLING); + ProjectileWorkshopRecipe recipe = IIMultiblockRecipe.getRecipe(ProjectileWorkshopRecipe.class, name); return recipe==null?null: new IIMultiblockProcess<>(recipe); } @@ -288,7 +413,11 @@ public float getProductionStep(IIMultiblockProcess pro @Override protected boolean attemptProductionOutput(IIMultiblockProcess process) { - outputOrDrop(process.recipe.getEffect(), null, mirrored?facing.rotateYCCW(): facing.rotateY(), + ItemStack effect = process.recipe.isFilling?process.processData.getItemStack("effect"): process.recipe.getEffect(); + if(effect.isEmpty()) + return true; + + outputOrDrop(effect, null, mirrored?facing.rotateYCCW(): facing.rotateY(), getPOI(MultiblockPOI.ITEM_OUTPUT) ); return true; @@ -323,6 +452,35 @@ public void onAnimationChangeServer(boolean state, int part) } } + //--- Capabilities ---// + @Override + protected IFluidTank[] getFluidTanks(int pos, EnumFacing side) + { + if(isUpgradeInstalled(IIContent.UPGRADE_CORE_FILLER) + &&Arrays.stream(getPOI("component_fluid_in")).anyMatch(i -> i==pos)) + return new FluidTank[]{tanksFiller}; + + return super.getFluidTanks(pos, side); + } + + @Override + @SuppressWarnings("unchecked") + public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) + { + if(capability==CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + TileEntityProjectileWorkshop master = master(); + assert master!=null; + if(isPOI("item_in")) + return (T)master.inputHandler; + else if(isPOI("component_in")) + return (T)master.componentInputHandler; + } + return super.getCapability(capability, facing); + } + + //--- Data Handling ---// + @Override public void receiveData(DataPacket packet, int pos) { @@ -338,10 +496,9 @@ public void receiveData(DataPacket packet, int pos) this.coreType = this.producedAmmo.getAllowedCoreTypes()[0]; if(packet.has('a')) - this.fillAmount = packet.getVarInType(DataTypeInteger.class, packet.get('a')).value; + this.componentFillAmount = packet.getVarInType(DataTypeInteger.class, packet.get('a')).value; } - //TODO: 09.07.2024 conveyor interaction @Override public void onEntityCollision(World world, Entity entity) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/TileEntityEmplacement.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/TileEntityEmplacement.java index e40c83e69..aac599871 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/TileEntityEmplacement.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/TileEntityEmplacement.java @@ -8,12 +8,18 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fml.common.Optional.Interface; import net.minecraftforge.fml.common.Optional.Method; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.items.CapabilityItemHandler; import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; import pl.pabilo8.immersiveintelligence.api.data.DataPacket; import pl.pabilo8.immersiveintelligence.api.data.IIDataHandlingUtils; @@ -39,6 +45,7 @@ import pl.pabilo8.immersiveintelligence.common.entity.tactile.TactileManager.ITactileListener; import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; import pl.pabilo8.immersiveintelligence.common.network.messages.MessageBooleanAnimatedPartsSync; +import pl.pabilo8.immersiveintelligence.common.util.IIMath; import pl.pabilo8.immersiveintelligence.common.util.diplomacy.DiplomacyHandler; import pl.pabilo8.immersiveintelligence.common.util.diplomacy.OwnerIdentity; import pl.pabilo8.immersiveintelligence.common.util.diplomacy.property.IOwnableProperty; @@ -67,6 +74,10 @@ public class TileEntityEmplacement extends TileEntityMultiblockIIGeneric implements IBooleanAnimatedPartsBlock, IManagedUpgradableDevice, IOwnableProperty, IStyleCustomizable, IIIGuiMultiblockTile, IManagedDamageResistantMultiblock, ITactileListener, ILightEventConsumer { + private static final int WEAPON_REPAIR_INTERVAL = 20; + private static final int WEAPON_REPAIR_ENERGY_COST = 80; + private static final float WEAPON_REPAIR_AMOUNT = 1.0f; + @SyncNBT(events = SyncEvents.TILE_OWNERSHIP_MODIFIED) public OwnerIdentity ownerIdentity; @SyncNBT(name = "upgrades", events = SyncEvents.TILE_UPGRADES_MODIFIED) @@ -86,7 +97,10 @@ public class TileEntityEmplacement extends TileEntityMultiblockIIGeneric(this); this.style = new StyleCustomization(MultiblockFlagpole.STYLE_CONSTRAINTS); this.baseHealth = new MultiblockHealth(this, Emplacement.baseHealth); this.ownerIdentity = DiplomacyHandler.NEUTRAL; this.currentTarget = new TargetCoordinateReference(this::getWorld); + this.taskManager.setWorldSupplier(this::getWorld); this.currentWeapon = null; } @@ -134,27 +150,41 @@ protected void onUpdate() //Extract energy for merely existing if(energyStorage.extractEnergy(Emplacement.baseEnergyUsage, false)==Emplacement.baseEnergyUsage) { + //Finish previous task, if condition is met or the task is no longer valid. + if(currentTarget!=null&&!currentTarget.shouldBeExecuted(world)) + { + currentTarget = null; + taskManager.pruneFinishedMissions(); + updateTileForEvent(SyncEvents.TILE_CUSTOM1); + } + //Handle targeting if(currentTarget==null) currentTarget = taskManager.provideNextTask(); - //Handle the base behavior (without redstone control, it can be only changed through data) - EmplacementStateNeeds baseNeeds = EmplacementStateNeeds.WANTS_HIDE; - if(redstoneControlEnabled) - baseNeeds = getRedstoneAtPos(0)?EmplacementStateNeeds.WANTS_SURFACE: EmplacementStateNeeds.MUST_HIDE; + //Base behaviour: redstone control either gates surfacing, or the platform wants to surface by default. + EmplacementStateNeeds baseNeeds = redstoneControlEnabled? + (getRedstoneAtPos(0)?EmplacementStateNeeds.WANTS_SURFACE: EmplacementStateNeeds.MUST_HIDE): + EmplacementStateNeeds.WANTS_SURFACE; - //When no task at hand, emplacement could use the time to reload and repair + //When no task is waiting, use the downtime to reload and repair. if(currentTarget==null&&baseNeeds==EmplacementStateNeeds.WANTS_SURFACE) baseNeeds = EmplacementStateNeeds.WANTS_HIDE; - //Handle the weapon, weapons need additional energy to operate - EmplacementStateNeeds weaponNeeds = baseNeeds; - if(currentWeapon!=null&&energyStorage.extractEnergy(currentWeapon.getEnergyUpkeepCost(), false)==currentWeapon.getEnergyUpkeepCost()) - weaponNeeds = this.currentWeapon.onUpdate(this, baseNeeds, currentTarget); + EmplacementStateNeeds serviceNeeds = getServiceNeeds(); + EmplacementStateNeeds weaponNeeds = combineNeeds(baseNeeds, serviceNeeds); + + //Handle the weapon only when it has enough upkeep power and is not forced into servicing. + if(currentWeapon!=null&&serviceNeeds!=EmplacementStateNeeds.MUST_HIDE + &&energyStorage.extractEnergy(currentWeapon.getEnergyUpkeepCost(), false)==currentWeapon.getEnergyUpkeepCost()) + weaponNeeds = this.currentWeapon.onUpdate(this, weaponNeeds, currentTarget); //Handle the door/platform door.setState(combineNeeds(baseNeeds, weaponNeeds)==EmplacementStateNeeds.WANTS_SURFACE); door.update(); + + if(!door.getState()&&door.isFullyClosed()) + serviceWeaponInBase(); } if(!this.world.isRemote) this.tactileHandler.update(MultiblockEmplacement.animationPlatform, door.getProgress(0)); @@ -162,13 +192,64 @@ protected void onUpdate() private EmplacementStateNeeds combineNeeds(EmplacementStateNeeds base, EmplacementStateNeeds weapon) { - if(base==EmplacementStateNeeds.WANTS_SURFACE||weapon==EmplacementStateNeeds.WANTS_SURFACE) - return EmplacementStateNeeds.WANTS_SURFACE; + //Hard requirements win over soft wishes. Otherwise a redstone signal could keep a broken or empty weapon exposed. if(base==EmplacementStateNeeds.MUST_HIDE||weapon==EmplacementStateNeeds.MUST_HIDE) return EmplacementStateNeeds.MUST_HIDE; + if(base==EmplacementStateNeeds.WANTS_SURFACE||weapon==EmplacementStateNeeds.WANTS_SURFACE) + return EmplacementStateNeeds.WANTS_SURFACE; return EmplacementStateNeeds.WANTS_HIDE; } + private EmplacementStateNeeds getServiceNeeds() + { + if(currentWeapon==null) + return EmplacementStateNeeds.WANTS_HIDE; + + float hideThreshold = MathHelper.clamp(weaponHideHealthThreshold, 0f, 1f); + float readyThreshold = MathHelper.clamp(Math.max(weaponRepairSatisfactoryThreshold, hideThreshold), 0f, 1f); + + if(currentWeapon.isBelowHealthThreshold(hideThreshold)) + weaponRepairing = true; + if(weaponRepairing) + { + if(currentWeapon.isRepairedTo(readyThreshold)) + weaponRepairing = false; + else + return EmplacementStateNeeds.MUST_HIDE; + } + + if(currentWeapon.needsSupply(this)) + return EmplacementStateNeeds.MUST_HIDE; + + return EmplacementStateNeeds.WANTS_SURFACE; + } + + private void serviceWeaponInBase() + { + if(currentWeapon==null||world.isRemote) + return; + + boolean changed = false; + if(currentWeapon.needsRestock(this)) + changed |= currentWeapon.restockFromBase(this); + + if(currentWeapon.getHealth() < currentWeapon.getMaxHealth()) + { + weaponRepairTicker++; + if(weaponRepairTicker >= WEAPON_REPAIR_INTERVAL) + { + weaponRepairTicker = 0; + if(energyStorage.extractEnergy(WEAPON_REPAIR_ENERGY_COST, true)==WEAPON_REPAIR_ENERGY_COST) + changed |= currentWeapon.repair(WEAPON_REPAIR_AMOUNT); + } + } + else + weaponRepairTicker = 0; + + if(changed) + updateTileForEvent(SyncEvents.TILE_CUSTOM2); + } + @Override public void disassemble() { @@ -279,18 +360,14 @@ public void receiveData(DataPacket packet, int pos) this.taskManager.resumeTask(true); updateTileForEvent(SyncEvents.TILE_CUSTOM1); break; - case "targetshells": -// this.taskManager.addTask(new EmplacementFireMissionShells()); - updateTileForEvent(SyncEvents.TILE_CUSTOM1); - break; case "fire": Optional e = IIDataHandlingUtils.optionalEntity('e', packet); - /*if(e.isPresent()) + if(e.isPresent()) { Entity entityByID = world.getEntityByID(e.get().entityID); if(entityByID!=null) - this.taskManager.addTask(new EmplacementFireMissionEntity(entityByID)); + this.taskManager.addEntityMission(entityByID, IIDataHandlingUtils.optionalInt('a', packet).orElse(1)); updateTileForEvent(SyncEvents.TILE_CUSTOM1); } else @@ -298,7 +375,7 @@ public void receiveData(DataPacket packet, int pos) int amount = IIDataHandlingUtils.optionalInt('a', packet).orElse(1); IIDataHandlingUtils.expectingVectorParam(packet, vec -> { //Block/Vector based - this.taskManager.addTask(new EmplacementFireMissionPosition(new BlockPos(vec).add(getPOIPos("weapon")), amount)); + this.taskManager.addPositionMission(new BlockPos(vec).add(getPOIPos("weapon")), amount); }, angle -> { //Yaw+Pitch based @@ -306,10 +383,10 @@ public void receiveData(DataPacket packet, int pos) double true_angle2 = Math.toRadians(angle.y); int distance = IIDataHandlingUtils.optionalInt('d', packet).orElse(40); - this.taskManager.addTask(new EmplacementFireMissionPosition(new BlockPos(IIMath.offsetPosDirection(distance, - true_angle, true_angle2)).add(getPOIPos("weapon")), amount)); + this.taskManager.addPositionMission(new BlockPos(IIMath.offsetPosDirection(distance, + true_angle, true_angle2)).add(getPOIPos("weapon")), amount); }); - }*/ + } //Synchronize the task updateTileForEvent(SyncEvents.TILE_CUSTOM1); break; @@ -423,7 +500,43 @@ public Vec3d getWeaponCenter() @Override public boolean isStackValid(int slot, ItemStack stack) { - return false; + return currentWeapon!=null; + } + + //--- Capabilities ---// + + @Override + public boolean hasCapability(@Nonnull Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + TileEntityEmplacement master = master(); + if(master!=null&&master.currentWeapon!=null) + { + if(capability==CapabilityItemHandler.ITEM_HANDLER_CAPABILITY&&(isPOI("input")||isPOI("output"))) + return master.currentWeapon.getBaseItemHandler()!=null; + if(capability==CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY&&(isPOI("input")||isPOI("output"))) + return master.currentWeapon.getBaseFluidHandler()!=null; + } + return super.hasCapability(capability, facing); + } + + @Nullable + @Override + @SuppressWarnings("unchecked") + public T getCapability(@Nonnull Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + TileEntityEmplacement master = master(); + if(master!=null&&master.currentWeapon!=null&&(isPOI("input")||isPOI("output"))) + { + if(capability==CapabilityItemHandler.ITEM_HANDLER_CAPABILITY&&master.currentWeapon.getBaseItemHandler()!=null) + return (T)master.currentWeapon.getBaseItemHandler(); + if(capability==CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + { + IFluidHandler handler = master.currentWeapon.getBaseFluidHandler(); + if(handler!=null) + return (T)handler; + } + } + return super.getCapability(capability, facing); } //--- IOwnableProperty ---// diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/task/EmplacementTargetManager.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/task/EmplacementTargetManager.java index c733a9b0b..fc04af1c5 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/task/EmplacementTargetManager.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/task/EmplacementTargetManager.java @@ -1,21 +1,83 @@ package pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.task; +import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import net.minecraftforge.common.util.INBTSerializable; +import pl.pabilo8.immersiveintelligence.common.util.ISerializableEnum; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyCollection; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; import pl.pabilo8.immersiveintelligence.common.util.easynbt.TargetCoordinateReference; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Iterator; +import java.util.function.Supplier; + /** + * Stores emplacement requests. Fire Missions are requests, not jobs: they expire when the target is gone + * or when the finite shot counter reaches zero. + * * @author Pabilo8 (pabilo@iiteam.net) * @ii-approved 0.3.1 * @since 14.09.2025 */ -public class EmplacementTargetManager implements INBTSerializable +public class EmplacementTargetManager implements INBTSerializable, Cloneable { + private Supplier worldSupplier = () -> null; public boolean paused = false; + public EasyCollection fireMissions = new EasyCollection<>(() -> new EmplacementFireMission(worldSupplier)); + + public EmplacementTargetManager() + { + + } + + public EmplacementTargetManager(Supplier worldSupplier) + { + setWorldSupplier(worldSupplier); + } + + public EmplacementTargetManager setWorldSupplier(Supplier worldSupplier) + { + this.worldSupplier = worldSupplier==null?() -> null: worldSupplier; + for(EmplacementFireMission mission : fireMissions) + mission.setWorldSupplier(this.worldSupplier); + return this; + } + + public EasyCollection getFireMissions() + { + return fireMissions; + } + + public void addEntityMission(Entity entity, int shots) + { + EmplacementFireMission mission = new EmplacementFireMission(worldSupplier) + .withEntity(entity); + if(shots > 0) + mission.withShotLimit(shots); + fireMissions.add(mission); + } + + public void addPositionMission(BlockPos position, int shots) + { + EmplacementFireMission mission = new EmplacementFireMission(worldSupplier) + .withPosition(position); + if(shots > 0) + mission.withShotLimit(shots); + fireMissions.add(mission); + } public void skipTask(int taskID) { paused = false; + if(taskID > 0&&taskID < fireMissions.size()) + { + EmplacementFireMission mission = fireMissions.remove(taskID); + fireMissions.add(0, mission); + } } public void stopTask(boolean switchToDefault) @@ -28,20 +90,170 @@ public void resumeTask(boolean switchToDefault) paused = false; } + @Nullable public TargetCoordinateReference provideNextTask() { + if(paused) + return null; + + World world = worldSupplier.get(); + for(Iterator iterator = fireMissions.iterator(); iterator.hasNext(); ) + { + EmplacementFireMission mission = iterator.next(); + mission.setWorldSupplier(worldSupplier); + if(!mission.shouldRemain(world)) + { + iterator.remove(); + continue; + } + return mission.target; + } return null; } + public void pruneFinishedMissions() + { + World world = worldSupplier.get(); + fireMissions.removeIf(mission -> !mission.shouldRemain(world)); + } + @Override public NBTTagCompound serializeNBT() { - return new NBTTagCompound(); + return EasyNBT.newNBT() + .withBoolean("paused", paused) + .withSerializable("fire_missions", fireMissions) + .unwrap(); } @Override public void deserializeNBT(NBTTagCompound nbt) { + EasyNBT easyNBT = EasyNBT.wrapNBT(nbt); + this.paused = easyNBT.getBoolean("paused"); + this.fireMissions.deserializeNBT(easyNBT.getList("fire_missions", EasyNBT.TAG_COMPOUND)); + setWorldSupplier(worldSupplier); + } + + @Override + public EmplacementTargetManager clone() + { + EmplacementTargetManager manager = new EmplacementTargetManager(worldSupplier); + manager.deserializeNBT(this.serializeNBT()); + return manager; + } + + public static class EmplacementFireMission implements INBTSerializable + { + public FireMissionTargetType type = FireMissionTargetType.POSITION; + public String name = ""; + public TargetCoordinateReference target; + private Supplier worldSupplier; + + public EmplacementFireMission() + { + this(() -> null); + } + + public EmplacementFireMission(Supplier worldSupplier) + { + this.worldSupplier = worldSupplier==null?() -> null: worldSupplier; + this.target = new TargetCoordinateReference(this.worldSupplier) + .withPosition(BlockPos.ORIGIN) + .withShotLimit(1); + } + + public EmplacementFireMission setWorldSupplier(Supplier worldSupplier) + { + this.worldSupplier = worldSupplier==null?() -> null: worldSupplier; + this.target.withWorldSupplier(this.worldSupplier); + return this; + } + + public EmplacementFireMission withEntity(Entity entity) + { + this.type = FireMissionTargetType.ENTITY; + this.target.withEntity(entity); + return this; + } + + public EmplacementFireMission withEntityID(int entityID) + { + this.type = FireMissionTargetType.ENTITY; + this.target.withEntityID(entityID); + return this; + } + + public EmplacementFireMission withPosition(BlockPos position) + { + this.type = FireMissionTargetType.POSITION; + this.target.withPosition(position); + return this; + } + + public EmplacementFireMission withShotLimit(int shots) + { + this.target.withShotLimit(shots); + return this; + } + + public EmplacementFireMission withInfiniteShots() + { + this.target.withInfiniteShots(); + return this; + } + + public boolean isJob() + { + return false; + } + + public boolean shouldRemain(@Nullable World world) + { + return target.shouldBeExecuted(world); + } + + @Nonnull + public String getDisplayName() + { + if(name!=null&&!name.isEmpty()) + return name; + if(type==FireMissionTargetType.ENTITY) + return "Entity #"+target.getEntityID(); + BlockPos pos = target.getPosition(); + return pos==null?"Position": pos.getX()+", "+pos.getY()+", "+pos.getZ(); + } + + @Override + public NBTTagCompound serializeNBT() + { + return EasyNBT.newNBT() + .withEnum("type", type) + .withString("name", name==null?"": name) + .withSerializable("target", target) + .unwrap(); + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) + { + EasyNBT easyNBT = EasyNBT.wrapNBT(nbt); + this.type = easyNBT.hasKey("type")?easyNBT.getEnum("type", FireMissionTargetType.class): FireMissionTargetType.POSITION; + this.name = easyNBT.getString("name"); + this.target = new TargetCoordinateReference(worldSupplier); + this.target.deserializeNBT(easyNBT.getCompound("target")); + } + } + + public enum FireMissionTargetType implements ISerializableEnum + { + POSITION, + ENTITY; + @Override + public String getName() + { + return name().toLowerCase(); + } } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeapon.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeapon.java index ea7b10329..348299d61 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeapon.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeapon.java @@ -122,12 +122,54 @@ public IItemHandler getBaseItemHandler() return null; } + @Nullable + public IItemHandler getPlatformItemHandler() + { + return null; + } + @Nullable public IFluidHandler getBaseFluidHandler() { return null; } + /** + * @return true when this weapon cannot operate until the platform is lowered and serviced. + */ + public boolean needsSupply(TileEntityEmplacement te) + { + return false; + } + + public boolean needsRestock(TileEntityEmplacement te) + { + return false; + } + + public boolean restockFromBase(TileEntityEmplacement te) + { + return false; + } + + public boolean isBelowHealthThreshold(float threshold) + { + return getMaxHealth() > 0&&getHealth()/getMaxHealth() < threshold; + } + + public boolean isRepairedTo(float threshold) + { + return getMaxHealth() <= 0||getHealth()/getMaxHealth() >= threshold; + } + + public boolean repair(float amount) + { + if(amount <= 0||health >= getMaxHealth()) + return false; + health = Math.min(getMaxHealth(), health+amount); + return true; + } + public abstract int getEnergyUpkeepCost(); //--- GUI ---// diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponAutocannon.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponAutocannon.java index cebb1b9fe..11f4bb8cb 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponAutocannon.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponAutocannon.java @@ -1,35 +1,31 @@ package pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.weapon; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; import net.minecraftforge.oredict.OreDictionary; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.EmplacementWeapons.Autocannon; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.TileEntityEmplacement; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIBulletMagazine.Magazines; -import pl.pabilo8.immersiveintelligence.common.util.multiblock.FilteredItemHandler; public class EmplacementWeaponAutocannon extends EmplacementWeaponGunBase { public EmplacementWeaponAutocannon() { super(); - this.inventoryBase = NonNullList.withSize(18, ItemStack.EMPTY); - this.inventoryPlatform = NonNullList.withSize(8, ItemStack.EMPTY); } @Override protected void onInit(TileEntityEmplacement te) { super.onInit(te); + this.ammoFactory.setAmmo(IIContent.itemAmmoAutocannon); this.visionAABB = this.visionAABB.grow(Autocannon.detectionRadius); this.attackAABB = this.attackAABB.grow(Autocannon.attackRadius); this.aim.withAimSpeed(Autocannon.yawRotateSpeed, Autocannon.pitchRotateSpeed); - this.inventoryBaseHandler = new FilteredItemHandler(inventoryBase) - .withFilter(stack -> OreDictionary.itemMatches(stack, - IIContent.itemBulletMagazine.getMagazine(Magazines.AUTOCANNON), false)); + setupItemHandlers(te, 18, 8, stack -> OreDictionary.itemMatches(stack, + IIContent.itemBulletMagazine.getMagazine(Magazines.AUTOCANNON), false), stack -> OreDictionary.itemMatches(stack, + IIContent.itemBulletMagazine.getMagazine(Magazines.AUTOCANNON), false)); } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponCPDS.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponCPDS.java index bb2797cce..23dfd6a1b 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponCPDS.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponCPDS.java @@ -1,14 +1,11 @@ package pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.weapon; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; import net.minecraftforge.oredict.OreDictionary; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.EmplacementWeapons.CPDS; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.TileEntityEmplacement; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIBulletMagazine.Magazines; -import pl.pabilo8.immersiveintelligence.common.util.multiblock.FilteredItemHandler; /** * CPDS Q&A @@ -32,19 +29,18 @@ public class EmplacementWeaponCPDS extends EmplacementWeaponGunBase OreDictionary.itemMatches(stack, - IIContent.itemBulletMagazine.getMagazine(Magazines.CPDS_DRUM), false)); + setupItemHandlers(te, 8, 3, stack -> OreDictionary.itemMatches(stack, + IIContent.itemBulletMagazine.getMagazine(Magazines.CPDS_DRUM), false), stack -> OreDictionary.itemMatches(stack, + IIContent.itemBulletMagazine.getMagazine(Magazines.CPDS_DRUM), false)); this.aim.withAimSpeed(CPDS.yawRotateSpeed, CPDS.pitchRotateSpeed); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponGuidedMissileLauncher.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponGuidedMissileLauncher.java index b9b4b07e4..8200847fc 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponGuidedMissileLauncher.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponGuidedMissileLauncher.java @@ -1,30 +1,26 @@ package pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.weapon; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.EmplacementWeapons.Autocannon; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.EmplacementWeapons.CPDS; +import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.TileEntityEmplacement; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; -import pl.pabilo8.immersiveintelligence.common.util.multiblock.FilteredItemHandler; public class EmplacementWeaponGuidedMissileLauncher extends EmplacementWeaponGunBase { public EmplacementWeaponGuidedMissileLauncher() { - this.inventoryBase = NonNullList.withSize(12, ItemStack.EMPTY); - this.inventoryPlatform = NonNullList.withSize(6, ItemStack.EMPTY); } @Override protected void onInit(TileEntityEmplacement te) { super.onInit(te); + this.ammoFactory.setAmmo(IIContent.itemAmmoGuidedMissile); this.visionAABB = this.visionAABB.grow(Autocannon.detectionRadius); this.attackAABB = this.attackAABB.grow(Autocannon.attackRadius); - this.inventoryBaseHandler = new FilteredItemHandler(inventoryBase) - .withFilter(this.ammoFactory::isValidAmmo); + setupItemHandlers(te, 12, 6, this.ammoFactory::isValidAmmo, this.ammoFactory::isValidAmmo); this.aim.withAimSpeed(CPDS.yawRotateSpeed, CPDS.pitchRotateSpeed); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponGunBase.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponGunBase.java index ba8f19f7b..4c263fe54 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponGunBase.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponGunBase.java @@ -1,51 +1,51 @@ package pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.weapon; -import blusunrize.immersiveengineering.common.util.Utils; +import blusunrize.immersiveengineering.common.util.inventory.IEInventoryHandler; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.NonNullList; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemStackHandler; import pl.pabilo8.immersiveintelligence.api.ammo.utils.AmmoFactory; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoPanel; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.TileEntityEmplacement; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.TileEntityEmplacement.EmplacementStateNeeds; import pl.pabilo8.immersiveintelligence.common.entity.ammo.EntityAmmoBase; +import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; import pl.pabilo8.immersiveintelligence.common.util.easynbt.TargetCoordinateReference; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunRecoil; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunShootingHandler; +import pl.pabilo8.immersiveintelligence.common.util.gun.ammoprovider.GunAmmoProviderItemHandler; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collections; +import java.util.function.Predicate; /** * @author Pabilo8 (pabilo@iiteam.net) * @ii-approved 0.3.1 - * @updated 30.12.2025 + * @updated 03.06.2026 * @since 04.09.2025 */ public abstract class EmplacementWeaponGunBase> extends EmplacementWeaponTurretBase { /** - * Used to fire ammo for the weapon + * Used to fire ammo for the weapon. */ protected AmmoFactory ammoFactory; - /** - * Inventory inside the weapons platform - */ - protected NonNullList inventoryPlatform; - /** - * Inventory inside the multiblock base - */ - protected NonNullList inventoryBase; @Nullable - protected ItemStackHandler inventoryPlatformHandler; + protected IEInventoryHandler inventoryBaseHandler; + @Nullable + protected IEInventoryHandler inventoryPlatformHandler; + + protected GunShootingHandler gunHandler = new GunShootingHandler(); + protected GunRecoil recoil = new GunRecoil(); @Nullable - protected ItemStackHandler inventoryBaseHandler; + protected GunAmmoProviderItemHandler platformAmmoProvider; /** - * Called after the weapon is installed or loaded from NBT - * Initialize sight AABB here + * Called after the weapon is installed or loaded from NBT. + * Initialize sight AABB here. */ protected void onInit(TileEntityEmplacement te) { @@ -64,55 +64,204 @@ public EmplacementStateNeeds onUpdate(TileEntityEmplacement te, EmplacementState { if(!te.getWorld().isRemote&&te.getOwnerIdentity()!=null) ammoFactory.setOwner(te.getOwnerIdentity().getFirstResponsibleMember(te.getWorld())); + + ensureShootingComponents(); + if(gunHandler!=null) + gunHandler.update(); + return super.onUpdate(te, baseNeeds, currentTarget); } - @Nullable - @Override - public IItemHandler getBaseItemHandler() + protected void ensureShootingComponents() { - return inventoryBaseHandler; + if(platformAmmoProvider==null&&inventoryPlatformHandler!=null) + { + platformAmmoProvider = new GunAmmoProviderItemHandler(null, () -> null, inventoryPlatformHandler, + ammoFactory::isValidAmmo, getReloadDelay()); + //noinspection unchecked + gunHandler.withAmmoProvider(platformAmmoProvider) + .withAmmoFactory((AmmoFactory)ammoFactory) + .withRecoilHandler(recoil) + .withMaxShotDelay(getShotDelay()); + } } @SideOnly(Side.CLIENT) @Override public void initializeGUI(DecoPanel panelBase, DecoPanel panelPlatform) { - //panelBase.addComponent(new DecoItemStackListDisplay()); + } @Override public boolean canShoot(TileEntityEmplacement te) { - return false; + ensureShootingComponents(); + return platformAmmoProvider!=null&&(platformAmmoProvider.isLoaded()||platformAmmoProvider.hasAvailableAmmo()); + } + + @Override + protected boolean shoot(TileEntityEmplacement te, TargetCoordinateReference target) + { + ensureShootingComponents(); + if(te.getWorld().isRemote||platformAmmoProvider==null||gunHandler==null) + return false; + + if(platformAmmoProvider.isEmpty()&&platformAmmoProvider.hasAvailableAmmo()) + gunHandler.startReloading(); + if(!platformAmmoProvider.isLoaded()) + return false; + + if(baseEntity!=null) + blusunrize.immersiveengineering.common.util.Utils.attractEnemies(baseEntity, 24); + + ammoFactory.setPositionAndVelocity(te.getWeaponCenter(), this.aim, 0.25f, 1f); + return gunHandler.fire(); + } + + /** + * The weapon should be brought down when the platform has no available shot. + */ + @Override + public boolean needsSupply(TileEntityEmplacement te) + { + ensureShootingComponents(); + return platformAmmoProvider!=null&&!platformAmmoProvider.isLoaded()&&!platformAmmoProvider.hasAvailableAmmo(); + } + + @Override + public boolean needsRestock(TileEntityEmplacement te) + { + return inventoryBaseHandler!=null&&inventoryPlatformHandler!=null + &&isHandlerEmpty(inventoryPlatformHandler) + &&!isHandlerEmpty(inventoryBaseHandler); + } + + @Override + public boolean restockFromBase(TileEntityEmplacement te) + { + if(inventoryBaseHandler==null||inventoryPlatformHandler==null) + return false; + + boolean changed = false; + for(int baseSlot = 0; baseSlot < inventoryBaseHandler.getSlots(); baseSlot++) + { + ItemStack available = inventoryBaseHandler.getStackInSlot(baseSlot); + if(available.isEmpty()) + continue; + + ItemStack moving = available.copy(); + for(int platformSlot = 0; platformSlot < inventoryPlatformHandler.getSlots()&&!moving.isEmpty(); platformSlot++) + moving = inventoryPlatformHandler.insertItem(platformSlot, moving, false); + + int moved = available.getCount()-moving.getCount(); + if(moved > 0) + { + inventoryBaseHandler.extractItem(baseSlot, moved, false); + changed = true; + } + + if(!isHandlerEmpty(inventoryPlatformHandler)) + break; + } + return changed; + } + + protected boolean isHandlerEmpty(IEInventoryHandler handler) + { + for(int i = 0; i < handler.getSlots(); i++) + if(!handler.getStackInSlot(i).isEmpty()) + return false; + return true; } @Override public void setDead() { super.setDead(); - this.ammoFactory - .setShooterAndGun(null, null) - .setIgnoredEntities(Collections.emptyList()); + if(this.ammoFactory!=null) + this.ammoFactory + .setShooterAndGun(null, null) + .setIgnoredEntities(Collections.emptyList()); } - //--- NBT ---// + @Nullable + @Override + public IEInventoryHandler getBaseItemHandler() + { + return inventoryBaseHandler; + } + @Nullable @Override - public void deserializeNBT(NBTTagCompound nbt) + public IEInventoryHandler getPlatformItemHandler() { - super.deserializeNBT(nbt); - if(nbt.hasKey("inventory_platform")) + return inventoryPlatformHandler; + } + + /** + * Creates tile-backed IE inventory handlers for weapons that do not require item filtering. + */ + protected final void setupItemHandlers(TileEntityEmplacement te, int baseSlots, int platformSlots) + { + setupItemHandlers(te, baseSlots, platformSlots, stack -> true, stack -> true); + } + + /** + * Creates tile-backed IE inventory handlers for this weapon. + * + * @param te Emplacement tile entity + * @param baseSlots slots reserved at the start of the tile inventory + * @param platformSlots slots reserved directly after the base section + * @param baseFilter filter for base-section insertion + * @param platformFilter filter for platform-section insertion + */ + protected final void setupItemHandlers(TileEntityEmplacement te, int baseSlots, int platformSlots, + Predicate baseFilter, Predicate platformFilter) + { + baseSlots = Math.max(0, Math.min(baseSlots, te.inventory.size())); + platformSlots = Math.max(0, Math.min(platformSlots, te.inventory.size()-baseSlots)); + + this.inventoryBaseHandler = baseSlots > 0? + new FilteredEmplacementInventoryHandler(baseSlots, te, 0, baseFilter): null; + this.inventoryPlatformHandler = platformSlots > 0? + new FilteredEmplacementInventoryHandler(platformSlots, te, baseSlots, platformFilter): null; + this.platformAmmoProvider = null; + } + + /** + * IE's inventory handler already performs the normal tile inventory write/read logic; + * this small extension only adds a per-weapon stack filter before delegating to it. + */ + protected static class FilteredEmplacementInventoryHandler extends IEInventoryHandler + { + private final Predicate filter; + + public FilteredEmplacementInventoryHandler(int slots, TileEntityEmplacement inventory, int slotOffset, Predicate filter) + { + super(slots, inventory, slotOffset, true, true); + this.filter = filter==null?stack -> true: filter; + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - NonNullList stacks = Utils.readInventory(nbt.getTagList("inventory_platform", 10), inventoryPlatform.size()); - for(int i = 0; i < stacks.size(); i++) - inventoryPlatform.set(i, stacks.get(i)); + if(!accepts(stack)) + return stack; + return super.insertItem(slot, stack, simulate); } - if(nbt.hasKey("inventory_base")) + + @Override + public void setStackInSlot(int slot, @Nonnull ItemStack stack) { - NonNullList stacks = Utils.readInventory(nbt.getTagList("inventory_base", 10), inventoryBase.size()); - for(int i = 0; i < stacks.size(); i++) - inventoryBase.set(i, stacks.get(i)); + if(!stack.isEmpty()&&!filter.test(stack)) + return; + super.setStackInSlot(slot, stack); + } + + public boolean accepts(ItemStack stack) + { + return !stack.isEmpty()&&filter.test(stack); } } @@ -120,8 +269,18 @@ public void deserializeNBT(NBTTagCompound nbt) public NBTTagCompound serializeNBT() { NBTTagCompound nbt = super.serializeNBT(); - nbt.setTag("inventory_platform", Utils.writeInventory(inventoryPlatform)); - nbt.setTag("inventory_base", Utils.writeInventory(inventoryBase)); + nbt.setTag("gunHandler", gunHandler.serializeNBT()); + nbt.setTag("recoil", recoil.serializeNBT()); return nbt; } + + @Override + public void deserializeNBT(NBTTagCompound nbt) + { + super.deserializeNBT(nbt); + if(nbt.hasKey("gunHandler")) + gunHandler.deserializeNBT((net.minecraft.nbt.NBTTagFloat)nbt.getTag("gunHandler")); + if(nbt.hasKey("recoil")) + recoil.deserializeNBT(nbt.getCompoundTag("recoil")); + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponHeavyChemthrower.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponHeavyChemthrower.java index 94c31b326..7ae19596a 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponHeavyChemthrower.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponHeavyChemthrower.java @@ -7,6 +7,7 @@ import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import pl.pabilo8.immersiveintelligence.api.data.DataPacket; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.panel.DecoPanel; import pl.pabilo8.immersiveintelligence.client.gui.deco.component.storage.DecoFluidTank; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.EmplacementWeapons.HeavyChemthrower; @@ -149,6 +150,12 @@ private double getStackMass() return 0; } + @Override + public boolean handleDataCommand(DataPacket packet) + { + return super.handleDataCommand(packet); + } + static class SidedFluidHandler implements IFluidHandler { EmplacementWeaponHeavyChemthrower barrel; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponHeavyRailgun.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponHeavyRailgun.java index 1377960e4..44d5e5cf3 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponHeavyRailgun.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponHeavyRailgun.java @@ -1,12 +1,10 @@ package pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.weapon; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.EmplacementWeapons.HeavyRailgun; +import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.TileEntityEmplacement; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; import pl.pabilo8.immersiveintelligence.common.item.weapons.ItemIIRailgunOverride; -import pl.pabilo8.immersiveintelligence.common.util.multiblock.FilteredItemHandler; import pl.pabilo8.immersiveintelligence.common.util.multiblock.util.MultiblockInteractablePart; /** @@ -18,8 +16,6 @@ public class EmplacementWeaponHeavyRailgun extends EmplacementWeaponGunBase { public EmplacementWeaponLightHowitzer() { - this.inventoryBase = NonNullList.withSize(12, ItemStack.EMPTY); - this.inventoryPlatform = NonNullList.withSize(6, ItemStack.EMPTY); } @Override protected void onInit(TileEntityEmplacement te) { super.onInit(te); + this.ammoFactory.setAmmo(IIContent.itemAmmoLightArtillery); this.visionAABB = this.visionAABB.grow(Autocannon.detectionRadius); this.attackAABB = this.attackAABB.grow(Autocannon.attackRadius); - this.inventoryBaseHandler = new FilteredItemHandler(inventoryBase) - .withFilter(this.ammoFactory::isValidAmmo); + setupItemHandlers(te, 12, 6, this.ammoFactory::isValidAmmo, this.ammoFactory::isValidAmmo); this.aim.withAimSpeed(CPDS.yawRotateSpeed, CPDS.pitchRotateSpeed); this.ammoFactory.setUseArtilleryAngles(true); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponMachinegun.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponMachinegun.java index 68e67a858..eecc95e71 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponMachinegun.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponMachinegun.java @@ -1,11 +1,9 @@ package pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.weapon; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.EmplacementWeapons.Machinegun; +import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.TileEntityEmplacement; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; -import pl.pabilo8.immersiveintelligence.common.util.multiblock.FilteredItemHandler; import pl.pabilo8.immersiveintelligence.common.util.multiblock.util.MultiblockInteractablePart; /** @@ -17,8 +15,6 @@ public class EmplacementWeaponMachinegun extends EmplacementWeaponGunBase { public EmplacementWeaponMortar() { - this.inventoryBase = NonNullList.withSize(12, ItemStack.EMPTY); - this.inventoryPlatform = NonNullList.withSize(6, ItemStack.EMPTY); } @Override protected void onInit(TileEntityEmplacement te) { super.onInit(te); + this.ammoFactory.setAmmo(IIContent.itemAmmoMortar); this.visionAABB = this.visionAABB.grow(Autocannon.detectionRadius); this.attackAABB = this.attackAABB.grow(Autocannon.attackRadius); - this.inventoryBaseHandler = new FilteredItemHandler(inventoryBase) - .withFilter(this.ammoFactory::isValidAmmo); + setupItemHandlers(te, 12, 6, this.ammoFactory::isValidAmmo, this.ammoFactory::isValidAmmo); this.aim.withAimSpeed(CPDS.yawRotateSpeed, CPDS.pitchRotateSpeed); this.ammoFactory.setUseArtilleryAngles(true); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponRocketLauncher.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponRocketLauncher.java index 856c4563e..1b8fc15f6 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponRocketLauncher.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponRocketLauncher.java @@ -1,30 +1,26 @@ package pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.weapon; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.EmplacementWeapons.Autocannon; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.EmplacementWeapons.CPDS; +import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.TileEntityEmplacement; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; -import pl.pabilo8.immersiveintelligence.common.util.multiblock.FilteredItemHandler; public class EmplacementWeaponRocketLauncher extends EmplacementWeaponGunBase { public EmplacementWeaponRocketLauncher() { - this.inventoryBase = NonNullList.withSize(12, ItemStack.EMPTY); - this.inventoryPlatform = NonNullList.withSize(6, ItemStack.EMPTY); } @Override protected void onInit(TileEntityEmplacement te) { super.onInit(te); + this.ammoFactory.setAmmo(IIContent.itemAmmoRocketLight); this.visionAABB = this.visionAABB.grow(Autocannon.detectionRadius); this.attackAABB = this.attackAABB.grow(Autocannon.attackRadius); - this.inventoryBaseHandler = new FilteredItemHandler(inventoryBase) - .withFilter(this.ammoFactory::isValidAmmo); + setupItemHandlers(te, 12, 6, this.ammoFactory::isValidAmmo, this.ammoFactory::isValidAmmo); this.aim.withAimSpeed(CPDS.yawRotateSpeed, CPDS.pitchRotateSpeed); this.ammoFactory.setUseArtilleryAngles(true); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponTurretBase.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponTurretBase.java index e93f0c0fc..ef3f01488 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponTurretBase.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/multiblock/metal_multiblock1/tileentity/emplacement/weapon/EmplacementWeaponTurretBase.java @@ -5,8 +5,8 @@ import net.minecraft.util.math.Vec3d; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.TileEntityEmplacement; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.TileEntityEmplacement.EmplacementStateNeeds; -import pl.pabilo8.immersiveintelligence.common.util.GunAimCoordinate; import pl.pabilo8.immersiveintelligence.common.util.easynbt.TargetCoordinateReference; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunAimCoordinate; import pl.pabilo8.immersiveintelligence.common.util.multiblock.util.MultiblockInteractablePart; import javax.annotation.Nullable; @@ -36,10 +36,22 @@ protected void onInit(TileEntityEmplacement te) @Override public EmplacementStateNeeds onUpdate(TileEntityEmplacement te, EmplacementStateNeeds baseNeeds, TargetCoordinateReference currentTarget) { + if(shootDelay > 0) + shootDelay--; + + if(currentTarget==null||!currentTarget.shouldBeExecuted(te.getWorld())) + { + if(this.setup!=null) + { + this.setup.setState(false); + this.setup.update(); + } + return super.onUpdate(te, baseNeeds, currentTarget); + } + Vec3d target = currentTarget.supplyCoordinates(); if(target!=null) - this.aim.setTarget(te.getWeaponCenter(), Vec3d.ZERO, - target, Vec3d.ZERO); + this.aim.setTarget(te.getWeaponCenter(), Vec3d.ZERO, target, getTargetMotion(currentTarget)); this.aim.update(); if(this.setup!=null) @@ -48,19 +60,36 @@ public EmplacementStateNeeds onUpdate(TileEntityEmplacement te, EmplacementState this.setup.update(); } - return super.onUpdate(te, baseNeeds, currentTarget); + if(isReadyToShoot(te)&&shoot(te, currentTarget)) + currentTarget.notifyAfterShot(); + + return EmplacementStateNeeds.WANTS_SURFACE; + } + + protected Vec3d getTargetMotion(TargetCoordinateReference target) + { + if(target.getEntity()!=null) + return new Vec3d(target.getEntity().motionX, target.getEntity().motionY, target.getEntity().motionZ); + return Vec3d.ZERO; + } + + protected boolean isReadyToShoot(TileEntityEmplacement te) + { + return shootDelay <= 0&&te.door.isFullyOpened()&&(setup==null||setup.isFullyOpened())&&aim.isAimed(1.5f)&&canShoot(te); } public abstract boolean canShoot(TileEntityEmplacement te); /** - * Used for shooting action + * Used for shooting action. Base turret logic only handles attract/noise bookkeeping; + * concrete weapons should return true only after actually spawning a projectile/effect. */ - public void shoot(TileEntityEmplacement te) + protected boolean shoot(TileEntityEmplacement te, TargetCoordinateReference target) { if(baseEntity!=null) Utils.attractEnemies(baseEntity, 24); this.shootDelay = getShotDelay(); + return false; } public boolean requiresZeroingBeforeReload() @@ -79,6 +108,7 @@ public NBTTagCompound serializeNBT() nbt.setTag("aim", aim.serializeNBT()); if(setup!=null) nbt.setTag("setup", setup.serializeNBT()); + nbt.setInteger("shootDelay", shootDelay); return nbt; } @@ -89,5 +119,6 @@ public void deserializeNBT(NBTTagCompound nbt) aim.deserializeNBT(nbt.getCompoundTag("aim")); if(setup!=null) setup.deserializeNBT(nbt.getCompoundTag("setup")); + shootDelay = nbt.getInteger("shootDelay"); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/simple/BlockIIAdvancedExplosives.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/simple/BlockIIAdvancedExplosives.java index 31f6ec293..165bb60f6 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/block/simple/BlockIIAdvancedExplosives.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/block/simple/BlockIIAdvancedExplosives.java @@ -16,8 +16,6 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; - -import java.util.Random; import pl.pabilo8.immersiveintelligence.api.ammo.enums.ComponentEffectShape; import pl.pabilo8.immersiveintelligence.api.ammo.parts.AmmoComponent; import pl.pabilo8.immersiveintelligence.common.IIContent; @@ -29,6 +27,7 @@ import pl.pabilo8.immersiveintelligence.common.util.item.IICategory; import javax.annotation.Nullable; +import java.util.Random; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -153,7 +152,7 @@ public void explode(World world, BlockPos pos, IBlockState state, @Nullable Enti default: return; //Nie wolno, nie można, nie potrzeba nam tego } - component.onEffect(world, new Vec3d(pos), Vec3d.ZERO, ComponentEffectShape.ORB, new NBTTagCompound(), 1.0f, 1.0f, igniter); + component.onEffect(world, new Vec3d(pos), new Vec3d(0, -1, 0), ComponentEffectShape.ORB, new NBTTagCompound(), 1.0f, 1.0f, igniter); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/commands/CommandIIHans.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/commands/CommandIIHans.java index 424d1f683..be8a6da9f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/commands/CommandIIHans.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/commands/CommandIIHans.java @@ -32,9 +32,9 @@ import pl.pabilo8.immersiveintelligence.api.ammo.enums.FuseType; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.entity.EntityHans; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMachinegun; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMortar; import pl.pabilo8.immersiveintelligence.common.entity.hans.HansUtils; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMachinegun; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMortar; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun.EntityFieldHowitzer; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat; import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIBulletMagazine.Magazines; @@ -296,7 +296,7 @@ protected EntityDonkey spawnTeamWeapon(World world, Vec3d pos, Team team, boolea IIContent.itemMachinegun.recalculateUpgrades(mgstack); IIContent.itemMachinegun.finishUpgradeRecalculation(mgstack); - EntityMachinegun mg = new EntityMachinegun(world, new BlockPos(pos).down(), yaw, 0, mgstack); + EntityMachinegun mg = new EntityMachinegun(world, new BlockPos(pos).down(), yaw, mgstack); world.spawnEntity(mg); EntityDonkey donkey = new EntityDonkey(world); @@ -717,7 +717,7 @@ protected EntityMachinegun spawnTeamWeapon(World world, Vec3d pos, Team team, bo IIContent.itemMachinegun.recalculateUpgrades(mgstack); IIContent.itemMachinegun.finishUpgradeRecalculation(mgstack); - EntityMachinegun mg = new EntityMachinegun(world, new BlockPos(pos).down(), yaw, 0, mgstack); + EntityMachinegun mg = new EntityMachinegun(world, new BlockPos(pos).down(), yaw, mgstack); world.spawnEntity(mg); return mg; } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/commands/item/CommandIIGiveBullet.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/commands/item/CommandIIGiveBullet.java index e4dde1f63..69cddfa6b 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/commands/item/CommandIIGiveBullet.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/commands/item/CommandIIGiveBullet.java @@ -17,6 +17,7 @@ import pl.pabilo8.immersiveintelligence.api.ammo.parts.AmmoCore; import pl.pabilo8.immersiveintelligence.api.ammo.parts.IAmmoTypeItem; import pl.pabilo8.immersiveintelligence.api.ammo.utils.AmmoFactory; +import pl.pabilo8.immersiveintelligence.common.IIUtils; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -63,7 +64,7 @@ public void execute(@Nonnull MinecraftServer server, @Nonnull ICommandSender sen IAmmoTypeItem ammoType = AmmoRegistry.getAmmoItem(args[1]); AmmoCore core = AmmoRegistry.getCore(args[2]); CoreType coreType = CoreType.v(args[3]); - FuseType fuse = FuseType.v(args[4]); + FuseType fuse = IIUtils.enumValue(FuseType.class, args[4]); //Load components ArrayList components = new ArrayList<>(); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/compat/jei/DecoGuiJEIHandler.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/compat/jei/DecoGuiJEIHandler.java index 532fdb9ff..be90ad04a 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/compat/jei/DecoGuiJEIHandler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/compat/jei/DecoGuiJEIHandler.java @@ -5,7 +5,7 @@ import mezz.jei.api.gui.IAdvancedGuiHandler; import pl.pabilo8.immersiveintelligence.client.gui.deco.DecoGui; import pl.pabilo8.immersiveintelligence.common.IIGUI; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; import javax.annotation.Nullable; import java.awt.*; @@ -15,7 +15,7 @@ * @author Pabilo8 (pabilo@iiteam.net) * @since 24.03.2021 */ -public class DecoGuiJEIHandler, T extends TileEntityIEBase & IIEInventory, C extends ContainerIIBase> implements IAdvancedGuiHandler +public class DecoGuiJEIHandler, T extends TileEntityIEBase & IIEInventory, C extends ContainerIITileBase> implements IAdvancedGuiHandler { Class wrappedClass; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/crafting/IIRecipes.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/crafting/IIRecipes.java index 26efb226e..1643980c1 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/crafting/IIRecipes.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/crafting/IIRecipes.java @@ -95,9 +95,9 @@ /** * @author Pabilo8 (pabilo@iiteam.net) * @author Avalon (avalon@iiteam.net) + * @updated 29.4.2026 * @since 22.03.2020 * @since 28.11.2024 - * @updated 29.4.2026 */ public class IIRecipes { @@ -293,7 +293,7 @@ public int[] getInkTypesRequired(DataPacket data) @Override public ItemStack apply(ItemStack input, DataPacket data) { - return IIContent.itemPrintedPage.getStack(PageType.TEXT, + return IIContent.itemPrintedPage.getStack(PageType.CODE, nbt -> nbt.withString("text", data.get('t').toString()) ); } @@ -492,7 +492,7 @@ public static void addCircuitRecipes() new IngredientStack[]{new IngredientStack("plateSteel"), new IngredientStack("wireTungsten", 2), new IngredientStack("electronTube", 2)}, new String[]{"inserter", "solderer", "drill"}, - new String[]{ "inserter pick first", "inserter drop main", "drill work main", "inserter pick second", "inserter drop main", "solderer work main", "inserter pick third", "inserter drop main", "solderer work main"}, + new String[]{"inserter pick first", "inserter drop main", "drill work main", "inserter pick second", "inserter drop main", "solderer work main", "inserter pick third", "inserter drop main", "solderer work main"}, 24000, 1.25f @@ -609,7 +609,7 @@ public static void addBulletPressRecipes() PressMolds.HOWITZER, 2800); addMetalPressBullet(Casing.MEDIUM_ARTILLERY_6BCAL, new IngredientStack("plateBrass", 3), - PressMolds.HOWITZER, 2500); + PressMolds.MEDIUM_HOWITZER, 2500); addMetalPressBullet(Casing.MORTAR_6BCAL, new IngredientStack("plateAluminum", 3), PressMolds.MORTAR, 2500); @@ -618,7 +618,7 @@ public static void addBulletPressRecipes() PressMolds.LIGHT_HOWITZER, 2200); addMetalPressBullet(Casing.LIGHT_GUN_4BCAL, new IngredientStack("ingotBrass", 2), - PressMolds.AUTOCANNON, 1600); + PressMolds.LIGHT_GUN, 1600); addMetalPressBullet(Casing.AUTOCANNON_3BCAL, new IngredientStack("ingotBrass", 2), diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/EntityHans.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/EntityHans.java index ac799eee8..2a34dc07a 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/EntityHans.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/EntityHans.java @@ -51,6 +51,8 @@ import pl.pabilo8.immersiveintelligence.common.entity.hans.tasks.idle.AIHansKazachok; import pl.pabilo8.immersiveintelligence.common.entity.hans.tasks.idle.AIHansSalute; import pl.pabilo8.immersiveintelligence.common.entity.hans.tasks.idle.AIHansTimedLookAtEntity; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMachinegun; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMortar; import pl.pabilo8.immersiveintelligence.common.item.armor.ItemIILightEngineerHelmet; import pl.pabilo8.immersiveintelligence.common.util.IIColor; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/EntityMachinegun.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/EntityMachinegun.java deleted file mode 100644 index 7a50cc899..000000000 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/EntityMachinegun.java +++ /dev/null @@ -1,1174 +0,0 @@ -package pl.pabilo8.immersiveintelligence.common.entity; - -import blusunrize.immersiveengineering.api.Lib; -import blusunrize.immersiveengineering.api.tool.ZoomHandler; -import blusunrize.immersiveengineering.common.util.EnergyHelper; -import blusunrize.immersiveengineering.common.util.ItemNBTHelper; -import blusunrize.immersiveengineering.common.util.Utils; -import io.netty.buffer.ByteBuf; -import net.minecraft.block.material.Material; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.datasync.DataParameter; -import net.minecraft.network.datasync.DataSerializers; -import net.minecraft.network.datasync.EntityDataManager; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.*; -import net.minecraft.util.math.*; -import net.minecraft.world.World; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; -import net.minecraftforge.fluids.FluidUtil; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandlerItem; -import net.minecraftforge.fluids.capability.IFluidTankProperties; -import net.minecraftforge.fml.common.network.ByteBufUtils; -import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; -import pl.pabilo8.immersiveintelligence.api.MachinegunCoolantHandler; -import pl.pabilo8.immersiveintelligence.api.ammo.parts.IAmmoTypeItem; -import pl.pabilo8.immersiveintelligence.api.ammo.utils.AmmoFactory; -import pl.pabilo8.immersiveintelligence.api.utils.IEntitySpecialRepairable; -import pl.pabilo8.immersiveintelligence.api.utils.camera.IEntityZoomProvider; -import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedTextOverlay; -import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoomTool; -import pl.pabilo8.immersiveintelligence.client.util.CameraHandler; -import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.Machinegun; -import pl.pabilo8.immersiveintelligence.common.IIContent; -import pl.pabilo8.immersiveintelligence.common.IIPotions; -import pl.pabilo8.immersiveintelligence.common.IISounds; -import pl.pabilo8.immersiveintelligence.common.block.metal_device.tileentity.effect_crate.TileEntityAmmunitionCrate; -import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; -import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIBulletMagazine; -import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; -import pl.pabilo8.immersiveintelligence.common.network.messages.MessageEntityNBTSync; -import pl.pabilo8.immersiveintelligence.common.network.messages.MessagePlayerAimAnimationSync; -import pl.pabilo8.immersiveintelligence.common.util.IIMath; -import pl.pabilo8.immersiveintelligence.common.util.sound.AdvancedSounds.RangedSound; - -import javax.annotation.Nullable; - -/** - * @author Pabilo8 (pabilo@iiteam.net) - * @since 01.11.2019 - */ -//TODO: 15.02.2024 full rework needed -public class EntityMachinegun extends Entity implements IEntityAdditionalSpawnData, IAdvancedTextOverlay, IEntitySpecialRepairable, IEntityZoomProvider -{ - private static final ResourceLocation SIGHTS_TEXTURE = new ResourceLocation(ImmersiveIntelligence.MODID, "textures/gui/item/machinegun/scope.png"); - private static final ResourceLocation IR_SIGHTS_TEXTURE = new ResourceLocation(ImmersiveIntelligence.MODID, "textures/gui/item/machinegun/scope_infrared.png"); - - //TODO: switch nbt sending to DataParameters - private static final DataParameter dataMarkerFluid = EntityDataManager.createKey(EntityMachinegun.class, DataSerializers.COMPOUND_TAG); - private static final DataParameter dataMarkerFluidCap = EntityDataManager.createKey(EntityMachinegun.class, DataSerializers.VARINT); - - private final MachinegunZoom SCOPE = new MachinegunZoom(); - private final AmmoFactory ammoFactory; - //Second magazine is an upgrade - public ItemStack gun = ItemStack.EMPTY, magazine1 = ItemStack.EMPTY, magazine2 = ItemStack.EMPTY; - public int bulletDelay = 0, bulletDelayMax = 0, clipReload = 0, setupTime = Machinegun.setupTime, maxSetupTime = Machinegun.setupTime, overheating = 0, tankCapacity = 0, bullets1 = 0, bullets2 = 0; - public float setYaw = 0, recoilYaw = 0, recoilPitch = 0, gunYaw = 0, gunPitch = 0, maxRecoilPitch = Machinegun.recoilHorizontal, maxRecoilYaw = Machinegun.recoilVertical, currentlyLoaded = -1, shieldStrength = 0f, maxShieldStrength = 0f; - public boolean shoot = false, aiming = false, hasSecondMag = false, mag1Empty = false, mag2Empty = false, hasInfrared = false, loadedFromCrate = false, overheated = false, tripod = false; - public FluidTank tank = new FluidTank(tankCapacity); - - AxisAlignedBB aabb = new AxisAlignedBB(0.15d, 0d, 0.15d, 0.85d, 0.65d, 0.85d).offset(-0.5, 0, -0.5); - NonSidedFluidHandler fluidHandler = new NonSidedFluidHandler(this); - - - public EntityMachinegun(World worldIn) - { - super(worldIn); - this.ammoFactory = new AmmoFactory<>(this); - } - - public EntityMachinegun(World world, BlockPos pos, float yaw, float pitch, ItemStack stack) - { - super(world); - this.ammoFactory = new AmmoFactory<>(this); - - float height = 0; - this.gun = stack.copy(); - getConfigFromItem(this.gun); - - this.setSize(0.5f, tripod?1.625f: 0.5f); - AxisAlignedBB aabb = world.getBlockState(pos).getBoundingBox(world, pos); - height -= 1f-(aabb.maxY-aabb.minY); - this.setPositionAndRotation(pos.getX()+0.5f, pos.getY()+1f+height+(tripod?0.875f: 0f), pos.getZ()+0.5f, yaw, pitch); - this.setYaw = yaw; - } - - @Override - public boolean attackEntityFrom(DamageSource source, float amount) - { - if(!isDead) - { - if(source.isProjectile()) - { - Vec3d v = source.getDamageLocation(); - if(v!=null) - { - v = v.subtract(posX, posY, posZ); - if(getHorizontalFacing()==EnumFacing.getFacingFromVector((float)v.x, (float)v.y, (float)v.z)) - { - this.shieldStrength -= amount; - if(shieldStrength > 0) - return false; - } - } - } - /* - if(!world.isRemote&&amount > 10) - { - dropItem(); - if(shoot&&(!mag1Empty||!mag2Empty)) - world.createExplosion(source.getTrueSource(), this.posX, this.posY+0.5, this.posZ, 1, true); - } - */ - } - return super.attackEntityFrom(source, amount); - } - - @Override - public ItemStack getPickedResult(RayTraceResult target) - { - return gun; - } - - @Override - public AxisAlignedBB getEntityBoundingBox() - { - return aabb.offset(getPositionVector()); - } - - @Nullable - @Override - public AxisAlignedBB getCollisionBoundingBox() - { - return getEntityBoundingBox(); - } - - @Nullable - @Override - public AxisAlignedBB getCollisionBox(Entity entityIn) - { - return getEntityBoundingBox(); - } - - @Override - public boolean canRenderOnFire() - { - return false; - } - - @Override - public void setFire(int seconds) - { - } - - @Override - public boolean canPassengerSteer() - { - return false; - } - - @Override - public void onEntityUpdate() - { - super.onEntityUpdate(); - //Do stuff - - if(!world.isRemote&&world.getTotalWorldTime()%10==0) - { - if(getRidingEntity()==null&&world.getBlockState(getPosition().offset(EnumFacing.DOWN, tripod?2: 1)).getMaterial().equals(Material.AIR)) - { - dropItem(); - return; - } - else if(getRidingEntity()!=null) - { - this.setYaw = getRidingEntity().getRotationYawHead(); - setEntityBoundingBox(aabb); - setPositionAndUpdate(posX, posY, posZ); - } - } - - if(!world.isRemote&&hasInfrared&&getPassengers().size() > 0&&getPassengers().get(0)!=null&&world.getTotalWorldTime()%20==0) - { - - if(aiming) - { - if(getPassengers().get(0) instanceof EntityLivingBase) - { - EntityLivingBase ent = (EntityLivingBase)getPassengers().get(0); - int energy = 0; - for(ItemStack stack : ent.getArmorInventoryList()) - if(EnergyHelper.isFluxItem(stack)) - { - int out = EnergyHelper.extractFlux(stack, Machinegun.infraredScopeEnergyUsage*20, false); - if(out > 0) - { - ent.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, Math.round(out/(float)(Machinegun.infraredScopeEnergyUsage)*1.25f), 2, true, false)); - break; - } - } - } - } - } - - if(world.getTotalWorldTime()%120==0) - { - if(world.isRemote) - updateTank(true); - else - { - NBTTagCompound tag = new NBTTagCompound(); - tag.setBoolean("forClient", true); - writeEntityToNBT(tag); - IIPacketHandler.INSTANCE.sendToAllAround(new MessageEntityNBTSync(this, tag), IIPacketHandler.targetPointFromEntity(this, 24)); - } - } - - if(getPassengers().size() > 0&&getPassengers().get(0)!=null) - { - if(recoilPitch!=0||recoilYaw!=0) - { - recoilPitch /= 2; - recoilYaw /= 2; - - if(recoilPitch < 0.5f&&recoilPitch > -0.5f) - recoilPitch = 0; - if(recoilYaw < 0.5f&&recoilYaw > -0.5f) - recoilYaw = 0; - } - - if(getPassengers().get(0) instanceof EntityLivingBase) - { - EntityLivingBase psg = (EntityLivingBase)getPassengers().get(0); - - if(setupTime < 1) - { - doRotationsWithPlayer(psg); - - if(magazine1.isEmpty()) - mag1Empty = true; - if(hasSecondMag&&magazine2.isEmpty()) - mag2Empty = true; - - if(overheating > Machinegun.maxOverheat) - { - overheated = true; - } - overheating = Math.max(0, overheating-1); - if(world.getTotalWorldTime()%2==0&&overheating > 0&&tank.getFluid()!=null&&tank.getFluidAmount() >= Machinegun.waterCoolingFluidUsage) - { - overheating = Math.max(0, overheating-MachinegunCoolantHandler.getCoolAmount(tank.getFluid())); - tank.drain(Machinegun.waterCoolingFluidUsage, true); - } - - if(overheated&&overheating==0) - overheated = false; - - if(!world.isRemote) - { - if(!overheated) - { - if(shoot) - { - if(clipReload==0) - { - if(bulletDelay < 1) - { - if(!loadedFromCrate) - { - if(hasSecondMag&&!mag2Empty) - mag2Empty = !shoot(2); - else if(!mag1Empty) - mag1Empty = !shoot(1); - } - else - { - shootFromCrate(); - } - - } - else - bulletDelay -= 1; - } - } - } - - - } - if(!shoot&&!loadedFromCrate) - { - if(mag1Empty||mag2Empty) - { - boolean b1 = false, b2 = false; - if(currentlyLoaded==-1||currentlyLoaded==2) - b1 = processEmptyMagazine(mag2Empty, magazine2, psg, EntityEquipmentSlot.OFFHAND, 2); - if(currentlyLoaded==-1||currentlyLoaded==1) - b2 = processEmptyMagazine(mag1Empty, magazine1, psg, EntityEquipmentSlot.MAINHAND, 1); - - if(!b1&&!b2) - currentlyLoaded = -1; - } - } - - - } - else - { - setupTime -= 1; - } - - } - - rotationYaw = MathHelper.wrapDegrees(setYaw+gunYaw+recoilYaw); - - rotationPitch = MathHelper.wrapDegrees(gunPitch+recoilPitch); - } - else - { - if(!world.isRemote&&setupTime > 0) - { - dropItem(); - return; - } - gunPitch = Math.max(gunPitch-1, -25); - } - - } - - @Override - public void updatePassenger(Entity passenger) - { - if(this.isPassenger(passenger)) - { - BlockPos pos = getPosition(); - double true_angle = Math.toRadians((-rotationYaw) > 180?360f-(-rotationYaw): (-rotationYaw)); - double true_angle2 = Math.toRadians((-rotationYaw-90) > 180?360f-(-rotationYaw-90): (-rotationYaw-90)); - Vec3d pos2 = IIMath.offsetPosDirection(-1.65f, true_angle, 0); - Vec3d pos3 = IIMath.offsetPosDirection(-0.25f, true_angle2, 0); - - passenger.setPosition(pos.getX()+0.5+pos2.x+pos3.x, pos.getY()-1.15, pos.getZ()+0.5+pos2.z+pos3.z); - } - } - - @Override - public double getMountedYOffset() - { - return super.getMountedYOffset(); - } - - @Override - public boolean shouldRiderSit() - { - return false; - } - - boolean processEmptyMagazine(boolean isEmpty, ItemStack magazine, EntityLivingBase entity, EntityEquipmentSlot takeFrom, int setTo) - { - if(isEmpty) - { - ItemStack playerMag = entity.getItemStackFromSlot(takeFrom); - if(!magazine.isEmpty()) - { - if(clipReload >= Machinegun.clipReloadTime) - { - currentlyLoaded = -1; - clipReload = 0; - ItemStack mag2 = magazine.copy(); - IIContent.itemBulletMagazine.defaultize(mag2); - if(!world.isRemote) - Utils.dropStackAtPos(world, entity.getPosition(), mag2); - setMagazineToSlot(setTo, ItemStack.EMPTY); - } - else - { - currentlyLoaded = setTo; - clipReload += 1; - if(!world.isRemote&&clipReload < 2) - { - NBTTagCompound tag = new NBTTagCompound(); - writeEntityToNBT(tag); - IIPacketHandler.INSTANCE.sendToAllAround(new MessageEntityNBTSync(this, tag), IIPacketHandler.targetPointFromEntity(this, 24)); - } - if(!world.isRemote&&clipReload==1) - world.playSound(null, getPosition(), IISounds.machinegunUnload, SoundCategory.BLOCKS, 1F, 1f); - } - return true; - } - else - { - if(clipReload==0) - { - if(playerMag.getItem() instanceof ItemIIBulletMagazine&&playerMag.getMetadata()==0) - { - if(IIContent.itemBulletMagazine.hasNoBullets(playerMag)) - { - currentlyLoaded = -1; - return false; - } - clipReload = 1; - currentlyLoaded = setTo; - return true; - } - } - else if(clipReload < Machinegun.clipReloadTime) - { - if(playerMag.getItem() instanceof ItemIIBulletMagazine&&playerMag.getMetadata()==0) - { - clipReload += 1; - currentlyLoaded = setTo; - if(!world.isRemote&&clipReload==Math.round(Machinegun.clipReloadTime*0.35f)) - world.playSound(null, getPosition(), IISounds.machinegunReload, SoundCategory.BLOCKS, 1F, 1f); - return true; - } - else - { - clipReload = 0; - currentlyLoaded = -1; - return false; - } - } - else - { - if(playerMag.getItem() instanceof ItemIIBulletMagazine&&playerMag.getMetadata()==0) - { - clipReload = 0; - setMagazineToSlot(setTo, playerMag.copy()); - entity.setItemStackToSlot(takeFrom, ItemStack.EMPTY); - setEmpty(setTo, false); - currentlyLoaded = -1; - if(!world.isRemote) - { - NBTTagCompound tag = new NBTTagCompound(); - bullets1 = IIContent.itemBulletMagazine.getRemainingBulletCount(magazine1); - bullets2 = IIContent.itemBulletMagazine.getRemainingBulletCount(magazine2); - writeEntityToNBT(tag); - IIPacketHandler.INSTANCE.sendToAllAround(new MessageEntityNBTSync(this, tag), IIPacketHandler.targetPointFromEntity(this, 24)); - } - return true; - } - else - { - clipReload = 0; - currentlyLoaded = -1; - return false; - } - - } - } - } - return false; - } - - void setMagazineToSlot(int mag, ItemStack stack) - { - switch(mag) - { - case 1: - { - magazine1 = stack; - } - break; - case 2: - { - magazine2 = stack; - } - break; - } - } - - void setEmpty(int mag, boolean is) - { - switch(mag) - { - case 1: - { - mag1Empty = is; - } - break; - case 2: - { - mag2Empty = is; - } - break; - } - } - - @Override - protected void entityInit() - { - this.dataManager.register(dataMarkerFluid, new NBTTagCompound()); - this.dataManager.register(dataMarkerFluidCap, 0); - } - - @Override - public void readEntityFromNBT(NBTTagCompound compound) - { - if(!compound.hasKey("clientMessage")) - { - if(compound.hasKey("currentlyLoaded")) - currentlyLoaded = compound.getFloat("currentlyLoaded"); - if(compound.hasKey("magazine1")) - magazine1 = new ItemStack(compound.getCompoundTag("magazine1")); - if(compound.hasKey("magazine2")) - magazine2 = new ItemStack(compound.getCompoundTag("magazine2")); - if(compound.hasKey("bullets1")) - bullets1 = compound.getInteger("bullets1"); - else if(!magazine1.isEmpty()) - bullets1 = IIContent.itemBulletMagazine.getRemainingBulletCount(magazine1); - if(compound.hasKey("bullets2")) - bullets2 = compound.getInteger("bullets2"); - else if(!magazine2.isEmpty()) - bullets2 = IIContent.itemBulletMagazine.getRemainingBulletCount(magazine2); - if(compound.hasKey("gun")) - { - gun = new ItemStack(compound.getCompoundTag("gun")); - if(!world.isRemote) - getConfigFromItem(new ItemStack(compound.getCompoundTag("gun"))); - } - - if(compound.hasKey("shieldStrength")) - shieldStrength = compound.getInteger("shieldStrength"); - if(compound.hasKey("maxShieldStrength")) - maxShieldStrength = compound.getInteger("maxShieldStrength"); - if(compound.hasKey("overheating")) - overheating = compound.getInteger("overheating"); - if(compound.hasKey("tankCapacity")) - tankCapacity = compound.getInteger("tankCapacity"); - if(compound.hasKey("mag1Empty")) - mag1Empty = compound.getBoolean("mag1Empty"); - if(compound.hasKey("mag2Empty")) - mag2Empty = compound.getBoolean("mag2Empty"); - if(compound.hasKey("hasSecondMag")) - hasSecondMag = compound.getBoolean("hasSecondMag"); - if(compound.hasKey("tripod")) - tripod = compound.getBoolean("tripod"); - if(compound.hasKey("loadedFromCrate")) - loadedFromCrate = compound.getBoolean("loadedFromCrate"); - if(compound.hasKey("hasInfrared")) - hasInfrared = compound.getBoolean("hasInfrared"); - if(compound.hasKey("setYaw")) - setYaw = compound.getFloat("setYaw"); - if(compound.hasKey("gunYaw")) - gunYaw = compound.getFloat("gunYaw"); - if(compound.hasKey("gunPitch")) - gunPitch = compound.getFloat("gunPitch"); - if(compound.hasKey("recoilYaw")) - recoilYaw = compound.getFloat("recoilYaw"); - if(compound.hasKey("recoilPitch")) - recoilPitch = compound.getFloat("recoilPitch"); - - if(compound.hasKey("clipReload")) - clipReload = compound.getInteger("clipReload"); - if(compound.hasKey("setupTime")) - setupTime = compound.getInteger("setupTime"); - if(compound.hasKey("maxSetupTime")) - maxSetupTime = compound.getInteger("maxSetupTime"); - } - else - { - if(compound.hasKey("shoot")) - shoot = compound.getBoolean("shoot"); - if(compound.hasKey("aiming")) - { - aiming = compound.getBoolean("aiming"); - if(isBeingRidden()) - IIPacketHandler.INSTANCE.sendToDimension(new MessagePlayerAimAnimationSync(getPassengers().get(0), aiming), this.world.provider.getDimension()); - } - - //if(compound.hasKey("reload")) - // shoot = compound.getBoolean("shoot"); - } - - } - - @Override - public void writeEntityToNBT(NBTTagCompound compound) - { - compound.setTag("gun", gun.serializeNBT()); - compound.setTag("magazine1", magazine1.serializeNBT()); - compound.setTag("magazine2", magazine2.serializeNBT()); - - compound.setBoolean("mag1Empty", mag1Empty); - compound.setBoolean("mag2Empty", mag2Empty); - compound.setBoolean("hasSecondMag", hasSecondMag); - compound.setBoolean("hasInfrared", hasInfrared); - compound.setBoolean("loadedFromCrate", loadedFromCrate); - compound.setBoolean("tripod", tripod); - compound.setFloat("currentlyLoaded", currentlyLoaded); - - compound.setFloat("shieldStrength", shieldStrength); - compound.setFloat("maxShieldStrength", maxShieldStrength); - - compound.setInteger("overheating", overheating); - compound.setInteger("tankCapacity", tankCapacity); - compound.setFloat("setYaw", setYaw); - compound.setFloat("gunYaw", gunYaw); - compound.setFloat("gunPitch", gunPitch); - compound.setFloat("recoilYaw", recoilYaw); - compound.setFloat("recoilPitch", recoilPitch); - - compound.setInteger("clipReload", clipReload); - compound.setInteger("setupTime", setupTime); - compound.setInteger("maxSetupTime", maxSetupTime); - } - - @Override - public void writeSpawnData(ByteBuf buffer) - { - ByteBufUtils.writeItemStack(buffer, gun); - NBTTagCompound tag = new NBTTagCompound(); - writeEntityToNBT(tag); - ByteBufUtils.writeTag(buffer, tag); - } - - @Override - public void readSpawnData(ByteBuf additionalData) - { - gun = ByteBufUtils.readItemStack(additionalData); - NBTTagCompound tag = ByteBufUtils.readTag(additionalData); - if(tag!=null) - readEntityFromNBT(tag); - } - - @Override - public boolean processInitialInteract(EntityPlayer player, EnumHand hand) - { - FluidStack f = FluidUtil.getFluidContained(player.getHeldItem(EnumHand.MAIN_HAND)); - if(f==null) - f = FluidUtil.getFluidContained(player.getHeldItem(EnumHand.OFF_HAND)); - - if(f!=null&&this.tankCapacity > 0) - { - if(MachinegunCoolantHandler.isValidCoolant(f)) - { - FluidUtil.interactWithFluidHandler(player, hand, tank); - if(!world.isRemote) - updateTank(false); - } - return true; - } - else if(player.isSneaking()&&player.getHeldItem(hand).isEmpty()&&getPassengers().size()==0) - { - if(!world.isRemote) - dropItem(); - return true; - } - else - { - if(!world.isRemote) - player.startRiding(this); - return true; - } - } - - @Override - protected void removePassenger(Entity passenger) - { - if(world.isRemote&&passenger instanceof EntityPlayerSP) - { - CameraHandler.setEnabled(false); - ZoomHandler.isZooming = false; - } - shoot = false; - aiming = false; - if(!world.isRemote) - IIPacketHandler.INSTANCE.sendToDimension(new MessagePlayerAimAnimationSync(passenger, false), this.world.provider.getDimension()); - super.removePassenger(passenger); - } - - @Override - public boolean canBeCollidedWith() - { - return true; - } - - @Override - public void applyOrientationToEntity(Entity entityToUpdate) - { - entityToUpdate.setRenderYawOffset(this.rotationYaw); - float f = MathHelper.wrapDegrees(entityToUpdate.rotationYaw-this.setYaw); - float f1 = tripod?MathHelper.clamp(f, -82.5F, 82.5F): MathHelper.clamp(f, -45.0F, 45.0F); - entityToUpdate.prevRotationYaw += f1-f; - entityToUpdate.rotationYaw += f1-f; - entityToUpdate.setRotationYawHead(entityToUpdate.rotationYaw); - } - - public void doRotationsWithPlayer(EntityLivingBase entity) - { - float true_head_angle; - - true_head_angle = MathHelper.wrapDegrees(entity.rotationYawHead-this.setYaw); - - if(gunYaw < true_head_angle) - gunYaw += 2; - else if(gunYaw > true_head_angle) - gunYaw -= 2; - - if(Math.ceil(gunYaw) <= Math.ceil(true_head_angle)+1&&Math.ceil(gunYaw) >= Math.ceil(true_head_angle)-1) - gunYaw = true_head_angle; - - if(gunPitch < entity.rotationPitch) - gunPitch += 1; - else if(gunPitch > entity.rotationPitch) - gunPitch -= 1; - - if(Math.ceil(gunPitch) <= Math.ceil(entity.rotationPitch)+1&&Math.ceil(gunPitch) >= Math.ceil(entity.rotationPitch)-1) - gunPitch = entity.rotationPitch; - - gunYaw = tripod?MathHelper.clamp(gunYaw, -82.5F, 82.5F): MathHelper.clamp(gunYaw, -45.0F, 45.0F); - gunPitch = MathHelper.clamp(gunPitch, -20, 20); - } - - public void shootFromStack(ItemStack stack) - { - if(stack.isEmpty()) - { - world.playSound(null, posX, posY, posZ, IISounds.machinegunShotDry, SoundCategory.PLAYERS, 0.25f, 0.9f); - return; - } - NBTTagCompound upgrades = IIContent.itemMachinegun.getUpgrades(gun); - - RangedSound sound = IISounds.machinegunShot; - if(upgrades.hasKey("heavy_barrel")) - sound = IISounds.machinegunShotHeavyBarrel; - else if(upgrades.hasKey("water_cooling")) - sound = IISounds.machinegunShotWaterCooled; - - IIPacketHandler.playRangedSound(world, getPositionVector(), - sound, SoundCategory.PLAYERS, 75, 1.5f, - 1f+(float)(Utils.RAND.nextGaussian()*0.02) - ); - - double yawAngle = Math.toRadians(360f-rotationYaw); - double pitchAngle = Math.toRadians(-(rotationPitch)); - Vec3d gun_end = IIMath.offsetPosDirection(0.95f, yawAngle, pitchAngle); - Vec3d gun_height = IIMath.offsetPosDirection(0.1875f, yawAngle, pitchAngle+90); - - Vec3d vpos = new Vec3d(posX+0.85*(gun_end.x+gun_height.x), posY+0.34375+0.85*(gun_end.y+gun_height.y), posZ+0.85*(gun_end.z+gun_height.z)); - - ammoFactory.setPosition(vpos) - .setPositionAndVelocity(vpos, gun_end, 1) - .setIgnoredEntities(getPassengers()) - .setShooterAndGun(getPassengers().get(0), this) - .setStack(stack) - .create(); - - ItemStack stack2 = ((IAmmoTypeItem)stack.getItem()).getCasingStack(1); - Utils.dropStackAtPos(world, getPosition(), stack2); - } - - public boolean shootFromCrate() - { - if(getPassengers().get(0)==null||!(getPassengers().get(0) instanceof EntityLivingBase)) - return false; - - Utils.attractEnemies((EntityLivingBase)getPassengers().get(0), 36, null); - - bulletDelay = bulletDelayMax; - recoilYaw += Math.random() > 0.5?maxRecoilYaw*2*Math.random(): -maxRecoilYaw*2*Math.random(); - recoilPitch += maxRecoilPitch*Math.random(); - if(((EntityLivingBase)getPassengers().get(0)).getActivePotionEffects().stream().anyMatch(potionEffect -> potionEffect.getPotion()==IIPotions.ironWill)) - { - recoilYaw *= 0.1; - recoilPitch *= 0.1; - } - - overheating += 8; - - NBTTagCompound tag = new NBTTagCompound(); - tag.setBoolean("forClient", true); - tag.setFloat("recoilYaw", recoilYaw); - tag.setFloat("recoilPitch", recoilPitch); - tag.setFloat("overheating", overheating); - - BlockPos cratePos = getPosition().offset(EnumFacing.fromAngle(setYaw).getOpposite()).down(); - if(world.getTileEntity(cratePos) instanceof TileEntityAmmunitionCrate) - { - TileEntityAmmunitionCrate crate = ((TileEntityAmmunitionCrate)world.getTileEntity(cratePos)); - assert crate!=null; - - if(!crate.open) - return false; - - if(crate.isUpgradeInstalled(IIContent.UPGRADE_MG_LOADER)) - { - for(int i = 38; i < 50; i++) - { - ItemStack stack = crate.getInventory().get(i); - if(stack.isEmpty()) - continue; - shootFromStack(stack); - - crate.insertionHandler.extractItem(i, 1, false); - if(!world.isRemote) - IIPacketHandler.INSTANCE.sendToAllAround(new MessageEntityNBTSync(this, tag), IIPacketHandler.targetPointFromEntity(this, 24)); - return true; - } - } - } - return false; - } - - public boolean shoot(int magazine) - { - if(getPassengers().get(0)==null||!(getPassengers().get(0) instanceof EntityLivingBase)) - return false; - - Utils.attractEnemies((EntityLivingBase)getPassengers().get(0), 36, null); - - bulletDelay = bulletDelayMax; - recoilYaw += Math.random() > 0.5?maxRecoilYaw*2*Math.random(): -maxRecoilYaw*2*Math.random(); - recoilPitch += maxRecoilPitch*Math.random(); - if(((EntityLivingBase)getPassengers().get(0)).getActivePotionEffects().stream().anyMatch(potionEffect -> potionEffect.getPotion()==IIPotions.ironWill)) - { - recoilYaw *= 0.1; - recoilPitch *= 0.1; - } - - overheating += 8; - - NBTTagCompound tag = new NBTTagCompound(); - tag.setBoolean("forClient", true); - tag.setFloat("recoilYaw", recoilYaw); - tag.setFloat("recoilPitch", recoilPitch); - tag.setFloat("overheating", overheating); - - ItemStack stack = IIContent.itemBulletMagazine.takeBullet(magazine==1?magazine1: magazine2, true); - - if(magazine==1) - { - mag1Empty = stack.isEmpty(); - if(!mag1Empty) - { - bullets1 = IIContent.itemBulletMagazine.getRemainingBulletCount(magazine1); - tag.setInteger("bullets1", bullets1); - } - } - else if(magazine==2) - { - mag2Empty = stack.isEmpty(); - if(!mag2Empty) - { - bullets2 = IIContent.itemBulletMagazine.getRemainingBulletCount(magazine2); - tag.setInteger("bullets2", bullets2); - } - } - - tag.setBoolean("mag1Empty", mag1Empty); - tag.setBoolean("mag2Empty", mag2Empty); - - if(!world.isRemote) - { - IIPacketHandler.INSTANCE.sendToAllAround(new MessageEntityNBTSync(this, tag), IIPacketHandler.targetPointFromEntity(this, 24)); - shootFromStack(stack); - } - - return true; - } - - public void getConfigFromItem(ItemStack stack) - { - gun = stack; - float setup_multiplier = 1; - if(IIContent.itemMachinegun.getUpgrades(gun).hasKey("precise_bipod")) - setup_multiplier = Machinegun.preciseBipodSetupTimeMultiplier; - else if(IIContent.itemMachinegun.getUpgrades(gun).hasKey("hasty_bipod")) - setup_multiplier = Machinegun.hastyBipodSetupTimeMultiplier; - else if(IIContent.itemMachinegun.getUpgrades(gun).hasKey("tripod")) - { - this.tripod = true; - setup_multiplier = Machinegun.tripodSetupTimeMultiplier; - } - if(IIContent.itemMachinegun.getUpgrades(gun).hasKey("belt_fed_loader")) - setup_multiplier *= Machinegun.beltFedLoaderSetupTimeMultiplier; - if(IIContent.itemMachinegun.getUpgrades(gun).hasKey("shield")) - { - shieldStrength = Machinegun.shieldStrengthInitial; - maxShieldStrength = Machinegun.shieldStrengthInitial; - setup_multiplier *= Machinegun.shieldSetupTimeMultiplier; - } - - setupTime = Math.round(Machinegun.setupTime*setup_multiplier); - maxSetupTime = setupTime; - - float bullet_delay_multiplier = 1; - if(IIContent.itemMachinegun.getUpgrades(gun).hasKey("heavy_barrel")) - bullet_delay_multiplier = Machinegun.heavyBarrelFireRateMultiplier; - else if(IIContent.itemMachinegun.getUpgrades(gun).hasKey("water_cooling")) - { - tankCapacity = Machinegun.waterCoolingTankCapacity; - } - - bulletDelayMax = Math.round(bullet_delay_multiplier*Machinegun.bulletFireTime); - bulletDelay = 0; - - float recoil_multiplier_h = 1, recoil_multiplier_w = 1; - if(IIContent.itemMachinegun.getUpgrades(gun).hasKey("precise_bipod")) - { - recoil_multiplier_w *= Machinegun.preciseBipodRecoilMultiplier; - recoil_multiplier_h *= Machinegun.preciseBipodRecoilMultiplier; - } - else if(IIContent.itemMachinegun.getUpgrades(gun).hasKey("hasty_bipod")) - { - recoil_multiplier_w *= Machinegun.hastyBipodRecoilMultiplier; - recoil_multiplier_h *= Machinegun.hastyBipodRecoilMultiplier; - } - else if(IIContent.itemMachinegun.getUpgrades(gun).hasKey("tripod")) - { - recoil_multiplier_w *= Machinegun.tripodRecoilMultiplier; - recoil_multiplier_h *= Machinegun.tripodRecoilMultiplier; - } - if(IIContent.itemMachinegun.getUpgrades(gun).hasKey("heavy_barrel")) - { - recoil_multiplier_w *= Machinegun.recoilHBHorizontal; - recoil_multiplier_h *= Machinegun.recoilHBVertical; - } - if(IIContent.itemMachinegun.getUpgrades(gun).hasKey("second_magazine")) - { - recoil_multiplier_w *= Machinegun.recoilSecondMagazine; - hasSecondMag = true; - } - - maxRecoilYaw *= recoil_multiplier_w; - maxRecoilPitch *= recoil_multiplier_h; - - if(ItemNBTHelper.hasKey(gun, "magazine1")) - magazine1 = new ItemStack(ItemNBTHelper.getTagCompound(gun, "magazine1")); - if(ItemNBTHelper.hasKey(gun, "magazine2")) - magazine2 = new ItemStack(ItemNBTHelper.getTagCompound(gun, "magazine2")); - - if(!hasSecondMag&&!magazine2.isEmpty()&&!world.isRemote) - { - Utils.dropStackAtPos(world, getPosition(), stack); - } - - if(!magazine1.isEmpty()) - bullets1 = IIContent.itemBulletMagazine.getRemainingBulletCount(magazine1); - if(!magazine2.isEmpty()) - bullets2 = IIContent.itemBulletMagazine.getRemainingBulletCount(magazine2); - - hasInfrared = IIContent.itemMachinegun.getUpgrades(gun).hasKey("infrared_scope"); - loadedFromCrate = IIContent.itemMachinegun.getUpgrades(gun).hasKey("belt_fed_loader"); - - tank.setCapacity(tankCapacity); - IFluidHandlerItem cap = gun.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); - if(cap!=null) - tank.setFluid(cap.drain(Integer.MAX_VALUE, true)); - - updateTank(false); - - NBTTagCompound tag = new NBTTagCompound(); - writeEntityToNBT(tag); - IIPacketHandler.INSTANCE.sendToAllAround(new MessageEntityNBTSync(this, tag), IIPacketHandler.targetPointFromEntity(this, 24)); - } - - void dropItem() - { - if(!isDead) - { - ItemNBTHelper.setTagCompound(gun, "magazine1", magazine1.serializeNBT()); - ItemNBTHelper.setTagCompound(gun, "magazine2", magazine2.serializeNBT()); - if(IIContent.itemMachinegun.getCapacity(gun, 0) > 0) - { - IFluidHandlerItem cap = gun.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); - if(cap!=null) - { - cap.drain(Integer.MAX_VALUE, true); - if(tank.getFluid()!=null) - cap.fill(tank.getFluid().copy(), true); - } - } - Utils.dropStackAtPos(world, getPosition(), gun); - setDead(); - } - } - - protected void updateTank(boolean read) - { - if(read) - readTank(dataManager.get(dataMarkerFluid)); - else - { - NBTTagCompound tag = new NBTTagCompound(); - writeTank(tag, false); - dataManager.set(dataMarkerFluid, tag); - } - } - - public void writeTank(NBTTagCompound nbt, boolean toItem) - { - boolean write = tank.getFluidAmount() > 0; - NBTTagCompound tankTag = tank.writeToNBT(new NBTTagCompound()); - if(!toItem||write) - nbt.setTag("tank", tankTag); - } - - public void readTank(NBTTagCompound nbt) - { - if(nbt.hasKey("tank")) - { - tank.readFromNBT(nbt.getCompoundTag("tank")); - } - tank.setCapacity(tankCapacity); - } - - @Override - public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) - { - if(tankCapacity > 0&&capability==CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) - return true; - return super.hasCapability(capability, facing); - } - - @Nullable - @Override - public T getCapability(Capability capability, @Nullable EnumFacing facing) - { - if(tankCapacity > 0&&capability==CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) - return (T)fluidHandler; - return super.getCapability(capability, facing); - } - - @SideOnly(Side.CLIENT) - @Override - public String[] getOverlayText(EntityPlayer player, RayTraceResult mop) - { - if(Utils.isFluidRelatedItemStack(player.getHeldItem(EnumHand.MAIN_HAND))) - { - String s; - if(tank.getFluid()!=null) - s = tank.getFluid().getLocalizedName()+": "+tank.getFluidAmount()+"mB"; - else - s = I18n.format(Lib.GUI+"empty"); - return new String[]{s}; - } - return null; - } - - - @Override - public boolean canRepair() - { - return maxShieldStrength > 0&&shieldStrength < maxShieldStrength; - } - - @Override - public boolean repair(int repairPoints) - { - shieldStrength = Math.min(shieldStrength += repairPoints, shieldStrength); - return true; - } - - @Override - public int getRepairCost() - { - return 2; - } - - @Override - public IAdvancedZoomTool getZoom() - { - return SCOPE; - } - - @Override - public ItemStack getZoomStack() - { - return gun; - } - - @Override - public double getYOffset() - { - return isRiding()?1D: super.getYOffset(); - } - - private static class MachinegunZoom implements IAdvancedZoomTool - { - @Override - public ResourceLocation getZoomOverlayTexture(ItemStack stack, EntityPlayer player) - { - NBTTagCompound nbt = IIContent.itemMachinegun.getUpgrades(stack); - return nbt.hasKey("scope")?SIGHTS_TEXTURE: IR_SIGHTS_TEXTURE; - } - - @Override - public boolean shouldZoom(ItemStack stack, EntityPlayer player) - { - NBTTagCompound nbt = IIContent.itemMachinegun.getUpgrades(stack); - return (nbt.hasKey("scope")||nbt.hasKey("infrared_scope")); - } - - @Override - public float[] getZoomSteps(ItemStack stack, EntityPlayer player) - { - return Machinegun.machinegunScopeMaxZoom; - } - } - - static class NonSidedFluidHandler implements IFluidHandler - { - EntityMachinegun machinegun; - - NonSidedFluidHandler(EntityMachinegun machinegun) - { - this.machinegun = machinegun; - } - - @Override - public int fill(FluidStack resource, boolean doFill) - { - if(resource==null) - return 0; - if(!MachinegunCoolantHandler.isValidCoolant(resource)) - return 0; - - int i = machinegun.tank.fill(resource, doFill); - if(i > 0) - { - machinegun.updateTank(false); - } - return i; - } - - @Override - public FluidStack drain(FluidStack resource, boolean doDrain) - { - if(resource==null) - return null; - return this.drain(resource.amount, doDrain); - } - - @Override - public FluidStack drain(int maxDrain, boolean doDrain) - { - FluidStack f = machinegun.tank.drain(maxDrain, doDrain); - if(f!=null&&f.amount > 0) - { - machinegun.updateTank(false); - } - return f; - } - - @Override - public IFluidTankProperties[] getTankProperties() - { - return machinegun.tank.getTankProperties(); - } - } -} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/EntityMortar.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/EntityMortar.java deleted file mode 100644 index cbf420a8e..000000000 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/EntityMortar.java +++ /dev/null @@ -1,428 +0,0 @@ -package pl.pabilo8.immersiveintelligence.common.entity; - -import blusunrize.immersiveengineering.api.tool.ZoomHandler; -import blusunrize.immersiveengineering.client.ClientUtils; -import blusunrize.immersiveengineering.common.util.Utils; -import io.netty.buffer.ByteBuf; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.datasync.DataParameter; -import net.minecraft.network.datasync.DataSerializers; -import net.minecraft.network.datasync.EntityDataManager; -import net.minecraft.util.*; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.lwjgl.input.Mouse; -import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; -import pl.pabilo8.immersiveintelligence.api.ammo.utils.AmmoFactory; -import pl.pabilo8.immersiveintelligence.api.utils.camera.IEntityZoomProvider; -import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoomTool; -import pl.pabilo8.immersiveintelligence.client.util.CameraHandler; -import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.Mortar; -import pl.pabilo8.immersiveintelligence.common.IIContent; -import pl.pabilo8.immersiveintelligence.common.IISounds; -import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoArtilleryProjectile; -import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; -import pl.pabilo8.immersiveintelligence.common.network.messages.MessageEntityNBTSync; -import pl.pabilo8.immersiveintelligence.common.util.IIMath; - -/** - * @author Pabilo8 (pabilo@iiteam.net) - * @since 21.01.2021 - */ -//TODO: 15.02.2024 mandatory cleanup -public class EntityMortar extends Entity implements IEntityAdditionalSpawnData, IEntityZoomProvider -{ - private static final MortarSights SIGHTS = new MortarSights(); - - private static final DataParameter dataMarkerGunPitchUp = EntityDataManager.createKey(EntityMortar.class, DataSerializers.BOOLEAN); - private static final DataParameter dataMarkerGunPitchDown = EntityDataManager.createKey(EntityMortar.class, DataSerializers.BOOLEAN); - private static final DataParameter dataMarkerShootingProgress = EntityDataManager.createKey(EntityMortar.class, DataSerializers.FLOAT); - private final AmmoFactory ammoFactory; - - public boolean fireKeyPress = false, gunPitchUp = false, gunPitchDown = false; - public int setupTime = 0; - public float shootingProgress = 0f; - - public EntityMortar(World worldIn) - { - super(worldIn); - this.ammoFactory = new AmmoFactory<>(this); - } - - @Override - protected void entityInit() - { - this.dataManager.register(dataMarkerGunPitchUp, gunPitchUp); - this.dataManager.register(dataMarkerGunPitchDown, gunPitchDown); - this.dataManager.register(dataMarkerShootingProgress, shootingProgress); - setSize(1f, 1.5f); - } - - @Override - public void onUpdate() - { - if(!world.isRemote&&world.getTotalWorldTime()%20==0&&!world.getBlockState(getPosition().down()).isSideSolid(world, getPosition().down(), EnumFacing.UP)) - { - setDead(); - entityDropItem(this.getPickedResult(null), 0f); - } - - if(setupTime < Mortar.setupTime) - setupTime += 1; - else - { - if(world.isRemote) - { - Entity pre = ClientUtils.mc().player.getRidingEntity(); - if(pre==this) - { - //Handle, send to server, get other from server - handleClientKeyInput(); - handleClientKeyOutput(true); - } - else - { - //Get from server - handleClientKeyOutput(false); - } - } - else - { - handleServerKeyInput(); - if(getPassengers().size()==0) - { - gunPitchUp = false; - gunPitchDown = false; - shootingProgress = 0; - } - } - - if(shootingProgress==0) - { - if(fireKeyPress&&getPassengers().size() > 0) - { - Entity entity = getPassengers().get(0); - if(entity instanceof EntityLivingBase) - { - ItemStack heldItem = ((EntityLivingBase)entity).getHeldItem(EnumHand.MAIN_HAND); - if(heldItem.getItem()==IIContent.itemAmmoMortar) - { - shootingProgress = 1; - fireKeyPress = false; - } - } - } - else if(gunPitchUp) - rotationPitch = MathHelper.clamp(rotationPitch+0.5f, -80, -55); - else if(gunPitchDown) - rotationPitch = MathHelper.clamp(rotationPitch-0.5f, -80, -55); - } - else - { - if(getPassengers().size() > 0) - { - Entity entity = getPassengers().get(0); - if(entity instanceof EntityLivingBase) - { - ItemStack heldItem = ((EntityLivingBase)entity).getHeldItem(EnumHand.MAIN_HAND); - if(heldItem.getItem()==IIContent.itemAmmoMortar||shootingProgress > Mortar.shootTime*0.45) - { - if(shootingProgress < Mortar.shootTime) - shootingProgress++; - else - { - shootingProgress = 0; - - } - if(shootingProgress==Math.round(Mortar.shootTime*0.2f)) - { - world.playSound(null, posX, posY, posZ, IISounds.mortarLoad, SoundCategory.PLAYERS, 1.25f, 1f); - } - if(shootingProgress==Math.round(Mortar.shootTime*0.55f)) - { - if(!world.isRemote) - { - //Calculate angles - double yawAngle = Math.toRadians((MathHelper.wrapDegrees(-rotationYaw))); - double pitchAngle = Math.toRadians(-rotationPitch); - Vec3d gunEnd = IIMath.offsetPosDirection(2f, yawAngle, pitchAngle); - - //Play firing sound - world.playSound(null, posX, posY, posZ, IISounds.mortarShot, SoundCategory.PLAYERS, 1.25f, 1f); - - //Create the ammo piece - ammoFactory.setPosition(getPositionVector().add(gunEnd)) - .setDirection(gunEnd.normalize()) - .setStack(Utils.copyStackWithAmount(heldItem, 1)) - .setShooterAndGun(getPassengers().get(0), this) - .create(); - heldItem.shrink(1); - } - } - } - else - shootingProgress = 0; - } - } - else - shootingProgress = 0; - } - - } - - super.onUpdate(); - } - - @Override - public boolean attackEntityFrom(DamageSource source, float amount) - { - return amount > 4; - } - - private void handleClientKeyInput() - { - boolean hasChanged; - - boolean u = gunPitchUp, d = gunPitchDown, fk = fireKeyPress; - gunPitchUp = ClientUtils.mc().gameSettings.keyBindForward.isKeyDown(); - gunPitchDown = ClientUtils.mc().gameSettings.keyBindBack.isKeyDown(); - fireKeyPress = Mouse.isButtonDown(1); - hasChanged = u^gunPitchUp||d^gunPitchDown||fk^fireKeyPress; - - if(hasChanged) - IIPacketHandler.sendToServer(new MessageEntityNBTSync(this, updateKeys())); - } - - @SideOnly(Side.CLIENT) - private NBTTagCompound updateKeys() - { - NBTTagCompound compound = new NBTTagCompound(); - compound.setBoolean("gunPitchUp", gunPitchUp); - compound.setBoolean("gunPitchDown", gunPitchDown); - compound.setBoolean("fireKeyPress", fireKeyPress); - return compound; - } - - public void syncKeyPress(NBTTagCompound tag) - { - if(tag.hasKey("gunPitchUp")) - gunPitchUp = tag.getBoolean("gunPitchUp"); - if(tag.hasKey("gunPitchDown")) - gunPitchDown = tag.getBoolean("gunPitchDown"); - if(tag.hasKey("fireKeyPress")) - fireKeyPress = tag.getBoolean("fireKeyPress"); - } - - private void handleClientKeyOutput(boolean user) - { - if(user) - { - dataManager.get(dataMarkerGunPitchUp); - dataManager.get(dataMarkerGunPitchDown); - dataManager.get(dataMarkerShootingProgress); - } - else - { - gunPitchUp = dataManager.get(dataMarkerGunPitchUp); - gunPitchDown = dataManager.get(dataMarkerGunPitchDown); - shootingProgress = dataManager.get(dataMarkerShootingProgress); - } - - } - - private void handleServerKeyInput() - { - dataManager.set(dataMarkerGunPitchUp, gunPitchUp); - dataManager.set(dataMarkerGunPitchDown, gunPitchDown); - dataManager.set(dataMarkerShootingProgress, shootingProgress); - } - - @SideOnly(Side.CLIENT) - @Override - protected void removePassenger(Entity passenger) - { - if(world.isRemote&&passenger instanceof EntityPlayerSP) - { - CameraHandler.setEnabled(false); - ZoomHandler.isZooming = false; - } - super.removePassenger(passenger); - } - - @Override - public AxisAlignedBB getCollisionBoundingBox() - { - return getEntityBoundingBox(); - } - - @Override - public boolean processInitialInteract(EntityPlayer player, EnumHand hand) - { - if(!world.isRemote&&player.isSneaking()&&this.getPassengers().size()==0) - { - setDead(); - entityDropItem(this.getPickedResult(null), 0f); - return true; - } - if(setupTime==Mortar.setupTime&&player.getRidingEntity()!=this&&this.getPassengers().size()==0) - { - player.startRiding(this); - return true; - } - else - return true; - } - - @Override - public boolean canBeCollidedWith() - { - return true; - } - - @Override - public void updatePassenger(Entity passenger) - { - Vec3d pos = getPositionVector(); - float headYaw = MathHelper.wrapDegrees(this.rotationYaw); - double true_angle = Math.toRadians((-headYaw) > 180?360f-(-headYaw): (-headYaw)); - double true_angle2 = Math.toRadians((-headYaw-90) > 180?360f-(-headYaw-90): (-headYaw-90)); - Vec3d pos2 = IIMath.offsetPosDirection(0.125f, true_angle, 0); - Vec3d pos3 = IIMath.offsetPosDirection(-0.75f, true_angle2, 0); - float ff = 1; - if(shootingProgress > 0) - { - float v = shootingProgress/Mortar.shootTime; - if(v < 0.1) - { - //rise up - ff = 1f-(v/0.1f); - } - else if(v < 0.3) - { - //unturn - ff = 0; - } - else if(v < 0.4) - { - //get down - ff = (v-0.3f)/0.1f; - } - } - - passenger.setPosition(pos.x+pos2.x+pos3.x, pos.y-0.5*ff, pos.z+pos2.z+pos3.z); - applyOrientationToEntity(passenger); - } - - @Override - public void applyOrientationToEntity(Entity entityToUpdate) - { - float yy = this.rotationYaw; - if(setupTime==Mortar.setupTime) - { - yy += MathHelper.clamp((setupTime/(Mortar.setupTime*0.2)), 0, 1)*25; - } - if(shootingProgress > 0) - { - float ff = shootingProgress/Mortar.shootTime; - if(ff < 0.3) - yy += MathHelper.clamp(ff/0.1, 0, 1)*65; - else if(ff < 0.4) - yy += (1f-MathHelper.clamp((ff-0.3)/0.1, 0, 1))*65; - } - entityToUpdate.setRenderYawOffset(yy); - - float f = MathHelper.wrapDegrees(entityToUpdate.rotationYaw-(this.rotationYaw)); - float f1 = MathHelper.clamp(f, -75.0F, 75.0F); - entityToUpdate.prevRotationYaw += f1-f; - entityToUpdate.rotationYaw += f1-f; - - entityToUpdate.setRotationYawHead(entityToUpdate.rotationYaw); - } - - @Override - protected void readEntityFromNBT(NBTTagCompound compound) - { - setupTime = compound.getInteger("setupTime"); - gunPitchUp = compound.getBoolean("gunPitchUp"); - gunPitchDown = compound.getBoolean("gunPitchDown"); - shootingProgress = compound.getFloat("shootingProgress"); - } - - @Override - protected void writeEntityToNBT(NBTTagCompound compound) - { - compound.setInteger("setupTime", setupTime); - compound.setBoolean("gunPitchUp", gunPitchUp); - compound.setBoolean("gunPitchDown", gunPitchDown); - compound.setFloat("shootingProgress", shootingProgress); - } - - @Override - public ItemStack getPickedResult(RayTraceResult target) - { - return new ItemStack(IIContent.itemMortar); - } - - @Override - public boolean shouldRiderSit() - { - return false; - } - - @Override - public void writeSpawnData(ByteBuf buffer) - { - buffer.writeInt(this.setupTime); - } - - @Override - public void readSpawnData(ByteBuf additionalData) - { - this.setupTime = additionalData.readInt(); - } - - @Override - public IAdvancedZoomTool getZoom() - { - return SIGHTS; - } - - private static class MortarSights implements IAdvancedZoomTool - { - private static final ResourceLocation SIGHTS_TEXTURE = new ResourceLocation(ImmersiveIntelligence.MODID, "textures/gui/item/mortar.png"); - - @Override - @SideOnly(Side.CLIENT) - public ResourceLocation getZoomOverlayTexture(ItemStack stack, EntityPlayer player) - { - return SIGHTS_TEXTURE; - } - - @Override - public boolean shouldZoom(ItemStack stack, EntityPlayer player) - { - Entity ridingEntity = player.getRidingEntity(); - return ridingEntity instanceof EntityMortar&&((EntityMortar)ridingEntity).shootingProgress==0; - } - - @Override - public float[] getZoomSteps(ItemStack stack, EntityPlayer player) - { - Entity ridingEntity = player.getRidingEntity(); - if(ridingEntity instanceof EntityMortar) - return new float[]{1f-Math.min(0.75f/(ridingEntity.rotationPitch/-90f), 0.975f)}; - return new float[]{0}; - } - } -} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/EntityTripodPeriscope.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/EntityTripodPeriscope.java deleted file mode 100644 index 7b0fe4ad6..000000000 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/EntityTripodPeriscope.java +++ /dev/null @@ -1,214 +0,0 @@ -package pl.pabilo8.immersiveintelligence.common.entity; - -import blusunrize.immersiveengineering.api.tool.ZoomHandler; -import io.netty.buffer.ByteBuf; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.*; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; -import pl.pabilo8.immersiveintelligence.api.utils.camera.IEntityZoomProvider; -import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoomTool; -import pl.pabilo8.immersiveintelligence.client.util.CameraHandler; -import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Tools.TripodPeriscope; -import pl.pabilo8.immersiveintelligence.common.IIContent; -import pl.pabilo8.immersiveintelligence.common.util.IIMath; - -import static pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Tools.TripodPeriscope.tripodZoomSteps; - -/** - * @author Pabilo8 (pabilo@iiteam.net) - * @since 21.01.2021 - */ -public class EntityTripodPeriscope extends Entity implements IEntityZoomProvider, IEntityAdditionalSpawnData -{ - private static final IAdvancedZoomTool ZOOM = new TripodZoom(); - public int setupTime = 0; - public float periscopeYaw = 0, periscopeNextYaw = 0; - - public EntityTripodPeriscope(World worldIn) - { - super(worldIn); - } - - @Override - protected void entityInit() - { - setSize(0.5f, 2f); - } - - @Override - public void onUpdate() - { - if(!world.isRemote&&world.getTotalWorldTime()%20==0&&!world.getBlockState(getPosition().down()).isSideSolid(world, getPosition().down(), EnumFacing.UP)) - { - setDead(); - entityDropItem(this.getPickedResult(null), 0f); - } - - //setupTime = 0; - if(setupTime < TripodPeriscope.setupTime) - setupTime += 1; - else - { - if(getPassengers().size() > 0) - { - Entity user = getPassengers().get(0); - - aimAt(user.getRotationYawHead()); - } - } - - super.onUpdate(); - } - - @Override - protected void removePassenger(Entity passenger) - { - if(world.isRemote&&passenger instanceof EntityPlayerSP) - { - CameraHandler.setEnabled(false); - ZoomHandler.isZooming = false; - } - super.removePassenger(passenger); - } - - @Override - public AxisAlignedBB getCollisionBoundingBox() - { - return getEntityBoundingBox(); - } - - @Override - public boolean processInitialInteract(EntityPlayer player, EnumHand hand) - { - if(!world.isRemote&&player.isSneaking()&&this.getPassengers().size()==0) - { - setDead(); - entityDropItem(this.getPickedResult(null), 0f); - return true; - } - if(setupTime==TripodPeriscope.setupTime&&player.getRidingEntity()!=this&&this.getPassengers().size()==0) - { - player.startRiding(this); - return true; - } - else - return true; - } - - @Override - public boolean canBeCollidedWith() - { - return true; - } - - @Override - public void updatePassenger(Entity passenger) - { - if(this.isPassenger(passenger)) - { - BlockPos pos = getPosition(); - float headYaw = MathHelper.wrapDegrees(this.periscopeYaw); - double true_angle = Math.toRadians((-headYaw) > 180?360f-(-headYaw): (-headYaw)); - double true_angle2 = Math.toRadians((-headYaw-90) > 180?360f-(-headYaw-90): (-headYaw-90)); - Vec3d pos2 = IIMath.offsetPosDirection(-0.5f, true_angle, 0); - Vec3d pos3 = IIMath.offsetPosDirection(-0.0625f/2f, true_angle2, 0); - - passenger.setPosition(pos.getX()+0.5+pos2.x+pos3.x, pos.getY(), pos.getZ()+0.5+pos2.z+pos3.z); - } - } - - @Override - public void applyOrientationToEntity(Entity entityToUpdate) - { - entityToUpdate.setRenderYawOffset(this.periscopeYaw); - entityToUpdate.setRotationYawHead(entityToUpdate.rotationYaw); - } - - @Override - protected void readEntityFromNBT(NBTTagCompound compound) - { - this.setupTime = compound.getInteger("setupTime"); - this.periscopeYaw = compound.getFloat("periscopeYaw"); - this.periscopeNextYaw = compound.getFloat("periscopeNextYaw"); - } - - @Override - protected void writeEntityToNBT(NBTTagCompound compound) - { - compound.setInteger("setupTime", setupTime); - compound.setFloat("periscopeYaw", periscopeYaw); - compound.setFloat("periscopeNextYaw", periscopeNextYaw); - } - - public void aimAt(float yaw) - { - periscopeNextYaw = MathHelper.wrapDegrees(yaw); - float y = MathHelper.wrapDegrees(360+periscopeNextYaw-this.periscopeYaw); - this.periscopeYaw = MathHelper.wrapDegrees(periscopeYaw+(Math.signum(y)*MathHelper.clamp(Math.abs(y), 0, TripodPeriscope.turnSpeed))); - } - - @Override - public ItemStack getPickedResult(RayTraceResult target) - { - return new ItemStack(IIContent.itemTripodPeriscope); - } - - @Override - public boolean shouldRiderSit() - { - return false; - } - - @Override - public IAdvancedZoomTool getZoom() - { - return ZOOM; - } - - @Override - public void writeSpawnData(ByteBuf buffer) - { - buffer.writeInt(this.setupTime); - } - - @Override - public void readSpawnData(ByteBuf additionalData) - { - this.setupTime = additionalData.readInt(); - } - - private static class TripodZoom implements IAdvancedZoomTool - { - private static final ResourceLocation SIGHTS_TEXTURE = new ResourceLocation(ImmersiveIntelligence.MODID, "textures/gui/item/binoculars.png"); - - @Override - @SideOnly(Side.CLIENT) - public ResourceLocation getZoomOverlayTexture(ItemStack stack, EntityPlayer player) - { - return SIGHTS_TEXTURE; - } - - @Override - public boolean shouldZoom(ItemStack stack, EntityPlayer player) - { - return true; - } - - @Override - public float[] getZoomSteps(ItemStack stack, EntityPlayer player) - { - return tripodZoomSteps; - } - } -} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/EntityAmmoBase.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/EntityAmmoBase.java index 7ddac6660..1f693a22e 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/EntityAmmoBase.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/EntityAmmoBase.java @@ -13,7 +13,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.common.Optional; import net.minecraftforge.fml.common.network.ByteBufUtils; -import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import pl.pabilo8.immersiveintelligence.api.ammo.AmmoRegistry; @@ -41,8 +40,7 @@ * @since 30.01.2024 */ @Optional.Interface(iface = "com.elytradev.mirage.lighting.IEntityLightEventConsumer", modid = "mirage") -public abstract class EntityAmmoBase> extends Entity implements IEntityAdditionalSpawnData, IEntityLightEventConsumer, - ISyncNBTEntity> +public abstract class EntityAmmoBase> extends Entity implements IEntityLightEventConsumer, ISyncNBTEntity> { //--- Properties ---// /** @@ -82,12 +80,12 @@ public abstract class EntityAmmoBase> extend * Axis alligned bounding box of the bullet, because fuck minecraft's bloody AABB (de)sync wankfest. */ protected AxisAlignedBB aabb; + protected boolean clientLoaded = false; //--- Initialization ---// public EntityAmmoBase(World world) { - super(world); ammoType = null; } @@ -143,6 +141,9 @@ public void setFromParameters(IAmmoType ammoType, AmmoCore core, CoreType @Override public void onUpdate() { + if(world.isRemote&&!clientLoaded) + return; + this.prevDistanceWalkedModified = this.distanceWalkedModified; this.prevPosX = this.posX; this.prevPosY = this.posY; @@ -228,17 +229,20 @@ public void writeEntityToNBT(NBTTagCompound compound) @Override public void writeSpawnData(ByteBuf buffer) { - NBTTagCompound compound = new NBTTagCompound(); - writeEntityToNBT(compound); - ByteBufUtils.writeTag(buffer, compound); + NBTTagCompound tag = new NBTTagCompound(); + writeEntityToNBT(tag); + ByteBufUtils.writeTag(buffer, tag); } @Override public void readSpawnData(ByteBuf additionalData) { - NBTTagCompound compound = ByteBufUtils.readTag(additionalData); - if(compound!=null) - readEntityFromNBT(compound); + NBTTagCompound tag = ByteBufUtils.readTag(additionalData); + if(tag!=null) + { + readEntityFromNBT(tag); + this.clientLoaded = true; + } } //--- Abstract ---// diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/component/EntityGasCloud.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/component/EntityGasCloud.java index 83c74131e..3b5675764 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/component/EntityGasCloud.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/component/EntityGasCloud.java @@ -2,128 +2,332 @@ import blusunrize.immersiveengineering.api.tool.ChemthrowerHandler; import blusunrize.immersiveengineering.api.tool.ChemthrowerHandler.ChemthrowerEffect; -import blusunrize.immersiveengineering.common.util.IEFluid; -import com.google.common.base.Optional; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.MoverType; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.datasync.DataParameter; -import net.minecraft.network.datasync.DataSerializers; -import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; import pl.pabilo8.immersiveintelligence.api.utils.armor.IGasmask; import pl.pabilo8.immersiveintelligence.client.fx.utils.ParticleRegistry; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; +import pl.pabilo8.immersiveintelligence.common.util.entity.ISyncNBTEntity; +import javax.annotation.Nonnull; import java.util.List; /** + * Gas cloud entity that expands over time. + * * @author Pabilo8 (pabilo@iiteam.net) + * @updated 26.05.2026 + * @ii-approved 0.3.1 * @since 22.12.2020 + * */ -public class EntityGasCloud extends Entity +public class EntityGasCloud extends Entity implements ISyncNBTEntity { - private static final DataParameter> dataMarker_fluid = EntityDataManager.createKey(EntityGasCloud.class, IEFluid.OPTIONAL_FLUID_STACK); - private static final DataParameter dataMarker_radius = EntityDataManager.createKey(EntityGasCloud.class, DataSerializers.FLOAT); - int duration, maxDuration; - float radius; - private FluidStack fluid; + @SyncNBT(events = {SyncEvents.ENTITY_CUSTOM1}) + public FluidStack fluidStack = null; + @SyncNBT(events = {SyncEvents.ENTITY_CUSTOM1}) + public float currentRadius = 1.0f; + @SyncNBT(events = {SyncEvents.ENTITY_CUSTOM1}) + public float maxRadius; + @SyncNBT(events = {SyncEvents.ENTITY_CUSTOM1}) + public int duration = 40; - public EntityGasCloud(World worldIn) + public EntityGasCloud(World world) { - super(worldIn); - this.duration = 600; - this.maxDuration = duration; + super(world); + setSize(1.0f, 1.0f); this.noClip = true; this.isImmuneToFire = true; - this.radius = 3F; } - public EntityGasCloud(World worldIn, double x, double y, double z, FluidStack fs) + /** + * Creates a new gas cloud with given position, fluid, and total amount (in mb). + * Max radius is derived from the fluid's expansion properties and total amount. + */ + public EntityGasCloud(World world, double x, double y, double z, @Nonnull FluidStack fluid) { - this(worldIn); + this(world); this.setPosition(x, y, z); - this.fluid = fs; - duration = (int)((fluid.amount)*0.65f); - this.maxDuration = duration; - this.dataManager.set(dataMarker_fluid, Optional.of(fluid)); - this.dataManager.set(dataMarker_radius, radius); + this.fluidStack = fluid.copy(); + this.maxRadius = calculateMaxRadiusFromAmount(); + this.currentRadius = 0.5f; + this.duration = this.fluidStack.amount*2; } @Override protected void entityInit() { - this.dataManager.register(dataMarker_fluid, Optional.absent()); - this.dataManager.register(dataMarker_radius, radius); + } @Override public void onUpdate() { - move(MoverType.SELF, 0.01f, 0, 0.01f); - super.onUpdate(); - if(this.fluid==null&&this.world.isRemote) + this.prevPosX = posX; + this.prevPosY = posY; + this.prevPosZ = posZ; + + if(world.isRemote) { - this.fluid = this.dataManager.get(dataMarker_fluid).orNull(); - this.radius = this.dataManager.get(dataMarker_radius); + if(fluidStack!=null&&duration > 0) + { + //Particle effect every second + if(ticksExisted%20==0) + ParticleRegistry.spawnGasCloud(getPositionVector().addVector(0, 1, 0), currentRadius, fluidStack.getFluid()); + + //Expand radius locally using the same growth rate, up to maxRadius + if(currentRadius < maxRadius) + { + float newRadius = currentRadius+getGasGrowthRate(); + currentRadius = Math.min(newRadius, maxRadius); + updateBoundingBox(); + } + + //Decrease lifetime + duration--; + } + return; } - if(!world.isRemote) + //Remove the entity when out of time + if(fluidStack==null||duration <= 0) { - if(duration > 0&&fluid!=null) + setDead(); + return; + } + + duration--; + + //Apply effect to entities within the bounding box + List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, getEntityBoundingBox()); + ChemthrowerEffect effect = ChemthrowerHandler.getEffect(fluidStack.getFluid()); + if(effect!=null) + for(EntityLivingBase entity : entities) { - duration -= 1; - ChemthrowerEffect effect = ChemthrowerHandler.getEffect(fluid.getFluid()); - if(effect!=null) + boolean isProtected = false; + for(EntityEquipmentSlot slot : EntityEquipmentSlot.values()) { - List entitiesWithinAABB = world.getEntitiesWithinAABB(EntityLivingBase.class, - new AxisAlignedBB(posX, posY, posZ, posX, posY, posZ).grow(radius)); - for(EntityLivingBase entityLivingBase : entitiesWithinAABB) - { - boolean apply = true; - for(EntityEquipmentSlot slot : EntityEquipmentSlot.values()) - { - ItemStack s = entityLivingBase.getItemStackFromSlot(slot); - if(!s.isEmpty()&&s.getItem() instanceof IGasmask) - if(apply) - apply = !((IGasmask)s.getItem()).protectsFromGasses(s); - } - if(apply) - effect.applyToEntity(entityLivingBase, null, ItemStack.EMPTY, fluid); - } + ItemStack stack = entity.getItemStackFromSlot(slot); + if(!stack.isEmpty()&&stack.getItem() instanceof IGasmask) + if(((IGasmask)stack.getItem()).protectsFromGasses(stack)) + isProtected = true; } + if(!isProtected) + effect.applyToEntity(entity, null, ItemStack.EMPTY, fluidStack); + } + //Expansion logic + if(currentRadius < maxRadius) + { + float oldRadius = currentRadius; + float newRadius = currentRadius+getGasGrowthRate(); + if(canExpandToRadius(newRadius)) + { + currentRadius = Math.min(newRadius, maxRadius); + updateBoundingBox(); } else - setDead(); + attemptSpawnChildren(); + if(oldRadius!=currentRadius) + sendServerUpdateForEvent(SyncEvents.ENTITY_CUSTOM1); } - else if(ticksExisted%20==0) - ParticleRegistry.spawnGasCloud(getPositionVector().addVector(0, 1, 0), radius, fluid.getFluid()); + + //Lifetime end + if(duration <= 0&¤tRadius <= 0.1f) + setDead(); + + //Periodic full sync (corrects client drift) + if(ticksExisted%10==0) + updateEntityForEvent(SyncEvents.ENTITY_CUSTOM1); + + //Try to move down + if(!this.world.collidesWithAnyBlock(getEntityBoundingBox().expand(0, -0.005f, 0))) + this.posY -= 0.005f; } - @Override - protected void readEntityFromNBT(NBTTagCompound compound) + //--- Utils ---// + + private float calculateMaxRadiusFromAmount() + { + float baseRadius = (float)Math.cbrt(this.fluidStack.amount/200.0); + float fluidFactor = getGasExpansionFactor(); + return baseRadius*fluidFactor; + } + + private float getSpreadTreshold() + { + return 0.2f; + } + + private float getGasExpansionFactor() + { + return 1.25f; + } + + private float getGasGrowthRate() { + return 0.01f; + } + /** + * Checks whether the cloud can expand to the given radius without intersecting solid blocks. + * Uses a sphere-like expansion: checks blocks within a cube of side 2*radius around center. + */ + private boolean canExpandToRadius(float radius) + { + BlockPos center = getPosition().up(); + int r = (int)Math.ceil(radius); + for(int x = -r; x <= r; x++) + for(int y = 0; y <= 2*r; y++) + for(int z = -r; z <= r; z++) + { + double distSq = x*x+y*y+z*z; + if(distSq <= radius*radius) + { + BlockPos pos = center.add(x, y, z); + IBlockState state = world.getBlockState(pos); + if(!state.getBlock().isAir(state, world, pos)&&state.isFullBlock()) + return false; + } + } + return true; } + /** + * Attempts to spawn child clouds in directions where expansion is possible. + * Each child inherits a portion of totalGasAmount, and the parent reduces its own amount. + */ + private void attemptSpawnChildren() + { + final int directions = 6; + EnumFacing[] faces = EnumFacing.values(); + float freeSpaceRatio = 0.0f; + + //Check how many directions are free for expansion + for(EnumFacing face : faces) + if(isDirectionFree(face)) + freeSpaceRatio += 1.0f/directions; + + if(freeSpaceRatio > getSpreadTreshold()) + { + //Transfer a fraction of gas to children + int amountPerChild = fluidStack.amount/(directions*2); + if(amountPerChild < 10) + return; //too little to expand + + for(EnumFacing face : faces) + if(isDirectionFree(face)) + { + //Calculate child position slightly offset in the direction of the face + double childX = posX+face.getFrontOffsetX()*(currentRadius+1); + double childY = posY+face.getFrontOffsetY()*(currentRadius+1); + double childZ = posZ+face.getFrontOffsetZ()*(currentRadius+1); + + //Spawn child gas cloud + FluidStack childFluid = fluidStack.copy(); + childFluid.amount = amountPerChild; + EntityGasCloud child = new EntityGasCloud(world, childX, childY, childZ, childFluid); + child.currentRadius = 0.5f; + world.spawnEntity(child); + + //Reduce parent amount + if((fluidStack.amount -= amountPerChild) <= 0) + { + setDead(); + return; + } + } + //Recalculate maxRadius based on new totalGasAmount + this.maxRadius = calculateMaxRadiusFromAmount(); + updateBoundingBox(); + } + } + + /** + * @return true if the gas cloud can expand freely in given direction + */ + private boolean isDirectionFree(EnumFacing face) + { + Vec3d expansionVector = new Vec3d(face.getDirectionVec()); + AxisAlignedBB checked = new AxisAlignedBB(this.getPosition()) + .grow(currentRadius) + .expand(0, -currentRadius, 0) + .expand(expansionVector.x*(currentRadius+1), expansionVector.y*(currentRadius+1), expansionVector.z*(currentRadius+1)) + .contract(-expansionVector.x*(currentRadius)*2, -expansionVector.y*(currentRadius)*2, -expansionVector.z*(currentRadius)*2); + + for(int x = (int)checked.minX; x <= checked.maxX; x++) + for(int y = (int)checked.minY; y <= checked.maxY; y++) + for(int z = (int)checked.minZ; z <= checked.maxZ; z++) + { + BlockPos pos = new BlockPos(x, y, z); + IBlockState state = world.getBlockState(pos); + if(!state.getBlock().isAir(state, world, pos)&&state.isFullBlock()) + return false; + } + return true; + } + + private void updateBoundingBox() + { + this.width = currentRadius*2; + this.height = currentRadius*2; + setEntityBoundingBox(new AxisAlignedBB(this.getPosition()) + .expand(currentRadius, currentRadius, currentRadius) + .expand(-currentRadius, 0, -currentRadius) + ); + } + + //--- NBT ---// + @Override - protected void writeEntityToNBT(NBTTagCompound compound) + public void readEntityFromNBT(NBTTagCompound compound) { + ISyncNBTEntity.super.readEntityFromNBT(compound); + //Update the radius + if(fluidStack!=null) + maxRadius = calculateMaxRadiusFromAmount(); + updateBoundingBox(); + } + @Override + public void writeEntityToNBT(NBTTagCompound compound) + { + ISyncNBTEntity.super.writeEntityToNBT(compound); } + //--- Overrides ---// + @Override public void setFire(int seconds) { - if(ChemthrowerHandler.isFlammable(fluid.getFluid())) + if(fluidStack!=null&&ChemthrowerHandler.isFlammable(fluidStack.getFluid())) { duration -= seconds*10; super.setFire(seconds); } } + + @Override + public boolean shouldRenderInPass(int pass) + { + return pass==0; + } + + @Override + public void move(MoverType type, double x, double y, double z) + { + + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/component/EntityShrapnel.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/component/EntityShrapnel.java index 83acf3b77..4d1faf473 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/component/EntityShrapnel.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/component/EntityShrapnel.java @@ -96,12 +96,11 @@ public void setFire(int seconds) @Override public void onImpact(RayTraceResult mop) { - if(!this.world.isRemote&&ShrapnelHandler.registry.get(shrapnel)!=null) + if(!this.world.isRemote&&shrapnel!=null) { - Shrapnel s = ShrapnelHandler.registry.get(shrapnel); if(mop.entityHit!=null) { - mop.entityHit.attackEntityFrom(causeShrapnelDamage(this, shootingEntity, mop.entityHit), s.damage); + mop.entityHit.attackEntityFrom(causeShrapnelDamage(this, shootingEntity, mop.entityHit), shrapnel.damage); mop.entityHit.hurtResistantTime *= .5; if(this.isBurning()) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/component/EntityWhitePhosphorus.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/component/EntityWhitePhosphorus.java index 878201962..35d5d29a5 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/component/EntityWhitePhosphorus.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/component/EntityWhitePhosphorus.java @@ -1,31 +1,28 @@ package pl.pabilo8.immersiveintelligence.common.entity.ammo.component; import blusunrize.immersiveengineering.common.entities.EntityIEProjectile; -import blusunrize.immersiveengineering.common.util.IEPotions; -import blusunrize.immersiveengineering.common.util.Utils; import com.elytradev.mirage.event.GatherLightsEvent; import com.elytradev.mirage.lighting.ILightEventConsumer; import com.elytradev.mirage.lighting.Light; -import net.minecraft.entity.EntityAreaEffectCloud; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.SoundEvents; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.RayTraceResult.Type; -import net.minecraft.world.Explosion; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraftforge.fml.common.Optional; import net.minecraftforge.fml.common.Optional.Interface; +import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import pl.pabilo8.immersiveintelligence.client.fx.utils.IIParticleUtils; import pl.pabilo8.immersiveintelligence.client.fx.utils.ParticleProperties; import pl.pabilo8.immersiveintelligence.client.fx.utils.ParticleRegistry; -import pl.pabilo8.immersiveintelligence.common.IIPotions; -import pl.pabilo8.immersiveintelligence.common.util.IIColor; import pl.pabilo8.immersiveintelligence.common.util.entity.IIEntityUtils; import javax.vecmath.Vector2f; @@ -35,11 +32,12 @@ * @since 26.10.2019 */ @Interface(iface = "com.elytradev.mirage.lighting.ILightEventConsumer", modid = "mirage") -public class EntityWhitePhosphorus extends EntityIEProjectile implements ILightEventConsumer +public class EntityWhitePhosphorus extends EntityIEProjectile implements ILightEventConsumer, IEntityAdditionalSpawnData { public EntityWhitePhosphorus(World world) { super(world); + setTickLimit(8); } public EntityWhitePhosphorus(World world, double x, double y, double z, double ax, double ay, double az) @@ -56,7 +54,7 @@ protected void entityInit() @Override public double getGravity() { - return 0.07F; + return 0.004F; } /** @@ -66,17 +64,24 @@ public double getGravity() public void onEntityUpdate() { super.onEntityUpdate(); - if(getEntityWorld().isRemote) + if(world.isRemote) spawnTracerParticles(); } @SideOnly(Side.CLIENT) private void spawnTracerParticles() { - ParticleRegistry.spawnParticle("ammo/tracer", getPositionVector(), IIEntityUtils.getEntityMotion(this), new Vector2f(0, 0)) - .withProperty(ParticleProperties.COLOR, IIColor.WHITE) - .withProperty(ParticleProperties.SIZE, 0.4f) - .withProperty(ParticleProperties.MAX_LIFETIME, 20); + ParticleRegistry.spawnParticle("phosphorus/ember", getPositionVector(), IIEntityUtils.getEntityMotion(this), new Vector2f(0, 0)) + .withProperty(ParticleProperties.SIZE, 0.25f-(0.07f*(ticksExisted/7f))); + ParticleRegistry.spawnParticle("phosphorus/smoke_trace", getPositionVector(), Vec3d.ZERO, new Vector2f(0, 0)) + .withProperty(ParticleProperties.SIZE, 0.8f-(0.5f*(ticksExisted/7f))); + if(ticksExisted < 7) + for(int i = 0; i < IIParticleUtils.randInt.get()%3; i++) + ParticleRegistry.spawnParticle("phosphorus/smoke_graceful", getPositionVector() + .addVector(0, 0.5, 0) + .add(IIParticleUtils.getRandXZ().scale(0.5f)), + Vec3d.ZERO, new Vector2f(0, 0)); + } /** @@ -85,32 +90,22 @@ private void spawnTracerParticles() @Override public void setFire(int seconds) { - super.setFire(seconds); + } @Override public void onImpact(RayTraceResult mop) { - if(!this.world.isRemote&&mop.typeOfHit!=Type.MISS&&world!=null&&mop.getBlockPos()!=null) + if(!this.world.isRemote&&mop.typeOfHit!=Type.MISS) { - Explosion explosion = new Explosion(world, this, posX, posY, posZ, 1, true, false); - explosion.doExplosionA(); - explosion.doExplosionB(false); - - world.playSound(null, mop.getBlockPos(), SoundEvents.BLOCK_LAVA_EXTINGUISH, SoundCategory.BLOCKS, 0.125f, 1f); - - EntityAreaEffectCloud cloud = new EntityAreaEffectCloud(world, mop.getBlockPos().getX(), mop.getBlockPos().getY()+1f, mop.getBlockPos().getZ()); - cloud.addEffect(new PotionEffect(IIPotions.brokenArmor, Math.round(180), 1)); - cloud.addEffect(new PotionEffect(IEPotions.flammable, Math.round(180), 2)); - cloud.addEffect(new PotionEffect(IEPotions.stunned, Math.round(80), 1)); - cloud.addEffect(new PotionEffect(IEPotions.flashed, Math.round(120), 1)); - cloud.setRadius(6f); - cloud.setDuration(Math.round(30f+(10f*Utils.RAND.nextFloat()))); - cloud.setParticle(EnumParticleTypes.CLOUD); - world.spawnEntity(cloud); - - world.getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(getPosition()).grow(0.5f)).forEach(entityLivingBase -> entityLivingBase.setFire(40)); - + //Ignore other white phosphorus + if(mop.typeOfHit==Type.ENTITY&&mop.entityHit instanceof EntityWhitePhosphorus) + return; + //Set hit entity to fire + BlockPos hitPos = new BlockPos(mop.hitVec); + world.playSound(null, hitPos, SoundEvents.BLOCK_LAVA_EXTINGUISH, SoundCategory.BLOCKS, 0.125f, 1f); + world.getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(hitPos).grow(0.5f)) + .forEach(entityLivingBase -> entityLivingBase.setFire(40)); setDead(); } } @@ -148,4 +143,26 @@ public void gatherLights(GatherLightsEvent evt) .radius(.05f) .build()); } + + @Override + public void writeSpawnData(ByteBuf buffer) + { + buffer.writeDouble(posX); + buffer.writeDouble(posY); + buffer.writeDouble(posZ); + buffer.writeDouble(motionX); + buffer.writeDouble(motionY); + buffer.writeDouble(motionZ); + } + + @Override + public void readSpawnData(ByteBuf additionalData) + { + posX = additionalData.readDouble(); + posY = additionalData.readDouble(); + posZ = additionalData.readDouble(); + motionX = additionalData.readDouble(); + motionY = additionalData.readDouble(); + motionZ = additionalData.readDouble(); + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/types/EntityAmmoArtilleryProjectile.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/types/EntityAmmoArtilleryProjectile.java index cb2064dc8..77d5ec82e 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/types/EntityAmmoArtilleryProjectile.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/types/EntityAmmoArtilleryProjectile.java @@ -47,6 +47,8 @@ protected void entityInit() public void onUpdate() { super.onUpdate(); + if(world.isRemote&&!clientLoaded) + return; //Play artillery shell impact sound if(Weapons.artilleryImpactSound&&!flybySound&&ticksExisted > 5) diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/types/EntityAmmoGrenade.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/types/EntityAmmoGrenade.java index d99f574db..8e4fa2c33 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/types/EntityAmmoGrenade.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/types/EntityAmmoGrenade.java @@ -59,6 +59,9 @@ protected void updatePhysics() public void onUpdate() { super.onUpdate(); + if(world.isRemote&&!clientLoaded) + return; + spinTicks = Math.max(0, spinTicks-1); if(onGround) spin = (spin > 180?Math.min(360, spin+SPIN_DEGREES): Math.max(0, spin-SPIN_DEGREES))%360; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/types/EntityAmmoProjectile.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/types/EntityAmmoProjectile.java index 8446a5b5d..e6b5276c7 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/types/EntityAmmoProjectile.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/ammo/types/EntityAmmoProjectile.java @@ -123,7 +123,7 @@ public class EntityAmmoProjectile extends EntityAmmoBase * Raytracer used for the projectile */ @Nonnull - protected FactoryTracer flightTracer; + protected FactoryTracer flightTracer = FactoryTracer.create(null); /** * Once true, the bullet will detonate at the end of the tick @@ -181,6 +181,9 @@ public void onUpdate() { super.onUpdate(); + if(world.isRemote&&!clientLoaded) + return; + //Yep, that's it, that's the entire motion code updatePhysics(); updateVisibleMotion(); @@ -344,6 +347,13 @@ protected boolean handleBlockDamage(RayTraceResult hit) PenetrationHardness blockHardness = penHandler.getPenetrationHardness(); boolean canPenetrate = penetrationHardness.compareTo(blockHardness) > 0; + //Explode when canister core contacts a non-fragile block + if(coreType==CoreType.CANISTER&&blockHardness.compareTo(PenetrationHardness.FRAGILE) > 0) + { + detonate(); + return true; + } + //ricochet if the block is unbreakable or the projectile can't penetrate it if(blockHardness!=PenetrationHardness.BEDROCK&&penHandler.canRicochet()&&!canPenetrate) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/hans/tasks/AIHansMachinegun.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/hans/tasks/AIHansMachinegun.java index c1bc0094f..0a7342d2b 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/hans/tasks/AIHansMachinegun.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/hans/tasks/AIHansMachinegun.java @@ -3,19 +3,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.math.MathHelper; -import pl.pabilo8.immersiveintelligence.api.ammo.enums.CoreType; -import pl.pabilo8.immersiveintelligence.api.ammo.enums.FuseType; -import pl.pabilo8.immersiveintelligence.common.IIContent; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMachinegun; -import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIBulletMagazine.Magazines; -import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; -import pl.pabilo8.immersiveintelligence.common.network.messages.MessageEntityNBTSync; -import pl.pabilo8.immersiveintelligence.common.util.IIColor; -import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMachinegun; import javax.annotation.Nullable; @@ -67,38 +55,15 @@ public void updateTask() target = hans.getAttackTarget(); if(mg!=null) { - mg.shoot = false; + if(mg.controls!=null) + mg.controls.setKey("fire", false); - NBTTagCompound update = new NBTTagCompound(); - mg.writeEntityToNBT(update); - IIPacketHandler.INSTANCE.sendToAllAround(new MessageEntityNBTSync(mg, update), IIPacketHandler.targetPointFromEntity(mg, 24)); - - if(mg.magazine1.isEmpty()) - { - if(hans.getHeldItemMainhand().isEmpty()) - { - - ItemStack ammoStack = IIContent.itemAmmoMachinegun.getAmmoStack(IIContent.ammoCoreBrass, CoreType.PIERCING, FuseType.CONTACT, IIContent.ammoComponentTracerPowder); - IIContent.itemAmmoMachinegun.setComponentNBT(ammoStack, EasyNBT.parseNBT("{colour: %s}", IIColor.MC_DARK_RED)); - ItemStack magazine = IIContent.itemBulletMagazine.getMagazine(Magazines.MACHINEGUN, ammoStack); - - - hans.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, magazine); - } - } - else if(target!=null) + if(target!=null) { hans.getLookHelper().setLookPositionWithEntity(target, hans.getHorizontalFaceSpeed(), hans.getVerticalFaceSpeed()); - if(isAimedAt()) - mg.shoot = true; + if(mg.aim.isAimed()&&mg.controls!=null) + mg.controls.setKey("fire", true); } - } } - - public boolean isAimedAt() - { - //TODO: 15.02.2024 use new calculation method - return MathHelper.wrapDegrees(hans.rotationPitch)-mg.gunPitch < 5&&MathHelper.wrapDegrees(hans.rotationYawHead)-MathHelper.wrapDegrees(mg.rotationYaw) < 5; - } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/hans/tasks/AIHansMortar.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/hans/tasks/AIHansMortar.java index 238f972ae..c88f61ce1 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/hans/tasks/AIHansMortar.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/hans/tasks/AIHansMortar.java @@ -12,7 +12,7 @@ import pl.pabilo8.immersiveintelligence.api.ammo.enums.FuseType; import pl.pabilo8.immersiveintelligence.api.ammo.utils.IIAmmoUtils; import pl.pabilo8.immersiveintelligence.common.IIContent; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMortar; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMortar; import pl.pabilo8.immersiveintelligence.common.util.IIColor; import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; @@ -74,8 +74,13 @@ public void updateTask() float pp = getAnglePrediction(mortar.getPositionVector().addVector(0, 1, 0), t.getPositionVector(), new Vec3d(t.motionX, t.motionY, t.motionZ))[1]; - mortar.gunPitchUp = (90+mortar.rotationPitch)-pp < 0; - mortar.gunPitchDown = (90+mortar.rotationPitch)-pp > 0; + boolean pitchUp = (90+mortar.rotationPitch)-pp < 0; + boolean pitchDown = (90+mortar.rotationPitch)-pp > 0; + if(mortar.controls!=null) + { + mortar.controls.setKey("pitchUp", pitchUp); + mortar.controls.setKey("pitchDown", pitchDown); + } if(Math.abs((90+mortar.rotationPitch)-pp) <= 5) { if(hans.getHeldItemMainhand().isEmpty()) @@ -86,11 +91,13 @@ public void updateTask() hans.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, shell); } - if(mortar.shootingProgress==0) - mortar.fireKeyPress = true; - - if(mortar.fireKeyPress) - mortar.getEntityWorld().getEntitiesWithinAABB(EntityItem.class, mortar.getEntityBoundingBox()).forEach(Entity::setDead); + if(mortar.controls!=null) + { + if(mortar.shootingProgress==0) + mortar.controls.setKey("fire", true); + if(mortar.controls.getKey("fire")) + mortar.getEntityWorld().getEntitiesWithinAABB(EntityItem.class, mortar.getEntityBoundingBox()).forEach(Entity::setDead); + } } } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/mounted_weapon/EntityMachinegun.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/mounted_weapon/EntityMachinegun.java new file mode 100644 index 000000000..5e6a60de8 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/mounted_weapon/EntityMachinegun.java @@ -0,0 +1,369 @@ +package pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon; + +import blusunrize.immersiveengineering.api.energy.immersiveflux.FluxStorage; +import blusunrize.immersiveengineering.common.util.ItemNBTHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import pl.pabilo8.immersiveintelligence.api.MachinegunCoolantHandler; +import pl.pabilo8.immersiveintelligence.api.ammo.utils.AmmoFactory; +import pl.pabilo8.immersiveintelligence.api.utils.IEntitySpecialRepairable; +import pl.pabilo8.immersiveintelligence.api.utils.camera.ICameraEntity; +import pl.pabilo8.immersiveintelligence.api.utils.camera.ZoomSettings; +import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedTextOverlay; +import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoom; +import pl.pabilo8.immersiveintelligence.client.ClientProxy; +import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.Machinegun; +import pl.pabilo8.immersiveintelligence.common.IIContent; +import pl.pabilo8.immersiveintelligence.common.IISounds; +import pl.pabilo8.immersiveintelligence.common.IIUtils; +import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleControls; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleControls.MouseBinding; +import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIBulletMagazine.Magazines; +import pl.pabilo8.immersiveintelligence.common.item.weapons.ItemIIWeaponUpgrade.WeaponUpgrade; +import pl.pabilo8.immersiveintelligence.common.util.FilteredFluidTank; +import pl.pabilo8.immersiveintelligence.common.util.IIMath; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunRecoil; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunShootingHandler; +import pl.pabilo8.immersiveintelligence.common.util.gun.ammoprovider.GunAmmoProviderAmmoCrate; +import pl.pabilo8.immersiveintelligence.common.util.gun.ammoprovider.GunAmmoProviderMagazine; + +import javax.annotation.Nonnull; +import java.util.EnumSet; + +/** + * @author Pabilo8 (pabilo@iiteam.net) + * @updated 15.05.2026 + * @ii-approved 0.3.1 + * @since 01.11.2019 + */ +public class EntityMachinegun extends EntityMountedWeapon implements IAdvancedTextOverlay, IEntitySpecialRepairable, ICameraEntity +{ + private final static ZoomSettings SCOPE = new ZoomSettings(Machinegun.machinegunScopeZoom, + IIReference.RES_TEXTURES_GUI.with("item/machinegun/scope.png")); + private final static ZoomSettings SCOPE_IR = new ZoomSettings(Machinegun.machinegunScopeZoom, + IIReference.RES_TEXTURES_GUI.with("item/machinegun/scope_infrared.png")); + private final AmmoFactory ammoFactory = new AmmoFactory<>(this); + public EnumSet upgrades = EnumSet.noneOf(WeaponUpgrade.class); + + @SyncNBT(events = {SyncEvents.ENTITY_CUSTOM1, SyncEvents.ENTITY_CUSTOM2}) + public GunShootingHandler gunHandler = new GunShootingHandler(); + @SyncNBT(events = {SyncEvents.ENTITY_CUSTOM1, SyncEvents.ENTITY_CUSTOM2}) + public GunRecoil recoil = new GunRecoil(); + + @SyncNBT(events = {SyncEvents.ENTITY_CUSTOM1, SyncEvents.ENTITY_CUSTOM2}) + public GunAmmoProviderMagazine loadingMagazine1 = new GunAmmoProviderMagazine(this, this::getUser, + Magazines.MACHINEGUN, Machinegun.clipReloadTime); + + @SyncNBT(events = {SyncEvents.ENTITY_CUSTOM1, SyncEvents.ENTITY_CUSTOM2}) + public GunAmmoProviderMagazine loadingMagazine2 = new GunAmmoProviderMagazine(this, this::getUser, + Magazines.MACHINEGUN, Machinegun.clipReloadTime); + + @SyncNBT(events = {SyncEvents.ENTITY_CUSTOM1, SyncEvents.ENTITY_CUSTOM2}) + public GunAmmoProviderAmmoCrate loadingCrate = new GunAmmoProviderAmmoCrate(this, this::getUser); + + @SyncNBT(events = SyncEvents.ENTITY_DAMAGED) + public SyncedDurability shield = new SyncedDurability(Machinegun.shieldStrengthInitial, 2); + + @SyncNBT(events = SyncEvents.ENTITY_INTERACT) + public FilteredFluidTank tank = new FilteredFluidTank(0) + .withInputFilter(MachinegunCoolantHandler::isValidCoolant); + public FluxStorage infraredFluxStorage = new FluxStorage(0, 16000); + + public EntityMachinegun(World world) + { + super(world); + this.controls = new VehicleControls().withStates("fire", "reload", "aim"); + if(world.isRemote) + this.controls + .withMouseBinding(MouseBinding.MOUSE_RIGHT, "fire") + .withKeyBinding(ClientProxy.keybindManualReload, "reload") + .withKeyBinding(ClientProxy.keybindZoom, "aim"); + + setOriginStack(new ItemStack(IIContent.itemMachinegun)); + } + + public EntityMachinegun(World world, BlockPos pos, float yaw, ItemStack stack) + { + this(world); + this.setPosition(pos.getX(), pos.getY(), pos.getZ()); + this.aim.withCenterYaw(yaw); + setOriginStack(stack); + if(upgrades.contains(WeaponUpgrade.TRIPOD)) + this.posY += 0.385f; + } + + @Override + protected void setOriginStack(ItemStack stack) + { + super.setOriginStack(stack); + + //Set defaults + this.upgrades = EnumSet.noneOf(WeaponUpgrade.class); + this.maxSetupTime = Machinegun.setupTime; + this.aim.withAimCorrectionFunction(this.ammoFactory::getAnglePrediction) + .withPitchLimit(-25.0f, 25f) + .withYawLimit(-55.0f, 55f) + .withAimSpeed(3.5f, 3f); + this.recoil.withRecoilLimits(22.5f, 22.5f) + .withRecoilStrength(Machinegun.recoilVertical, Machinegun.recoilHorizontal, 0.5f, 0.05f) + .withOverheating(Machinegun.maxOverheat, 0.75f) + .withCoolantTank(() -> tank, Integer.MAX_VALUE); + this.gunHandler.withMaxShotDelay(Machinegun.fireDelay) + .withRecoilHandler(recoil) + .withAmmoFactory(ammoFactory) + .withAmmoProvider(this.loadingMagazine1) + .withShootSound(IISounds.machinegunShot, 70) + .withDryFireSound(IISounds.machinegunShotDry); + this.loadingMagazine1.withSounds(IISounds.machinegunReload, IISounds.machinegunUnload); + this.loadingMagazine2.withSounds(IISounds.machinegunReload, IISounds.machinegunUnload); + this.loadingCrate.withSounds(IISounds.machinegunReload, IISounds.machinegunUnload); + this.infraredFluxStorage.setCapacity(0); + this.setSize(0.77f, 0.65f); + + this.loadingMagazine1.setLoadedStack(ItemNBTHelper.getItemStack(stack, "magazine1")); + + //Set upgrade parameters + assert stack.getItem()==IIContent.itemMachinegun; + this.upgrades = IIContent.itemMachinegun.listUpgrades(stack, WeaponUpgrade.class); + for(WeaponUpgrade upgrade : upgrades) + switch(upgrade) + { + case HEAVY_BARREL: + this.gunHandler.withMaxShotDelay(Machinegun.heavyBarrelFireDelay) + .withShootSound(IISounds.machinegunShotHeavyBarrel, 70); + this.recoil.withRecoilStrength(Machinegun.recoilHBVertical, Machinegun.recoilHBHorizontal, 0.5f, 0.05f); + break; + case WATER_COOLING: + this.gunHandler.withShootSound(IISounds.machinegunShotWaterCooled, 70); + this.recoil.withCoolantTank(() -> tank, Machinegun.waterCoolingFluidUsage); + break; + case SECOND_MAGAZINE: + this.gunHandler.withAmmoProvider(loadingMagazine2); + this.loadingMagazine2.setLoadedStack(ItemNBTHelper.getItemStack(stack, "magazine2")); + break; + case HASTY_BIPOD: + this.maxSetupTime = (int)(this.maxSetupTime*Machinegun.hastyBipodSetupTimeMultiplier); + break; + case PRECISE_BIPOD: + this.maxSetupTime = (int)(this.maxSetupTime*Machinegun.preciseBipodSetupTimeMultiplier); + break; + case SHIELD: + this.maxSetupTime = (int)(this.maxSetupTime*Machinegun.shieldSetupTimeMultiplier); + break; + case BELT_FED_LOADER: + this.gunHandler.withAmmoProvider(loadingCrate); + this.maxSetupTime = (int)(this.maxSetupTime*Machinegun.beltFedLoaderSetupTimeMultiplier); + break; + case TRIPOD: + this.maxSetupTime = (int)(this.maxSetupTime*Machinegun.tripodSetupTimeMultiplier); + this.aim.withYawLimit(-180, 180f); + this.setSize(0.77f, 1.65f); + break; + case SCOPE: + break; + case INFRARED_SCOPE: + this.infraredFluxStorage.setCapacity(16000); + break; + default: + break; + } + } + + @Override + public ItemStack getOriginStack() + { + ItemStack stack = super.getOriginStack(); + EasyNBT.wrapNBT(stack) + .withItemStack("magazine1", loadingMagazine1.getLoadedStack()) + .withItemStack("magazine2", loadingMagazine2.getLoadedStack()); + return stack; + } + + @Override + @Nonnull + protected Vec3d getPassengerPosition(Entity passenger) + { + return IIMath.offsetPosDirectionXZ(-0.65f-1f, 0f, aim.getYaw(0), 0) + .addVector(0, -1.15+(upgrades.contains(WeaponUpgrade.TRIPOD)?1f: 0f), 0); + } + + @Override + public void onEntityUpdate() + { + super.onEntityUpdate(); + + //Update components + this.gunHandler.update(); + + //Apply controls + if(isBeingRidden()) + { + Entity user = getPassengers().get(0); + //Aim to where the user is pointing + this.aim.setTarget(aim.clampYawToRange(user.getRotationYawHead()), aim.clampPitchToRange(user.rotationPitch)); + //Set shooter and gun info + this.ammoFactory.setShooterAndGun(user, this) + .setPositionAndVelocity(this.getPositionVector().addVector(0, 0.5f, 0), this.aim, 0.25f, 1f); + + //Drain energy from user + for(ItemStack equipmentStack : user.getEquipmentAndArmor()) + if(equipmentStack.hasCapability(CapabilityEnergy.ENERGY, null)) + { + IEnergyStorage userStorage = equipmentStack.getCapability(CapabilityEnergy.ENERGY, null); + assert userStorage!=null; + int received = infraredFluxStorage.receiveEnergy(userStorage.extractEnergy(Machinegun.infraredScopeEnergyUsage*20, true), false); + userStorage.extractEnergy(received, false); + } + + //Apply infrared effect + if(controls.getKey("aim")&&infraredFluxStorage.extractEnergy(Machinegun.infraredScopeEnergyUsage, false)==Machinegun.infraredScopeEnergyUsage) + IIUtils.applyInfraredVision(user, 10); + + //Check for buttons pressed + if(controls.getKey("reload")) + this.gunHandler.startReloading(); + else if(controls.getKey("fire")) + this.gunHandler.fire(); + } + else + { + this.ammoFactory.setOwner(null); + this.aim.setTarget(aim.getTargetYaw(), aim.clampPitchToRange(-10f)); + this.aim.update(); + } + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + //Try filling coolant tank + if(FluidUtil.interactWithFluidHandler(player, hand, tank)) + { + if(!world.isRemote) + updateEntityForEvent(SyncEvents.ENTITY_INTERACT); + return true; + } + return super.processInitialInteract(player, hand); + } + + @Override + protected void removePassenger(Entity passenger) + { + if(controls!=null) + { + controls.setKey("fire", false); + controls.setKey("aim", false); + } + super.removePassenger(passenger); + } + + + @Override + public void applyOrientationToEntity(Entity entityToUpdate) + { + entityToUpdate.rotationYaw = aim.clampYawToRange(entityToUpdate.rotationYaw); + entityToUpdate.rotationPitch = aim.clampPitchToRange(entityToUpdate.rotationPitch); + } + + @Override + public boolean attackEntityFrom(DamageSource source, float amount) + { + if(source.isProjectile()&&upgrades.contains(WeaponUpgrade.SHIELD)) + { + shield.attackFrom(source, amount); + return shield.isDead(); + } + return super.attackEntityFrom(source, amount); + } + + //--- IEntitySpecialRepairable ---// + + @Override + public boolean canRepair() + { + return shield.canRepair(); + } + + @Override + public boolean repair(int repairPoints) + { + return shield.repair(repairPoints); + } + + @Override + public int getRepairCost() + { + return 1; + } + + //--- IAdvancedTextOverlay ---// + + @SideOnly(Side.CLIENT) + @Override + public String[] getOverlayText(EntityPlayer player, RayTraceResult mop) + { + return new String[0]; + } + + //--- ICameraEntity ---// + + @Override + public boolean isCameraEnabled(EntityPlayer player) + { + boolean aiming = isSetupComplete()&&controls.getKey("aim"); + SCOPE.withZoomEnabled(aiming); + SCOPE_IR.withZoomEnabled(aiming); + return aiming; + } + + @Override + public float getCameraPitch(EntityPlayer cameraPlayer, float partialTicks) + { + return aim.getPitch(partialTicks)+recoil.getRecoilPitch(partialTicks); + } + + @Override + public float getCameraYaw(EntityPlayer cameraPlayer, float partialTicks) + { + return aim.getYaw(partialTicks)+recoil.getRecoilYaw(partialTicks); + } + + @Override + public Vec3d getCameraPos(EntityPlayer cameraPlayer, float partialTicks) + { + float cameraYaw = getCameraYaw(cameraPlayer, partialTicks); + float cameraPitch = getCameraPitch(cameraPlayer, partialTicks); + return getPositionVector() + .addVector(0, (0.34375+0.0625)*0.85-1.75f+0.5+(upgrades.contains(WeaponUpgrade.TRIPOD)?1f: 0f), 0) + .add(IIMath.offsetPosDirectionXYZ(new Vec3d(-1.5+(upgrades.contains(WeaponUpgrade.SCOPE)||upgrades.contains(WeaponUpgrade.INFRARED_SCOPE)?1f: 0f), + 0.0625, 0), cameraYaw, -cameraPitch, 0)); + } + + //--- IEntityZoomProvider ---// + + @Override + public IAdvancedZoom getZoom() + { + if(upgrades.contains(WeaponUpgrade.SCOPE)) + return SCOPE; + return upgrades.contains(WeaponUpgrade.INFRARED_SCOPE)?SCOPE_IR: null; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/mounted_weapon/EntityMortar.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/mounted_weapon/EntityMortar.java new file mode 100644 index 000000000..da0f7ef39 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/mounted_weapon/EntityMortar.java @@ -0,0 +1,223 @@ +package pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon; + +import blusunrize.immersiveengineering.client.ClientUtils; +import blusunrize.immersiveengineering.common.util.Utils; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import pl.pabilo8.immersiveintelligence.api.ammo.utils.AmmoFactory; +import pl.pabilo8.immersiveintelligence.api.utils.camera.ICameraEntity; +import pl.pabilo8.immersiveintelligence.api.utils.camera.ZoomSettings; +import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoom; +import pl.pabilo8.immersiveintelligence.client.ClientProxy; +import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.Mortar; +import pl.pabilo8.immersiveintelligence.common.IIContent; +import pl.pabilo8.immersiveintelligence.common.IISounds; +import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoArtilleryProjectile; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleControls; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleControls.MouseBinding; +import pl.pabilo8.immersiveintelligence.common.util.IIMath; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; + +import javax.annotation.Nonnull; + +/** + * @author Pabilo8 (pabilo@iiteam.net) + * @updated 15.05.2026 + * @ii-approved 0.3.1 + * @since 21.01.2021 + */ +public class EntityMortar extends EntityMountedWeapon implements ICameraEntity +{ + private static final ZoomSettings SIGHTS = new ZoomSettings(new float[]{0.5f}, IIReference.RES_TEXTURES_GUI.with("item/mortar.png")); + private final AmmoFactory ammoFactory = new AmmoFactory<>(this); + + @SyncNBT(events = SyncEvents.ENTITY_CUSTOM1) + public float shootingProgress = 0f, rotateYawPrep = 0f; + + public EntityMortar(World world) + { + super(world); + this.setSize(1f, 1.5f); + this.maxSetupTime = Mortar.setupTime; + + this.aim.withYawLimit(-180f, 180f) + .withPitchLimit(-89, -45) + .withCurrentAngles(0f, 89f); + + this.controls = new VehicleControls().withStates("fire", "aim", "up", "down", "left", "right"); + if(world.isRemote) + this.controls + .withMouseBinding(MouseBinding.MOUSE_RIGHT, "fire") + .withKeyBinding(ClientProxy.keybindZoom, "aim") + .withKeyBinding(ClientUtils.mc().gameSettings.keyBindForward, "up") + .withKeyBinding(ClientUtils.mc().gameSettings.keyBindBack, "down") + .withKeyBinding(ClientUtils.mc().gameSettings.keyBindLeft, "left") + .withKeyBinding(ClientUtils.mc().gameSettings.keyBindRight, "right"); + + + setOriginStack(new ItemStack(IIContent.itemMortar)); + } + + @Override + @Nonnull + protected Vec3d getPassengerPosition(Entity passenger) + { + return IIMath.offsetPosDirectionXZ(0.125f, -0.75f, this.rotationYaw, 0) + .addVector(0, -0.5, 0); + } + + @Override + public void applyOrientationToEntity(Entity entityToUpdate) + { + float yy = this.rotationYaw; + if(isSetupComplete()) + { + float setupWindow = Math.max(1f, maxSetupTime*0.2f); + yy += MathHelper.clamp((setupTime/setupWindow), 0, 1)*25; + } + if(shootingProgress > 0) + { + float ff = shootingProgress/Mortar.shootTime; + if(ff < 0.3) + yy += MathHelper.clamp(ff/0.1, 0, 1)*65; + else if(ff < 0.4) + yy += (1f-MathHelper.clamp((ff-0.3)/0.1, 0, 1))*65; + } + entityToUpdate.setRenderYawOffset(yy); + + float f = MathHelper.wrapDegrees(entityToUpdate.rotationYaw-(this.rotationYaw)); + float f1 = MathHelper.clamp(f, -75.0F, 75.0F); + entityToUpdate.prevRotationYaw += f1-f; + entityToUpdate.rotationYaw += f1-f; + + entityToUpdate.setRotationYawHead(entityToUpdate.rotationYaw); + } + + @Override + public void onEntityUpdate() + { + super.onEntityUpdate(); + + if(!isSetupComplete()) + return; + + float prevShootingProgress = shootingProgress; + + if(shootingProgress==0) + { + //Handle aiming + if(controls.getKey("up")) + aim.setTarget(aim.getTargetYaw(), aim.getTargetPitch()+0.5f); + else if(controls.getKey("down")) + aim.setTarget(aim.getTargetYaw(), aim.getTargetPitch()-0.5f); + + //Handle rotation + if(controls.getKey("left")||controls.getKey("right")) + { + + } + else + rotateYawPrep = Math.max(0, rotateYawPrep-1); + + //Handle firing + if(controls.getKey("fire")&&!getPassengers().isEmpty()) + { + Entity entity = getPassengers().get(0); + if(entity instanceof EntityLivingBase) + { + ItemStack heldItem = ((EntityLivingBase)entity).getHeldItem(EnumHand.MAIN_HAND); + if(heldItem.getItem()==IIContent.itemAmmoMortar) + { + shootingProgress = 1; + controls.setKey("fire", false); + } + } + } + + } + else if(!getPassengers().isEmpty()) + { + Entity entity = getPassengers().get(0); + if(entity instanceof EntityLivingBase) + { + ItemStack heldItem = ((EntityLivingBase)entity).getHeldItem(EnumHand.MAIN_HAND); + if(heldItem.getItem()==IIContent.itemAmmoMortar||shootingProgress > Mortar.shootTime*0.45) + { + if(shootingProgress < Mortar.shootTime) + shootingProgress++; + else + shootingProgress = 0; + if(shootingProgress==Math.round(Mortar.shootTime*0.2f)) + world.playSound(null, posX, posY, posZ, IISounds.mortarLoad, SoundCategory.PLAYERS, 1.25f, 1f); + if(shootingProgress==Math.round(Mortar.shootTime*0.55f)) + if(!world.isRemote) + { + //Play firing sound + world.playSound(null, posX, posY, posZ, IISounds.mortarShot, SoundCategory.PLAYERS, 1.25f, 1f); + + //Create the ammo piece + ammoFactory.setPosition(getPositionVector()) + .setPositionAndVelocity(this.getPositionVector(), this.aim, 2f, 1f) + .setStack(Utils.copyStackWithAmount(heldItem, 1)) + .setShooterAndGun(getPassengers().get(0), this) + .create(); + heldItem.shrink(1); + } + } + else + shootingProgress = 0; + } + } + else + shootingProgress = 0; + if(!world.isRemote&&shootingProgress!=prevShootingProgress) + updateEntityForEvent(SyncEvents.ENTITY_CUSTOM1); + } + + @Override + public boolean attackEntityFrom(DamageSource source, float amount) + { + return amount > 4; + } + + @Override + public IAdvancedZoom getZoom() + { + return SIGHTS; + } + + @Override + public float getCameraPitch(EntityPlayer cameraPlayer, float partialTicks) + { + return 0; + } + + @Override + public float getCameraYaw(EntityPlayer cameraPlayer, float partialTicks) + { + return aim.getYaw(partialTicks); + } + + @Override + public Vec3d getCameraPos(EntityPlayer cameraPlayer, float partialTicks) + { + return getPositionVector().addVector(0, 1, 0); + } + + + @Override + public boolean isCameraEnabled(EntityPlayer player) + { + return isSetupComplete()&&controls.getKey("aim"); + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/mounted_weapon/EntityMountedWeapon.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/mounted_weapon/EntityMountedWeapon.java new file mode 100644 index 000000000..bfabb987e --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/mounted_weapon/EntityMountedWeapon.java @@ -0,0 +1,305 @@ +package pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon; + +import blusunrize.immersiveengineering.api.tool.ZoomHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import pl.pabilo8.immersiveintelligence.client.util.CameraHandler; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleControls; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; +import pl.pabilo8.immersiveintelligence.common.util.entity.ISyncNBTEntity; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunAimCoordinate; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; + +/** + * Common class for mounted weapons + * + * @author Pabilo8 (pabilo@iiteam.net) + * @ii-approved 0.3.1 + * @since 15.05.2026 + */ +public abstract class EntityMountedWeapon extends Entity implements ISyncNBTEntity +{ + @SyncNBT(events = SyncEvents.ENTITY_VEHICLE_CONTROLS) + public VehicleControls controls = new VehicleControls(); + @SyncNBT(events = {SyncEvents.ENTITY_CUSTOM1, SyncEvents.ENTITY_CUSTOM2}) + public GunAimCoordinate aim = new GunAimCoordinate(); + @SyncNBT(events = SyncEvents.ENTITY_CUSTOM1) + public int setupTime = 0, maxSetupTime = 1; + //DO NOT modify directly outside of here, it's only public because of SyncNBT limitations + @SyncNBT(events = SyncEvents.ENTITY_INTERACT) + public ItemStack originStack = ItemStack.EMPTY; + + private AxisAlignedBB baseAabb; + + public EntityMountedWeapon(World world) + { + super(world); + setSize(1f, 1f); + } + + @Override + protected final void entityInit() + { + //Do not overwrite, breaks loading order + } + + @Override + public final void onUpdate() + { + //Just so child classes do not overwrite it + super.onUpdate(); + } + + @Override + public void onEntityUpdate() + { + super.onEntityUpdate(); + + if(setupTime < maxSetupTime) + setupTime += 1; + + //Check if there is a block supporting the weapon + if(checkSupportAndDrop()) + return; + + //Update look angle + this.prevRotationYaw = aim.getYaw(0); + this.prevRotationPitch = aim.getPitch(0); + + //Check and send controls from client + if(isBeingRidden()) + { + aim.update(); + if(world.isRemote) + handleClientControls(); + } + + //Update displayed angles + this.rotationYaw = aim.getYaw(0); + this.rotationPitch = aim.getPitch(0); + } + + protected boolean checkSupportAndDrop() + { + BlockPos checkPos = getSupportCheckPos(); + if(world.isRemote||ticksExisted%20!=0||checkPos==null) + return false; + if(!world.getBlockState(checkPos).isSideSolid(world, checkPos, EnumFacing.UP)) + { + setDead(); + entityDropItem(originStack, 0f); + return true; + } + return false; + } + + @Nullable + protected BlockPos getSupportCheckPos() + { + return getPosition().down(); + } + + public boolean isSetupComplete() + { + return maxSetupTime <= 0||setupTime >= maxSetupTime; + } + + @SideOnly(Side.CLIENT) + private void handleClientControls() + { + EntityPlayer player = Minecraft.getMinecraft().player; + if(player.getRidingEntity()!=this) + return; + if(controls!=null&&controls.clientUpdate()) + sendServerUpdateForEvent(SyncEvents.ENTITY_VEHICLE_CONTROLS); + } + + /** + * Sets the itemstack from which this weapon is created. + * + * @param stack the itemstack + * @implNote Override to check for ugprades to be applied + */ + protected void setOriginStack(ItemStack stack) + { + this.originStack = stack.copy(); + if(!world.isRemote) + updateEntityForEvent(SyncEvents.ENTITY_CUSTOM1); + } + + public ItemStack getOriginStack() + { + return originStack; + } + + //--- Collisions ---// + + + @Override + protected void setSize(float width, float height) + { + this.width = width; + this.height = height; + this.baseAabb = new AxisAlignedBB(-width/2f, 0, -width/2f, width/2f, height, width/2f); + } + + @Override + public final boolean canBeCollidedWith() + { + return true; + } + + @Override + public final AxisAlignedBB getCollisionBoundingBox() + { + return getEntityBoundingBox(); + } + + @Override + public final AxisAlignedBB getCollisionBox(Entity entityIn) + { + return getEntityBoundingBox(); + } + + @Override + public final AxisAlignedBB getEntityBoundingBox() + { + return baseAabb.offset(getPositionVector()); + } + + //--- Passenger ---// + + @Override + public boolean canPassengerSteer() + { + return false; + } + + @Override + public boolean shouldRiderSit() + { + return false; + } + + @Override + public final void updatePassenger(Entity passenger) + { + if(this.isPassenger(passenger)) + { + Vec3d pos = getPositionVector().add(getPassengerPosition(passenger)); + passenger.setPosition(pos.x, pos.y, pos.z); + } + } + + @Nonnull + protected abstract Vec3d getPassengerPosition(Entity passenger); + + @Override + protected void removePassenger(Entity passenger) + { + if(world.isRemote&&passenger instanceof EntityPlayerSP) + { + CameraHandler.setEnabled(false); + ZoomHandler.isZooming = false; + } + else + updateEntityForEvent(SyncEvents.ENTITY_PASSENGER); + Vec3d pos = getPositionVector().add(getPassengerPosition(passenger)); + passenger.setPosition(pos.x, pos.y, pos.z); + super.removePassenger(passenger); + } + + @Override + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + //Pick up weapon + if(player.isSneaking()&&getPassengers().isEmpty()) + { + setDead(); + if(!world.isRemote) + entityDropItem(getOriginStack(), 0f); + return true; + } + //Enter as passenger + else if(isSetupComplete()&&player.getRidingEntity()!=this&&getPassengers().isEmpty()) + { + player.startRiding(this); + if(!world.isRemote) + updateEntityForEvent(SyncEvents.ENTITY_PASSENGER); + return true; + } + return true; + } + + @Override + public boolean attackEntityFrom(DamageSource source, float amount) + { + updateEntityForEvent(SyncEvents.ENTITY_DAMAGED); + return super.attackEntityFrom(source, amount); + } + + @Nullable + protected Entity getUser() + { + List passengers = getPassengers(); + return passengers.isEmpty()?null: passengers.get(0); + } + + //--- NBT ---// + + @Override + public void doPostWorldLoadSetup(NBTTagCompound tag) + { + setOriginStack(this.originStack); + } + + @Override + public final void readEntityFromNBT(NBTTagCompound compound) + { + ISyncNBTEntity.super.readEntityFromNBT(compound); + } + + @Override + public final void writeEntityToNBT(NBTTagCompound compound) + { + ISyncNBTEntity.super.writeEntityToNBT(compound); + } + + //--- Misc ---// + + @Override + public final boolean canRenderOnFire() + { + return false; + } + + @Override + public final void setFire(int seconds) + { + + } + + @Override + public final ItemStack getPickedResult(RayTraceResult target) + { + return originStack; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/mounted_weapon/EntityTripodPeriscope.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/mounted_weapon/EntityTripodPeriscope.java new file mode 100644 index 000000000..9a883f385 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/mounted_weapon/EntityTripodPeriscope.java @@ -0,0 +1,108 @@ +package pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import pl.pabilo8.immersiveintelligence.api.utils.camera.ICameraEntity; +import pl.pabilo8.immersiveintelligence.api.utils.camera.ZoomSettings; +import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoom; +import pl.pabilo8.immersiveintelligence.client.ClientProxy; +import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Tools.TripodPeriscope; +import pl.pabilo8.immersiveintelligence.common.IIContent; +import pl.pabilo8.immersiveintelligence.common.util.IIMath; +import pl.pabilo8.immersiveintelligence.common.util.IIReference; + +import javax.annotation.Nonnull; + +import static pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Tools.TripodPeriscope.tripodZoomSteps; + +/** + * @author Pabilo8 (pabilo@iiteam.net) + * @updated 15.05.2026 + * @ii-approved 0.3.1 + * @since 21.01.2021 + */ +public class EntityTripodPeriscope extends EntityMountedWeapon implements ICameraEntity +{ + private static final ZoomSettings ZOOM = new ZoomSettings(tripodZoomSteps, IIReference.RES_TEXTURES_GUI.with("item/binoculars.png")) + .withZoomEnabled(true); + + public EntityTripodPeriscope(World world) + { + super(world); + this.setSize(0.77f, 2.4375f); + this.controls.withStates("aim"); + if(world.isRemote) + this.controls.withKeyBinding(ClientProxy.keybindZoom, "aim"); + + this.aim.withYawLimit(-180.0f, 180f) + .withPitchLimit(22.5f, -22.5f) + .withAimSpeed(TripodPeriscope.turnSpeed, 1f); + + this.maxSetupTime = TripodPeriscope.setupTime; + this.setOriginStack(new ItemStack(IIContent.itemTripodPeriscope)); + } + + @Override + @Nonnull + protected Vec3d getPassengerPosition(Entity passenger) + { + return IIMath.offsetPosDirectionXZ(-0.5, -0.03125f, this.aim.getYaw(0), 0); + } + + @Override + public void onEntityUpdate() + { + super.onEntityUpdate(); + + if(isSetupComplete()&&!getPassengers().isEmpty()) + { + Entity user = getPassengers().get(0); + aim.setTarget(user.getRotationYawHead(), user.rotationPitch); + } + } + + @Override + public void applyOrientationToEntity(Entity entityToUpdate) + { + entityToUpdate.setRenderYawOffset(this.aim.getYaw(0)); + entityToUpdate.setRotationYawHead(entityToUpdate.rotationYaw); + } + + //--- ICameraEntity ---// + + @Override + public boolean isCameraEnabled(EntityPlayer player) + { + return isSetupComplete()&&controls.getKey("aim"); + } + + @Override + public float getCameraPitch(EntityPlayer cameraPlayer, float partialTicks) + { + return aim.getPitch(partialTicks); + } + + @Override + public float getCameraYaw(EntityPlayer cameraPlayer, float partialTicks) + { + return aim.getYaw(partialTicks); + } + + @Override + public Vec3d getCameraPos(EntityPlayer cameraPlayer, float partialTicks) + { + float cameraYaw = getCameraYaw(cameraPlayer, partialTicks); + float cameraPitch = getCameraPitch(cameraPlayer, partialTicks); + return getPositionVector() + .add(IIMath.offsetPosDirectionXYZ(new Vec3d(0, 2.5f, -0.5f), cameraYaw, cameraPitch, 0)); + } + + @Override + public IAdvancedZoom getZoom() + { + return ZOOM; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityDrone.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityDrone.java index 49ec6ce16..bbbcf56eb 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityDrone.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityDrone.java @@ -11,7 +11,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHandSide; -import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.NonNullList; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.Vec3d; @@ -23,18 +22,23 @@ import pl.pabilo8.immersiveintelligence.api.ammo.utils.AmmoFactory; import pl.pabilo8.immersiveintelligence.api.utils.IEntitySpecialRepairable; import pl.pabilo8.immersiveintelligence.api.utils.vehicles.IVehicleMultiPart; +import pl.pabilo8.immersiveintelligence.client.fx.utils.ParticleRegistry; +import pl.pabilo8.immersiveintelligence.client.util.carversound.ConditionCompoundSound; import pl.pabilo8.immersiveintelligence.common.IIContent; +import pl.pabilo8.immersiveintelligence.common.IISounds; import pl.pabilo8.immersiveintelligence.common.entity.EntityHans; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoArtilleryProjectile; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.drone.AIDroneTarget; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleBlueprint; -import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleDurability; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehiclePart; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat.SeatInfo; import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; +import pl.pabilo8.immersiveintelligence.common.util.entity.IIEntityUtils; import pl.pabilo8.immersiveintelligence.common.util.entity.ISyncNBTEntity; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; import javax.annotation.Nullable; +import javax.vecmath.Vector2f; import java.util.List; /** @@ -47,6 +51,8 @@ public class EntityDrone extends EntityFlying implements ISyncNBTEntity[] partArray; + @SideOnly(Side.CLIENT) + private ConditionCompoundSound engineNoise; //Sub-entities for colision and hitboxes private EntityVehiclePart partMain, partTankRight1, partTankRight2, partTankLeft1, partTankLeft2, partEngine; @@ -55,9 +61,9 @@ public class EntityDrone extends EntityFlying implements ISyncNBTEntity(this); - ammoFactory.setStack(IIContent.itemAmmoGuidedMissile.getAmmoStack(IIContent.ammoCoreIron, CoreType.CANISTER, FuseType.CONTACT, IIContent.ammoComponentRDX)); + this.ammoFactory.setStack(IIContent.itemAmmoGuidedMissile.getAmmoStack(IIContent.ammoCoreIron, CoreType.CANISTER, FuseType.CONTACT, IIContent.ammoComponentRDX)); //Set durability and armor - durabilityMain = new VehicleDurability(100, 4); - durabilityTankLeft = new VehicleDurability(45, 6); - durabilityTankRight = new VehicleDurability(45, 6); - durabilityEngine = new VehicleDurability(40, 2); + this.durabilityMain = new SyncedDurability(100, 4); + this.durabilityTankLeft = new SyncedDurability(45, 6); + this.durabilityTankRight = new SyncedDurability(45, 6); + this.durabilityEngine = new SyncedDurability(40, 2); - durabilityRotorFrontRight = new VehicleDurability(20, 24); - durabilityRotorFrontLeft = new VehicleDurability(20, 24); - durabilityRotorBackRight = new VehicleDurability(20, 24); - durabilityRotorBackLeft = new VehicleDurability(20, 24); + this.durabilityRotorFrontRight = new SyncedDurability(20, 24); + this.durabilityRotorFrontLeft = new SyncedDurability(20, 24); + this.durabilityRotorBackRight = new SyncedDurability(20, 24); + this.durabilityRotorBackLeft = new SyncedDurability(20, 24); //Set parts - partArray = new EntityVehiclePart[]{ + this.partArray = new EntityVehiclePart[]{ partMain = new EntityVehiclePart<>(this, "main", Vec3d.ZERO, 0.65, 0.4) .withHitbox(durabilityMain), @@ -216,23 +222,22 @@ public void onEntityUpdate() } } - if(world.isRemote)//&&world.getTotalWorldTime()%2==0 + if(world.isRemote) { - Vec3d smokeDir = this.getVectorForRotation(0, this.rotationYaw).scale(-0.25); - spawnExhaustParticle(exhaust1.getPositionVector(), smokeDir); - spawnExhaustParticle(exhaust2.getPositionVector(), smokeDir); + //Create and sustain engine noise + if(engineNoise==null) + this.engineNoise = new ConditionCompoundSound<>(IISounds.dronePropellerLoop, this.getPositionVector(), this, drone -> !drone.isDead); + this.engineNoise.setPosition(getPositionVector()); + this.engineNoise.setVolume(1f); + this.engineNoise.setPitch((float)IIEntityUtils.getEntityMotion(this).lengthSquared()*0.1f+0.95f); + + if(ticksExisted%2==0) + { + Vec3d smokeDir = this.getVectorForRotation(0, this.rotationYaw).scale(-0.25); + ParticleRegistry.spawnParticle("vehicle/exhaust_light", exhaust1.getPositionVector(), smokeDir, new Vector2f(0, 0)); + ParticleRegistry.spawnParticle("vehicle/exhaust_light", exhaust2.getPositionVector(), smokeDir, new Vector2f(0, 0)); + } } - - } - - @SideOnly(Side.CLIENT) - private void spawnExhaustParticle(Vec3d position, Vec3d smokeDir) - { - float exhaustRandom = (world.getTotalWorldTime()%20/20f)*0.2f; - world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, - position.x, position.y, position.z, - 0+smokeDir.x, 0.015625*3, smokeDir.z - ); } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityMotorbike.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityMotorbike.java index cfbb19106..e2a67f6be 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityMotorbike.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityMotorbike.java @@ -23,7 +23,11 @@ import pl.pabilo8.immersiveintelligence.client.ClientProxy; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Vehicles.Motorbike; import pl.pabilo8.immersiveintelligence.common.IIContent; -import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.*; +import pl.pabilo8.immersiveintelligence.common.IISounds; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleBlueprint; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleControls; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleFuelTank; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleType; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.*; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat.SeatInfo; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.propulsion.VehicleEngineFuelBased; @@ -32,6 +36,7 @@ import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; import pl.pabilo8.immersiveintelligence.common.util.entity.IIEntityUtils; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; import javax.annotation.Nullable; @@ -69,21 +74,22 @@ public class EntityMotorbike extends EntityVehicleBase public EntityVehiclePart partSeat, partUpgradeSeat, partUpgradeCargo; public SeatInfo seatRider, seatPassenger, seatTowed; + @SyncNBT(events = SyncEvents.ENTITY_VEHICLE_CONTROLS) + public VehicleControls driverControls; + @SyncNBT(events = SyncEvents.ENTITY_DAMAGED) - public VehicleDurability frontWheelDurability, backWheelDurability, engineDurability, fuelTankDurability; + public SyncedDurability frontWheelDurability, backWheelDurability, engineDurability, fuelTankDurability; @SyncNBT(events = SyncEvents.ENTITY_VEHICLE_FUEL, time = 40) public VehicleFuelTank fuelTank; - @SyncNBT(events = SyncEvents.ENTITY_VEHICLE_CONTROLS) - public VehicleControls driverControls; @SyncNBT(events = SyncEvents.ENTITY_VEHICLE_FUEL) - public VehicleEngineFuelBased engine; + public VehicleEngineFuelBased engine; @SyncNBT(events = SyncEvents.ENTITY_VEHICLE_FUEL) public VehicleTransmission transmission; - public EntityMotorbike(World worldIn) + public EntityMotorbike(World world) { - super(worldIn); + super(world); } @SuppressWarnings("unchecked") @@ -91,11 +97,11 @@ public EntityMotorbike(World worldIn) protected EntityVehiclePart[] vehicleInit() { //Hitboxes - this.frontWheelDurability = new VehicleDurability(Motorbike.wheelDurability, 0); - this.backWheelDurability = new VehicleDurability(Motorbike.wheelDurability, 0); - this.engineDurability = new VehicleDurability(Motorbike.engineDurability, 7) + this.frontWheelDurability = new SyncedDurability(Motorbike.wheelDurability, 0); + this.backWheelDurability = new SyncedDurability(Motorbike.wheelDurability, 0); + this.engineDurability = new SyncedDurability(Motorbike.engineDurability, 7) .withParent(this.durabilityMain); - this.fuelTankDurability = new VehicleDurability(Motorbike.fuelTankDurability, 4) + this.fuelTankDurability = new SyncedDurability(Motorbike.fuelTankDurability, 4) .withParent(this.durabilityMain); //Controls @@ -138,8 +144,11 @@ protected EntityVehiclePart[] vehicleInit() .withWeightShare(0.4); this.fuelTank = new VehicleFuelTank<>(this, 12000) .withDurability(fuelTankDurability); - this.engine = new VehicleEngineFuelBased(fuelTank) - .withDurability(engineDurability); + this.engine = new VehicleEngineFuelBased<>(this, fuelTank) + .withDurability(engineDurability) + .withEngineSound(IISounds.engineLightLoop, 0.95f, 1.25f) + .withSpeedTorque(200, 40) + .withFuelUsage(4, 32); this.transmission = new VehicleTransmission(this.engine) .withDurability(engineDurability) .withRatios(20, -0.25, 0.5, 1) @@ -242,9 +251,9 @@ public boolean onInteractWithPart(EntityVehiclePart part, EntityPlayer player, E else if(!world.isRemote) { if(part==partSeat) - return player.startRiding(EntityVehicleSeat.getOrCreateSeat(seatRider)); + return EntityVehicleSeat.enterSeat(player, seatRider); else if(part==partUpgradeSeat) - return player.startRiding(EntityVehicleSeat.getOrCreateSeat(seatPassenger)); + return EntityVehicleSeat.enterSeat(player, seatPassenger); } return false; } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityTrackedMotorbike.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityTrackedMotorbike.java index 96640fb5f..acf48f094 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityTrackedMotorbike.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityTrackedMotorbike.java @@ -19,7 +19,11 @@ import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeTechTree; import pl.pabilo8.immersiveintelligence.client.ClientProxy; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Vehicles.Motorbike; -import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.*; +import pl.pabilo8.immersiveintelligence.common.IISounds; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleBlueprint; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleControls; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleFuelTank; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleType; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.*; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat.SeatInfo; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.propulsion.VehicleEngineFuelBased; @@ -29,6 +33,7 @@ import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; import pl.pabilo8.immersiveintelligence.common.util.entity.IIEntityUtils; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -50,15 +55,16 @@ public class EntityTrackedMotorbike extends EntityVehicleBase partDriverSeat, partPassengerSeat; public SeatInfo seatDriver, seatPassenger, seatTowed; + @SyncNBT(events = SyncEvents.ENTITY_VEHICLE_CONTROLS) + public VehicleControls driverControls; + @SyncNBT(events = SyncEvents.ENTITY_DAMAGED) - public VehicleDurability frontWheelDurability, backWheelDurability, engineDurability, fuelTankDurability; + public SyncedDurability frontWheelDurability, backWheelDurability, engineDurability, fuelTankDurability; @SyncNBT(events = SyncEvents.ENTITY_VEHICLE_FUEL, time = 40) public VehicleFuelTank fuelTank; - @SyncNBT(events = SyncEvents.ENTITY_VEHICLE_CONTROLS) - public VehicleControls driverControls; @SyncNBT(events = SyncEvents.ENTITY_VEHICLE_FUEL) - public VehicleEngineFuelBased engine; + public VehicleEngineFuelBased engine; @SyncNBT(events = SyncEvents.ENTITY_VEHICLE_FUEL) public VehicleTransmission transmission1, transmission2; @@ -72,11 +78,11 @@ public EntityTrackedMotorbike(World worldIn) protected EntityVehiclePart[] vehicleInit() { //Hitboxes - this.frontWheelDurability = new VehicleDurability(Motorbike.wheelDurability, 0); - this.backWheelDurability = new VehicleDurability(Motorbike.wheelDurability, 0); - this.engineDurability = new VehicleDurability(Motorbike.engineDurability, 7) + this.frontWheelDurability = new SyncedDurability(Motorbike.wheelDurability, 0); + this.backWheelDurability = new SyncedDurability(Motorbike.wheelDurability, 0); + this.engineDurability = new SyncedDurability(Motorbike.engineDurability, 7) .withParent(this.durabilityMain); - this.fuelTankDurability = new VehicleDurability(Motorbike.fuelTankDurability, 4) + this.fuelTankDurability = new SyncedDurability(Motorbike.fuelTankDurability, 4) .withParent(this.durabilityMain); //Controls @@ -155,8 +161,11 @@ protected EntityVehiclePart[] vehicleInit() //Components this.fuelTank = new VehicleFuelTank<>(this, 12000) .withDurability(fuelTankDurability); - this.engine = new VehicleEngineFuelBased(fuelTank) - .withDurability(engineDurability); + this.engine = new VehicleEngineFuelBased<>(this, fuelTank) + .withDurability(engineDurability) + .withEngineSound(IISounds.engineLightLoop, 0.95f, 1.25f) + .withSpeedTorque(360, 80) + .withFuelUsage(4, 40); this.transmission1 = new VehicleTransmission(this.engine) .withDurability(engineDurability) .withRatios(20, 0.5, 1) diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityVehicleBase.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityVehicleBase.java index e00ffba1d..5dc26af1c 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityVehicleBase.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/EntityVehicleBase.java @@ -1,11 +1,15 @@ package pl.pabilo8.immersiveintelligence.common.entity.vehicle; +import blusunrize.immersiveengineering.common.util.Utils; +import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; import com.google.common.collect.Sets; import net.minecraft.entity.Entity; import net.minecraft.entity.IEntityMultiPart; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -18,14 +22,15 @@ import net.minecraftforge.fml.relauncher.SideOnly; import pl.pabilo8.immersiveintelligence.api.style.IStyleCustomizable; import pl.pabilo8.immersiveintelligence.api.style.StyleConstraints; +import pl.pabilo8.immersiveintelligence.api.style.StyleConstraints.PaintStyleConstraint; import pl.pabilo8.immersiveintelligence.api.style.StyleCustomization; import pl.pabilo8.immersiveintelligence.api.upgrade.IManagedUpgradableDevice; import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeManager; +import pl.pabilo8.immersiveintelligence.api.upgrade.UpgradeUtils.MachineStyle; import pl.pabilo8.immersiveintelligence.api.utils.IEntitySpecialRepairable; import pl.pabilo8.immersiveintelligence.api.utils.vehicles.IVehicleMultiPart; import pl.pabilo8.immersiveintelligence.common.IIUtils; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleBlueprint; -import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleDurability; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.*; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat.SeatInfo; import pl.pabilo8.immersiveintelligence.common.util.IIColor; @@ -34,6 +39,7 @@ import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; import pl.pabilo8.immersiveintelligence.common.util.entity.ISyncNBTEntity; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -50,11 +56,11 @@ * @since 29.09.2025 */ public abstract class EntityVehicleBase> extends Entity implements ISyncNBTEntity, IVehicleMultiPart, - IEntitySpecialRepairable, IManagedUpgradableDevice, IStyleCustomizable + IEntitySpecialRepairable, IManagedUpgradableDevice, IStyleCustomizable, IIEInventory { //--- Constants ---// private static final StyleConstraints DEFAULT_STYLE_CONSTRAINTS = new StyleConstraints("steel", - true, Sets.newHashSet("steel"), Collections.emptySet()); + PaintStyleConstraint.PAINTS_COLOR_ONLY, Sets.newHashSet("steel"), Collections.emptySet()); //--- Parts ---// private AxisAlignedBB AABB; @@ -66,13 +72,13 @@ public abstract class EntityVehicleBase> extends //--- Systems ---// @SyncNBT(events = SyncEvents.TILE_UPGRADES_MODIFIED) - protected StyleCustomization style; + public StyleCustomization style; @SyncNBT(events = SyncEvents.TILE_UPGRADES_MODIFIED) - protected UpgradeManager upgradeManager; + public UpgradeManager upgradeManager; //--- Motion & Orientation ---// @SyncNBT(events = SyncEvents.ENTITY_DAMAGED) - public VehicleDurability durabilityMain; + public SyncedDurability durabilityMain; @SyncNBT public Vec3d velocity = Vec3d.ZERO; @SyncNBT(events = {SyncEvents.ENTITY_VEHICLE_CONTROLS, SyncEvents.ENTITY_PASSENGER, SyncEvents.ENTITY_COLLISION}) @@ -91,10 +97,10 @@ public abstract class EntityVehicleBase> extends public EntityVehicleBase(World world) { super(world); + internalVehicleInit(); } - @Override - protected final void entityInit() + protected final void internalVehicleInit() { //Initialize part collections ArrayList> wheelsList = new ArrayList<>(); @@ -106,11 +112,11 @@ protected final void entityInit() this.blueprint = meta; //Set main durability - this.durabilityMain = new VehicleDurability(blueprint.baseDurability(), blueprint.baseArmor()); + this.durabilityMain = new SyncedDurability(blueprint.baseDurability(), blueprint.baseArmor()); //noinspection unchecked this.upgradeManager = ((UpgradeManager)new UpgradeManager<>(this)); this.style = new StyleCustomization(getVehicleStyleConstraints()); - this.style.withColor(IIColor.fromHSV(14/64f, 0.35f, 0.85f)); + this.style.withColor(IIColor.getPaintSystemColor(Utils.RAND.nextInt(64))); //Calculate vehicle size and collect wheels double minX = Integer.MAX_VALUE, minY = Integer.MAX_VALUE, minZ = Integer.MAX_VALUE; @@ -165,6 +171,12 @@ else if(part.offset.z+part.aabb.maxZ > maxZ) updateParts(); } + @Override + protected final void entityInit() + { + //Do not initialize here, as it is called before the constructor + } + /** * Initializes the vehicle with hitboxes and parts. * Implemented by subclasses to define vehicle-specific parts. @@ -211,11 +223,9 @@ public final void onUpdate() updateParts(); //Send an update to the clients after a collision, client has some errors in collision handling + //hasCollidedBefore = true; if(!this.world.isRemote&&!hasCollidedBefore&&collidedHorizontally) - { - //hasCollidedBefore = true; sendServerPositionMotionUpdate(); - } } /** @@ -345,24 +355,24 @@ private void calculateForceBasedOrientation() double verticalForce = wheel.getVerticalForceBalance(); //Front/Rear classification - if(wheel.offset.x > 0) + if(wheel.offset.x >= 0) { frontForce += verticalForce; frontWheels++; } - else + if(wheel.offset.x <= 0) { rearForce += verticalForce; rearWheels++; } //Left/Right classification - if(wheel.offset.z > 0) + if(wheel.offset.z >= 0) { rightForce += verticalForce; rightWheels++; } - else + if(wheel.offset.z <= 0) { leftForce += verticalForce; leftWheels++; @@ -544,17 +554,13 @@ private Vec3d handleCollisions(Vec3d currentPos, Vec3d attemptedMove) //First pass: Find the most restrictive Y movement from ALL collision boxes for(AxisAlignedBB collisionBox : collisions) - { if(mostRestrictiveY!=0) { double yOffset = collisionBox.calculateYOffset(tempBB, mostRestrictiveY); //Take the most restrictive (smallest absolute value) Y movement if(Math.abs(yOffset) < Math.abs(mostRestrictiveY)) - { mostRestrictiveY = yOffset; - } } - } //Apply the Y movement first if(mostRestrictiveY!=partAdjustedMove.y) @@ -569,7 +575,6 @@ private Vec3d handleCollisions(Vec3d currentPos, Vec3d attemptedMove) //Second pass: Find the most restrictive X movement for(AxisAlignedBB collisionBox : collisions) - { if(mostRestrictiveX!=0) { double xOffset = collisionBox.calculateXOffset(tempBB, mostRestrictiveX); @@ -579,17 +584,13 @@ private Vec3d handleCollisions(Vec3d currentPos, Vec3d attemptedMove) collided = collidedHorizontally = true; } } - } //Apply X movement if(mostRestrictiveX!=partAdjustedMove.x) - { tempBB = tempBB.offset(mostRestrictiveX, 0.0D, 0.0D); - } //Third pass: Find the most restrictive Z movement for(AxisAlignedBB collisionBox : collisions) - { if(mostRestrictiveZ!=0) { double zOffset = collisionBox.calculateZOffset(tempBB, mostRestrictiveZ); @@ -599,7 +600,6 @@ private Vec3d handleCollisions(Vec3d currentPos, Vec3d attemptedMove) collided = collidedHorizontally = true; } } - } partAdjustedMove = new Vec3d(mostRestrictiveX, mostRestrictiveY, mostRestrictiveZ); @@ -1104,6 +1104,12 @@ public UpgradeManager getUpgradeManager() return this.upgradeManager; } + @Override + public MachineStyle getUpgradableMachineStyle() + { + return MachineStyle.STEEL; + } + @Override public T master() { @@ -1147,4 +1153,26 @@ public T getCapability(Capability capability, @Nullable EnumFacing facing return (T)component; return super.getCapability(capability, facing); } + + //--- IIEInventory ---// + + public NonNullList getInventory() + { + return NonNullList.create(); + } + + public boolean isStackValid(int slot, ItemStack stack) + { + return true; + } + + public int getSlotLimit(int slot) + { + return 64; + } + + public void doGraphicalUpdates(int slot) + { + updateEntityForEvent(SyncEvents.ENTITY_INTERACT); + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldAntiAir.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldAntiAir.java deleted file mode 100644 index 19982bca7..000000000 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldAntiAir.java +++ /dev/null @@ -1,9 +0,0 @@ -package pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun; - -/** - * @author Pabilo8 (pabilo@iiteam.net) - * @since 29.09.2025 - */ -public class EntityFieldAntiAir -{ -} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldFlak.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldFlak.java new file mode 100644 index 000000000..bed083d21 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldFlak.java @@ -0,0 +1,265 @@ +package pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun; + +import blusunrize.immersiveengineering.client.ClientUtils; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import pl.pabilo8.immersiveintelligence.api.ammo.utils.AmmoFactory; +import pl.pabilo8.immersiveintelligence.api.utils.camera.ICameraEntity; +import pl.pabilo8.immersiveintelligence.client.ClientProxy; +import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Vehicles.FieldHowitzer; +import pl.pabilo8.immersiveintelligence.common.IISounds; +import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.EntityVehicleTowable; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleBlueprint; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleControls; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleControls.MouseBinding; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleType; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehiclePart; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat.SeatInfo; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleWheel; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.WheelType; +import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIBulletMagazine.Magazines; +import pl.pabilo8.immersiveintelligence.common.util.IIMath; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunAimCoordinate; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunAmmoProvider; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunShootingHandler; +import pl.pabilo8.immersiveintelligence.common.util.gun.ammoprovider.GunAmmoProviderMagazine; + +/** + * @author Pabilo8 (pabilo@iiteam.net) + * @since 29.09.2025 + */ +@VehicleBlueprint(id = "immersiveintelligence:towed/field_flak", mass = 4, type = VehicleType.TOWED_WEAPON) +public class EntityFieldFlak extends EntityVehicleTowable implements ICameraEntity +{ + //--- AABBs ---// + static final AxisAlignedBB AABB_WHEEL = new AxisAlignedBB(-0.25, 0d, 0.25, 0.25, 1d, -0.25); + static final AxisAlignedBB AABB_MAIN = new AxisAlignedBB(-0.5, 0.125d, -0.5, 0.5, 0.625, 0.5); + static final AxisAlignedBB AABB_GUN = new AxisAlignedBB(-0.35, 0.25d, 0.35, 0.35, 1d, -0.35); + static final AxisAlignedBB AABB_SHIELD = new AxisAlignedBB(-0.35, 0d, -0.35, 0.35, 1.25d, 0.35); + + //--- Entity Variables ---// + private AmmoFactory ammoFactory; + public SeatInfo seatCommander, seatGunner; + public EntityVehicleWheel partWheelRight; + public EntityVehicleWheel partWheelLeft; + + @SyncNBT(events = SyncEvents.ENTITY_DAMAGED) + public SyncedDurability durabilityRightWheel, durabilityLeftWheel, durabilityGun, durabilityShield; + @SyncNBT(events = SyncEvents.ENTITY_VEHICLE_CONTROLS) + public VehicleControls commanderControls, gunnerControls; + + @SyncNBT(events = SyncEvents.ENTITY_CUSTOM1) + public GunAimCoordinate aim; + @SyncNBT(events = SyncEvents.ENTITY_CUSTOM1) + public GunShootingHandler shootingHandler1, shootingHandler2; + @SyncNBT(events = SyncEvents.ENTITY_CUSTOM1) + public GunAmmoProvider ammoProviderMagazine1, ammoProviderMagazine2; + private EntityVehiclePart partGun; + + public EntityFieldFlak(World world) + { + super(world); + } + + @SuppressWarnings("unchecked") + @Override + protected EntityVehiclePart[] vehicleInit() + { + //Gun internals + this.ammoFactory = new AmmoFactory<>(this); + this.aim = new GunAimCoordinate() + .withPitchLimit(-89, 13.5f) + .withYawLimit(-180, 180) + .withCenterYaw(this.rotationYaw); + //Gun 1 + this.shootingHandler1 = new GunShootingHandler() + .withAmmoFactory(this.ammoFactory) + .withMaxShotDelay(3) + .withAmmoProvider(this.ammoProviderMagazine1 = new GunAmmoProviderMagazine(this, () -> EntityVehicleSeat.getPassengerOnSeat(seatGunner), + Magazines.AUTOCANNON, FieldHowitzer.reloadTime + )) + .withShootSound(IISounds.autocannonShot, 40); + //Gun 2 + this.shootingHandler2 = new GunShootingHandler() + .withAmmoFactory(this.ammoFactory) + .withMaxShotDelay(3) + .withAmmoProvider(this.ammoProviderMagazine2 = new GunAmmoProviderMagazine(this, () -> EntityVehicleSeat.getPassengerOnSeat(seatGunner), + Magazines.AUTOCANNON, FieldHowitzer.reloadTime + )) + .withShootSound(IISounds.autocannonShot, 40); + + //Hitboxes + this.durabilityRightWheel = new SyncedDurability(FieldHowitzer.wheelDurability, 4); + this.durabilityLeftWheel = new SyncedDurability(FieldHowitzer.wheelDurability, 4); + this.durabilityGun = new SyncedDurability(FieldHowitzer.gunDurability, 14) + .withParent(this.durabilityMain); + this.durabilityShield = new SyncedDurability(FieldHowitzer.shieldDurability, 32) + .withParent(this.durabilityMain); + + //Controls + this.commanderControls = new VehicleControls().withStates("forward", "backwards", "turnLeft", "turnRight"); + this.gunnerControls = new VehicleControls().withStates("up", "down", "fire", "reload"); + if(world.isRemote) + { + GameSettings settings = ClientUtils.mc().gameSettings; + this.commanderControls + .withKeyBinding(settings.keyBindForward, "forward") + .withKeyBinding(settings.keyBindBack, "backwards") + .withKeyBinding(settings.keyBindLeft, "turnLeft") + .withKeyBinding(settings.keyBindRight, "turnRight"); + this.gunnerControls + .withMouseBinding(MouseBinding.MOUSE_RIGHT, "fire") + .withKeyBinding(ClientProxy.keybindZoom, "scope") + .withKeyBinding(ClientProxy.keybindManualReload, "reload"); + } + + //Seats + this.seatCommander = new SeatInfo<>(this, "commander") + .withSettings(false, new Vec3d(-0.25, 0, 0.75)) + .withControls(this.commanderControls); + this.seatGunner = new SeatInfo<>(this, "gunner") + .withSettings(false, new Vec3d(-0.25, 0, -0.75)) + .withControls(this.gunnerControls); + + //Parts + return new EntityVehiclePart[]{ + partWheelRight = new EntityVehicleWheel<>(this, "wheel_right", new Vec3d(0, 0, 0.75), AABB_WHEEL) + .withHitbox(durabilityRightWheel) + .withType(WheelType.STEERABLE_DRIVE), + partWheelLeft = new EntityVehicleWheel<>(this, "wheel_left", new Vec3d(0, 0, -0.75), AABB_WHEEL) + .withHitbox(durabilityLeftWheel) + .withType(WheelType.STEERABLE_DRIVE), + new EntityVehiclePart<>(this, "main", new Vec3d(0, 0.5, 0), + new AxisAlignedBB(-0.5, -0.25, -0.5, 0.5, 0.25, 0.5)) + .withHitbox(durabilityMain) + .withSeat(seatCommander), + new EntityVehiclePart<>(this, "main2", new Vec3d(-0.75, 0.5, 0), + new AxisAlignedBB(-0.5, -0.125, -0.5, 0.5, 0.125, 0.5)) + .withHitbox(durabilityMain) + .withSeat(seatGunner), + this.partGun = new EntityVehiclePart<>(this, "gun", new Vec3d(0.5, 0.65, 0), AABB_GUN) + .withHitbox(durabilityGun), + new EntityVehiclePart<>(this, "shield_right", new Vec3d(0.5, 0.385+0.125, 0.75), AABB_SHIELD) + .withHitbox(durabilityShield), + new EntityVehiclePart<>(this, "shield_left", new Vec3d(0.5, 0.385+0.125, -0.75), AABB_SHIELD) + .withHitbox(durabilityShield), + }; + } + + //--- Main ---// + + @Override + protected void onVehicleUpdate() + { + this.aim.update(); + this.shootingHandler1.update(); + this.shootingHandler2.update(); + Entity gunner = EntityVehicleSeat.getPassengerOnSeat(seatGunner); + this.ammoFactory.setShooterAndGun(gunner, this) + .setPositionAndVelocity(partGun.getPositionVector(), this.aim, 3f, 1f); + + + //Intentionally swapped, because it's a push-gun, and that's how pushing works + /*float right = this.commanderControls.getKey("turnLeft")?0.5f: 0; + float left = this.commanderControls.getKey("turnRight")?0.5f: 0; + boolean backwards = this.commanderControls.getKey("backwards"); + if(backwards||this.commanderControls.getKey("forward")) + { + left = Math.max(0.5f, left+0.25f)*(backwards?-1: 1); + right = Math.max(0.5f, right+0.25f)*(backwards?-1: 1); + }*/ + + /*partWheelLeft.setRotationSpeed(360f*left); + partWheelLeft.setTorque(5f*left); + partWheelRight.setRotationSpeed(360f*right); + partWheelRight.setTorque(5f*right);*/ + + //Seats rotation + this.seatGunner.withSettings(false, IIMath.offsetPosDirectionXYZ(new Vec3d(0.5, 0, 0.125), + aim.getYaw(0), 0, 0)); + this.seatCommander.withSettings(false, IIMath.offsetPosDirectionXYZ(new Vec3d(-0.5, 0, 0.125), + aim.getYaw(0), 0, 0)); + + //Gunner controls + if(gunner!=null) + { + //Gun aiming + this.aim.setTarget(aim.clampYawToRange(gunner.getRotationYawHead()), aim.clampPitchToRange(gunner.rotationPitch)); + + //Gun reloading + if(this.gunnerControls.getKey("reload")) + { + this.shootingHandler1.startReloading(); + this.shootingHandler2.startReloading(); + } + + //Gun firing + if(this.gunnerControls.getKey("fire")) + { + if(!this.shootingHandler1.canShoot()) + this.shootingHandler2.fire(); + else + this.shootingHandler1.fire(); + } + } + } + + + //--- Parts Handling ---// + + @Override + public void onSeatDismount(String seatID, Entity passenger) + { + + } + + @Override + public boolean onInteractWithPart(EntityVehiclePart part, EntityPlayer player, EnumHand hand) + { + if(!world.isRemote&&!towingOperation) + { + if(part.partName.contains("right")) + EntityVehicleSeat.enterSeat(player, seatCommander); + else if(part.partName.contains("left")) + EntityVehicleSeat.enterSeat(player, seatGunner); + return true; + } + return false; + } + + //--- ICameraEntity ---// + + @Override + public float getCameraPitch(EntityPlayer cameraPlayer, float partialTicks) + { + return (float)IIMath.clampedLerp(cameraPlayer.prevCameraYaw, cameraPlayer.cameraYaw, partialTicks); + } + + @Override + public float getCameraYaw(EntityPlayer cameraPlayer, float partialTicks) + { + return (float)IIMath.clampedLerp(cameraPlayer.prevCameraYaw, cameraPlayer.cameraYaw, partialTicks); + } + + @Override + public Vec3d getCameraPos(EntityPlayer cameraPlayer, float partialTicks) + { + return cameraPlayer.getLook(partialTicks); + } + + @Override + public boolean isCameraEnabled(EntityPlayer player) + { + return false; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldHowitzer.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldHowitzer.java index a247a5455..a5fcf20de 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldHowitzer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldHowitzer.java @@ -1,43 +1,45 @@ package pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun; import blusunrize.immersiveengineering.client.ClientUtils; -import net.minecraft.client.Minecraft; import net.minecraft.client.settings.GameSettings; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; import net.minecraft.util.EnumHand; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; import pl.pabilo8.immersiveintelligence.api.ammo.utils.AmmoFactory; -import pl.pabilo8.immersiveintelligence.api.utils.camera.IEntityZoomProvider; -import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoomTool; +import pl.pabilo8.immersiveintelligence.api.utils.camera.ICameraEntity; import pl.pabilo8.immersiveintelligence.client.ClientProxy; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Vehicles.FieldHowitzer; import pl.pabilo8.immersiveintelligence.common.IIContent; +import pl.pabilo8.immersiveintelligence.common.IISounds; import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoArtilleryProjectile; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.EntityVehicleTowable; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleBlueprint; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleControls; -import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleDurability; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleControls.MouseBinding; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleType; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehiclePart; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat.SeatInfo; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleWheel; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.WheelType; +import pl.pabilo8.immersiveintelligence.common.util.IIMath; import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT; import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunAimCoordinate; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunAmmoProvider; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunShootingHandler; +import pl.pabilo8.immersiveintelligence.common.util.gun.ammoprovider.GunAmmoProviderSingle; /** * @author Pabilo8 (pabilo@iiteam.net) * @since 18.07.2020 */ @VehicleBlueprint(id = "immersiveintelligence:towed/field_howitzer", mass = 4, type = VehicleType.TOWED_WEAPON) -public class EntityFieldHowitzer extends EntityVehicleTowable implements IEntityZoomProvider +public class EntityFieldHowitzer extends EntityVehicleTowable implements ICameraEntity { //--- AABBs ---// static final AxisAlignedBB AABB_WHEEL = new AxisAlignedBB(-0.25, 0d, 0.25, 0.25, 1d, -0.25); @@ -48,26 +50,21 @@ public class EntityFieldHowitzer extends EntityVehicleTowable ammoFactory; public SeatInfo seatCommander, seatGunner; + public EntityVehicleWheel partWheelRight; + public EntityVehicleWheel partWheelLeft; @SyncNBT(events = SyncEvents.ENTITY_DAMAGED) - public VehicleDurability durabilityRightWheel, durabilityLeftWheel, durabilityGun, durabilityShield; + public SyncedDurability durabilityRightWheel, durabilityLeftWheel, durabilityGun, durabilityShield; @SyncNBT(events = SyncEvents.ENTITY_VEHICLE_CONTROLS) public VehicleControls commanderControls, gunnerControls; - @SyncNBT - public boolean alreadyShot = false; - @SyncNBT - public ItemStack shell = ItemStack.EMPTY; - @SyncNBT - public float shootingProgress = 0f, reloadProgress = 0f, gunPitch = 0f; - - public EntityVehicleWheel partWheelRight; - public EntityVehicleWheel partWheelLeft; - public EntityVehiclePart partMain; - public EntityVehiclePart partMain2; - public EntityVehiclePart partGun; - public EntityVehiclePart partShieldRight; - public EntityVehiclePart partShieldLeft; + @SyncNBT(events = SyncEvents.ENTITY_CUSTOM1) + public GunAimCoordinate aim; + @SyncNBT(events = SyncEvents.ENTITY_CUSTOM1) + public GunShootingHandler shootingHandler; + @SyncNBT(events = SyncEvents.ENTITY_CUSTOM1) + public GunAmmoProvider ammoProvider; + private EntityVehiclePart partGun; public EntityFieldHowitzer(World worldIn) { @@ -78,15 +75,25 @@ public EntityFieldHowitzer(World worldIn) @Override protected EntityVehiclePart[] vehicleInit() { - //Projectile entity spawner + //Gun internals this.ammoFactory = new AmmoFactory<>(this); + this.aim = new GunAimCoordinate() + .withPitchLimit(-75, 15); + this.ammoProvider = new GunAmmoProviderSingle<>(this, + () -> EntityVehicleSeat.getPassengerOnSeat(seatGunner), + IIContent.itemAmmoLightArtillery, FieldHowitzer.reloadTime + ); + this.shootingHandler = new GunShootingHandler() + .withAmmoFactory(this.ammoFactory) + .withAmmoProvider(this.ammoProvider) + .withShootSound(IISounds.howitzerShot, 50); //Hitboxes - this.durabilityRightWheel = new VehicleDurability(FieldHowitzer.wheelDurability, 4); - this.durabilityLeftWheel = new VehicleDurability(FieldHowitzer.wheelDurability, 4); - this.durabilityGun = new VehicleDurability(FieldHowitzer.gunDurability, 14) + this.durabilityRightWheel = new SyncedDurability(FieldHowitzer.wheelDurability, 4); + this.durabilityLeftWheel = new SyncedDurability(FieldHowitzer.wheelDurability, 4); + this.durabilityGun = new SyncedDurability(FieldHowitzer.gunDurability, 14) .withParent(this.durabilityMain); - this.durabilityShield = new VehicleDurability(FieldHowitzer.shieldDurability, 32) + this.durabilityShield = new SyncedDurability(FieldHowitzer.shieldDurability, 32) .withParent(this.durabilityMain); //Controls @@ -103,7 +110,7 @@ protected EntityVehiclePart[] vehicleInit() this.gunnerControls .withKeyBinding(settings.keyBindForward, "up") .withKeyBinding(settings.keyBindBack, "down") - .withKeyBinding(settings.keyBindJump, "fire") + .withMouseBinding(MouseBinding.MOUSE_RIGHT, "fire") .withKeyBinding(ClientProxy.keybindZoom, "scope") .withKeyBinding(ClientProxy.keybindManualReload, "reload"); } @@ -124,19 +131,19 @@ protected EntityVehiclePart[] vehicleInit() partWheelLeft = new EntityVehicleWheel<>(this, "wheel_left", new Vec3d(0, 0, -0.75), AABB_WHEEL) .withHitbox(durabilityLeftWheel) .withType(WheelType.STEERABLE_DRIVE), - partMain = new EntityVehiclePart<>(this, "main", new Vec3d(0, 0.5, 0), + new EntityVehiclePart<>(this, "main", new Vec3d(0, 0.5, 0), new AxisAlignedBB(-0.5, -0.25, -0.5, 0.5, 0.25, 0.5)) .withHitbox(durabilityMain) .withSeat(seatCommander), - partMain2 = new EntityVehiclePart<>(this, "main2", new Vec3d(-0.75, 0.5, 0), + new EntityVehiclePart<>(this, "main2", new Vec3d(-0.75, 0.5, 0), new AxisAlignedBB(-0.5, -0.125, -0.5, 0.5, 0.125, 0.5)) .withHitbox(durabilityMain) .withSeat(seatGunner), - partGun = new EntityVehiclePart<>(this, "gun", new Vec3d(0.5, 0.65, 0), AABB_GUN) + this.partGun = new EntityVehiclePart<>(this, "gun", new Vec3d(0.5, 0.65, 0), AABB_GUN) .withHitbox(durabilityGun), - partShieldRight = new EntityVehiclePart<>(this, "shield_right", new Vec3d(0.5, 0.385+0.125, 0.75), AABB_SHIELD) + new EntityVehiclePart<>(this, "shield_right", new Vec3d(0.5, 0.385+0.125, 0.75), AABB_SHIELD) .withHitbox(durabilityShield), - partShieldLeft = new EntityVehiclePart<>(this, "shield_left", new Vec3d(0.5, 0.385+0.125, -0.75), AABB_SHIELD) + new EntityVehiclePart<>(this, "shield_left", new Vec3d(0.5, 0.385+0.125, -0.75), AABB_SHIELD) .withHitbox(durabilityShield), }; } @@ -146,34 +153,40 @@ protected EntityVehiclePart[] vehicleInit() @Override protected void onVehicleUpdate() { - boolean backwards = this.commanderControls.getKey("backwards"); - float right = 0, left = 0; - - // - if(this.commanderControls.getKey("turnLeft")) - right += 0.25f; - else if(this.commanderControls.getKey("turnRight")) - left += 0.25f; - if(this.commanderControls.getKey("forward")||backwards) + this.aim.update(); + this.shootingHandler.update(); + this.ammoFactory.setShooterAndGun(EntityVehicleSeat.getPassengerOnSeat(seatGunner), this) + .setPositionAndVelocity(partGun.getPositionVector(), this.aim, 1f, 1f); + + float left = 0, right = 0; + if(EntityVehicleSeat.getPassengerOnSeat(seatCommander)!=null) { - left = 0.25f; - right = 0.25f; - if(backwards) + //Intentionally swapped, because it's a push-gun, and that's how pushing works + right = this.commanderControls.getKey("turnLeft")?0.5f: 0; + left = this.commanderControls.getKey("turnRight")?0.5f: 0; + boolean backwards = this.commanderControls.getKey("backwards"); + if(backwards||this.commanderControls.getKey("forward")) { - left *= -1; - right *= -1; + left = Math.max(0.5f, left+0.25f)*(backwards?-1: 1); + right = Math.max(0.5f, right+0.25f)*(backwards?-1: 1); } } + partWheelLeft.setRotationSpeed(360f*left); + partWheelLeft.setTorque(5f*left); + partWheelRight.setRotationSpeed(360f*right); + partWheelRight.setTorque(5f*right); //Gun elevation + this.aim.withCenterYaw(this.rotationYaw); if(this.gunnerControls.getKey("up")) - gunPitch = Math.min(gunPitch+1f, 76.5f); + this.aim.setTarget(0, this.aim.getTargetPitch()-0.5f); else if(this.gunnerControls.getKey("down")) - gunPitch = Math.max(gunPitch-1f, -12.5f-12.5f); + this.aim.setTarget(0, this.aim.getTargetPitch()+0.5f); - //TODO: 03.12.2025 moving - /*partWheelLeft.setMovementFactors(left, 0); - partWheelRight.setMovementFactors(right, 0);*/ + if(this.gunnerControls.getKey("reload")) + this.shootingHandler.startReloading(); + else if(this.gunnerControls.getKey("fire")) + this.shootingHandler.fire(); } @@ -190,27 +203,38 @@ public boolean onInteractWithPart(EntityVehiclePart part, E { if(!world.isRemote&&!towingOperation) { - if(part==partShieldRight||part==partWheelRight) - player.startRiding(EntityVehicleSeat.getOrCreateSeat(seatCommander)); - else if(part==partShieldLeft||part==partWheelLeft) - player.startRiding(EntityVehicleSeat.getOrCreateSeat(seatGunner)); + if(part.partName.contains("right")) + EntityVehicleSeat.enterSeat(player, seatCommander); + else if(part.partName.contains("left")) + EntityVehicleSeat.enterSeat(player, seatGunner); return true; } return false; } - //--- Binoculars Zoom Feature ---// + //--- ICameraEntity ---// + + @Override + public float getCameraPitch(EntityPlayer cameraPlayer, float partialTicks) + { + return (float)IIMath.clampedLerp(cameraPlayer.prevCameraYaw, cameraPlayer.cameraYaw, partialTicks); + } + + @Override + public float getCameraYaw(EntityPlayer cameraPlayer, float partialTicks) + { + return (float)IIMath.clampedLerp(cameraPlayer.prevCameraYaw, cameraPlayer.cameraYaw, partialTicks); + } @Override - public IAdvancedZoomTool getZoom() + public Vec3d getCameraPos(EntityPlayer cameraPlayer, float partialTicks) { - return Minecraft.getMinecraft().player.getHeldItem(EnumHand.MAIN_HAND).getItem()==IIContent.itemBinoculars?IIContent.itemBinoculars: null; + return cameraPlayer.getLook(partialTicks); } - @SideOnly(Side.CLIENT) @Override - public ItemStack getZoomStack() + public boolean isCameraEnabled(EntityPlayer player) { - return Minecraft.getMinecraft().player.getHeldItem(EnumHand.MAIN_HAND); + return false;//seatGunner!=null&&seatGunner.isClientPlayerOnSeat(); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldMissileLauncher.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldMissileLauncher.java deleted file mode 100644 index f87151e2e..000000000 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldMissileLauncher.java +++ /dev/null @@ -1,9 +0,0 @@ -package pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun; - -/** - * @author Pabilo8 (pabilo@iiteam.net) - * @since 29.09.2025 - */ -public class EntityFieldMissileLauncher -{ -} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldRocketLauncher.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldRocketLauncher.java deleted file mode 100644 index ca6969d23..000000000 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldRocketLauncher.java +++ /dev/null @@ -1,9 +0,0 @@ -package pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun; - -/** - * @author Pabilo8 (pabilo@iiteam.net) - * @since 29.09.2025 - */ -public class EntityFieldRocketLauncher -{ -} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldSiegeMortar.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldSiegeMortar.java deleted file mode 100644 index e6da713c2..000000000 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/towable/gun/EntityFieldSiegeMortar.java +++ /dev/null @@ -1,9 +0,0 @@ -package pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun; - -/** - * @author Pabilo8 (pabilo@iiteam.net) - * @since 29.09.2025 - */ -public class EntityFieldSiegeMortar -{ -} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleAction.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleAction.java new file mode 100644 index 000000000..e4597b120 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleAction.java @@ -0,0 +1,61 @@ +package pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils; + +import net.minecraft.client.settings.KeyBinding; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleControls.MouseBinding; +import pl.pabilo8.immersiveintelligence.common.util.ResLoc; + +/** + * Represents an action for a vehicle, like shooting a gun or opening a hatch or door. + * + * @author Pabilo8 (pabilo@iiteam.net) + * @ii-approved 0.3.1 + * @since 29.05.2026 + */ +@SideOnly(Side.CLIENT) +public class VehicleAction +{ + private final String name; + private final ResLoc icon; + private final KeyBinding keyBinding; + private final MouseBinding mouseBinding; + + public VehicleAction(String name, ResLoc icon, KeyBinding keyBinding) + { + this.name = name; + this.icon = icon; + this.keyBinding = keyBinding; + this.mouseBinding = null; + } + + public VehicleAction(String name, ResLoc icon, MouseBinding mouseBinding) + { + this.name = name; + this.icon = icon; + this.keyBinding = null; + this.mouseBinding = mouseBinding; + } + + //--- Getters ---// + + public String getName() + { + return name; + } + + public ResLoc getIcon() + { + return icon; + } + + public KeyBinding getKeyBinding() + { + return keyBinding; + } + + public MouseBinding getMouseBinding() + { + return mouseBinding; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleControls.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleControls.java index 0bce69763..78ae6ae5f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleControls.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleControls.java @@ -2,10 +2,13 @@ import net.minecraft.client.settings.KeyBinding; import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.client.event.MouseEvent; import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; @@ -20,6 +23,11 @@ public class VehicleControls implements INBTSerializable private final Map states = new HashMap<>(); @SideOnly(Side.CLIENT) private Map keybinds; + @SideOnly(Side.CLIENT) + private Map mousebinds; + @SideOnly(Side.CLIENT) + private ArrayList displayedActions; + private boolean dirty = false; public VehicleControls() @@ -27,14 +35,14 @@ public VehicleControls() } - public VehicleControls withState(String name) + public VehicleControls withState(@Nonnull String name) { states.put(name, false); this.dirty = true; return this; } - public VehicleControls withStates(String... names) + public VehicleControls withStates(@Nonnull String... names) { for(String s : names) states.put(s, false); @@ -43,7 +51,7 @@ public VehicleControls withStates(String... names) } @SideOnly(Side.CLIENT) - public VehicleControls withKeyBinding(KeyBinding key, String name) + public VehicleControls withKeyBinding(@Nonnull KeyBinding key, @Nonnull String name) { states.put(name, false); if(keybinds==null) @@ -53,25 +61,90 @@ public VehicleControls withKeyBinding(KeyBinding key, String name) return this; } + @SideOnly(Side.CLIENT) + public VehicleControls withMouseBinding(@Nonnull MouseBinding key, @Nonnull String name) + { + states.put(name, false); + if(mousebinds==null) + mousebinds = new HashMap<>(); + mousebinds.put(key, name); + this.dirty = true; + return this; + } + @SideOnly(Side.CLIENT) public boolean clientUpdate() { this.dirty = false; - if(keybinds!=null) - for(Entry entry : keybinds.entrySet()) - { - KeyBinding keyBinding = entry.getKey(); - states.compute(entry.getValue(), (name, current) -> { - boolean keyDown = keyBinding.isKeyDown(); - if(keyDown!=current) - this.dirty = true; - return keyDown; - }); - - } + if(keybinds==null) + keybinds = new HashMap<>(); + + for(Entry entry : keybinds.entrySet()) + { + KeyBinding keyBinding = entry.getKey(); + states.compute(entry.getValue(), (name, current) -> { + boolean keyDown = keyBinding.isKeyDown(); + //noinspection DataFlowIssue + if(keyDown!=current) + this.dirty = true; + return keyDown; + }); + } + + if(mousebinds==null) + mousebinds = new HashMap<>(); + for(Entry entry : mousebinds.entrySet()) + { + MouseBinding keyBinding = entry.getKey(); + states.compute(entry.getValue(), (name, current) -> { + boolean keyDown = keyBinding.pressed; + //noinspection DataFlowIssue + if(keyDown!=current) + this.dirty = true; + return keyDown; + }); + } + return isDirty(); } + @SideOnly(Side.CLIENT) + public boolean passMouseButtonEvent(@Nonnull MouseEvent event) + { + if(event.getDwheel()==0) + { + MouseBinding.MOUSE_WHEELUP.pressed = false; + MouseBinding.MOUSE_WHEELDOWN.pressed = false; + } + else + { + MouseBinding.MOUSE_WHEELUP.pressed = event.getDwheel() > 0; + MouseBinding.MOUSE_WHEELDOWN.pressed = event.getDwheel() < 0; + } + + switch(event.getButton()) + { + //Mouse main + case 0: + MouseBinding.MOUSE_LEFT.pressed = event.isButtonstate(); + break; + case 1: + MouseBinding.MOUSE_RIGHT.pressed = event.isButtonstate(); + break; + case 2: + MouseBinding.MOUSE_MIDDLE.pressed = event.isButtonstate(); + break; + //Mouse extra buttons + case 3: + MouseBinding.MOUSE_NEXT.pressed = event.isButtonstate(); + break; + case 4: + MouseBinding.MOUSE_PREV.pressed = event.isButtonstate(); + break; + } + return true; + } + public void setKey(String key, boolean pressed) { states.computeIfPresent(key, (k, v) -> { @@ -107,4 +180,25 @@ public void deserializeNBT(NBTTagCompound nbt) states.put(key, nbt.getBoolean(key)); this.dirty = false; } + + @SideOnly(Side.CLIENT) + public static class MouseBinding + { + public static MouseBinding MOUSE_LEFT = new MouseBinding("mouse_left"); + public static MouseBinding MOUSE_RIGHT = new MouseBinding("mouse_right"); + public static MouseBinding MOUSE_MIDDLE = new MouseBinding("mouse_middle"); + public static MouseBinding MOUSE_NEXT = new MouseBinding("mouse_next"); + public static MouseBinding MOUSE_PREV = new MouseBinding("mouse_prev"); + public static MouseBinding MOUSE_WHEELUP = new MouseBinding("mouse_wheelup"); + public static MouseBinding MOUSE_WHEELDOWN = new MouseBinding("mouse_wheeldown"); + + public String key; + public boolean pressed; + + private MouseBinding(String key) + { + this.key = key; + this.pressed = false; + } + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleFuelTank.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleFuelTank.java index 9f9d9fbe5..795b68e65 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleFuelTank.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleFuelTank.java @@ -10,6 +10,7 @@ import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityVehicleBase; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.IVehicleComponent; import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; import javax.annotation.Nullable; @@ -20,7 +21,7 @@ */ public class VehicleFuelTank> implements IFluidHandler, INBTSerializable, IVehicleComponent { - private VehicleDurability durability; + private SyncedDurability durability; private final T vehicle; private final FluidTank tank; @@ -30,7 +31,7 @@ public VehicleFuelTank(T vehicle, int capacity) this.tank = new FluidTank(capacity); } - public VehicleFuelTank withDurability(VehicleDurability durability) + public VehicleFuelTank withDurability(SyncedDurability durability) { this.durability = durability; return this; @@ -109,7 +110,7 @@ public void deserializeNBT(NBTTagCompound nbt) @Nullable @Override - public VehicleDurability getDurability() + public SyncedDurability getDurability() { return null; } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/EntityVehiclePart.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/EntityVehiclePart.java index af0d78be0..964b488af 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/EntityVehiclePart.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/EntityVehiclePart.java @@ -13,11 +13,11 @@ import pl.pabilo8.immersiveintelligence.api.utils.IEntitySpecialRepairable; import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedTextOverlay; import pl.pabilo8.immersiveintelligence.api.utils.vehicles.IVehicleMultiPart; -import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleDurability; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleSeat.SeatInfo; import pl.pabilo8.immersiveintelligence.common.util.IIMath; import pl.pabilo8.immersiveintelligence.common.util.easynbt.SyncNBT.SyncEvents; import pl.pabilo8.immersiveintelligence.common.util.entity.ISyncNBTEntity; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -45,7 +45,7 @@ public class EntityVehiclePart> extends * The health storage and damage for this part */ @Nullable - public VehicleDurability durability; + public SyncedDurability durability; @Nullable public SeatInfo assignedSeat; protected boolean collidable = true; @@ -68,12 +68,12 @@ public EntityVehiclePart(T parent, String partName, Vec3d offset, double radius) this(parent, partName, offset, radius, radius); } - public EntityVehiclePart withHitbox(@Nonnull VehicleDurability hitbox) + public EntityVehiclePart withHitbox(@Nonnull SyncedDurability hitbox) { return withHitbox(hitbox, true); } - public EntityVehiclePart withHitbox(@Nonnull VehicleDurability hitbox, boolean collidable) + public EntityVehiclePart withHitbox(@Nonnull SyncedDurability hitbox, boolean collidable) { this.durability = hitbox; this.collidable = collidable; @@ -162,7 +162,7 @@ protected Vec3d getWorldPos() @Nullable @Override - public VehicleDurability getDurability() + public SyncedDurability getDurability() { return durability; } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/EntityVehicleSeat.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/EntityVehicleSeat.java index a2b5adf29..9f7bf5ee1 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/EntityVehicleSeat.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/EntityVehicleSeat.java @@ -24,16 +24,18 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; import java.util.Optional; /** - * @author Pabilo8 (pabilo@iiteam.net) - * @since 06.08.2020 *

* Just a marker for seats, doesn't do collision but it's an actual world handled entity on all sides * Seats are just one-sided and independent on client and server *

* Riding interaction must be handled by the vehicle by an additional part + * + * @author Pabilo8 (pabilo@iiteam.net) + * @since 06.08.2020 */ public class EntityVehicleSeat extends Entity implements ISyncNBTEntity { @@ -100,6 +102,21 @@ public static EntityVehicleSeat getOrCreateSeat(SeatInfo seatInfo) } } + public static Entity getPassengerOnSeat(SeatInfo seatInfo) + { + //Try to find the seat + Optional probableSeat = seatInfo.vehicle.getPassengers().stream() + .filter(entity -> entity instanceof EntityVehicleSeat&&((EntityVehicleSeat)entity).seatID.equals(seatInfo.seatID)) + .findFirst(); + //Return passenger on seat if present + if(probableSeat.isPresent()) + { + List passengers = probableSeat.get().getPassengers(); + return passengers.isEmpty()?null: passengers.get(0); + } + return null; + } + @Override protected void entityInit() { @@ -109,6 +126,18 @@ protected void entityInit() @Override public void onUpdate() { + //Update seatInfo when not present + if(this.info==null&&!seatID.isEmpty()&&this.isRiding()) + { + Entity vehicle = this.getRidingEntity(); + if(vehicle instanceof IVehicleMultiPart) + { + this.info = ((IVehicleMultiPart)vehicle).getSeatInfo(seatID); + if(!world.isRemote) + updateEntityForEvent(SyncEvents.ENTITY_PASSENGER); + } + } + if(world.isRemote) { //Try to find seat info on client @@ -124,7 +153,8 @@ else if(info!=null) this.info.vehicle.sendServerUpdateForEvent(SyncEvents.ENTITY_VEHICLE_CONTROLS); } } - else if(this.ticksExisted > 20&&!this.isRiding()) + //Remove entity when data is invalid + else if(this.ticksExisted > 20&&(!this.isRiding()||seatID.isEmpty())) setDead(); super.onUpdate(); @@ -191,7 +221,7 @@ public void updatePassenger(@Nonnull Entity passenger) @Override public void dismountRidingEntity() { - this.setDead(); + super.dismountRidingEntity(); } @Override @@ -316,29 +346,7 @@ public boolean passMouseButtonEvent(MouseEvent event) { if(controls==null) return false; - - if(event.getDwheel()!=0) - controls.setKey(event.getDwheel() > 0?"mouse_wheelup": "mouse_wheeldown", true); - switch(event.getButton()) - { - //Mouse main - case 0: - controls.setKey("mouse_left", event.isButtonstate()); - break; - case 1: - controls.setKey("mouse_right", event.isButtonstate()); - break; - case 2: - controls.setKey("mouse_middle", event.isButtonstate()); - break; - //Mouse extra buttons - case 3: - controls.setKey("mouse_next", event.isButtonstate()); - break; - case 4: - controls.setKey("mouse_prev", event.isButtonstate()); - break; - } + controls.passMouseButtonEvent(event); return true; } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/EntityVehicleWheel.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/EntityVehicleWheel.java index c2c792ad3..a2a9efb95 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/EntityVehicleWheel.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/EntityVehicleWheel.java @@ -10,8 +10,8 @@ import pl.pabilo8.immersiveintelligence.api.utils.vehicles.IVehicleMultiPart; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityVehicleBase; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleBlueprint; -import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleDurability; import pl.pabilo8.immersiveintelligence.common.util.IIMath; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -157,7 +157,7 @@ public EntityVehicleWheel withWeightShare(double weightShare) } @Override - public EntityVehicleWheel withHitbox(@Nonnull VehicleDurability hitbox) + public EntityVehicleWheel withHitbox(@Nonnull SyncedDurability hitbox) { super.withHitbox(hitbox); return this; @@ -220,8 +220,8 @@ public WheelForces calculateForces() double latFriction = -vLat*latFrictionCoef; //Total force in wheel's local axes - double fx = driveForce*sinA+latFriction*cosA; - double fz = driveForce*cosA-latFriction*sinA; + double fx = driveForce*Math.signum(speedValue)*sinA+latFriction*cosA; + double fz = driveForce*Math.signum(speedValue)*cosA-latFriction*sinA; //Compile and return forces Vec3d force = new Vec3d(fx*blueprint.forceFactor(), verticalForces.verticalSum, fz*blueprint.forceFactor()); @@ -256,7 +256,7 @@ private VerticalForces calculateVerticalForces() } //Gravity else if(!isGrounded) - targetForce = -0.04*weightShare; //*parentExt.getVehicleBlueprint().mass() + targetForce = -0.04*weightShare; //Integration: gradually approach target force double forceChangeRate; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/IVehicleComponent.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/IVehicleComponent.java index c2cc7b771..d0e77cca5 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/IVehicleComponent.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/part/IVehicleComponent.java @@ -1,7 +1,7 @@ package pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part; -import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleDurability; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; import javax.annotation.Nullable; @@ -13,7 +13,7 @@ public interface IVehicleComponent { @Nullable - VehicleDurability getDurability(); + SyncedDurability getDurability(); void onUpdate(); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineBase.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineBase.java index 5e26f87db..769d85f39 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineBase.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineBase.java @@ -6,8 +6,9 @@ import net.minecraftforge.common.util.INBTSerializable; import pl.pabilo8.immersiveintelligence.api.rotary.IRotaryEnergy; import pl.pabilo8.immersiveintelligence.api.rotary.RotaryStorage; -import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleDurability; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityVehicleBase; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.IVehicleComponent; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; import javax.annotation.Nullable; @@ -18,14 +19,21 @@ * @ii-approved 0.3.1 * @since 01.10.2025 */ -public abstract class VehicleEngineBase> implements IVehicleComponent, INBTSerializable, IRotaryEnergy +public abstract class VehicleEngineBase, V extends EntityVehicleBase> + implements IVehicleComponent, INBTSerializable, IRotaryEnergy { @Nullable - protected VehicleDurability durability; + protected SyncedDurability durability; protected boolean nextState, active; protected int activeTicks, activationTicks = 40, animationTicks = 8; protected float acceleration = 0f; protected RotaryStorage rotaryStorage = new RotaryStorage(0, 0); + protected V vehicle; + + public VehicleEngineBase(V vehicle) + { + this.vehicle = vehicle; + } public boolean start() { @@ -69,7 +77,7 @@ public void onUpdate() //--- Setters ---// @SuppressWarnings("unchecked") - public T withDurability(@Nullable VehicleDurability durability) + public T withDurability(@Nullable SyncedDurability durability) { this.durability = durability; return (T)this; @@ -136,7 +144,7 @@ public RotationSide getSide(@Nullable EnumFacing facing) @Nullable @Override - public VehicleDurability getDurability() + public SyncedDurability getDurability() { return durability; } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineElectric.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineElectric.java index fea9d7e0b..72dd278d7 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineElectric.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineElectric.java @@ -1,12 +1,19 @@ package pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.propulsion; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityVehicleBase; + /** * @author Pabilo8 (pabilo@iiteam.net) * @ii-approved 0.3.1 * @since 01.10.2025 */ -public class VehicleEngineElectric extends VehicleEngineBase +public class VehicleEngineElectric> extends VehicleEngineBase, V> { + public VehicleEngineElectric(V vehicle) + { + super(vehicle); + } + @Override protected boolean canBeStarted() { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineFuelBased.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineFuelBased.java index f4ce21ac4..666355185 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineFuelBased.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineFuelBased.java @@ -1,34 +1,99 @@ package pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.propulsion; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import pl.pabilo8.immersiveintelligence.client.util.carversound.ConditionCompoundSound; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityVehicleBase; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleFuelTank; +import pl.pabilo8.immersiveintelligence.common.util.sound.AdvancedSounds.MultiSound; /** * @author Pabilo8 (pabilo@iiteam.net) * @ii-approved 0.3.1 * @since 01.10.2025 */ -public class VehicleEngineFuelBased extends VehicleEngineBase +public class VehicleEngineFuelBased> extends VehicleEngineBase, V> { + protected int idleUsage = 4, maxUsage = 40; + protected int outputSpeed = 200, outputTorque = 50; protected VehicleFuelTank fuelTank; - public VehicleEngineFuelBased(VehicleFuelTank fuelTank) + @SideOnly(Side.CLIENT) + private ConditionCompoundSound> engineNoise; + protected MultiSound engineSound = null; + protected float pitchIdle = 0.95f, pitchMax = 1.25f; + + public VehicleEngineFuelBased(V vehicle, VehicleFuelTank fuelTank) { + super(vehicle); this.fuelTank = fuelTank; } + //--- Setters ---// + + public VehicleEngineFuelBased withFuelUsage(int idleUsage, int maxUsage) + { + this.idleUsage = idleUsage; + this.maxUsage = maxUsage; + return this; + } + + public VehicleEngineFuelBased withSpeedTorque(int outputSpeed, int outputTorque) + { + this.outputSpeed = outputSpeed; + this.outputTorque = outputTorque; + return this; + } + + public VehicleEngineFuelBased withEngineSound(MultiSound engineSound, float pitchIdle, float pitchMax) + { + this.engineSound = engineSound; + this.pitchIdle = pitchIdle; + this.pitchMax = pitchMax; + return this; + } + + //--- Update ---// + @Override protected boolean canBeStarted() { - //TODO: 02.12.2025 fuel condition - return true; + return fuelTank.getFuelPercentage() > 0; } @Override public void onUpdate() { super.onUpdate(); - float newSpeed = acceleration*200; - float newTorque = acceleration*50f; - this.rotaryStorage.grow(newSpeed, newTorque, 0.15f); + + //Play engine noise on client + if(vehicle.world.isRemote&&engineSound!=null&&isActive()) + { + if(engineNoise==null||engineNoise.isDonePlaying()) + this.engineNoise = new ConditionCompoundSound<>(engineSound, vehicle.getPositionVector(), this, + engine -> engine.isActive()&&!engine.vehicle.isDead); + this.engineNoise.setPosition(vehicle.getPositionVector()); + this.engineNoise.setVolume(1f); + this.engineNoise.setPitch(pitchIdle+(pitchMax-pitchIdle)*acceleration); + } + + if(isActive()) + { + FluidStack drained = fuelTank.drain((int)(idleUsage+acceleration*maxUsage), false); + if(drained==null) + { + //Out of fuel, stop the engine + this.active = this.nextState = false; + this.activeTicks = this.activationTicks = 0; + return; + } + this.rotaryStorage.grow(acceleration*outputSpeed, acceleration*outputTorque, 0.15f); + } + else + { + this.rotaryStorage.setTorque(0); + this.rotaryStorage.setRotationSpeed(0); + } } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineManual.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineManual.java index f21ad998d..3ed3dc67f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineManual.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineManual.java @@ -1,12 +1,19 @@ package pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.propulsion; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityVehicleBase; + /** * @author Pabilo8 (pabilo@iiteam.net) * @ii-approved 0.3.1 * @since 01.10.2025 */ -public class VehicleEngineManual extends VehicleEngineBase +public class VehicleEngineManual> extends VehicleEngineBase, V> { + public VehicleEngineManual(V vehicle) + { + super(vehicle); + } + @Override protected boolean canBeStarted() { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineSteam.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineSteam.java index 3a1580cea..2bdc29150 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineSteam.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleEngineSteam.java @@ -1,12 +1,19 @@ package pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.propulsion; +import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityVehicleBase; + /** * @author Pabilo8 (pabilo@iiteam.net) * @ii-approved 0.3.1 * @since 01.10.2025 */ -public class VehicleEngineSteam extends VehicleEngineBase +public class VehicleEngineSteam> extends VehicleEngineBase, V> { + public VehicleEngineSteam(V vehicle) + { + super(vehicle); + } + @Override protected boolean canBeStarted() { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleTransmission.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleTransmission.java index d9e287e34..2795ddb36 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleTransmission.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/propulsion/VehicleTransmission.java @@ -8,9 +8,9 @@ import pl.pabilo8.immersiveintelligence.api.rotary.IRotaryEnergy; import pl.pabilo8.immersiveintelligence.api.rotary.RotaryStorage; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.EntityVehicleBase; -import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.VehicleDurability; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.EntityVehicleWheel; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils.part.IVehicleComponent; +import pl.pabilo8.immersiveintelligence.common.util.entity.SyncedDurability; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -23,14 +23,14 @@ * @ii-approved 0.3.1 * @since 01.10.2025 */ -public class VehicleTransmission> implements IVehicleComponent, INBTSerializable, IRotaryEnergy +public class VehicleTransmission> implements IVehicleComponent, INBTSerializable, IRotaryEnergy { @Nonnull protected final IRotaryEnergy[] sources; @Nonnull protected IRotaryEnergy[] receivers = new IRotaryEnergy[0]; - private VehicleDurability durability; + private SyncedDurability durability; private double[] ratios = new double[0]; private int maxGearShiftTime = 20; private int currentGear = 0, nextGear = 0, gearShiftDelay = 0; @@ -48,19 +48,19 @@ public VehicleTransmission(IRotaryEnergy source) this.sources = new IRotaryEnergy[]{source}; } - public VehicleTransmission withReceivers(@Nonnull IRotaryEnergy... receivers) + public VehicleTransmission withReceivers(@Nonnull IRotaryEnergy... receivers) { this.receivers = receivers; return this; } - public VehicleTransmission withDurability(VehicleDurability durability) + public VehicleTransmission withDurability(SyncedDurability durability) { this.durability = durability; return this; } - public VehicleTransmission withRatios(int shiftTime, double... ratios) + public VehicleTransmission withRatios(int shiftTime, double... ratios) { this.ratios = ratios; this.maxGearShiftTime = shiftTime; @@ -69,7 +69,7 @@ public VehicleTransmission withRatios(int shiftTime, double... ratios) return this; } - public VehicleTransmission withCurrentGear(int currentGear) + public VehicleTransmission withCurrentGear(int currentGear) { this.nextGear = this.currentGear = MathHelper.clamp(currentGear, 0, ratios.length-1); return this; @@ -202,7 +202,7 @@ public void deserializeNBT(NBTTagCompound nbt) @Nullable @Override - public VehicleDurability getDurability() + public SyncedDurability getDurability() { return durability; } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerAmmunitionAssembler.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerAmmunitionAssembler.java index e6c465d9a..60d3c836f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerAmmunitionAssembler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerAmmunitionAssembler.java @@ -2,8 +2,9 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; +import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.multiblock.MultiblockAmmunitionAssembler; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityAmmunitionAssembler; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -11,18 +12,19 @@ * @since 10.07.2019 * @since 08.13.2025 */ -public class ContainerAmmunitionAssembler extends ContainerIIBase +public class ContainerAmmunitionAssembler extends ContainerIITileBase { - public Slot inputSlot, outputSlot; + public Slot casingSlot, coreSlot, outputSlot; public ContainerAmmunitionAssembler(EntityPlayer player, TileEntityAmmunitionAssembler tile) { super(player, tile); - inputSlot = addSlot(8, 20-10, 0); - outputSlot = addSlot(8, 60-10, 1); + coreSlot = addSlot(24+8, 20-10+8, MultiblockAmmunitionAssembler.SLOT_CORE); + casingSlot = addSlot(24+8, 60-10-4, MultiblockAmmunitionAssembler.SLOT_CASING); + outputSlot = addSlot(24+8+64+8+2+1-48-2-4+64+2, 28+4+4+4+1-16+8, MultiblockAmmunitionAssembler.SLOT_OUTPUT); - addPlayerInventory(player.inventory, 8, 87); + addPlayerInventory(player.inventory, 8, 87+24); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerAmmunitionCrate.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerAmmunitionCrate.java index 4a01ab431..90a3ea8eb 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerAmmunitionCrate.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerAmmunitionCrate.java @@ -11,7 +11,7 @@ import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.metal_device.tileentity.effect_crate.TileEntityAmmunitionCrate; import pl.pabilo8.immersiveintelligence.common.item.ammo.gun.ItemIIAmmoMachinegun; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -19,34 +19,34 @@ * @since 17.05.2019 * @since 08.18.2025 */ -public class ContainerAmmunitionCrate extends ContainerIIBase +public class ContainerAmmunitionCrate extends ContainerIITileBase { - public Slot[] slotsInputbullet, slotsInputshell, slotsInputrevolver, slotsInputmg; + public Slot[] inputBullet, inputShell, inputRevolver, inputMG; public ContainerAmmunitionCrate(EntityPlayer player, TileEntityAmmunitionCrate tile) { super(player, tile); - this.slotsInputbullet = new Slot[20]; - this.slotsInputshell = new Slot[9]; - this.slotsInputrevolver = new Slot[8]; - this.slotsInputmg = new Slot[12]; + this.inputBullet = new Slot[20]; + this.inputShell = new Slot[9]; + this.inputRevolver = new Slot[8]; + this.inputMG = new Slot[12]; - // Normal bullet slots (20 slots, 4x5 grid) + //Normal bullet slots (20 slots, 4x5 grid) for(int i = 0; i < 20; i++) - this.slotsInputbullet[i] = addSlotToContainer(new Slot(this.inv, i, 8 + (i % 5) * 18, 18 + (i / 5) * 18 - 45) + this.inputBullet[i] = addSlotToContainer(new Slot(this.inv, i, 8+(i%5)*18, 18+(i/5)*18) { @Override public boolean isItemValid(ItemStack stack) { - return stack.getItem() instanceof ItemBullet && - !(stack.isItemEqual(BulletHandler.emptyCasing) || stack.isItemEqual(BulletHandler.emptyShell)); + return stack.getItem() instanceof ItemBullet&& + !(stack.isItemEqual(BulletHandler.emptyCasing)||stack.isItemEqual(BulletHandler.emptyShell)); } }); - // Empty shell slots (9 slots in a row) + //Empty shell slots (9 slots in a row) for(int i = 0; i < 9; i++) - this.slotsInputshell[i] = addSlotToContainer(new Slot(this.inv, 20 + i, 8 + (i * 18), 108 - 45) + this.inputShell[i] = addSlotToContainer(new Slot(this.inv, 20+i, 8+(i*18), 108) { @Override public boolean isItemValid(ItemStack stack) @@ -55,21 +55,21 @@ public boolean isItemValid(ItemStack stack) } }); - // Revolver layout slots (8 slots, circular layout) - this.slotsInputrevolver[0] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 29, 125, 18 - 45)); - this.slotsInputrevolver[1] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 30, 144, 26 - 45)); - this.slotsInputrevolver[2] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 31, 152, 45 - 45)); - this.slotsInputrevolver[3] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 32, 144, 64 - 45)); - this.slotsInputrevolver[4] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 33, 125, 72 - 45)); - this.slotsInputrevolver[5] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 34, 106, 64 - 45)); - this.slotsInputrevolver[6] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 35, 98, 45 - 45)); - this.slotsInputrevolver[7] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 36, 106, 26 - 45)); + //Revolver layout slots (8 slots, circular layout) + this.inputRevolver[0] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 29, 125, 18)); + this.inputRevolver[1] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 30, 144, 26)); + this.inputRevolver[2] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 31, 152, 45)); + this.inputRevolver[3] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 32, 144, 64)); + this.inputRevolver[4] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 33, 125, 72)); + this.inputRevolver[5] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 34, 106, 64)); + this.inputRevolver[6] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 35, 98, 45)); + this.inputRevolver[7] = addSlotToContainer(new GhostFilteredBullet(this, this.inv, 36, 106, 26)); - // MG loader slots (if upgrade installed) + //MG loader slots (if upgrade installed) if(tile.isUpgradeInstalled(IIContent.UPGRADE_MG_LOADER)) { for(int i = 0; i < 12; i++) - this.slotsInputmg[i] = addSlotToContainer(new Slot(this.inv, i + 30, 184 + (i % 2) * 18, 18 + (i / 2) * 18 - 45) + this.inputMG[i] = addSlotToContainer(new Slot(this.inv, i+30, 184+(i%2)*18, 18+(i/2)*18) { @Override public boolean isItemValid(ItemStack stack) @@ -79,8 +79,8 @@ public boolean isItemValid(ItemStack stack) }); } - // Player inventory - addPlayerInventory(player.inventory, 8, 98); + //Player inventory + addPlayerInventory(player.inventory, 8, 98+45); } public static class GhostFilteredBullet extends IESlot.Ghost @@ -99,8 +99,8 @@ public void putStack(ItemStack itemStack) @Override public boolean isItemValid(ItemStack stack) { - return stack.getItem() instanceof ItemBullet && - !(stack.isItemEqual(BulletHandler.emptyCasing) || stack.isItemEqual(BulletHandler.emptyShell)); + return stack.getItem() instanceof ItemBullet&& + !(stack.isItemEqual(BulletHandler.emptyCasing)||stack.isItemEqual(BulletHandler.emptyShell)); } } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerArithmeticLogicMachine.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerArithmeticLogicMachine.java index 210ac262b..198f08367 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerArithmeticLogicMachine.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerArithmeticLogicMachine.java @@ -10,7 +10,7 @@ import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.multiblock.MultiblockArithmeticLogicMachine; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityArithmeticLogicMachine; import pl.pabilo8.immersiveintelligence.common.item.data.ItemIIFunctionalCircuit; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -18,7 +18,7 @@ * @ii-approved 0.3.1 * @since 30.06.2019 */ -public class ContainerArithmeticLogicMachine extends ContainerIIBase +public class ContainerArithmeticLogicMachine extends ContainerIITileBase { public final boolean storage; public final Slot[] circuitSlots; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerCasingPouch.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerCasingPouch.java index 887014d20..886340689 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerCasingPouch.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerCasingPouch.java @@ -1,6 +1,5 @@ package pl.pabilo8.immersiveintelligence.common.gui; -import blusunrize.immersiveengineering.common.gui.IESlot; import blusunrize.immersiveengineering.common.util.ItemNBTHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; @@ -8,14 +7,15 @@ import net.minecraft.util.EnumHand; import pl.pabilo8.immersiveintelligence.common.crafting.IIRecipes; import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIBulletMagazine; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIItem; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIItemBase; /** * @author Pabilo8 (pabilo@iiteam.net) * @since 23.09.2023 */ -public class ContainerCasingPouch extends ContainerIIItem +public class ContainerCasingPouch extends ContainerIIItemBase { + public Slot[] slotsCasing, slotsMagazine; public ContainerCasingPouch(EntityPlayer player, ItemStack heldStack, EnumHand hand) { @@ -27,14 +27,9 @@ public ContainerCasingPouch(EntityPlayer player, ItemStack heldStack, EnumHand h public int addSlots(int i) { //Casing Slots - for(int y = 0; y < 2; y++) - for(int x = 0; x < 6; x++) - this.addSlotToContainer(new IESlot.ContainerCallback(this, this.inv, i++, 26+x*18, 21+y*18)); - + this.slotsCasing = addSlotArray(26, 21-5, i, 12, 6); //Magazine Slots - for(int x = 0; x < 6; x++) - this.addSlotToContainer(new IESlot.ContainerCallback(this, this.inv, i++, 26+x*18, 59)); - + this.slotsMagazine = addSlotArray(26, 59-5, i+12, 6, 6); addPlayerInventory(inventoryPlayer, 8, 92); return i; } @@ -47,12 +42,6 @@ public boolean canInsert(ItemStack stack, int slotNumer, Slot slotObject) return stack.getItem() instanceof ItemIIBulletMagazine; } - @Override - public boolean canTake(ItemStack stack, int slotNumer, Slot slotObject) - { - return true; - } - @Override protected void updatePlayerItem(boolean closing) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerChemicalBath.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerChemicalBath.java index 7f88f5db2..11f9ffcaa 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerChemicalBath.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerChemicalBath.java @@ -6,7 +6,7 @@ import net.minecraft.inventory.Slot; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.multiblock.MultiblockChemicalBath; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityChemicalBath; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -14,7 +14,7 @@ * @ii-approved 0.3.1 * @since 10.07.2019 */ -public class ContainerChemicalBath extends ContainerIIBase +public class ContainerChemicalBath extends ContainerIITileBase { public final Slot slotInput, slotOutput; public final Slot slotBucketInput, slotBucketOutput; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerChemicalPainter.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerChemicalPainter.java index 87d9ad43e..d8c2c54f9 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerChemicalPainter.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerChemicalPainter.java @@ -6,7 +6,7 @@ import net.minecraft.inventory.Slot; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.multiblock.MultiblockChemicalPainter; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityChemicalPainter; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -14,7 +14,7 @@ * @since 10.07.2019 * @since 08.13.2025 */ -public class ContainerChemicalPainter extends ContainerIIBase +public class ContainerChemicalPainter extends ContainerIITileBase { public Slot inputSlot, outputSlot, inputFluidSlot, outputFluidSlot; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerCoagulator.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerCoagulator.java index f1321505b..006bc759e 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerCoagulator.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerCoagulator.java @@ -5,7 +5,7 @@ import net.minecraft.inventory.Slot; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.multiblock.MultiblockCoagulator; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityCoagulator; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -13,7 +13,7 @@ * @since 10.07.2019 * @since 12.12.2025 */ -public class ContainerCoagulator extends ContainerIIBase +public class ContainerCoagulator extends ContainerIITileBase { public Slot[] slotBucketIn, slotBucketOut; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataInputMachine.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataInputMachine.java index f0e1c571a..166f9d536 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataInputMachine.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataInputMachine.java @@ -4,7 +4,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityDataInputMachine; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -12,7 +12,7 @@ * @ii-approved 0.3.1 * @since 30.06.2019 */ -public class ContainerDataInputMachine extends ContainerIIBase +public class ContainerDataInputMachine extends ContainerIITileBase { public final Slot dataInput, dataOutput; public final Slot[] punchtapeStorage; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataInputMachineEditing.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataInputMachineEditing.java index 6ba089535..a67ff1516 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataInputMachineEditing.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataInputMachineEditing.java @@ -4,7 +4,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityDataInputMachine; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -12,7 +12,7 @@ * @ii-approved 0.3.1 * @since 30.06.2019 */ -public class ContainerDataInputMachineEditing extends ContainerIIBase +public class ContainerDataInputMachineEditing extends ContainerIITileBase { public Slot dataInput, dataOutput; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataMerger.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataMerger.java index 2db846a0f..1476793a3 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataMerger.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataMerger.java @@ -1,28 +1,18 @@ package pl.pabilo8.immersiveintelligence.common.gui; -import blusunrize.immersiveengineering.common.gui.ContainerIEBase; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Slot; import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataMerger; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) - * @since 30.06.2019 + * @updated 02.06.2026 */ -public class ContainerDataMerger extends ContainerIEBase +public class ContainerDataMerger extends ContainerIITileBase { public ContainerDataMerger(EntityPlayer player, TileEntityDataMerger tile) { - super(player.inventory, tile); - - this.slotCount = tile.getInventory().size(); - this.tile = tile; - - for(int i = 0; i < 3; i++) - for(int j = 0; j < 9; j++) - addSlotToContainer(new Slot(player.inventory, j+i*9+9, 8+j*18, 141+i*18)); - for(int i = 0; i < 9; i++) - addSlotToContainer(new Slot(player.inventory, i, 8+i*18, 199)); + super(player, tile); + this.addPlayerInventory(player.inventory, 8, 176); } - } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataRouter.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataRouter.java new file mode 100644 index 000000000..f76e10fb7 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerDataRouter.java @@ -0,0 +1,28 @@ +package pl.pabilo8.immersiveintelligence.common.gui; + +import net.minecraft.entity.player.EntityPlayer; +import pl.pabilo8.immersiveintelligence.common.block.data_device.tileentity.TileEntityDataRouter; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; + +/** + * @author Pabilo8 (pabilo@iiteam.net) + * @updated 02.06.2026 + */ +public class ContainerDataRouter extends ContainerIITileBase +{ + private ContainerDataRouter(EntityPlayer player, TileEntityDataRouter tile, boolean isEditMode) + { + super(player, tile); + this.addPlayerInventory(player.inventory, isEditMode?40: 8, isEditMode?184+16-2+12-2: 176-2); + } + + public static ContainerDataRouter getMainGui(EntityPlayer player, TileEntityDataRouter tile) + { + return new ContainerDataRouter(player, tile, false); + } + + public static ContainerDataRouter getEditGui(EntityPlayer player, TileEntityDataRouter tile) + { + return new ContainerDataRouter(player, tile, true); + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerElectrolyzer.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerElectrolyzer.java index 5df823ea6..42d7c3ce2 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerElectrolyzer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerElectrolyzer.java @@ -4,7 +4,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityElectrolyzer; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -12,7 +12,7 @@ * @ii-approved 0.3.1 * @since 10.07.2019 */ -public class ContainerElectrolyzer extends ContainerIIBase +public class ContainerElectrolyzer extends ContainerIITileBase { public final Slot[] slotsInput, slotsOutput; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerEmplacement.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerEmplacement.java index f1f3e9b7b..9b67ddd5f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerEmplacement.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerEmplacement.java @@ -1,20 +1,24 @@ package pl.pabilo8.immersiveintelligence.common.gui; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.SlotItemHandler; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.emplacement.TileEntityEmplacement; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; + +import javax.annotation.Nonnull; /** * @author Pabilo8 (pabilo@iiteam.net) + * @updated 02.06.2026 * @since 16.07.2021 */ -public class ContainerEmplacement extends ContainerIIBase +public class ContainerEmplacement extends ContainerIITileBase { - public Slot[] slotsEmplacementStorage; + public Slot[] slotsBaseInventory = new Slot[0]; + public Slot[] slotsPlatformInventory = new Slot[0]; public ContainerEmplacement(EntityPlayer player, TileEntityEmplacement tile) { @@ -25,30 +29,37 @@ public ContainerEmplacement(EntityPlayer player, TileEntityEmplacement tile) public static ContainerEmplacement getContainerForStoragePage(EntityPlayer player, TileEntityEmplacement tile) { ContainerEmplacement container = new ContainerEmplacement(player, tile); + if(tile.currentWeapon!=null) { - final IItemHandler handler = tile.currentWeapon.getBaseItemHandler(); - container.slotsEmplacementStorage = new Slot[0]; - /*this.slotsEmplacementStorage = addSlotArray(8,32, 0, handler.getSlots(), 9, - (container, inv1, id, x, y) -> new FilteredEmplacementSlot());*/ - } - return container; - } + //Ensure initialization + tile.currentWeapon.init(tile); - public static class FilteredEmplacementSlot extends Slot - { - final IItemHandler handler; + //Get inventory handlers + IItemHandler platformHandler = tile.currentWeapon.getPlatformItemHandler(); + IItemHandler baseHandler = tile.currentWeapon.getBaseItemHandler(); - public FilteredEmplacementSlot(IInventory inventoryIn, IItemHandler handler, int index, int xPosition, int yPosition) - { - super(inventoryIn, index, xPosition, yPosition); - this.handler = handler; - } + //Add slots + if(platformHandler!=null) + container.slotsPlatformInventory = container.addSlotArray(8, 24, 0, platformHandler.getSlots(), 9, + (container1, inv1, id, x, y) -> new SlotItemHandler(platformHandler, id, x, y) + { + @Override + public boolean canTakeStack(EntityPlayer playerIn) + { + return false; + } - @Override - public boolean isItemValid(ItemStack itemStack) - { - return handler.isItemValid(getSlotIndex(), itemStack); + @Override + public boolean isItemValid(@Nonnull ItemStack stack) + { + return false; + } + }); + if(baseHandler!=null) + container.slotsBaseInventory = container.addSlotArray(8, 80+16, 0, baseHandler.getSlots(), 9, + (container1, inv1, id, x, y) -> new SlotItemHandler(baseHandler, id, x, y)); } + return container; } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerEntityUpgrade.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerEntityUpgrade.java new file mode 100644 index 000000000..5122674b9 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerEntityUpgrade.java @@ -0,0 +1,22 @@ +package pl.pabilo8.immersiveintelligence.common.gui; + +import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import pl.pabilo8.immersiveintelligence.api.upgrade.IUpgradableDevice; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIEntityBase; + +/** + * @author Pabilo8 (pabilo@iiteam.net) + * @since 10.07.2019 + */ +public class ContainerEntityUpgrade extends ContainerIIEntityBase +{ + public ContainerEntityUpgrade(EntityPlayer player, E tile) + { + super(player, tile); + //Input/Output Slots + + addPlayerInventory(player.inventory, 9+32+16-8, 18+32+32+8-4+76-16+4+24+8); + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerFiller.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerFiller.java index 11efbf7f3..3f2a37ae9 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerFiller.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerFiller.java @@ -4,7 +4,7 @@ import net.minecraft.inventory.Slot; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.multiblock.MultiblockFiller; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityFiller; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -12,7 +12,7 @@ * @since 10.07.2019 * @since 08.12.2025 */ -public class ContainerFiller extends ContainerIIBase +public class ContainerFiller extends ContainerIITileBase { public Slot inputSlot; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerFlagpole.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerFlagpole.java index 479fd1961..5bf9e94c3 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerFlagpole.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerFlagpole.java @@ -3,14 +3,14 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityFlagpole; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) * @ii-approved 0.3.1 * @since 27.12.2025 */ -public class ContainerFlagpole extends ContainerIIBase +public class ContainerFlagpole extends ContainerIITileBase { private ContainerFlagpole(EntityPlayer player, TileEntityFlagpole tile, boolean faction) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerFuelStation.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerFuelStation.java index 36a3101f8..f0a9d3b45 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerFuelStation.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerFuelStation.java @@ -4,7 +4,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityFuelStation; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -12,7 +12,7 @@ * @since 10.07.2019 * @since 08.14.2025 */ -public class ContainerFuelStation extends ContainerIIBase +public class ContainerFuelStation extends ContainerIITileBase { public Slot inputFluidSlot, outputFluidSlot; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerGearbox.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerGearbox.java index a2a08647f..6ebdbf55c 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerGearbox.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerGearbox.java @@ -2,13 +2,13 @@ import net.minecraft.entity.player.EntityPlayer; import pl.pabilo8.immersiveintelligence.common.block.rotary_device.tileentity.TileEntityGearbox; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) * @since 17.05.2019 */ -public class ContainerGearbox extends ContainerIIBase +public class ContainerGearbox extends ContainerIITileBase { public ContainerGearbox(EntityPlayer player, TileEntityGearbox tile) { @@ -17,4 +17,4 @@ public ContainerGearbox(EntityPlayer player, TileEntityGearbox tile) this.addPlayerInventory(player.inventory, 8, 87); } -} \ No newline at end of file +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerIICrate.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerIICrate.java index 170677474..985fdd29e 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerIICrate.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerIICrate.java @@ -3,14 +3,14 @@ import blusunrize.immersiveengineering.common.blocks.wooden.TileEntityWoodenCrate; import invtweaks.api.container.ChestContainer; import net.minecraft.entity.player.EntityPlayer; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) * @since 17.05.2019 */ @ChestContainer -public class ContainerIICrate extends ContainerIIBase +public class ContainerIICrate extends ContainerIITileBase { public ContainerIICrate(EntityPlayer player, T tile) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerInserter.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerInserter.java index 2da454fc1..0392fad3a 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerInserter.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerInserter.java @@ -2,14 +2,14 @@ import net.minecraft.entity.player.EntityPlayer; import pl.pabilo8.immersiveintelligence.common.block.metal_device.tileentity.inserter.TileEntityInserterBase; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) * @ii-approved 0.3.1 * @since 20.01.2026 */ -public class ContainerInserter extends ContainerIIBase +public class ContainerInserter extends ContainerIITileBase { public ContainerInserter(EntityPlayer player, TileEntityInserterBase tile) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerMedicalCrate.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerMedicalCrate.java index 678f13f64..e5cac4826 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerMedicalCrate.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerMedicalCrate.java @@ -6,7 +6,7 @@ import net.minecraft.item.ItemStack; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.metal_device.tileentity.effect_crate.TileEntityMedicalCrate; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -14,7 +14,7 @@ * @since 17.05.2019 * @since 08.14.2025 */ -public class ContainerMedicalCrate extends ContainerIIBase +public class ContainerMedicalCrate extends ContainerIITileBase { public Slot inputSlot, inputFluidSlot, outputSlot, outputSlot2; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerPacker.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerPacker.java index e8116d708..f47afce57 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerPacker.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerPacker.java @@ -5,7 +5,7 @@ import net.minecraft.inventory.Slot; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityPacker; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -15,7 +15,7 @@ * @ii-approved 0.3.1 * @since 17.05.2019 */ -public class ContainerPacker extends ContainerIIBase +public class ContainerPacker extends ContainerIITileBase { //Used by fluid and energy containers public Slot[] slotsInput, slotsOutput; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerPrecisionAssembler.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerPrecisionAssembler.java index 9634f933d..5b8703a2f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerPrecisionAssembler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerPrecisionAssembler.java @@ -5,7 +5,7 @@ import net.minecraft.inventory.Slot; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.multiblock.MultiblockPrecisionAssembler; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityPrecisionAssembler; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -13,7 +13,7 @@ * @updated 30.08.2025 * @since 17.05.2019 */ -public class ContainerPrecisionAssembler extends ContainerIIBase +public class ContainerPrecisionAssembler extends ContainerIITileBase { public Slot[] ingredientSlots, outputSlots, toolSlots; public Slot schemeSlot; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerPrintingPress.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerPrintingPress.java index eff250273..375d62d0d 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerPrintingPress.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerPrintingPress.java @@ -7,7 +7,7 @@ import net.minecraft.item.ItemStack; import pl.pabilo8.immersiveintelligence.api.crafting.PrintingRecipe; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock0.tileentity.TileEntityPrintingPress; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; import javax.annotation.Nonnull; @@ -16,7 +16,7 @@ * @updated 14.06.2025 * @since 10.07.2019 */ -public class ContainerPrintingPress extends ContainerIIBase +public class ContainerPrintingPress extends ContainerIITileBase { public Slot slotInput, slotOutput; public Slot slotBucketIn, slotBucketOut; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerProjectileWorkshop.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerProjectileWorkshop.java index 92de01af6..694adba89 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerProjectileWorkshop.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerProjectileWorkshop.java @@ -2,10 +2,10 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; import pl.pabilo8.immersiveintelligence.common.IIContent; +import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.multiblock.MultiblockProjectileWorkshop; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityProjectileWorkshop; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -13,44 +13,25 @@ * @since 10.07.2019 * @since 08.13.2025 */ -public class ContainerProjectileWorkshop extends ContainerIIBase +public class ContainerProjectileWorkshop extends ContainerIITileBase { - public Slot inputSlot, outputSlot; + public Slot inputSlot, componentInputSlot; public ContainerProjectileWorkshop(EntityPlayer player, TileEntityProjectileWorkshop tile) { super(player, tile); - if(tile.isUpgradeInstalled(IIContent.UPGRADE_CORE_FILLER)) { - inputSlot = this.addSlotToContainer(new Slot(this.inv, 0, 8, 46) - { - @Override - public boolean isItemValid(ItemStack itemStack) - { - return tile.isStackValid(0, itemStack); - } - }); - outputSlot = this.addSlotToContainer(new Slot(this.inv, 1, 48, 20) - { - @Override - public boolean isItemValid(ItemStack itemStack) - { - return tile.isStackValid(1, itemStack); - } - }); + inputSlot = addSlot(8+2+2, 45-8, MultiblockProjectileWorkshop.SLOT_INPUT); + componentInputSlot = addSlot(176/2-9, 12, MultiblockProjectileWorkshop.SLOT_COMPONENT_INPUT); + addPlayerInventory(player.inventory, 8+32+8+4-44, 141+8); } else - inputSlot = this.addSlotToContainer(new Slot(this.inv, 0, 8, 8+2) - { - @Override - public boolean isItemValid(ItemStack itemStack) - { - return tile.isStackValid(0, itemStack); - } - }); + { + inputSlot = addSlot(8, 8+2, MultiblockProjectileWorkshop.SLOT_INPUT); + addPlayerInventory(player.inventory, 8+32+8+4, 141+8); + } - addPlayerInventory(player.inventory, 8+32+8+4, 141+8); } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerRadar.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerRadar.java index 2ed014f00..7ea329266 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerRadar.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerRadar.java @@ -2,13 +2,13 @@ import net.minecraft.entity.player.EntityPlayer; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityRadar; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) * @since 10.07.2019 */ -public class ContainerRadar extends ContainerIIBase +public class ContainerRadar extends ContainerIITileBase { public ContainerRadar(EntityPlayer player, TileEntityRadar tile) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerRedstoneDataInterface.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerRedstoneDataInterface.java index b7c49ef64..d8f14efb4 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerRedstoneDataInterface.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerRedstoneDataInterface.java @@ -5,13 +5,13 @@ import net.minecraft.inventory.Slot; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.multiblock.MultiblockRedstoneInterface; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityRedstoneDataInterface; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) * @since 30.06.2019 */ -public class ContainerRedstoneDataInterface extends ContainerIIBase +public class ContainerRedstoneDataInterface extends ContainerIITileBase { public Slot punchtapeInput, punchtapeOutput; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerRepairCrate.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerRepairCrate.java index c5cb9925e..a3a95fa0a 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerRepairCrate.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerRepairCrate.java @@ -6,7 +6,7 @@ import net.minecraft.item.ItemStack; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.block.metal_device.tileentity.effect_crate.TileEntityRepairCrate; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -14,7 +14,7 @@ * @since 17.05.2019 * @since 08.15.2025 */ -public class ContainerRepairCrate extends ContainerIIBase +public class ContainerRepairCrate extends ContainerIITileBase { public Slot inputSlot; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerSawmill.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerSawmill.java index 176018f32..0d2632886 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerSawmill.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerSawmill.java @@ -11,7 +11,7 @@ import pl.pabilo8.immersiveintelligence.common.block.multiblock.wooden_multiblock.multiblock.MultiblockSawmill; import pl.pabilo8.immersiveintelligence.common.block.multiblock.wooden_multiblock.tileentity.TileEntitySawmill; import pl.pabilo8.immersiveintelligence.common.util.IIDamageSources; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -19,7 +19,7 @@ * @ii-approved 0.3.1 * @since 10.07.2019 */ -public class ContainerSawmill extends ContainerIIBase +public class ContainerSawmill extends ContainerIITileBase { public final Slot slotInput, slotSaw, slotOutput, slotOutputTrash; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerSkycartStation.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerSkycartStation.java index 7ea043350..11d54c14c 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerSkycartStation.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerSkycartStation.java @@ -1,13 +1,9 @@ package pl.pabilo8.immersiveintelligence.common.gui; -import blusunrize.immersiveengineering.common.gui.ContainerIEBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import pl.pabilo8.immersiveintelligence.api.rotary.IMotorGear; import pl.pabilo8.immersiveintelligence.common.block.multiblock.wooden_multiblock.tileentity.TileEntitySkyCartStation; -import pl.pabilo8.immersiveintelligence.common.block.rotary_device.tileentity.TileEntityGearbox; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -15,7 +11,7 @@ * @since 17.05.2019 * @since 08.14.2025 */ -public class ContainerSkycartStation extends ContainerIIBase +public class ContainerSkycartStation extends ContainerIITileBase { public Slot inputSlot; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerSkycrateStation.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerSkycrateStation.java index 4e5fb11a5..d202a06d4 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerSkycrateStation.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerSkycrateStation.java @@ -1,13 +1,10 @@ package pl.pabilo8.immersiveintelligence.common.gui; -import blusunrize.immersiveengineering.common.gui.ContainerIEBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import pl.pabilo8.immersiveintelligence.api.rotary.IMotorGear; import pl.pabilo8.immersiveintelligence.common.block.multiblock.wooden_multiblock.tileentity.TileEntitySkyCartStation; import pl.pabilo8.immersiveintelligence.common.block.multiblock.wooden_multiblock.tileentity.TileEntitySkyCrateStation; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -15,7 +12,7 @@ * @since 17.05.2019 * @since 08.14.2025 */ -public class ContainerSkycrateStation extends ContainerIIBase +public class ContainerSkycrateStation extends ContainerIITileBase { public Slot inputSlot; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerUpgrade.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerTileUpgrade.java similarity index 74% rename from src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerUpgrade.java rename to src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerTileUpgrade.java index e17b20868..2ea5ebaf5 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerUpgrade.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerTileUpgrade.java @@ -4,15 +4,15 @@ import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; import net.minecraft.entity.player.EntityPlayer; import pl.pabilo8.immersiveintelligence.api.upgrade.IUpgradableDevice; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) * @since 10.07.2019 */ -public class ContainerUpgrade extends ContainerIIBase +public class ContainerTileUpgrade extends ContainerIITileBase { - public ContainerUpgrade(EntityPlayer player, T tile) + public ContainerTileUpgrade(EntityPlayer player, T tile) { super(player, tile); //Input/Output Slots diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerVulcanizer.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerVulcanizer.java index 40673c184..154f27d66 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerVulcanizer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/gui/ContainerVulcanizer.java @@ -3,7 +3,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import pl.pabilo8.immersiveintelligence.common.block.multiblock.metal_multiblock1.tileentity.TileEntityVulcanizer; -import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIIBase; +import pl.pabilo8.immersiveintelligence.common.util.gui.ContainerIITileBase; /** * @author Pabilo8 (pabilo@iiteam.net) @@ -11,7 +11,7 @@ * @since 10.07.2019 * @since 08.12.2025 */ -public class ContainerVulcanizer extends ContainerIIBase +public class ContainerVulcanizer extends ContainerIITileBase { public Slot[] slotInput; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/ammo/gun/ItemIIAmmoMachinegun.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/ammo/gun/ItemIIAmmoMachinegun.java index d0106a834..e1c3e0e26 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/ammo/gun/ItemIIAmmoMachinegun.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/ammo/gun/ItemIIAmmoMachinegun.java @@ -64,7 +64,7 @@ public int getCoreMaterialNeeded() @Override public float getCasingMass() { - return 0.046875f; + return 0.030468749f; } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/ammo/gun/ItemIIAmmoSubmachinegun.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/ammo/gun/ItemIIAmmoSubmachinegun.java index 516626011..9b0d1c766 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/ammo/gun/ItemIIAmmoSubmachinegun.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/ammo/gun/ItemIIAmmoSubmachinegun.java @@ -63,7 +63,7 @@ public int getCoreMaterialNeeded() @Override public float getCasingMass() { - return 0.03125f; + return 0.024375f; } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/tools/ItemIIBinoculars.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/tools/ItemIIBinoculars.java index d265d6f3c..789c0fc57 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/tools/ItemIIBinoculars.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/tools/ItemIIBinoculars.java @@ -17,11 +17,9 @@ import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.MobEffects; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; @@ -35,8 +33,10 @@ import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.items.CapabilityItemHandler; import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; -import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoomTool; +import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoom; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Tools; +import pl.pabilo8.immersiveintelligence.common.IIPotions; +import pl.pabilo8.immersiveintelligence.common.IIUtils; import pl.pabilo8.immersiveintelligence.common.entity.vehicle.towable.gun.EntityFieldHowitzer; import pl.pabilo8.immersiveintelligence.common.item.tools.ItemIIBinoculars.Binoculars; import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; @@ -59,7 +59,7 @@ * @since 15.09.2019 */ @IIItemProperties(category = IICategory.TOOLS) -public class ItemIIBinoculars extends ItemIISubItemsBase implements IAdvancedZoomTool, IIEEnergyItem, IIIItemTextureOverride +public class ItemIIBinoculars extends ItemIISubItemsBase implements IAdvancedZoom, IIEEnergyItem, IIIItemTextureOverride { private static final ResourceLocation OVERLAY_TEXTURE = new ResourceLocation(ImmersiveIntelligence.MODID, "textures/gui/item/binoculars.png"); public static UUID visionUUID = Utils.generateNewUUID(); @@ -88,18 +88,18 @@ public void addInformation(ItemStack stack, @Nullable World world, List } @Override - public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) + public void onUpdate(ItemStack stack, World worldIn, Entity entity, int itemSlot, boolean isSelected) { - super.onUpdate(stack, worldIn, entityIn, itemSlot, isSelected); + super.onUpdate(stack, worldIn, entity, itemSlot, isSelected); boolean do_tick = worldIn.getTotalWorldTime()%20==0; if(worldIn.isRemote) - ItemNBTHelper.setBoolean(stack, "sneaking", entityIn.isSneaking()&&isSelected); + ItemNBTHelper.setBoolean(stack, "sneaking", entity.isSneaking()&&isSelected); - if(!worldIn.isRemote&&entityIn instanceof EntityLivingBase) + if(!worldIn.isRemote&&entity instanceof EntityLivingBase) { - if(!isSelected||!(entityIn.isSneaking()||entityIn.getLowestRidingEntity() instanceof EntityFieldHowitzer)&&do_tick) + if(!isSelected||!(entity.isSneaking()||entity.getLowestRidingEntity() instanceof EntityFieldHowitzer)&&do_tick) { if(isAdvanced(stack)) { @@ -107,24 +107,21 @@ public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSl if(ItemNBTHelper.getBoolean(stack, "wasUsed")) { ItemNBTHelper.setBoolean(stack, "wasUsed", false); - ((EntityLivingBase)entityIn).removePotionEffect(MobEffects.NIGHT_VISION); + ((EntityLivingBase)entity).removePotionEffect(IIPotions.infraredVision); } } } else { - if(entityIn instanceof EntityPlayerMP&&worldIn.getTotalWorldTime()%5==0&&(entityIn.isSneaking()||entityIn.getLowestRidingEntity() instanceof EntityFieldHowitzer)) + if(entity instanceof EntityPlayerMP&&worldIn.getTotalWorldTime()%5==0&&(entity.isSneaking()||entity.getLowestRidingEntity() instanceof EntityFieldHowitzer)) { - float yaw = (360+((EntityLivingBase)entityIn).rotationYawHead)%360; - IIPacketHandler.sendChatTranslation(((EntityPlayerMP)entityIn), IIReference.INFO_KEY+"yaw", yaw); + float yaw = (360+((EntityLivingBase)entity).rotationYawHead)%360; + IIPacketHandler.sendChatTranslation(((EntityPlayerMP)entity), IIReference.INFO_KEY+"yaw", yaw); } if(do_tick&&isEnabled(stack)&&isAdvanced(stack)) { - if(worldIn.getLightBrightness(entityIn.getPosition()) <= 0.5f) - ((EntityLivingBase)entityIn).addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 240, 1, true, false)); - else - ((EntityLivingBase)entityIn).addPotionEffect(new PotionEffect(MobEffects.BLINDNESS, 240, 1, false, false)); + IIUtils.applyInfraredVision(entity, 25); ItemNBTHelper.setBoolean(stack, "wasUsed", true); extractEnergy(stack, Tools.advancedBinocularsEnergyUsage, false); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/tools/ItemIITripodPeriscope.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/tools/ItemIITripodPeriscope.java index ba23fbc29..364e9ec47 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/tools/ItemIITripodPeriscope.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/tools/ItemIITripodPeriscope.java @@ -1,31 +1,29 @@ package pl.pabilo8.immersiveintelligence.common.item.tools; -import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.ItemMonsterPlacer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; -import net.minecraft.util.SoundCategory; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; -import pl.pabilo8.immersiveintelligence.common.entity.EntityTripodPeriscope; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityTripodPeriscope; import pl.pabilo8.immersiveintelligence.common.util.item.IICategory; import pl.pabilo8.immersiveintelligence.common.util.item.IIItemEnum.IIItemProperties; +import pl.pabilo8.immersiveintelligence.common.util.item.IItemEntityPlacer; import pl.pabilo8.immersiveintelligence.common.util.item.ItemIIBase; -import java.util.List; +import javax.annotation.Nonnull; /** * @author Pabilo8 (pabilo@iiteam.net) + * @updated 23.05.2026 + * @ii-approved 0.3.1 * @since 23.01.2021 */ @IIItemProperties(category = IICategory.WARFARE) -public class ItemIITripodPeriscope extends ItemIIBase +public class ItemIITripodPeriscope extends ItemIIBase implements IItemEntityPlacer { public ItemIITripodPeriscope() { @@ -35,63 +33,27 @@ public ItemIITripodPeriscope() /** * Called when a Block is right-clicked with this Item */ - public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + @Nonnull + public EnumActionResult onItemUse(@Nonnull EntityPlayer player, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull EnumHand hand, @Nonnull EnumFacing facing, + float hitX, float hitY, float hitZ) { - if(facing==EnumFacing.DOWN) - { - return EnumActionResult.FAIL; - } - else - { - boolean flag = worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos); - BlockPos blockpos = flag?pos: pos.offset(facing); - ItemStack itemstack = player.getHeldItem(hand); - - if(!player.canPlayerEdit(blockpos, facing, itemstack)) - { - return EnumActionResult.FAIL; - } - else - { - BlockPos blockpos1 = blockpos.up(); - boolean flag1 = !worldIn.isAirBlock(blockpos)&&!worldIn.getBlockState(blockpos).getBlock().isReplaceable(worldIn, blockpos); - flag1 = flag1|(!worldIn.isAirBlock(blockpos1)&&!worldIn.getBlockState(blockpos1).getBlock().isReplaceable(worldIn, blockpos1)); + return IItemEntityPlacer.super.onItemUse(player, world, pos, hand, facing, hitX, hitY, hitZ); + } - if(flag1) - { - return EnumActionResult.FAIL; - } - else - { - double d0 = blockpos.getX(); - double d1 = blockpos.getY(); - double d2 = blockpos.getZ(); - List list = worldIn.getEntitiesWithinAABBExcludingEntity(null, new AxisAlignedBB(d0, d1, d2, d0+1.0D, d1+2.0D, d2+1.0D)); + @Nonnull + @Override + public AxisAlignedBB getPlacedSpace(BlockPos pos) + { + return new AxisAlignedBB(pos).expand(0, 1.5, 0); + } - if(!list.isEmpty()) - { - return EnumActionResult.FAIL; - } - else - { - if(!worldIn.isRemote) - { - worldIn.setBlockToAir(blockpos); - worldIn.setBlockToAir(blockpos1); - EntityTripodPeriscope periscope = new EntityTripodPeriscope(worldIn); - periscope.setPosition(d0+0.5D, d1, d2+0.5D); - float f = (float)MathHelper.floor((MathHelper.wrapDegrees(player.rotationYaw-180.0F)+22.5F)/45.0F)*45.0F; - periscope.setLocationAndAngles(d0+0.5D, d1, d2+0.5D, f, 0.0F); - periscope.periscopeYaw = f; - ItemMonsterPlacer.applyItemEntityDataToEntity(worldIn, player, itemstack, periscope); - worldIn.spawnEntity(periscope); - worldIn.playSound(null, periscope.posX, periscope.posY, periscope.posZ, SoundEvents.ENTITY_ARMORSTAND_PLACE, SoundCategory.BLOCKS, 0.75F, 0.8F); - } - itemstack.shrink(1); - return EnumActionResult.SUCCESS; - } - } - } - } + @Nonnull + @Override + public EntityTripodPeriscope getPlacedEntity(World world, double x, double y, double z, ItemStack stack, float playerYaw, float playerPitch) + { + EntityTripodPeriscope periscope = new EntityTripodPeriscope(world); + periscope.setPosition(x, y, z); + periscope.aim.withCenterYaw(playerYaw); + return periscope; } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIAssaultRifle.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIAssaultRifle.java index d5c58b830..8fc590a35 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIAssaultRifle.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIAssaultRifle.java @@ -10,9 +10,7 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.MobEffects; import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvent; @@ -24,7 +22,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; import pl.pabilo8.immersiveintelligence.api.utils.ItemTooltipHandler.IItemScrollable; -import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoomTool; +import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoom; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.AssaultRifle; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.IISounds; @@ -49,14 +47,14 @@ * @since 17.09.2022 */ @IIItemProperties(category = IICategory.WARFARE) -public class ItemIIAssaultRifle extends ItemIIGunBase implements IItemScrollable, IAdvancedZoomTool, IIEEnergyItem +public class ItemIIAssaultRifle extends ItemIIGunBase implements IItemScrollable, IAdvancedZoom, IIEEnergyItem { //--- NBT Values Reference ---// public static final String FIRE_MODE = "fire_mode"; public static final String LAST_FIRE_MODE = "last_mode"; public static final String FIRE_MODE_TIMER = "mode_switch"; public static final String LOADED_GRENADE = "grenade"; - public static final String ENERGY_UPGRADED = "energy"; + public static final String ENERGY_UPGRADED = "energy_upgraded"; //--- Scope Overlay Textures ---// public static final ResourceLocation OVERLAY_SCOPE = new ResourceLocation(ImmersiveIntelligence.MODID, @@ -126,7 +124,7 @@ public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, if(entity instanceof EntityLivingBase&&isAimed(stack)&&hasIIUpgrade(stack, WeaponUpgrade.INFRARED_SCOPE)) { if(extractEnergy(stack, AssaultRifle.upgradeIRScopeEnergy, false) > 0) - ((EntityLivingBase)entity).addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, 4, 1, true, false)); + IIUtils.applyInfraredVision(entity, 10); } } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIMachinegun.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIMachinegun.java index d3841ec51..07e782dda 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIMachinegun.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIMachinegun.java @@ -7,21 +7,16 @@ import blusunrize.immersiveengineering.common.util.inventory.IEItemStackHandler; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.stats.StatList; -import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.IRarity; import net.minecraftforge.common.capabilities.Capability; @@ -41,15 +36,17 @@ import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.Machinegun; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.IIUtils; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMachinegun; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMachinegun; +import pl.pabilo8.immersiveintelligence.common.item.weapons.ItemIIWeaponUpgrade.WeaponType; import pl.pabilo8.immersiveintelligence.common.item.weapons.ItemIIWeaponUpgrade.WeaponUpgrade; -import pl.pabilo8.immersiveintelligence.common.util.IIMath; import pl.pabilo8.immersiveintelligence.common.util.IIReference; import pl.pabilo8.immersiveintelligence.common.util.item.IICategory; import pl.pabilo8.immersiveintelligence.common.util.item.IIItemEnum.IIItemProperties; import pl.pabilo8.immersiveintelligence.common.util.item.IIItemUtils; +import pl.pabilo8.immersiveintelligence.common.util.item.IItemEntityPlacer; import pl.pabilo8.immersiveintelligence.common.util.item.ItemIIUpgradableTool; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.List; @@ -58,11 +55,11 @@ * @since 01.11.2019 */ @IIItemProperties(category = IICategory.WARFARE) -public class ItemIIMachinegun extends ItemIIUpgradableTool implements IAdvancedFluidItem, ISkinnable +public class ItemIIMachinegun extends ItemIIUpgradableTool implements IAdvancedFluidItem, ISkinnable, IItemEntityPlacer { public ItemIIMachinegun() { - super("machinegun", 1, "MACHINEGUN"); + super("machinegun", 1, WeaponType.MACHINEGUN.getName().toUpperCase()); //Use interfaces pls Blu IIItemUtils.fixupItem(this, "machinegun"); } @@ -83,16 +80,17 @@ public boolean canModify(ItemStack stack) public Slot[] getWorkbenchSlots(Container container, ItemStack stack) { IItemHandler inv = stack.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); + String type = WeaponType.MACHINEGUN.getName().toUpperCase(); return new Slot[] { - new IESlot.Upgrades(container, inv, 0, 80, 32, "MACHINEGUN", stack, true), - new IESlot.Upgrades(container, inv, 1, 100, 32, "MACHINEGUN", stack, true), - new IESlot.Upgrades(container, inv, 2, 120, 32, "MACHINEGUN", stack, true) + new IESlot.Upgrades(container, inv, 0, 80, 32, type, stack, true), + new IESlot.Upgrades(container, inv, 1, 100, 32, type, stack, true), + new IESlot.Upgrades(container, inv, 2, 120, 32, type, stack, true) }; } @Override - public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flag) + public void addInformation(@Nonnull ItemStack stack, @Nullable World world, @Nonnull List tooltip, @Nonnull ITooltipFlag flag) { super.addInformation(stack, world, tooltip, flag); @@ -116,112 +114,50 @@ public void addInformation(ItemStack stack, @Nullable World world, List addSkinTooltip(stack, tooltip); } + @Nonnull @Override - public IRarity getForgeRarity(ItemStack stack) + public IRarity getForgeRarity(@Nonnull ItemStack stack) { IRarity skin = getSkinRarity(stack); return skin!=null?skin: super.getForgeRarity(stack); } @Override - public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + public void removeFromWorkbench(EntityPlayer player, ItemStack stack) { - ItemStack itemstack = playerIn.getHeldItem(handIn); - float f = 1.0F; - float f1 = playerIn.prevRotationPitch+(playerIn.rotationPitch-playerIn.prevRotationPitch); - float f2 = playerIn.prevRotationYaw+(playerIn.rotationYaw-playerIn.prevRotationYaw); - double d0 = playerIn.prevPosX+(playerIn.posX-playerIn.prevPosX); - double d1 = playerIn.prevPosY+(playerIn.posY-playerIn.prevPosY)+(double)playerIn.getEyeHeight(); - double d2 = playerIn.prevPosZ+(playerIn.posZ-playerIn.prevPosZ); - Vec3d vec3d = new Vec3d(d0, d1, d2); - float f3 = MathHelper.cos(-f2*0.017453292F-(float)Math.PI); - float f4 = MathHelper.sin(-f2*0.017453292F-(float)Math.PI); - float f5 = -MathHelper.cos(-f1*0.017453292F); - float f6 = MathHelper.sin(-f1*0.017453292F); - float f7 = f4*f5; - float f8 = f3*f5; - double d3 = 5.0D; - Vec3d vec3d1 = vec3d.addVector((double)f7*5.0D, (double)f6*5.0D, (double)f8*5.0D); - RayTraceResult raytraceresult = worldIn.rayTraceBlocks(vec3d, vec3d1, false); - - if(raytraceresult==null) - return new ActionResult<>(EnumActionResult.PASS, itemstack); - else - { - Vec3d vec3d2 = playerIn.getLook(1.0F); - boolean flag = false; - List list = worldIn.getEntitiesWithinAABBExcludingEntity(playerIn, playerIn.getEntityBoundingBox().expand(vec3d2.x*5.0D, vec3d2.y*5.0D, vec3d2.z*5.0D).grow(1.0D)); - - for(Entity entity : list) - if(entity.canBeCollidedWith()) - { - AxisAlignedBB axisalignedbb = entity.getEntityBoundingBox().grow(entity.getCollisionBorderSize()); - - if(axisalignedbb.contains(vec3d)) - flag = true; - } - - if(flag) - return new ActionResult<>(EnumActionResult.PASS, itemstack); - else if(raytraceresult.typeOfHit!=RayTraceResult.Type.BLOCK) - return new ActionResult<>(EnumActionResult.PASS, itemstack); - else - { - AxisAlignedBB aabb = worldIn.getBlockState(raytraceresult.getBlockPos()).getCollisionBoundingBox(playerIn.world, raytraceresult.getBlockPos()); - EnumFacing facing = EnumFacing.fromAngle(playerIn.rotationYaw); - float yaw = facing.getHorizontalAngle(); - float pitch = 25f; - - AxisAlignedBB fence; - switch(facing) - { - case SOUTH: - fence = new AxisAlignedBB(0, 0, 0.5, 1, 1, 1); - break; - case WEST: - fence = new AxisAlignedBB(0, 0, 0, 0.5, 1, 1); - break; - case EAST: - fence = new AxisAlignedBB(0.5, 0, 0, 1, 1, 1); - break; - default: - case NORTH: - fence = new AxisAlignedBB(0, 0, 0, 1, 1, 0.5); - break; - } - - if(aabb==null) - return new ActionResult<>(EnumActionResult.FAIL, itemstack); - - boolean intersects = IIMath.isAABBContained(fence, aabb); - - if(!intersects) - return new ActionResult<>(EnumActionResult.PASS, itemstack); - - EntityMachinegun maschinengewehr = new EntityMachinegun(worldIn, raytraceresult.getBlockPos(), playerIn.getRotationYawHead(), pitch, itemstack.copy()); + if(hasIIUpgrades(stack, WeaponUpgrade.HEAVY_BARREL, WeaponUpgrade.SECOND_MAGAZINE, WeaponUpgrade.INFRARED_SCOPE)) + IIUtils.unlockIIAdvancement(player, "main/let_me_show_you_its_features"); + if(hasIIUpgrades(stack, WeaponUpgrade.BELT_FED_LOADER, WeaponUpgrade.SHIELD, WeaponUpgrade.WATER_COOLING)) + IIUtils.unlockIIAdvancement(player, "main/hans_9000"); + } - if(!worldIn.isRemote) - worldIn.spawnEntity(maschinengewehr); - playerIn.startRiding(maschinengewehr); + //--- IItemEntityPlacer ---// - itemstack.shrink(1); - playerIn.addStat(StatList.getObjectUseStats(this)); - return new ActionResult<>(EnumActionResult.SUCCESS, itemstack); - } - } + @Nonnull + @Override + public EnumActionResult onItemUse(@Nonnull EntityPlayer player, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull EnumHand hand, + @Nonnull EnumFacing facing, float hitX, float hitY, float hitZ) + { + return IItemEntityPlacer.super.onItemUse(player, world, pos, hand, facing, hitX, hitY, hitZ); } + @Nonnull + @Override + public AxisAlignedBB getPlacedSpace(BlockPos pos) + { + return new AxisAlignedBB(pos); + } + @Nonnull @Override - public void removeFromWorkbench(EntityPlayer player, ItemStack stack) + public EntityMachinegun getPlacedEntity(World world, double x, double y, double z, ItemStack stack, float playerYaw, float playerPitch) { - if(hasIIUpgrades(stack, WeaponUpgrade.HEAVY_BARREL, WeaponUpgrade.SECOND_MAGAZINE, WeaponUpgrade.INFRARED_SCOPE)) - IIUtils.unlockIIAdvancement(player, "main/let_me_show_you_its_features"); - if(hasIIUpgrades(stack, WeaponUpgrade.BELT_FED_LOADER, WeaponUpgrade.SHIELD, WeaponUpgrade.WATER_COOLING)) - IIUtils.unlockIIAdvancement(player, "main/hans_9000"); + return new EntityMachinegun(world, new BlockPos(x, y, z), playerYaw, stack); } + //--- IAdvancedFluidItem ---// + @Override public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) { @@ -231,14 +167,14 @@ public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) final IEItemFluidHandler fluids = new IEItemFluidHandler(stack, 0); @Override - public boolean hasCapability(Capability capability, EnumFacing facing) + public boolean hasCapability(@Nonnull Capability capability, EnumFacing facing) { return capability==CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY|| super.hasCapability(capability, facing); } @Override - public T getCapability(Capability capability, EnumFacing facing) + public T getCapability(@Nonnull Capability capability, EnumFacing facing) { if(capability==CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY) return (T)fluids; @@ -251,23 +187,25 @@ public T getCapability(Capability capability, EnumFacing facing) @Override public int getCapacity(ItemStack stack, int baseCapacity) { - return getUpgrades(stack).hasKey("water_cooling")?Machinegun.waterCoolingTankCapacity: 0; + return hasIIUpgrade(stack, WeaponUpgrade.WATER_COOLING)?Machinegun.waterCoolingTankCapacity: 0; } @Override - public boolean allowFluid(ItemStack container, FluidStack fluid) + public boolean allowFluid(ItemStack stack, FluidStack fluid) { - return getUpgrades(container).hasKey("water_cooling")&&MachinegunCoolantHandler.isValidCoolant(fluid); + return hasIIUpgrade(stack, WeaponUpgrade.WATER_COOLING)&&MachinegunCoolantHandler.isValidCoolant(fluid); } @SideOnly(Side.CLIENT) @Nullable @Override - public FontRenderer getFontRenderer(ItemStack stack) + public FontRenderer getFontRenderer(@Nonnull ItemStack stack) { return IIClientUtils.fontRegular; } + //--- ISkinnable ---// + @Override public String getSkinnableName() { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIMortar.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIMortar.java index 93d08ab5e..d83300ce5 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIMortar.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIMortar.java @@ -1,31 +1,29 @@ package pl.pabilo8.immersiveintelligence.common.item.weapons; -import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.ItemMonsterPlacer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; -import net.minecraft.util.SoundCategory; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMortar; +import pl.pabilo8.immersiveintelligence.common.entity.mounted_weapon.EntityMortar; import pl.pabilo8.immersiveintelligence.common.util.item.IICategory; import pl.pabilo8.immersiveintelligence.common.util.item.IIItemEnum.IIItemProperties; +import pl.pabilo8.immersiveintelligence.common.util.item.IItemEntityPlacer; import pl.pabilo8.immersiveintelligence.common.util.item.ItemIIBase; -import java.util.List; +import javax.annotation.Nonnull; /** * @author Pabilo8 (pabilo@iiteam.net) + * @updated 23.05.2026 + * @ii-approved 0.3.1 * @since 23.01.2021 */ @IIItemProperties(category = IICategory.WARFARE) -public class ItemIIMortar extends ItemIIBase +public class ItemIIMortar extends ItemIIBase implements IItemEntityPlacer { public ItemIIMortar() { @@ -35,60 +33,27 @@ public ItemIIMortar() /** * Called when a Block is right-clicked with this Item */ - public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + @Nonnull + public EnumActionResult onItemUse(@Nonnull EntityPlayer player, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull EnumHand hand, @Nonnull EnumFacing facing, + float hitX, float hitY, float hitZ) { - if(facing==EnumFacing.DOWN) - { - return EnumActionResult.FAIL; - } - else - { - boolean flag = worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos); - BlockPos blockpos = flag?pos: pos.offset(facing); - ItemStack itemstack = player.getHeldItem(hand); - - if(!player.canPlayerEdit(blockpos, facing, itemstack)) - { - return EnumActionResult.FAIL; - } - else - { - BlockPos blockpos1 = blockpos.up(); - boolean flag1 = !worldIn.isAirBlock(blockpos)&&!worldIn.getBlockState(blockpos).getBlock().isReplaceable(worldIn, blockpos); - flag1 = flag1|(!worldIn.isAirBlock(blockpos1)&&!worldIn.getBlockState(blockpos1).getBlock().isReplaceable(worldIn, blockpos1)); + return IItemEntityPlacer.super.onItemUse(player, world, pos, hand, facing, hitX, hitY, hitZ); + } - if(flag1) - { - return EnumActionResult.FAIL; - } - else - { - double d0 = blockpos.getX(); - double d1 = blockpos.getY(); - double d2 = blockpos.getZ(); - List list = worldIn.getEntitiesWithinAABBExcludingEntity(null, new AxisAlignedBB(d0, d1, d2, d0+1.0D, d1+2.0D, d2+1.0D)); + @Nonnull + @Override + public AxisAlignedBB getPlacedSpace(BlockPos pos) + { + return new AxisAlignedBB(pos).expand(0, 0.5, 0); + } - if(!list.isEmpty()) - { - return EnumActionResult.FAIL; - } - else - { - if(!worldIn.isRemote) - { - worldIn.setBlockToAir(blockpos); - worldIn.setBlockToAir(blockpos1); - EntityMortar mortar = new EntityMortar(worldIn); - mortar.setLocationAndAngles(d0+0.5D, d1, d2+0.5D, MathHelper.wrapDegrees(player.rotationYaw), -80f); - ItemMonsterPlacer.applyItemEntityDataToEntity(worldIn, player, itemstack, mortar); - worldIn.spawnEntity(mortar); - worldIn.playSound(null, mortar.posX, mortar.posY, mortar.posZ, SoundEvents.ENTITY_ARMORSTAND_PLACE, SoundCategory.BLOCKS, 0.75F, 0.8F); - } - itemstack.shrink(1); - return EnumActionResult.SUCCESS; - } - } - } - } + @Nonnull + @Override + public EntityMortar getPlacedEntity(World world, double x, double y, double z, ItemStack stack, float playerYaw, float playerPitch) + { + EntityMortar mortar = new EntityMortar(world); + mortar.setPosition(x, y, z); + mortar.aim.withCenterYaw(playerYaw); + return mortar; } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIRifle.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIRifle.java index 7898aa8cb..da54f6691 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIRifle.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIRifle.java @@ -11,7 +11,7 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; -import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoomTool; +import pl.pabilo8.immersiveintelligence.api.utils.tools.IAdvancedZoom; import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Weapons.Rifle; import pl.pabilo8.immersiveintelligence.common.IIContent; import pl.pabilo8.immersiveintelligence.common.IISounds; @@ -32,7 +32,7 @@ * @since 01.11.2019 */ @IIItemProperties(category = IICategory.WARFARE) -public class ItemIIRifle extends ItemIIGunBase implements IAdvancedZoomTool +public class ItemIIRifle extends ItemIIGunBase implements IAdvancedZoom { //--- NBT Values Reference ---// public static final String HANDMADE = "handmade"; diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIWeaponUpgrade.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIWeaponUpgrade.java index 7d669d612..84ef3bf17 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIWeaponUpgrade.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/item/weapons/ItemIIWeaponUpgrade.java @@ -254,11 +254,7 @@ public enum WeaponUpgrade implements IIItemEnum SCOPE(new WeaponType[]{WeaponType.MACHINEGUN, WeaponType.AUTOREVOLVER, WeaponType.ASSAULT_RIFLE, WeaponType.RIFLE}, "infrared_scope"), //Allows nightvision + 2 x magnification, uses energy from player's backpack INFRARED_SCOPE(new WeaponType[]{WeaponType.MACHINEGUN, WeaponType.ASSAULT_RIFLE}, - (stack, nbt) -> { - //Assault Rifle - if(stack.getItem() instanceof ItemIIGunBase) - nbt.setBoolean("energy", true); - }, + (stack, nbt) -> nbt.setBoolean("energy_upgraded", true), "scope"), //Deflects projectiles SHIELD(WeaponType.MACHINEGUN), diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/network/IIPacketHandler.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/network/IIPacketHandler.java index dbf765bab..3161ed5d9 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/network/IIPacketHandler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/network/IIPacketHandler.java @@ -48,7 +48,6 @@ public static void preInit() registerMessage(MessageFireworks.class, true, false); registerMessage(MessageRotaryPowerSync.class, true, false); registerMessage(MessageBlockDamageSync.class, true, false); - registerMessage(MessagePlayerAimAnimationSync.class, true, false); registerMessage(MessageItemKeybind.class, true, true); registerMessage(MessageExplosion.class, true, false); registerMessage(MessageParticleEffect.class, true, false); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessageBeginMachineUpgrade.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessageBeginMachineUpgrade.java index e9731e06a..bc2f9c382 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessageBeginMachineUpgrade.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessageBeginMachineUpgrade.java @@ -24,10 +24,12 @@ import pl.pabilo8.immersiveintelligence.common.network.IIMessage; import pl.pabilo8.immersiveintelligence.common.util.ResLoc; +import javax.annotation.Nullable; + public class MessageBeginMachineUpgrade extends IIMessage implements IPositionBoundMessage { private Upgrade upgrade; - private int installingUserID; + private int installingUserID, upgradedEntityID = -1; private World world; private BlockPos pos; private boolean install; @@ -35,8 +37,19 @@ public class MessageBeginMachineUpgrade extends IIMessage implements IPositionBo public MessageBeginMachineUpgrade(TileEntity tile, Upgrade upgrade, Entity user, boolean install) { this.installingUserID = user.getEntityId(); + this.install = install; this.pos = tile.getPos(); + this.world = tile.getWorld(); + this.upgrade = upgrade; + } + + public MessageBeginMachineUpgrade(Entity upgradedEntity, Upgrade upgrade, Entity user, boolean install) + { + this.installingUserID = user.getEntityId(); + this.upgradedEntityID = upgradedEntity.getEntityId(); this.install = install; + this.pos = upgradedEntity.getPosition(); + this.world = upgradedEntity.getEntityWorld(); this.upgrade = upgrade; } @@ -52,11 +65,10 @@ protected void onServerReceive(WorldServer world, NetHandlerPlayServer handler) if(!(entity instanceof EntityLivingBase)||!world.isBlockLoaded(this.pos)) return; - TileEntity tile = world.getTileEntity(this.pos); - if(!(tile instanceof IUpgradableDevice)) + IUpgradableDevice machine = getDevice(world); + if(machine==null) return; - IUpgradableDevice machine = (IUpgradableDevice)tile; if(!this.install) machine.removeUpgrade(upgrade); else if(machine.addUpgrade(upgrade, UpgradeOperation.PROBE)) @@ -65,7 +77,7 @@ else if(machine.addUpgrade(upgrade, UpgradeOperation.PROBE)) if(capability==null) return; - //check if ingredients are sufficient + //check if player has the necessary items to install the upgrade if(!(entity instanceof EntityPlayer&&((EntityPlayer)entity).isCreative())) for(IngredientStack requiredStack : upgrade.getRequiredStacks()) { @@ -94,11 +106,9 @@ protected void onClientReceive(WorldClient world, NetHandlerPlayClient handler) { if(world!=null) // This can happen if the task is scheduled right before leaving the world { - TileEntity tile = world.getTileEntity(this.pos); - if(!(tile instanceof IUpgradableDevice)) + IUpgradableDevice machine = getDevice(world); + if(machine==null) return; - IUpgradableDevice machine = (IUpgradableDevice)tile; - if(!install) machine.removeUpgrade(upgrade); else @@ -106,10 +116,29 @@ protected void onClientReceive(WorldClient world, NetHandlerPlayClient handler) } } + private @Nullable IUpgradableDevice getDevice(World world) + { + if(this.upgradedEntityID!=-1) + { + Entity entity = world.getEntityByID(this.upgradedEntityID); + if(!(entity instanceof IUpgradableDevice)) + return null; + return (IUpgradableDevice)entity; + } + else + { + TileEntity tile = world.getTileEntity(this.pos); + if(!(tile instanceof IUpgradableDevice)) + return null; + return (IUpgradableDevice)tile; + } + } + @Override public void fromBytes(ByteBuf buf) { this.installingUserID = buf.readInt(); + this.upgradedEntityID = buf.readInt(); this.pos = readPos(buf); this.install = buf.readBoolean(); this.upgrade = Upgrade.getUpgradeByID(ResLoc.of(readString(buf))); @@ -119,6 +148,7 @@ public void fromBytes(ByteBuf buf) public void toBytes(ByteBuf buf) { buf.writeInt(installingUserID); + buf.writeInt(upgradedEntityID); writePos(buf, pos); buf.writeBoolean(install); writeString(buf, upgrade.getId().toString()); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessageEntityNBTSync.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessageEntityNBTSync.java index 8b217c29f..3141a6acb 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessageEntityNBTSync.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessageEntityNBTSync.java @@ -9,8 +9,6 @@ import net.minecraft.world.WorldServer; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMachinegun; -import pl.pabilo8.immersiveintelligence.common.entity.EntityMortar; import pl.pabilo8.immersiveintelligence.common.network.IIMessage; import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; import pl.pabilo8.immersiveintelligence.common.util.entity.ISyncNBTEntity; @@ -48,14 +46,8 @@ public MessageEntityNBTSync() protected void onServerReceive(WorldServer world, NetHandlerPlayServer handler) { Entity entity = world.getEntityByID(entityID); - if(entity instanceof ISyncNBTEntity) ((ISyncNBTEntity)entity).receiveNBTMessageServer(nbt); - //TODO: 09.07.2024 get rid of ones below - else if(entity instanceof EntityMachinegun) - ((EntityMachinegun)entity).readEntityFromNBT(nbt); - else if(entity instanceof EntityMortar) - ((EntityMortar)entity).syncKeyPress(nbt); } @SideOnly(Side.CLIENT) diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessageIITileSync.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessageIITileSync.java index f0526e8d5..60819b52f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessageIITileSync.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessageIITileSync.java @@ -8,6 +8,8 @@ import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -18,14 +20,16 @@ * @author Pabilo8 (pabilo@iiteam.net) * @since 22.09.2022 */ -public class MessageIITileSync extends IIMessage +public class MessageIITileSync extends IIMessage implements IPositionBoundMessage { + World world; BlockPos pos; NBTTagCompound nbt; public MessageIITileSync(TileEntityIEBase tile, NBTTagCompound nbt) { this.pos = tile.getPos(); + this.world = tile.getWorld(); this.nbt = nbt; } @@ -87,4 +91,16 @@ public void toBytes(ByteBuf buf) writePos(buf, pos); writeTagCompound(buf, nbt); } + + @Override + public World getWorld() + { + return world; + } + + @Override + public Vec3d getPosition() + { + return new Vec3d(pos); + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessagePlayerAimAnimationSync.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessagePlayerAimAnimationSync.java deleted file mode 100644 index 0f8cec166..000000000 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/network/messages/MessagePlayerAimAnimationSync.java +++ /dev/null @@ -1,61 +0,0 @@ -package pl.pabilo8.immersiveintelligence.common.network.messages; - -import io.netty.buffer.ByteBuf; -import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.client.network.NetHandlerPlayClient; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.network.NetHandlerPlayServer; -import net.minecraft.world.WorldServer; -import pl.pabilo8.immersiveintelligence.client.ClientEventHandler; -import pl.pabilo8.immersiveintelligence.common.network.IIMessage; - -public class MessagePlayerAimAnimationSync extends IIMessage -{ - private int entityID; - private boolean aiming; - - public MessagePlayerAimAnimationSync(Entity entity, boolean aiming) - { - this.entityID = entity.getEntityId(); - this.aiming = aiming; - } - - public MessagePlayerAimAnimationSync() - { - } - - @Override - protected void onServerReceive(WorldServer world, NetHandlerPlayServer handler) - { - - } - - @Override - protected void onClientReceive(WorldClient world, NetHandlerPlayClient handler) - { - Entity entity = world.getEntityByID(entityID); - if(entity instanceof EntityLivingBase) - if(aiming) - { - if(!ClientEventHandler.aimingPlayers.contains(entity)) - ClientEventHandler.aimingPlayers.add((EntityLivingBase)entity); - } - else - ClientEventHandler.aimingPlayers.removeIf(entityPlayer -> entityPlayer.equals(entity)); - } - - @Override - public void fromBytes(ByteBuf buf) - { - this.entityID = buf.readInt(); - this.aiming = buf.readBoolean(); - } - - @Override - public void toBytes(ByteBuf buf) - { - buf.writeInt(this.entityID); - buf.writeBoolean(aiming); - } -} \ No newline at end of file diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/FilteredFluidTank.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/FilteredFluidTank.java index 316d82743..e72379df4 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/FilteredFluidTank.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/FilteredFluidTank.java @@ -46,6 +46,14 @@ public FilteredFluidTank withOutputFilter(Predicate outputFilter) return this; } + public float getFillPercentage() + { + int cap = getCapacity(); + if(cap==0) + return 0; + return getFluidAmount()/(float)cap; + } + @Override public boolean canDrainFluidType(@Nullable FluidStack fluid) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/GunAimCoordinate.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/GunAimCoordinate.java deleted file mode 100644 index 1e6aa195b..000000000 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/GunAimCoordinate.java +++ /dev/null @@ -1,207 +0,0 @@ -package pl.pabilo8.immersiveintelligence.common.util; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; -import net.minecraftforge.common.util.INBTSerializable; -import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -/** - * Stores yaw and pitch coordinates of a gun and provides utility methods for targetting and rendering. - * - * @author Pabilo8 (pabilo@iiteam.net) - * @ii-approved 0.3.1 - * @implNote only pitch, yaw, targetPitch and targetYaw are synced to NBT, the rest is for runtime use only and not saved - * @since 24.02.2026 - */ -public class GunAimCoordinate implements INBTSerializable -{ - //Current angles - protected float pitch = 0, yaw = 0; - //Target - protected float targetPitch = 0, targetYaw = 0; - @Nonnull - protected AimCorrectionFunction aimCorrectionFunction = GunAimCoordinate::getDefaultAnglePrediction; - protected Vec3d target = Vec3d.ZERO; - //Rotation speeds - protected float aimSpeedPitch = 1, aimSpeedYaw = 1; - //Angle limits - protected float yawLimitMin = -180, yawLimitMax = 180; - protected float pitchLimitMin = -90, pitchLimitMax = 90; - - //--- Setters ---// - - public GunAimCoordinate withAimSpeed(float aimSpeedYaw, float aimSpeedPitch) - { - this.aimSpeedYaw = aimSpeedYaw; - this.aimSpeedPitch = aimSpeedPitch; - return this; - } - - public GunAimCoordinate withAimCorrectionFunction(@Nullable AimCorrectionFunction aimCorrectionFunction) - { - this.aimCorrectionFunction = aimCorrectionFunction; - return this; - } - - public GunAimCoordinate withCurrentAngles(float yaw, float pitch) - { - this.yaw = yaw; - this.pitch = pitch; - return this; - } - - public GunAimCoordinate withYawLimit(float minYawLimit, float maxYawLimit) - { - this.yawLimitMin = minYawLimit; - this.yawLimitMax = maxYawLimit; - return this; - } - - public GunAimCoordinate withPitchLimit(float minPitchLimit, float maxPitchLimit) - { - this.pitchLimitMin = minPitchLimit; - this.pitchLimitMax = maxPitchLimit; - return this; - } - - //--- Targetting ---// - - /** - * Sets the target angles - * - * @param targetYaw in degrees - * @param targetPitch in degrees - * @return whether the angle is within the limits - */ - public boolean setTarget(float targetYaw, float targetPitch) - { - //Normalize - targetYaw = MathHelper.wrapDegrees(targetYaw); - targetPitch = MathHelper.wrapDegrees(targetPitch); - //Check and only set if within the limits - if(isWithinLimits(targetYaw, targetPitch)) - { - this.targetYaw = targetYaw; - this.targetPitch = targetPitch; - this.target = IIMath.offsetPosDirection(1, this.targetYaw, this.targetPitch); - } - return false; - } - - public boolean setTarget(Vec3d shooterPos, Vec3d shooterMotion, Vec3d targetPos, Vec3d targetMotion) - { - float[] angles = aimCorrectionFunction.getAnglePrediction(shooterPos, shooterMotion, targetPos, targetMotion); - return setTarget(angles[0], angles[1]); - } - - /** - * @param yaw in degrees - * @param pitch in degrees - * @return if the given angles are within the limits - */ - public boolean isWithinLimits(float yaw, float pitch) - { - return yaw >= yawLimitMin&&yaw <= yawLimitMax&&pitch >= pitchLimitMin&&pitch <= pitchLimitMax; - } - - //--- Update ---// - - public void update() - { - //Lerp towards the target angles - this.yaw = getPitch(1f); - this.pitch = getYaw(1f); - } - - //--- NBT ---// - - @Override - public NBTTagCompound serializeNBT() - { - return EasyNBT.newNBT() - .withFloat("pitch", pitch) - .withFloat("yaw", yaw) - .withFloat("targetPitch", targetPitch) - .withFloat("targetYaw", targetYaw) - .unwrap(); - } - - @Override - public void deserializeNBT(NBTTagCompound nbt) - { - pitch = nbt.getFloat("pitch"); - yaw = nbt.getFloat("yaw"); - targetPitch = nbt.getFloat("targetPitch"); - targetYaw = nbt.getFloat("targetYaw"); - } - - //--- Utils ---// - - public float getYaw(float partialTicks) - { - if(partialTicks==0) - return yaw; - if(yaw==targetYaw) - return yaw; - return MathHelper.clamp(yaw+(partialTicks*aimSpeedYaw*Math.signum(yaw-targetYaw)), yawLimitMin, yawLimitMax); - } - - public float getYawNormalized(float partialTicks) - { - if(yawLimitMin==yawLimitMax) - return 0.5f; - return (getYaw(partialTicks)-yawLimitMin)/(yawLimitMax-yawLimitMin); - } - - public float getPitch(float partialTicks) - { - if(partialTicks==0) - return pitch; - if(pitch==targetPitch) - return pitch; - return MathHelper.clamp(pitch+(partialTicks*aimSpeedPitch*Math.signum(pitch-targetPitch)), pitchLimitMin, pitchLimitMax); - } - - public float getPitchNormalized(float partialTicks) - { - if(pitchLimitMin==pitchLimitMax) - return 0.5f; - return (getPitch(partialTicks)-pitchLimitMin)/(pitchLimitMax-pitchLimitMin); - } - - public boolean isAimed() - { - return yaw==targetYaw&&pitch==targetPitch; - } - - public boolean isAimed(float allowedInaccuracy) - { - return Math.abs(MathHelper.wrapDegrees(yaw-targetYaw)) <= allowedInaccuracy - &&Math.abs(MathHelper.wrapDegrees(pitch-targetPitch)) <= allowedInaccuracy; - } - - @FunctionalInterface - public interface AimCorrectionFunction - { - /** - * @param shooterPos position of the shooter/gun - * @param shooterMotion motion of the shooter/gun - * @param targetPos position of the target - * @param targetMotion motion of the target - * @return array of pitch and yaw in degrees - */ - float[] getAnglePrediction(Vec3d shooterPos, Vec3d shooterMotion, Vec3d targetPos, Vec3d targetMotion); - } - - private static float[] getDefaultAnglePrediction(Vec3d shooterPos, Vec3d shooterMotion, Vec3d targetPos, Vec3d targetMotion) - { - Vec3d vv = shooterPos.subtract(targetPos).add(targetMotion).normalize(); - float yy = (float)((Math.atan2(vv.x, vv.z)*180D)/3.1415927410125732D); - float pp = (float)Math.toDegrees((Math.atan2(vv.y, vv.distanceTo(new Vec3d(0, vv.y, 0))))); - return new float[]{yy, pp}; - } -} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/IIColor.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/IIColor.java index d5c51989a..c77a78d24 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/IIColor.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/IIColor.java @@ -6,6 +6,7 @@ import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import pl.pabilo8.immersiveintelligence.common.IIConfigHandler.IIConfig.Graphics; import javax.annotation.Nullable; import java.util.Arrays; @@ -444,6 +445,33 @@ public EnumDyeColor getDyeColor() return min.orElse(EnumDyeColor.BLACK); } + //--- II Paint Textures ---// + + /** + * @param hue a hue value from 0 up to {@link Graphics#dynamiclyColoredTextureVariants} + * @return A color from the paint system palette based on the hue value, with fixed saturation and brightness. + * @implNote The hue value is wrapped around the number of available variants, so it can be any integer. + */ + public static IIColor getPaintSystemColor(int hue) + { + //White is a special case, meaning an unpainted object + if(hue < 0) + return WHITE; + return IIColor.fromHSV((hue%Graphics.dynamiclyColoredTextureVariants)/((float)Graphics.dynamiclyColoredTextureVariants), 0.35f, 0.85f); + } + + /** + * @return A color from the paint system palette based on this color's hue, with fixed saturation and brightness. + */ + public IIColor constraintToPaintSystem() + { + //White is a special case, meaning an unpainted object + if(this.equals(WHITE)) + return WHITE; + float[] hsv = getHSV(); + return IIColor.fromHSV(Math.round(hsv[0]*64)/64f, 0.35f, 0.85f); + } + //--- "With" Type Methods ---// /** diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/block/BlockIIFluid.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/block/BlockIIFluid.java index d60c8ffdd..05b7e611f 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/block/BlockIIFluid.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/block/BlockIIFluid.java @@ -16,10 +16,14 @@ import net.minecraft.world.World; import net.minecraftforge.fluids.BlockFluidClassic; import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; import pl.pabilo8.immersiveintelligence.ImmersiveIntelligence; import pl.pabilo8.immersiveintelligence.api.CorrosionHandler.IAcidProtectionEquipment; import pl.pabilo8.immersiveintelligence.common.IIContent; +import pl.pabilo8.immersiveintelligence.common.entity.ammo.component.EntityGasCloud; +import javax.annotation.Nonnull; import javax.annotation.Nullable; /** @@ -30,7 +34,7 @@ */ public class BlockIIFluid extends BlockFluidClassic { - public boolean isAcid; + public boolean isAcid, isGasseous; private int flammability = 0; private int fireSpread = 0; private PotionEffect[] potionEffects; @@ -42,6 +46,7 @@ public BlockIIFluid(String name, Fluid fluid, Material material) this.setCreativeTab(IIContent.II_CREATIVE_TAB); IIContent.BLOCKS.add(this); isAcid = name.endsWith("acid"); + isGasseous = fluid.isGaseous(); } public BlockIIFluid setFlammability(int flammability, int fireSpread) @@ -57,6 +62,19 @@ public BlockIIFluid setPotionEffects(PotionEffect... potionEffects) return this; } + @Override + public int place(World world, BlockPos pos, @Nonnull FluidStack fluidStack, boolean doPlace) + { + if(isGasseous&&doPlace&&fluidStack.amount > 0) + { + FluidUtil.destroyBlockOnFluidPlacement(world, pos); + world.spawnEntity(new EntityGasCloud(world, pos.getX(), pos.getY(), pos.getZ(), fluidStack)); + return fluidStack.amount; + } + + return super.place(world, pos, fluidStack, doPlace); + } + @Override public int getFlammability(IBlockAccess world, BlockPos pos, EnumFacing face) { diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/block/BlockIITileProvider.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/block/BlockIITileProvider.java index 1a10b4cd4..7e9fbbbad 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/block/BlockIITileProvider.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/block/BlockIITileProvider.java @@ -529,7 +529,7 @@ else if(limit==2||limit==5) if(u!=null&&u.getUpgradeInstallProgress(false)==0&&!player.isSneaking()) { TileEntity master = (TileEntity)u; - player.openGui(ImmersiveIntelligence.INSTANCE, IIGUI.UPGRADE.ordinal(), master.getWorld(), master.getPos().getX(), + player.openGui(ImmersiveIntelligence.INSTANCE, IIGUI.UPGRADE_TILE.ordinal(), master.getWorld(), master.getPos().getX(), master.getPos().getY(), master.getPos().getZ()); return true; } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/diplomacy/DiplomacyHandler.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/diplomacy/DiplomacyHandler.java index 0e0f86cc4..035c66714 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/diplomacy/DiplomacyHandler.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/diplomacy/DiplomacyHandler.java @@ -110,19 +110,17 @@ public void init() UUID ieFakePlayerID = UUID.fromString("99562b85-bd1a-4ded-bb1a-c307bf0c0133"); //Create the neutral faction - if(NEUTRAL==null) - NEUTRAL = new OwnerIdentity(NEUTRAL_UUID, "Neutral") - .withMember(ieFakePlayerID, LawForm.DEFAULT.getOwnerRole()) - .withBanner(ItemBanner.makeBanner(EnumDyeColor.WHITE, null)) - .withLawForm(LawForm.COMMUNE) - .withColor(IIColor.MC_GRAY); + NEUTRAL = new OwnerIdentity(NEUTRAL_UUID, "Neutral") + .withMember(ieFakePlayerID, LawForm.DEFAULT.getOwnerRole()) + .withBanner(ItemBanner.makeBanner(EnumDyeColor.WHITE, null)) + .withLawForm(LawForm.COMMUNE) + .withColor(IIColor.MC_GRAY); //Create the global enemy faction - if(GLOBAL_ENEMY==null) - GLOBAL_ENEMY = new OwnerIdentity(GLOBAL_ENEMY_UUID, "GlobalEnemy") - .withMember(ieFakePlayerID, LawForm.DEFAULT.getOwnerRole()) - .withBanner(ItemBanner.makeBanner(EnumDyeColor.BLACK, null)) - .withColor(IIColor.MC_BLACK) - .withLawForm(LawForm.COMMISARIAT); + GLOBAL_ENEMY = new OwnerIdentity(GLOBAL_ENEMY_UUID, "GlobalEnemy") + .withMember(ieFakePlayerID, LawForm.DEFAULT.getOwnerRole()) + .withBanner(ItemBanner.makeBanner(EnumDyeColor.BLACK, null)) + .withColor(IIColor.MC_BLACK) + .withLawForm(LawForm.COMMISARIAT); //Add the default factions to the map ownerIdentities.put(NEUTRAL.getUUID(), NEUTRAL); @@ -189,7 +187,7 @@ public void cleanup() propertyTickets.clear(); pendingTickets.clear(); pendingTicketCheckTimer = 0; - NEUTRAL = GLOBAL_ENEMY = null; + //NEUTRAL = GLOBAL_ENEMY = null; } //--- Update Loop ---// diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/diplomacy/LawForm.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/diplomacy/LawForm.java index 7983e168e..330b09e64 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/diplomacy/LawForm.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/diplomacy/LawForm.java @@ -3,8 +3,8 @@ import pl.pabilo8.immersiveintelligence.common.util.ISerializableEnum; import pl.pabilo8.immersiveintelligence.common.util.diplomacy.permission.PermissionCategory; import pl.pabilo8.immersiveintelligence.common.util.diplomacy.permission.PermissionRole; -import scala.actors.threadpool.Arrays; +import java.util.Arrays; import java.util.List; import java.util.function.Supplier; @@ -224,7 +224,6 @@ public enum LawForm implements ISerializableEnum { this.startingRole = startingRole; this.ownerRole = ownerRole; - //noinspection unchecked this.roles = () -> Arrays.asList(roles); } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/easynbt/EasyNBT.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/easynbt/EasyNBT.java index 74ea2f2dd..cf75259ae 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/easynbt/EasyNBT.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/easynbt/EasyNBT.java @@ -15,7 +15,6 @@ import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.common.network.ByteBufUtils; -import net.minecraftforge.fml.relauncher.ReflectionHelper; import pl.pabilo8.immersiveintelligence.common.IILogger; import pl.pabilo8.immersiveintelligence.common.IIUtils; import pl.pabilo8.immersiveintelligence.common.util.IIColor; @@ -1283,10 +1282,13 @@ public NBTTagCompound unwrap() /** * @return the NBT Compound as Map */ - @SuppressWarnings("deprecation") public Map asMap() { - return ReflectionHelper.getPrivateValue(NBTTagCompound.class, wrapped.copy(), "tagMap"); + Set keySet = wrapped.getKeySet(); + HashMap map = new HashMap<>(); + for(String key : keySet) + map.put(key, wrapped.getTag(key)); + return map; } /** diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/easynbt/NBTSerialisation.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/easynbt/NBTSerialisation.java index da1773e68..3e60e5ba0 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/easynbt/NBTSerialisation.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/easynbt/NBTSerialisation.java @@ -7,6 +7,7 @@ import net.minecraft.util.NonNullList; import net.minecraft.util.math.Vec3d; import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import pl.pabilo8.immersiveintelligence.api.data.DataVariable; import pl.pabilo8.immersiveintelligence.api.data.IIDataTypeUtils; @@ -149,6 +150,11 @@ public static void preInit() ); registerSerializer(ItemStack.class, NBTTagCompound.class, ItemStack::serializeNBT, nbt -> new ItemStack(nbt)); + registerSerializer(FluidStack.class, NBTTagCompound.class, fluidStack -> { + NBTTagCompound nbt = new NBTTagCompound(); + fluidStack.writeToNBT(nbt); + return nbt; + }, FluidStack::loadFluidStackFromNBT); registerSerializer(UUID.class, NBTTagString.class, uuid -> new NBTTagString(uuid.toString()), diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/easynbt/TargetCoordinateReference.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/easynbt/TargetCoordinateReference.java index 6abbae5a7..7be9af58b 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/easynbt/TargetCoordinateReference.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/easynbt/TargetCoordinateReference.java @@ -12,6 +12,9 @@ import java.util.function.Supplier; /** + * Reference to either an entity or a block position target. + * Also stores optional shot limits for request-style fire missions. + * * @author Pabilo8 (pabilo@iiteam.net) * @ii-approved 0.3.1 * @since 22.02.2026 @@ -21,16 +24,24 @@ public class TargetCoordinateReference implements INBTSerializable entityReference; + private Supplier worldSupplier; private boolean shotsAreFinite = false; private int shotsRemaining = 0; public TargetCoordinateReference(Supplier worldSupplier) { + this.worldSupplier = worldSupplier; this.position = null; this.entityReference = new EntityReference<>(worldSupplier); } + public TargetCoordinateReference withWorldSupplier(Supplier worldSupplier) + { + this.worldSupplier = worldSupplier; + return this; + } + public TargetCoordinateReference withEntity(Entity entity) { this.position = null; @@ -38,6 +49,13 @@ public TargetCoordinateReference withEntity(Entity entity) return this; } + public TargetCoordinateReference withEntityID(int entityID) + { + this.position = null; + this.entityReference.deserializeNBT(new NBTTagInt(entityID)); + return this; + } + public TargetCoordinateReference withPosition(BlockPos position) { this.position = position; @@ -48,7 +66,14 @@ public TargetCoordinateReference withPosition(BlockPos position) public TargetCoordinateReference withShotLimit(int shotsRemaining) { this.shotsAreFinite = true; - this.shotsRemaining = shotsRemaining; + this.shotsRemaining = Math.max(0, shotsRemaining); + return this; + } + + public TargetCoordinateReference withInfiniteShots() + { + this.shotsAreFinite = false; + this.shotsRemaining = 0; return this; } @@ -57,7 +82,30 @@ public TargetCoordinateReference withShotLimit(int shotsRemaining) */ public boolean shouldBeExecuted() { - return !shotsAreFinite||shotsRemaining > 0; + return shouldBeExecuted(worldSupplier==null?null: worldSupplier.get()); + } + + /** + * @return whether the task should be executed or removed from memory + */ + public boolean shouldBeExecuted(@Nullable World world) + { + if(shotsAreFinite&&shotsRemaining <= 0) + return false; + + Entity entity = this.entityReference.get(); + if(entity!=null) + return !entity.isDead; + + if(position!=null) + { + //Unloaded chunks are inconclusive, not a completed mission. + if(world==null||!world.isBlockLoaded(position)) + return true; + return !world.isAirBlock(position); + } + + return false; } @Nullable @@ -65,24 +113,54 @@ public Vec3d supplyCoordinates() { Entity entity = this.entityReference.get(); if(entity!=null) - return new Vec3d(entity.posX, entity.posY, entity.posZ); - return position!=null?new Vec3d(position): null; + return new Vec3d(entity.posX, entity.posY+entity.height*0.5, entity.posZ); + return position!=null?new Vec3d(position).addVector(0.5, 0.5, 0.5): null; + } + + @Nullable + public Entity getEntity() + { + return entityReference.get(); + } + + public int getEntityID() + { + return entityReference.serializeNBT().getInt(); + } + + @Nullable + public BlockPos getPosition() + { + return position; + } + + public boolean hasFiniteShots() + { + return shotsAreFinite; + } + + public int getShotsRemaining() + { + return shotsRemaining; } /** - * Called by the weapon after a shot has been made to lower the counter + * Called by the weapon after a shot has been made to lower the counter. */ public void notifyAfterShot() { - if(shotsAreFinite) + if(shotsAreFinite&&shotsRemaining > 0) shotsRemaining--; } @Override public NBTTagCompound serializeNBT() { - EasyNBT nbt = EasyNBT.newNBT(); - if(entityReference.get()!=null) + EasyNBT nbt = EasyNBT.newNBT() + .withBoolean("shotsAreFinite", shotsAreFinite) + .withInt("shotsRemaining", shotsRemaining); + + if(entityReference.get()!=null||getEntityID()!=0) nbt.withSerializable("entity", entityReference); else if(position!=null) nbt.withPos("pos", position); @@ -93,10 +171,14 @@ else if(position!=null) public void deserializeNBT(NBTTagCompound nbt) { EasyNBT enbt = EasyNBT.wrapNBT(nbt); + this.shotsAreFinite = enbt.getBoolean("shotsAreFinite"); + this.shotsRemaining = enbt.getInt("shotsRemaining"); + if(nbt.hasKey("entity")) entityReference.deserializeNBT((NBTTagInt)nbt.getTag("entity")); else entityReference.set(null); + position = null; if(enbt.hasKey("pos")) position = enbt.getPos("pos"); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/entity/ISyncNBTEntity.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/entity/ISyncNBTEntity.java index 025a2eb3d..277fce3d9 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/entity/ISyncNBTEntity.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/entity/ISyncNBTEntity.java @@ -1,8 +1,11 @@ package pl.pabilo8.immersiveintelligence.common.util.entity; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; @@ -15,13 +18,13 @@ * @author Pabilo8 (pabilo@iiteam.net) * @since 23.12.2022 */ -public interface ISyncNBTEntity> +public interface ISyncNBTEntity> extends IEntityAdditionalSpawnData { @SuppressWarnings({"unchecked"}) default void receiveNBTMessageServer(NBTTagCompound nbt) { T tis = ((T)this); - NBTSerialisation.synchroniseFor(tis, (tag, tile) -> tag.deserializeAll(tis, nbt, true)); + NBTSerialisation.synchroniseFor(tis, (tag, entity) -> tag.deserializeAll(tis, nbt, true)); } @SideOnly(Side.CLIENT) @@ -29,19 +32,19 @@ default void receiveNBTMessageServer(NBTTagCompound nbt) default void receiveNBTMessageClient(NBTTagCompound nbt) { T tis = ((T)this); - NBTSerialisation.synchroniseFor(tis, (tag, tile) -> tag.deserializeAll(tis, nbt, true)); + NBTSerialisation.synchroniseFor(tis, (tag, entity) -> tag.deserializeAll(tis, nbt, true)); } default void readEntityFromNBT(NBTTagCompound compound) { T tis = ((T)this); - NBTSerialisation.synchroniseFor(tis, (tag, tile) -> tag.serializeAll(tis, compound)); + NBTSerialisation.synchroniseFor(tis, (tag, entity) -> tag.deserializeAll(tis, compound, false)); } default void writeEntityToNBT(NBTTagCompound compound) { T tis = ((T)this); - NBTSerialisation.synchroniseFor(tis, (tag, tile) -> tag.deserializeAll(tis, compound, false)); + NBTSerialisation.synchroniseFor(tis, (tag, entity) -> tag.serializeAll(tis, compound)); } @SuppressWarnings({"unchecked"}) @@ -50,7 +53,7 @@ default void updateEntityForTime() @SuppressWarnings({"unchecked"}) T tis = ((T)this); NBTTagCompound nbt = new NBTTagCompound(); - NBTSerialisation.synchroniseFor(tis, (tag, tile) -> tag.serializeForTime(tile, nbt, tis.ticksExisted)); + NBTSerialisation.synchroniseFor(tis, (tag, entity) -> tag.serializeForTime(entity, nbt, tis.ticksExisted)); IIPacketHandler.sendToClient(new MessageEntityNBTSync(tis, nbt)); } @@ -59,7 +62,7 @@ default void updateEntityForEvent(SyncNBT.SyncEvents event) { T tis = ((T)this); NBTTagCompound nbt = new NBTTagCompound(); - NBTSerialisation.synchroniseFor(tis, (tag, tile) -> tag.serializeForEvent(tile, nbt, event)); + NBTSerialisation.synchroniseFor(tis, (tag, entity) -> tag.serializeForEvent(entity, nbt, event)); IIPacketHandler.sendToClient(new MessageEntityNBTSync(tis, nbt)); } @@ -67,7 +70,7 @@ default void sendServerUpdateForEvent(SyncNBT.SyncEvents event) { T tis = ((T)this); NBTTagCompound nbt = new NBTTagCompound(); - NBTSerialisation.synchroniseFor(tis, (tag, tile) -> tag.serializeForEvent(tile, nbt, event)); + NBTSerialisation.synchroniseFor(tis, (tag, entity) -> tag.serializeForEvent(entity, nbt, event)); IIPacketHandler.sendToServer(new MessageEntityNBTSync(tis, nbt)); } @@ -114,4 +117,28 @@ default void receivePositionMotionUpdate(NBTTagCompound nbt) tis.rotationYaw = tis.prevRotationYaw = enbt.getFloat("rotationYaw"); tis.rotationPitch = tis.prevRotationPitch = enbt.getFloat("rotationPitch"); } + + @Override + default void writeSpawnData(ByteBuf buffer) + { + NBTTagCompound tag = new NBTTagCompound(); + writeEntityToNBT(tag); + ByteBufUtils.writeTag(buffer, tag); + } + + @Override + default void readSpawnData(ByteBuf additionalData) + { + NBTTagCompound tag = ByteBufUtils.readTag(additionalData); + if(tag!=null) + { + readEntityFromNBT(tag); + doPostWorldLoadSetup(tag); + } + } + + default void doPostWorldLoadSetup(NBTTagCompound tag) + { + + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleDurability.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/entity/SyncedDurability.java similarity index 80% rename from src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleDurability.java rename to src/main/java/pl/pabilo8/immersiveintelligence/common/util/entity/SyncedDurability.java index 084cc7ec3..c4c180a1e 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/entity/vehicle/utils/VehicleDurability.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/entity/SyncedDurability.java @@ -1,4 +1,4 @@ -package pl.pabilo8.immersiveintelligence.common.entity.vehicle.utils; +package pl.pabilo8.immersiveintelligence.common.util.entity; import net.minecraft.nbt.NBTTagInt; import net.minecraft.util.DamageSource; @@ -11,21 +11,21 @@ * @author Pabilo8 (pabilo@iiteam.net) * @since 23.12.2022 */ -public class VehicleDurability implements INBTSerializable +public class SyncedDurability implements INBTSerializable { @Nullable - private VehicleDurability parent; + private SyncedDurability parent; public final int maxDurability, armor; private int durability; - public VehicleDurability(int maxDurability, int armor) + public SyncedDurability(int maxDurability, int armor) { this.maxDurability = maxDurability; this.durability = maxDurability; this.armor = armor; } - public VehicleDurability withParent(VehicleDurability parent) + public SyncedDurability withParent(SyncedDurability parent) { this.parent = parent; return this; @@ -34,7 +34,7 @@ public VehicleDurability withParent(VehicleDurability parent) public void attackFrom(DamageSource source, float amount) { int damage = (int)Math.max(0, amount-(this.isDead()?this.armor*0.25: this.armor)); - if(durability==0&&this.parent!=null) + if(isDead()&&this.parent!=null) this.parent.attackFrom(source, damage); else this.durability = MathHelper.clamp(durability-damage, 0, maxDurability); diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gui/ContainerIIBase.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gui/ContainerIIBase.java index 7331096ee..83e064c3d 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gui/ContainerIIBase.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gui/ContainerIIBase.java @@ -2,37 +2,54 @@ import blusunrize.immersiveengineering.api.IEApi; import blusunrize.immersiveengineering.api.IEEnums.SideConfig; -import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase; -import blusunrize.immersiveengineering.common.gui.ContainerIEBase; import blusunrize.immersiveengineering.common.gui.IESlot; import blusunrize.immersiveengineering.common.gui.IESlot.FluidContainer; +import blusunrize.immersiveengineering.common.gui.IESlot.ICallbackContainer; +import blusunrize.immersiveengineering.common.util.Utils; import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; +import net.minecraft.inventory.*; import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; import pl.pabilo8.immersiveintelligence.api.crafting.DataProgrammingRecipe; import pl.pabilo8.immersiveintelligence.api.rotary.IMotorGear; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.function.Predicate; +import java.util.function.Supplier; /** + * Common Immersive Intelligence container base for TileEntity, Entity and ItemStack backed GUIs. + *

+ * It deliberately extends vanilla {@link Container} directly. Concrete specialisations are responsible + * for defining their backing object and interaction rules. + * * @author Pabilo8 (pabilo@iiteam.net) * @since 23.09.2023 */ -public class ContainerIIBase extends ContainerIEBase +public abstract class ContainerIIBase extends Container implements ICallbackContainer { + protected final InventoryPlayer inventoryPlayer; + @Nullable + public IInventory inv; + public int slotCount; public Slot[] playerInventory = new Slot[0]; - public ContainerIIBase(EntityPlayer player, T tile) + protected ContainerIIBase(InventoryPlayer inventoryPlayer) { - super(player.inventory, tile); - this.slotCount = tile.getInventory().size(); - this.tile = tile; + this.inventoryPlayer = inventoryPlayer; + } + + protected ContainerIIBase(InventoryPlayer inventoryPlayer, @Nullable IInventory inv, int slotCount) + { + this.inventoryPlayer = inventoryPlayer; + this.inv = inv; + this.slotCount = slotCount; } public Slot[] addPlayerInventory(InventoryPlayer inventoryPlayer, int x, int y) @@ -46,17 +63,34 @@ public Slot[] addPlayerInventory(InventoryPlayer inventoryPlayer, int x, int y) return playerInventory; } - protected DefaultInputSlot addSlot(int x, int y, int index) + protected Slot addSlot(int x, int y, int index) { + if(inv==null) + throw new IllegalStateException(getClass().getSimpleName()+" has no IInventory-backed inventory"); return addSlot(x, y, index, DefaultInputSlot::new); } @SuppressWarnings("unchecked") protected SLOT addSlot(int x, int y, int index, SlotConstructor aNew) { + if(inv==null) + throw new IllegalStateException(getClass().getSimpleName()+" has no IInventory-backed inventory"); return (SLOT)addSlotToContainer(aNew.construct(this, this.inv, index, x, y)); } + protected Slot[] addSlotArray(int x, int y, int startIndex, int totalSlots, int slotsPerRow) + { + return addSlotArray(x, y, startIndex, totalSlots, slotsPerRow, 18); + } + + protected Slot[] addSlotArray(int x, int y, int startIndex, int totalSlots, int slotsPerRow, int slotDistance) + { + ArrayList slots = new ArrayList<>(); + for(int i = 0; i < totalSlots; i++) + slots.add(this.addSlot(x+i%slotsPerRow*slotDistance, y+i/slotsPerRow*slotDistance, i+startIndex)); + return slots.toArray(new Slot[0]); + } + protected Slot[] addSlotArray(int x, int y, int startIndex, int totalSlots, int slotsPerRow, SlotConstructor aNew) { return addSlotArray(x, y, startIndex, totalSlots, slotsPerRow, 18, aNew); @@ -70,6 +104,14 @@ protected Slot[] addSlotArray(int x, int y, int startIndex, return slots.toArray(new Slot[0]); } + protected Slot[] addVirtualSlots(int startIndex, int totalSlots) + { + ArrayList slots = new ArrayList<>(); + for(int i = 0; i < totalSlots; i++) + slots.add(this.addSlot(-32, -32, i+startIndex)); + return slots.toArray(new Slot[0]); + } + protected Slot[] addVirtualSlots(int startIndex, int totalSlots, SlotConstructor aNew) { ArrayList slots = new ArrayList<>(); @@ -78,6 +120,103 @@ protected Slot[] addVirtualSlots(int startIndex, int totalSl return slots.toArray(new Slot[0]); } + protected boolean isStackValid(int slot, ItemStack stack) + { + return inv==null||inv.isItemValidForSlot(slot, stack); + } + + protected int getSlotLimit(int slot) + { + return inv==null?64: inv.getInventoryStackLimit(); + } + + @Override + public boolean canInsert(ItemStack stack, int slotNumer, Slot slotObject) + { + return true; + } + + @Override + public boolean canTake(ItemStack stack, int slotNumer, Slot slotObject) + { + return true; + } + + @Nonnull + @Override + public ItemStack slotClick(int id, int button, ClickType clickType, EntityPlayer player) + { + Slot slot = id < 0||id >= this.inventorySlots.size()?null: this.inventorySlots.get(id); + if(!(slot instanceof IESlot.Ghost)) + return super.slotClick(id, button, clickType, player); + + ItemStack stack = ItemStack.EMPTY; + ItemStack stackSlot = slot.getStack(); + if(!stackSlot.isEmpty()) + stack = stackSlot.copy(); + + if(button==2) + slot.putStack(ItemStack.EMPTY); + else if(button==0||button==1) + { + ItemStack stackHeld = player.inventory.getItemStack(); + if(stackSlot.isEmpty()) + { + if(!stackHeld.isEmpty()&&slot.isItemValid(stackHeld)) + slot.putStack(Utils.copyStackWithAmount(stackHeld, 1)); + } + else if(stackHeld.isEmpty()) + slot.putStack(ItemStack.EMPTY); + else if(slot.isItemValid(stackHeld)) + slot.putStack(Utils.copyStackWithAmount(stackHeld, 1)); + } + else if(button==5) + { + ItemStack stackHeld = player.inventory.getItemStack(); + if(!slot.getHasStack()&&!stackHeld.isEmpty()&&slot.isItemValid(stackHeld)) + slot.putStack(Utils.copyStackWithAmount(stackHeld, 1)); + } + return stack; + } + + @Nonnull + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slot) + { + ItemStack stack = ItemStack.EMPTY; + Slot slotObject = this.inventorySlots.get(slot); + if(slotObject!=null&&slotObject.getHasStack()) + { + ItemStack stackInSlot = slotObject.getStack(); + stack = stackInSlot.copy(); + if(slot < slotCount) + { + if(!this.mergeItemStack(stackInSlot, slotCount, this.inventorySlots.size(), true)) + return ItemStack.EMPTY; + } + else if(!this.mergeItemStack(stackInSlot, 0, slotCount, false)) + return ItemStack.EMPTY; + + if(stackInSlot.isEmpty()) + slotObject.putStack(ItemStack.EMPTY); + else + slotObject.onSlotChanged(); + + if(stackInSlot.getCount()==stack.getCount()) + return ItemStack.EMPTY; + slotObject.onTake(player, stackInSlot); + } + return stack; + } + + @Override + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + if(inv!=null) + this.inv.closeInventory(playerIn); + } + /** * Functional interface for {@link Slot} constructors to create them in batch. * @@ -133,7 +272,13 @@ public class DefaultInputSlot extends IISlot public DefaultInputSlot(Container container, IInventory inv, int id, int x, int y) { super(container, inv, id, x, y); - withFilter(stack -> tile.isStackValid(getSlotIndex(), stack)); + withFilter(stack -> ContainerIIBase.this.isStackValid(getSlotIndex(), stack)); + } + + @Override + public int getSlotStackLimit() + { + return ContainerIIBase.this.getSlotLimit(getSlotIndex()); } } @@ -178,4 +323,158 @@ public static SlotConstructor getFluidContainerSlot(SideConfig m int filter = mode==SideConfig.NONE?0: (mode==SideConfig.INPUT?2: 1); return (container, inv1, id, x, y) -> new FluidContainer(container, inv1, id, x, y, filter); } + + protected static class InventoryIIEInventory implements IInventory + { + protected final T source; + protected final Supplier displayName; + protected final Predicate usabilityCheck; + + public InventoryIIEInventory(T source, Supplier displayName, Predicate usabilityCheck) + { + this.source = source; + this.displayName = displayName; + this.usabilityCheck = usabilityCheck; + } + + @Override + public int getSizeInventory() + { + return source.getInventory().size(); + } + + @Override + public boolean isEmpty() + { + for(ItemStack stack : source.getInventory()) + if(!stack.isEmpty()) + return false; + return true; + } + + @Nonnull + @Override + public ItemStack getStackInSlot(int index) + { + return source.getInventory().get(index); + } + + @Nonnull + @Override + public ItemStack decrStackSize(int index, int count) + { + ItemStack stack = ItemStackHelper.getAndSplit(source.getInventory(), index, count); + if(!stack.isEmpty()) + { + source.doGraphicalUpdates(index); + markDirty(); + } + return stack; + } + + @Nonnull + @Override + public ItemStack removeStackFromSlot(int index) + { + ItemStack stack = ItemStackHelper.getAndRemove(source.getInventory(), index); + if(!stack.isEmpty()) + { + source.doGraphicalUpdates(index); + markDirty(); + } + return stack; + } + + @Override + public void setInventorySlotContents(int index, @Nonnull ItemStack stack) + { + source.getInventory().set(index, stack); + if(stack.getCount() > getInventoryStackLimit()) + stack.setCount(getInventoryStackLimit()); + source.doGraphicalUpdates(index); + markDirty(); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public void markDirty() + { + + } + + @Override + public boolean isUsableByPlayer(@Nonnull EntityPlayer player) + { + return usabilityCheck.test(player); + } + + @Override + public void openInventory(@Nonnull EntityPlayer player) + { + + } + + @Override + public void closeInventory(@Nonnull EntityPlayer player) + { + + } + + @Override + public boolean isItemValidForSlot(int index, @Nonnull ItemStack stack) + { + return source.isStackValid(index, stack); + } + + @Override + public int getField(int id) + { + return 0; + } + + @Override + public void setField(int id, int value) + { + + } + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clear() + { + NonNullList inventory = source.getInventory(); + for(int i = 0; i < inventory.size(); i++) + setInventorySlotContents(i, ItemStack.EMPTY); + } + + @Override + public String getName() + { + return getDisplayName().getUnformattedText(); + } + + @Override + public boolean hasCustomName() + { + return false; + } + + @Nonnull + @Override + public ITextComponent getDisplayName() + { + ITextComponent name = displayName.get(); + return name==null?new TextComponentString(""): name; + } + } } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gui/ContainerIIEntityBase.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gui/ContainerIIEntityBase.java new file mode 100644 index 000000000..d623c6388 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gui/ContainerIIEntityBase.java @@ -0,0 +1,47 @@ +package pl.pabilo8.immersiveintelligence.common.util.gui; + +import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +/** + * Entity-backed II container base for entities that expose an {@link IIEInventory}. + * + * @param entity type + */ +public abstract class ContainerIIEntityBase extends ContainerIIBase +{ + public final E entity; + + public ContainerIIEntityBase(EntityPlayer player, E entity) + { + super(player.inventory, new InventoryIIEInventory<>(entity, entity::getDisplayName, entityPlayer -> + !entity.isDead&&entityPlayer.getDistanceSq(entity.posX, entity.posY, entity.posZ) <= 64.0D + ), entity.getInventory().size()); + this.entity = entity; + } + + @Override + public boolean canInteractWith(EntityPlayer player) + { + return inv!=null&&inv.isUsableByPlayer(player); + } + + @Override + protected boolean isStackValid(int slot, ItemStack stack) + { + return entity.isStackValid(slot, stack); + } + + @Override + protected int getSlotLimit(int slot) + { + return entity.getSlotLimit(slot); + } + + public E getEntity() + { + return entity; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gui/ContainerIIItemBase.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gui/ContainerIIItemBase.java new file mode 100644 index 000000000..cf387db66 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gui/ContainerIIItemBase.java @@ -0,0 +1,210 @@ +package pl.pabilo8.immersiveintelligence.common.util.gui; + +import blusunrize.immersiveengineering.common.gui.IESlot.ContainerCallback; +import blusunrize.immersiveengineering.common.gui.IESlot.ICallbackContainer; +import blusunrize.immersiveengineering.common.util.Utils; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ClickType; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import pl.pabilo8.immersiveintelligence.common.util.item.IIItemStackHandler; + +import javax.annotation.Nonnull; + +/** + * ItemStack-backed II container base. + */ +public abstract class ContainerIIItemBase extends ContainerIIBase implements ICallbackContainer +{ + protected final World world; + protected final EntityEquipmentSlot equipmentSlot; + protected final ItemStack heldItem; + protected final EntityPlayer player; + public final IItemHandler itemHandler; + /** + * Kept as the short legacy field name because existing item containers usually reference {@code inv} directly. + */ + public final IItemHandler inv; + public int internalSlots; + protected int blockedSlot; + + public ContainerIIItemBase(EntityPlayer player, ItemStack heldStack, EnumHand hand) + { + super(player.inventory); + this.player = player; + this.world = player.world; + this.equipmentSlot = hand==EnumHand.MAIN_HAND?EntityEquipmentSlot.MAINHAND: EntityEquipmentSlot.OFFHAND; + this.heldItem = heldStack.copy(); + + this.itemHandler = heldStack.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); + this.inv = this.itemHandler; + if(inv instanceof IIItemStackHandler) + ((IIItemStackHandler)inv).setInventoryForUpdate(inventoryPlayer); + updateSlots(); + } + + protected void updateSlots() + { + if(inv==null) + return; + this.internalSlots = this.addSlots(0); + this.slotCount = this.internalSlots; + this.blockedSlot = this.inventoryPlayer.currentItem+27+internalSlots; + } + + protected abstract int addSlots(int i); + + @Override + protected Slot addSlot(int x, int y, int index) + { + return addItemSlot(x, y, index, (container, inv1, id, x1, y1) -> + new ContainerCallback((Container)container, inv1, id, x1, y1)); + } + + @SuppressWarnings("unchecked") + protected SLOT addItemSlot(int x, int y, int index, ItemSlotConstructor aNew) + { + if(inv==null) + throw new IllegalStateException(getClass().getSimpleName()+" has no item handler inventory"); + return (SLOT)addSlotToContainer(aNew.construct(this, this.inv, index, x, y)); + } + + protected Slot[] addItemSlotArray(int x, int y, int startIndex, int totalSlots, int slotsPerRow, ItemSlotConstructor aNew) + { + return addItemSlotArray(x, y, startIndex, totalSlots, slotsPerRow, 18, aNew); + } + + protected Slot[] addItemSlotArray(int x, int y, int startIndex, int totalSlots, int slotsPerRow, int slotDistance, ItemSlotConstructor aNew) + { + java.util.ArrayList slots = new java.util.ArrayList<>(); + for(int i = 0; i < totalSlots; i++) + slots.add(this.addItemSlot(x+i%slotsPerRow*slotDistance, y+i/slotsPerRow*slotDistance, i+startIndex, aNew)); + return slots.toArray(new Slot[0]); + } + + protected Slot[] addVirtualItemSlots(int startIndex, int totalSlots, ItemSlotConstructor aNew) + { + java.util.ArrayList slots = new java.util.ArrayList<>(); + for(int i = 0; i < totalSlots; i++) + slots.add(this.addItemSlot(-32, -32, i+startIndex, aNew)); + return slots.toArray(new Slot[0]); + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the item inventory. + */ + @Nonnull + @Override + public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int slot) + { + ItemStack oldStackInSlot = ItemStack.EMPTY; + Slot slotObject = inventorySlots.get(slot); + + if(slotObject!=null&&slotObject.getHasStack()) + { + ItemStack stackInSlot = slotObject.getStack(); + oldStackInSlot = stackInSlot.copy(); + + if(slot < internalSlots) + { + if(!this.mergeItemStack(stackInSlot, internalSlots, internalSlots+36, true)) + return ItemStack.EMPTY; + } + else if(allowShiftclicking()&&!stackInSlot.isEmpty()) + { + boolean untouched = true; + for(int i = 0; i < internalSlots; i++) + { + Slot targetSlot = inventorySlots.get(i); + if(targetSlot!=null&&targetSlot.isItemValid(stackInSlot)) + { + if(!targetSlot.getStack().isEmpty()&&(!ItemStack.areItemsEqual(stackInSlot, targetSlot.getStack())||!Utils.compareItemNBT(stackInSlot, targetSlot.getStack()))) + continue; + int space = Math.min(targetSlot.getItemStackLimit(stackInSlot), stackInSlot.getMaxStackSize()); + if(!targetSlot.getStack().isEmpty()) + space -= targetSlot.getStack().getCount(); + if(space <= 0) + continue; + ItemStack insert = stackInSlot; + if(space < stackInSlot.getCount()) + insert = stackInSlot.splitStack(space); + if(this.mergeItemStack(insert, i, i+1, true)) + untouched = false; + } + } + if(untouched) + return ItemStack.EMPTY; + } + + if(stackInSlot.getCount()==0) + slotObject.putStack(ItemStack.EMPTY); + else + slotObject.onSlotChanged(); + + slotObject.inventory.markDirty(); + if(stackInSlot.getCount()==oldStackInSlot.getCount()) + return ItemStack.EMPTY; + slotObject.onTake(player, oldStackInSlot); + + updatePlayerItem(false); + detectAndSendChanges(); + } + return oldStackInSlot; + } + + protected boolean allowShiftclicking() + { + return true; + } + + @Override + public boolean canInteractWith(@Nonnull EntityPlayer entityplayer) + { + return ItemStack.areItemsEqual(player.getItemStackFromSlot(equipmentSlot), heldItem); + } + + @Override + public boolean canInsert(ItemStack stack, int slotNumer, Slot slotObject) + { + return inv==null||inv.isItemValid(slotNumer, stack); + } + + @Nonnull + @Override + public ItemStack slotClick(int par1, int par2, ClickType par3, EntityPlayer par4EntityPlayer) + { + if(par1==this.blockedSlot||(par3==ClickType.SWAP&&par2==par4EntityPlayer.inventory.currentItem)) + return ItemStack.EMPTY; + ItemStack ret = super.slotClick(par1, par2, par3, par4EntityPlayer); + updatePlayerItem(false); + return ret; + } + + @Override + public void onContainerClosed(EntityPlayer par1EntityPlayer) + { + super.onContainerClosed(par1EntityPlayer); + if(inv instanceof IIItemStackHandler) + ((IIItemStackHandler)inv).setInventoryForUpdate(null); + if(!world.isRemote) + updatePlayerItem(true); + } + + protected void updatePlayerItem(boolean closing) + { + + } + + @FunctionalInterface + public interface ItemSlotConstructor + { + SLOT construct(ICallbackContainer container, IItemHandler inv, int id, int x, int y); + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gui/ContainerIITileBase.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gui/ContainerIITileBase.java new file mode 100644 index 000000000..460754cbc --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gui/ContainerIITileBase.java @@ -0,0 +1,56 @@ +package pl.pabilo8.immersiveintelligence.common.util.gui; + +import blusunrize.immersiveengineering.common.blocks.TileEntityIEBase; +import blusunrize.immersiveengineering.common.util.inventory.IIEInventory; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +/** + * TileEntity-backed II container base. + * + * @param tile type + */ +public class ContainerIITileBase extends ContainerIIBase +{ + public final T tile; + + public ContainerIITileBase(EntityPlayer player, T tile) + { + super(player.inventory, new InventoryIIEInventory(tile, tile::getDisplayName, entityPlayer -> + tile.hasWorld() + &&tile.getWorld().getTileEntity(tile.getPos())==tile + &&entityPlayer.getDistanceSq(tile.getPos().getX()+0.5D, tile.getPos().getY()+0.5D, tile.getPos().getZ()+0.5D) <= 64.0D + ) + { + @Override + public void markDirty() + { + tile.markDirty(); + } + }, tile.getInventory().size()); + this.tile = tile; + } + + @Override + public boolean canInteractWith(EntityPlayer player) + { + return inv!=null&&inv.isUsableByPlayer(player); + } + + @Override + protected boolean isStackValid(int slot, ItemStack stack) + { + return tile.isStackValid(slot, stack); + } + + @Override + protected int getSlotLimit(int slot) + { + return tile.getSlotLimit(slot); + } + + public T getTile() + { + return tile; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/GunAimCoordinate.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/GunAimCoordinate.java new file mode 100644 index 000000000..ab2917669 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/GunAimCoordinate.java @@ -0,0 +1,421 @@ +package pl.pabilo8.immersiveintelligence.common.util.gun; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.common.util.INBTSerializable; +import pl.pabilo8.immersiveintelligence.common.util.IIMath; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; + +import javax.annotation.Nonnull; + +/** + * Stores yaw and pitch coordinates of a gun and provides utility methods for targetting and rendering. + * + * @author Pabilo8 (pabilo@iiteam.net) + * @ii-approved 0.3.1 + * @implNote only pitch, yaw, targetPitch, targetYaw and centerYaw are synced to NBT, the rest is for runtime use only and not saved + * @since 24.02.2026 + */ +public class GunAimCoordinate implements INBTSerializable +{ + private static final float MINIMAL = 0.05f; + protected float pitch = 0, yaw = 0; + //Target + protected float targetPitch = 0, targetYaw = 0; + protected float centerYaw = 0; + + @Nonnull + protected AimCorrectionFunction aimCorrectionFunction = GunAimCoordinate::getTargetLead; + protected Vec3d target = Vec3d.ZERO; + //Rotation speeds + protected float aimSpeedPitch = 1, aimSpeedYaw = 1; + //Angle limits relative to centerYaw + protected float yawLimitMin = -180, yawLimitMax = 180; + protected float pitchLimitMin = -90, pitchLimitMax = 90; + + //--- Setters --- // + + public GunAimCoordinate withAimSpeed(float aimSpeedYaw, float aimSpeedPitch) + { + this.aimSpeedYaw = aimSpeedYaw; + this.aimSpeedPitch = aimSpeedPitch; + return this; + } + + public GunAimCoordinate withAimCorrectionFunction(@Nonnull AimCorrectionFunction aimCorrectionFunction) + { + this.aimCorrectionFunction = aimCorrectionFunction; + return this; + } + + /** + * Sets the current absolute yaw/pitch and also initialises the target to the same values. + * The angles are clamped to the yaw limits (relative to {@link #centerYaw}) and the pitch limits. + */ + public GunAimCoordinate withCurrentAngles(float yaw, float pitch) + { + this.yaw = this.targetYaw = clampYawToRange(yaw); + this.pitch = this.targetPitch = MathHelper.clamp(pitch, this.pitchLimitMin, this.pitchLimitMax); + return this; + } + + /** + * Sets the hull (center) yaw. All stored absolute yaw values are re‑clamped to the new center. + */ + public GunAimCoordinate withCenterYaw(float centerYaw) + { + this.centerYaw = centerYaw; + this.yaw = clampYawToRange(this.yaw); + this.targetYaw = clampYawToRange(this.targetYaw); + return this; + } + + /** + * Sets the yaw limits (relative to {@link #centerYaw}). + * + * @param minYawLimit minimum relative yaw (degrees, in range -180…180) + * @param maxYawLimit maximum relative yaw (degrees, in range -180…180) + * If {@code minYawLimit <= maxYawLimit} the allowed range is the closed interval [min, max]. + * If {@code minYawLimit > maxYawLimit} the allowed range is the complement, + * i.e. [min, 180) ∪ (-180, max]. + */ + public GunAimCoordinate withYawLimit(float minYawLimit, float maxYawLimit) + { + this.yawLimitMin = minYawLimit; + this.yawLimitMax = maxYawLimit; + //Re‑clamp current and target values to the new limits + this.targetYaw = clampYawToRange(this.targetYaw); + this.yaw = clampYawToRange(this.yaw); + return this; + } + + public GunAimCoordinate withPitchLimit(float minPitchLimit, float maxPitchLimit) + { + this.pitchLimitMin = Math.min(minPitchLimit, maxPitchLimit); + this.pitchLimitMax = Math.max(minPitchLimit, maxPitchLimit); + this.targetPitch = MathHelper.clamp(this.pitch, this.pitchLimitMin, this.pitchLimitMax); + this.pitch = MathHelper.clamp(this.pitch, this.pitchLimitMin, this.pitchLimitMax); + return this; + } + + //--- Targeting --- // + + /** + * Sets the target absolute yaw and pitch. The target will be rejected if outside limits. + * + * @param targetYaw absolute yaw in degrees + * @param targetPitch absolute pitch in degrees + * @return whether the yaw (relative to {@link #centerYaw}) is within the yaw limits + * and the pitch within its absolute limits. + */ + public boolean setTarget(float targetYaw, float targetPitch) + { + targetYaw = MathHelper.wrapDegrees(targetYaw); + targetPitch = MathHelper.wrapDegrees(targetPitch); + + if(isWithinLimits(targetYaw, targetPitch)) + { + this.targetYaw = targetYaw; + this.targetPitch = targetPitch; + this.target = IIMath.offsetPosDirection(1, this.targetYaw, this.targetPitch); + return true; + } + return false; + } + + /** + * Sets the target absolute yaw and pitch, clamping the target to allowed limits + * + * @param targetYaw absolute yaw in degrees + * @param targetPitch absolute pitch in degrees + * @return always true (the target is set to the clamped values) + */ + public boolean setTargetClamped(float targetYaw, float targetPitch) + { + return setTarget(clampYawToRange(targetYaw), clampYawToRange(targetPitch)); + } + + public boolean setTarget(Vec3d shooterPos, Vec3d shooterMotion, Vec3d targetPos, Vec3d targetMotion) + { + float[] angles = aimCorrectionFunction.getAnglePrediction(shooterPos, shooterMotion, targetPos, targetMotion); + return setTarget(angles[0], angles[1]); + } + + /** + * Checks if the given absolute yaw/pitch are within limits. + * Yaw is considered relative to {@link #centerYaw} and tested against the yaw limits + * (normal or wrapped). Pitch uses absolute limits. + */ + public boolean isWithinLimits(float yaw, float pitch) + { + if(pitch < pitchLimitMin||pitch > pitchLimitMax) + return false; + + float relYaw = MathHelper.wrapDegrees(yaw-centerYaw); + return isRelativeYawWithinLimits(relYaw); + } + + private boolean isRelativeYawWithinLimits(float relYaw) + { + if(yawLimitMin <= yawLimitMax) //Normal range + return relYaw >= yawLimitMin&&relYaw <= yawLimitMax; + else //Wrapped range: allowed if outside (max, min) + return relYaw >= yawLimitMin||relYaw <= yawLimitMax; + } + + //--- Update --- // + + public void update() + { + this.yaw = getYaw(1f); + this.pitch = getPitch(1f); + } + + //--- NBT --- // + + @Override + public NBTTagCompound serializeNBT() + { + return EasyNBT.newNBT() + .withFloat("pitch", pitch) + .withFloat("yaw", yaw) + .withFloat("target_pitch", targetPitch) + .withFloat("target_yaw", targetYaw) + .withFloat("center_yaw", centerYaw) + .unwrap(); + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) + { + pitch = nbt.getFloat("pitch"); + yaw = nbt.getFloat("yaw"); + targetPitch = nbt.getFloat("target_pitch"); + targetYaw = nbt.getFloat("target_yaw"); + centerYaw = nbt.getFloat("center_yaw"); + } + + //--- Utility methods --- // + + /** + * @return absolute yaw (global) at the given partial tick, moving from current towards target + * along the allowed angular path (respecting limits and choosing the correct direction). + */ + public float getYaw(float partialTicks) + { + if(partialTicks==0) + return yaw; + if(Math.abs(yaw-targetYaw) <= MINIMAL) + return targetYaw; + + float step = aimSpeedYaw*partialTicks; + float newYaw = moveYawTowards(yaw, targetYaw, step); + //Snap if very close + if(Math.abs(newYaw-targetYaw) <= MINIMAL) + newYaw = targetYaw; + return clampYawToRange(newYaw); + } + + /** + * Moves {@code current} towards {@code target} by at most {@code maxStep} degrees, + * staying inside the allowed yaw region defined by {@link #yawLimitMin} and {@link #yawLimitMax} + * (relative to {@link #centerYaw}). Handles both normal and wrapped ranges, and always chooses + * the direction (shortest or longest) that keeps the movement within limits. + * + * @param current current absolute yaw (in -180..180) + * @param target target absolute yaw (in -180..180, guaranteed to be within limits) + * @param maxStep maximum angular change (positive) + * @return new absolute yaw after moving + */ + private float moveYawTowards(float current, float target, float maxStep) + { + if(current==target||maxStep <= 0) + return current; + if(Math.abs(current-target) <= MINIMAL) + return target; + + //Convert to [0,360) for easier circle arithmetic + float curr = (current%360+360)%360; + float targ = (target%360+360)%360; + + //Convert limits to [0,360) + float a = (yawLimitMin%360+360)%360; + float b = (yawLimitMax%360+360)%360; + + //Full circle allowed? (forbidden length == 0) + float forbiddenLen = (a-b+360)%360; + boolean fullCircle = (forbiddenLen==0); + + float newAngle; + if(fullCircle) + { + //Simple shortest path + float diff = (targ-curr+360)%360; + if(diff > 180) diff -= 360; //signed delta + float move = Math.copySign(Math.min(maxStep, Math.abs(diff)), diff); + newAngle = curr+move; + } + else + { + //Map allowed region to a contiguous interval + float currU = curr < a?curr+360: curr; + float targU = targ < a?targ+360: targ; + + //Linear movement in unwrapped space + float diffU = targU-currU; + float moveU = Math.copySign(Math.min(maxStep, Math.abs(diffU)), diffU); + float newU = currU+moveU; + + //Map back to [0,360) + newAngle = newU%360; + if(newAngle < 0) newAngle += 360; + } + + //Convert back to -180..180 range + float result = newAngle; + if(result > 180) result -= 360; + return result; + } + + /** + * @return a value in [0,1] representing how far the current relative yaw is + * between the yaw limits, linearly interpolated even across the wrap point. + * For a wrapped range (min > max), 0 corresponds to {@code yawLimitMin}, + * 1 corresponds to {@code yawLimitMax} (going through +180). + */ + public float getYawNormalized(float partialTicks) + { + float relYaw = MathHelper.wrapDegrees(getYaw(partialTicks)-centerYaw); + + if(yawLimitMin <= yawLimitMax) //Normal range + { + if(yawLimitMin==yawLimitMax) + return 0.5f; + return (relYaw-yawLimitMin)/(yawLimitMax-yawLimitMin); + } + else //Wrapped range: map the arc [min, max+360] linearly + { + float effectiveMin = yawLimitMin; + float effectiveMax = yawLimitMax+360; + float relYaw2 = relYaw; + if(relYaw2 < yawLimitMin) + relYaw2 += 360; + return (relYaw2-effectiveMin)/(effectiveMax-effectiveMin); + } + } + + public float getPitch(float partialTicks) + { + if(partialTicks==0) + return pitch; + if(Math.abs(pitch-targetPitch) <= MINIMAL) + return targetPitch; + float speed = Math.min(aimSpeedPitch, Math.abs(pitch-targetPitch)); + float newPitch = pitch+(partialTicks*speed*Math.signum(targetPitch-pitch)); + newPitch = MathHelper.clamp(newPitch, pitchLimitMin, pitchLimitMax); + if(Math.abs(newPitch-targetPitch) <= MINIMAL) + newPitch = targetPitch; + return newPitch; + } + + public float getPitchNormalized(float partialTicks) + { + if(pitchLimitMin==pitchLimitMax) + return 0.5f; + return (getPitch(partialTicks)-pitchLimitMin)/(pitchLimitMax-pitchLimitMin); + } + + public boolean isAimed() + { + return isAimed(MINIMAL); + } + + public boolean isAimed(float allowedInaccuracy) + { + return Math.abs(yaw-targetYaw) <= allowedInaccuracy&&Math.abs(pitch-targetPitch) <= allowedInaccuracy; + } + + /** + * Clamps an absolute yaw value to the absolute yaw range defined by + * {@link #centerYaw} and the (possibly wrapped) relative yaw limits. + * + * @param yaw absolute yaw to clamp + * @return clamped absolute yaw (nearest allowed value) + */ + public float clampYawToRange(float yaw) + { + float relYaw = MathHelper.wrapDegrees(yaw-centerYaw); + float clampedRel = clampRelativeYaw(relYaw); + return MathHelper.wrapDegrees(centerYaw+clampedRel); + } + + private float clampRelativeYaw(float relYaw) + { + //Normal range + if(yawLimitMin <= yawLimitMax) + return MathHelper.clamp(relYaw, yawLimitMin, yawLimitMax); + //Wrapped range + else + { + float min = yawLimitMin; + float max = yawLimitMax; + //If relYaw is inside forbidden interval (max, min), map to nearest endpoint + if(relYaw > max&&relYaw < min) + { + float distToMin = Math.abs(relYaw-min); + float distToMax = Math.abs(relYaw-max); + return distToMin <= distToMin?min: max; + } + return relYaw; + } + } + + public float clampPitchToRange(float pitch) + { + return MathHelper.clamp(pitch, pitchLimitMin, pitchLimitMax); + } + + public Vec3d getTarget(float partialTicks) + { + double yawRad = Math.toRadians(MathHelper.wrapDegrees(getYaw(partialTicks)+centerYaw)); + double pitchRad = Math.toRadians(-getPitch(partialTicks)); + return IIMath.offsetPosDirection(1, -yawRad, pitchRad); + } + + public float getCenterYaw() + { + return centerYaw; + } + + public float getTargetYaw() + { + return targetYaw; + } + + public float getTargetPitch() + { + return targetPitch; + } + + @FunctionalInterface + public interface AimCorrectionFunction + { + /** + * @param shooterPos position of the shooter/gun + * @param shooterMotion motion of the shooter/gun + * @param targetPos position of the target + * @param targetMotion motion of the target + * @return array of pitch and yaw in degrees (absolute) + */ + float[] getAnglePrediction(Vec3d shooterPos, Vec3d shooterMotion, Vec3d targetPos, Vec3d targetMotion); + } + + private static float[] getTargetLead(Vec3d shooterPos, Vec3d shooterMotion, Vec3d targetPos, Vec3d targetMotion) + { + Vec3d vv = shooterPos.subtract(targetPos).add(targetMotion).normalize(); + float yy = (float)((Math.atan2(vv.x, vv.z)*180D)/Math.PI); + float pp = (float)Math.toDegrees(Math.atan2(vv.y, vv.distanceTo(new Vec3d(0, vv.y, 0)))); + return new float[]{yy, pp}; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/GunAmmoProvider.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/GunAmmoProvider.java new file mode 100644 index 000000000..f38cb7149 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/GunAmmoProvider.java @@ -0,0 +1,219 @@ +package pl.pabilo8.immersiveintelligence.common.util.gun; + +import blusunrize.immersiveengineering.common.util.Utils; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraftforge.common.util.INBTSerializable; +import pl.pabilo8.immersiveintelligence.common.IIUtils; +import pl.pabilo8.immersiveintelligence.common.util.ISerializableEnum; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; + +import javax.annotation.Nonnull; +import java.util.function.Supplier; + +/** + * Abstract ammunition provider for mounted weapons. + * Handles loading/unloading from player inventory or external sources. + * + * @author Pabilo8 (pabilo@iiteam.net) + * @ii-approved 0.3.1 + * @since 23.05.2026 + */ +public abstract class GunAmmoProvider implements INBTSerializable +{ + //Context + protected final Entity gun; + protected final Supplier operatorSupplier; + + //State + protected GunLoadingState loadingState = GunLoadingState.EMPTY; + protected float reload = 0, maxReload = 0; + protected GunAmmoProvider other = null; + + //Sounds + protected SoundEvent loadSound = null; + protected SoundEvent unloadSound = null; + + protected GunAmmoProvider(Entity gun, Supplier operatorSupplier) + { + this.gun = gun; + this.operatorSupplier = operatorSupplier; + } + + public void update() + { + if(loadingState==GunLoadingState.EMPTY||loadingState==GunLoadingState.LOADED) + return; + + if(++reload >= maxReload) + { + switch(loadingState) + { + case LOAD: + onLoadFinished(); + loadingState = GunLoadingState.LOADED; + break; + case UNLOAD: + onUnloadFinished(); + loadingState = GunLoadingState.EMPTY; + break; + default: + break; + } + reload = 0; + } + } + + /** + * Starts the reload sequence. + */ + public final boolean startReloading() + { + if(loadingState==GunLoadingState.EMPTY) + { + if(canFindAmmo()) + { + loadingState = GunLoadingState.LOAD; + reload = 0; + if(loadSound!=null) + gun.world.playSound(null, gun.getPosition(), loadSound, SoundCategory.BLOCKS, 1f, 1f); + return true; + } + } + else if(loadingState==GunLoadingState.LOADED) + { + loadingState = GunLoadingState.UNLOAD; + reload = 0; + if(loadSound!=null) + gun.world.playSound(null, gun.getPosition(), unloadSound, SoundCategory.BLOCKS, 1f, 1f); + return true; + } + return false; + } + + //--- Sounds ---// + + public GunAmmoProvider withLoadingSound(SoundEvent sound) + { + this.loadSound = sound; + return this; + } + + public GunAmmoProvider withUnloadingSound(SoundEvent sound) + { + this.unloadSound = sound; + return this; + } + + public GunAmmoProvider withSounds(SoundEvent load, SoundEvent unload) + { + this.loadSound = load; + this.unloadSound = unload; + return this; + } + + public GunAmmoProvider withSecondaryProvider(GunAmmoProvider other) + { + this.other = other; + return this; + } + + //--- Core methods ---// + + protected abstract void onLoadFinished(); + + protected abstract void onUnloadFinished(); + + protected abstract boolean canFindAmmo(); + + @Nonnull + protected abstract ItemStack provideNextBullet(); + + @Nonnull + public abstract NonNullList getAmmoList(); + + @Nonnull + public final ItemStack provideAmmo() + { + if(loadingState!=GunLoadingState.LOADED) + return ItemStack.EMPTY; + ItemStack bullet = provideNextBullet(); + if(bullet.isEmpty()&&other!=null) + return other.provideAmmo(); + return bullet; + } + + protected final void giveOrDrop(ItemStack ammoStack) + { + Entity entity = operatorSupplier.get(); + //No operator, drop at gun position + if(entity==null) + Utils.dropStackAtPos(gun.world, gun.getPosition(), ammoStack); + else + //Try to give the item to the operator, preferably into their ammo pouch, drop when that's not possible + IIUtils.giveOrDropCasingStack(entity, ammoStack); + } + + //--- Getters ---// + + public boolean isReloading() + { + return loadingState==GunLoadingState.LOAD||loadingState==GunLoadingState.UNLOAD; + } + + public boolean isLoaded() + { + return loadingState==GunLoadingState.LOADED; + } + + public boolean isEmpty() + { + return loadingState==GunLoadingState.EMPTY; + } + + public float getLoadingProgress(float partialTicks) + { + switch(loadingState) + { + case LOADED: + return 1f; + case LOAD: + return (reload+partialTicks)/Math.max(1, maxReload); + case UNLOAD: + return 1f-((reload+partialTicks)/Math.max(1, maxReload)); + case EMPTY: + default: + return 0f; + } + } + + //--- NBT ---// + @Override + public NBTTagCompound serializeNBT() + { + return EasyNBT.newNBT() + .withFloat("reload", reload) + .withInt("state", loadingState.ordinal()) + .unwrap(); + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) + { + this.reload = nbt.getFloat("reload"); + this.loadingState = GunLoadingState.values()[nbt.getInteger("state")%GunLoadingState.values().length]; + } + + public enum GunLoadingState implements ISerializableEnum + { + EMPTY, + LOAD, + LOADED, + UNLOAD + } + +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/GunRecoil.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/GunRecoil.java new file mode 100644 index 000000000..348b3d763 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/GunRecoil.java @@ -0,0 +1,143 @@ +package pl.pabilo8.immersiveintelligence.common.util.gun; + +import blusunrize.immersiveengineering.common.util.Utils; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import pl.pabilo8.immersiveintelligence.api.MachinegunCoolantHandler; +import pl.pabilo8.immersiveintelligence.common.util.IIMath; + +import javax.annotation.Nullable; +import java.util.function.Supplier; + +/** + * Used to store and calculate gun recoil and overheating. + * + * @author Pabilo8 (pabilo@iiteam.net) + * @ii-approved 0.3.1 + * @since 15.05.2026 + */ +public class GunRecoil implements INBTSerializable +{ + //--- Angles ---// + private float recoilYaw = 0, recoilPitch = 0; + private float maxRecoilPitch = 45f, maxRecoilYaw = 45f; + private float recoilStrengthVertical = 0.7f, recoilStrengthHorizontal = 0.3f, recoilDamping = 0.97f, recoilRandomness = 0.05f; + + //--- Overheating ---// + private boolean isOverheated = false; + private float overheat = 0, maxOverheat = 0, overheatDecrease = 1; + @Nullable + private Supplier coolantTank = null; + private int coolantPerTick = 10; + + public GunRecoil() + { + + } + + public void update() + { + //Apply damping to recoil, and gradually return it to 0 + this.recoilYaw *= recoilDamping; + this.recoilPitch *= recoilDamping; + + if(Math.abs(recoilYaw) < 0.01f) + recoilYaw = 0; + if(Math.abs(recoilPitch) < 0.01f) + recoilPitch = 0; + + //Decrease overheat + if(overheat > 0) + overheat -= overheatDecrease; + if(coolantTank!=null&&MachinegunCoolantHandler.isValidCoolant(coolantTank.get().getFluid())) + { + FluidStack drained = coolantTank.get().drain(coolantPerTick, true); + assert drained!=null; + overheat -= MachinegunCoolantHandler.getCoolAmount(coolantTank.get().getFluid())*((float)drained.amount/coolantPerTick); + } + } + + //--- With ---// + + public GunRecoil withRecoilLimits(float maxRecoilYaw, float maxRecoilPitch) + { + this.maxRecoilYaw = maxRecoilYaw; + this.maxRecoilPitch = maxRecoilPitch; + return this; + } + + public GunRecoil withRecoilStrength(float recoilStrengthVertical, float recoilStrengthHorizontal, float recoilDamping, float recoilRandomness) + { + this.recoilStrengthVertical = recoilStrengthVertical; + this.recoilStrengthHorizontal = recoilStrengthHorizontal; + this.recoilDamping = recoilDamping; + this.recoilRandomness = recoilRandomness; + return this; + } + + public GunRecoil withOverheating(float maxOverheat, float overheatDecrease) + { + this.maxOverheat = maxOverheat; + this.overheatDecrease = overheatDecrease; + return this; + } + + public GunRecoil withCoolantTank(@Nullable Supplier coolantTank, int coolantPerTick) + { + this.coolantTank = coolantTank; + this.coolantPerTick = coolantPerTick; + return this; + } + + //--- Adding Recoil ---// + + public void addRecoil() + { + //Add recoil strength to current recoil + this.recoilPitch += recoilStrengthVertical*(1f+recoilRandomness*(float)(Utils.RAND.nextGaussian()*2-1)); + this.recoilYaw += recoilStrengthHorizontal*(1f+recoilRandomness*(float)(Utils.RAND.nextGaussian()*2-1)); + + //Clamp recoil to max values + this.recoilPitch = Math.max(-maxRecoilPitch, Math.min(maxRecoilPitch, recoilPitch)); + this.recoilYaw = Math.max(-maxRecoilYaw, Math.min(maxRecoilYaw, recoilYaw)); + } + + //--- Getters ---// + + public float getRecoilYaw(float partialTicks) + { + return (float)IIMath.clampedLerp(recoilYaw*recoilDamping, recoilYaw, 1f-partialTicks); + } + + public float getRecoilPitch(float partialTicks) + { + return (float)IIMath.clampedLerp(recoilPitch*recoilDamping, recoilPitch, 1f-partialTicks); + } + + public float getOverheat(float partialTicks) + { + return Math.max(0, Math.min(1, (overheat+(isOverheated?0.5f: 0))/maxOverheat)); + } + + @Override + public NBTTagCompound serializeNBT() + { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setFloat("recoil_yaw", recoilYaw); + nbt.setFloat("recoil_pitch", recoilPitch); + nbt.setFloat("overheat", overheat); + nbt.setBoolean("is_overheated", isOverheated); + return nbt; + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) + { + recoilYaw = nbt.getFloat("recoil_yaw"); + recoilPitch = nbt.getFloat("recoil_pitch"); + overheat = nbt.getFloat("overheat"); + isOverheated = nbt.getBoolean("is_overheated"); + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/GunShootingHandler.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/GunShootingHandler.java new file mode 100644 index 000000000..5f1244a8d --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/GunShootingHandler.java @@ -0,0 +1,167 @@ +package pl.pabilo8.immersiveintelligence.common.util.gun; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagFloat; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.util.INBTSerializable; +import pl.pabilo8.immersiveintelligence.api.ammo.utils.AmmoFactory; +import pl.pabilo8.immersiveintelligence.common.entity.ammo.types.EntityAmmoProjectile; +import pl.pabilo8.immersiveintelligence.common.network.IIPacketHandler; +import pl.pabilo8.immersiveintelligence.common.network.messages.MessagePlayIISound; +import pl.pabilo8.immersiveintelligence.common.util.sound.AdvancedSounds; + +/** + * Used to store and calculate gun recoil and overheating. + * + * @author Pabilo8 (pabilo@iiteam.net) + * @ii-approved 0.3.1 + * @since 15.05.2026 + */ +public class GunShootingHandler implements INBTSerializable +{ + private float shotDelay, maxShotDelay; + private GunRecoil recoil = null; + private AmmoFactory ammoFactory = null; + private GunAmmoProvider ammoProvider = null; + //Sounds + private AdvancedSounds.RangedSound sound = null; + private SoundEvent soundDryFire = null; + private int shootSoundRange = 1; + + public GunShootingHandler() + { + + } + + public void update() + { + //Decrease shot delay + shotDelay = Math.max(0, shotDelay-1); + //Update recoil and ammo provider + if(this.recoil!=null) + this.recoil.update(); + if(this.ammoProvider!=null) + this.ammoProvider.update(); + } + + public boolean fire() + { + //Check basic conditions + if(!canShoot()||ammoProvider==null||ammoFactory==null) + return false; + World world = ammoFactory.getWorld(); + + //Cannot fire when the provider is still reloading + if(ammoProvider.isReloading()) + return false; + + //Load ammo from provider + ItemStack firedStack = ammoProvider.provideAmmo(); + boolean fired = false; + if(!world.isRemote) + { + if(!firedStack.isEmpty()) + { + ammoFactory.setStack(firedStack); + EntityAmmoProjectile projectile = ammoFactory.create(); + fired = projectile!=null; + if(fired&&sound!=null) + IIPacketHandler.sendToAllClients(new MessagePlayIISound(sound, SoundCategory.BLOCKS, shootSoundRange, ammoFactory.getPos(), 1f, 1f)); + } + else if(soundDryFire!=null) + world.playSound(null, new BlockPos(ammoFactory.getPos()), soundDryFire, SoundCategory.BLOCKS, 1f, 1f); + } + else + fired = !firedStack.isEmpty(); + + if(!fired) + return false; + + //Reset shot delay + this.shotDelay = maxShotDelay; + //Add recoil and gun overheat + if(recoil!=null) + recoil.addRecoil(); + return true; + } + + public boolean startReloading() + { + return ammoProvider!=null&&ammoProvider.startReloading(); + } + + //--- With ---// + + public GunShootingHandler withMaxShotDelay(float maxShotDelay) + { + this.maxShotDelay = maxShotDelay; + return this; + } + + public GunShootingHandler withRecoilHandler(GunRecoil recoil) + { + this.recoil = recoil; + return this; + } + + public GunShootingHandler withAmmoFactory(AmmoFactory ammoFactory) + { + this.ammoFactory = ammoFactory; + return this; + } + + public GunShootingHandler withAmmoProvider(GunAmmoProvider provider) + { + this.ammoProvider = provider; + return this; + } + + public GunShootingHandler withShootSound(AdvancedSounds.RangedSound sound, int range) + { + this.sound = sound; + this.shootSoundRange = range; + return this; + } + + public GunShootingHandler withDryFireSound(SoundEvent soundDryFire) + { + this.soundDryFire = soundDryFire; + return this; + } + + //--- Getters ---// + + public float getShotDelay(float partialTicks) + { + return Math.max(0, shotDelay-partialTicks); + } + + public boolean canShoot() + { + return shotDelay <= 0; + } + + public float getLoadingProgress(float partialTicks) + { + if(ammoProvider==null) + return 0; + return ammoProvider.getLoadingProgress(partialTicks); + } + + //--- NBT ---// + + @Override + public NBTTagFloat serializeNBT() + { + return new NBTTagFloat(shotDelay); + } + + @Override + public void deserializeNBT(NBTTagFloat nbt) + { + this.shotDelay = nbt.getFloat(); + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/ammoprovider/GunAmmoProviderAmmoCrate.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/ammoprovider/GunAmmoProviderAmmoCrate.java new file mode 100644 index 000000000..80ce71959 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/ammoprovider/GunAmmoProviderAmmoCrate.java @@ -0,0 +1,55 @@ +package pl.pabilo8.immersiveintelligence.common.util.gun.ammoprovider; + +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunAmmoProvider; + +import javax.annotation.Nonnull; +import java.util.function.Supplier; + +/** + * @author Pabilo8 (pabilo@iiteam.net) + * @ii-approved 0.3.1 + * @since 26.05.2026 + */ +public class GunAmmoProviderAmmoCrate extends GunAmmoProvider +{ + public GunAmmoProviderAmmoCrate(Entity gun, Supplier operatorSupplier) + { + super(gun, operatorSupplier); + } + // For belt‑fed, no loading/unloading; always returns a bullet if crate has any. + // This is a placeholder – implement according to your crate logic. + + @Override + protected void onLoadFinished() + { + } + + @Override + protected void onUnloadFinished() + { + } + + @Nonnull + @Override + protected ItemStack provideNextBullet() + { + // TODO: Query the crate inventory at gunPosition.down() + return ItemStack.EMPTY; + } + + @Nonnull + @Override + public NonNullList getAmmoList() + { + return NonNullList.create(); + } + + @Override + protected boolean canFindAmmo() + { + return false; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/ammoprovider/GunAmmoProviderItemHandler.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/ammoprovider/GunAmmoProviderItemHandler.java new file mode 100644 index 000000000..ec8252d88 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/ammoprovider/GunAmmoProviderItemHandler.java @@ -0,0 +1,159 @@ +package pl.pabilo8.immersiveintelligence.common.util.gun.ammoprovider; + +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.items.IItemHandlerModifiable; +import pl.pabilo8.immersiveintelligence.common.IIContent; +import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIBulletMagazine.Magazines; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunAmmoProvider; + +import javax.annotation.Nonnull; +import java.util.function.Predicate; +import java.util.function.Supplier; + +/** + * Ammunition provider that consumes bullets from an item handler instead of a player's inventory. + * Intended for emplacement platform inventories. It supports both direct bullet stacks and II bullet magazines. + * + * @author Pabilo8 (pabilo@iiteam.net) + * @ii-approved 0.3.1 + * @since 03.06.2026 + */ +public class GunAmmoProviderItemHandler extends GunAmmoProvider +{ + private final IItemHandlerModifiable inventory; + private final Predicate acceptedAmmo; + + public GunAmmoProviderItemHandler(Entity gun, Supplier operatorSupplier, IItemHandlerModifiable inventory, + Predicate acceptedAmmo, float loadTime) + { + super(gun, operatorSupplier); + this.inventory = inventory; + this.acceptedAmmo = acceptedAmmo==null?stack -> true: acceptedAmmo; + this.maxReload = loadTime; + } + + @Override + protected void onLoadFinished() + { + //No internal cache. The platform inventory itself is the loaded source. + } + + @Override + protected void onUnloadFinished() + { + //No unload behaviour: the ammo remains in the platform inventory. + } + + @Override + protected boolean canFindAmmo() + { + return hasAvailableAmmo(); + } + + public boolean hasAvailableAmmo() + { + return findDirectAmmoSlot() >= 0||findMagazineAmmoSlot() >= 0; + } + + @Nonnull + @Override + protected ItemStack provideNextBullet() + { + int magazineSlot = findMagazineAmmoSlot(); + if(magazineSlot >= 0) + { + ItemStack magazine = inventory.getStackInSlot(magazineSlot).copy(); + NonNullList bullets = IIContent.itemBulletMagazine.readInventory(magazine); + + for(int i = 0; i < bullets.size(); i++) + { + ItemStack bullet = bullets.get(i); + if(!bullet.isEmpty()&&acceptedAmmo.test(bullet)) + { + ItemStack provided = bullet.copy(); + provided.setCount(1); + + bullet.shrink(1); + if(bullet.getCount() <= 0) + bullets.set(i, ItemStack.EMPTY); + + IIContent.itemBulletMagazine.writeInventory(magazine, bullets); + inventory.setStackInSlot(magazineSlot, + IIContent.itemBulletMagazine.hasNoBullets(magazine)?ItemStack.EMPTY: magazine); + + if(!hasAvailableAmmo()) + loadingState = GunLoadingState.EMPTY; + return provided; + } + } + } + + int directSlot = findDirectAmmoSlot(); + if(directSlot >= 0) + { + ItemStack provided = inventory.extractItem(directSlot, 1, false); + if(!hasAvailableAmmo()) + loadingState = GunLoadingState.EMPTY; + return provided; + } + + loadingState = GunLoadingState.EMPTY; + return ItemStack.EMPTY; + } + + @Nonnull + @Override + public NonNullList getAmmoList() + { + NonNullList list = NonNullList.create(); + for(int i = 0; i < inventory.getSlots(); i++) + { + ItemStack stack = inventory.getStackInSlot(i); + if(stack.isEmpty()) + continue; + if(isMagazineWithAmmo(stack)||acceptedAmmo.test(stack)) + list.add(stack.copy()); + } + return list; + } + + private int findDirectAmmoSlot() + { + for(int i = 0; i < inventory.getSlots(); i++) + { + ItemStack stack = inventory.getStackInSlot(i); + if(!stack.isEmpty()&&acceptedAmmo.test(stack)) + return i; + } + return -1; + } + + private int findMagazineAmmoSlot() + { + for(int i = 0; i < inventory.getSlots(); i++) + { + ItemStack stack = inventory.getStackInSlot(i); + if(isMagazineWithAmmo(stack)) + return i; + } + return -1; + } + + private boolean isMagazineWithAmmo(ItemStack stack) + { + if(stack.isEmpty()||stack.getItem()!=IIContent.itemBulletMagazine) + return false; + + Magazines type = IIContent.itemBulletMagazine.stackToSub(stack); + if(type==null) + return false; + + NonNullList bullets = IIContent.itemBulletMagazine.readInventory(stack); + for(ItemStack bullet : bullets) + if(!bullet.isEmpty()&&acceptedAmmo.test(bullet)) + return true; + return false; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/ammoprovider/GunAmmoProviderMagazine.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/ammoprovider/GunAmmoProviderMagazine.java new file mode 100644 index 000000000..8376f96a7 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/ammoprovider/GunAmmoProviderMagazine.java @@ -0,0 +1,278 @@ +package pl.pabilo8.immersiveintelligence.common.util.gun.ammoprovider; + +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import pl.pabilo8.immersiveintelligence.common.IIContent; +import pl.pabilo8.immersiveintelligence.common.item.ammo.ItemIIBulletMagazine.Magazines; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunAmmoProvider; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Collections; +import java.util.function.Supplier; + +/** + * Magazine-fed ammunition provider. + * Stores bullets internally as a list for fast access, and keeps a magazine ItemStack + * for simple persistence and external representation. + * + * @author Pabilo8 (pabilo@iiteam.net) + * @ii-approved 0.3.1 + * @since 26.05.2026 + */ +public class GunAmmoProviderMagazine extends GunAmmoProvider +{ + private final Magazines magazineType; + private final NonNullList bullets; + private ItemStack magazineStack = ItemStack.EMPTY; + + public GunAmmoProviderMagazine(Entity gun, Supplier operatorSupplier, Magazines type, float loadTime) + { + super(gun, operatorSupplier); + this.magazineType = type; + this.bullets = NonNullList.withSize(type.capacity, ItemStack.EMPTY); + this.maxReload = loadTime; + } + + //--- Bullet list and Magazine stack sync ---// + + /** + * Rebuilds the magazine ItemStack from the current bullet list. + * Should be called after any modification to the bullet list. + */ + private void rebuildMagazineFromBullets() + { + if(getBulletCount()==0) + { + magazineStack = ItemStack.EMPTY; + return; + } + + //Build a list of only non‑empty bullets (up to capacity) + NonNullList bulletList = NonNullList.create(); + for(ItemStack b : bullets) + if(!b.isEmpty()) + bulletList.add(b); + + magazineStack = IIContent.itemBulletMagazine.getMagazine(magazineType); + IIContent.itemBulletMagazine.writeInventory(magazineStack, bulletList); + } + + /** + * Rebuilds the bullet list from the given magazine stack. + * Clears the current bullets and refills from the magazine. + * + * @param stack the magazine ItemStack to load from + */ + private void rebuildBulletsFromMagazine(@Nonnull ItemStack stack) + { + clear(); + if(stack.isEmpty()||stack.getItem()!=IIContent.itemBulletMagazine) + return; + + Magazines type = IIContent.itemBulletMagazine.stackToSub(stack); + if(type!=magazineType) + return; + + NonNullList magazineBullets = IIContent.itemBulletMagazine.readInventory(stack); + int copyLimit = Math.min(magazineType.capacity, magazineBullets.size()); + for(int i = 0; i < copyLimit; i++) + bullets.set(i, magazineBullets.get(i).copy()); + } + + //--- Implementation ---// + + @Override + protected void onLoadFinished() + { + //Bullets have already been added during canFindAmmo(). + //Create the magazine stack from the bullets. + rebuildMagazineFromBullets(); + } + + @Override + protected void onUnloadFinished() + { + if(getBulletCount() > 0) + { + //Drop or give the magazine stack (which reflects the current bullets) + giveOrDrop(magazineStack); + clear(); + magazineStack = ItemStack.EMPTY; + } + } + + @Nonnull + @Override + protected ItemStack provideNextBullet() + { + if(getBulletCount()==0) + return ItemStack.EMPTY; + + //Find the first non‑empty bullet + for(int i = 0; i < bullets.size(); i++) + { + ItemStack bullet = bullets.get(i); + if(!bullet.isEmpty()) + { + bullets.set(i, ItemStack.EMPTY); + rebuildMagazineFromBullets(); //Keep magazine stack in sync + return bullet.copy(); + } + } + return ItemStack.EMPTY; + } + + @Nonnull + @Override + public NonNullList getAmmoList() + { + return bullets; + } + + @Override + protected boolean canFindAmmo() + { + //Check if full + if(getBulletCount() >= magazineType.capacity) + return false; + + //Try to find a matching magazine in the operator's hotbar + ItemStack foundMagazine = findMagazineInHotbar(magazineType); + if(foundMagazine!=null&&!foundMagazine.isEmpty()) + { + int needed = magazineType.capacity-getBulletCount(); + NonNullList magazineBullets = IIContent.itemBulletMagazine.readInventory(foundMagazine); + int taken = 0; + + //Transfer bullets from the found magazine into our internal list + for(int i = 0; i < magazineBullets.size()&&taken < needed; i++) + { + ItemStack bullet = magazineBullets.get(i); + if(!bullet.isEmpty()) + { + for(int j = 0; j < bullets.size(); j++) + { + if(bullets.get(j).isEmpty()) + { + bullets.set(j, bullet.copy()); + taken++; + break; + } + } + } + } + + if(taken > 0) + { + //Update the found magazine (remove transferred bullets) + IIContent.itemBulletMagazine.writeInventory(foundMagazine, magazineBullets); + + //If the magazine becomes empty, remove it from the operator's inventory + if(IIContent.itemBulletMagazine.hasNoBullets(foundMagazine)) + consumeMagazineFromHotbar(foundMagazine); + + return true; + } + } + return false; + } + + //--- Utils ---// + + private void clear() + { + Collections.fill(bullets, ItemStack.EMPTY); + } + + private int getBulletCount() + { + int count = 0; + for(ItemStack b : bullets) + if(!b.isEmpty()) + count++; + return count; + } + + //--- Persistence (for saving/loading to originStack) ---// + + @Nonnull + public ItemStack getLoadedStack() + { + return magazineStack; + } + + public void setLoadedStack(@Nonnull ItemStack stack) + { + clear(); + magazineStack = stack.isEmpty()?ItemStack.EMPTY: stack.copy(); + rebuildBulletsFromMagazine(magazineStack); + } + + //--- NBT ---// + + @Override + public NBTTagCompound serializeNBT() + { + NBTTagCompound nbt = super.serializeNBT(); + if(!magazineStack.isEmpty()) + nbt.setTag("magazine", magazineStack.serializeNBT()); + return nbt; + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) + { + super.deserializeNBT(nbt); + if(nbt.hasKey("magazine")) + setLoadedStack(new ItemStack(nbt.getCompoundTag("magazine"))); + else + setLoadedStack(ItemStack.EMPTY); + } + + //--- Hotbar interaction helpers (copied from your existing code) ---// + + @Nullable + protected ItemStack findMagazineInHotbar(Magazines expectedType) + { + Entity player = operatorSupplier.get(); + if(player==null) + return null; + + IItemHandler inv = player.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); + if(inv==null) + return null; + + for(int i = 0; i < 9; i++) + { + ItemStack stack = inv.getStackInSlot(i); + if(stack.getItem()==IIContent.itemBulletMagazine&& + IIContent.itemBulletMagazine.stackToSub(stack)==expectedType) + return stack; + } + return null; + } + + protected boolean consumeMagazineFromHotbar(ItemStack magazine) + { + Entity player = operatorSupplier.get(); + if(player==null) + return false; + + IItemHandler inv = player.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); + if(inv==null) + return false; + + for(int i = 0; i < 9; i++) + if(inv.getStackInSlot(i)==magazine) + { + ItemStack extracted = inv.extractItem(i, 1, false); + return !extracted.isEmpty(); + } + return false; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/ammoprovider/GunAmmoProviderSingle.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/ammoprovider/GunAmmoProviderSingle.java new file mode 100644 index 000000000..73b6fb9b9 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/gun/ammoprovider/GunAmmoProviderSingle.java @@ -0,0 +1,131 @@ +package pl.pabilo8.immersiveintelligence.common.util.gun.ammoprovider; + +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import pl.pabilo8.immersiveintelligence.api.ammo.parts.IAmmoTypeItem; +import pl.pabilo8.immersiveintelligence.common.IIUtils; +import pl.pabilo8.immersiveintelligence.common.entity.ammo.EntityAmmoBase; +import pl.pabilo8.immersiveintelligence.common.util.easynbt.EasyNBT; +import pl.pabilo8.immersiveintelligence.common.util.gun.GunAmmoProvider; + +import javax.annotation.Nonnull; +import java.util.function.Supplier; + +/** + * @author Pabilo8 (pabilo@iiteam.net) + * @ii-approved 0.3.1 + * @since 26.05.2026 + */ +public class GunAmmoProviderSingle, E extends EntityAmmoBase> extends GunAmmoProvider +{ + private final IAmmoTypeItem acceptedAmmo; + private ItemStack loadedBullet = ItemStack.EMPTY; + private ItemStack pendingBullet = ItemStack.EMPTY; + + public GunAmmoProviderSingle(Entity gun, Supplier operatorSupplier, IAmmoTypeItem acceptedAmmo, float loadTime) + { + super(gun, operatorSupplier); + this.acceptedAmmo = acceptedAmmo; + this.maxReload = loadTime; + } + + @Override + protected void onLoadFinished() + { + if(!pendingBullet.isEmpty()) + { + loadedBullet = pendingBullet.copy(); + pendingBullet = ItemStack.EMPTY; + } + } + + @Override + protected void onUnloadFinished() + { + if(!loadedBullet.isEmpty()) + { + IIUtils.giveOrDropStack(this.operatorSupplier.get(), loadedBullet); + giveOrDrop(loadedBullet); + loadedBullet = ItemStack.EMPTY; + } + } + + @Nonnull + @Override + protected ItemStack provideNextBullet() + { + if(loadedBullet.isEmpty()) + return ItemStack.EMPTY; + ItemStack bullet = loadedBullet.copy(); + loadedBullet = ItemStack.EMPTY; + loadingState = GunLoadingState.EMPTY; + return bullet; + } + + @Nonnull + @Override + public NonNullList getAmmoList() + { + return NonNullList.withSize(loadedBullet.isEmpty()?0: 1, loadedBullet); + } + + @Override + protected boolean canFindAmmo() + { + Entity player = operatorSupplier.get(); + if(player==null) + return false; + + IItemHandler inv = player.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); + if(inv==null) + return false; + + for(int i = 0; i < inv.getSlots(); i++) + { + ItemStack stack = inv.getStackInSlot(i); + if(!stack.isEmpty()&&stack.getItem()==acceptedAmmo) + { + pendingBullet = stack.copy(); + return true; + } + } + return false; + } + + //--- Persistence ---// + + @Nonnull + public ItemStack getLoadedStack() + { + return loadedBullet.isEmpty()?ItemStack.EMPTY: loadedBullet.copy(); + } + + public void setLoadedStack(@Nonnull ItemStack stack) + { + if(stack.isEmpty()||stack.getItem()!=acceptedAmmo) + loadedBullet = ItemStack.EMPTY; + else + loadedBullet = stack.copy(); + } + + //--- NBT ---// + + @Override + public NBTTagCompound serializeNBT() + { + return EasyNBT.wrapNBT(super.serializeNBT()) + .withItemStack("loaded_bullet", this.loadedBullet) + .unwrap(); + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) + { + super.deserializeNBT(nbt); + this.loadedBullet = new ItemStack(nbt.getCompoundTag("loaded_bullet")); + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/item/IItemEntityPlacer.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/item/IItemEntityPlacer.java new file mode 100644 index 000000000..576573797 --- /dev/null +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/item/IItemEntityPlacer.java @@ -0,0 +1,102 @@ +package pl.pabilo8.immersiveintelligence.common.util.item; + + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemMonsterPlacer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.items.ItemHandlerHelper; +import pl.pabilo8.immersiveintelligence.common.IISounds; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; + +/** + * An interface for items that place entities, i.e. {@link pl.pabilo8.immersiveintelligence.common.item.tools.ItemIITripodPeriscope} + * + * @author Pabilo8 (pabilo@iiteam.net) + * @ii-approved 0.3.1 + * @since 23.05.2026 + */ +public interface IItemEntityPlacer +{ + default EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, + float hitX, float hitY, float hitZ) + { + //Can't place on the same position as player + if(facing==EnumFacing.DOWN) + return EnumActionResult.FAIL; + + //Check if the entity can be placed on, or on top of the clicked block + boolean canBePlaced = world.getBlockState(pos).getBlock().isReplaceable(world, pos); + BlockPos blockpos = canBePlaced?pos: pos.offset(facing); + ItemStack stack = player.getHeldItem(hand); + if(!player.canPlayerEdit(blockpos, facing, stack)) + return EnumActionResult.FAIL; + + //Get taken space and go through blocks + AxisAlignedBB takenSpace = getPlacedSpace(blockpos); + for(int x = (int)Math.floor(takenSpace.minX), xMax = (int)Math.ceil(takenSpace.maxX); x < xMax; x++) + for(int y = (int)Math.floor(takenSpace.minY), yMax = (int)Math.ceil(takenSpace.maxY); y < yMax; y++) + for(int z = (int)Math.floor(takenSpace.minZ), zMax = (int)Math.ceil(takenSpace.maxZ); z < zMax; z++) + { + BlockPos freeSpacePos = new BlockPos(x, y, z); + if(!world.isAirBlock(freeSpacePos)&&!world.getBlockState(freeSpacePos).getBlock().isReplaceable(world, freeSpacePos)) + return EnumActionResult.FAIL; + } + + //Check if there aren't any entities there + List list = world.getEntitiesWithinAABBExcludingEntity(null, takenSpace); + if(!list.isEmpty()) + return EnumActionResult.FAIL; + + //Place the entity + if(!world.isRemote) + { + ItemStack placedStack = ItemHandlerHelper.copyStackWithSize(stack, 1); + E placed = getPlacedEntity(world, blockpos.getX()+0.5, blockpos.getY(), blockpos.getZ()+0.5, placedStack, player.rotationYaw, player.rotationPitch); + //Clean the space + for(int x = (int)Math.floor(takenSpace.minX), xMax = (int)Math.ceil(takenSpace.maxX); x < xMax; x++) + for(int y = (int)Math.floor(takenSpace.minY), yMax = (int)Math.ceil(takenSpace.maxY); y < yMax; y++) + for(int z = (int)Math.floor(takenSpace.minZ), zMax = (int)Math.ceil(takenSpace.maxZ); z < zMax; z++) + world.setBlockToAir(new BlockPos(x, y, z)); + + //Spawn the entity + ItemMonsterPlacer.applyItemEntityDataToEntity(world, player, placedStack, placed); + world.spawnEntity(placed); + + //Play placing sound + SoundEvent placedSound = getPlacedSound(); + if(placedSound!=null) + world.playSound(null, blockpos, placedSound, SoundCategory.BLOCKS, 0.75f, 1f); + + //Mount the player on the entity + if(shouldPlayerMountAfterPlacing()) + player.startRiding(placed); + } + stack.shrink(1); + return EnumActionResult.SUCCESS; + } + + @Nonnull + AxisAlignedBB getPlacedSpace(BlockPos pos); + + @Nonnull + E getPlacedEntity(World world, double x, double y, double z, ItemStack stack, float playerYaw, float playerPitch); + + @Nullable + default SoundEvent getPlacedSound() + { + return IISounds.weaponPlaced; + } + + default boolean shouldPlayerMountAfterPlacing() + { + return true; + } +} diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/item/ItemIIUpgradableTool.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/item/ItemIIUpgradableTool.java index afaad9e9d..dd8784cc3 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/item/ItemIIUpgradableTool.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/item/ItemIIUpgradableTool.java @@ -4,6 +4,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import java.util.Arrays; +import java.util.EnumSet; +import java.util.List; +import java.util.stream.Collectors; + /** * @author Pabilo8 (pabilo@iiteam.net) * @since 27.01.2023 @@ -53,5 +58,19 @@ public boolean hasIIUpgrades(ItemStack stack, IIItemEnum... upgrade) return true; } + /** + * @param stack stack to check + * @param upgrade upgrade type + * @return list of all installed upgrades of the given type + */ + public & IIItemEnum> EnumSet listUpgrades(ItemStack stack, Class upgrade) + { + NBTTagCompound upgrades = getUpgrades(stack); + List collect = Arrays.stream(upgrade.getEnumConstants()) + .filter(enumConstant -> upgrades.hasKey(enumConstant.getName())) + .collect(Collectors.toList()); + return collect.isEmpty()?EnumSet.noneOf(upgrade): EnumSet.copyOf(collect); + } + } diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/multiblock/IIMultiblockInterfaces.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/multiblock/IIMultiblockInterfaces.java index e23f27347..aae7527d5 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/multiblock/IIMultiblockInterfaces.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/multiblock/IIMultiblockInterfaces.java @@ -219,7 +219,6 @@ default int getConstructionCost() } /** - * @param client Whether to get the client or server progress * @return Current construction progress in IF */ default int getCurrentConstruction(float partialTicks) diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/multiblock/TileEntityMultiblockIIBase.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/multiblock/TileEntityMultiblockIIBase.java index 7a5613972..0b1062525 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/multiblock/TileEntityMultiblockIIBase.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/multiblock/TileEntityMultiblockIIBase.java @@ -191,7 +191,11 @@ public void receiveMessageFromClient(NBTTagCompound message) super.receiveMessageFromClient(message); if(isDummy()) return; - NBTSerialisation.synchroniseFor(this, (tag, tile) -> tag.deserializeAll(tile, message, true)); + if(!message.hasNoTags()) + { + NBTSerialisation.synchroniseFor(this, (tag, tile) -> tag.deserializeAll(tile, message, true)); + sendNBTMessageClient(message); + } } @Override diff --git a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/raytracer/FactoryTracer.java b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/raytracer/FactoryTracer.java index 940dee474..daacf0222 100644 --- a/src/main/java/pl/pabilo8/immersiveintelligence/common/util/raytracer/FactoryTracer.java +++ b/src/main/java/pl/pabilo8/immersiveintelligence/common/util/raytracer/FactoryTracer.java @@ -44,7 +44,7 @@ private FactoryTracer(@Nullable AxisAlignedBB aabb) this.precision = Math.abs(this.aabb.getAverageEdgeLength()); } - public static FactoryTracer create(@Nonnull AxisAlignedBB aabb) + public static FactoryTracer create(@Nullable AxisAlignedBB aabb) { return new FactoryTracer(aabb); } diff --git a/src/main/resources/assets/immersiveintelligence/aabb/multiblock/ammunition_assembler.json b/src/main/resources/assets/immersiveintelligence/aabb/multiblock/ammunition_assembler.json index 60a9f6296..bd71d1642 100644 --- a/src/main/resources/assets/immersiveintelligence/aabb/multiblock/ammunition_assembler.json +++ b/src/main/resources/assets/immersiveintelligence/aabb/multiblock/ammunition_assembler.json @@ -61,12 +61,12 @@ }, "poi": { "lid": [49, 1], - "input_core": 87, - "input_casing": 79, - "item_input": [79, 87], - "item_output": [32, 72], - "redstone_input": 45, - "data_input": 43, + "input_core": 20, + "input_casing": 18, + "item_input": [18, 20], + "item_output": 34, + "redstone_input": 8, + "data_input": 14, "energy_input": 50 } } \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/aabb/multiblock/arithmetic_logic_machine.json b/src/main/resources/assets/immersiveintelligence/aabb/multiblock/arithmetic_logic_machine.json index 13d60af81..22b86b9cb 100644 --- a/src/main/resources/assets/immersiveintelligence/aabb/multiblock/arithmetic_logic_machine.json +++ b/src/main/resources/assets/immersiveintelligence/aabb/multiblock/arithmetic_logic_machine.json @@ -5,11 +5,13 @@ }, "poi": { "energy": 16, - "data": [2, 3], - "data_left": 2, - "data_right": 3, + "data_in": 2, + "data_out": 3, "front_panel": [], "crates": [], "door": [] + }, + "rotations": { + "data_out": "clockwise_90" } } \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/aabb/multiblock/projectile_workshop.json b/src/main/resources/assets/immersiveintelligence/aabb/multiblock/projectile_workshop.json index 693fcd698..4fa34712a 100644 --- a/src/main/resources/assets/immersiveintelligence/aabb/multiblock/projectile_workshop.json +++ b/src/main/resources/assets/immersiveintelligence/aabb/multiblock/projectile_workshop.json @@ -66,11 +66,12 @@ "46": ["energy_box", "energy_top"] }, "poi": { - "item_inputs": [15], + "item_inputs": [15, 22], "item_in": 15, + "component_in": 22, "item_out": 12, "energy": 46, "redstone": 9, - "component_fluid_in": [] + "component_fluid_in": [22] } } \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/latex_collector/extractor.json b/src/main/resources/assets/immersiveintelligence/animations/latex_collector/extractor.json new file mode 100644 index 000000000..051da927b --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/latex_collector/extractor.json @@ -0,0 +1,17 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "extractor": { + "visibility": [ + { + "time": 0, + "visibility": false + }, + { + "time": 1, + "visibility": true + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/latex_collector/place_bucket.json b/src/main/resources/assets/immersiveintelligence/animations/latex_collector/place_bucket.json new file mode 100644 index 000000000..015692ad9 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/latex_collector/place_bucket.json @@ -0,0 +1,63 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "bucket": { + "position": [ + { + "time": 0, + "transform": [0, 8, -14] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "alpha": [ + { + "time": 0, + "alpha": 0.0 + }, + { + "time": 1, + "alpha": 1.0 + } + ], + "visibility": [ + { + "time": 0, + "visibility": false + }, + { + "time": 0.1, + "visibility": true + }, + { + "time": 1.0, + "visibility": true + } + ] + }, + "handle": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [145, 0, 0] + } + ], + "alpha": [ + { + "time": 0, + "alpha": 0.0 + }, + { + "time": 1, + "alpha": 1.0 + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/aim_pitch.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/aim_pitch.json new file mode 100644 index 000000000..99a84d607 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/aim_pitch.json @@ -0,0 +1,219 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "gun": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 13.5] + }, + { + "time": 1, + "transform": [0, 0, -89] + } + ] + }, + "vertical_drive_guida_mechanismnce": { + "rotation": [ + { + "time": 0, + "transform": [90, 0, 0] + }, + { + "time": 1, + "transform": [-180, 0, 0] + } + ] + }, + "hans_gunner": { + "position": [ + { + "time": 0, + "transform": [-5, 2, 8] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-75, 0, 0] + }, + { + "time": 0.1, + "transform": [-65, 0, 0] + }, + { + "time": 0.2, + "transform": [-75, 0, 0] + }, + { + "time": 0.3, + "transform": [-65, 0, 0] + }, + { + "time": 0.4, + "transform": [-75, 0, 0] + }, + { + "time": 0.5, + "transform": [-65, 0, 0] + }, + { + "time": 0.6, + "transform": [-75, 0, 0] + }, + { + "time": 0.7, + "transform": [-65, 0, 0] + }, + { + "time": 0.8, + "transform": [-75, 0, 0] + }, + { + "time": 0.9, + "transform": [-65, 0, 0] + }, + { + "time": 1, + "transform": [-75, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0.4, + "transform": [-90, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0.4, + "transform": [-90, 15, 0] + } + ], + "position": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ] + }, + "wheel2": { + "rotation": [ + { + "time": 0.4, + "transform": [-65, 0, 0] + } + ], + "position": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ] + }, + "wheel1": { + "rotation": [ + { + "time": 0.4, + "transform": [-65, 0, 0] + } + ], + "position": [ + { + "time": 0.4, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/aim_yaw.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/aim_yaw.json new file mode 100644 index 000000000..54f9ee080 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/aim_yaw.json @@ -0,0 +1,281 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "turret": { + "rotation": [ + { + "time": 1, + "transform": [0, -360, 0] + } + ] + }, + "hans_gunner": { + "position": [ + { + "time": 0, + "transform": [-5, 2, 8] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, -52.5] + }, + { + "time": 0.05, + "transform": [-17.5, 0, -52.5] + }, + { + "time": 0.1, + "transform": [17.5, 0, -52.5] + }, + { + "time": 0.15, + "transform": [-17.5, 0, -52.5] + }, + { + "time": 0.2, + "transform": [17.5, 0, -52.5] + }, + { + "time": 0.25, + "transform": [-17.5, 0, -52.5] + }, + { + "time": 0.3, + "transform": [17.5, 0, -52.5] + }, + { + "time": 0.35, + "transform": [-17.5, 0, -52.5] + }, + { + "time": 0.4, + "transform": [17.5, 0, -52.5] + }, + { + "time": 0.45, + "transform": [-17.5, 0, -52.5] + }, + { + "time": 0.5, + "transform": [17.5, 0, -52.5] + }, + { + "time": 0.55, + "transform": [-17.5, 0, -52.5] + }, + { + "time": 0.6, + "transform": [17.5, 0, -52.5] + }, + { + "time": 0.65, + "transform": [-17.5, 0, -52.5] + }, + { + "time": 0.7, + "transform": [17.5, 0, -52.5] + }, + { + "time": 0.75, + "transform": [-17.5, 0, -52.5] + }, + { + "time": 0.8, + "transform": [17.5, 0, -52.5] + }, + { + "time": 0.85, + "transform": [-17.5, 0, -52.5] + }, + { + "time": 0.9, + "transform": [17.5, 0, -52.5] + }, + { + "time": 0.95, + "transform": [-17.5, 0, -52.5] + }, + { + "time": 1, + "transform": [0, 0, -52.5] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-75, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, -2] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 15, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "horizontal_drive_guida_mechanismnce": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, -720, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "wheel2": { + "rotation": [ + { + "time": 0, + "transform": [-65, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "wheel1": { + "rotation": [ + { + "time": 0, + "transform": [-65, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "turret_base": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 360, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/backward.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/backward.json new file mode 100644 index 000000000..99404e66a --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/backward.json @@ -0,0 +1,677 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "weapon": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, -7.5] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, -7.5] + } + ], + "position": [ + { + "time": 0.13636, + "transform": [0, 3, 0] + }, + { + "time": 0.86364, + "transform": [0, 3, 0] + } + ] + }, + "wheel2": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 7.5] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, -360] + }, + { + "time": 1, + "transform": [0, 0, -352.5] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "wheel1": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 7.5] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, -360] + }, + { + "time": 1, + "transform": [0, 0, -352.5] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 360, 0] + }, + { + "time": 0.09091, + "transform": [0, 320, 0] + }, + { + "time": 0.90909, + "transform": [0, 320, 0] + }, + { + "time": 1, + "transform": [0, 360, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [3, 0, 0] + }, + { + "time": 1, + "transform": [3, 0, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [2.5, 0, 0] + }, + { + "time": 0.86364, + "transform": [2.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.13636, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.86364, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.90909, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [0, -2, -3] + }, + { + "time": 0.90909, + "transform": [0, -2, -3] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [-97.5, 0, 0] + }, + { + "time": 0.13636, + "transform": [-97.52832, 4.95712, 0.65426] + }, + { + "time": 0.86364, + "transform": [-97.52832, 4.95712, 0.65426] + }, + { + "time": 0.90909, + "transform": [-97.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [0, 0, 0] + }, + { + "time": 0.90909, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [10, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [10, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [10, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [10, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [10, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [10, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [10, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [10, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [0, 30, 0] + }, + { + "time": 0.90909, + "transform": [0, 30, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [3, 0, 0] + }, + { + "time": 1, + "transform": [3, 0, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [22.5, 0, 0] + }, + { + "time": 0.13636, + "transform": [10, 0, 0] + }, + { + "time": 0.86364, + "transform": [10, 0, 0] + }, + { + "time": 0.90909, + "transform": [22.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [-109.8, 3.46, -6.66] + }, + { + "time": 0.86364, + "transform": [-109.8, 3.46, -6.66] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.00758, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [0.01711, -0.34304, 0.93917] + }, + { + "time": 0.86364, + "transform": [0.01711, -0.34304, 0.93917] + }, + { + "time": 0.99242, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [-44.20344, 15.85078, -18.12598] + }, + { + "time": 0.86364, + "transform": [-44.20344, 15.85078, -18.12598] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [-1, 0, -2] + }, + { + "time": 0.86364, + "transform": [-1, 0, -2] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [10, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [10, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [10, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [10, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [10, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [10, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [10, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [10, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/combat_position.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/combat_position.json new file mode 100644 index 000000000..1cd15b083 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/combat_position.json @@ -0,0 +1,589 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "wheel1": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 7.5] + }, + { + "time": 0.14286, + "transform": [0, 0, 0] + }, + { + "time": 0.21429, + "transform": [12.5, 0, 0] + }, + { + "time": 0.42857, + "transform": [-65, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.14286, + "transform": [0, 0, 0] + }, + { + "time": 0.42857, + "transform": [0, 0, 0] + } + ] + }, + "wheel2": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 7.5] + }, + { + "time": 0.14286, + "transform": [0, 0, 0] + }, + { + "time": 0.21429, + "transform": [12.5, 0, 0] + }, + { + "time": 0.42857, + "transform": [-65, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.14286, + "transform": [0, 0, 0] + }, + { + "time": 0.42857, + "transform": [0, 0, 0] + } + ] + }, + "weapon": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, -7.5] + }, + { + "time": 0.14286, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.14286, + "transform": [0, 3, 0] + }, + { + "time": 0.21429, + "transform": [0, 4, 0] + }, + { + "time": 0.42857, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.14286, + "transform": [0, 30, 0] + }, + { + "time": 0.57143, + "transform": [0, 30, 0] + }, + { + "time": 0.85714, + "transform": [0, 10, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [3, 0, 0] + }, + { + "time": 0.57143, + "transform": [0, 0, 0] + }, + { + "time": 0.85714, + "transform": [-12.8025, 5, 2.25743] + }, + { + "time": 1, + "transform": [-5, 2, 8] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.14286, + "transform": [22.5, 0, 0] + }, + { + "time": 0.21429, + "transform": [17.5, 0, 0] + }, + { + "time": 0.42857, + "transform": [27.5, 0, 0] + }, + { + "time": 0.57143, + "transform": [0, 0, 0] + }, + { + "time": 0.71429, + "transform": [17.5, 0, 0] + }, + { + "time": 0.85714, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.14286, + "transform": [-42.3, 3.46, -6.66] + }, + { + "time": 0.21429, + "transform": [-64.79972, 3.45883, -6.66017] + }, + { + "time": 0.42857, + "transform": [-42.29887, 3.45533, -6.66067] + }, + { + "time": 0.57143, + "transform": [-105.69284, 16.88547, 4.6653] + }, + { + "time": 0.71429, + "transform": [25.06034, -14.20241, -45.95225] + }, + { + "time": 0.85714, + "transform": [60.87796, -3.35075, -20.82326] + }, + { + "time": 1, + "transform": [0, 0, -52.5] + } + ], + "position": [ + { + "time": 0.01191, + "transform": [0, 0, 0] + }, + { + "time": 0.14286, + "transform": [0, 0, 1] + }, + { + "time": 0.21429, + "transform": [-0.20721, -0.83316, -0.80635] + }, + { + "time": 0.42857, + "transform": [0, 0, 1] + }, + { + "time": 0.57143, + "transform": [0, 0, 0] + }, + { + "time": 0.71429, + "transform": [2.6198, 0.87726, -1.36785] + }, + { + "time": 0.85714, + "transform": [0.74092, -1.22624, 1.07666] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.21429, + "transform": [-57.9927, 7.92542, -11.8883] + }, + { + "time": 0.42857, + "transform": [-102.9927, 7.92542, -11.8883] + }, + { + "time": 0.57143, + "transform": [0, 0, 0] + }, + { + "time": 0.71429, + "transform": [-88.7663, 27.48416, 0.2556] + }, + { + "time": 0.85714, + "transform": [-41.96754, 35.36828, -15.17956] + }, + { + "time": 1, + "transform": [-75, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.21429, + "transform": [-1, 0, -2] + }, + { + "time": 0.42857, + "transform": [0, 0, -1] + }, + { + "time": 0.57143, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, -2] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0.57143, + "transform": [0, 0, 0] + }, + { + "time": 0.71429, + "transform": [35, 0, 0] + }, + { + "time": 0.85714, + "transform": [-2.5, 0, 0] + }, + { + "time": 1, + "transform": [-90, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0.57143, + "transform": [0, 0, 0] + }, + { + "time": 0.71429, + "transform": [-27.5, 0, 0] + }, + { + "time": 0.85714, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [-90, 15, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.57143, + "transform": [0, 0, 0] + }, + { + "time": 0.71429, + "transform": [0, 3.29117, -1.19848] + }, + { + "time": 0.85714, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 360, 0] + }, + { + "time": 0.14286, + "transform": [0, 320, 0] + }, + { + "time": 0.42857, + "transform": [0, 320, 0] + }, + { + "time": 0.64286, + "transform": [0, 320, 0] + }, + { + "time": 0.78571, + "transform": [0, 360, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [3, 0, 0] + }, + { + "time": 0.42857, + "transform": [3, 0, 0] + }, + { + "time": 0.64286, + "transform": [-13.63297, 8, -3.51346] + }, + { + "time": 0.78571, + "transform": [-5, 2, -8] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.21429, + "transform": [2.5, 0, 0] + }, + { + "time": 0.42857, + "transform": [12.5, 0, 0] + }, + { + "time": 0.5, + "transform": [12.5, 0, 0] + }, + { + "time": 0.64286, + "transform": [-7.5, 0, 0] + }, + { + "time": 0.78571, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.21429, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.14286, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.21429, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.42857, + "transform": [-49.02, -11.44, 9.77] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.64286, + "transform": [-36.19714, 10.54794, -14.04397] + }, + { + "time": 0.78571, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.14286, + "transform": [0, -2, -3] + }, + { + "time": 0.42857, + "transform": [0, -2, -3] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.14286, + "transform": [-97.5, 0, 0] + }, + { + "time": 0.21429, + "transform": [-97.5, 0, 0] + }, + { + "time": 0.42857, + "transform": [-75, 0, 0] + }, + { + "time": 0.5, + "transform": [-75, 0, 0] + }, + { + "time": 0.64286, + "transform": [21.40051, 28.53623, 32.94098] + }, + { + "time": 0.78571, + "transform": [-28.93305, 27.81706, 2.04579] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.14286, + "transform": [0, 0, 0] + }, + { + "time": 0.64286, + "transform": [1.30514, -1.37316, 0.64111] + }, + { + "time": 0.78571, + "transform": [0, 0, -1] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0.42857, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [32.5, 0, 0] + }, + { + "time": 0.64286, + "transform": [5, 0, 0] + }, + { + "time": 0.78571, + "transform": [-90, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0.42857, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [-22.5, 0, 0] + }, + { + "time": 0.64286, + "transform": [0, 0, 0] + }, + { + "time": 0.78571, + "transform": [-90, 0, 0] + } + ], + "position": [ + { + "time": 0.42857, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 4.84357, -1.2409] + }, + { + "time": 0.64286, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/fire1.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/fire1.json new file mode 100644 index 000000000..ed81c01b6 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/fire1.json @@ -0,0 +1,165 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "turret": { + "rotation": [ + { + "time": 0.3332, + "transform": [0, 0, 0] + }, + { + "time": 0.6668, + "transform": [0, 0, -1] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "cannon1": { + "position": [ + { + "time": 0.1668, + "transform": [0, 0, 0] + }, + { + "time": 0.6668, + "transform": [5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner": { + "position": [ + { + "time": 0, + "transform": [-5, 2, 8] + } + ] + }, + "hans_gunner_head": { + "rotation": [ + { + "time": 0.3332, + "transform": [0, 0, 0] + }, + { + "time": 0.6668, + "transform": [3, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, -52.5] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-75, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, -2] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 15, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "position": [ + { + "time": 0, + "transform": [-5, 2, -8] + } + ] + }, + "hans_commander_head": { + "rotation": [ + { + "time": 0.3332, + "transform": [0, 0, 0] + }, + { + "time": 0.6668, + "transform": [4, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-28.93305, 27.81706, 2.04579] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, -1] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/fire2.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/fire2.json new file mode 100644 index 000000000..c911b90e4 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/fire2.json @@ -0,0 +1,165 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "turret": { + "rotation": [ + { + "time": 0.3332, + "transform": [0, 0, 0] + }, + { + "time": 0.6668, + "transform": [0, 0, -1] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "cannon2": { + "position": [ + { + "time": 0.1668, + "transform": [0, 0, 0] + }, + { + "time": 0.6668, + "transform": [5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner": { + "position": [ + { + "time": 0, + "transform": [-5, 2, 8] + } + ] + }, + "hans_gunner_head": { + "rotation": [ + { + "time": 0.3332, + "transform": [0, 0, 0] + }, + { + "time": 0.6668, + "transform": [3, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, -52.5] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-75, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, -2] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 15, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "position": [ + { + "time": 0, + "transform": [-5, 2, -8] + } + ] + }, + "hans_commander_head": { + "rotation": [ + { + "time": 0.3332, + "transform": [0, 0, 0] + }, + { + "time": 0.6668, + "transform": [4, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-28.93305, 27.81706, 2.04579] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, -1] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/fire_pedal.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/fire_pedal.json new file mode 100644 index 000000000..030c86e43 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/fire_pedal.json @@ -0,0 +1,43 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 15, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [-0.25882, 0, -1.96593] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "firing_pedal": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 25] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/forward.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/forward.json new file mode 100644 index 000000000..db149f73c --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/forward.json @@ -0,0 +1,677 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "weapon": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, -7.5] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, -7.5] + } + ], + "position": [ + { + "time": 0.13636, + "transform": [0, 3, 0] + }, + { + "time": 0.86364, + "transform": [0, 3, 0] + } + ] + }, + "wheel2": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 7.5] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 360] + }, + { + "time": 1, + "transform": [0, 0, 367.5] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "wheel1": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 7.5] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 360] + }, + { + "time": 1, + "transform": [0, 0, 367.5] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 360, 0] + }, + { + "time": 0.09091, + "transform": [0, 320, 0] + }, + { + "time": 0.90909, + "transform": [0, 320, 0] + }, + { + "time": 1, + "transform": [0, 360, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [3, 0, 0] + }, + { + "time": 1, + "transform": [3, 0, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [2.5, 0, 0] + }, + { + "time": 0.86364, + "transform": [2.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.13636, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.86364, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.90909, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [0, -2, -3] + }, + { + "time": 0.90909, + "transform": [0, -2, -3] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [-97.5, 0, 0] + }, + { + "time": 0.13636, + "transform": [-97.52832, 4.95712, 0.65426] + }, + { + "time": 0.86364, + "transform": [-97.52832, 4.95712, 0.65426] + }, + { + "time": 0.90909, + "transform": [-97.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [0, 0, 0] + }, + { + "time": 0.90909, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [10, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [10, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [10, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [10, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [10, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [10, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [10, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [10, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [0, 30, 0] + }, + { + "time": 0.90909, + "transform": [0, 30, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [3, 0, 0] + }, + { + "time": 1, + "transform": [3, 0, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [22.5, 0, 0] + }, + { + "time": 0.13636, + "transform": [10, 0, 0] + }, + { + "time": 0.86364, + "transform": [10, 0, 0] + }, + { + "time": 0.90909, + "transform": [22.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [-109.8, 3.46, -6.66] + }, + { + "time": 0.86364, + "transform": [-109.8, 3.46, -6.66] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.00758, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [0.01711, -0.34304, 0.93917] + }, + { + "time": 0.86364, + "transform": [0.01711, -0.34304, 0.93917] + }, + { + "time": 0.99242, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [-44.20344, 15.85078, -18.12598] + }, + { + "time": 0.86364, + "transform": [-44.20344, 15.85078, -18.12598] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [-1, 0, -2] + }, + { + "time": 0.86364, + "transform": [-1, 0, -2] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [10, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [10, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [10, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [10, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [10, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [10, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [10, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [10, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/hook.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/hook.json new file mode 100644 index 000000000..fc459a07b --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/hook.json @@ -0,0 +1,527 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "weapon": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, -7.5] + }, + { + "time": 0.33333, + "transform": [0, 0, 12.5] + }, + { + "time": 0.66667, + "transform": [0, 0, 12.5] + }, + { + "time": 0.75924, + "transform": [0, 0, 5] + } + ], + "position": [ + { + "time": 0.33333, + "transform": [0, 3, 0] + }, + { + "time": 0.66667, + "transform": [5, 3, 0] + } + ] + }, + "wheel2": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 7.5] + }, + { + "time": 0.33333, + "transform": [0, 0, -12.5] + }, + { + "time": 0.66667, + "transform": [0, 0, -62.5] + }, + { + "time": 0.75924, + "transform": [0, 0, -55] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [0, 0, 0] + } + ] + }, + "wheel1": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 7.5] + }, + { + "time": 0.33333, + "transform": [0, 0, -12.5] + }, + { + "time": 0.66667, + "transform": [0, 0, -62.5] + }, + { + "time": 0.75924, + "transform": [0, 0, -55] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 360, 0] + }, + { + "time": 0.22222, + "transform": [0, 320, 0] + }, + { + "time": 0.75924, + "transform": [0, 320, 0] + }, + { + "time": 1, + "transform": [0, 360, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [3, 0, 0] + }, + { + "time": 0.33333, + "transform": [3, 0, 0] + }, + { + "time": 0.66667, + "transform": [8, 0, 0] + }, + { + "time": 0.75924, + "transform": [8, 0, 0] + }, + { + "time": 1, + "transform": [8, 0, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [10, 0, 0] + }, + { + "time": 0.66667, + "transform": [10, 0, 0] + }, + { + "time": 0.75924, + "transform": [15, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.33333, + "transform": [0, 0, 0] + }, + { + "time": 0.75924, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.22222, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.33333, + "transform": [-64.02, -11.44, 9.77] + }, + { + "time": 0.75924, + "transform": [-64.02, -11.44, 9.77] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.22222, + "transform": [0, -2, -3] + }, + { + "time": 0.75924, + "transform": [0, -2, -3] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.22222, + "transform": [-97.5, 0, 0] + }, + { + "time": 0.33333, + "transform": [-97.7614, 14.8687, 2.00307] + }, + { + "time": 0.75924, + "transform": [-97.76, 14.87, 2] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.22222, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [-0.26147, 0.39009, -2.96302] + }, + { + "time": 0.75924, + "transform": [0.25764, 0.13784, -1.04468] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0.33333, + "transform": [0, 0, 0] + }, + { + "time": 0.46298, + "transform": [-16.25, 0, 0] + }, + { + "time": 0.51853, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.66667, + "transform": [0, 0, 0] + }, + { + "time": 0.75924, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.75924, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0.33333, + "transform": [0, 0, 0] + }, + { + "time": 0.46298, + "transform": [21.25, 0, 0] + }, + { + "time": 0.51853, + "transform": [12.5, 0, 0] + }, + { + "time": 0.66667, + "transform": [0, 0, 0] + }, + { + "time": 0.75924, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.75924, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.22222, + "transform": [0, 30, 0] + }, + { + "time": 0.33333, + "transform": [0, 30, 0] + }, + { + "time": 0.75924, + "transform": [0, 30, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [3, 0, 0] + }, + { + "time": 0.33333, + "transform": [3, 0, 0] + }, + { + "time": 0.66667, + "transform": [8, 0, 0] + }, + { + "time": 0.75924, + "transform": [8, 0, 0] + }, + { + "time": 1, + "transform": [8, 0, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.22222, + "transform": [22.5, 0, 0] + }, + { + "time": 0.33333, + "transform": [12.5, 0, 0] + }, + { + "time": 0.75924, + "transform": [17.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.75924, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [-109.8, 3.46, -6.66] + }, + { + "time": 0.75924, + "transform": [-109.8, 3.46, -6.66] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [-0.03423, 0.68608, -1.87833] + }, + { + "time": 0.75924, + "transform": [0.00423, 0.00392, -0.00167] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [-53.05629, 19.30209, -21.92176] + }, + { + "time": 0.75924, + "transform": [-53.06, 19.3, -21.92] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [-1, 0, -2] + }, + { + "time": 0.75924, + "transform": [-1, 0, -2] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0.33333, + "transform": [0, 0, 0] + }, + { + "time": 0.46298, + "transform": [21.25, 0, 0] + }, + { + "time": 0.51853, + "transform": [12.5, 0, 0] + }, + { + "time": 0.66667, + "transform": [0, 0, 0] + }, + { + "time": 0.75924, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.75924, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0.33333, + "transform": [0, 0, 0] + }, + { + "time": 0.46298, + "transform": [-16.25, 0, 0] + }, + { + "time": 0.51853, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.66667, + "transform": [0, 0, 0] + }, + { + "time": 0.75924, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.75924, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/infantry_position.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/infantry_position.json new file mode 100644 index 000000000..938cec55f --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/infantry_position.json @@ -0,0 +1,797 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "wheel1": { + "rotation": [ + { + "time": 0, + "transform": [-65, 0, 0] + }, + { + "time": 0.66667, + "transform": [-65, 0, 0] + }, + { + "time": 0.83333, + "transform": [12.5, 0, 0] + }, + { + "time": 0.88889, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 7.5] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.66667, + "transform": [0, 0, 0] + }, + { + "time": 0.88889, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "wheel2": { + "rotation": [ + { + "time": 0, + "transform": [-65, 0, 0] + }, + { + "time": 0.66667, + "transform": [-65, 0, 0] + }, + { + "time": 0.83333, + "transform": [12.5, 0, 0] + }, + { + "time": 0.88889, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 7.5] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.66667, + "transform": [0, 0, 0] + }, + { + "time": 0.88889, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "weapon": { + "rotation": [ + { + "time": 0.88889, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, -7.5] + } + ], + "position": [ + { + "time": 0.66667, + "transform": [0, 0, 0] + }, + { + "time": 0.83333, + "transform": [0, 4, 0] + }, + { + "time": 0.88889, + "transform": [0, 3, 0] + } + ] + }, + "vertical_drive_guida_mechanismnce": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner": { + "rotation": [ + { + "time": 0.11111, + "transform": [0, 0, 0] + }, + { + "time": 0.22222, + "transform": [0, -30, 0] + }, + { + "time": 0.27778, + "transform": [0, -49.17, 0] + }, + { + "time": 0.38889, + "transform": [0, -122.5, 0] + }, + { + "time": 0.55556, + "transform": [0, 30, 0] + }, + { + "time": 0.88889, + "transform": [0, 30, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.11111, + "transform": [-5, 2, 8] + }, + { + "time": 0.22222, + "transform": [-8, 7, 8] + }, + { + "time": 0.27778, + "transform": [-8, 7, 8] + }, + { + "time": 0.38889, + "transform": [-2, -1, -3] + }, + { + "time": 0.55556, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [3, 0, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0.22222, + "transform": [0, 0, 0] + }, + { + "time": 0.27778, + "transform": [0, -45, 0] + }, + { + "time": 0.38889, + "transform": [0, 0, 0] + }, + { + "time": 0.55556, + "transform": [0, 0, 0] + }, + { + "time": 0.66667, + "transform": [27.5, 0, 0] + }, + { + "time": 0.83333, + "transform": [17.5, 0, 0] + }, + { + "time": 0.88889, + "transform": [22.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_head": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.11111, + "transform": [0, -65, 0] + }, + { + "time": 0.22222, + "transform": [0, -65, 0] + }, + { + "time": 0.27778, + "transform": [0, -30, 0] + }, + { + "time": 0.44444, + "transform": [0, -30, 0] + }, + { + "time": 0.55556, + "transform": [20, 30, 0] + }, + { + "time": 0.66667, + "transform": [5, 30, 0] + }, + { + "time": 0.88889, + "transform": [5, 30, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, -52.5] + }, + { + "time": 0.05556, + "transform": [-60.16243, -19.20748, -82.33757] + }, + { + "time": 0.22222, + "transform": [7.77162, -24.29075, -42.19892] + }, + { + "time": 0.27778, + "transform": [7.77, -24.29, -42.2] + }, + { + "time": 0.33333, + "transform": [-54.73, -24.29, -42.2] + }, + { + "time": 0.38889, + "transform": [0, 0, 0] + }, + { + "time": 0.55556, + "transform": [0, 0, 0] + }, + { + "time": 0.66667, + "transform": [-42.29887, 3.45533, -6.66067] + }, + { + "time": 0.88889, + "transform": [-42.3, 3.46, -6.66] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.38889, + "transform": [0, 0, 0] + }, + { + "time": 0.55556, + "transform": [0, 0, 0] + }, + { + "time": 0.66667, + "transform": [0, 0, 1] + }, + { + "time": 0.88889, + "transform": [0, 0, 1] + }, + { + "time": 0.99073, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-75, 0, 0] + }, + { + "time": 0.22222, + "transform": [0, 0, 0] + }, + { + "time": 0.38889, + "transform": [80, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.55556, + "transform": [0, 0, 0] + }, + { + "time": 0.66667, + "transform": [-102.9927, 7.92542, -11.8883] + }, + { + "time": 0.83333, + "transform": [-115.4927, 7.92542, -11.8883] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, -2] + }, + { + "time": 0.22222, + "transform": [0, 0, 0] + }, + { + "time": 0.27778, + "transform": [0, 1, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.55556, + "transform": [0, 0, 0] + }, + { + "time": 0.66667, + "transform": [0, 0, -1] + }, + { + "time": 0.83333, + "transform": [-1, 0, -2] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + }, + { + "time": 0.11111, + "transform": [-47.61943, -67.78684, 16.81776] + }, + { + "time": 0.22222, + "transform": [-24.1603, -65.61623, -14.67299] + }, + { + "time": 0.27778, + "transform": [-46.6603, -65.61623, -14.67299] + }, + { + "time": 0.33333, + "transform": [3.3397, -65.61623, -14.67299] + }, + { + "time": 0.38889, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.38889, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 15, 0] + }, + { + "time": 0.22222, + "transform": [-35, 0, 0] + }, + { + "time": 0.33333, + "transform": [-41.5783, -43.25892, 0.69981] + }, + { + "time": 0.38889, + "transform": [0, 0, 0] + }, + { + "time": 0.46296, + "transform": [32.5, 0, 0] + }, + { + "time": 0.55556, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.22222, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [1, 0, -2] + }, + { + "time": 0.38889, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.11111, + "transform": [0, 47.5, 0] + }, + { + "time": 0.22222, + "transform": [0, 47.5, 0] + }, + { + "time": 0.27778, + "transform": [0, 75, 0] + }, + { + "time": 0.38889, + "transform": [0, 127.5, 0] + }, + { + "time": 0.5, + "transform": [0, 320, 0] + }, + { + "time": 0.88889, + "transform": [0, 320, 0] + }, + { + "time": 1, + "transform": [0, 360, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [-5, 2, -8] + }, + { + "time": 0.11111, + "transform": [-8, 2, -8] + }, + { + "time": 0.22222, + "transform": [-8, 2, -8] + }, + { + "time": 0.27778, + "transform": [-8, 6, -8] + }, + { + "time": 0.38889, + "transform": [-3, 0, -2] + }, + { + "time": 0.5, + "transform": [3, 0, 0] + }, + { + "time": 0.66667, + "transform": [3, 0, 0] + }, + { + "time": 1, + "transform": [3, 0, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.61111, + "transform": [12.5, 0, 0] + }, + { + "time": 0.66667, + "transform": [12.5, 0, 0] + }, + { + "time": 0.83333, + "transform": [2.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_head": { + "rotation": [ + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.55556, + "transform": [17.5, 0, 0] + }, + { + "time": 0.88889, + "transform": [17.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0.27778, + "transform": [0, 0, 0] + }, + { + "time": 0.38889, + "transform": [35, 0, 0] + }, + { + "time": 0.43518, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.61111, + "transform": [-49.01916, -11.43563, 9.77243] + }, + { + "time": 0.66667, + "transform": [-49.02, -11.44, 9.77] + }, + { + "time": 0.83333, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.88889, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.22222, + "transform": [0, 0, 0] + }, + { + "time": 0.27778, + "transform": [0, 2, 0] + }, + { + "time": 0.38889, + "transform": [0, 0, 0] + }, + { + "time": 0.61111, + "transform": [0, -2, -3] + }, + { + "time": 0.88889, + "transform": [0, -2, -3] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-28.93305, 27.81706, 2.04579] + }, + { + "time": 0.11111, + "transform": [-34.2538, -1.59415, 44.16618] + }, + { + "time": 0.27778, + "transform": [20.7462, -1.59415, 44.16618] + }, + { + "time": 0.38889, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.61111, + "transform": [-75, 0, 0] + }, + { + "time": 0.66667, + "transform": [-75, 0, 0] + }, + { + "time": 0.83333, + "transform": [-97.5, 0, 0] + }, + { + "time": 0.88889, + "transform": [-97.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, -1] + }, + { + "time": 0.27778, + "transform": [0, 0, 0] + }, + { + "time": 0.38889, + "transform": [0, 0, 0] + }, + { + "time": 0.88889, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + }, + { + "time": 0.22222, + "transform": [-75, 0, 0] + }, + { + "time": 0.27778, + "transform": [-40, 0, 0] + }, + { + "time": 0.38889, + "transform": [0, 0, 0] + }, + { + "time": 0.43518, + "transform": [-25, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + }, + { + "time": 0.11111, + "transform": [-90, 0, 0] + }, + { + "time": 0.22222, + "transform": [-62.5, 37.5, 0] + }, + { + "time": 0.27778, + "transform": [-50, 37.5, 0] + }, + { + "time": 0.33333, + "transform": [12.5, 37.5, 0] + }, + { + "time": 0.38889, + "transform": [30, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/left.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/left.json new file mode 100644 index 000000000..d0fe905e2 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/left.json @@ -0,0 +1,677 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "weapon": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, -7.5] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, -7.5] + } + ], + "position": [ + { + "time": 0.13636, + "transform": [0, 3, 0] + }, + { + "time": 0.86364, + "transform": [0, 3, 0] + } + ] + }, + "wheel2": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 7.5] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, -360] + }, + { + "time": 1, + "transform": [0, 0, -352.5] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "wheel1": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 7.5] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 360] + }, + { + "time": 1, + "transform": [0, 0, 367.5] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 360, 0] + }, + { + "time": 0.09091, + "transform": [0, 320, 0] + }, + { + "time": 0.90909, + "transform": [0, 320, 0] + }, + { + "time": 1, + "transform": [0, 360, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [3, 0, 0] + }, + { + "time": 1, + "transform": [3, 0, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [2.5, 0, 0] + }, + { + "time": 0.86364, + "transform": [2.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.13636, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.86364, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.90909, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [0, -2, -3] + }, + { + "time": 0.90909, + "transform": [0, -2, -3] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [-97.5, 0, 0] + }, + { + "time": 0.13636, + "transform": [-97.52832, 4.95712, 0.65426] + }, + { + "time": 0.86364, + "transform": [-97.52832, 4.95712, 0.65426] + }, + { + "time": 0.90909, + "transform": [-97.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [0, 0, 0] + }, + { + "time": 0.90909, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [10, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [10, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [10, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [10, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [10, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [10, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [10, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [10, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [0, 30, 0] + }, + { + "time": 0.90909, + "transform": [0, 30, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [3, 0, 0] + }, + { + "time": 1, + "transform": [3, 0, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [22.5, 0, 0] + }, + { + "time": 0.13636, + "transform": [10, 0, 0] + }, + { + "time": 0.86364, + "transform": [10, 0, 0] + }, + { + "time": 0.90909, + "transform": [22.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [-109.8, 3.46, -6.66] + }, + { + "time": 0.86364, + "transform": [-109.8, 3.46, -6.66] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.00758, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [0.01711, -0.34304, 0.93917] + }, + { + "time": 0.86364, + "transform": [0.01711, -0.34304, 0.93917] + }, + { + "time": 0.99242, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [-44.20344, 15.85078, -18.12598] + }, + { + "time": 0.86364, + "transform": [-44.20344, 15.85078, -18.12598] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [-1, 0, -2] + }, + { + "time": 0.86364, + "transform": [-1, 0, -2] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [10, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [10, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [10, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [10, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [10, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [10, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [10, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [10, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/load1.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/load1.json new file mode 100644 index 000000000..06e19666e --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/load1.json @@ -0,0 +1,197 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "magazine": { + "position": [ + { + "time": 0.25, + "transform": [0, 6, 0] + }, + { + "time": 0.38887, + "transform": [0, 6, 0] + }, + { + "time": 0.58333, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [0, 0, 0] + } + ], + "scale": [ + { + "time": 0.25, + "transform": [0, 0, 0] + }, + { + "time": 0.38887, + "transform": [1, 1, 1] + } + ] + }, + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "position": [ + { + "time": 0, + "transform": [-5, 2, -8] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-28.93305, 27.81706, 2.04579] + }, + { + "time": 0.25, + "transform": [-124.51834, -3.56781, -6.71413] + }, + { + "time": 0.38887, + "transform": [-124.51834, -3.56781, -6.71413] + }, + { + "time": 0.58333, + "transform": [-87.01834, -3.56781, -6.71413] + }, + { + "time": 0.75, + "transform": [-87.01834, -3.56781, -6.71413] + }, + { + "time": 1, + "transform": [-28.93305, 27.81706, 2.04579] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, -1] + }, + { + "time": 0.25, + "transform": [0, 0, -4] + }, + { + "time": 0.38887, + "transform": [0, 0, -4] + }, + { + "time": 0.58333, + "transform": [0, 0, -3] + }, + { + "time": 0.75, + "transform": [0, 0, -3] + }, + { + "time": 1, + "transform": [0, 0, -1] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/load2.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/load2.json new file mode 100644 index 000000000..5f6906c7d --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/load2.json @@ -0,0 +1,205 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "position": [ + { + "time": 0, + "transform": [-5, 2, -8] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-28.93305, 27.81706, 2.04579] + }, + { + "time": 0.14286, + "transform": [-87.01834, -3.56781, -6.71413] + }, + { + "time": 0.28571, + "transform": [-130.5888, -29.62566, -27.21733] + }, + { + "time": 0.40474, + "transform": [-130.5888, -29.62566, -27.21733] + }, + { + "time": 0.57143, + "transform": [-101.19583, -38.51104, -4.52898] + }, + { + "time": 0.71429, + "transform": [-87.01834, -3.56781, -6.71413] + }, + { + "time": 1, + "transform": [-28.93305, 27.81706, 2.04579] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, -1] + }, + { + "time": 0.14286, + "transform": [0, 0, 0] + }, + { + "time": 0.28571, + "transform": [0, 0, -5] + }, + { + "time": 0.40474, + "transform": [0, 0, -5] + }, + { + "time": 0.57143, + "transform": [0, 0, -4] + }, + { + "time": 0.71429, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, -1] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + }, + "magazine2": { + "position": [ + { + "time": 0.28571, + "transform": [0, 6, 0] + }, + { + "time": 0.40474, + "transform": [0, 6, 0] + }, + { + "time": 0.57143, + "transform": [0, 0, 0] + }, + { + "time": 0.71429, + "transform": [0, 0, 0] + } + ], + "scale": [ + { + "time": 0.28571, + "transform": [0, 0, 0] + }, + { + "time": 0.40474, + "transform": [1, 1, 1] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/right.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/right.json new file mode 100644 index 000000000..c7bf1b2bb --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/right.json @@ -0,0 +1,677 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "weapon": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, -7.5] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, -7.5] + } + ], + "position": [ + { + "time": 0.13636, + "transform": [0, 3, 0] + }, + { + "time": 0.86364, + "transform": [0, 3, 0] + } + ] + }, + "wheel2": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 7.5] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 360] + }, + { + "time": 1, + "transform": [0, 0, 367.5] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "wheel1": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 7.5] + }, + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, -360] + }, + { + "time": 1, + "transform": [0, 0, -352.5] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 360, 0] + }, + { + "time": 0.09091, + "transform": [0, 320, 0] + }, + { + "time": 0.90909, + "transform": [0, 320, 0] + }, + { + "time": 1, + "transform": [0, 360, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [3, 0, 0] + }, + { + "time": 1, + "transform": [3, 0, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [2.5, 0, 0] + }, + { + "time": 0.86364, + "transform": [2.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.13636, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.86364, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 0.90909, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [0, -2, -3] + }, + { + "time": 0.90909, + "transform": [0, -2, -3] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [-97.5, 0, 0] + }, + { + "time": 0.13636, + "transform": [-97.52832, 4.95712, 0.65426] + }, + { + "time": 0.86364, + "transform": [-97.52832, 4.95712, 0.65426] + }, + { + "time": 0.90909, + "transform": [-97.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [0, 0, 0] + }, + { + "time": 0.90909, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [10, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [10, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [10, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [10, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [10, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [10, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [10, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [10, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [0, 30, 0] + }, + { + "time": 0.90909, + "transform": [0, 30, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [3, 0, 0] + }, + { + "time": 1, + "transform": [3, 0, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.09091, + "transform": [22.5, 0, 0] + }, + { + "time": 0.13636, + "transform": [10, 0, 0] + }, + { + "time": 0.86364, + "transform": [10, 0, 0] + }, + { + "time": 0.90909, + "transform": [22.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [-109.8, 3.46, -6.66] + }, + { + "time": 0.86364, + "transform": [-109.8, 3.46, -6.66] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.00758, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [0.01711, -0.34304, 0.93917] + }, + { + "time": 0.86364, + "transform": [0.01711, -0.34304, 0.93917] + }, + { + "time": 0.99242, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [-44.20344, 15.85078, -18.12598] + }, + { + "time": 0.86364, + "transform": [-44.20344, 15.85078, -18.12598] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.13636, + "transform": [-1, 0, -2] + }, + { + "time": 0.86364, + "transform": [-1, 0, -2] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [10, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [10, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [10, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [10, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0.13636, + "transform": [0, 0, 0] + }, + { + "time": 0.18182, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.22727, + "transform": [0, 0, 0] + }, + { + "time": 0.27273, + "transform": [10, 0, 0] + }, + { + "time": 0.31818, + "transform": [0, 0, 0] + }, + { + "time": 0.36364, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.40909, + "transform": [0, 0, 0] + }, + { + "time": 0.45455, + "transform": [10, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.54545, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.59091, + "transform": [0, 0, 0] + }, + { + "time": 0.63636, + "transform": [10, 0, 0] + }, + { + "time": 0.68182, + "transform": [0, 0, 0] + }, + { + "time": 0.72727, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.77273, + "transform": [0, 0, 0] + }, + { + "time": 0.81818, + "transform": [10, 0, 0] + }, + { + "time": 0.86364, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/unhook.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/unhook.json new file mode 100644 index 000000000..653ac54b6 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/unhook.json @@ -0,0 +1,527 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "weapon": { + "rotation": [ + { + "time": 0.24076, + "transform": [0, 0, 5] + }, + { + "time": 0.33333, + "transform": [0, 0, 12.5] + }, + { + "time": 0.66667, + "transform": [0, 0, 12.5] + }, + { + "time": 1, + "transform": [0, 0, -7.5] + } + ], + "position": [ + { + "time": 0.33333, + "transform": [5, 3, 0] + }, + { + "time": 0.66667, + "transform": [0, 3, 0] + } + ] + }, + "wheel2": { + "rotation": [ + { + "time": 0.24076, + "transform": [0, 0, -55] + }, + { + "time": 0.33333, + "transform": [0, 0, -62.5] + }, + { + "time": 0.66667, + "transform": [0, 0, -12.5] + }, + { + "time": 1, + "transform": [0, 0, 7.5] + } + ], + "position": [ + { + "time": 0.66667, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "wheel1": { + "rotation": [ + { + "time": 0.24076, + "transform": [0, 0, -55] + }, + { + "time": 0.33333, + "transform": [0, 0, -62.5] + }, + { + "time": 0.66667, + "transform": [0, 0, -12.5] + }, + { + "time": 1, + "transform": [0, 0, 7.5] + } + ], + "position": [ + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 360, 0] + }, + { + "time": 0.24076, + "transform": [0, 320, 0] + }, + { + "time": 0.77778, + "transform": [0, 320, 0] + }, + { + "time": 1, + "transform": [0, 360, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [8, 0, 0] + }, + { + "time": 0.24076, + "transform": [8, 0, 0] + }, + { + "time": 0.33333, + "transform": [8, 0, 0] + }, + { + "time": 0.66667, + "transform": [3, 0, 0] + }, + { + "time": 1, + "transform": [3, 0, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.24076, + "transform": [15, 0, 0] + }, + { + "time": 0.33333, + "transform": [10, 0, 0] + }, + { + "time": 0.66667, + "transform": [10, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.24076, + "transform": [0, 0, 0] + }, + { + "time": 0.66667, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.24076, + "transform": [-64.02, -11.44, 9.77] + }, + { + "time": 0.66667, + "transform": [-64.02, -11.44, 9.77] + }, + { + "time": 0.77778, + "transform": [-61.52, -11.44, 9.77] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.24076, + "transform": [0, -2, -3] + }, + { + "time": 0.77778, + "transform": [0, -2, -3] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.24076, + "transform": [-97.76, 14.87, 2] + }, + { + "time": 0.66667, + "transform": [-97.7614, 14.8687, 2.00307] + }, + { + "time": 0.77778, + "transform": [-97.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.24076, + "transform": [0.25764, 0.13784, -1.04468] + }, + { + "time": 0.66667, + "transform": [-0.26147, 0.39009, -2.96302] + }, + { + "time": 0.77778, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0.24076, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [0, 0, 0] + }, + { + "time": 0.48147, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.53702, + "transform": [-16.25, 0, 0] + }, + { + "time": 0.66667, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.24076, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0.24076, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [0, 0, 0] + }, + { + "time": 0.48147, + "transform": [12.5, 0, 0] + }, + { + "time": 0.53702, + "transform": [21.25, 0, 0] + }, + { + "time": 0.66667, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.24076, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.24076, + "transform": [0, 30, 0] + }, + { + "time": 0.66667, + "transform": [0, 30, 0] + }, + { + "time": 0.77778, + "transform": [0, 30, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [8, 0, 0] + }, + { + "time": 0.24076, + "transform": [8, 0, 0] + }, + { + "time": 0.33333, + "transform": [8, 0, 0] + }, + { + "time": 0.66667, + "transform": [3, 0, 0] + }, + { + "time": 1, + "transform": [3, 0, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.24076, + "transform": [17.5, 0, 0] + }, + { + "time": 0.66667, + "transform": [12.5, 0, 0] + }, + { + "time": 0.77778, + "transform": [22.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.24076, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.24076, + "transform": [-109.8, 3.46, -6.66] + }, + { + "time": 0.66667, + "transform": [-109.8, 3.46, -6.66] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.24076, + "transform": [0.00423, 0.00392, -0.00167] + }, + { + "time": 0.66667, + "transform": [-0.03423, 0.68608, -1.87833] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.24076, + "transform": [-53.06, 19.3, -21.92] + }, + { + "time": 0.66667, + "transform": [-53.05629, 19.30209, -21.92176] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.24076, + "transform": [-1, 0, -2] + }, + { + "time": 0.66667, + "transform": [-1, 0, -2] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0.24076, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [0, 0, 0] + }, + { + "time": 0.48147, + "transform": [12.5, 0, 0] + }, + { + "time": 0.53702, + "transform": [21.25, 0, 0] + }, + { + "time": 0.66667, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.24076, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0.24076, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [0, 0, 0] + }, + { + "time": 0.48147, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.53702, + "transform": [-16.25, 0, 0] + }, + { + "time": 0.66667, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.24076, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/unload1.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/unload1.json new file mode 100644 index 000000000..26b8b013b --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/unload1.json @@ -0,0 +1,197 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "magazine": { + "position": [ + { + "time": 0.16667, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 6, 0] + }, + { + "time": 0.66667, + "transform": [0, 6, 0] + } + ], + "scale": [ + { + "time": 0.5, + "transform": [1, 1, 1] + }, + { + "time": 0.66667, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "position": [ + { + "time": 0, + "transform": [-5, 2, -8] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-28.93305, 27.81706, 2.04579] + }, + { + "time": 0.16667, + "transform": [-87.01834, -3.56781, -6.71413] + }, + { + "time": 0.33333, + "transform": [-87.01834, -3.56781, -6.71413] + }, + { + "time": 0.5, + "transform": [-124.51834, -3.56781, -6.71413] + }, + { + "time": 0.66667, + "transform": [-124.51834, -3.56781, -6.71413] + }, + { + "time": 1, + "transform": [-28.93305, 27.81706, 2.04579] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, -1] + }, + { + "time": 0.16667, + "transform": [0, 0, -3] + }, + { + "time": 0.33333, + "transform": [0, 0, -3] + }, + { + "time": 0.5, + "transform": [0, 0, -4] + }, + { + "time": 0.66667, + "transform": [0, 0, -4] + }, + { + "time": 1, + "transform": [0, 0, -1] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/unload2.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/unload2.json new file mode 100644 index 000000000..ea5d23b7f --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_flak/unload2.json @@ -0,0 +1,205 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "position": [ + { + "time": 0, + "transform": [-5, 2, -8] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-28.93305, 27.81706, 2.04579] + }, + { + "time": 0.16667, + "transform": [-87.01834, -3.56781, -6.71413] + }, + { + "time": 0.33333, + "transform": [-101.19583, -38.51104, -4.52898] + }, + { + "time": 0.5, + "transform": [-130.5888, -29.62566, -27.21733] + }, + { + "time": 0.66667, + "transform": [-130.5888, -29.62566, -27.21733] + }, + { + "time": 0.83333, + "transform": [-87.01834, -3.56781, -6.71413] + }, + { + "time": 1, + "transform": [-28.93305, 27.81706, 2.04579] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, -1] + }, + { + "time": 0.16667, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [0, 0, -4] + }, + { + "time": 0.5, + "transform": [0, 0, -5] + }, + { + "time": 0.66667, + "transform": [0, 0, -5] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, -1] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [-90, 0, 0] + } + ] + }, + "magazine2": { + "position": [ + { + "time": 0.16667, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 6, 0] + }, + { + "time": 0.66667, + "transform": [0, 6, 0] + } + ], + "scale": [ + { + "time": 0.5, + "transform": [1, 1, 1] + }, + { + "time": 0.66667, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/aim_pitch.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/aim_pitch.json new file mode 100644 index 000000000..4cc0ddd20 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/aim_pitch.json @@ -0,0 +1,85 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "hans_gunner": { + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "weapon": { + "rotation": [ + { + "time": 0, + "transform": [-13.5, 0, 0] + } + ] + }, + "howi": { + "rotation": [ + { + "time": 0, + "transform": [13.5, 0, 0] + }, + { + "time": 1, + "transform": [-76.5, 0, 0] + } + ] + }, + "vertical_drive_guida_mechanismnce": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, -500, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/aim_pitch_hans.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/aim_pitch_hans.json new file mode 100644 index 000000000..19bbfe9ac --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/aim_pitch_hans.json @@ -0,0 +1,107 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "hans_gunner": { + "position": [ + { + "time": 0, + "transform": [0, -1, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [25, 0, 0] + }, + { + "time": 0.5, + "transform": [26, 0, 0] + }, + { + "time": 1, + "transform": [25, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, -1, 0] + }, + { + "time": 1, + "transform": [0, -1, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [-24.28915, -22.33076, 27.6048] + }, + { + "time": 0.5, + "transform": [-25.32585, -23.3401, 30.08658] + }, + { + "time": 1, + "transform": [-24.28915, -22.33076, 27.6048] + } + ], + "position": [ + { + "time": 0, + "transform": [1.05105, -1.13014, -1.32887] + }, + { + "time": 1, + "transform": [1.05105, -1.13014, -1.32887] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-32.10382, 5.35355, -8.45862] + }, + { + "time": 0.5, + "transform": [-31.95268, -1.00741, -12.43697] + }, + { + "time": 1, + "transform": [-32.10382, 5.35355, -8.45862] + } + ], + "position": [ + { + "time": 0, + "transform": [0.17365, -0.01281, -0.00816] + }, + { + "time": 1, + "transform": [0.17365, -0.01281, -0.00816] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [-5, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [7.5, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/backward.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/backward.json new file mode 100644 index 000000000..90468c3d2 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/backward.json @@ -0,0 +1,353 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "hans_gunner": { + "rotation": [ + { + "time": 1, + "transform": [0, -10, 0] + } + ], + "position": [ + { + "time": 1, + "transform": [0.12155, 0, -0.68937] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [32.5, 0, 0] + }, + { + "time": 0.25, + "transform": [35, 0, 0] + }, + { + "time": 0.5, + "transform": [32.5, 0, 0] + }, + { + "time": 0.75, + "transform": [35, 0, 0] + }, + { + "time": 1, + "transform": [32.5, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, -0.78217, 0.26116] + }, + { + "time": 0.5, + "transform": [0, -0.78217, 0.26116] + }, + { + "time": 1, + "transform": [0, -0.78217, 0.26116] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [-89.00441, -0.49836, 7.34523] + }, + { + "time": 0.15, + "transform": [-104.00441, -0.49836, 7.34523] + }, + { + "time": 0.25, + "transform": [-99.00441, -0.49836, 7.34523] + }, + { + "time": 0.5, + "transform": [-89.00441, -0.49836, 7.34523] + }, + { + "time": 0.65, + "transform": [-104.00441, -0.49836, 7.34523] + }, + { + "time": 0.75, + "transform": [-99.00441, -0.49836, 7.34523] + }, + { + "time": 1, + "transform": [-89.00441, -0.49836, 7.34523] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [0.03281, -0.11872, -1.9962] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [0.03281, -0.11872, -1.9962] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-34.6381, -2.70295, 12.28118] + }, + { + "time": 0.5, + "transform": [-34.6381, -2.70295, 12.28118] + }, + { + "time": 1, + "transform": [-34.6381, -2.70295, 12.28118] + } + ], + "position": [ + { + "time": 0, + "transform": [0.36397, -1.3655, -0.47781] + }, + { + "time": 0.25, + "transform": [0.21916, -0.81124, -0.08257] + }, + { + "time": 0.5, + "transform": [0.36397, -1.3655, -0.47781] + }, + { + "time": 0.75, + "transform": [0.21916, -0.81124, -0.08257] + }, + { + "time": 1, + "transform": [0.36397, -1.3655, -0.47781] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [15, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [-15, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [-17.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [17.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [25, 0, 0] + }, + { + "time": 0.25, + "transform": [27.5, 0, 0] + }, + { + "time": 0.5, + "transform": [25, 0, 0] + }, + { + "time": 0.75, + "transform": [27.5, 0, 0] + }, + { + "time": 1, + "transform": [25, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [-23.28442, -6.53984, -10.23906] + }, + { + "time": 0.5, + "transform": [-23.28442, -6.53984, -10.23906] + }, + { + "time": 1, + "transform": [-23.28442, -6.53984, -10.23906] + } + ], + "position": [ + { + "time": 0, + "transform": [-0.11784, -2.40648, -0.62182] + }, + { + "time": 0.25, + "transform": [-0.02482, -1.68046, -0.30582] + }, + { + "time": 0.5, + "transform": [-0.11784, -2.40648, -0.62182] + }, + { + "time": 0.75, + "transform": [-0.02482, -1.68046, -0.30582] + }, + { + "time": 1, + "transform": [-0.11784, -2.40648, -0.62182] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-69.77591, 7.51926, -6.86185] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [15, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [-15, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [-15, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [15, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "weapon": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [2.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [2.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/fire.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/fire.json new file mode 100644 index 000000000..982f6840d --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/fire.json @@ -0,0 +1,691 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "6bcal_light_artillery": { + "scale": [ + { + "time": 0.25, + "transform": [0, 0, 0] + } + ] + }, + "weapon": { + "rotation": [ + { + "time": 0.25, + "transform": [-13.5, 0, 0] + } + ] + }, + "howi": { + "rotation": [ + { + "time": 0.25, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [-5.5, 0, 0] + }, + { + "time": 0.4722, + "transform": [1, 0, 0] + }, + { + "time": 0.61113, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.25, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [0, 0.07676, 1.15792] + }, + { + "time": 0.58333, + "transform": [0, 0, 0] + } + ] + }, + "gun": { + "position": [ + { + "time": 0.25, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [0, 0, 3] + }, + { + "time": 0.55553, + "transform": [0, 0, 0] + } + ] + }, + "bolt": { + "position": [ + { + "time": 0.25, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [0, 0, -2] + }, + { + "time": 0.38887, + "transform": [0, 0, -1.2] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + } + ], + "scale": [ + { + "time": 0.25, + "transform": [1, 1, 1] + }, + { + "time": 0.33333, + "transform": [1, 1, 2] + }, + { + "time": 0.38887, + "transform": [1, 1, 1.6] + }, + { + "time": 0.5, + "transform": [1, 1, 1] + } + ] + }, + "wheel2": { + "rotation": [ + { + "time": 0.25, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [-15, 0, 0] + }, + { + "time": 0.44447, + "transform": [-10, 0, 0] + }, + { + "time": 0.5278, + "transform": [2.5, 0, 0] + }, + { + "time": 0.61113, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.25, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [0, -0.49497, -0.85732] + }, + { + "time": 0.44447, + "transform": [0, 0.60513, -0.02584] + }, + { + "time": 0.5278, + "transform": [0, -0.09962, 0.00745] + }, + { + "time": 0.61113, + "transform": [0, 0, 0] + } + ] + }, + "wheel1": { + "rotation": [ + { + "time": 0.25, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [-15, 0, 0] + }, + { + "time": 0.44447, + "transform": [-10, 0, 0] + }, + { + "time": 0.5278, + "transform": [2.5, 0, 0] + }, + { + "time": 0.61113, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.25, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [0, -0.49497, -0.85732] + }, + { + "time": 0.44447, + "transform": [0, 0.60513, -0.02584] + }, + { + "time": 0.5278, + "transform": [0, -0.09962, 0.00745] + }, + { + "time": 0.61113, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.16667, + "transform": [0, 12.5, 0] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.2222, + "transform": [0.28986, 0, 1.97888] + }, + { + "time": 0.36113, + "transform": [0.28986, 0, 1.97888] + }, + { + "time": 0.44447, + "transform": [0.28986, 0, 1.97888] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.16667, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [0, 0, 0] + }, + { + "time": 0.30553, + "transform": [-7.5, 0, 0] + }, + { + "time": 0.44447, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_head": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.16667, + "transform": [22.5, 27.5, 0] + }, + { + "time": 0.38887, + "transform": [22.5, 27.5, 0] + }, + { + "time": 0.4722, + "transform": [22.5, 27.5, 0] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.16667, + "transform": [24.97911, -1.05627, -2.26603] + }, + { + "time": 0.36113, + "transform": [-5.97118, -0.48751, -1.04586] + }, + { + "time": 0.5278, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.16667, + "transform": [-74.23188, 14.13311, -5.14056] + }, + { + "time": 0.36113, + "transform": [-112.93162, 26.12797, -8.89674] + }, + { + "time": 0.44447, + "transform": [-112.93162, 26.12797, -8.89674] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.16667, + "transform": [-1.37078, -1.08145, -2.42005] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.16667, + "transform": [-4.99762, -0.10901, 2.49762] + }, + { + "time": 0.44447, + "transform": [-4.99762, -0.10901, 2.49762] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.16667, + "transform": [12.45392, -1.08089, -4.88206] + }, + { + "time": 0.44447, + "transform": [12.45392, -1.08089, -4.88206] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.2222, + "transform": [0, 46.67, 0] + }, + { + "time": 0.2778, + "transform": [-1.62084, 58.32085, 1.90443] + }, + { + "time": 0.33333, + "transform": [0, 70, 0] + }, + { + "time": 0.44447, + "transform": [0, 70, 0] + }, + { + "time": 0.55553, + "transform": [0, 70, 0] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.2222, + "transform": [0, 0, 0] + }, + { + "time": 0.2778, + "transform": [-0.10497, -0.00349, 0.1702] + }, + { + "time": 0.33333, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.2222, + "transform": [5, 0, 0] + }, + { + "time": 0.2778, + "transform": [7.5, 0, 0] + }, + { + "time": 0.33333, + "transform": [2.5, 0, 0] + }, + { + "time": 0.4722, + "transform": [10, 0, 0] + }, + { + "time": 0.55553, + "transform": [10, 0, 0] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_head": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [23.29858, 24.60651, -2.10233] + }, + { + "time": 0.5, + "transform": [23.29858, 24.60651, -2.10233] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.2778, + "transform": [-172.5, 0, -2.5] + }, + { + "time": 0.33333, + "transform": [-175, 0, -2.5] + }, + { + "time": 0.44447, + "transform": [-172.5, 0, -2.5] + }, + { + "time": 0.55553, + "transform": [-172.5, 0, -2.5] + }, + { + "time": 0.7778, + "transform": [-86.06812, -17.46132, -0.0685] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.2778, + "transform": [0, -1, 1] + }, + { + "time": 0.44447, + "transform": [0, -1, 1] + }, + { + "time": 0.55553, + "transform": [0, -1, 1] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.2778, + "transform": [-153.65745, 22.00476, 1.65038] + }, + { + "time": 0.33333, + "transform": [-156.15745, 22.00476, 1.65038] + }, + { + "time": 0.44447, + "transform": [-153.65745, 22.00476, 1.65038] + }, + { + "time": 0.55553, + "transform": [-153.65745, 22.00476, 1.65038] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.2778, + "transform": [0, -0.99905, 0.04362] + }, + { + "time": 0.44447, + "transform": [0, -0.99905, 0.04362] + }, + { + "time": 0.55553, + "transform": [0, -0.99905, 0.04362] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [14.87739, 1.93597, 7.24721] + }, + { + "time": 0.44447, + "transform": [14.88, 1.94, 7.25] + }, + { + "time": 0.55553, + "transform": [14.88, 1.94, 7.25] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.33333, + "transform": [-12.48848, 0.54094, -2.44081] + }, + { + "time": 0.44447, + "transform": [-12.49, 0.54, -2.44] + }, + { + "time": 0.55553, + "transform": [-12.49, 0.54, -2.44] + }, + { + "time": 0.83333, + "transform": [0, 0, 0] + } + ] + }, + "vertical_drive_guida_mechanismnce": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [0, 0, 0] + }, + { + "time": 0.36113, + "transform": [0, -37.5, 0] + }, + { + "time": 0.55553, + "transform": [0, 0, 0] + } + ] + }, + "lever": { + "rotation": [ + { + "time": 0.16667, + "transform": [0, 0, 0] + }, + { + "time": 0.30553, + "transform": [70, 0, 0] + }, + { + "time": 0.38887, + "transform": [55, 0, 0] + }, + { + "time": 0.5, + "transform": [-17.49762, 0, 0] + }, + { + "time": 0.61113, + "transform": [0, 0, 0] + } + ] + }, + "6bcal_light_artillery_case": { + "scale": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/forward.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/forward.json new file mode 100644 index 000000000..1d7750907 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/forward.json @@ -0,0 +1,353 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, -10, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0.12155, 0, -0.68937] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [32.5, 0, 0] + }, + { + "time": 0.25, + "transform": [35, 0, 0] + }, + { + "time": 0.5, + "transform": [32.5, 0, 0] + }, + { + "time": 0.75, + "transform": [35, 0, 0] + }, + { + "time": 1, + "transform": [32.5, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, -0.78217, 0.26116] + }, + { + "time": 0.5, + "transform": [0, -0.78217, 0.26116] + }, + { + "time": 1, + "transform": [0, -0.78217, 0.26116] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [-89.00441, -0.49836, 7.34523] + }, + { + "time": 0.25, + "transform": [-99.00441, -0.49836, 7.34523] + }, + { + "time": 0.4, + "transform": [-104.00441, -0.49836, 7.34523] + }, + { + "time": 0.5, + "transform": [-89.00441, -0.49836, 7.34523] + }, + { + "time": 0.75, + "transform": [-99.00441, -0.49836, 7.34523] + }, + { + "time": 0.9, + "transform": [-104.00441, -0.49836, 7.34523] + }, + { + "time": 1, + "transform": [-89.00441, -0.49836, 7.34523] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [0.03281, -0.11872, -1.9962] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [0.03281, -0.11872, -1.9962] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-34.6381, -2.70295, 12.28118] + }, + { + "time": 0.5, + "transform": [-34.6381, -2.70295, 12.28118] + }, + { + "time": 1, + "transform": [-34.6381, -2.70295, 12.28118] + } + ], + "position": [ + { + "time": 0, + "transform": [0.36397, -1.3655, -0.47781] + }, + { + "time": 0.25, + "transform": [0.21916, -0.81124, -0.08257] + }, + { + "time": 0.5, + "transform": [0.36397, -1.3655, -0.47781] + }, + { + "time": 0.75, + "transform": [0.21916, -0.81124, -0.08257] + }, + { + "time": 1, + "transform": [0.36397, -1.3655, -0.47781] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [-15, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [15, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [17.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [-17.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [25, 0, 0] + }, + { + "time": 0.25, + "transform": [27.5, 0, 0] + }, + { + "time": 0.5, + "transform": [25, 0, 0] + }, + { + "time": 0.75, + "transform": [27.5, 0, 0] + }, + { + "time": 1, + "transform": [25, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [-23.28442, -6.53984, -10.23906] + }, + { + "time": 0.5, + "transform": [-23.28442, -6.53984, -10.23906] + }, + { + "time": 1, + "transform": [-23.28442, -6.53984, -10.23906] + } + ], + "position": [ + { + "time": 0, + "transform": [-0.11784, -2.40648, -0.62182] + }, + { + "time": 0.25, + "transform": [-0.02482, -1.68046, -0.30582] + }, + { + "time": 0.5, + "transform": [-0.11784, -2.40648, -0.62182] + }, + { + "time": 0.75, + "transform": [-0.02482, -1.68046, -0.30582] + }, + { + "time": 1, + "transform": [-0.11784, -2.40648, -0.62182] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-72.27591, 7.51926, -6.86185] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [-15, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [15, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [15, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [-15, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "weapon": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [2.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [2.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/left.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/left.json new file mode 100644 index 000000000..c5a1218d6 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/left.json @@ -0,0 +1,353 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "hans_gunner": { + "rotation": [ + { + "time": 1, + "transform": [0, -10, 0] + } + ], + "position": [ + { + "time": 1, + "transform": [0.12155, 0, -0.68937] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [32.5, 0, 0] + }, + { + "time": 0.25, + "transform": [35, 0, 0] + }, + { + "time": 0.5, + "transform": [32.5, 0, 0] + }, + { + "time": 0.75, + "transform": [35, 0, 0] + }, + { + "time": 1, + "transform": [32.5, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, -0.78217, 0.26116] + }, + { + "time": 0.5, + "transform": [0, -0.78217, 0.26116] + }, + { + "time": 1, + "transform": [0, -0.78217, 0.26116] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [-89.00441, -0.49836, 7.34523] + }, + { + "time": 0.15, + "transform": [-104.00441, -0.49836, 7.34523] + }, + { + "time": 0.25, + "transform": [-99.00441, -0.49836, 7.34523] + }, + { + "time": 0.5, + "transform": [-89.00441, -0.49836, 7.34523] + }, + { + "time": 0.65, + "transform": [-104.00441, -0.49836, 7.34523] + }, + { + "time": 0.75, + "transform": [-99.00441, -0.49836, 7.34523] + }, + { + "time": 1, + "transform": [-89.00441, -0.49836, 7.34523] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [0.03281, -0.11872, -1.9962] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [0.03281, -0.11872, -1.9962] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-34.6381, -2.70295, 12.28118] + }, + { + "time": 0.5, + "transform": [-34.6381, -2.70295, 12.28118] + }, + { + "time": 1, + "transform": [-34.6381, -2.70295, 12.28118] + } + ], + "position": [ + { + "time": 0, + "transform": [0.36397, -1.3655, -0.47781] + }, + { + "time": 0.25, + "transform": [0.21916, -0.81124, -0.08257] + }, + { + "time": 0.5, + "transform": [0.36397, -1.3655, -0.47781] + }, + { + "time": 0.75, + "transform": [0.21916, -0.81124, -0.08257] + }, + { + "time": 1, + "transform": [0.36397, -1.3655, -0.47781] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [15, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [-15, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [-17.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [17.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 27.5, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [25, 0, 0] + }, + { + "time": 0.25, + "transform": [27.5, 0, 0] + }, + { + "time": 0.5, + "transform": [25, 0, 0] + }, + { + "time": 0.75, + "transform": [27.5, 0, 0] + }, + { + "time": 1, + "transform": [25, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [-23.28442, -6.53984, -10.23906] + }, + { + "time": 0.5, + "transform": [-23.28442, -6.53984, -10.23906] + }, + { + "time": 1, + "transform": [-23.28442, -6.53984, -10.23906] + } + ], + "position": [ + { + "time": 0, + "transform": [-0.11784, -2.40648, -0.62182] + }, + { + "time": 0.25, + "transform": [-0.02482, -1.68046, -0.30582] + }, + { + "time": 0.5, + "transform": [-0.11784, -2.40648, -0.62182] + }, + { + "time": 0.75, + "transform": [-0.02482, -1.68046, -0.30582] + }, + { + "time": 1, + "transform": [-0.11784, -2.40648, -0.62182] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-107.27591, 7.51926, -6.86185] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [-15, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [15, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [15, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [-15, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "weapon": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [2.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [2.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/load.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/load.json new file mode 100644 index 000000000..19a95aac4 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/load.json @@ -0,0 +1,889 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.0625, + "transform": [0, -12.5, 0] + }, + { + "time": 0.40625, + "transform": [0, -12.5, 0] + }, + { + "time": 0.5625, + "transform": [0, -67.5, 0] + }, + { + "time": 0.75, + "transform": [0, -47.5, 0] + }, + { + "time": 0.8125, + "transform": [0, -47.5, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.0625, + "transform": [12.5, 0, 0] + }, + { + "time": 0.10418, + "transform": [15, 0, 0] + }, + { + "time": 0.17708, + "transform": [17.5, 0, 0] + }, + { + "time": 0.22918, + "transform": [15, 0, 0] + }, + { + "time": 0.30208, + "transform": [27.5, 0, 0] + }, + { + "time": 0.40625, + "transform": [27.5, 0, 0] + }, + { + "time": 0.5625, + "transform": [0, 0, 0] + }, + { + "time": 0.65625, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [7.5, 0, 0] + }, + { + "time": 0.8125, + "transform": [10, 0, 0] + }, + { + "time": 0.86458, + "transform": [10, 0, 0] + }, + { + "time": 0.94793, + "transform": [3.85, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.0625, + "transform": [-73.99034, -24.59477, 4.62934] + }, + { + "time": 0.10418, + "transform": [-68.99034, -24.59477, 4.62934] + }, + { + "time": 0.17708, + "transform": [-73.99034, -24.59477, 4.62934] + }, + { + "time": 0.22918, + "transform": [-76.49034, -24.59477, 4.62934] + }, + { + "time": 0.30208, + "transform": [-76.9583, -19.72818, 3.38994] + }, + { + "time": 0.40625, + "transform": [-76.9583, -19.72818, 3.38994] + }, + { + "time": 0.48958, + "transform": [-34.9836, -18.12007, 7.1952] + }, + { + "time": 0.5625, + "transform": [-84.13436, -27.19119, 4.2019] + }, + { + "time": 0.65625, + "transform": [-84.13436, -27.19119, 4.2019] + }, + { + "time": 0.75, + "transform": [-106.63436, -27.19119, 4.2019] + }, + { + "time": 0.8125, + "transform": [-112.79679, -15.16893, 7.88255] + }, + { + "time": 0.86458, + "transform": [-91.85276, -25.50368, 11.69596] + }, + { + "time": 0.90625, + "transform": [-63.59, -17.66, 8.1] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.0625, + "transform": [0.4162, -0.326, -0.84883] + }, + { + "time": 0.30208, + "transform": [0.84222, -0.53019, -1.73412] + }, + { + "time": 0.40625, + "transform": [0.84222, -0.53019, -1.73412] + }, + { + "time": 0.8125, + "transform": [1.02581, -0.11311, -2.61977] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.0625, + "transform": [-19.85158, 4.53202, -6.13812] + }, + { + "time": 0.10418, + "transform": [-19.85, 4.53, -6.14] + }, + { + "time": 0.15625, + "transform": [-66.07738, 36.87497, -9.59654] + }, + { + "time": 0.22918, + "transform": [-68.57738, 36.87497, -9.59654] + }, + { + "time": 0.40625, + "transform": [-71.07738, 36.87497, -9.59654] + }, + { + "time": 0.45833, + "transform": [-37.07954, 16.00377, -4.84765] + }, + { + "time": 0.5625, + "transform": [-93.89393, -2.25854, -0.69237] + }, + { + "time": 0.65625, + "transform": [-118.02346, -26.66738, 5.64022] + }, + { + "time": 0.75, + "transform": [-114.14699, 16.07057, 8.93913] + }, + { + "time": 0.8125, + "transform": [-114.14699, 16.07057, 8.93913] + }, + { + "time": 0.88543, + "transform": [-94.75649, 9.8209, 5.4628] + }, + { + "time": 0.90625, + "transform": [-98.77804, 8.03528, 4.46957] + }, + { + "time": 0.92708, + "transform": [-77.79959, 6.24967, 3.47633] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.30208, + "transform": [-1.22881, -0.28029, -1.55289] + }, + { + "time": 0.40625, + "transform": [-1.22881, -0.28029, -1.55289] + }, + { + "time": 0.5625, + "transform": [-1.71, 0.27, -2.91] + }, + { + "time": 0.65625, + "transform": [0, 0, 0] + }, + { + "time": 0.8125, + "transform": [-2.48078, 1.13901, -5.07367] + }, + { + "time": 0.88543, + "transform": [-1.51, 0.69, -3.1] + }, + { + "time": 0.92708, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.0625, + "transform": [-7.5, 0, 0] + }, + { + "time": 0.22918, + "transform": [-7.5, 0, 0] + }, + { + "time": 0.30208, + "transform": [-10, 0, 0] + }, + { + "time": 0.40625, + "transform": [-10, 0, 0] + }, + { + "time": 0.5625, + "transform": [7.5, 0, 0] + }, + { + "time": 0.8125, + "transform": [7.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.0625, + "transform": [10, 0, 0] + }, + { + "time": 0.22918, + "transform": [10, 0, 0] + }, + { + "time": 0.30208, + "transform": [12.5, 0, 0] + }, + { + "time": 0.40625, + "transform": [12.5, 0, 0] + }, + { + "time": 0.5625, + "transform": [-12.5, 0, 0] + }, + { + "time": 0.8125, + "transform": [-12.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0.08333, + "transform": [0, 0, 0] + }, + { + "time": 0.1875, + "transform": [0, 27.5, 0] + }, + { + "time": 0.375, + "transform": [0, 27.5, 0] + }, + { + "time": 0.4375, + "transform": [0, 70, 0] + }, + { + "time": 0.46875, + "transform": [0, 85, 0] + }, + { + "time": 0.47918, + "transform": [0, 85, 0] + }, + { + "time": 0.6875, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0.08333, + "transform": [0, 0, 0] + }, + { + "time": 0.23958, + "transform": [2.5, 7.5, 0] + }, + { + "time": 0.3125, + "transform": [7.5, 7.5, 0] + }, + { + "time": 0.375, + "transform": [7.5, 7.5, 0] + }, + { + "time": 0.4375, + "transform": [-2.68267, 22.48485, 0.70008] + }, + { + "time": 0.47918, + "transform": [-2.68, 22.48, 0.7] + }, + { + "time": 0.6875, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0.08333, + "transform": [0, 0, 0] + }, + { + "time": 0.23958, + "transform": [10, 0, 0] + }, + { + "time": 0.375, + "transform": [10, 0, 0] + }, + { + "time": 0.47918, + "transform": [-29.9055, 2.49762, -4.33287] + }, + { + "time": 0.6875, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0.08333, + "transform": [0, 0, 0] + }, + { + "time": 0.27083, + "transform": [-111.88023, 23.39896, 9.06159] + }, + { + "time": 0.3125, + "transform": [-106.88023, 23.39896, 9.06159] + }, + { + "time": 0.375, + "transform": [-106.88023, 23.39896, 9.06159] + }, + { + "time": 0.40625, + "transform": [-118.77227, 32.93964, 12.56516] + }, + { + "time": 0.42708, + "transform": [-108.78342, 34.58362, 12.82257] + }, + { + "time": 0.4375, + "transform": [-105.66432, 42.48032, 16.06872] + }, + { + "time": 0.46875, + "transform": [-103.66336, 54.70598, 20.04385] + }, + { + "time": 0.47918, + "transform": [-103.66, 54.71, 20.04] + }, + { + "time": 0.5625, + "transform": [-88.88274, -0.38564, 13.75489] + }, + { + "time": 0.6875, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.08333, + "transform": [0, 0, 0] + }, + { + "time": 0.27083, + "transform": [-1.69047, 1.2399, -3.4066] + }, + { + "time": 0.3125, + "transform": [-1.69, 1.24, -3.41] + }, + { + "time": 0.375, + "transform": [-1.69, 1.24, -3.41] + }, + { + "time": 0.40625, + "transform": [-1.35274, 0.85253, -2.47488] + }, + { + "time": 0.4375, + "transform": [-1.44862, 0.62749, -2.46105] + }, + { + "time": 0.47918, + "transform": [-2.15, 0.71, -3.17] + }, + { + "time": 0.5625, + "transform": [-1.44108, 0.9623, -0.65425] + }, + { + "time": 0.6875, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0.08333, + "transform": [0, 0, 0] + }, + { + "time": 0.23958, + "transform": [12.49067, 0.43399, 2.46207] + }, + { + "time": 0.375, + "transform": [12.49, 0.43, 2.46] + }, + { + "time": 0.47918, + "transform": [-10.01, 0.43, 2.46] + }, + { + "time": 0.6875, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.47918, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0.08333, + "transform": [0, 0, 0] + }, + { + "time": 0.23958, + "transform": [-9.96271, 0.86717, -4.92442] + }, + { + "time": 0.375, + "transform": [-9.96, 0.87, -4.92] + }, + { + "time": 0.47918, + "transform": [15.04, 0.87, -4.92] + }, + { + "time": 0.6875, + "transform": [0, 0, 0] + } + ] + }, + "weapon": { + "rotation": [ + { + "time": 0.0625, + "transform": [-13.5, 0, 0] + } + ] + }, + "breech": { + "rotation": [ + { + "time": 0.0625, + "transform": [0, 0, 0] + }, + { + "time": 0.10418, + "transform": [2.5, 0, 0] + }, + { + "time": 0.17708, + "transform": [2.5, 0, 0] + }, + { + "time": 0.23958, + "transform": [0, 0, 0] + }, + { + "time": 0.3125, + "transform": [50, 0, 0] + }, + { + "time": 0.41668, + "transform": [50, 0, 0] + }, + { + "time": 0.46875, + "transform": [20, 0, 0] + }, + { + "time": 0.64583, + "transform": [20, 0, 0] + }, + { + "time": 0.66668, + "transform": [30, 0, 0] + }, + { + "time": 0.69793, + "transform": [33.13, 0, 0] + }, + { + "time": 0.72918, + "transform": [37.75, 0, 0] + }, + { + "time": 0.75, + "transform": [45, 0, 0] + }, + { + "time": 0.86458, + "transform": [20, 0, 0] + }, + { + "time": 0.90625, + "transform": [20, 0, 0] + }, + { + "time": 0.94793, + "transform": [0, 0, 0] + } + ] + }, + "6bcal_light_artillery": { + "rotation": [ + { + "time": 0.5625, + "transform": [24.71783, 3.15049, -0.89256] + }, + { + "time": 0.65625, + "transform": [24.72, 3.15, -0.89] + }, + { + "time": 0.75, + "transform": [49.72, 0, 0] + }, + { + "time": 0.875, + "transform": [0, 0, 0] + } + ], + "position": [ + { + "time": 0.5625, + "transform": [0.06593, 9.38653, 13.37126] + }, + { + "time": 0.65625, + "transform": [0.07, 9.39, 13.37] + }, + { + "time": 0.75, + "transform": [0, 5.21642, 4.3001] + }, + { + "time": 0.875, + "transform": [0, 0, 0] + } + ], + "scale": [ + { + "time": 0.5625, + "transform": [0, 0, 0] + }, + { + "time": 0.65625, + "transform": [1, 1, 1] + } + ] + }, + "lever": { + "rotation": [ + { + "time": 0.0625, + "transform": [0, 0, 0] + }, + { + "time": 0.10418, + "transform": [-16.67, 0, 0] + }, + { + "time": 0.17708, + "transform": [-16.67, 0, 0] + }, + { + "time": 0.22918, + "transform": [0, 0, 0] + }, + { + "time": 0.30208, + "transform": [-67.5, 0, 0] + }, + { + "time": 0.41668, + "transform": [-67.5, 0, 0] + }, + { + "time": 0.46875, + "transform": [-37.5, 0, 0] + }, + { + "time": 0.64583, + "transform": [-37.5, 0, 0] + }, + { + "time": 0.86458, + "transform": [-37.5, 0, 0] + }, + { + "time": 0.90625, + "transform": [-37.5, 0, 0] + }, + { + "time": 0.94793, + "transform": [20, 0, 0] + }, + { + "time": 0.96875, + "transform": [0, 0, 0] + } + ] + }, + "wheel1": { + "rotation": [ + { + "time": 0.375, + "transform": [0, 0, 0] + } + ] + }, + "6bcal_light_artillery_case": { + "rotation": [ + { + "time": 0.22918, + "transform": [0, 0, 0] + }, + { + "time": 0.30208, + "transform": [47.5, 0, 0] + }, + { + "time": 0.375, + "transform": [47.5, 0, 0] + }, + { + "time": 0.41668, + "transform": [37.5, 0, 0] + }, + { + "time": 0.45833, + "transform": [-30, 0, 0] + }, + { + "time": 0.5, + "transform": [-90, 0, 0] + }, + { + "time": 0.53125, + "transform": [-145, 0, 0] + }, + { + "time": 0.5625, + "transform": [-220, 0, 0] + }, + { + "time": 0.59375, + "transform": [-295, 0, 0] + }, + { + "time": 0.64583, + "transform": [-347.5, 0, 0] + }, + { + "time": 0.67708, + "transform": [-355, 0, 0] + }, + { + "time": 0.70833, + "transform": [-347.5, 0, 0] + } + ], + "position": [ + { + "time": 0.22918, + "transform": [0, 0, 0] + }, + { + "time": 0.28125, + "transform": [0, 1.58184, 0.10027] + }, + { + "time": 0.30208, + "transform": [0, 3, 1.3] + }, + { + "time": 0.375, + "transform": [0, 3, 1.3] + }, + { + "time": 0.41668, + "transform": [0, 10.07869, 9.52288] + }, + { + "time": 0.45833, + "transform": [0, 11.51579, 20.42589] + }, + { + "time": 0.5, + "transform": [0, 7.37614, 25.20791] + }, + { + "time": 0.53125, + "transform": [0, 2.79309, 30.86334] + }, + { + "time": 0.5625, + "transform": [0, -6.52207, 34.6723] + }, + { + "time": 0.59375, + "transform": [0, -5.11933, 40.50422] + }, + { + "time": 0.64583, + "transform": [0, -5.35607, 46.17891] + }, + { + "time": 0.67708, + "transform": [0, -4.34866, 46.96561] + }, + { + "time": 0.70833, + "transform": [0, -5.1279, 47.15676] + }, + { + "time": 0.8125, + "transform": [0, -7.07474, 47.62689] + } + ], + "scale": [ + { + "time": 0.67708, + "transform": [1, 1, 1] + }, + { + "time": 0.8125, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/right.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/right.json new file mode 100644 index 000000000..c5a1218d6 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/right.json @@ -0,0 +1,353 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "hans_gunner": { + "rotation": [ + { + "time": 1, + "transform": [0, -10, 0] + } + ], + "position": [ + { + "time": 1, + "transform": [0.12155, 0, -0.68937] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [32.5, 0, 0] + }, + { + "time": 0.25, + "transform": [35, 0, 0] + }, + { + "time": 0.5, + "transform": [32.5, 0, 0] + }, + { + "time": 0.75, + "transform": [35, 0, 0] + }, + { + "time": 1, + "transform": [32.5, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, -0.78217, 0.26116] + }, + { + "time": 0.5, + "transform": [0, -0.78217, 0.26116] + }, + { + "time": 1, + "transform": [0, -0.78217, 0.26116] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [-89.00441, -0.49836, 7.34523] + }, + { + "time": 0.15, + "transform": [-104.00441, -0.49836, 7.34523] + }, + { + "time": 0.25, + "transform": [-99.00441, -0.49836, 7.34523] + }, + { + "time": 0.5, + "transform": [-89.00441, -0.49836, 7.34523] + }, + { + "time": 0.65, + "transform": [-104.00441, -0.49836, 7.34523] + }, + { + "time": 0.75, + "transform": [-99.00441, -0.49836, 7.34523] + }, + { + "time": 1, + "transform": [-89.00441, -0.49836, 7.34523] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [0.03281, -0.11872, -1.9962] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [0.03281, -0.11872, -1.9962] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-34.6381, -2.70295, 12.28118] + }, + { + "time": 0.5, + "transform": [-34.6381, -2.70295, 12.28118] + }, + { + "time": 1, + "transform": [-34.6381, -2.70295, 12.28118] + } + ], + "position": [ + { + "time": 0, + "transform": [0.36397, -1.3655, -0.47781] + }, + { + "time": 0.25, + "transform": [0.21916, -0.81124, -0.08257] + }, + { + "time": 0.5, + "transform": [0.36397, -1.3655, -0.47781] + }, + { + "time": 0.75, + "transform": [0.21916, -0.81124, -0.08257] + }, + { + "time": 1, + "transform": [0.36397, -1.3655, -0.47781] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [15, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [-15, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [-17.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [17.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 27.5, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [25, 0, 0] + }, + { + "time": 0.25, + "transform": [27.5, 0, 0] + }, + { + "time": 0.5, + "transform": [25, 0, 0] + }, + { + "time": 0.75, + "transform": [27.5, 0, 0] + }, + { + "time": 1, + "transform": [25, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [-23.28442, -6.53984, -10.23906] + }, + { + "time": 0.5, + "transform": [-23.28442, -6.53984, -10.23906] + }, + { + "time": 1, + "transform": [-23.28442, -6.53984, -10.23906] + } + ], + "position": [ + { + "time": 0, + "transform": [-0.11784, -2.40648, -0.62182] + }, + { + "time": 0.25, + "transform": [-0.02482, -1.68046, -0.30582] + }, + { + "time": 0.5, + "transform": [-0.11784, -2.40648, -0.62182] + }, + { + "time": 0.75, + "transform": [-0.02482, -1.68046, -0.30582] + }, + { + "time": 1, + "transform": [-0.11784, -2.40648, -0.62182] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [-107.27591, 7.51926, -6.86185] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [-15, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [15, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [15, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [-15, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + }, + "weapon": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.25, + "transform": [2.5, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + }, + { + "time": 0.75, + "transform": [2.5, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/setup.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/setup.json new file mode 100644 index 000000000..a6d3aeb6e --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/field_howitzer/setup.json @@ -0,0 +1,217 @@ +{ + "comment": "Made by Pabilo8 with Blockbench", + "groups": { + "weapon": { + "rotation": [ + { + "time": 0.125, + "transform": [-13.5, 0, 0] + }, + { + "time": 0.625, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0, -10, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0.12155, 0, -0.68937] + } + ] + }, + "hans_gunner_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [32.5, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0, -0.78217, 0.26116] + } + ] + }, + "hans_gunner_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [-89.00441, -0.49836, 7.34523] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [-34.6381, -2.70295, 12.28118] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0.36397, -1.3655, -0.47781] + } + ] + }, + "hans_gunner_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_gunner_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 27.5, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_body": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [25, 0, 0] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [-23.28442, -6.53984, -10.23906] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [-0.11784, -2.40648, -0.62182] + } + ] + }, + "hans_commander_right_arm": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [-54.38641, -10.89614, 6.12775] + } + ], + "position": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 0.5, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_right_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + }, + "hans_commander_left_leg": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/tracked_motorbike/engine.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/tracked_motorbike/engine.json index e299d2ca8..9e044d2fa 100644 --- a/src/main/resources/assets/immersiveintelligence/animations/vehicle/tracked_motorbike/engine.json +++ b/src/main/resources/assets/immersiveintelligence/animations/vehicle/tracked_motorbike/engine.json @@ -278,6 +278,30 @@ "transform": [0, 0, 0] } ] + }, + "shaft": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [0, 0, -360] + } + ] + }, + "transmission": { + "rotation": [ + { + "time": 0, + "transform": [0, 0, 0] + }, + { + "time": 1, + "transform": [-360, 0, 0] + } + ] } } } \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/animations/vehicle/tracked_motorbike/transmission.json b/src/main/resources/assets/immersiveintelligence/animations/vehicle/tracked_motorbike/transmission.json deleted file mode 100644 index 8f8c7093d..000000000 --- a/src/main/resources/assets/immersiveintelligence/animations/vehicle/tracked_motorbike/transmission.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "comment": "Made by Pabilo8 with Blockbench", - "groups": { - "shaft": { - "rotation": [ - { - "time": 0, - "transform": [0, 0, 0] - }, - { - "time": 1, - "transform": [0, 0, -360] - } - ] - }, - "transmission": { - "rotation": [ - { - "time": 0, - "transform": [0, 0, 0] - }, - { - "time": 1, - "transform": [-360, 0, 0] - } - ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/blockstates/metal_device.json b/src/main/resources/assets/immersiveintelligence/blockstates/metal_device.json index c70366cc3..58fba2294 100644 --- a/src/main/resources/assets/immersiveintelligence/blockstates/metal_device.json +++ b/src/main/resources/assets/immersiveintelligence/blockstates/metal_device.json @@ -23,14 +23,6 @@ } } ], - "inventory,type=ammunition_crate": [ - {} - ], - "inventory,type=latex_collector": [ - { - "model": "immersiveintelligence:metal_device/latex_collector" - } - ], "inventory,type=punchtape_reader": [ { "model": "immersiveintelligence:metal_device/punchtape_reader_flipped.obj", @@ -50,9 +42,6 @@ "all": "immersiveintelligence:blocks/metal_device/data_router" } }, - "latex_collector": { - "model": "immersiveintelligence:metal_device/latex_collector" - }, "punchtape_reader": { "model": "immersiveintelligence:metal_device/punchtape_reader.obj", "custom": { @@ -91,9 +80,7 @@ }, "boolean0": { "false": {}, - "true": { - "model": "immersiveintelligence:metal_device/latex_collector_bucket" - } + "true": {} }, "boolean1": { "false": {}, diff --git a/src/main/resources/assets/immersiveintelligence/blockstates/metal_device/latex_collector.json b/src/main/resources/assets/immersiveintelligence/blockstates/metal_device/latex_collector.json new file mode 100644 index 000000000..db1f19aeb --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/blockstates/metal_device/latex_collector.json @@ -0,0 +1,70 @@ +{ + "forge_marker": 1, + "defaults": { + "transform": "forge:default-block", + "model": "cube_all", + "textures": { + "particle": "immersiveintelligence:blocks/metal_device/latex_collector" + } + }, + "variants": { + "inventory,type=latex_collector": [ + { + "model": "immersiveintelligence:metal_device/latex_collector/latex_collector_inv.obj", + "custom": { + "flip-v": true + } + } + ], + "type": { + "latex_collector": { + "model": "immersiveengineering:smartmodel/connector", + "custom": { + "base": "immersiveintelligence:block/metal_device/latex_collector/latex_collector_base.obj", + "layers": ["CUTOUT_MIPPED"], + "flip-v": true + } + } + }, + "facing": { + "down": {}, + "up": {}, + "north": { + "transform": { + "rotation": { + "y": 180 + } + } + }, + "south": {}, + "west": { + "transform": { + "rotation": { + "y": -90 + } + } + }, + "east": { + "transform": { + "rotation": { + "y": 90 + } + } + } + }, + "boolean0": { + "false": {}, + "true": {} + }, + "boolean1": { + "false": {}, + "true": {} + }, + "_1dynamicrender": { + "false": {}, + "true": { + "model": "immersiveintelligence:metal_device/latex_collector/latex_collector.obj.ie" + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_data/data_input_machine.md b/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_data/data_input_machine.md index 0bcd204cc..dbd893474 100644 --- a/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_data/data_input_machine.md +++ b/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_data/data_input_machine.md @@ -19,4 +19,7 @@ When editing a variable, you can change its letter by using the up and down arro # punchtapes The **Data Input Machine** is capable of reading a **Packet** from a [written punchtape] and writing the currently stored **Packet** to [a blank one]. Both operations can be performed by inserting a [Punchtape] into the *upper slot*. After processing, the [Punchtape] will be outputted into the *lower slot*. +# punchtapes +The **DIM** can be upgraded with a specialized control panel to allow input of advanced data types like [Vector], [Map] and [Array]. + diff --git a/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_warfare/armortools/flagpole.md b/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_warfare/armortools/flagpole.md index 57b65c0dc..2e22257dc 100644 --- a/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_warfare/armortools/flagpole.md +++ b/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_warfare/armortools/flagpole.md @@ -2,6 +2,7 @@ Flagpole Stand for anthem! # 0 +@hammer;upgradeable;repairable;paintable |[multiblock]{mb:"II:Flagpole"}| The [flagpole] is a multiblock that allows marking of nearby territory, keeping it loaded and under control, while also displaying a [stylish banner] for friends and foes to recognise. To form it, use a [hammer](introduction#introductionHammer) on the middle razor wire block. diff --git a/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_warfare/staticdefense/emplacement.md b/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_warfare/staticdefense/emplacement.md index 598f65639..7d2b6f4cc 100644 --- a/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_warfare/staticdefense/emplacement.md +++ b/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_warfare/staticdefense/emplacement.md @@ -2,6 +2,7 @@ Emplacement Locked and Loaded! # 0 +@hammer;level_circuits;upgradeable;repairable;paintable |[multiblock]{mb:"II:Emplacement"}| **The Emplacement** is a heavy defensive structure used for protecting the perimeter of your factory. To form it, use a [hammer](introduction#introductionHammer) on the upper middle sandbag block. # 1 diff --git a/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_warfare/staticdefense/emplacement_weapons.md b/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_warfare/staticdefense/emplacement_weapons.md index 7892f1672..c3eb189d6 100644 --- a/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_warfare/staticdefense/emplacement_weapons.md +++ b/src/main/resources/assets/immersiveintelligence/ie_manual/en_us/ii_warfare/staticdefense/emplacement_weapons.md @@ -13,7 +13,7 @@ Take note, this weapon does not use [magazines](magazines.md). [Loose bullets ha # mg1 The **Machinegun** Emplacement comes in 3 variants: [Default], [Heavy Barreled], and [Water-Cooled], which are identical in function to those present in the [infantry version](machinegun.md).
|[upgrade_display]{upgrade:"immersiveintelligence:emplacement/machinegun/heavy_barrel"}| -|[upgrade_display]{upgrade:"immersiveintelligence:emplacement/machinegun/water_cooled_barrel"}| +|[upgrade_display]{upgrade:"immersiveintelligence:emplacement/machinegun/watercooled"}| # mg2 The **Machinegun** Emplacement can also be [fortified] to increase survivability in the field. |[upgrade_display]{upgrade:"immersiveintelligence:emplacement/machinegun/additional_fortifications"}| @@ -62,11 +62,11 @@ A beefed-up [Field Mortar](mortar.md), the [Mortar] emplacement provides powerfu A scaled-down version of the [Artillery Howitzer](artillery_howitzer.md), the [Light Howitzer] provides medium-range support and its mobility allows for quick and precise barrage of enemy positions. # mlrs **Rocket Launcher (MLRS)** -|[upgrade_display]{upgrade:"immersiveintelligence:emplacement/mlrs"}| +|[upgrade_display]{upgrade:"immersiveintelligence:emplacement/rocket_launcher"}| The [Multiple Launch Rocket System (MLRS)], or simply, the [Rocket Launcher], launches multiple unguided [rockets](bullet_production.md#heavy_ammuniton_assembler) at a specified target. Rockets are slow compared to bullets, so complex targeting in conjunction with the [Infrared Observer](#ir_observer0) may be required for maximum efficiency on moving targets. # guided_launcher0 **Guided Rocket Launcher** -|[upgrade_display]{upgrade:"immersiveintelligence:emplacement/guided_launcher"}| +|[upgrade_display]{upgrade:"immersiveintelligence:emplacement/guided_missile_launcher"}| Instead of multiple dumbfire rockets, the [Guided Rocket Launcher] fires a single, smart rocket that is steered toward the target. It is easier to hit moving targets compared to the dumbfire MLRS. # ir_observer0 **Infrared Observer** diff --git a/src/main/resources/assets/immersiveintelligence/lang/en_us.lang b/src/main/resources/assets/immersiveintelligence/lang/en_us.lang index 2cd7ad659..b7f64c7cd 100644 --- a/src/main/resources/assets/immersiveintelligence/lang/en_us.lang +++ b/src/main/resources/assets/immersiveintelligence/lang/en_us.lang @@ -629,7 +629,7 @@ tile.immersiveintelligence.metal_device.timed_buffer.name=Timed Buffer tile.immersiveintelligence.metal_device.redstone_buffer.name=Redstone Buffer tile.immersiveintelligence.metal_device.punchtape_reader.name=Punchtape Reader tile.immersiveintelligence.metal_device.data_router.name=Data Router -tile.immersiveintelligence.metal_device.data_merger.name=Data Combiner +tile.immersiveintelligence.metal_device.data_merger.name=Data Merger tile.immersiveintelligence.metal_device.ammunition_crate.name=Ammunition Crate tile.immersiveintelligence.metal_device.medic_crate.name=Medical Crate @@ -914,9 +914,11 @@ subtitle.immersiveintelligence.bullet_flyby=Bullet Flying subtitle.immersiveintelligence.bullet_impact=Projectile Impact subtitle.immersiveintelligence.bullet_ricochet=Projectile Ricochets Off -subtitle.immersiveintelligence.motorbike_start=Starting a Motorbike -subtitle.immersiveintelligence.motorbike_engine=Motorbike Engine Noise -subtitle.immersiveintelligence.motorbike_horn=Motorbike Horn +subtitle.immersiveintelligence.light_engine_start=Light Vehicle Starting +subtitle.immersiveintelligence.light_engine=Light Vehicle Engine Noise +subtitle.immersiveintelligence.vehicle_horn=Vehicle Horn + +subtitle.immersiveintelligence.drone_propeller=Propellers Rotating subtitle.immersiveintelligence.fuel_station=Fuel pumping subtitle.immersiveintelligence.welding=Welding @@ -948,7 +950,8 @@ subtitle.immersiveintelligence.mortar_shot=Mortar Firing subtitle.immersiveintelligence.mortar_load=Mortar Loading subtitle.immersiveintelligence.mine_detector=Mine Detector Beeps -subtitle.immersiveintelligence.construction=Hammer-Assisted Construction +subtitle.immersiveintelligence.construction=Ongoing Construction +subtitle.immersiveintelligence.weapon_placed=Mounted Weapon Deploying subtitle.immersiveintelligence.gate_open=Gate Opening subtitle.immersiveintelligence.gate_close=Gate Closing @@ -1134,6 +1137,16 @@ machineupgrade.immersiveintelligence.emplacement.guided_missile_launcher.desc=Th machineupgrade.immersiveintelligence.emplacement.tesla=Tesla Tower machineupgrade.immersiveintelligence.emplacement.tesla.desc=The Tesla Tower uses high voltage to decimate enemies in its radius, it's especially effective against electronics +#Data Input Machine +machineupgrade.immersiveintelligence.advanced_data=Advanced Input Device +machineupgrade.immersiveintelligence.advanced_data.desc=Replaces the converted typewriter with a proper, fully electronic control panel, allowing the user to enter in advanced data types like Vector, Map and Array. + +#Arithmetic-Logic Machine +machineupgrade.immersiveintelligence.memory=Built-in Memory +machineupgrade.immersiveintelligence.memory.desc=Adds a page of built in memory to load and save the data operation results. +machineupgrade.immersiveintelligence.circuit_racks=Additional Circuit Racks +machineupgrade.immersiveintelligence.circuit_racks.desc=Adds racks that allow mounting two more circuit inside the machine. + #Other upgrades machineupgrade.immersiveintelligence.core_filler=Projectile Filler machineupgrade.immersiveintelligence.core_filler.desc=Equipping the Projectile Workshop with an inserter allows precise filling of the projectiles with desired components. @@ -1267,13 +1280,23 @@ desc.immersiveintelligence.variable_send_packet=Send Packet desc.immersiveintelligence.variable_send_packet_desc=Sends the current packet to data network desc.immersiveintelligence.variable_remove_desc=Remove a variable desc.immersiveintelligence.variable_properties=Properties +desc.immersiveintelligence.variable_properties.tooltip=Edit expression properties, like conditional variables. desc.immersiveintelligence.variable_value=Value: desc.immersiveintelligence.operation=Operation: + desc.immersiveintelligence.conditional_variable=Conditional Variable: +desc.immersiveintelligence.conditional_variable.enabled=Use condition +desc.immersiveintelligence.conditional_variable.enabled.tooltip=When enabled, the expression will not run, unless the selected variable is present in the packet operated on +desc.immersiveintelligence.conditional_variable.tooltip=Variable required for this expression to run + +desc.immersiveintelligence.expression.accessor.tooltip=Use a variable from the received packet instead of a literal value +desc.immersiveintelligence.expression.condition.info=When enabled, this expression only runs if the selected variable exists in the received packet. + desc.immersiveintelligence.no_variable=None desc.immersiveintelligence.variable=Variable: desc.immersiveintelligence.variable_apply=Apply desc.immersiveintelligence.variable_remove=Remove +desc.immersiveintelligence.no_editor=No editor available. desc.immersiveintelligence.diplomacy.ownedby=Property of %s desc.immersiveintelligence.diplomacy.noowner=Abandoned Property @@ -1410,8 +1433,15 @@ desc.immersiveintelligence.diplomacy.permission_level.allies_allow=Allies desc.immersiveintelligence.diplomacy.permission_level.others_allow=Others desc.immersiveintelligence.diplomacy.permission_level.enemy_allow=Enemies -#Bullets +#Directions +desc.immersiveintelligence.side.down=Down +desc.immersiveintelligence.side.up=Up +desc.immersiveintelligence.side.north=North +desc.immersiveintelligence.side.south=South +desc.immersiveintelligence.side.west=West +desc.immersiveintelligence.side.east=East +#Bullets desc.immersiveintelligence.bullet_type.general_purpose=General Purpose desc.immersiveintelligence.bullet_type.shrapnel=Shrapnel desc.immersiveintelligence.bullet_type.piercing=Armor Piercing @@ -1481,10 +1511,6 @@ desc.immersiveintelligence.bullets.armor_penetration=Armor Penetration: desc.immersiveintelligence.bullet_magazine.remaining=Remaining Bullets: %s desc.immersiveintelligence.bullet_magazine.empty=Empty -desc.immersiveintelligence.data_merger.0=Both -desc.immersiveintelligence.data_merger.1=Left -desc.immersiveintelligence.data_merger.2=Right - desc.immersiveintelligence.medical_crate.heal=Heal Wounded Entities desc.immersiveintelligence.medical_crate.boost=Apply Effects to Entities @@ -2700,6 +2726,11 @@ key.immersiveintelligence.vehicle.tow.toggle=Tow/Untow key.immersiveintelligence.vehicle.tow.start=Tow key.immersiveintelligence.vehicle.tow.stop=Untow +key.immersiveintelligence.vehicle.gun.up=Elevate Gun +key.immersiveintelligence.vehicle.gun.down=Depress Gun +key.immersiveintelligence.vehicle.gun.left=Traverse Gun Left +key.immersiveintelligence.vehicle.gun.right=Traverse Gun Right + #Advancements advancement.immersiveintelligence.root=Immersive Intelligence advancement.immersiveintelligence.root.desc=RTFM? @@ -2916,6 +2947,7 @@ ie.manual.entry.traits.paintable=Paintable ie.manual.entry.wip_warning0=Warning! Work-in-Progress Content. ie.manual.entry.wip_warning1=The Engineering Department is working hard to bring it to the front! +ie.manual.entry.wip_warning.upgrade=The feature may lack visuals or have no functionality, no not report this. ie.manual.entry.data_operation.inputs=Inputs ie.manual.entry.data_operation.output=Output @@ -3180,10 +3212,10 @@ ii.config.Light_Engineer_Armor=Light Engineer Armor #GUI Labels ii.gui.editor.editor_style=Visual/POL Editor -ii.gui.task_editor.tasks=Tasks -ii.gui.task_editor.tasks.tooltip=Tasks are assignments, that are repeated indefinitely. ii.gui.task_editor.jobs=Jobs -ii.gui.task_editor.jobs.tooltip=Jobs are assignments, that are discarded from memory, after a set amount of resource is transfered. +ii.gui.task_editor.jobs.tooltip=Jobs are assignments, that are repeated indefinitely. +ii.gui.task_editor.requests=Requests +ii.gui.task_editor.requests.tooltip=Requests are assignments, that are discarded from memory, after a set amount of resource is transfered. ii.gui.inserter.task_editor=Task Editor ii.gui.inserter.type=Type: @@ -3287,23 +3319,35 @@ ii.gui.radar.targets=Targets ii.gui.emplacement.platform_inventory=Platform Inventory ii.gui.emplacement.base_inventory=Base Inventory +ii.gui.emplacement.no_weapon=No weapon installed. + +ii.gui.emplacement.config.reacts_redstone=React to Redstone +ii.gui.emplacement.config.reacts_redstone.tooltip=When enabled, the weapon surfaces only while the Emplacement receives redstone. +ii.gui.emplacement.config.reacts_data=React to Data +ii.gui.emplacement.config.reacts_data.tooltip=When disabled, the Emplacement will not react to data input. +ii.gui.emplacement.config.hide_health=Hide when health is below: +ii.gui.emplacement.config.hide_health.tooltip=Minimum weapon health percentage. Below this value, the platform hides for repairs. +ii.gui.emplacement.config.resurface_health=Repair until health reaches: +ii.gui.emplacement.config.resurface_health.tooltip=Weapon health percentage considered sufficient to surface again after repairs. + +ii.gui.emplacement.config.vision_range=Vision Range: %s b +ii.gui.emplacement.config.attack_range=Attack Range: %s b + +ii.gui.emplacement.fire_missions.editor=Fire Mission +ii.gui.emplacement.fire_missions.type=Type +ii.gui.emplacement.fire_missions.type.position=Position +ii.gui.emplacement.fire_missions.type.entity=Entity +ii.gui.emplacement.fire_missions.position=Target Position +ii.gui.emplacement.fire_missions.entity_id=Entity ID +ii.gui.emplacement.fire_missions.finite_shots=Limit Shots +ii.gui.emplacement.fire_missions.shots=Shots +ii.gui.emplacement.fire_missions.shots_left=%s shots +ii.gui.emplacement.fire_missions.until_done=until done -ii.gui.emplacement.weapon=Mounted: %s -ii.gui.emplacement.weapon_none=None -ii.gui.emplacement.upgrades=Installed Upgrades -ii.gui.emplacement.settings=Settings -ii.gui.emplacement.redstone_control=Redstone Controlled -ii.gui.emplacement.data_control=Data Controlled -ii.gui.emplacement.send_attack_signal=Output target(s) trough data -ii.gui.emplacement.auto_repair_threshold=Repair when health is below: ii.gui.emplacement.selector_preset=Selector Preset ii.gui.emplacement.filter=Filter ii.gui.emplacement.task_enabled=Enabled ii.gui.emplacement.task_negation=Negation -ii.gui.emplacement.add=Add Task -ii.gui.emplacement.remove=Remove Task -ii.gui.emplacement.duplicate=Duplicate Task -ii.gui.emplacement.clear=Clear ALL Tasks (Caution!) ii.gui.emplacement.target.mobs=Mobs ii.gui.emplacement.target.animals=Animals @@ -3354,6 +3398,84 @@ ii.gui.redstone_data_interface.mode.integer_100=Integer 0-100 ii.gui.redstone_data_interface.mode.float=Float 0-1 ii.gui.redstone_data_interface.mode.string=String +ii.gui.projectile_workshop.component_info=Component Info +ii.gui.projectile_workshop.component.role=Role: %s +ii.gui.projectile_workshop.component.density=Density: %s +ii.gui.projectile_workshop.component.slots_taken=Slots Taken: %s +ii.gui.projectile_workshop.entry.core=Core +ii.gui.projectile_workshop.entry.type=Type +ii.gui.projectile_workshop.tooltip.core_type=Core Type +ii.gui.projectile_workshop.tooltip.ammunition_type=Ammunition Type +ii.gui.projectile_workshop.cost=Cost: +ii.gui.projectile_workshop.invalid_cost=Cost: 250 Pabulions +ii.gui.projectile_workshop.material_preview=Material Preview +ii.gui.projectile_workshop.section.core=Core +ii.gui.projectile_workshop.section.ballistics=Ballistics +ii.gui.projectile_workshop.tooltip.component_slots=Component Slots +ii.gui.projectile_workshop.tooltip.component_effect_shape=Component Effect Shape +ii.gui.projectile_workshop.tooltip.component_efficiency=Component Efficiency Modifier +ii.gui.projectile_workshop.tooltip.component_efficiency.line1=Determines potency. +ii.gui.projectile_workshop.tooltip.component_efficiency.line2=Responsible for explosive power, chemical gas concentration. +ii.gui.projectile_workshop.tooltip.component_size=Component Size Multiplier +ii.gui.projectile_workshop.tooltip.component_size.line1=Determines component volume, responsible for explosion radius, gas spread range multiplier. +ii.gui.projectile_workshop.tooltip.core_mass=Core Mass +ii.gui.projectile_workshop.tooltip.damage_dealt=Damage Dealt +ii.gui.projectile_workshop.tooltip.velocity=Velocity +ii.gui.projectile_workshop.tooltip.available_fuzes=Available Fuzes +ii.gui.projectile_workshop.tooltip.penetration_hardness=Penetration Hardness +ii.gui.projectile_workshop.tooltip.flat_trajectory_range=Flat-Trajectory Range +ii.gui.projectile_workshop.tooltip.max_artillery_range=Max. Artillery Range +ii.gui.projectile_workshop.unit.blocks=%s b +ii.gui.projectile_workshop.unit.blocks_per_tick=%s b/t +ii.gui.projectile_workshop.value.penetration_hardness=%s b %s +ii.gui.projectile_workshop.unit.multiplier=%sx + +ii.gui.ammunition_assembler.fuse_config.timed=Time: +ii.gui.ammunition_assembler.fuse_config.timed.tooltip=Time before fuse triggers (in ticks) +ii.gui.ammunition_assembler.fuse_config.proximity=Distance: +ii.gui.ammunition_assembler.fuse_config.proximity.tooltip=Required distance to a solid object to trigger the fuse (in blocks) + +ii.gui.data_router.into=Into side: %s +ii.gui.data_router.rule_editor=Data Routing Rule +ii.gui.data_router.rule_properties=Rule Properties +ii.gui.data_router.routing=Routing +ii.gui.data_router.packet_filters=Packet Filters +ii.gui.data_router.incoming=Inputs: +ii.gui.data_router.incoming.tooltip=Direction of the inbound packet for this rule to apply. +ii.gui.data_router.outgoing=Output: +ii.gui.data_router.outgoing.tooltip=Direction the outbound packet will be sent to under this rule. +ii.gui.data_router.action=Action: +ii.gui.data_router.action.tooltip=Determines what happens to packets matching this rule. +ii.gui.data_router.filter.color=Color +ii.gui.data_router.filter.address=Address +ii.gui.data_router.required_variables=Required Variables +ii.gui.data_router.filter.value=Match Value +ii.gui.data_router.remove_control_variable=Remove Control Variable +ii.gui.data_router.remove_control_variable.tooltip=When enabled, the control variable will be omitted in the outgoing packet +ii.gui.data_router.action.allow=Allow +ii.gui.data_router.action.deny=Deny + +ii.gui.data_merger.rule_properties=Merge Rule +ii.gui.data_merger.inputs=Inputs +ii.gui.data_merger.override_policy=Overwrite Policy +ii.gui.data_merger.variable=Variable +ii.gui.data_merger.accept_left=Accept Left +ii.gui.data_merger.accept_left.tooltip=Packets coming to the left side of the device will be accepted. +ii.gui.data_merger.accept_right=Accept Right +ii.gui.data_merger.accept_right.tooltip=Packets coming to the right side of the device will be accepted. +ii.gui.data_merger.trigger_forwarding=Mark for sending +ii.gui.data_merger.trigger_forwarding.tooltip=When this variable is present in a packet, the machine will send the merged data. +ii.gui.data_merger.usage_limit=Uses left: +ii.gui.data_merger.usage_limit.tooltip=Empty means this rule is a repeating Job. A number makes it an expiring Request. +ii.gui.data_merger.right_overrides_cached=Right Overrides Cache +ii.gui.data_merger.right_overrides_cached.tooltip=When both side caches contain this variable, the right-side cached value wins. +ii.gui.data_merger.right_overrides_value=Right Overrides Output +ii.gui.data_merger.right_overrides_value.tooltip=When enabled, the selected cached value may replace the value already present in the outgoing packet. +ii.gui.data_merger.left=Left +ii.gui.data_merger.right=Right +ii.gui.data_merger.send=Send + + #GUI HelpBoxes ii.gui_help.data_input_machine.programming=These slots allow reading a punchtape into the DIM's memory or writing its contents into an empty one. ii.gui_help.data_input_machine.storage=These slots allow storing empty or programmed punchtapes for convenience. @@ -3394,6 +3516,7 @@ ii.gui_tooltip.widget.ownership.hide=Hide Ownership Data ii.gui_tooltip.widget.ownership=Ownership ii.gui_tooltip.widget.manual.show=Show Side Manual ii.gui_tooltip.widget.manual.hide=Hide Side Manual +ii.gui_tooltip.widget.manual.page=Open in Engineer's Manual ii.gui_tooltip.widget.manual=Engineer's Manual ii.gui_tooltip.energy.stored=Energy Stored: %s/%s IF diff --git a/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector.json b/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector.json deleted file mode 100644 index 097bd2191..000000000 --- a/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "credit": "Made with Blockbench", - "texture_size": [32, 32], - "textures": { - "0": "immersiveintelligence:blocks/metal_device/latex_collector", - "particle": "immersiveintelligence:blocks/metal_device/latex_collector" - }, - "elements": [ - { - "name": "table", - "from": [1, 3, 4], - "to": [15, 4, 16], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [15, 3, 9] - }, - "faces": { - "north": { - "uv": [7, 5.5, 14, 6], - "texture": "#0" - }, - "east": { - "uv": [7, 0, 7.5, 6], - "rotation": 270, - "texture": "#0" - }, - "south": { - "uv": [7, 0, 14, 0.5], - "rotation": 180, - "texture": "#0" - }, - "west": { - "uv": [7, 0, 7.5, 6], - "rotation": 90, - "texture": "#0" - }, - "up": { - "uv": [7, 0, 14, 6], - "rotation": 180, - "texture": "#0" - }, - "down": { - "uv": [7, 6, 14, 0], - "rotation": 180, - "texture": "#0" - } - } - }, - { - "name": "table", - "from": [3, 2, 6], - "to": [5, 3, 16], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [4, 2.5, 11] - }, - "faces": { - "north": { - "uv": [5.5, 3.5, 6.5, 4], - "texture": "#0" - }, - "east": { - "uv": [5.5, 3.5, 6, 8.5], - "rotation": 270, - "texture": "#0" - }, - "south": { - "uv": [5.5, 8, 6.5, 8.5], - "rotation": 180, - "texture": "#0" - }, - "west": { - "uv": [6, 3.5, 6.5, 8.5], - "rotation": 90, - "texture": "#0" - }, - "up": { - "uv": [0, 0, 2, 10], - "rotation": 180, - "texture": "#missing" - }, - "down": { - "uv": [5.5, 3.5, 6.5, 8.5], - "rotation": 180, - "texture": "#0" - } - } - }, - { - "name": "table", - "from": [11, 2, 6], - "to": [13, 3, 16], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [12, 2.5, 11] - }, - "faces": { - "north": { - "uv": [5.5, 3.5, 6.5, 4], - "texture": "#0" - }, - "east": { - "uv": [5.5, 3.5, 6, 8.5], - "rotation": 270, - "texture": "#0" - }, - "south": { - "uv": [5.5, 8, 6.5, 8.5], - "rotation": 180, - "texture": "#0" - }, - "west": { - "uv": [6, 3.5, 6.5, 8.5], - "rotation": 90, - "texture": "#0" - }, - "up": { - "uv": [0, 0, 2, 10], - "rotation": 180, - "texture": "#missing" - }, - "down": { - "uv": [5.5, 3.5, 6.5, 8.5], - "rotation": 180, - "texture": "#0" - } - } - }, - { - "name": "table", - "from": [6, 17, 11], - "to": [10, 18, 18], - "rotation": { - "angle": -22.5, - "axis": "x", - "origin": [8, 16.5, 15.5] - }, - "faces": { - "north": { - "uv": [5, 3, 7, 3.5], - "rotation": 180, - "texture": "#0" - }, - "east": { - "uv": [5, 0, 5.5, 3.5], - "rotation": 270, - "texture": "#0" - }, - "south": { - "uv": [5, 0, 7, 0.5], - "texture": "#0" - }, - "west": { - "uv": [6.5, 0, 7, 3.5], - "rotation": 90, - "texture": "#0" - }, - "up": { - "uv": [5, 0, 7, 3.5], - "rotation": 180, - "texture": "#0" - }, - "down": { - "uv": [5, 0, 7, 3.5], - "texture": "#0" - } - } - }, - { - "name": "table", - "from": [9, 18, 11], - "to": [10, 19, 18], - "rotation": { - "angle": -22.5, - "axis": "x", - "origin": [8, 16.5, 15.5] - }, - "faces": { - "north": { - "uv": [5, 3, 5.5, 3.5], - "rotation": 180, - "texture": "#0" - }, - "east": { - "uv": [5, 0, 5.5, 3.5], - "rotation": 270, - "texture": "#0" - }, - "south": { - "uv": [5, 0, 5.5, 0.5], - "texture": "#0" - }, - "west": { - "uv": [5, 0, 5.5, 3.5], - "rotation": 90, - "texture": "#0" - }, - "up": { - "uv": [5, 0, 5.5, 3.5], - "rotation": 180, - "texture": "#0" - }, - "down": { - "uv": [0, 0, 1, 7], - "rotation": 180, - "texture": "#missing" - } - } - }, - { - "name": "table", - "from": [6, 18, 11], - "to": [7, 19, 18], - "rotation": { - "angle": -22.5, - "axis": "x", - "origin": [8, 16.5, 15.5] - }, - "faces": { - "north": { - "uv": [6.5, 3, 7, 3.5], - "rotation": 180, - "texture": "#0" - }, - "east": { - "uv": [6.5, 0, 7, 3.5], - "rotation": 270, - "texture": "#0" - }, - "south": { - "uv": [6.5, 0, 7, 0.5], - "texture": "#0" - }, - "west": { - "uv": [6.5, 0, 7, 3.5], - "rotation": 90, - "texture": "#0" - }, - "up": { - "uv": [6.5, 0, 7, 3.5], - "rotation": 180, - "texture": "#0" - }, - "down": { - "uv": [0, 0, 1, 7], - "rotation": 180, - "texture": "#missing" - } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector.mtl b/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector.mtl new file mode 100644 index 000000000..6f70e2d68 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector.mtl @@ -0,0 +1,4 @@ +# Made by Pabilo8 with Blockbench + +newmtl latex_collector +map_Kd immersiveintelligence:blocks/metal_device/latex_collector \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector.obj.amt b/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector.obj.amt new file mode 100644 index 000000000..e889a3e0a --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector.obj.amt @@ -0,0 +1,20 @@ +{ + "origins": { + "bucket": [8, 4.65, 9.5], + "handle": [2.5, 15, 9], + "extractor": [14, 17, 17], + "latex": [0, 0, 0] + }, + "hierarchy": { + "handle": "bucket", + "latex": "bucket" + }, + "properties": { + "latex": { + "layers": [ + [6.0, 4.0, 6.0, 8.0, 8.0], + [15.0, 4.0, 6.0, 8.0, 8.0] + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector.obj.ie b/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector.obj.ie new file mode 100644 index 000000000..29701c6e7 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector.obj.ie @@ -0,0 +1,582 @@ +# Made by Pabilo8 with Blockbench +# Exported with IIToolkit Plugin on 15/05/2026 +mtllib latex_collector.mtl + +o bucket +v 0.75 1 0.9375 +v 0.75 1 0.875 +v 0.75 0.3125 0.9375 +v 0.75 0.3125 0.875 +v 0.25 1 0.9375 +v 0.25 1 0.875 +v 0.25 0.3125 0.9375 +v 0.25 0.3125 0.875 +v 0.25 1 0.3125 +v 0.25 0.3125 0.3125 +v 0.1875 1 0.9375 +v 0.1875 1 0.3125 +v 0.1875 0.3125 0.9375 +v 0.1875 0.3125 0.3125 +v 0.8125 1 0.9375 +v 0.8125 1 0.3125 +v 0.8125 0.3125 0.9375 +v 0.8125 0.3125 0.3125 +v 0.75 1 0.3125 +v 0.75 0.3125 0.3125 +v 0.75 1 0.375 +v 0.75 0.3125 0.375 +v 0.25 1 0.375 +v 0.25 0.3125 0.375 +v 0.8125 0.25 0.9375 +v 0.8125 0.25 0.3125 +v 0.1875 0.25 0.9375 +v 0.1875 0.25 0.3125 +vt 0.0313 0.9688 +vt 0.0313 1 +vt 0.2813 1 +vt 0.2813 0.9688 +vt 0.0313 0.6563 +vt 0.0313 1 +vt 0.2813 1 +vt 0.2813 0.6563 +vt 0.2813 0.6563 +vt 0.2813 1 +vt 0.0313 1 +vt 0.0313 0.6563 +vt 0 0.6563 +vt 0 1 +vt 0.3125 1 +vt 0.3125 0.6563 +vt 0.3125 0.6563 +vt 0.3125 1 +vt 0 1 +vt 0 0.6563 +vt 0.3125 1 +vt 0 1 +vt 0 0.9688 +vt 0.3125 0.9688 +vt 0.3125 0.6563 +vt 0.3125 1 +vt 0.2813 1 +vt 0.2813 0.6563 +vt 0.0313 0.6563 +vt 0.0313 1 +vt 0 1 +vt 0 0.6563 +vt 0.3125 0.6563 +vt 0.3125 1 +vt 0 1 +vt 0 0.6563 +vt 0 0.6563 +vt 0 1 +vt 0.3125 1 +vt 0.3125 0.6563 +vt 0 1 +vt 0.3125 1 +vt 0.3125 0.9688 +vt 0 0.9688 +vt 0.0313 0.6563 +vt 0.0313 1 +vt 0 1 +vt 0 0.6563 +vt 0.3125 0.6563 +vt 0.3125 1 +vt 0.2813 1 +vt 0.2813 0.6563 +vt 0.2813 0.9688 +vt 0.2813 1 +vt 0.0313 1 +vt 0.0313 0.9688 +vt 0.2813 0.6563 +vt 0.2813 1 +vt 0.0313 1 +vt 0.0313 0.6563 +vt 0.0313 0.6563 +vt 0.0313 1 +vt 0.2813 1 +vt 0.2813 0.6563 +vt 0 0.625 +vt 0 0.6563 +vt 0.3125 0.6563 +vt 0.3125 0.625 +vt 0.3125 0.625 +vt 0.3125 0.6563 +vt 0 0.6563 +vt 0 0.625 +vt 0.3125 0.3125 +vt 0.3125 0.625 +vt 0 0.625 +vt 0 0.3125 +vt 0.3125 0.3125 +vt 0.3125 0.625 +vt 0 0.625 +vt 0 0.3125 +vt 0 0.625 +vt 0 0.6563 +vt 0.3125 0.6563 +vt 0.3125 0.625 +vt 0.3125 0.625 +vt 0.3125 0.6563 +vt 0 0.6563 +vt 0 0.625 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +usemtl latex_collector +f 1/1/1 2/2/1 6/3/1 5/4/1 +f 3/5/2 1/6/2 5/7/2 7/8/2 +f 8/9/3 6/10/3 2/11/3 4/12/3 +f 10/13/4 9/14/4 5/15/4 7/16/4 +f 13/17/5 11/18/5 12/19/5 14/20/5 +f 5/21/6 9/22/6 12/23/6 11/24/6 +f 7/25/7 5/26/7 11/27/7 13/28/7 +f 14/29/8 12/30/8 9/31/8 10/32/8 +f 18/33/9 16/34/9 15/35/9 17/36/9 +f 3/37/10 1/38/10 19/39/10 20/40/10 +f 15/41/11 16/42/11 19/43/11 1/44/11 +f 17/45/12 15/46/12 1/47/12 3/48/12 +f 20/49/13 19/50/13 16/51/13 18/52/13 +f 21/53/14 19/54/14 9/55/14 23/56/14 +f 22/57/15 21/58/15 23/59/15 24/60/15 +f 10/61/16 9/62/16 19/63/16 20/64/16 +f 26/65/17 18/66/17 17/67/17 25/68/17 +f 27/69/18 13/70/18 14/71/18 28/72/18 +f 17/73/19 18/74/19 14/75/19 13/76/19 +f 26/77/20 25/78/20 27/79/20 28/80/20 +f 25/81/21 17/82/21 13/83/21 27/84/21 +f 28/85/22 14/86/22 18/87/22 26/88/22 +o handle +v 0.1875 1.4688 0.5938 +v 0.1875 0.9063 0.5938 +v 0.1875 1.4688 0.6563 +v 0.1875 0.9063 0.6563 +v 0.125 1.4688 0.5938 +v 0.125 0.9063 0.5938 +v 0.125 1.4688 0.6563 +v 0.125 0.9063 0.6563 +v 0.875 1.4688 0.5938 +v 0.875 0.9063 0.5938 +v 0.875 1.4688 0.6563 +v 0.875 0.9063 0.6563 +v 0.8125 1.4688 0.5938 +v 0.8125 0.9063 0.5938 +v 0.8125 1.4688 0.6563 +v 0.8125 0.9063 0.6563 +v 0.8125 1.5 0.5625 +v 0.8125 1.375 0.5625 +v 0.8125 1.5 0.6875 +v 0.8125 1.375 0.6875 +v 0.1875 1.5 0.5625 +v 0.1875 1.375 0.5625 +v 0.1875 1.5 0.6875 +v 0.1875 1.375 0.6875 +vt 0.3438 0.6563 +vt 0.3125 0.6563 +vt 0.3125 0.3125 +vt 0.3438 0.3125 +vt 0.3125 0.3125 +vt 0.3438 0.3125 +vt 0.3438 0.6563 +vt 0.3125 0.6563 +vt 0.3438 0.3125 +vt 0.3438 0.6563 +vt 0.3125 0.6563 +vt 0.3125 0.3125 +vt 0.3125 0.6563 +vt 0.3125 0.3125 +vt 0.3438 0.3125 +vt 0.3438 0.6563 +vt 0.3438 0.3125 +vt 0.3438 0.3438 +vt 0.3125 0.3438 +vt 0.3125 0.3125 +vt 0.3438 0.625 +vt 0.3438 0.6563 +vt 0.3125 0.6563 +vt 0.3125 0.625 +vt 0.3438 0.6563 +vt 0.3125 0.6563 +vt 0.3125 0.3125 +vt 0.3438 0.3125 +vt 0.3125 0.3125 +vt 0.3438 0.3125 +vt 0.3438 0.6563 +vt 0.3125 0.6563 +vt 0.3438 0.3125 +vt 0.3438 0.6563 +vt 0.3125 0.6563 +vt 0.3125 0.3125 +vt 0.3125 0.6563 +vt 0.3125 0.3125 +vt 0.3438 0.3125 +vt 0.3438 0.6563 +vt 0.3438 0.3125 +vt 0.3438 0.3438 +vt 0.3125 0.3438 +vt 0.3125 0.3125 +vt 0.3438 0.625 +vt 0.3438 0.6563 +vt 0.3125 0.6563 +vt 0.3125 0.625 +vt 0.375 0.25 +vt 0.375 0.3125 +vt 0.3125 0.3125 +vt 0.3125 0.25 +vt 0.3125 0.3125 +vt 0.3125 0.25 +vt 0.375 0.25 +vt 0.375 0.3125 +vt 0.3125 0.3125 +vt 0.3125 0.25 +vt 0 0.25 +vt 0 0.3125 +vt 0.3125 0.3125 +vt 0.3125 0.25 +vt 0 0.25 +vt 0 0.3125 +vt 0.3125 0.25 +vt 0.3125 0.3125 +vt 0 0.3125 +vt 0 0.25 +vt 0 0.25 +vt 0 0.3125 +vt 0.3125 0.3125 +vt 0.3125 0.25 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +usemtl latex_collector +f 32/89/23 30/90/23 29/91/23 31/92/23 +f 35/93/24 33/94/24 34/95/24 36/96/24 +f 29/97/25 30/98/25 34/99/25 33/100/25 +f 32/101/26 31/102/26 35/103/26 36/104/26 +f 31/105/27 29/106/27 33/107/27 35/108/27 +f 36/109/28 34/110/28 30/111/28 32/112/28 +f 40/113/29 38/114/29 37/115/29 39/116/29 +f 43/117/30 41/118/30 42/119/30 44/120/30 +f 37/121/31 38/122/31 42/123/31 41/124/31 +f 40/125/32 39/126/32 43/127/32 44/128/32 +f 39/129/33 37/130/33 41/131/33 43/132/33 +f 44/133/34 42/134/34 38/135/34 40/136/34 +f 48/137/35 46/138/35 45/139/35 47/140/35 +f 51/141/36 49/142/36 50/143/36 52/144/36 +f 45/145/37 46/146/37 50/147/37 49/148/37 +f 48/149/38 47/150/38 51/151/38 52/152/38 +f 47/153/39 45/154/39 49/155/39 51/156/39 +f 52/157/40 50/158/40 46/159/40 48/160/40 +o extractor +v -0.0312 1.125 0.9688 +v -0.0312 1.1875 2.0313 +v -0.0312 0.9375 0.9688 +v -0.0312 1 2.0313 +v 1.0313 1.125 0.9688 +v 1.0313 1.1875 2.0313 +v 1.0313 0.9375 0.9688 +v 1.0313 1 2.0313 +v 0.8864 1.117 1.2813 +v 0.8864 1.117 1.4063 +v 0.9081 0.9939 1.2813 +v 0.9081 0.9939 1.4063 +v 1.0711 1.1496 1.2813 +v 1.0711 1.1496 1.4063 +v 1.0928 1.0265 1.2813 +v 1.0928 1.0265 1.4063 +v 0.1136 1.117 1.7813 +v 0.1136 1.117 1.9063 +v 0.0919 0.9939 1.7813 +v 0.0919 0.9939 1.9063 +v -0.0711 1.1496 1.7813 +v -0.0711 1.1496 1.9063 +v -0.0928 1.0265 1.7813 +v -0.0928 1.0265 1.9063 +v 0.5722 1.172 1.9266 +v 0.6934 1.1506 1.9049 +v 0.5471 1.0514 1.9052 +v 0.6683 1.03 1.8835 +v 0.5981 1.1343 2.1085 +v 0.7193 1.113 2.0868 +v 0.573 1.0138 2.0871 +v 0.6943 0.9924 2.0654 +v 0.375 1.068 0.6491 +v 0.375 1.2354 1.0533 +v 0.375 1.0102 0.673 +v 0.375 1.1777 1.0772 +v 0.4375 1.068 0.6491 +v 0.4375 1.2354 1.0533 +v 0.4375 1.0102 0.673 +v 0.4375 1.1777 1.0772 +v 0.375 0.9525 0.697 +v 0.375 1.1199 1.1011 +v 0.625 1.0102 0.673 +v 0.625 1.1777 1.0772 +v 0.625 0.9525 0.697 +v 0.625 1.1199 1.1011 +v 0.5625 1.068 0.6491 +v 0.5625 1.2354 1.0533 +v 0.5625 1.0102 0.673 +v 0.5625 1.1777 1.0772 +v 0.625 1.068 0.6491 +v 0.625 1.2354 1.0533 +vt 0.5313 0.0313 +vt 0.5313 0.125 +vt 0 0.125 +vt 0 0.0313 +vt 0.5313 0.0313 +vt 0.5313 0.125 +vt 0 0.125 +vt 0 0.0313 +vt 0.5313 0.0313 +vt 0.5313 0.125 +vt 0 0.125 +vt 0 0.0313 +vt 0.5313 0.0313 +vt 0.5313 0.125 +vt 0 0.125 +vt 0 0.0313 +vt 0.5938 0.1875 +vt 0.5938 0.25 +vt 0.5313 0.25 +vt 0.5313 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.25 +vt 0.5313 0.25 +vt 0.5313 0.1875 +vt 0.6875 0.0938 +vt 0.625 0.0938 +vt 0.625 0.1875 +vt 0.6875 0.1875 +vt 0.5313 0.0938 +vt 0.5938 0.0938 +vt 0.5938 0.1875 +vt 0.5313 0.1875 +vt 0.5625 0.0938 +vt 0.625 0.0938 +vt 0.625 0.1875 +vt 0.5625 0.1875 +vt 0.5938 0.1875 +vt 0.6563 0.1875 +vt 0.6563 0.0938 +vt 0.5938 0.0938 +vt 0.5313 0.25 +vt 0.5938 0.25 +vt 0.5938 0.1875 +vt 0.5313 0.1875 +vt 0.5313 0.25 +vt 0.5938 0.25 +vt 0.5938 0.1875 +vt 0.5313 0.1875 +vt 0.625 0.1875 +vt 0.625 0.0938 +vt 0.6875 0.0938 +vt 0.6875 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0938 +vt 0.5313 0.0938 +vt 0.5313 0.1875 +vt 0.625 0.1875 +vt 0.625 0.0938 +vt 0.5625 0.0938 +vt 0.5625 0.1875 +vt 0.6563 0.0938 +vt 0.6563 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0938 +vt 0.5313 0.25 +vt 0.5938 0.25 +vt 0.5938 0.1875 +vt 0.5313 0.1875 +vt 0.5313 0.25 +vt 0.5938 0.25 +vt 0.5938 0.1875 +vt 0.5313 0.1875 +vt 0.625 0.1875 +vt 0.625 0.0938 +vt 0.6875 0.0938 +vt 0.6875 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0938 +vt 0.5313 0.0938 +vt 0.5313 0.1875 +vt 0.625 0.1875 +vt 0.625 0.0938 +vt 0.5625 0.0938 +vt 0.5625 0.1875 +vt 0.6563 0.0938 +vt 0.6563 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0938 +vt 0.4375 1 +vt 0.4063 1 +vt 0.4063 0.7813 +vt 0.4375 0.7813 +vt 0.4063 0.7813 +vt 0.4375 0.7813 +vt 0.4375 1 +vt 0.4063 1 +vt 0.4375 0.7813 +vt 0.4375 1 +vt 0.4063 1 +vt 0.4063 0.7813 +vt 0.4063 0.8125 +vt 0.4063 0.7813 +vt 0.4375 0.7813 +vt 0.4375 0.8125 +vt 0.4375 0.9688 +vt 0.4375 1 +vt 0.4063 1 +vt 0.4063 0.9688 +vt 0.4375 1 +vt 0.4063 1 +vt 0.4063 0.7813 +vt 0.4375 0.7813 +vt 0.3125 0.7813 +vt 0.3438 0.7813 +vt 0.3438 1 +vt 0.3125 1 +vt 0.4375 0.7813 +vt 0.4375 1 +vt 0.3125 1 +vt 0.3125 0.7813 +vt 0.3125 1 +vt 0.3125 0.7813 +vt 0.4375 0.7813 +vt 0.4375 1 +vt 0.3125 0.8125 +vt 0.3125 0.7813 +vt 0.4375 0.7813 +vt 0.4375 0.8125 +vt 0.4375 0.9688 +vt 0.4375 1 +vt 0.3125 1 +vt 0.3125 0.9688 +vt 0.3438 1 +vt 0.3125 1 +vt 0.3125 0.7813 +vt 0.3438 0.7813 +vt 0.3125 0.7813 +vt 0.3438 0.7813 +vt 0.3438 1 +vt 0.3125 1 +vt 0.3438 0.7813 +vt 0.3438 1 +vt 0.3125 1 +vt 0.3125 0.7813 +vt 0.3125 0.8125 +vt 0.3125 0.7813 +vt 0.3438 0.7813 +vt 0.3438 0.8125 +vt 0.3438 0.9688 +vt 0.3438 1 +vt 0.3125 1 +vt 0.3125 0.9688 +vn -1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.98 -0.17 0 +vn 0.98 0.17 0 +vn -0.17 0.98 0 +vn 0.17 -0.98 0 +vn 0 0 -1 +vn 0 0 1 +vn 0.98 -0.17 0 +vn -0.98 0.17 0 +vn 0.17 0.98 0 +vn -0.17 -0.98 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.14 0.2 -0.97 +vn 0.14 -0.2 0.97 +vn 0.2 0.96 0.17 +vn -0.2 -0.96 -0.17 +vn -0.97 0.17 0.17 +vn 0.97 -0.17 -0.17 +vn -1 0 0 +vn 1 0 0 +vn 0 0.92 -0.38 +vn 0 -0.38 -0.92 +vn 0 0.38 0.92 +vn -1 0 0 +vn 1 0 0 +vn 0 0.92 -0.38 +vn 0 -0.92 0.38 +vn 0 -0.38 -0.92 +vn 0 0.38 0.92 +vn -1 0 0 +vn 1 0 0 +vn 0 0.92 -0.38 +vn 0 -0.38 -0.92 +vn 0 0.38 0.92 +usemtl latex_collector +f 56/161/41 54/162/41 53/163/41 55/164/41 +f 59/165/42 57/166/42 58/167/42 60/168/42 +f 55/169/43 53/170/43 57/171/43 59/172/43 +f 60/173/44 58/174/44 54/175/44 56/176/44 +f 64/177/45 62/178/45 61/179/45 63/180/45 +f 67/181/46 65/182/46 66/183/46 68/184/46 +f 61/185/47 62/186/47 66/187/47 65/188/47 +f 64/189/48 63/190/48 67/191/48 68/192/48 +f 63/193/49 61/194/49 65/195/49 67/196/49 +f 68/197/50 66/198/50 62/199/50 64/200/50 +f 69/201/51 70/202/51 72/203/51 71/204/51 +f 74/205/52 73/206/52 75/207/52 76/208/52 +f 74/209/53 70/210/53 69/211/53 73/212/53 +f 75/213/54 71/214/54 72/215/54 76/216/54 +f 73/217/55 69/218/55 71/219/55 75/220/55 +f 70/221/56 74/222/56 76/223/56 72/224/56 +f 77/225/57 78/226/57 80/227/57 79/228/57 +f 82/229/58 81/230/58 83/231/58 84/232/58 +f 82/233/59 78/234/59 77/235/59 81/236/59 +f 83/237/60 79/238/60 80/239/60 84/240/60 +f 81/241/61 77/242/61 79/243/61 83/244/61 +f 78/245/62 82/246/62 84/247/62 80/248/62 +f 88/249/63 86/250/63 85/251/63 87/252/63 +f 91/253/64 89/254/64 90/255/64 92/256/64 +f 85/257/65 86/258/65 90/259/65 89/260/65 +f 87/261/66 85/262/66 89/263/66 91/264/66 +f 92/265/67 90/266/67 86/267/67 88/268/67 +f 94/269/68 88/270/68 87/271/68 93/272/68 +f 97/273/69 95/274/69 96/275/69 98/276/69 +f 87/277/70 88/278/70 96/279/70 95/280/70 +f 94/281/71 93/282/71 97/283/71 98/284/71 +f 93/285/72 87/286/72 95/287/72 97/288/72 +f 98/289/73 96/290/73 88/291/73 94/292/73 +f 102/293/74 100/294/74 99/295/74 101/296/74 +f 95/297/75 103/298/75 104/299/75 96/300/75 +f 99/301/76 100/302/76 104/303/76 103/304/76 +f 101/305/77 99/306/77 103/307/77 95/308/77 +f 96/309/78 104/310/78 100/311/78 102/312/78 \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector_base.obj b/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector_base.obj new file mode 100644 index 000000000..1980edc9b --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector_base.obj @@ -0,0 +1,126 @@ +# Made by Pabilo8 with Blockbench +# Exported with IIToolkit Plugin on 15/05/2026 +mtllib latex_collector.mtl + +o base +v 0.9375 0.25 1 +v 0.9375 0.25 0.25 +v 0.9375 0.1875 1 +v 0.9375 0.1875 0.25 +v 0.0625 0.25 1 +v 0.0625 0.25 0.25 +v 0.0625 0.1875 1 +v 0.0625 0.1875 0.25 +v 0.8125 0.1875 0.875 +v 0.8125 0.1875 0.25 +v 0.8125 0.125 0.875 +v 0.8125 0.125 0.25 +v 0.6875 0.1875 0.875 +v 0.6875 0.1875 0.25 +v 0.6875 0.125 0.875 +v 0.6875 0.125 0.25 +v 0.3125 0.1875 0.875 +v 0.3125 0.1875 0.25 +v 0.3125 0.125 0.875 +v 0.3125 0.125 0.25 +v 0.1875 0.1875 0.875 +v 0.1875 0.1875 0.25 +v 0.1875 0.125 0.875 +v 0.1875 0.125 0.25 +vt 0.4688 1 +vt 0.4375 1 +vt 0.4375 0.625 +vt 0.4688 0.625 +vt 0.4375 0.625 +vt 0.4688 0.625 +vt 0.4688 1 +vt 0.4375 1 +vt 0.875 0.625 +vt 0.875 1 +vt 0.4375 1 +vt 0.4375 0.625 +vt 0.875 1 +vt 0.875 0.625 +vt 0.4375 0.625 +vt 0.4375 1 +vt 0.875 0.625 +vt 0.875 0.6563 +vt 0.4375 0.6563 +vt 0.4375 0.625 +vt 0.4375 1 +vt 0.4375 0.9688 +vt 0.875 0.9688 +vt 0.875 1 +vt 0.4063 0.7813 +vt 0.375 0.7813 +vt 0.375 0.4688 +vt 0.4063 0.4688 +vt 0.3438 0.4688 +vt 0.375 0.4688 +vt 0.375 0.7813 +vt 0.3438 0.7813 +vt 0.4063 0.4688 +vt 0.4063 0.7813 +vt 0.3438 0.7813 +vt 0.3438 0.4688 +vt 0.4063 0.75 +vt 0.4063 0.7813 +vt 0.3438 0.7813 +vt 0.3438 0.75 +vt 0.3438 0.5 +vt 0.3438 0.4688 +vt 0.4063 0.4688 +vt 0.4063 0.5 +vt 0.4063 0.7813 +vt 0.375 0.7813 +vt 0.375 0.4688 +vt 0.4063 0.4688 +vt 0.3438 0.4688 +vt 0.375 0.4688 +vt 0.375 0.7813 +vt 0.3438 0.7813 +vt 0.4063 0.4688 +vt 0.4063 0.7813 +vt 0.3438 0.7813 +vt 0.3438 0.4688 +vt 0.4063 0.75 +vt 0.4063 0.7813 +vt 0.3438 0.7813 +vt 0.3438 0.75 +vt 0.3438 0.5 +vt 0.3438 0.4688 +vt 0.4063 0.4688 +vt 0.4063 0.5 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +usemtl latex_collector +f 4/1/1 2/2/1 1/3/1 3/4/1 +f 7/5/2 5/6/2 6/7/2 8/8/2 +f 1/9/3 2/10/3 6/11/3 5/12/3 +f 4/13/4 3/14/4 7/15/4 8/16/4 +f 3/17/5 1/18/5 5/19/5 7/20/5 +f 8/21/6 6/22/6 2/23/6 4/24/6 +f 12/25/7 10/26/7 9/27/7 11/28/7 +f 15/29/8 13/30/8 14/31/8 16/32/8 +f 12/33/9 11/34/9 15/35/9 16/36/9 +f 11/37/10 9/38/10 13/39/10 15/40/10 +f 16/41/11 14/42/11 10/43/11 12/44/11 +f 20/45/12 18/46/12 17/47/12 19/48/12 +f 23/49/13 21/50/13 22/51/13 24/52/13 +f 20/53/14 19/54/14 23/55/14 24/56/14 +f 19/57/15 17/58/15 21/59/15 23/60/15 +f 24/61/16 22/62/16 18/63/16 20/64/16 \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector_inv.obj b/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector_inv.obj new file mode 100644 index 000000000..01681c3eb --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector/latex_collector_inv.obj @@ -0,0 +1,440 @@ +# Made by Pabilo8 with Blockbench +# Exported with IIToolkit Plugin on 15/05/2026 +mtllib latex_collector.mtl + +o base +v 0.9375 0.25 1 +v 0.9375 0.25 0.25 +v 0.9375 0.1875 1 +v 0.9375 0.1875 0.25 +v 0.0625 0.25 1 +v 0.0625 0.25 0.25 +v 0.0625 0.1875 1 +v 0.0625 0.1875 0.25 +v 0.8125 0.1875 0.875 +v 0.8125 0.1875 0.25 +v 0.8125 0.125 0.875 +v 0.8125 0.125 0.25 +v 0.6875 0.1875 0.875 +v 0.6875 0.1875 0.25 +v 0.6875 0.125 0.875 +v 0.6875 0.125 0.25 +v 0.3125 0.1875 0.875 +v 0.3125 0.1875 0.25 +v 0.3125 0.125 0.875 +v 0.3125 0.125 0.25 +v 0.1875 0.1875 0.875 +v 0.1875 0.1875 0.25 +v 0.1875 0.125 0.875 +v 0.1875 0.125 0.25 +vt 0.4688 1 +vt 0.4375 1 +vt 0.4375 0.625 +vt 0.4688 0.625 +vt 0.4375 0.625 +vt 0.4688 0.625 +vt 0.4688 1 +vt 0.4375 1 +vt 0.875 0.625 +vt 0.875 1 +vt 0.4375 1 +vt 0.4375 0.625 +vt 0.875 1 +vt 0.875 0.625 +vt 0.4375 0.625 +vt 0.4375 1 +vt 0.875 0.625 +vt 0.875 0.6563 +vt 0.4375 0.6563 +vt 0.4375 0.625 +vt 0.4375 1 +vt 0.4375 0.9688 +vt 0.875 0.9688 +vt 0.875 1 +vt 0.4063 0.7813 +vt 0.375 0.7813 +vt 0.375 0.4688 +vt 0.4063 0.4688 +vt 0.3438 0.4688 +vt 0.375 0.4688 +vt 0.375 0.7813 +vt 0.3438 0.7813 +vt 0.4063 0.4688 +vt 0.4063 0.7813 +vt 0.3438 0.7813 +vt 0.3438 0.4688 +vt 0.4063 0.75 +vt 0.4063 0.7813 +vt 0.3438 0.7813 +vt 0.3438 0.75 +vt 0.3438 0.5 +vt 0.3438 0.4688 +vt 0.4063 0.4688 +vt 0.4063 0.5 +vt 0.4063 0.7813 +vt 0.375 0.7813 +vt 0.375 0.4688 +vt 0.4063 0.4688 +vt 0.3438 0.4688 +vt 0.375 0.4688 +vt 0.375 0.7813 +vt 0.3438 0.7813 +vt 0.4063 0.4688 +vt 0.4063 0.7813 +vt 0.3438 0.7813 +vt 0.3438 0.4688 +vt 0.4063 0.75 +vt 0.4063 0.7813 +vt 0.3438 0.7813 +vt 0.3438 0.75 +vt 0.3438 0.5 +vt 0.3438 0.4688 +vt 0.4063 0.4688 +vt 0.4063 0.5 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +usemtl latex_collector +f 4/1/1 2/2/1 1/3/1 3/4/1 +f 7/5/2 5/6/2 6/7/2 8/8/2 +f 1/9/3 2/10/3 6/11/3 5/12/3 +f 4/13/4 3/14/4 7/15/4 8/16/4 +f 3/17/5 1/18/5 5/19/5 7/20/5 +f 8/21/6 6/22/6 2/23/6 4/24/6 +f 12/25/7 10/26/7 9/27/7 11/28/7 +f 15/29/8 13/30/8 14/31/8 16/32/8 +f 12/33/9 11/34/9 15/35/9 16/36/9 +f 11/37/10 9/38/10 13/39/10 15/40/10 +f 16/41/11 14/42/11 10/43/11 12/44/11 +f 20/45/12 18/46/12 17/47/12 19/48/12 +f 23/49/13 21/50/13 22/51/13 24/52/13 +f 20/53/14 19/54/14 23/55/14 24/56/14 +f 19/57/15 17/58/15 21/59/15 23/60/15 +f 24/61/16 22/62/16 18/63/16 20/64/16 +o item +v 0.1522 0.4374 0.2813 +v 0.1522 0.4374 0.9688 +v 0.1603 0.2501 0.2813 +v 0.1603 0.2501 0.9688 +v 0.8438 0.4375 0.2813 +v 0.8438 0.4375 0.9688 +v 0.8438 0.25 0.2813 +v 0.8438 0.25 0.9688 +v 0.6583 0.3062 0.3438 +v 0.6583 0.3062 0.4688 +v 0.7803 0.2792 0.3438 +v 0.7803 0.2792 0.4688 +v 0.6989 0.4893 0.3438 +v 0.6989 0.4893 0.4688 +v 0.8209 0.4622 0.3438 +v 0.8209 0.4622 0.4688 +v 0.4261 0.367 0.7813 +v 0.4261 0.367 0.9063 +v 0.4044 0.2439 0.7813 +v 0.4044 0.2439 0.9063 +v 0.2414 0.3996 0.7813 +v 0.2414 0.3996 0.9063 +v 0.2197 0.2765 0.7813 +v 0.2197 0.2765 0.9063 +v 0.6347 0.3595 0.7391 +v 0.7559 0.3381 0.7174 +v 0.6096 0.2389 0.7177 +v 0.7308 0.2175 0.696 +v 0.6606 0.3218 0.921 +v 0.7818 0.3005 0.8993 +v 0.6355 0.2013 0.8996 +v 0.7568 0.1799 0.8779 +v 0.1756 0.2501 0.2969 +v 0.1678 0.4374 0.2969 +v 0.8281 0.4375 0.2969 +v 0.8281 0.25 0.2969 +v 0.1756 0.2501 0.9531 +v 0.1678 0.4374 0.9531 +v 0.8281 0.25 0.9531 +v 0.8281 0.4375 0.9531 +v 0.375 0.415 0.3415 +v 0.375 0.3959 0.7786 +v 0.375 0.3525 0.3388 +v 0.375 0.3335 0.7758 +v 0.4375 0.415 0.3415 +v 0.4375 0.3959 0.7786 +v 0.4375 0.3525 0.3388 +v 0.4375 0.3335 0.7758 +v 0.375 0.2901 0.336 +v 0.375 0.271 0.7731 +v 0.625 0.3525 0.3388 +v 0.625 0.3335 0.7758 +v 0.625 0.2901 0.336 +v 0.625 0.271 0.7731 +v 0.5625 0.415 0.3415 +v 0.5625 0.3959 0.7786 +v 0.5625 0.3525 0.3388 +v 0.5625 0.3335 0.7758 +v 0.625 0.415 0.3415 +v 0.625 0.3959 0.7786 +vt 0.375 0.0313 +vt 0.375 0.125 +vt 0 0.125 +vt 0 0.0313 +vt 0.375 0.0313 +vt 0.375 0.125 +vt 0 0.125 +vt 0 0.0313 +vt 0.375 0.0313 +vt 0.375 0.125 +vt 0 0.125 +vt 0 0.0313 +vt 0.375 0.0313 +vt 0.375 0.125 +vt 0 0.125 +vt 0 0.0313 +vt 0.5938 0.1875 +vt 0.5938 0.25 +vt 0.5313 0.25 +vt 0.5313 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.25 +vt 0.5313 0.25 +vt 0.5313 0.1875 +vt 0.6875 0.0938 +vt 0.625 0.0938 +vt 0.625 0.1875 +vt 0.6875 0.1875 +vt 0.5313 0.0938 +vt 0.5938 0.0938 +vt 0.5938 0.1875 +vt 0.5313 0.1875 +vt 0.5625 0.0938 +vt 0.625 0.0938 +vt 0.625 0.1875 +vt 0.5625 0.1875 +vt 0.5938 0.1875 +vt 0.6563 0.1875 +vt 0.6563 0.0938 +vt 0.5938 0.0938 +vt 0.5313 0.25 +vt 0.5938 0.25 +vt 0.5938 0.1875 +vt 0.5313 0.1875 +vt 0.5313 0.25 +vt 0.5938 0.25 +vt 0.5938 0.1875 +vt 0.5313 0.1875 +vt 0.625 0.1875 +vt 0.625 0.0938 +vt 0.6875 0.0938 +vt 0.6875 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0938 +vt 0.5313 0.0938 +vt 0.5313 0.1875 +vt 0.625 0.1875 +vt 0.625 0.0938 +vt 0.5625 0.0938 +vt 0.5625 0.1875 +vt 0.6563 0.0938 +vt 0.6563 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0938 +vt 0.5313 0.25 +vt 0.5938 0.25 +vt 0.5938 0.1875 +vt 0.5313 0.1875 +vt 0.5313 0.25 +vt 0.5938 0.25 +vt 0.5938 0.1875 +vt 0.5313 0.1875 +vt 0.625 0.1875 +vt 0.625 0.0938 +vt 0.6875 0.0938 +vt 0.6875 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0938 +vt 0.5313 0.0938 +vt 0.5313 0.1875 +vt 0.625 0.1875 +vt 0.625 0.0938 +vt 0.5625 0.0938 +vt 0.5625 0.1875 +vt 0.6563 0.0938 +vt 0.6563 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0938 +vt 0 0.125 +vt 0.375 0.125 +vt 0.375 0.0313 +vt 0 0.0313 +vt 0 0.125 +vt 0.375 0.125 +vt 0.375 0.0313 +vt 0 0.0313 +vt 0 0.125 +vt 0.375 0.125 +vt 0.375 0.0313 +vt 0 0.0313 +vt 0 0.125 +vt 0.375 0.125 +vt 0.375 0.0313 +vt 0 0.0313 +vt 0.4375 1 +vt 0.4063 1 +vt 0.4063 0.7813 +vt 0.4375 0.7813 +vt 0.4063 0.7813 +vt 0.4375 0.7813 +vt 0.4375 1 +vt 0.4063 1 +vt 0.4375 0.7813 +vt 0.4375 1 +vt 0.4063 1 +vt 0.4063 0.7813 +vt 0.4063 0.8125 +vt 0.4063 0.7813 +vt 0.4375 0.7813 +vt 0.4375 0.8125 +vt 0.4375 0.9688 +vt 0.4375 1 +vt 0.4063 1 +vt 0.4063 0.9688 +vt 0.4375 1 +vt 0.4063 1 +vt 0.4063 0.7813 +vt 0.4375 0.7813 +vt 0.3125 0.7813 +vt 0.3438 0.7813 +vt 0.3438 1 +vt 0.3125 1 +vt 0.4375 0.7813 +vt 0.4375 1 +vt 0.3125 1 +vt 0.3125 0.7813 +vt 0.3125 1 +vt 0.3125 0.7813 +vt 0.4375 0.7813 +vt 0.4375 1 +vt 0.3125 0.8125 +vt 0.3125 0.7813 +vt 0.4375 0.7813 +vt 0.4375 0.8125 +vt 0.4375 0.9688 +vt 0.4375 1 +vt 0.3125 1 +vt 0.3125 0.9688 +vt 0.3438 1 +vt 0.3125 1 +vt 0.3125 0.7813 +vt 0.3438 0.7813 +vt 0.3125 0.7813 +vt 0.3438 0.7813 +vt 0.3438 1 +vt 0.3125 1 +vt 0.3438 0.7813 +vt 0.3438 1 +vt 0.3125 1 +vt 0.3125 0.7813 +vt 0.3125 0.8125 +vt 0.3125 0.7813 +vt 0.3438 0.7813 +vt 0.3438 0.8125 +vt 0.3438 0.9688 +vt 0.3438 1 +vt 0.3125 1 +vt 0.3125 0.9688 +vn -1 -0.04 0 +vn 1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.22 -0.98 0 +vn 0.22 0.98 0 +vn -0.98 0.22 0 +vn 0.98 -0.22 0 +vn 0 0 -1 +vn 0 0 1 +vn 0.98 -0.17 0 +vn -0.98 0.17 0 +vn 0.17 0.98 0 +vn -0.17 -0.98 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.14 0.2 -0.97 +vn 0.14 -0.2 0.97 +vn 0.2 0.96 0.17 +vn -0.2 -0.96 -0.17 +vn -0.97 0.17 0.17 +vn 0.97 -0.17 -0.17 +vn 1 0.04 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0.04 +vn 0 0.04 -1 +vn 0 -0.04 1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0.04 +vn 0 -1 -0.04 +vn 0 0.04 -1 +vn 0 -0.04 1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0.04 +vn 0 0.04 -1 +vn 0 -0.04 1 +usemtl latex_collector +f 28/65/17 26/66/17 25/67/17 27/68/17 +f 31/69/18 29/70/18 30/71/18 32/72/18 +f 27/73/19 25/74/19 29/75/19 31/76/19 +f 32/77/20 30/78/20 26/79/20 28/80/20 +f 36/81/21 34/82/21 33/83/21 35/84/21 +f 39/85/22 37/86/22 38/87/22 40/88/22 +f 33/89/23 34/90/23 38/91/23 37/92/23 +f 36/93/24 35/94/24 39/95/24 40/96/24 +f 35/97/25 33/98/25 37/99/25 39/100/25 +f 40/101/26 38/102/26 34/103/26 36/104/26 +f 41/105/27 42/106/27 44/107/27 43/108/27 +f 46/109/28 45/110/28 47/111/28 48/112/28 +f 46/113/29 42/114/29 41/115/29 45/116/29 +f 47/117/30 43/118/30 44/119/30 48/120/30 +f 45/121/31 41/122/31 43/123/31 47/124/31 +f 42/125/32 46/126/32 48/127/32 44/128/32 +f 49/129/33 50/130/33 52/131/33 51/132/33 +f 54/133/34 53/134/34 55/135/34 56/136/34 +f 54/137/35 50/138/35 49/139/35 53/140/35 +f 55/141/36 51/142/36 52/143/36 56/144/36 +f 53/145/37 49/146/37 51/147/37 55/148/37 +f 50/149/38 54/150/38 56/151/38 52/152/38 +f 58/153/39 62/154/39 61/155/39 57/156/39 +f 64/157/40 59/158/40 60/159/40 63/160/40 +f 59/161/41 58/162/41 57/163/41 60/164/41 +f 62/165/42 64/166/42 63/167/42 61/168/42 +f 68/169/43 66/170/43 65/171/43 67/172/43 +f 71/173/44 69/174/44 70/175/44 72/176/44 +f 65/177/45 66/178/45 70/179/45 69/180/45 +f 67/181/46 65/182/46 69/183/46 71/184/46 +f 72/185/47 70/186/47 66/187/47 68/188/47 +f 74/189/48 68/190/48 67/191/48 73/192/48 +f 77/193/49 75/194/49 76/195/49 78/196/49 +f 67/197/50 68/198/50 76/199/50 75/200/50 +f 74/201/51 73/202/51 77/203/51 78/204/51 +f 73/205/52 67/206/52 75/207/52 77/208/52 +f 78/209/53 76/210/53 68/211/53 74/212/53 +f 82/213/54 80/214/54 79/215/54 81/216/54 +f 75/217/55 83/218/55 84/219/55 76/220/55 +f 79/221/56 80/222/56 84/223/56 83/224/56 +f 81/225/57 79/226/57 83/227/57 75/228/57 +f 76/229/58 84/230/58 80/231/58 82/232/58 \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector_bucket.json b/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector_bucket.json deleted file mode 100644 index 87624484b..000000000 --- a/src/main/resources/assets/immersiveintelligence/models/block/metal_device/latex_collector_bucket.json +++ /dev/null @@ -1,317 +0,0 @@ -{ - "credit": "Made with Blockbench", - "texture_size": [32, 32], - "textures": { - "0": "immersiveintelligence:blocks/metal_device/latex_collector", - "particle": "immersiveintelligence:blocks/metal_device/latex_collector" - }, - "elements": [ - { - "name": "bucket", - "from": [3, 4, 5], - "to": [13, 5, 15], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [16, 4, 15] - }, - "faces": { - "north": { - "uv": [5, 5.5, 0, 6], - "texture": "#0" - }, - "east": { - "uv": [0, 5.5, 5, 6], - "texture": "#0" - }, - "south": { - "uv": [0, 5.5, 5, 6], - "texture": "#0" - }, - "west": { - "uv": [5, 5.5, 0, 6], - "texture": "#0" - }, - "up": { - "uv": [0, 6, 5, 11], - "rotation": 180, - "texture": "#0" - }, - "down": { - "uv": [0, 6, 5, 11], - "rotation": 180, - "texture": "#0" - } - } - }, - { - "name": "bucket", - "from": [12, 5, 5], - "to": [13, 16, 15], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [16, 4, 15] - }, - "faces": { - "north": { - "uv": [4.5, 0, 5, 5.5], - "texture": "#0" - }, - "east": { - "uv": [0, 0, 5, 5.5], - "texture": "#0" - }, - "south": { - "uv": [0, 0, 0.5, 5.5], - "texture": "#0" - }, - "west": { - "uv": [5, 0, 0, 5.5], - "texture": "#0" - }, - "up": { - "uv": [0, 0, 5, 0.5], - "rotation": 270, - "texture": "#0" - }, - "down": { - "uv": [0, 0, 1, 10], - "rotation": 180, - "texture": "#missing" - } - } - }, - { - "name": "bucket", - "from": [3, 5, 5], - "to": [4, 16, 15], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [16, 4, 15] - }, - "faces": { - "north": { - "uv": [0, 0, 0.5, 5.5], - "texture": "#0" - }, - "east": { - "uv": [5, 0, 0, 5.5], - "texture": "#0" - }, - "south": { - "uv": [4.5, 0, 5, 5.5], - "texture": "#0" - }, - "west": { - "uv": [0, 0, 5, 5.5], - "texture": "#0" - }, - "up": { - "uv": [5, 0, 0, 0.5], - "rotation": 270, - "texture": "#0" - }, - "down": { - "uv": [0, 0, 1, 10], - "rotation": 180, - "texture": "#missing" - } - } - }, - { - "name": "bucket", - "from": [4, 5, 14], - "to": [12, 16, 15], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [16, 4, 15] - }, - "faces": { - "north": { - "uv": [0.5, 0, 4.5, 5.5], - "texture": "#0" - }, - "east": { - "uv": [0, 0, 1, 11], - "texture": "#missing" - }, - "south": { - "uv": [4.5, 0, 0.5, 5.5], - "texture": "#0" - }, - "west": { - "uv": [0, 0, 1, 11], - "texture": "#missing" - }, - "up": { - "uv": [0.5, 0, 4.5, 0.5], - "rotation": 180, - "texture": "#0" - }, - "down": { - "uv": [0, 0, 8, 1], - "rotation": 180, - "texture": "#missing" - } - } - }, - { - "name": "bucket", - "from": [4, 5, 5], - "to": [12, 16, 6], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [16, 4, 15] - }, - "faces": { - "north": { - "uv": [4.5, 0, 0.5, 5.5], - "texture": "#0" - }, - "east": { - "uv": [0, 0, 1, 11], - "texture": "#missing" - }, - "south": { - "uv": [0.5, 0, 4.5, 5.5], - "texture": "#0" - }, - "west": { - "uv": [0, 0, 1, 11], - "texture": "#missing" - }, - "up": { - "uv": [4.5, 0, 0.5, 0.5], - "rotation": 180, - "texture": "#0" - }, - "down": { - "uv": [0, 0, 8, 1], - "rotation": 180, - "texture": "#missing" - } - } - }, - { - "name": "bucket", - "from": [3, 7, 2], - "to": [13, 9, 4], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [16, 0, 15] - }, - "faces": { - "north": { - "uv": [0, 11, 5, 12], - "texture": "#0" - }, - "east": { - "uv": [5, 11, 6, 12], - "rotation": 180, - "texture": "#0" - }, - "south": { - "uv": [5, 11, 0, 12], - "texture": "#0" - }, - "west": { - "uv": [5, 11, 6, 12], - "texture": "#0" - }, - "up": { - "uv": [0, 12, 5, 11], - "rotation": 180, - "texture": "#0" - }, - "down": { - "uv": [0, 12, 5, 11], - "rotation": 180, - "texture": "#0" - } - } - }, - { - "name": "bucket", - "from": [2, 7.5, 2.5], - "to": [3, 8.5, 13.5], - "rotation": { - "angle": -45, - "axis": "x", - "origin": [2.5, 8, 3] - }, - "faces": { - "north": { - "uv": [5, 10.5, 5.5, 11], - "texture": "#0" - }, - "east": { - "uv": [5, 5.5, 5.5, 11], - "rotation": 270, - "texture": "#0" - }, - "south": { - "uv": [5, 5.5, 5.5, 6], - "texture": "#0" - }, - "west": { - "uv": [5, 5.5, 5.5, 11], - "rotation": 90, - "texture": "#0" - }, - "up": { - "uv": [5, 5.5, 5.5, 11], - "rotation": 180, - "texture": "#0" - }, - "down": { - "uv": [5, 5.5, 5.5, 11], - "texture": "#0" - } - } - }, - { - "name": "bucket", - "from": [13, 7.5, 2.5], - "to": [14, 8.5, 13.5], - "rotation": { - "angle": -45, - "axis": "x", - "origin": [13.5, 8, 3] - }, - "faces": { - "north": { - "uv": [5, 10.5, 5.5, 11], - "texture": "#0" - }, - "east": { - "uv": [5, 5.5, 5.5, 11], - "rotation": 270, - "texture": "#0" - }, - "south": { - "uv": [5, 5.5, 5.5, 6], - "texture": "#0" - }, - "west": { - "uv": [5, 5.5, 5.5, 11], - "rotation": 90, - "texture": "#0" - }, - "up": { - "uv": [5, 5.5, 5.5, 11], - "rotation": 180, - "texture": "#0" - }, - "down": { - "uv": [5, 5.5, 5.5, 11], - "texture": "#0" - } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/block/multiblock/arithmetic_logic_machine/arithmetic_logic_machine_preview.obj b/src/main/resources/assets/immersiveintelligence/models/block/multiblock/arithmetic_logic_machine/arithmetic_logic_machine_preview.obj new file mode 100644 index 000000000..75bef662c --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/block/multiblock/arithmetic_logic_machine/arithmetic_logic_machine_preview.obj @@ -0,0 +1,3503 @@ +# Made by Pabilo8 with Blockbench +# Exported with IIToolkit Plugin on 03/06/2026 +mtllib arithmetic_logic_machine.mtl + +o keyboard_door +v 0.8125 0.3141 0.0625 +v 0.8125 0.3141 0 +v 0.8125 -0.0062 0.0625 +v 0.8125 -0.0062 0 +v -0.1875 0.3141 0.0625 +v -0.1875 0.3141 0 +v -0.1875 -0.0062 0.0625 +v -0.1875 -0.0062 0 +vt 0.0469 0.6875 +vt 0.0469 0.7656 +vt 0.0313 0.7656 +vt 0.0313 0.6875 +vt 0.2813 0.6875 +vt 0.2813 0.7656 +vt 0.2656 0.7656 +vt 0.2656 0.6875 +vt 0.2813 0.75 +vt 0.2813 0.7656 +vt 0.0313 0.7656 +vt 0.0313 0.75 +vt 0.2813 0.6875 +vt 0.2813 0.7031 +vt 0.0313 0.7031 +vt 0.0313 0.6875 +vt 0.2813 0.6875 +vt 0.2813 0.7656 +vt 0.0313 0.7656 +vt 0.0313 0.6875 +vt 0.0313 0.6875 +vt 0.0313 0.7656 +vt 0.2813 0.7656 +vt 0.2813 0.6875 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +usemtl arithmetic_logic_machine +f 4/1/1 2/2/1 1/3/1 3/4/1 +f 7/5/2 5/6/2 6/7/2 8/8/2 +f 1/9/3 2/10/3 6/11/3 5/12/3 +f 4/13/4 3/14/4 7/15/4 8/16/4 +f 3/17/5 1/18/5 5/19/5 7/20/5 +f 8/21/6 6/22/6 2/23/6 4/24/6 +o keyboard +v 0.7188 0.2656 0.7813 +v 0.7188 0.2656 0.4688 +v 0.7188 0.2031 0.7813 +v 0.7188 0.2031 0.4688 +v 0.1563 0.2656 0.7813 +v 0.1563 0.2656 0.4688 +v 0.1563 0.2031 0.7813 +v 0.1563 0.2031 0.4688 +v 0.4375 0.2188 0.875 +v 0.4375 0.2188 0.8125 +v 0.4375 0.0313 0.875 +v 0.4375 0.0313 0.8125 +v 0.25 0.2188 0.875 +v 0.25 0.2188 0.8125 +v 0.25 0.0313 0.875 +v 0.25 0.0313 0.8125 +v 0.4063 0.1875 1.4375 +v 0.4063 0.1875 0.875 +v 0.4063 0.0625 1.4375 +v 0.4063 0.0625 0.875 +v 0.2813 0.1875 1.4375 +v 0.2813 0.1875 0.875 +v 0.2813 0.0625 1.4375 +v 0.2813 0.0625 0.875 +v 0.6875 0.2188 0.875 +v 0.6875 0.2188 0.8125 +v 0.6875 0.0313 0.875 +v 0.6875 0.0313 0.8125 +v 0.5 0.2188 0.875 +v 0.5 0.2188 0.8125 +v 0.5 0.0313 0.875 +v 0.5 0.0313 0.8125 +v 0.6563 0.1875 1.4375 +v 0.6563 0.1875 0.875 +v 0.6563 0.0625 1.4375 +v 0.6563 0.0625 0.875 +v 0.5313 0.1875 1.4375 +v 0.5313 0.1875 0.875 +v 0.5313 0.0625 1.4375 +v 0.5313 0.0625 0.875 +v 0.75 0.2789 0.4209 +v 0.75 0.137 0.1425 +v 0.75 0.2232 0.4493 +v -0.125 0.2789 0.4209 +v -0.125 0.137 0.1425 +v -0.125 0.2232 0.4493 +v -0.125 0.0813 0.1709 +v 0.0625 0.137 0.1425 +v 0.0625 0.0813 0.1709 +v -0.125 0.137 0.1425 +v -0.125 0.0813 0.1709 +v 0.75 0.137 0.1425 +v 0.75 0.1086 0.0868 +v 0.75 0.0529 0.1152 +v 0.0625 0.137 0.1425 +v 0.0625 0.1086 0.0868 +v 0.0625 0.0813 0.1709 +v 0.0625 0.0529 0.1152 +v 0.0625 0.1086 0.0868 +v 0.0625 0.0803 0.0311 +v 0.0625 0.0529 0.1152 +v 0.0625 0.0246 0.0595 +v -0.125 0.1086 0.0868 +v -0.125 0.0803 0.0311 +v -0.125 0.0529 0.1152 +v -0.125 0.0246 0.0595 +v 0 0.137 0.1425 +v 0 0.1086 0.0868 +v 0 0.0813 0.1709 +v 0 0.0529 0.1152 +v -0.0625 0.137 0.1425 +v -0.0625 0.1086 0.0868 +v -0.0625 0.0813 0.1709 +v -0.0625 0.0529 0.1152 +v 0.75 0.2188 0.8125 +v 0.75 0.2188 0.4375 +v 0.75 0.0313 0.8125 +v 0.75 0.0313 0.0625 +v -0.125 0.2188 0.8125 +v -0.125 0.2188 0.4375 +v -0.125 0.0313 0.8125 +v -0.125 0.0313 0.0625 +v 0.8125 0.1875 1.4375 +v 0.8125 0.1875 0.4375 +v 0.8125 0.0625 1.4375 +v 0.8125 0.0625 0.4375 +v 0.75 0.1875 1.4375 +v 0.75 0.1875 0.4375 +v 0.75 0.0625 1.4375 +v 0.75 0.0625 0.4375 +v -0.125 0.1875 1.4375 +v -0.125 0.1875 0.4375 +v -0.125 0.0625 1.4375 +v -0.125 0.0625 0.4375 +v -0.1875 0.1875 1.4375 +v -0.1875 0.1875 0.4375 +v -0.1875 0.0625 1.4375 +v -0.1875 0.0625 0.4375 +vt 0.5625 0.8438 +vt 0.5938 0.8438 +vt 0.5938 1 +vt 0.5625 1 +vt 0.8125 0.8438 +vt 0.8438 0.8438 +vt 0.8438 1 +vt 0.8125 1 +vt 0.8438 0.8438 +vt 0.8438 1 +vt 0.5625 1 +vt 0.5625 0.8438 +vt 0.8438 0.9688 +vt 0.8438 1 +vt 0.5625 1 +vt 0.5625 0.9688 +vt 0.8438 0.8438 +vt 0.8438 0.875 +vt 0.5625 0.875 +vt 0.5625 0.8438 +vt 0.5156 0.7188 +vt 0.5156 0.7656 +vt 0.5 0.7656 +vt 0.5 0.7188 +vt 0.4844 0.7188 +vt 0.4844 0.7656 +vt 0.4688 0.7656 +vt 0.4688 0.7188 +vt 0.5156 0.75 +vt 0.5156 0.7656 +vt 0.4688 0.7656 +vt 0.4688 0.75 +vt 0.5156 0.7188 +vt 0.5156 0.7344 +vt 0.4688 0.7344 +vt 0.4688 0.7188 +vt 0.5156 0.7188 +vt 0.5156 0.7656 +vt 0.4688 0.7656 +vt 0.4688 0.7188 +vt 0.5625 1 +vt 0.6875 1 +vt 0.6875 0.4375 +vt 0.5625 0.4375 +vt 0.6875 0.4375 +vt 0.5625 0.4375 +vt 0.5625 1 +vt 0.6875 1 +vt 0.6875 0.4375 +vt 0.6875 1 +vt 0.5625 1 +vt 0.5625 0.4375 +vt 0.5625 1 +vt 0.5625 0.4375 +vt 0.6875 0.4375 +vt 0.6875 1 +vt 0.5156 0.7188 +vt 0.5156 0.7656 +vt 0.5 0.7656 +vt 0.5 0.7188 +vt 0.4844 0.7188 +vt 0.4844 0.7656 +vt 0.4688 0.7656 +vt 0.4688 0.7188 +vt 0.5156 0.75 +vt 0.5156 0.7656 +vt 0.4688 0.7656 +vt 0.4688 0.75 +vt 0.5156 0.7188 +vt 0.5156 0.7344 +vt 0.4688 0.7344 +vt 0.4688 0.7188 +vt 0.5156 0.7188 +vt 0.5156 0.7656 +vt 0.4688 0.7656 +vt 0.4688 0.7188 +vt 0.5625 1 +vt 0.6875 1 +vt 0.6875 0.4375 +vt 0.5625 0.4375 +vt 0.6875 0.4375 +vt 0.5625 0.4375 +vt 0.5625 1 +vt 0.6875 1 +vt 0.6875 0.4375 +vt 0.6875 1 +vt 0.5625 1 +vt 0.5625 0.4375 +vt 0.5625 1 +vt 0.5625 0.4375 +vt 0.6875 0.4375 +vt 0.6875 1 +vt 0.7813 0.7188 +vt 0.7813 0.6406 +vt 1 0.6406 +vt 1 0.7188 +vt 0.7813 0.7031 +vt 0.7813 0.7188 +vt 1 0.7188 +vt 1 0.7031 +vt 1 0.7188 +vt 0.9844 0.7188 +vt 0.9844 0.6406 +vt 1 0.6406 +vt 1 0.6406 +vt 1 0.6563 +vt 0.9531 0.6563 +vt 0.9531 0.6406 +vt 0.9531 0.625 +vt 0.9531 0.6406 +vt 0.9375 0.6406 +vt 0.9375 0.625 +vt 0.7813 0.625 +vt 0.7813 0.6406 +vt 0.9531 0.6406 +vt 0.9531 0.625 +vt 0.9531 0.625 +vt 0.9531 0.6406 +vt 0.7813 0.6406 +vt 0.7813 0.625 +vt 0.9688 0.6094 +vt 0.9688 0.625 +vt 0.9531 0.625 +vt 0.9531 0.6094 +vt 1 0.6094 +vt 1 0.625 +vt 0.9531 0.625 +vt 0.9531 0.6094 +vt 1 0.6094 +vt 1 0.625 +vt 0.9531 0.625 +vt 0.9531 0.6094 +vt 1 0.6094 +vt 1 0.625 +vt 0.9531 0.625 +vt 0.9531 0.6094 +vt 1 0.625 +vt 0.9844 0.625 +vt 0.9844 0.6094 +vt 1 0.6094 +vt 0.9844 0.625 +vt 0.9844 0.6406 +vt 0.9688 0.6406 +vt 0.9688 0.625 +vt 0.9844 0.625 +vt 0.9844 0.6406 +vt 0.9688 0.6406 +vt 0.9688 0.625 +vt 0.9844 0.625 +vt 0.9844 0.6406 +vt 0.9688 0.6406 +vt 0.9688 0.625 +vt 0.7813 0.625 +vt 0.7813 0.7188 +vt 0.7969 0.7188 +vt 0.7969 0.625 +vt 0.4375 0.625 +vt 0.5313 0.8125 +vt 0.5313 1 +vt 0.4375 1 +vt 0.4375 1 +vt 0.5313 1 +vt 0.5313 0.8125 +vt 0.4375 0.625 +vt 0.4375 0.8125 +vt 0.4375 1 +vt 0 1 +vt 0 0.8125 +vt 0.4375 0.625 +vt 0.4375 1 +vt 0 1 +vt 0 0.625 +vt 0.4688 0.0313 +vt 0.4688 0.125 +vt 0.0313 0.125 +vt 0.0313 0.0313 +vt 0.4375 0.625 +vt 0.4375 0.8438 +vt 0 0.8438 +vt 0 0.625 +vt 0.875 0.5 +vt 0.9375 0.5 +vt 0.9375 1 +vt 0.875 1 +vt 0.875 0.5 +vt 0.9375 0.5 +vt 0.9375 1 +vt 0.875 1 +vt 0.9375 0.5 +vt 0.9375 1 +vt 0.9063 1 +vt 0.9063 0.5 +vt 0.9063 0.5 +vt 0.9063 1 +vt 0.875 1 +vt 0.875 0.5 +vt 0.875 0.9688 +vt 0.9375 0.9688 +vt 0.9375 1 +vt 0.875 1 +vt 0.875 0.9688 +vt 0.9375 0.9688 +vt 0.9375 1 +vt 0.875 1 +vt 0.875 0.5 +vt 0.9375 0.5 +vt 0.9375 1 +vt 0.875 1 +vt 0.875 0.5 +vt 0.9375 0.5 +vt 0.9375 1 +vt 0.875 1 +vt 0.9375 0.5 +vt 0.9375 1 +vt 0.9063 1 +vt 0.9063 0.5 +vt 0.9063 0.5 +vt 0.9063 1 +vt 0.875 1 +vt 0.875 0.5 +vt 0.875 0.5313 +vt 0.9375 0.5313 +vt 0.9375 0.5625 +vt 0.875 0.5625 +vt 0.875 0.9375 +vt 0.9375 0.9375 +vt 0.9375 0.9688 +vt 0.875 0.9688 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0.89 -0.45 +vn 0 0.45 0.89 +vn -1 0 0 +vn 0 -0.45 -0.89 +vn -1 0 0 +vn 0 0.89 -0.45 +vn 0 -0.45 -0.89 +vn 1 0 0 +vn 0 0.89 -0.45 +vn 0 0.45 0.89 +vn 0 -0.45 -0.89 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0.89 -0.45 +vn 1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0.89 -0.45 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +usemtl typewriter_red +f 12/25/7 10/26/7 9/27/7 11/28/7 +f 15/29/8 13/30/8 14/31/8 16/32/8 +f 9/33/9 10/34/9 14/35/9 13/36/9 +f 11/37/10 9/38/10 13/39/10 15/40/10 +f 16/41/11 14/42/11 10/43/11 12/44/11 +usemtl arithmetic_logic_machine +f 20/45/12 18/46/12 17/47/12 19/48/12 +f 23/49/13 21/50/13 22/51/13 24/52/13 +f 17/53/14 18/54/14 22/55/14 21/56/14 +f 20/57/15 19/58/15 23/59/15 24/60/15 +f 19/61/16 17/62/16 21/63/16 23/64/16 +usemtl common_copper_cable +f 28/65/17 26/66/17 25/67/17 27/68/17 +f 31/69/18 29/70/18 30/71/18 32/72/18 +f 25/73/19 26/74/19 30/75/19 29/76/19 +f 28/77/20 27/78/20 31/79/20 32/80/20 +usemtl arithmetic_logic_machine +f 36/81/21 34/82/21 33/83/21 35/84/21 +f 39/85/22 37/86/22 38/87/22 40/88/22 +f 33/89/23 34/90/23 38/91/23 37/92/23 +f 36/93/24 35/94/24 39/95/24 40/96/24 +f 35/97/25 33/98/25 37/99/25 39/100/25 +usemtl common_copper_cable +f 44/101/26 42/102/26 41/103/26 43/104/26 +f 47/105/27 45/106/27 46/107/27 48/108/27 +f 41/109/28 42/110/28 46/111/28 45/112/28 +f 44/113/29 43/114/29 47/115/29 48/116/29 +usemtl common_thingies +f 49/117/30 50/118/30 53/119/30 52/120/30 +f 51/121/31 49/122/31 52/123/31 54/124/31 +f 54/125/32 52/126/32 53/127/32 55/128/32 +f 59/129/33 58/130/33 56/131/33 57/132/33 +f 65/133/34 63/134/34 64/135/34 66/136/34 +f 60/137/35 61/138/35 64/139/35 63/140/35 +f 66/141/36 64/142/36 61/143/36 62/144/36 +f 70/145/37 68/146/37 67/147/37 69/148/37 +f 67/149/38 68/150/38 72/151/38 71/152/38 +f 69/153/39 67/154/39 71/155/39 73/156/39 +f 74/157/40 72/158/40 68/159/40 70/160/40 +f 71/161/41 72/162/41 74/163/41 73/164/41 +f 78/165/42 76/166/42 75/167/42 77/168/42 +f 81/169/43 79/170/43 80/171/43 82/172/43 +f 75/173/44 76/174/44 80/175/44 79/176/44 +f 61/177/45 49/178/45 51/179/45 62/180/45 +usemtl typewriter_red +f 86/181/46 84/182/46 83/183/46 85/184/46 +f 89/185/47 87/186/47 88/187/47 90/188/47 +f 83/189/48 84/190/48 88/191/48 87/192/48 +f 86/193/49 85/194/49 89/195/49 90/196/49 +f 85/197/50 83/198/50 87/199/50 89/200/50 +f 90/201/51 88/202/51 84/203/51 86/204/51 +f 94/205/52 92/206/52 91/207/52 93/208/52 +f 97/209/53 95/210/53 96/211/53 98/212/53 +f 91/213/54 92/214/54 96/215/54 95/216/54 +f 94/217/55 93/218/55 97/219/55 98/220/55 +f 93/221/56 91/222/56 95/223/56 97/224/56 +f 98/225/57 96/226/57 92/227/57 94/228/57 +f 102/229/58 100/230/58 99/231/58 101/232/58 +f 105/233/59 103/234/59 104/235/59 106/236/59 +f 99/237/60 100/238/60 104/239/60 103/240/60 +f 102/241/61 101/242/61 105/243/61 106/244/61 +f 101/245/62 99/246/62 103/247/62 105/248/62 +f 106/249/63 104/250/63 100/251/63 102/252/63 +o keyboard_button +v -0.5625 0.2344 0 +v -0.5625 0.2344 -0.0625 +v -0.5625 0.1094 0 +v -0.5625 0.1094 -0.0625 +v -0.6875 0.2344 0 +v -0.6875 0.2344 -0.0625 +v -0.6875 0.1094 0 +v -0.6875 0.1094 -0.0625 +vt 0.7344 0.6094 +vt 0.7344 0.6406 +vt 0.75 0.6406 +vt 0.75 0.6094 +vt 0.7188 0.6094 +vt 0.7188 0.6406 +vt 0.7344 0.6406 +vt 0.7344 0.6094 +vt 0.75 0.6406 +vt 0.75 0.625 +vt 0.7188 0.625 +vt 0.7188 0.6406 +vt 0.75 0.6094 +vt 0.75 0.625 +vt 0.7188 0.625 +vt 0.7188 0.6094 +vt 0.7188 0.6094 +vt 0.7188 0.6406 +vt 0.75 0.6406 +vt 0.75 0.6094 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +usemtl arithmetic_logic_machine +f 110/253/64 108/254/64 107/255/64 109/256/64 +f 113/257/65 111/258/65 112/259/65 114/260/65 +f 107/261/66 108/262/66 112/263/66 111/264/66 +f 110/265/67 109/266/67 113/267/67 114/268/67 +f 114/269/68 112/270/68 108/271/68 110/272/68 +o drawer +v 0.4375 -0.25 -0.9375 +v 0.4375 -0.25 -1 +v 0.4375 -0.375 -0.9375 +v 0.4375 -0.375 -1 +v 0.3125 -0.25 -0.9375 +v 0.3125 -0.25 -1 +v 0.3125 -0.375 -0.9375 +v 0.3125 -0.375 -1 +v 0.75 -0.1875 -0.875 +v 0.75 -0.1875 -0.9375 +v 0.75 -0.4375 -0.875 +v 0.75 -0.4375 -0.9375 +v 0 -0.1875 -0.875 +v 0 -0.1875 -0.9375 +v 0 -0.4375 -0.875 +v 0 -0.4375 -0.9375 +v 0.7188 -0.3437 -0.375 +v 0.7188 -0.3437 -0.875 +v 0.7188 -0.4062 -0.375 +v 0.7188 -0.4062 -0.875 +v 0.0313 -0.3437 -0.375 +v 0.0313 -0.3437 -0.875 +v 0.0313 -0.4062 -0.375 +v 0.0313 -0.4062 -0.875 +v 0.0938 -0.2187 -0.375 +v 0.0938 -0.2187 -0.875 +v 0.0938 -0.3437 -0.375 +v 0.0938 -0.3437 -0.875 +v 0.0313 -0.2187 -0.375 +v 0.0313 -0.2187 -0.875 +v 0.0313 -0.3437 -0.375 +v 0.0313 -0.3437 -0.875 +v 0.7188 -0.2187 -0.375 +v 0.7188 -0.2187 -0.875 +v 0.7188 -0.3437 -0.375 +v 0.7188 -0.3437 -0.875 +v 0.6563 -0.2187 -0.375 +v 0.6563 -0.2187 -0.875 +v 0.6563 -0.3437 -0.375 +v 0.6563 -0.3437 -0.875 +vt 0.9844 0.2813 +vt 0.9844 0.3125 +vt 1 0.3125 +vt 1 0.2813 +vt 0.9688 0.2813 +vt 0.9688 0.3125 +vt 0.9844 0.3125 +vt 0.9844 0.2813 +vt 1 0.3125 +vt 1 0.2969 +vt 0.9688 0.2969 +vt 0.9688 0.3125 +vt 1 0.2813 +vt 1 0.2969 +vt 0.9688 0.2969 +vt 0.9688 0.2813 +vt 0.9688 0.2813 +vt 0.9688 0.3125 +vt 1 0.3125 +vt 1 0.2813 +vt 0.8125 0.3906 +vt 0.8125 0.4531 +vt 0.7969 0.4531 +vt 0.7969 0.3906 +vt 0.9844 0.3906 +vt 0.9844 0.4531 +vt 0.9688 0.4531 +vt 0.9688 0.3906 +vt 0.7813 0.25 +vt 0.7656 0.25 +vt 0.7656 0.0625 +vt 0.7813 0.0625 +vt 1 0.25 +vt 0.9844 0.25 +vt 0.9844 0.0625 +vt 1 0.0625 +vt 0.9844 0.3906 +vt 0.9844 0.4531 +vt 0.7969 0.4531 +vt 0.7969 0.3906 +vt 0.9844 0.3906 +vt 0.9844 0.4531 +vt 0.7969 0.4531 +vt 0.7969 0.3906 +vt 0.9688 0.25 +vt 0.9531 0.25 +vt 0.9531 0.125 +vt 0.9688 0.125 +vt 0.8125 0.125 +vt 0.7969 0.125 +vt 0.7969 0.25 +vt 0.8125 0.25 +vt 0.9688 0.25 +vt 0.9688 0.375 +vt 0.7969 0.375 +vt 0.7969 0.25 +vt 0.9688 0.25 +vt 0.9688 0.125 +vt 0.7969 0.125 +vt 0.7969 0.25 +vt 0.9375 0.0781 +vt 0.9375 0.0938 +vt 0.7656 0.0938 +vt 0.7656 0.0781 +vt 0.8281 0.375 +vt 0.7969 0.375 +vt 0.7969 0.25 +vt 0.8281 0.25 +vt 0.8281 0.375 +vt 0.7969 0.375 +vt 0.7969 0.25 +vt 0.8281 0.25 +vt 0.7969 0.375 +vt 0.7969 0.25 +vt 0.8125 0.25 +vt 0.8125 0.375 +vt 0.9375 0.375 +vt 0.9688 0.375 +vt 0.9688 0.25 +vt 0.9375 0.25 +vt 0.9375 0.375 +vt 0.9688 0.375 +vt 0.9688 0.25 +vt 0.9375 0.25 +vt 0.9531 0.375 +vt 0.9531 0.25 +vt 0.9375 0.25 +vt 0.9375 0.375 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +usemtl common_table +f 118/273/69 116/274/69 115/275/69 117/276/69 +f 121/277/70 119/278/70 120/279/70 122/280/70 +f 115/281/71 116/282/71 120/283/71 119/284/71 +f 118/285/72 117/286/72 121/287/72 122/288/72 +f 122/289/73 120/290/73 116/291/73 118/292/73 +f 126/293/74 124/294/74 123/295/74 125/296/74 +f 129/297/75 127/298/75 128/299/75 130/300/75 +f 123/301/76 124/302/76 128/303/76 127/304/76 +f 126/305/77 125/306/77 129/307/77 130/308/77 +f 125/309/78 123/310/78 127/311/78 129/312/78 +f 130/313/79 128/314/79 124/315/79 126/316/79 +f 134/317/80 132/318/80 131/319/80 133/320/80 +f 137/321/81 135/322/81 136/323/81 138/324/81 +f 131/325/82 132/326/82 136/327/82 135/328/82 +f 134/329/83 133/330/83 137/331/83 138/332/83 +f 138/333/84 136/334/84 132/335/84 134/336/84 +f 142/337/85 140/338/85 139/339/85 141/340/85 +f 145/341/86 143/342/86 144/343/86 146/344/86 +f 139/345/87 140/346/87 144/347/87 143/348/87 +f 150/349/88 148/350/88 147/351/88 149/352/88 +f 153/353/89 151/354/89 152/355/89 154/356/89 +f 147/357/90 148/358/90 152/359/90 151/360/90 +o activity_lamp +v -0.5094 1.85 0.1281 +v -0.5094 1.85 0.0219 +v -0.5094 1.7125 0.1281 +v -0.5094 1.7125 0.0219 +v -0.6469 1.85 0.1281 +v -0.6469 1.85 0.0219 +v -0.6469 1.7125 0.1281 +v -0.6469 1.7125 0.0219 +vt 0.6797 0.7813 +vt 0.6797 0.8125 +vt 0.6563 0.8125 +vt 0.6563 0.7813 +vt 0.6875 0.7813 +vt 0.6875 0.8125 +vt 0.6641 0.8125 +vt 0.6641 0.7813 +vt 0.6875 0.7891 +vt 0.6875 0.8125 +vt 0.6563 0.8125 +vt 0.6563 0.7891 +vt 0.6875 0.7813 +vt 0.6875 0.8047 +vt 0.6563 0.8047 +vt 0.6563 0.7813 +vt 0.6875 0.7813 +vt 0.6875 0.8125 +vt 0.6563 0.8125 +vt 0.6563 0.7813 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +usemtl arithmetic_logic_machine +f 158/361/91 156/362/91 155/363/91 157/364/91 +f 161/365/92 159/366/92 160/367/92 162/368/92 +f 155/369/93 156/370/93 160/371/93 159/372/93 +f 158/373/94 157/374/94 161/375/94 162/376/94 +f 162/377/95 160/378/95 156/379/95 158/380/95 +o preview +v -1.3217 1.9375 -0.8711 +v -1.1782 1.9375 -0.5246 +v -1.3217 1.625 -0.8711 +v -1.1782 1.625 -0.5246 +v -1.3756 0.25 -0.9171 +v -0.9929 0.25 0.0067 +v -1.3178 1.625 -0.9411 +v -0.9351 1.625 -0.0172 +v -1.3178 0.25 -0.9411 +v -0.9351 0.25 -0.0172 +v -1.2081 2 -0.5129 +v -0.9929 2 0.0067 +v -1.2081 1.625 -0.5129 +v -0.9929 1.625 0.0067 +v -1.1504 2 -0.5369 +v -0.9351 2 -0.0172 +v -1.1504 1.625 -0.5369 +v -1.3756 2 -0.9171 +v -1.3517 2 -0.8594 +v -1.3756 1.625 -0.9171 +v -1.3517 1.625 -0.8594 +v -1.3178 2 -0.9411 +v -1.2939 2 -0.8833 +v -1.2939 1.625 -0.8833 +v -1.3517 1.9375 -0.8594 +v -1.2081 1.9375 -0.5129 +v -1.2939 1.9375 -0.8833 +v -1.1504 1.9375 -0.5369 +v -0.9929 0.9375 0.0067 +v -1.3756 0.9375 -0.9171 +v 0.9732 2 0.0128 +v 1.4349 2 -0.8743 +v 0.9732 0.25 0.0128 +v 1.4349 0.25 -0.8743 +v 0.9178 2 -0.0161 +v 1.3795 2 -0.9031 +v 0.9178 0.25 -0.0161 +v 1.3795 0.25 -0.9031 +v 1.4349 1.125 -0.8743 +v 0.9732 1.125 0.0128 +v 0.9178 1.125 -0.0161 +v 1.3795 1.125 -0.9031 +vt 0.6719 0 +vt 0.5938 0 +vt 0.5938 0.0938 +vt 0.6719 0.0938 +vt 0.6719 0.0938 +vt 0.5938 0.0938 +vt 0.5938 0 +vt 0.6719 0 +vt 1 0.25 +vt 1 0.5938 +vt 0.75 0.5938 +vt 0.75 0.25 +vt 1 0.9063 +vt 1 1 +vt 0.8594 1 +vt 0.8594 0.9063 +vt 0.8594 0.9063 +vt 0.8594 1 +vt 1 1 +vt 1 0.9063 +vt 0.875 0.9063 +vt 0.875 1 +vt 0.8594 1 +vt 0.8594 0.9063 +vt 0.7656 0.8438 +vt 0.7656 0.9375 +vt 0.75 0.9375 +vt 0.75 0.8438 +vt 0.7656 0.9063 +vt 0.7656 1 +vt 0.75 1 +vt 0.75 0.9063 +vt 0.7656 0.9063 +vt 0.7656 1 +vt 0.75 1 +vt 0.75 0.9063 +vt 0.8594 0.9844 +vt 0.8594 1 +vt 0.7656 1 +vt 0.7656 0.9844 +vt 0.8594 0.9844 +vt 0.8594 1 +vt 0.7656 1 +vt 0.7656 0.9844 +vt 0.7656 1 +vt 0.8594 1 +vt 0.8594 0.9844 +vt 0.7656 0.9844 +vt 0.875 0.9031 +vt 0.875 0.9188 +vt 0.8594 0.9188 +vt 0.8594 0.9031 +vt 0.7656 0.5 +vt 0.7656 0.9375 +vt 0.75 0.9375 +vt 0.75 0.5 +vt 0.8594 0.9219 +vt 0.7656 0.9219 +vt 0.7656 0.9063 +vt 0.8594 0.9063 +vt 1 0.5 +vt 1 0.9375 +vt 0.9844 0.9375 +vt 0.9844 0.5 +vt 0.75 1 +vt 1 1 +vt 1 0.9844 +vt 0.75 0.9844 +vt 1 0.5156 +vt 0.75 0.5156 +vt 0.75 0.5 +vt 1 0.5 +vt 0.75 0.6094 +vt 0.75 0.4375 +vt 1 0.4375 +vt 1 0.6094 +vt 1 0.25 +vt 1 0.4219 +vt 0.75 0.4219 +vt 0.75 0.25 +vt 0.75 1 +vt 0.75 0.7813 +vt 1 0.7813 +vt 1 1 +vt 0.75 1 +vt 0.75 0.7813 +vt 1 0.7813 +vt 1 1 +vt 1 1 +vt 0.75 1 +vt 0.75 0.9844 +vt 1 0.9844 +vt 1 0.2656 +vt 0.75 0.2656 +vt 0.75 0.25 +vt 1 0.25 +vt 0.75 1 +vt 0.75 0.7813 +vt 0.7656 0.7813 +vt 0.7656 1 +vt 0.9844 1 +vt 0.9844 0.7813 +vt 1 0.7813 +vt 1 1 +vt 1 0.25 +vt 1 0.4688 +vt 0.75 0.4688 +vt 0.75 0.25 +vt 0.7656 0.25 +vt 0.7656 0.4688 +vt 0.75 0.4688 +vt 0.75 0.25 +vt 1 0.25 +vt 1 0.4688 +vt 0.75 0.4688 +vt 0.75 0.25 +vt 1 0.25 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.25 +vn -0.92 0 0.38 +vn 0.92 0 -0.38 +vn 0.92 0 -0.38 +vn -0.92 0 0.38 +vn 0.92 0 -0.38 +vn -0.38 0 -0.92 +vn -0.92 0 0.38 +vn 0.92 0 -0.38 +vn 0.38 0 0.92 +vn -0.92 0 0.38 +vn 0.92 0 -0.38 +vn 0 -1 0 +vn 0.38 0 0.92 +vn -0.38 0 -0.92 +vn 0 1 0 +vn 0.38 0 0.92 +vn 0 1 0 +vn 0 -1 0 +vn -0.92 0 0.38 +vn -0.92 0 0.38 +vn 0.89 0 0.46 +vn -0.89 0 -0.46 +vn 0 1 0 +vn 0 -1 0 +vn -0.46 0 0.89 +vn 0.46 0 -0.89 +vn 0.89 0 0.46 +vn -0.46 0 0.89 +vn -0.89 0 -0.46 +vn 0.46 0 -0.89 +usemtl arithmetic_logic_machine +f 166/381/96 164/382/96 163/383/96 165/384/96 +f 165/385/97 163/386/97 164/387/97 166/388/97 +usemtl common_steel +f 171/389/98 169/390/98 170/391/98 172/392/98 +f 176/393/99 174/394/99 173/395/99 175/396/99 +f 179/397/100 177/398/100 178/399/100 170/400/100 +f 175/401/101 173/402/101 177/403/101 179/404/101 +f 183/405/102 181/406/102 180/407/102 182/408/102 +f 169/409/103 184/410/103 185/411/103 186/412/103 +f 186/413/104 185/414/104 181/415/104 183/416/104 +f 188/417/105 173/418/105 181/419/105 187/420/105 +f 189/421/106 185/422/106 177/423/106 190/424/106 +f 188/425/107 187/426/107 189/427/107 190/428/107 +f 190/429/108 177/430/108 173/431/108 188/432/108 +f 167/433/109 180/434/109 184/435/109 171/436/109 +f 183/437/110 175/438/110 179/439/110 186/440/110 +f 172/441/111 178/442/111 174/443/111 168/444/111 +f 180/445/112 174/446/112 178/447/112 184/448/112 +f 168/449/113 167/450/113 171/451/113 172/452/113 +f 182/453/114 192/454/114 191/455/114 176/456/114 +f 168/457/115 191/458/115 192/459/115 167/460/115 +f 193/461/116 202/462/116 201/463/116 194/464/116 +f 198/465/117 204/466/117 203/467/117 197/468/117 +f 193/469/118 194/470/118 198/471/118 197/472/118 +f 196/473/119 195/474/119 199/475/119 200/476/119 +f 197/477/120 203/478/120 202/479/120 193/480/120 +f 194/481/121 201/482/121 204/483/121 198/484/121 +f 196/485/122 201/486/122 202/487/122 195/488/122 +f 195/489/123 202/490/123 203/491/123 199/492/123 +f 199/493/124 203/494/124 204/495/124 200/496/124 +f 200/497/125 204/498/125 201/499/125 196/500/125 +o flipped +v 0.1917 -0.375 -0.1594 +v 0.0142 -0.375 -0.7587 +v 0.1917 -0.6875 -0.1594 +v 0.0142 -0.6875 -0.7587 +v -0.6473 -0.375 0.0891 +v -0.8248 -0.375 -0.5102 +v -0.6473 -0.6875 0.0891 +v -0.8248 -0.6875 -0.5102 +v -0.75 0.2344 0 +v -0.75 0.2344 -0.0625 +v -0.75 0.1094 0 +v -0.75 0.1094 -0.0625 +v -0.875 0.2344 0 +v -0.875 0.2344 -0.0625 +v -0.875 0.1094 0 +v -0.875 0.1094 -0.0625 +v 1 2 1 +v 1 2 0 +v -1 2 1 +v -1 2 0 +v 1 1.9375 0 +v 1 0 0 +v 0.9375 1.9375 0.9375 +v 0.9375 1.9375 0 +v 0.9375 0 0.9375 +v 0.9375 0 0 +v -0.9375 1.9375 0.9375 +v -0.9375 1.9375 0 +v -0.9375 0 0 +v -1 1.9375 0 +v -1 0 0 +v 1 0 1 +v -1 0 1 +v -0.9375 0 0.9375 +v -0.9375 0.9688 0.9375 +v 0.9375 0.9688 0.9375 +v 1 1.375 2 +v 1 1.375 1 +v 1 -0.375 2 +v 1 -0.375 1 +v 0 1.375 2 +v 0 -0.375 2 +v 1 1.9375 2 +v 1 1.9375 1.875 +v 1 1.375 1.875 +v 0.875 1.9375 2 +v 0.9375 1.9375 1.9375 +v 0.875 1.375 2 +v 0.9375 1.375 1.9375 +v 0.125 1.9375 2 +v 0.125 1.9375 1.9375 +v 0.125 1.375 2 +v 0.125 1.375 1.9375 +v 0 1.9375 2 +v 1 1.9375 1.125 +v 1 1.9375 1 +v 1 1.375 1.125 +v 0.9375 1.9375 1.125 +v 0.9375 1.375 1.125 +v 1 -0.375 1.125 +v 1 -0.6875 1.125 +v 1 -0.6875 1 +v 0.9375 -0.375 1.125 +v 0.9375 -0.6875 1.125 +v 1 -0.375 1.875 +v 1 -0.6875 2 +v 1 -0.6875 1.875 +v 0.875 -0.375 2 +v 0.9375 -0.375 1.9375 +v 0.875 -0.6875 2 +v 0.9375 -0.6875 1.9375 +v 0.125 -0.375 2 +v 0.125 -0.375 1.9375 +v 0.125 -0.6875 2 +v 0.125 -0.6875 1.9375 +v 0 -0.6875 2 +v 1 2 2 +v 0 2 2 +v 0 2 1 +v 1 -1 2 +v 1 -1 1 +v 0 -1 2 +v 0 -1 1 +v 0 1 2 +v 0 1 1 +v -1 1 2 +v -1 1 1 +v -1 -1 2 +v -1 -1 1 +v 0.9375 0.25 0.9375 +v -0.9375 0.25 0.9375 +v 1 -1 0 +v -1 -1 0 +v 0 -1 0 +v 0 0 0 +v 1 -0.125 0.125 +v 1 -0.125 0.875 +v 1 -0.875 0.125 +v 1 -0.875 0.875 +v 0.9375 -0.125 0.125 +v 0.9375 -0.125 0.875 +v 0.9375 -0.875 0.125 +v 0.9375 -0.875 0.875 +v -0.9375 -0.125 0.125 +v -0.9375 -0.125 0.875 +v -0.9375 -0.875 0.125 +v -0.9375 -0.875 0.875 +v -1 -0.125 0.125 +v -1 -0.125 0.875 +v -1 -0.875 0.875 +v -1 -0.875 0.125 +v 0.9375 0.3125 0 +v -0.9375 0.3125 0 +v -0.1875 0.3125 0 +v -0.1875 0 0 +v 0.8129 0 0 +v 0.8131 0.3125 0 +v 0.9375 0.3125 1 +v -0.9375 0.3125 1 +v 0.8902 0.4375 0.8693 +v 0.6785 0.4375 0.0203 +v 0.8902 0.3125 0.8693 +v 0.6785 0.3125 0.0203 +v 0.7689 0.4375 0.8995 +v 0.5572 0.4375 0.0505 +v 0.7689 0.3125 0.8995 +v 0.5572 0.3125 0.0505 +v 0.6969 0.4375 0.8692 +v 0.4852 0.4375 0.0202 +v 0.6969 0.3125 0.8692 +v 0.4852 0.3125 0.0202 +v 0.5756 0.4375 0.8994 +v 0.364 0.4375 0.0504 +v 0.5756 0.3125 0.8994 +v 0.364 0.3125 0.0504 +v 0.5188 0.4375 0.8653 +v 0.3071 0.4375 0.0163 +v 0.5188 0.3125 0.8653 +v 0.3071 0.3125 0.0163 +v 0.3975 0.4375 0.8955 +v 0.1859 0.4375 0.0465 +v 0.3975 0.3125 0.8955 +v 0.1859 0.3125 0.0465 +v 0.3293 0.4375 0.8803 +v 0.1176 0.4375 0.0313 +v 0.3293 0.3125 0.8803 +v 0.1176 0.3125 0.0313 +v 0.208 0.4375 0.9106 +v -0.0036 0.4375 0.0615 +v 0.208 0.3125 0.9106 +v -0.0036 0.3125 0.0615 +v -0.0625 0.8125 0.9375 +v -0.0625 0.8125 0.125 +v -0.0625 0.3125 0.9375 +v -0.0625 0.3125 0.125 +v -0.8125 0.8125 0.9375 +v -0.8125 0.8125 0.125 +v -0.8125 0.3125 0.9375 +v -0.8125 0.3125 0.125 +v -0.0625 1.625 0.9375 +v -0.0625 1.625 0.125 +v -0.0625 1.9375 0.9375 +v -0.0625 1.9375 0.125 +v -0.8125 1.625 0.9375 +v -0.8125 1.625 0.125 +v -0.8125 1.9375 0.9375 +v -0.8125 1.9375 0.125 +v -0.125 0.75 0.125 +v -0.125 0.75 0.0625 +v -0.125 0.4375 0.125 +v -0.125 0.4375 0.0625 +v -0.4375 0.75 0.125 +v -0.4375 0.75 0.0625 +v -0.4375 0.4375 0.125 +v -0.4375 0.4375 0.0625 +v -0.5 0.125 -0.25 +v -0.5 0.125 -0.4375 +v -0.5 0.0625 -0.25 +v -0.5 0.0625 -0.4375 +v -0.8125 0.125 -0.25 +v -0.8125 0.125 -0.4375 +v -0.8125 0.0625 -0.25 +v -0.8125 0.0625 -0.4375 +v -0.5156 0.1875 -0.2656 +v -0.5156 0.1875 -0.4219 +v -0.5156 0.125 -0.2656 +v -0.5156 0.125 -0.4219 +v -0.7969 0.1875 -0.2656 +v -0.7969 0.1875 -0.4219 +v -0.7969 0.125 -0.2656 +v -0.7969 0.125 -0.4219 +v -0.9835 0.0625 -0.2521 +v -0.3619 0.0625 -0.1868 +v -0.9835 0 -0.2521 +v -0.3619 0 -0.1868 +v -0.9182 0.0625 -0.8737 +v -0.2966 0.0625 -0.8084 +v -0.9182 0 -0.8737 +v -0.2966 0 -0.8084 +v -0.1813 0.0313 0.0082 +v 0.9375 0.0313 -0.1094 +v -0.1813 -0.0312 0.0082 +v 0.9375 -0.0312 -0.1094 +v -0.2728 0.0313 -0.862 +v 0.846 0.0313 -0.9796 +v -0.2728 -0.0312 -0.862 +v 0.846 -0.0312 -0.9796 +v -0.9063 1.7609 0.7499 +v -0.9063 1.75 0.125 +v -0.9063 1.011 0.763 +v -0.9063 1.0001 0.1381 +v -0.9688 1.7609 0.7499 +v -0.9687 1.75 0.125 +v -0.9688 1.011 0.763 +v -0.9688 1.0001 0.1381 +v -0.1875 1.5 0.8437 +v -0.1875 1.5 0.2187 +v -0.1875 0.875 0.8437 +v -0.1875 0.875 0.2187 +v -0.25 1.5 0.8437 +v -0.25 1.5 0.2188 +v -0.25 0.875 0.8437 +v -0.25 0.875 0.2188 +v -0.125 1.3125 0.7187 +v -0.125 1.3125 0.5312 +v -0.125 1.125 0.7187 +v -0.125 1.125 0.5312 +v -0.1875 1.3125 0.7187 +v -0.1875 1.3125 0.5312 +v -0.1875 1.125 0.7187 +v -0.1875 1.125 0.5312 +v -0.125 0.875 0.875 +v -0.125 0.875 0.1875 +v -0.125 0.8125 0.875 +v -0.125 0.8125 0.1875 +v -0.3125 0.875 0.875 +v -0.3125 0.875 0.1875 +v -0.3125 0.8125 0.875 +v -0.3125 0.8125 0.1875 +v -0.4375 1.5 0.8437 +v -0.4375 1.5 0.2187 +v -0.4375 0.875 0.8437 +v -0.4375 0.875 0.2187 +v -0.5 1.5 0.8437 +v -0.5 1.5 0.2187 +v -0.5 0.875 0.8437 +v -0.5 0.875 0.2187 +v -0.375 1.3125 0.7187 +v -0.375 1.3125 0.5312 +v -0.375 1.125 0.7187 +v -0.375 1.125 0.5312 +v -0.4375 1.3125 0.7187 +v -0.4375 1.3125 0.5312 +v -0.4375 1.125 0.7187 +v -0.4375 1.125 0.5312 +v -0.375 0.875 0.875 +v -0.375 0.875 0.1875 +v -0.375 0.8125 0.875 +v -0.375 0.8125 0.1875 +v -0.5625 0.875 0.875 +v -0.5625 0.875 0.1875 +v -0.5625 0.8125 0.875 +v -0.5625 0.8125 0.1875 +v -0.5938 1.625 0.875 +v -0.5937 1.625 0.6875 +v -0.5938 1.5625 0.875 +v -0.5937 1.5625 0.6875 +v -0.7813 1.625 0.875 +v -0.7813 1.625 0.6875 +v -0.7813 1.5625 0.875 +v -0.7813 1.5625 0.6875 +v -0.5938 0.875 0.875 +v -0.5937 0.875 0.6875 +v -0.5938 0.8125 0.875 +v -0.5937 0.8125 0.6875 +v -0.7813 0.875 0.875 +v -0.7813 0.875 0.6875 +v -0.7813 0.8125 0.875 +v -0.7813 0.8125 0.6875 +v 0 1.9375 0.9375 +v 0 1.9375 0.3125 +v 0 1.8125 0.9375 +v 0 1.8125 0.3125 +v -0.0625 1.9375 0.3125 +v -0.0625 1.8125 0.9375 +v -0.0625 1.8125 0.3125 +v 0.9375 0.375 0.9375 +v 0.9375 0.375 0.3125 +v 0.8125 0.375 0.9375 +v 0.8125 0.375 0.3125 +v 0.9375 0.3125 0.9375 +v 0.9375 0.3125 0.3125 +v 0.8125 0.3125 0.9375 +v 0.8125 0.3125 0.3125 +v 0.9375 -0.1875 -0.0625 +v 0.9375 -0.1875 -0.25 +v 0.9375 -1 -0.0625 +v 0.9375 -1 -0.25 +v 0.75 -0.1875 -0.0625 +v 0.75 -0.1875 -0.25 +v 0.75 -1 -0.0625 +v 0.75 -1 -0.25 +v 0.9375 -0.1875 -0.75 +v 0.9375 -0.1875 -0.9375 +v 0.9375 -1 -0.75 +v 0.9375 -1 -0.9375 +v 0.75 -0.1875 -0.75 +v 0.75 -0.1875 -0.9375 +v 0.75 -1 -0.75 +v 0.75 -1 -0.9375 +v -0.75 -0.1875 -0.75 +v -0.75 -0.1875 -0.9375 +v -0.75 -1 -0.75 +v -0.75 -1 -0.9375 +v -0.9375 -0.1875 -0.75 +v -0.9375 -0.1875 -0.9375 +v -0.9375 -1 -0.75 +v -0.9375 -1 -0.9375 +v -0.75 -0.1875 -0.0625 +v -0.75 -0.1875 -0.25 +v -0.75 -1 -0.0625 +v -0.75 -1 -0.25 +v -0.9375 -0.1875 -0.0625 +v -0.9375 -0.1875 -0.25 +v -0.9375 -1 -0.0625 +v -0.9375 -1 -0.25 +v 1 0 -1 +v 1 -0.1875 0 +v 1 -0.1875 -1 +v -1 0 -1 +v -1 -0.1875 0 +v -1 -0.1875 -1 +v -0.0594 1.9375 0.4406 +v -0.0594 1.9375 0.1187 +v -0.5 1.9375 0.4406 +v -0.5 1.9375 0.1187 +v -0.125 1.875 0.1219 +v -0.125 1.875 0.0281 +v -0.125 1.8125 0.1219 +v -0.125 1.8125 0.0281 +v -0.1875 1.875 0.1219 +v -0.1875 1.875 0.0281 +v -0.1875 1.8125 0.1219 +v -0.1875 1.8125 0.0281 +v -0.2188 1.875 0.1219 +v -0.2188 1.875 0.0281 +v -0.2188 1.8125 0.1219 +v -0.2188 1.8125 0.0281 +v -0.2813 1.875 0.1219 +v -0.2813 1.875 0.0281 +v -0.2813 1.8125 0.1219 +v -0.2813 1.8125 0.0281 +v -0.3125 1.875 0.1219 +v -0.3125 1.875 0.0281 +v -0.3125 1.8125 0.1219 +v -0.3125 1.8125 0.0281 +v -0.375 1.875 0.1219 +v -0.375 1.875 0.0281 +v -0.375 1.8125 0.1219 +v -0.375 1.8125 0.0281 +v -0.4063 1.875 0.1219 +v -0.4063 1.875 0.0281 +v -0.4063 1.8125 0.1219 +v -0.4063 1.8125 0.0281 +v -0.4688 1.875 0.1219 +v -0.4688 1.875 0.0281 +v -0.4688 1.8125 0.1219 +v -0.4688 1.8125 0.0281 +v -0.5156 1.8438 0.1219 +v -0.5156 1.8438 0.0281 +v -0.5156 1.7188 0.1219 +v -0.5156 1.7188 0.0281 +v -0.6406 1.8438 0.1219 +v -0.6406 1.8438 0.0281 +v -0.6406 1.7188 0.1219 +v -0.6406 1.7188 0.0281 +v 0.8125 0 1 +v -0.1875 0 1 +v -0.1875 0.3125 1 +v 0.8125 0.3125 1 +v 0 1.75 1.0625 +v 0 1.75 1 +v 0 1.125 1.0625 +v 0 1.125 1 +v -0.875 1.75 1.0625 +v -0.875 1.75 1 +v -0.875 1.125 1.0625 +v -0.875 1.125 1 +v -1.0016 -0.25 0.25 +v -1.0016 -0.25 0.75 +v -1.0016 -0.75 0.25 +v -1.0016 -0.75 0.75 +v -0.9375 -0.25 0.25 +v -0.9375 -0.25 0.75 +v -0.9375 -0.75 0.25 +v -0.9375 -0.75 0.75 +v -1.0016 -0.0625 0.375 +v -1.0016 -0.0625 0.625 +v -1.0016 -0.25 0.375 +v -1.0016 -0.25 0.625 +v -0.9375 -0.0625 0.375 +v -0.9375 -0.0625 0.625 +v -0.9375 -0.25 0.375 +v -0.9375 -0.25 0.625 +v 1.0016 -0.25 0.75 +v 1.0016 -0.25 0.25 +v 1.0016 -0.75 0.75 +v 1.0016 -0.75 0.25 +v 0.9375 -0.25 0.75 +v 0.9375 -0.25 0.25 +v 0.9375 -0.75 0.75 +v 0.9375 -0.75 0.25 +v 1.0016 -0.0625 0.625 +v 1.0016 -0.0625 0.375 +v 1.0016 -0.25 0.625 +v 1.0016 -0.25 0.375 +v 0.9375 -0.0625 0.625 +v 0.9375 -0.0625 0.375 +v 0.9375 -0.25 0.625 +v 0.9375 -0.25 0.375 +v -0.625 1.5625 0.8125 +v -0.625 1.5625 0.75 +v -0.625 0.8125 0.8125 +v -0.625 0.8125 0.75 +v -0.75 1.5625 0.8125 +v -0.75 1.5625 0.75 +v -0.75 0.8125 0.8125 +v -0.75 0.8125 0.75 +v -0.9069 -0.6875 -0.2556 +v -0.3125 -0.6875 -0.0625 +v -0.9069 -1 -0.2556 +v -0.3125 -1 -0.0625 +v -0.6365 -0.6875 -1.0878 +v -0.0421 -0.6875 -0.8947 +v -0.6365 -1 -1.0878 +v -0.0421 -1 -0.8947 +v 0.5875 -0.6875 0.0058 +v 0.8615 -0.6875 -0.556 +v 0.5875 -1 0.0058 +v 0.8615 -1 -0.556 +v -0.1989 -0.6875 -0.3778 +v 0.075 -0.6875 -0.9396 +v -0.1989 -1 -0.3778 +v 0.075 -1 -0.9396 +v 0 0.9688 0.9375 +v 0 1.9375 0.9375 +v 0 1.9375 0 +v 0 0.25 0.9375 +v -0.5156 0.1875 -0.2656 +v -0.7969 0.1875 -0.2656 +v -0.5156 0.125 -0.2656 +v -0.7969 0.125 -0.2656 +v -0.7969 0.1875 -0.4219 +v -0.7969 0.125 -0.4219 +v -0.5156 0.1875 -0.4219 +v -0.5156 0.125 -0.4219 +v 0.9375 1.9375 0.5625 +v 0.9375 1.9375 0.375 +v 0.9375 1.875 0.5625 +v 0.9375 1.875 0.375 +v 0 1.9375 0.5625 +v 0 1.9375 0.375 +v 0 1.875 0.5625 +v 0 1.875 0.375 +v 0.9375 0.875 0.5625 +v 0.9375 0.875 0.375 +v 0.875 0.875 0.5625 +v 0.875 0.875 0.375 +v 0.875 1.875 0.5625 +v 0.875 1.875 0.375 +v 0.9375 0.3125 0.5625 +v 0.9375 0.3125 0.375 +v 0.875 0.3125 0.5625 +v 0.875 0.3125 0.375 +v 0.9375 1.9375 0.75 +v 0.9375 1.875 0.9375 +v 0.9375 1.875 0.75 +v 0 1.9375 0.75 +v 0 1.875 0.9375 +v 0 1.875 0.75 +v 0.9375 0.875 0.75 +v 0.875 0.875 0.9375 +v 0.875 0.875 0.75 +v 0.875 1.875 0.9375 +v 0.875 1.875 0.75 +v 0.9375 0.3125 0.75 +v 0.875 0.3125 0.9375 +v 0.875 0.3125 0.75 +v 0.75 -0.1875 0 +v 0.75 -0.1875 -0.875 +v 0.75 -0.4375 0 +v 0.75 -0.4375 -0.875 +v 0 -0.1875 0 +v 0 -0.1875 -0.875 +v 0 -0.4375 0 +v 0 -0.4375 -0.875 +v 0 2 2 +v 0 2 1 +v 0.125 1.9375 1.125 +v 0.125 1.9375 1.875 +v 0.875 1.9375 1.125 +v 0.875 1.9375 1.875 +v 0.125 2 1.875 +v 0.125 2 1.125 +v 0.875 2 1.125 +v 1 2 1 +v 0.875 2 1.875 +v 1 2 2 +v 0.75 2.0063 1.75 +v 0.75 2.0063 1.25 +v 0.75 1.9438 1.75 +v 0.75 1.9438 1.25 +v 0.25 2.0063 1.75 +v 0.25 2.0063 1.25 +v 0.25 1.9438 1.75 +v 0.25 1.9438 1.25 +vt 0 0.0938 +vt 0 0.25 +vt 0.3125 0.25 +vt 0.3125 0.0938 +vt 0 0.0938 +vt 0 0.25 +vt 0.3125 0.25 +vt 0.3125 0.0938 +vt 0.875 1 +vt 0.875 0.6875 +vt 0.4375 0.6875 +vt 0.4375 1 +vt 0.875 1 +vt 0.875 0.6875 +vt 0.4375 0.6875 +vt 0.4375 1 +vt 0.4375 0.5313 +vt 0.4375 0.6875 +vt 0.875 0.6875 +vt 0.875 0.5313 +vt 0.4375 0.375 +vt 0.4375 0.5313 +vt 0.875 0.5313 +vt 0.875 0.375 +vt 0.7344 0.6094 +vt 0.7344 0.6406 +vt 0.75 0.6406 +vt 0.75 0.6094 +vt 0.7188 0.6094 +vt 0.7188 0.6406 +vt 0.7344 0.6406 +vt 0.7344 0.6094 +vt 0.75 0.6406 +vt 0.75 0.625 +vt 0.7188 0.625 +vt 0.7188 0.6406 +vt 0.75 0.6094 +vt 0.75 0.625 +vt 0.7188 0.625 +vt 0.7188 0.6094 +vt 0.7188 0.6094 +vt 0.7188 0.6406 +vt 0.75 0.6406 +vt 0.75 0.6094 +vt 0 0.25 +vt 0 0 +vt 0.5 0 +vt 0.5 0.25 +vt 0.7656 0.5156 +vt 0.7656 1 +vt 1 1 +vt 1 0.5156 +vt 1 0 +vt 1 0.4844 +vt 0.9844 0.4844 +vt 0.9844 0 +vt 0.9844 0 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0 +vt 0 0 +vt 0 0.0156 +vt 0.5 0.0156 +vt 0.5 0 +vt 0.6563 0.6875 +vt 0.6563 0.1875 +vt 0.4063 0.1875 +vt 0.4063 0.6875 +vt 0.4063 0.6875 +vt 0.6563 0.6875 +vt 0.6563 0.1875 +vt 0.4063 0.1875 +vt 0.9844 0.5156 +vt 0.9844 1 +vt 0.75 1 +vt 0.75 0.5156 +vt 0.0156 0.0156 +vt 0.25 0.0156 +vt 0.25 0.25 +vt 0.0156 0.25 +vt 0.75 1 +vt 0.5156 1 +vt 0.5156 0.75 +vt 0.75 0.75 +vt 1 0.1875 +vt 1 0.625 +vt 0.75 0.625 +vt 0.75 0.1875 +vt 1 0.1875 +vt 1 0.625 +vt 0.75 0.625 +vt 0.75 0.1875 +vt 0.7813 0.625 +vt 0.7813 0.7656 +vt 0.75 0.7656 +vt 0.75 0.625 +vt 1 0.625 +vt 1 0.7656 +vt 0.9688 0.7656 +vt 0.9688 0.625 +vt 0.75 0.625 +vt 0.75 0.7656 +vt 0.7813 0.7656 +vt 0.7813 0.625 +vt 0.7813 0.625 +vt 0.7813 0.7656 +vt 0.75 0.7656 +vt 0.75 0.625 +vt 0.75 0.625 +vt 0.75 0.7656 +vt 0.7813 0.7656 +vt 0.7813 0.625 +vt 1 0.625 +vt 1 0.7656 +vt 0.9688 0.7656 +vt 0.9688 0.625 +vt 0.9688 0.625 +vt 0.9688 0.7656 +vt 1 0.7656 +vt 1 0.625 +vt 1 0.1094 +vt 1 0.1875 +vt 0.9688 0.1875 +vt 0.9688 0.1094 +vt 0.9688 0.1094 +vt 0.9688 0.1875 +vt 1 0.1875 +vt 1 0.1094 +vt 0.7813 0.1094 +vt 0.7813 0.1875 +vt 0.75 0.1875 +vt 0.75 0.1094 +vt 0.9688 0.1094 +vt 0.9688 0.1875 +vt 1 0.1875 +vt 1 0.1094 +vt 1 0.1094 +vt 1 0.1875 +vt 0.9688 0.1875 +vt 0.9688 0.1094 +vt 0.75 0.1094 +vt 0.75 0.1875 +vt 0.7813 0.1875 +vt 0.7813 0.1094 +vt 0.75 0.1094 +vt 0.75 0.1875 +vt 0.7813 0.1875 +vt 0.7813 0.1094 +vt 0.7813 0.1094 +vt 0.7813 0.1875 +vt 0.75 0.1875 +vt 0.75 0.1094 +vt 1 0.7656 +vt 1 0.7813 +vt 0.75 0.7813 +vt 0.75 0.7656 +vt 1 0.7656 +vt 1 0.7813 +vt 0.75 0.7813 +vt 0.75 0.7656 +vt 1 0.0313 +vt 1 0.1094 +vt 0.75 0.1094 +vt 0.75 0.0313 +vt 0 0.75 +vt 0 1 +vt 0.25 1 +vt 0.25 0.75 +vt 1 0.0313 +vt 1 0.1094 +vt 0.75 0.1094 +vt 0.75 0.0313 +vt 0.9688 0.7656 +vt 0.7813 0.7656 +vt 0.7813 0.625 +vt 0.9688 0.625 +vt 0.9688 0.7656 +vt 0.9688 0.625 +vt 0.7813 0.625 +vt 0.7813 0.7656 +vt 0.7813 0.6094 +vt 0.9688 0.6094 +vt 0.9688 0.625 +vt 0.7813 0.625 +vt 0.9688 0.7813 +vt 0.7813 0.7813 +vt 0.7813 0.7656 +vt 0.9688 0.7656 +vt 0.9688 0.7656 +vt 0.7813 0.7656 +vt 0.7813 0.7813 +vt 0.9688 0.7813 +vt 0.9688 0.625 +vt 0.9688 0.7656 +vt 1 0.7656 +vt 1 0.625 +vt 0.9688 0.6406 +vt 0.7813 0.6406 +vt 0.7813 0.625 +vt 0.9688 0.625 +vt 0.9688 0.1875 +vt 0.7813 0.1875 +vt 0.7813 0.1094 +vt 0.9688 0.1094 +vt 0.7813 0.1094 +vt 0.9688 0.1094 +vt 0.9688 0.1875 +vt 0.7813 0.1875 +vt 0.7813 0.1875 +vt 0.9688 0.1875 +vt 0.9688 0.2031 +vt 0.7813 0.2031 +vt 0.9688 0.2031 +vt 0.7813 0.2031 +vt 0.7813 0.1875 +vt 0.9688 0.1875 +vt 0.9688 0.1094 +vt 0.7813 0.1094 +vt 0.7813 0.0938 +vt 0.9688 0.0938 +vt 0.7813 0.0938 +vt 0.9688 0.0938 +vt 0.9688 0.1094 +vt 0.7813 0.1094 +vt 0.25 0.1875 +vt 0.25 0.6875 +vt 0 0.6875 +vt 0 0.1875 +vt 0.75 0 +vt 0.75 0.25 +vt 0.5 0.25 +vt 0.5 0 +vt 0.25 0.5 +vt 0 0.5 +vt 0 0.25 +vt 0.25 0.25 +vt 0.25 0.1875 +vt 0.25 0.6875 +vt 0 0.6875 +vt 0 0.1875 +vt 0.75 0.75 +vt 0.75 1 +vt 1 1 +vt 1 0.75 +vt 0 1 +vt 0 0.75 +vt 0.25 0.75 +vt 0.25 1 +vt 0.75 0.4688 +vt 0.5156 0.4688 +vt 0.5156 0.2813 +vt 0.75 0.2813 +vt 0.9688 0.0313 +vt 0.9688 0.2188 +vt 0.7813 0.2188 +vt 0.7813 0.0313 +vt 0.75 0.25 +vt 0.75 0.5 +vt 0.5 0.5 +vt 0.5 0.25 +vt 0.5 0.25 +vt 0.25 0.25 +vt 0.25 0 +vt 0.5 0 +vt 0 0 +vt 0.25 0 +vt 0.25 0.25 +vt 0 0.25 +vt 0.5 1 +vt 0.5 0.75 +vt 0.75 0.75 +vt 0.75 1 +vt 0.9688 0.2188 +vt 0.9688 0.0313 +vt 1 0 +vt 1 0.25 +vt 0.7813 0.2188 +vt 0.9688 0.2188 +vt 1 0.25 +vt 0.75 0.25 +vt 0.7813 0.0313 +vt 0.7813 0.2188 +vt 0.75 0.25 +vt 0.75 0 +vt 0.9688 0.0313 +vt 0.7813 0.0313 +vt 0.75 0 +vt 1 0 +vt 0.9844 0.0313 +vt 0.9844 0.2188 +vt 0.9688 0.2188 +vt 0.9688 0.0313 +vt 0.7813 0.2188 +vt 0.9688 0.2188 +vt 0.9688 0.2344 +vt 0.7813 0.2344 +vt 0.7813 0.0313 +vt 0.7813 0.2188 +vt 0.7656 0.2188 +vt 0.7656 0.0313 +vt 0.9688 0.0156 +vt 0.7813 0.0156 +vt 0.7813 0.0313 +vt 0.9688 0.0313 +vt 0.7813 0.2188 +vt 0.9688 0.2188 +vt 0.9688 0.0313 +vt 0.7813 0.0313 +vt 1 0 +vt 0.9688 0.0313 +vt 0.9688 0.2188 +vt 1 0.25 +vt 1 0.25 +vt 0.9688 0.2188 +vt 0.7813 0.2188 +vt 0.75 0.25 +vt 0.75 0.25 +vt 0.7813 0.2188 +vt 0.7813 0.0313 +vt 0.75 0 +vt 0.75 0 +vt 0.7813 0.0313 +vt 0.9688 0.0313 +vt 1 0 +vt 0.9688 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.0313 +vt 0.9688 0.0313 +vt 0.9688 0.2344 +vt 0.9688 0.2188 +vt 0.7813 0.2188 +vt 0.7813 0.2344 +vt 0.7656 0.2188 +vt 0.7813 0.2188 +vt 0.7813 0.0313 +vt 0.7656 0.0313 +vt 0.7813 0.0313 +vt 0.7813 0.0156 +vt 0.9688 0.0156 +vt 0.9688 0.0313 +vt 0.4688 0.7656 +vt 0.2813 0.7656 +vt 0.2813 0.6875 +vt 0.4688 0.6875 +vt 0 0.6875 +vt 0.0309 0.6875 +vt 0.0309 0.7656 +vt 0 0.7656 +vt 0 1 +vt 0 0.75 +vt 0.4688 0.75 +vt 0.4688 1 +vt 0.4688 0.7813 +vt 0.5 0.7813 +vt 0.5 1 +vt 0.4688 1 +vt 0.5313 1 +vt 0.5 1 +vt 0.5 0.7813 +vt 0.5313 0.7813 +vt 0.5156 0.7813 +vt 0.5156 1 +vt 0.4844 1 +vt 0.4844 0.7813 +vt 0.5156 0.7656 +vt 0.5156 0.7969 +vt 0.4844 0.7969 +vt 0.4844 0.7656 +vt 0.5156 0.7656 +vt 0.5156 0.7969 +vt 0.4844 0.7969 +vt 0.4844 0.7656 +vt 0.4688 0.7813 +vt 0.5 0.7813 +vt 0.5 1 +vt 0.4688 1 +vt 0.5313 1 +vt 0.5 1 +vt 0.5 0.7813 +vt 0.5313 0.7813 +vt 0.5156 0.7813 +vt 0.5156 1 +vt 0.4844 1 +vt 0.4844 0.7813 +vt 0.5156 0.7656 +vt 0.5156 0.7969 +vt 0.4844 0.7969 +vt 0.4844 0.7656 +vt 0.5156 0.7656 +vt 0.5156 0.7969 +vt 0.4844 0.7969 +vt 0.4844 0.7656 +vt 0.4688 0.7813 +vt 0.5 0.7813 +vt 0.5 1 +vt 0.4688 1 +vt 0.5313 1 +vt 0.5 1 +vt 0.5 0.7813 +vt 0.5313 0.7813 +vt 0.5156 0.7813 +vt 0.5156 1 +vt 0.4844 1 +vt 0.4844 0.7813 +vt 0.5156 0.7656 +vt 0.5156 0.7969 +vt 0.4844 0.7969 +vt 0.4844 0.7656 +vt 0.5156 0.7656 +vt 0.5156 0.7969 +vt 0.4844 0.7969 +vt 0.4844 0.7656 +vt 0.4688 0.7813 +vt 0.5 0.7813 +vt 0.5 1 +vt 0.4688 1 +vt 0.5313 1 +vt 0.5 1 +vt 0.5 0.7813 +vt 0.5313 0.7813 +vt 0.5156 0.7813 +vt 0.5156 1 +vt 0.4844 1 +vt 0.4844 0.7813 +vt 0.5156 0.7656 +vt 0.5156 0.7969 +vt 0.4844 0.7969 +vt 0.4844 0.7656 +vt 0.5156 0.7656 +vt 0.5156 0.7969 +vt 0.4844 0.7969 +vt 0.4844 0.7656 +vt 0.5938 0.0625 +vt 0.5938 0.1875 +vt 0.3906 0.1875 +vt 0.3906 0.0625 +vt 0.5938 0.0625 +vt 0.5938 0.1875 +vt 0.3906 0.1875 +vt 0.3906 0.0625 +vt 0.5938 0.1875 +vt 0.3906 0.1875 +vt 0.3906 0 +vt 0.5938 0 +vt 0.1875 0.0625 +vt 0.1875 0.1875 +vt 0 0.1875 +vt 0 0.0625 +vt 0.7188 0.7031 +vt 0.5156 0.7031 +vt 0.5156 0.7813 +vt 0.7188 0.7813 +vt 0.7188 0.7031 +vt 0.5156 0.7031 +vt 0.5156 0.7813 +vt 0.7188 0.7813 +vt 0.1875 0 +vt 0.1875 0.1875 +vt 0.3906 0.1875 +vt 0.3906 0 +vt 0.7344 0.2031 +vt 0.7344 0.3906 +vt 0.6563 0.3906 +vt 0.6563 0.2031 +vt 0.0938 0.7344 +vt 0.0938 0.8125 +vt 0.0781 0.8125 +vt 0.0781 0.7344 +vt 0.1563 0.7344 +vt 0.1563 0.8125 +vt 0.1406 0.8125 +vt 0.1406 0.7344 +vt 0.1563 0.7969 +vt 0.1563 0.8125 +vt 0.0781 0.8125 +vt 0.0781 0.7969 +vt 0.1563 0.7344 +vt 0.1563 0.75 +vt 0.0781 0.75 +vt 0.0781 0.7344 +vt 0.1563 0.7344 +vt 0.1563 0.8125 +vt 0.0781 0.8125 +vt 0.0781 0.7344 +vt 0.7344 0.7031 +vt 0.7188 0.7031 +vt 0.7188 0.6563 +vt 0.7344 0.6563 +vt 0.6719 0.6563 +vt 0.6563 0.6563 +vt 0.6563 0.7031 +vt 0.6719 0.7031 +vt 0.7344 0.6563 +vt 0.7344 0.7031 +vt 0.6563 0.7031 +vt 0.6563 0.6563 +vt 0.7344 0.6563 +vt 0.7344 0.6719 +vt 0.6563 0.6719 +vt 0.6563 0.6563 +vt 0.6563 0.6875 +vt 0.6563 0.7031 +vt 0.7344 0.7031 +vt 0.7344 0.6875 +vt 0.75 0.7031 +vt 0.7344 0.7031 +vt 0.7344 0.6563 +vt 0.75 0.6563 +vt 0.75 0.7031 +vt 0.7344 0.7031 +vt 0.7344 0.6563 +vt 0.75 0.6563 +vt 0.7344 0.6406 +vt 0.7344 0.6563 +vt 0.6563 0.6563 +vt 0.6563 0.6406 +vt 0.7344 0.6406 +vt 0.7344 0.6563 +vt 0.6563 0.6563 +vt 0.6563 0.6406 +vt 0.0625 0.3125 +vt 0.125 0.3125 +vt 0.125 0.9375 +vt 0.0625 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 0.125 1 +vt 0.125 0.9375 +vt 0.125 1 +vt 0.125 0.375 +vt 0.75 0.375 +vt 0.75 1 +vt 0.6875 0.375 +vt 0.75 0.375 +vt 0.75 1 +vt 0.6875 1 +vt 0.0625 0.9375 +vt 0.0625 0.875 +vt 0.6875 0.875 +vt 0.6875 0.9375 +vt 0.7188 0.9844 +vt 0.7188 1 +vt 1 1 +vt 1 0.9844 +vt 1 0.7813 +vt 1 0.7969 +vt 0.7188 0.7969 +vt 0.7188 0.7813 +vt 1 1 +vt 0.7188 1 +vt 0.7188 0.7813 +vt 1 0.7813 +vt 1 1 +vt 0.9844 1 +vt 0.9844 0.7813 +vt 1 0.7813 +vt 0.7344 0.7813 +vt 0.7188 0.7813 +vt 0.7188 1 +vt 0.7344 1 +vt 0.4063 0.5 +vt 0.4063 0.6875 +vt 0.25 0.6875 +vt 0.25 0.5 +vt 0.4063 0.6875 +vt 0.25 0.6875 +vt 0.25 0.6719 +vt 0.4063 0.6719 +vt 0.4063 0.5156 +vt 0.25 0.5156 +vt 0.25 0.5 +vt 0.4063 0.5 +vt 0.2656 0.5 +vt 0.2656 0.6875 +vt 0.25 0.6875 +vt 0.25 0.5 +vt 0.4063 0.5 +vt 0.4063 0.6875 +vt 0.3906 0.6875 +vt 0.3906 0.5 +vt 0.4063 0.3438 +vt 0.4063 0.5 +vt 0.25 0.5 +vt 0.25 0.3438 +vt 0.4063 0.1875 +vt 0.4063 0.3438 +vt 0.25 0.3438 +vt 0.25 0.1875 +vt 0.25 0.5 +vt 0.4063 0.5 +vt 0.4063 0.4844 +vt 0.25 0.4844 +vt 0.2656 0.3438 +vt 0.2656 0.5 +vt 0.25 0.5 +vt 0.25 0.3438 +vt 0.4063 0.3438 +vt 0.4063 0.5 +vt 0.3906 0.5 +vt 0.3906 0.3438 +vt 0.3281 0.4063 +vt 0.3281 0.4531 +vt 0.2813 0.4531 +vt 0.2813 0.4063 +vt 0.2813 0.4531 +vt 0.3281 0.4531 +vt 0.3281 0.4375 +vt 0.2813 0.4375 +vt 0.2969 0.4063 +vt 0.2969 0.4531 +vt 0.2813 0.4531 +vt 0.2813 0.4063 +vt 0.3281 0.4063 +vt 0.3281 0.4531 +vt 0.3125 0.4531 +vt 0.3125 0.4063 +vt 0.2813 0.4063 +vt 0.3281 0.4063 +vt 0.3281 0.4219 +vt 0.2813 0.4219 +vt 0.7188 0.6094 +vt 0.7031 0.6094 +vt 0.7031 0.4375 +vt 0.7188 0.4375 +vt 0.75 0.6094 +vt 0.7344 0.6094 +vt 0.7344 0.4375 +vt 0.75 0.4375 +vt 0.7031 0.4375 +vt 0.7031 0.6094 +vt 0.75 0.6094 +vt 0.75 0.4375 +vt 0.75 0.5938 +vt 0.75 0.6094 +vt 0.7031 0.6094 +vt 0.7031 0.5938 +vt 0.75 0.4375 +vt 0.75 0.4531 +vt 0.7031 0.4531 +vt 0.7031 0.4375 +vt 0.4063 0.3438 +vt 0.4063 0.5 +vt 0.25 0.5 +vt 0.25 0.3438 +vt 0.4063 0.1875 +vt 0.4063 0.3438 +vt 0.25 0.3438 +vt 0.25 0.1875 +vt 0.25 0.5 +vt 0.4063 0.5 +vt 0.4063 0.4844 +vt 0.25 0.4844 +vt 0.2656 0.3438 +vt 0.2656 0.5 +vt 0.25 0.5 +vt 0.25 0.3438 +vt 0.4063 0.3438 +vt 0.4063 0.5 +vt 0.3906 0.5 +vt 0.3906 0.3438 +vt 0.3281 0.4063 +vt 0.3281 0.4531 +vt 0.2813 0.4531 +vt 0.2813 0.4063 +vt 0.2813 0.4531 +vt 0.3281 0.4531 +vt 0.3281 0.4375 +vt 0.2813 0.4375 +vt 0.2969 0.4063 +vt 0.2969 0.4531 +vt 0.2813 0.4531 +vt 0.2813 0.4063 +vt 0.3281 0.4063 +vt 0.3281 0.4531 +vt 0.3125 0.4531 +vt 0.3125 0.4063 +vt 0.2813 0.4063 +vt 0.3281 0.4063 +vt 0.3281 0.4219 +vt 0.2813 0.4219 +vt 0.7188 0.6094 +vt 0.7031 0.6094 +vt 0.7031 0.4375 +vt 0.7188 0.4375 +vt 0.75 0.6094 +vt 0.7344 0.6094 +vt 0.7344 0.4375 +vt 0.75 0.4375 +vt 0.7031 0.4375 +vt 0.7031 0.6094 +vt 0.75 0.6094 +vt 0.75 0.4375 +vt 0.75 0.5938 +vt 0.75 0.6094 +vt 0.7031 0.6094 +vt 0.7031 0.5938 +vt 0.75 0.4375 +vt 0.75 0.4531 +vt 0.7031 0.4531 +vt 0.7031 0.4375 +vt 0.5156 0.7656 +vt 0.5 0.7656 +vt 0.5 0.7188 +vt 0.5156 0.7188 +vt 0.4844 0.7656 +vt 0.4688 0.7656 +vt 0.4688 0.7188 +vt 0.4844 0.7188 +vt 0.5156 0.7656 +vt 0.5156 0.7188 +vt 0.4688 0.7188 +vt 0.4688 0.7656 +vt 0.5156 0.7188 +vt 0.5156 0.7344 +vt 0.4688 0.7344 +vt 0.4688 0.7188 +vt 0.4688 0.7656 +vt 0.4688 0.75 +vt 0.5156 0.75 +vt 0.5156 0.7656 +vt 0.5156 0.7656 +vt 0.5 0.7656 +vt 0.5 0.7188 +vt 0.5156 0.7188 +vt 0.4844 0.7656 +vt 0.4688 0.7656 +vt 0.4688 0.7188 +vt 0.4844 0.7188 +vt 0.5156 0.7188 +vt 0.5156 0.7344 +vt 0.4688 0.7344 +vt 0.4688 0.7188 +vt 0.4688 0.7656 +vt 0.4688 0.75 +vt 0.5156 0.75 +vt 0.5156 0.7656 +vt 0.5156 0.7188 +vt 0.5156 0.7656 +vt 0.4688 0.7656 +vt 0.4688 0.7188 +vt 0.5156 1 +vt 0.4844 1 +vt 0.4844 0.8438 +vt 0.5156 0.8438 +vt 0.5 0.8438 +vt 0.5 1 +vt 0.4844 1 +vt 0.4844 0.8438 +vt 0.5156 0.8594 +vt 0.4844 0.8594 +vt 0.4844 0.8438 +vt 0.5156 0.8438 +vt 0.5156 1 +vt 0.4844 1 +vt 0.4844 0.9844 +vt 0.5156 0.9844 +vt 0.4844 0.8438 +vt 0.4844 1 +vt 0.5156 1 +vt 0.5156 0.8438 +vt 0.4844 1 +vt 0.5 1 +vt 0.5 0.8438 +vt 0.4844 0.8438 +vt 0.4844 0.8438 +vt 0.4844 0.8594 +vt 0.5156 0.8594 +vt 0.5156 0.8438 +vt 0.4844 0.9844 +vt 0.4844 1 +vt 0.5156 1 +vt 0.5156 0.9844 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.7031 +vt 0.8906 0.75 +vt 0.8438 0.75 +vt 0.8438 0.7031 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.7031 +vt 0.8906 0.75 +vt 0.8438 0.75 +vt 0.8438 0.7031 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.7031 +vt 0.8906 0.75 +vt 0.8438 0.75 +vt 0.8438 0.7031 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.7031 +vt 0.8906 0.75 +vt 0.8438 0.75 +vt 0.8438 0.7031 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8906 0.5 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.8438 0.5 +vt 0.7969 0.5 +vt 0.7969 0.75 +vt 0.8438 0.75 +vt 0.8438 0.5 +vt 0.7969 0.5 +vt 0.7969 0.75 +vt 0.8438 0.75 +vt 0.7969 0.25 +vt 0.75 0.25 +vt 0.75 0.75 +vt 0.7969 0.75 +vt 0.7969 0.25 +vt 0.75 0.25 +vt 0.75 0.75 +vt 0.7969 0.75 +vt 0 0 +vt 0.5 0 +vt 0.5 0.25 +vt 0 0.25 +vt 0 0 +vt 0.5 0 +vt 0.5 0.25 +vt 0 0.25 +vt 0.75 0.0938 +vt 0.75 0.1719 +vt 0.6406 0.1719 +vt 0.6406 0.0938 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8281 +vt 0.6563 0.8281 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8281 +vt 0.6563 0.8281 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8281 +vt 0.6563 0.8281 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8359 +vt 0.6563 0.8359 +vt 0.6563 0.8125 +vt 0.6719 0.8125 +vt 0.6719 0.8281 +vt 0.6563 0.8281 +vt 0.6563 0.8125 +vt 0.7109 0.7813 +vt 0.7109 0.8125 +vt 0.6875 0.8125 +vt 0.6875 0.7813 +vt 0.7188 0.7813 +vt 0.7188 0.8125 +vt 0.6953 0.8125 +vt 0.6953 0.7813 +vt 0.7188 0.7891 +vt 0.7188 0.8125 +vt 0.6875 0.8125 +vt 0.6875 0.7891 +vt 0.7188 0.7813 +vt 0.7188 0.8047 +vt 0.6875 0.8047 +vt 0.6875 0.7813 +vt 0.7188 0.7813 +vt 0.7188 0.8125 +vt 0.6875 0.8125 +vt 0.6875 0.7813 +vt 0.75 0 +vt 0.75 0.25 +vt 0.5 0.25 +vt 0.5 0 +vt 0.75 0.25 +vt 0.6719 0.25 +vt 0.6719 0 +vt 0.75 0 +vt 0.75 0 +vt 0.75 0.0781 +vt 0.5 0.0781 +vt 0.5 0 +vt 0.5781 0.25 +vt 0.5 0.25 +vt 0.5 0 +vt 0.5781 0 +vt 1 0.7188 +vt 1 0.875 +vt 0.9844 0.875 +vt 0.9844 0.7188 +vt 0.7969 0.7188 +vt 0.7969 0.875 +vt 0.7813 0.875 +vt 0.7813 0.7188 +vt 1 0.8594 +vt 1 0.875 +vt 0.7813 0.875 +vt 0.7813 0.8594 +vt 1 0.7188 +vt 1 0.7344 +vt 0.7813 0.7344 +vt 0.7813 0.7188 +vt 1 0.7188 +vt 1 0.875 +vt 0.7813 0.875 +vt 0.7813 0.7188 +vt 0.875 0.4844 +vt 0.875 0.6094 +vt 0.75 0.6094 +vt 0.75 0.4844 +vt 0.75 0.6094 +vt 0.875 0.6094 +vt 0.875 0.5938 +vt 0.75 0.5938 +vt 0.875 0.5 +vt 0.75 0.5 +vt 0.75 0.4844 +vt 0.875 0.4844 +vt 0.766 0.4844 +vt 0.766 0.6094 +vt 0.75 0.6094 +vt 0.75 0.4844 +vt 0.8754 0.4844 +vt 0.8754 0.6094 +vt 0.8594 0.6094 +vt 0.8594 0.4844 +vt 0.125 0.6875 +vt 0.125 0.7344 +vt 0.0625 0.7344 +vt 0.0625 0.6875 +vt 0.0785 0.6875 +vt 0.0785 0.7344 +vt 0.0625 0.7344 +vt 0.0625 0.6875 +vt 0.1254 0.6875 +vt 0.1254 0.7344 +vt 0.1094 0.7344 +vt 0.1094 0.6875 +vt 0.75 0.6094 +vt 0.875 0.6094 +vt 0.875 0.5938 +vt 0.75 0.5938 +vt 0.875 0.5 +vt 0.75 0.5 +vt 0.75 0.4844 +vt 0.875 0.4844 +vt 0.766 0.4844 +vt 0.766 0.6094 +vt 0.75 0.6094 +vt 0.75 0.4844 +vt 0.8754 0.4844 +vt 0.8754 0.6094 +vt 0.8594 0.6094 +vt 0.8594 0.4844 +vt 0.0625 0.6875 +vt 0.0625 0.7344 +vt 0 0.7344 +vt 0 0.6875 +vt 0.016 0.6875 +vt 0.016 0.7344 +vt 0 0.7344 +vt 0 0.6875 +vt 0.0629 0.6875 +vt 0.0629 0.7344 +vt 0.0469 0.7344 +vt 0.0469 0.6875 +vt 0.625 0.25 +vt 0.625 1 +vt 0.5625 1 +vt 0.5625 0.25 +vt 0.6875 0.25 +vt 0.6875 1 +vt 0.625 1 +vt 0.625 0.25 +vt 0.6875 0.25 +vt 0.6875 1 +vt 0.5625 1 +vt 0.5625 0.25 +vt 0 0.0938 +vt 0 0.25 +vt 0.3125 0.25 +vt 0.3125 0.0938 +vt 0 0.0938 +vt 0 0.25 +vt 0.3125 0.25 +vt 0.3125 0.0938 +vt 0.875 1 +vt 0.875 0.6875 +vt 0.4375 0.6875 +vt 0.4375 1 +vt 0.875 1 +vt 0.875 0.6875 +vt 0.4375 0.6875 +vt 0.4375 1 +vt 0.4375 0.375 +vt 0.4375 0.5313 +vt 0.875 0.5313 +vt 0.875 0.375 +vt 0.4375 0.5313 +vt 0.4375 0.6875 +vt 0.875 0.6875 +vt 0.875 0.5313 +vt 0 0.0938 +vt 0 0.25 +vt 0.3125 0.25 +vt 0.3125 0.0938 +vt 0 0.0938 +vt 0 0.25 +vt 0.3125 0.25 +vt 0.3125 0.0938 +vt 0.875 1 +vt 0.875 0.6875 +vt 0.4375 0.6875 +vt 0.4375 1 +vt 0.875 1 +vt 0.875 0.6875 +vt 0.4375 0.6875 +vt 0.4375 1 +vt 0.4375 0.5313 +vt 0.4375 0.6875 +vt 0.875 0.6875 +vt 0.875 0.5313 +vt 0.4375 0.375 +vt 0.4375 0.5313 +vt 0.875 0.5313 +vt 0.875 0.375 +vt 0.875 0.4844 +vt 0.875 0.6094 +vt 0.75 0.6094 +vt 0.75 0.4844 +vt 0 0.75 +vt 0.2344 0.75 +vt 0.2344 1 +vt 0 1 +vt 0.4844 0.25 +vt 0.25 0.25 +vt 0.25 0.0156 +vt 0.4844 0.0156 +vt 0 0.2813 +vt 0.2344 0.2813 +vt 0.2344 0.4688 +vt 0 0.4688 +vt 0.7344 0.6563 +vt 0.7344 0.7031 +vt 0.75 0.7031 +vt 0.75 0.6563 +vt 0.7344 0.6563 +vt 0.7344 0.7031 +vt 0.75 0.7031 +vt 0.75 0.6563 +vt 0.6563 0.6563 +vt 0.7344 0.6563 +vt 0.7344 0.6406 +vt 0.6563 0.6406 +vt 0.6563 0.6563 +vt 0.7344 0.6563 +vt 0.7344 0.6406 +vt 0.6563 0.6406 +vt 0.3125 1 +vt 0.5 1 +vt 0.5 0.0625 +vt 0.3125 0.0625 +vt 0.5 1 +vt 0.3125 1 +vt 0.3125 0.0625 +vt 0.5 0.0625 +vt 0.5 1 +vt 0.4375 1 +vt 0.4375 0.0625 +vt 0.5 0.0625 +vt 0.375 0.0625 +vt 0.3125 0.0625 +vt 0.3125 1 +vt 0.375 1 +vt 0.3125 1 +vt 0.5 1 +vt 0.5 0 +vt 0.3125 0 +vt 0.5 1 +vt 0.3125 1 +vt 0.3125 0 +vt 0.5 0 +vt 0.5 1 +vt 0.4375 1 +vt 0.4375 0 +vt 0.5 0 +vt 0.375 0 +vt 0.3125 0 +vt 0.3125 1 +vt 0.375 1 +vt 0.3125 0.4375 +vt 0.5 0.4375 +vt 0.5 1 +vt 0.3125 1 +vt 0.5 0.4375 +vt 0.3125 0.4375 +vt 0.3125 1 +vt 0.5 1 +vt 0.5 0.4375 +vt 0.4375 0.4375 +vt 0.4375 1 +vt 0.5 1 +vt 0.375 1 +vt 0.3125 1 +vt 0.3125 0.4375 +vt 0.375 0.4375 +vt 0.5 1 +vt 0.3125 1 +vt 0.3125 0.0625 +vt 0.5 0.0625 +vt 0.375 0.0625 +vt 0.3125 0.0625 +vt 0.3125 1 +vt 0.375 1 +vt 0.5 1 +vt 0.3125 1 +vt 0.3125 0 +vt 0.5 0 +vt 0.375 0 +vt 0.3125 0 +vt 0.3125 1 +vt 0.375 1 +vt 0.5 0.4375 +vt 0.3125 0.4375 +vt 0.3125 1 +vt 0.5 1 +vt 0.375 1 +vt 0.3125 1 +vt 0.3125 0.4375 +vt 0.375 0.4375 +vt 0.9844 0 +vt 0.9844 0.0625 +vt 0.7656 0.0625 +vt 0.7656 0 +vt 1 0 +vt 1 0.0625 +vt 0.7813 0.0625 +vt 0.7813 0 +vt 0.9844 0.25 +vt 0.7656 0.25 +vt 0.7656 0.0625 +vt 0.9844 0.0625 +vt 0.9844 0.3906 +vt 0.9844 0.4531 +vt 0.7969 0.4531 +vt 0.7969 0.3906 +vt 0.9688 0.0313 +vt 0.9688 0.2188 +vt 0.7813 0.2188 +vt 0.7813 0.0313 +vt 0.7188 0.2188 +vt 0.7188 0.0313 +vt 0.75 0 +vt 0.75 0.25 +vt 0.5313 0.2188 +vt 0.7188 0.2188 +vt 0.75 0.25 +vt 0.5 0.25 +vt 0.5313 0.0313 +vt 0.5313 0.2188 +vt 0.5 0.25 +vt 0.5 0 +vt 0.7188 0.0313 +vt 0.5313 0.0313 +vt 0.5 0 +vt 0.75 0 +vt 0.1094 0.6094 +vt 0.1094 0.4844 +vt 0.125 0.4844 +vt 0.125 0.6094 +vt 0.0156 0.4844 +vt 0 0.4844 +vt 0 0.6094 +vt 0.0156 0.6094 +vt 0 0.4844 +vt 0.125 0.4844 +vt 0.125 0.6094 +vt 0 0.6094 +vt 0.125 0.4844 +vt 0.125 0.5 +vt 0 0.5 +vt 0 0.4844 +vt 0 0.6094 +vt 0.125 0.6094 +vt 0.125 0.5938 +vt 0 0.5938 +vt 0.0781 1 +vt 0.0781 0.9844 +vt 0.2656 0.9844 +vt 0.2656 1 +vt 0.25 1 +vt 0.25 0.9844 +vt 0.4375 0.9844 +vt 0.4375 1 +vt 0.1406 1 +vt 0.1406 0.9844 +vt 0.3281 0.9844 +vt 0.3281 1 +vt 0.1719 1 +vt 0.1719 0.9844 +vt 0.3594 0.9844 +vt 0.3594 1 +vn 0.96 0 -0.28 +vn -0.96 0 0.28 +vn 0 1 0 +vn 0 -1 0 +vn 0.28 0 0.96 +vn -0.28 0 -0.96 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 1 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 1 0 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn 1 0 0 +vn 0 0 1 +vn -0.71 0 -0.71 +vn 0 0 1 +vn 1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 1 0 0 +vn 0 0 1 +vn 1 0 0 +vn -0.71 0 -0.71 +vn 0 0 1 +vn -0.71 0 -0.71 +vn 1 0 0 +vn 0 0 1 +vn 1 0 0 +vn 0 0 1 +vn 1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 -1 0 +vn -0.71 0 -0.71 +vn 0 1 0 +vn 1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 1 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 -1 +vn 0 -1 0 +vn 1 0 0 +vn 1 0 0 +vn 1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 0 -1 +vn 0 1 0 +vn -1 0 0 +vn -1 0 0 +vn -1 0 0 +vn -1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 0 -1 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 -1 +vn 0 1 0 +vn 0.97 0 -0.24 +vn -0.97 0 0.24 +vn 0 1 0 +vn 0.24 0 0.97 +vn -0.24 0 -0.97 +vn 0.97 0 -0.24 +vn -0.97 0 0.24 +vn 0 1 0 +vn 0.24 0 0.97 +vn -0.24 0 -0.97 +vn 0.97 0 -0.24 +vn -0.97 0 0.24 +vn 0 1 0 +vn 0.24 0 0.97 +vn -0.24 0 -0.97 +vn 0.97 0 -0.24 +vn -0.97 0 0.24 +vn 0 1 0 +vn 0.24 0 0.97 +vn -0.24 0 -0.97 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn -0.1 0 0.99 +vn 0.1 0 -0.99 +vn 0 1 0 +vn -0.99 0 -0.1 +vn 0.99 0 0.1 +vn 0.1 0 0.99 +vn -0.1 0 -0.99 +vn 0 1 0 +vn -0.99 0 0.1 +vn 0.99 0 -0.1 +vn 1 0 0 +vn 0 1 -0.02 +vn 0 -1 0.02 +vn 0 0.02 1 +vn 0 -0.02 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 1 0 +vn 1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 1 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 1 0 +vn 0 -1 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 1 0 +vn 1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn -0.31 0 0.95 +vn 0.31 0 -0.95 +vn 0 1 0 +vn 0 -1 0 +vn -0.95 0 -0.31 +vn 0.95 0 0.31 +vn 0.9 0 0.44 +vn -0.9 0 -0.44 +vn 0 1 0 +vn 0 -1 0 +vn -0.44 0 0.9 +vn 0.44 0 -0.9 +vn 1 0 0 +vn 0 0 -1 +vn 0 -1 0 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 1 0 +vn 0 1 0 +vn 0 1 0 +vn 0 1 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +usemtl metal +f 208/501/126 206/502/126 205/503/126 207/504/126 +f 211/505/127 209/506/127 210/507/127 212/508/127 +f 205/509/128 206/510/128 210/511/128 209/512/128 +f 208/513/129 207/514/129 211/515/129 212/516/129 +f 207/517/130 205/518/130 209/519/130 211/520/130 +f 212/521/131 210/522/131 206/523/131 208/524/131 +usemtl arithmetic_logic_machine +f 216/525/132 214/526/132 213/527/132 215/528/132 +f 219/529/133 217/530/133 218/531/133 220/532/133 +f 213/533/134 214/534/134 218/535/134 217/536/134 +f 216/537/135 215/538/135 219/539/135 220/540/135 +f 220/541/136 218/542/136 214/543/136 216/544/136 +usemtl common_steel +f 221/545/137 222/546/137 224/547/137 223/548/137 +f 229/549/138 227/550/138 228/551/138 230/552/138 +f 230/553/139 228/554/139 225/555/139 226/556/139 +f 235/557/140 234/558/140 232/559/140 233/560/140 +f 234/561/141 224/562/141 222/563/141 225/564/141 +usemtl arithmetic_logic_machine +f 224/565/142 235/566/142 237/567/142 223/568/142 +f 222/569/143 221/570/143 236/571/143 226/572/143 +usemtl common_steel +f 233/573/144 232/574/144 231/575/144 238/576/144 +f 232/577/145 651/578/145 650/579/145 231/580/145 +usemtl common_table +f 231/581/146 650/582/146 649/583/146 239/584/146 +usemtl arithmetic_logic_machine +f 244/585/147 242/586/147 241/587/147 243/588/147 +f 243/589/148 241/590/148 245/591/148 246/592/148 +f 249/593/149 248/594/149 247/595/149 241/596/149 +f 241/597/150 247/598/150 250/599/150 252/600/150 +f 253/601/151 251/602/151 248/603/151 249/604/151 +f 256/605/152 254/606/152 258/607/152 245/608/152 +f 257/609/153 255/610/153 254/611/153 256/612/153 +f 242/613/154 260/614/154 259/615/154 261/616/154 +f 261/617/155 259/618/155 262/619/155 263/620/155 +f 266/621/156 244/622/156 264/623/156 265/624/156 +f 265/625/157 264/626/157 267/627/157 268/628/157 +f 271/629/158 269/630/158 243/631/158 270/632/158 +f 274/633/159 272/634/159 273/635/159 275/636/159 +f 270/637/160 243/638/160 272/639/160 274/640/160 +f 275/641/161 273/642/161 269/643/161 271/644/161 +f 279/645/162 277/646/162 276/647/162 278/648/162 +f 278/649/163 276/650/163 246/651/163 280/652/163 +f 260/653/164 221/654/164 281/655/164 247/656/164 +f 247/657/165 281/658/165 282/659/165 258/660/165 +f 285/661/166 266/662/166 270/663/166 284/664/166 +usemtl common_bottom +f 285/665/167 284/666/167 286/667/167 287/668/167 +usemtl arithmetic_logic_machine +f 284/669/168 270/670/168 280/671/168 286/672/168 +f 251/673/169 255/674/169 257/675/169 253/676/169 +f 251/677/170 253/678/170 263/679/170 262/680/170 +f 256/681/171 252/682/171 253/683/171 257/684/171 +f 259/685/172 248/686/172 251/687/172 262/688/172 +f 255/689/173 251/690/173 250/691/173 254/692/173 +f 252/693/174 250/694/174 251/695/174 253/696/174 +f 263/697/175 253/698/175 249/699/175 261/700/175 +f 267/701/176 273/702/176 275/703/176 268/704/176 +f 279/705/177 275/706/177 273/707/177 277/708/177 +f 277/709/178 273/710/178 272/711/178 276/712/178 +f 264/713/179 269/714/179 273/715/179 267/716/179 +f 268/717/180 275/718/180 271/719/180 265/720/180 +f 278/721/181 274/722/181 275/723/181 279/724/181 +f 292/725/182 290/726/182 291/727/182 293/728/182 +usemtl common_steel +f 288/729/183 289/730/183 291/731/183 290/732/183 +usemtl common_bottom +f 287/733/184 286/734/184 292/735/184 293/736/184 +usemtl arithmetic_logic_machine +f 286/737/185 288/738/185 290/739/185 292/740/185 +usemtl common_steel +f 288/741/186 282/742/186 283/743/186 289/744/186 +f 223/745/187 291/746/187 289/747/187 283/748/187 +usemtl common_table +f 239/749/188 649/750/188 652/751/188 295/752/188 +usemtl common_steel +f 306/753/189 304/754/189 305/755/189 307/756/189 +usemtl common_bottom +f 297/757/190 298/758/190 287/759/190 293/760/190 +usemtl common_steel +f 235/761/191 299/762/191 298/763/191 297/764/191 +f 296/765/192 298/766/192 299/767/192 226/768/192 +usemtl common_bottom +f 285/769/193 287/770/193 298/771/193 296/772/193 +usemtl common_steel +f 300/773/194 302/774/194 296/775/194 226/776/194 +f 301/777/195 300/778/195 226/779/195 236/780/195 +f 303/781/196 301/782/196 236/783/196 285/784/196 +f 302/785/197 303/786/197 285/787/197 296/788/197 +f 304/789/198 306/790/198 302/791/198 300/792/198 +f 305/793/199 304/794/199 300/795/199 301/796/199 +f 307/797/200 305/798/200 301/799/200 303/800/200 +f 306/801/201 307/802/201 303/803/201 302/804/201 +f 309/805/202 308/806/202 310/807/202 311/808/202 +f 297/809/203 315/810/203 312/811/203 235/812/203 +f 235/813/204 312/814/204 313/815/204 237/816/204 +f 237/817/205 313/818/205 314/819/205 293/820/205 +f 293/821/206 314/822/206 315/823/206 297/824/206 +f 315/825/207 310/826/207 308/827/207 312/828/207 +f 312/829/208 308/830/208 309/831/208 313/832/208 +f 313/833/209 309/834/209 311/835/209 314/836/209 +f 314/837/210 311/838/210 310/839/210 315/840/210 +usemtl arithmetic_logic_machine +f 317/841/211 318/842/211 319/843/211 233/844/211 +f 230/845/212 320/846/212 321/847/212 316/848/212 +f 322/849/213 316/850/213 317/851/213 323/852/213 +f 327/853/214 325/854/214 324/855/214 326/856/214 +f 330/857/215 328/858/215 329/859/215 331/860/215 +f 324/861/216 325/862/216 329/863/216 328/864/216 +f 326/865/217 324/866/217 328/867/217 330/868/217 +f 331/869/218 329/870/218 325/871/218 327/872/218 +f 335/873/219 333/874/219 332/875/219 334/876/219 +f 338/877/220 336/878/220 337/879/220 339/880/220 +f 332/881/221 333/882/221 337/883/221 336/884/221 +f 334/885/222 332/886/222 336/887/222 338/888/222 +f 339/889/223 337/890/223 333/891/223 335/892/223 +f 343/893/224 341/894/224 340/895/224 342/896/224 +f 346/897/225 344/898/225 345/899/225 347/900/225 +f 340/901/226 341/902/226 345/903/226 344/904/226 +f 342/905/227 340/906/227 344/907/227 346/908/227 +f 347/909/228 345/910/228 341/911/228 343/912/228 +f 351/913/229 349/914/229 348/915/229 350/916/229 +f 354/917/230 352/918/230 353/919/230 355/920/230 +f 348/921/231 349/922/231 353/923/231 352/924/231 +f 350/925/232 348/926/232 352/927/232 354/928/232 +f 355/929/233 353/930/233 349/931/233 351/932/233 +f 359/933/234 357/934/234 356/935/234 358/936/234 +f 362/937/235 360/938/235 361/939/235 363/940/235 +f 356/941/236 357/942/236 361/943/236 360/944/236 +f 363/945/237 361/946/237 357/947/237 359/948/237 +f 364/949/238 365/950/238 367/951/238 366/952/238 +f 369/953/239 368/954/239 370/955/239 371/956/239 +f 369/957/240 365/958/240 364/959/240 368/960/240 +f 365/961/241 369/962/241 371/963/241 367/964/241 +usemtl common_thingies +f 375/965/242 373/966/242 372/967/242 374/968/242 +f 378/969/243 376/970/243 377/971/243 379/972/243 +f 372/973/244 373/974/244 377/975/244 376/976/244 +f 375/977/245 374/978/245 378/979/245 379/980/245 +f 379/981/246 377/982/246 373/983/246 375/984/246 +usemtl arithmetic_logic_machine +f 383/985/247 381/986/247 380/987/247 382/988/247 +f 386/989/248 384/990/248 385/991/248 387/992/248 +f 380/993/249 381/994/249 385/995/249 384/996/249 +f 382/997/250 380/998/250 384/999/250 386/1000/250 +f 387/1001/251 385/1002/251 381/1003/251 383/1004/251 +f 391/1005/252 389/1006/252 388/1007/252 390/1008/252 +f 394/1009/253 392/1010/253 393/1011/253 395/1012/253 +f 390/1013/254 388/1014/254 392/1015/254 394/1016/254 +f 395/1017/255 393/1018/255 389/1019/255 391/1020/255 +usemtl circuit_basic +f 399/1021/256 397/1022/256 396/1023/256 398/1024/256 +f 402/1025/257 400/1026/257 401/1027/257 403/1028/257 +f 396/1029/258 397/1030/258 401/1031/258 400/1032/258 +f 398/1033/259 396/1034/259 400/1035/259 402/1036/259 +f 403/1037/260 401/1038/260 397/1039/260 399/1040/260 +usemtl arithmetic_logic_machine +f 407/1041/261 405/1042/261 404/1043/261 406/1044/261 +f 410/1045/262 408/1046/262 409/1047/262 411/1048/262 +f 404/1049/263 405/1050/263 409/1051/263 408/1052/263 +f 406/1053/264 404/1054/264 408/1055/264 410/1056/264 +f 411/1057/265 409/1058/265 405/1059/265 407/1060/265 +f 415/1061/266 413/1062/266 412/1063/266 414/1064/266 +f 412/1065/267 413/1066/267 417/1067/267 416/1068/267 +f 415/1069/268 414/1070/268 418/1071/268 419/1072/268 +f 414/1073/269 412/1074/269 416/1075/269 418/1076/269 +f 419/1077/270 417/1078/270 413/1079/270 415/1080/270 +f 423/1081/271 421/1082/271 420/1083/271 422/1084/271 +f 426/1085/272 424/1086/272 425/1087/272 427/1088/272 +f 420/1089/273 421/1090/273 425/1091/273 424/1092/273 +f 422/1093/274 420/1094/274 424/1095/274 426/1096/274 +f 427/1097/275 425/1098/275 421/1099/275 423/1100/275 +f 431/1101/276 429/1102/276 428/1103/276 430/1104/276 +f 428/1105/277 429/1106/277 433/1107/277 432/1108/277 +f 430/1109/278 428/1110/278 432/1111/278 434/1112/278 +f 435/1113/279 433/1114/279 429/1115/279 431/1116/279 +f 434/1117/280 435/1118/280 431/1119/280 430/1120/280 +f 439/1121/281 437/1122/281 436/1123/281 438/1124/281 +f 442/1125/282 440/1126/282 441/1127/282 443/1128/282 +f 436/1129/283 437/1130/283 441/1131/283 440/1132/283 +f 438/1133/284 436/1134/284 440/1135/284 442/1136/284 +f 443/1137/285 441/1138/285 437/1139/285 439/1140/285 +f 447/1141/286 445/1142/286 444/1143/286 446/1144/286 +f 450/1145/287 448/1146/287 449/1147/287 451/1148/287 +f 444/1149/288 445/1150/288 449/1151/288 448/1152/288 +f 446/1153/289 444/1154/289 448/1155/289 450/1156/289 +f 451/1157/290 449/1158/290 445/1159/290 447/1160/290 +f 455/1161/291 453/1162/291 452/1163/291 454/1164/291 +f 452/1165/292 453/1166/292 457/1167/292 456/1168/292 +f 454/1169/293 452/1170/293 456/1171/293 458/1172/293 +f 459/1173/294 457/1174/294 453/1175/294 455/1176/294 +f 458/1177/295 459/1178/295 455/1179/295 454/1180/295 +f 463/1181/296 461/1182/296 460/1183/296 462/1184/296 +f 466/1185/297 464/1186/297 465/1187/297 467/1188/297 +f 460/1189/298 461/1190/298 465/1191/298 464/1192/298 +f 462/1193/299 460/1194/299 464/1195/299 466/1196/299 +f 467/1197/300 465/1198/300 461/1199/300 463/1200/300 +f 471/1201/301 469/1202/301 468/1203/301 470/1204/301 +f 474/1205/302 472/1206/302 473/1207/302 475/1208/302 +f 471/1209/303 470/1210/303 474/1211/303 475/1212/303 +f 470/1213/304 468/1214/304 472/1215/304 474/1216/304 +f 475/1217/305 473/1218/305 469/1219/305 471/1220/305 +f 479/1221/306 477/1222/306 476/1223/306 478/1224/306 +f 482/1225/307 480/1226/307 481/1227/307 483/1228/307 +f 478/1229/308 476/1230/308 480/1231/308 482/1232/308 +f 483/1233/309 481/1234/309 477/1235/309 479/1236/309 +f 476/1237/310 477/1238/310 481/1239/310 480/1240/310 +f 487/1241/311 485/1242/311 484/1243/311 486/1244/311 +f 487/1245/312 486/1246/312 489/1247/312 490/1248/312 +f 486/1249/313 484/1250/313 366/1251/313 489/1252/313 +f 490/1253/314 488/1254/314 485/1255/314 487/1256/314 +f 491/1257/315 492/1258/315 494/1259/315 493/1260/315 +f 497/1261/316 493/1262/316 494/1263/316 498/1264/316 +f 495/1265/317 491/1266/317 493/1267/317 497/1268/317 +f 492/1269/318 496/1270/318 498/1271/318 494/1272/318 +usemtl common_table +f 502/1273/319 500/1274/319 499/1275/319 501/1276/319 +f 505/1277/320 503/1278/320 504/1279/320 506/1280/320 +f 502/1281/321 501/1282/321 505/1283/321 506/1284/321 +f 501/1285/322 499/1286/322 503/1287/322 505/1288/322 +f 506/1289/323 504/1290/323 500/1291/323 502/1292/323 +f 510/1293/324 508/1294/324 507/1295/324 509/1296/324 +f 513/1297/325 511/1298/325 512/1299/325 514/1300/325 +f 510/1301/326 509/1302/326 513/1303/326 514/1304/326 +f 509/1305/327 507/1306/327 511/1307/327 513/1308/327 +f 514/1309/328 512/1310/328 508/1311/328 510/1312/328 +f 518/1313/329 516/1314/329 515/1315/329 517/1316/329 +f 521/1317/330 519/1318/330 520/1319/330 522/1320/330 +f 518/1321/331 517/1322/331 521/1323/331 522/1324/331 +f 517/1325/332 515/1326/332 519/1327/332 521/1328/332 +f 522/1329/333 520/1330/333 516/1331/333 518/1332/333 +f 526/1333/334 524/1334/334 523/1335/334 525/1336/334 +f 529/1337/335 527/1338/335 528/1339/335 530/1340/335 +f 526/1341/336 525/1342/336 529/1343/336 530/1344/336 +f 525/1345/337 523/1346/337 527/1347/337 529/1348/337 +f 530/1349/338 528/1350/338 524/1351/338 526/1352/338 +f 533/1353/339 531/1354/339 226/1355/339 532/1356/339 +f 535/1357/340 235/1358/340 534/1359/340 536/1360/340 +f 532/1361/341 226/1362/341 235/1363/341 535/1364/341 +f 536/1365/342 534/1366/342 531/1367/342 533/1368/342 +f 235/1369/343 226/1370/343 531/1371/343 534/1372/343 +f 536/1373/344 533/1374/344 532/1375/344 535/1376/344 +usemtl arithmetic_logic_machine +f 537/1377/345 538/1378/345 540/1379/345 539/1380/345 +f 544/1381/346 542/1382/346 541/1383/346 543/1384/346 +f 547/1385/347 545/1386/347 546/1387/347 548/1388/347 +f 541/1389/348 542/1390/348 546/1391/348 545/1392/348 +f 544/1393/349 543/1394/349 547/1395/349 548/1396/349 +f 548/1397/350 546/1398/350 542/1399/350 544/1400/350 +f 552/1401/351 550/1402/351 549/1403/351 551/1404/351 +f 555/1405/352 553/1406/352 554/1407/352 556/1408/352 +f 549/1409/353 550/1410/353 554/1411/353 553/1412/353 +f 552/1413/354 551/1414/354 555/1415/354 556/1416/354 +f 556/1417/355 554/1418/355 550/1419/355 552/1420/355 +f 560/1421/356 558/1422/356 557/1423/356 559/1424/356 +f 563/1425/357 561/1426/357 562/1427/357 564/1428/357 +f 557/1429/358 558/1430/358 562/1431/358 561/1432/358 +f 560/1433/359 559/1434/359 563/1435/359 564/1436/359 +f 564/1437/360 562/1438/360 558/1439/360 560/1440/360 +f 568/1441/361 566/1442/361 565/1443/361 567/1444/361 +f 571/1445/362 569/1446/362 570/1447/362 572/1448/362 +f 565/1449/363 566/1450/363 570/1451/363 569/1452/363 +f 568/1453/364 567/1454/364 571/1455/364 572/1456/364 +f 572/1457/365 570/1458/365 566/1459/365 568/1460/365 +f 576/1461/366 574/1462/366 573/1463/366 575/1464/366 +f 579/1465/367 577/1466/367 578/1467/367 580/1468/367 +f 573/1469/368 574/1470/368 578/1471/368 577/1472/368 +f 576/1473/369 575/1474/369 579/1475/369 580/1476/369 +f 580/1477/370 578/1478/370 574/1479/370 576/1480/370 +usemtl common_steel +f 581/1481/371 320/1482/371 319/1483/371 582/1484/371 +f 319/1485/372 318/1486/372 583/1487/372 582/1488/372 +f 582/1489/373 583/1490/373 584/1491/373 581/1492/373 +f 581/1493/374 584/1494/374 321/1495/374 320/1496/374 +usemtl common_thingies +f 588/1497/375 586/1498/375 585/1499/375 587/1500/375 +f 591/1501/376 589/1502/376 590/1503/376 592/1504/376 +f 585/1505/377 586/1506/377 590/1507/377 589/1508/377 +f 588/1509/378 587/1510/378 591/1511/378 592/1512/378 +f 587/1513/379 585/1514/379 589/1515/379 591/1516/379 +f 596/1517/380 594/1518/380 593/1519/380 595/1520/380 +f 593/1521/381 594/1522/381 598/1523/381 597/1524/381 +f 596/1525/382 595/1526/382 599/1527/382 600/1528/382 +f 595/1529/383 593/1530/383 597/1531/383 599/1532/383 +f 600/1533/384 598/1534/384 594/1535/384 596/1536/384 +f 604/1537/385 602/1538/385 601/1539/385 603/1540/385 +f 603/1541/386 601/1542/386 605/1543/386 607/1544/386 +f 608/1545/387 606/1546/387 602/1547/387 604/1548/387 +f 609/1549/388 610/1550/388 614/1551/388 613/1552/388 +f 612/1553/389 611/1554/389 615/1555/389 616/1556/389 +f 611/1557/390 609/1558/390 613/1559/390 615/1560/390 +f 616/1561/391 614/1562/391 610/1563/391 612/1564/391 +f 620/1565/392 618/1566/392 617/1567/392 619/1568/392 +f 619/1569/393 617/1570/393 621/1571/393 623/1572/393 +f 624/1573/394 622/1574/394 618/1575/394 620/1576/394 +usemtl common_copper_cable +f 628/1577/395 626/1578/395 625/1579/395 627/1580/395 +f 631/1581/396 629/1582/396 630/1583/396 632/1584/396 +f 632/1585/397 630/1586/397 626/1587/397 628/1588/397 +usemtl metal +f 636/1589/398 634/1590/398 633/1591/398 635/1592/398 +f 639/1593/399 637/1594/399 638/1595/399 640/1596/399 +f 633/1597/400 634/1598/400 638/1599/400 637/1600/400 +f 636/1601/401 635/1602/401 639/1603/401 640/1604/401 +f 635/1605/402 633/1606/402 637/1607/402 639/1608/402 +f 640/1609/403 638/1610/403 634/1611/403 636/1612/403 +usemtl wooden +f 644/1613/404 642/1614/404 641/1615/404 643/1616/404 +f 647/1617/405 645/1618/405 646/1619/405 648/1620/405 +f 641/1621/406 642/1622/406 646/1623/406 645/1624/406 +f 644/1625/407 643/1626/407 647/1627/407 648/1628/407 +f 643/1629/408 641/1630/408 645/1631/408 647/1632/408 +f 648/1633/409 646/1634/409 642/1635/409 644/1636/409 +usemtl common_thingies +f 612/1637/410 610/1638/410 609/1639/410 611/1640/410 +usemtl common_table +f 240/1641/411 649/1642/411 650/1643/411 227/1644/411 +usemtl common_steel +f 227/1645/412 650/1646/412 651/1647/412 228/1648/412 +usemtl common_table +f 294/1649/413 652/1650/413 649/1651/413 240/1652/413 +usemtl arithmetic_logic_machine +f 653/1653/414 659/1654/414 660/1655/414 655/1656/414 +f 657/1657/415 654/1658/415 656/1659/415 658/1660/415 +f 654/1661/416 653/1662/416 655/1663/416 656/1664/416 +f 659/1665/417 657/1666/417 658/1667/417 660/1668/417 +usemtl common_copper_cable +f 661/1669/418 662/1670/418 666/1671/418 665/1672/418 +f 664/1673/419 663/1674/419 667/1675/419 668/1676/419 +f 663/1677/420 661/1678/420 665/1679/420 667/1680/420 +f 668/1681/421 666/1682/421 662/1683/421 664/1684/421 +f 669/1685/422 670/1686/422 664/1687/422 663/1688/422 +f 672/1689/423 671/1690/423 673/1691/423 674/1692/423 +f 671/1693/424 669/1694/424 663/1695/424 673/1696/424 +f 674/1697/425 664/1698/425 670/1699/425 672/1700/425 +f 675/1701/426 676/1702/426 670/1703/426 669/1704/426 +f 678/1705/427 677/1706/427 671/1707/427 672/1708/427 +f 677/1709/428 675/1710/428 669/1711/428 671/1712/428 +f 672/1713/429 670/1714/429 676/1715/429 678/1716/429 +f 681/1717/430 680/1718/430 683/1719/430 684/1720/430 +f 684/1721/431 682/1722/431 679/1723/431 681/1724/431 +f 687/1725/432 686/1726/432 688/1727/432 689/1728/432 +f 689/1729/433 681/1730/433 685/1731/433 687/1732/433 +f 692/1733/434 691/1734/434 686/1735/434 687/1736/434 +f 687/1737/435 685/1738/435 690/1739/435 692/1740/435 +usemtl common_table +f 696/1741/436 694/1742/436 693/1743/436 695/1744/436 +f 699/1745/437 697/1746/437 698/1747/437 700/1748/437 +f 696/1749/438 695/1750/438 699/1751/438 700/1752/438 +f 700/1753/439 698/1754/439 694/1755/439 696/1756/439 +usemtl common_steel +f 705/1757/440 703/1758/440 704/1759/440 706/1760/440 +f 708/1761/441 709/1762/441 710/1763/441 702/1764/441 +f 707/1765/442 708/1766/442 702/1767/442 701/1768/442 +f 711/1769/443 707/1770/443 701/1771/443 712/1772/443 +f 709/1773/444 711/1774/444 712/1775/444 710/1776/444 +usemtl common_thingies +f 714/1777/445 713/1778/445 715/1779/445 716/1780/445 +f 719/1781/446 717/1782/446 718/1783/446 720/1784/446 +f 717/1785/447 713/1786/447 714/1787/447 718/1788/447 +f 715/1789/448 713/1790/448 717/1791/448 719/1792/448 +f 718/1793/449 714/1794/449 716/1795/449 720/1796/449 +usemtl common_steel +f 709/1797/450 705/1798/450 706/1799/450 711/1800/450 +f 711/1801/451 706/1802/451 704/1803/451 707/1804/451 +f 707/1805/452 704/1806/452 703/1807/452 708/1808/452 +f 708/1809/453 703/1810/453 705/1811/453 709/1812/453 \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/block/multiblock/data_input_machine/data_input_machine_preview.obj b/src/main/resources/assets/immersiveintelligence/models/block/multiblock/data_input_machine/data_input_machine_preview.obj new file mode 100644 index 000000000..cdae5a737 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/block/multiblock/data_input_machine/data_input_machine_preview.obj @@ -0,0 +1,3864 @@ +# Made by Pabilo8 with Blockbench +# Exported with IIToolkit Plugin on 03/06/2026 +mtllib data_input_machine.mtl + +o main +v 0 -0.1875 0.125 +v 0 -0.1875 1 +v 0 -0.4375 0.125 +v 0 -0.4375 1 +v -0.75 -0.1875 0.125 +v -0.75 -0.1875 1 +v -0.75 -0.4375 0.125 +v -0.75 -0.4375 1 +v 1 0 1 +v -1 0 1 +v 1 1 1 +v 1 1 2 +v 1 0 2 +v -1 1 1 +v -1 1 2 +v -1 0 2 +v 1 -1 1 +v 1 -1 2 +v -1 -1 1 +v -1 -1 2 +v 0 1 2 +v 0 0 2 +v 0 1 1 +v 0 0 1 +v 0 -1 1 +v 0 -1 2 +v 0.0625 2 1 +v 0.0625 2 2 +v 0.0625 1 1 +v 0.0625 1 2 +v -1 2 1 +v -1 2 2 +v 1 -0.125 1.125 +v 1 -0.125 1.875 +v 1 -0.875 1.125 +v 1 -0.875 1.875 +v 0.9375 -0.875 1.875 +v 0.9375 -0.875 1.125 +v 0.9375 -0.125 1.125 +v 0.9375 -0.125 1.875 +v -0.9375 -0.125 1.875 +v -0.9375 -0.125 1.125 +v -0.9375 -0.875 1.875 +v -0.9375 -0.875 1.125 +v -1 -0.125 1.125 +v -1 -0.125 1.875 +v -1 -0.875 1.875 +v -1 -0.875 1.125 +v -0.875 1.9375 1.875 +v -0.875 1.9375 1.125 +v -0.125 1.9375 1.875 +v -0.125 1.9375 1.125 +v -0.875 2 1.125 +v -0.875 2 1.875 +v -0.125 2 1.875 +v 0 2 2 +v -0.125 2 1.125 +v 0 2 1 +v 0.9375 2 1 +v 0.9375 1.9375 1 +v 0.9375 1.9375 2 +v 0.0625 1.9375 1 +v 0.0625 1.9375 2 +v 0.9375 1.9375 1.9375 +v 0.9375 1 1.9375 +v 0.0625 1.9375 1.9375 +v 0.0625 1 1.9375 +v 1 2 1 +v 1 2 2 +v 0.9375 2 2 +v 0.9375 1 1 +v 0.9375 1 2 +v -1 1.5 1.2188 +v -1 1.5 1.7813 +v -1 1.125 1.2188 +v -1 1.125 1.7813 +v -1.0625 1.5 1.2188 +v -1.0625 1.5 1.7813 +v -1.0625 1.125 1.2188 +v -1.0625 1.125 1.7813 +v 0.4375 0.625 0.9375 +v 0.4375 0.5625 0.9375 +v 0.4375 0.5625 1 +v -0.0625 0.625 0.9375 +v -0.0625 0.5625 0.9375 +v -0.0625 0.5625 1 +v 0.375 0.75 0.9375 +v 0.375 0.75 1 +v 0.4375 0.6875 0.9375 +v 0.4375 0.6875 1 +v 0 0.75 0.9375 +v 0 0.75 1 +v -0.0625 0.6875 0.9375 +v -0.0625 0.6875 1 +v 0 0.6875 0.9375 +v 0 0.6875 1 +v 0 0.625 0.9375 +v 0 0.625 1 +v 0.375 0.6875 0.9375 +v 0.375 0.6875 1 +v 0.375 0.625 0.9375 +v 0.375 0.625 1 +v 0.4375 0.625 0.9922 +v -0.0625 0.625 0.9922 +v 0.4375 0.6875 0.9922 +v -0.0625 0.6875 0.9922 +v 0.4375 0.375 0.9375 +v 0.4375 0.3125 0.9375 +v 0.4375 0.3125 1 +v -0.0625 0.375 0.9375 +v -0.0625 0.3125 0.9375 +v -0.0625 0.3125 1 +v 0.375 0.5 0.9375 +v 0.375 0.5 1 +v 0.4375 0.4375 0.9375 +v 0.4375 0.4375 1 +v 0 0.5 0.9375 +v 0 0.5 1 +v -0.0625 0.4375 0.9375 +v -0.0625 0.4375 1 +v 0 0.4375 0.9375 +v 0 0.4375 1 +v 0 0.375 0.9375 +v 0 0.375 1 +v 0.375 0.4375 0.9375 +v 0.375 0.4375 1 +v 0.375 0.375 0.9375 +v 0.375 0.375 1 +v 0.4375 0.375 0.9922 +v -0.0625 0.375 0.9922 +v 0.4375 0.4375 0.9922 +v -0.0625 0.4375 0.9922 +v 0.9375 0.9076 0.9688 +v 0.9375 0.9049 1.0312 +v 0.9375 0.1583 0.9361 +v 0.9375 0.1556 0.9985 +v 0.4375 0.9076 0.9688 +v 0.4375 0.9049 1.0312 +v 0.4375 0.1583 0.9361 +v 0.4375 0.1556 0.9985 +v 0.5938 1.8438 1.9375 +v 0.625 1.8125 1.8125 +v 0.5938 1.0313 1.9375 +v 0.625 1.0625 1.8125 +v 0.7188 1.8438 1.9375 +v 0.6875 1.8125 1.8125 +v 0.7188 1.0313 1.9375 +v 0.6875 1.0625 1.8125 +v 0.7813 1.8438 1.9375 +v 0.8125 1.8125 1.8125 +v 0.7813 1.0313 1.9375 +v 0.8125 1.0625 1.8125 +v 0.9063 1.8438 1.9375 +v 0.875 1.8125 1.8125 +v 0.9063 1.0313 1.9375 +v 0.875 1.0625 1.8125 +v 0.4063 1.8438 1.9375 +v 0.4375 1.8125 1.8125 +v 0.4063 1.0313 1.9375 +v 0.4375 1.0625 1.8125 +v 0.5313 1.8438 1.9375 +v 0.5 1.8125 1.8125 +v 0.5313 1.0313 1.9375 +v 0.5 1.0625 1.8125 +v 0.3755 1.7539 1.6964 +v 0.42 1.065 1.1339 +v 0.4396 1.8148 1.1339 +v 0.42 1.065 1.8839 +v 0.4396 1.8148 1.8839 +v 0.4824 1.0634 1.1339 +v 0.5021 1.8131 1.1339 +v 0.4824 1.0634 1.8839 +v 0.5021 1.8131 1.8839 +v 0.3657 1.3791 1.1964 +v 0.3755 1.7539 1.1964 +v 0.3657 1.3791 1.4151 +v 0.3755 1.7539 1.4151 +v 0.4281 1.3774 1.1964 +v 0.438 1.7523 1.1964 +v 0.4281 1.3774 1.4151 +v 0.438 1.7523 1.4151 +v 0.3657 1.3791 1.4464 +v 0.3755 1.7539 1.4464 +v 0.3657 1.3791 1.6651 +v 0.3755 1.7539 1.6651 +v 0.4281 1.3774 1.4464 +v 0.438 1.7523 1.4464 +v 0.4281 1.3774 1.6651 +v 0.438 1.7523 1.6651 +v 0.3624 1.2541 1.6964 +v 0.3657 1.3791 1.6964 +v 0.3624 1.2541 1.8214 +v 0.3657 1.3791 1.8214 +v 0.4249 1.2525 1.6964 +v 0.4281 1.3774 1.6964 +v 0.4249 1.2525 1.8214 +v 0.4281 1.3774 1.8214 +v 0.3673 1.4415 1.6964 +v 0.3706 1.5665 1.6964 +v 0.3673 1.4415 1.8214 +v 0.3706 1.5665 1.8214 +v 0.4298 1.4399 1.6964 +v 0.433 1.5649 1.6964 +v 0.4298 1.4399 1.8214 +v 0.433 1.5649 1.8214 +v 0.3722 1.629 1.6964 +v 0.3722 1.629 1.8214 +v 0.3755 1.7539 1.8214 +v 0.4347 1.6273 1.6964 +v 0.438 1.7523 1.6964 +v 0.4347 1.6273 1.8214 +v 0.438 1.7523 1.8214 +v 0.5628 1.7458 1.6964 +v 0.6073 1.0569 1.1339 +v 0.6269 1.8066 1.1339 +v 0.6073 1.0569 1.8839 +v 0.6269 1.8066 1.8839 +v 0.6698 1.0552 1.1339 +v 0.6894 1.805 1.1339 +v 0.6698 1.0552 1.8839 +v 0.6894 1.805 1.8839 +v 0.5421 1.1211 1.1964 +v 0.5519 1.496 1.1964 +v 0.5421 1.1211 1.4151 +v 0.5519 1.496 1.4151 +v 0.6046 1.1195 1.1964 +v 0.6144 1.4944 1.1964 +v 0.6046 1.1195 1.4151 +v 0.6144 1.4944 1.4151 +v 0.5421 1.1211 1.4464 +v 0.5519 1.496 1.4464 +v 0.5421 1.1211 1.6651 +v 0.5519 1.496 1.6651 +v 0.6046 1.1195 1.4464 +v 0.6144 1.4944 1.4464 +v 0.6046 1.1195 1.6651 +v 0.6144 1.4944 1.6651 +v 0.5497 1.2459 1.6964 +v 0.553 1.3709 1.6964 +v 0.5497 1.2459 1.8214 +v 0.553 1.3709 1.8214 +v 0.6122 1.2443 1.6964 +v 0.6155 1.3693 1.6964 +v 0.6122 1.2443 1.8214 +v 0.6155 1.3693 1.8214 +v 0.5546 1.4334 1.6964 +v 0.5579 1.5583 1.6964 +v 0.5546 1.4334 1.8214 +v 0.5579 1.5583 1.8214 +v 0.6171 1.4317 1.6964 +v 0.6204 1.5567 1.6964 +v 0.6171 1.4317 1.8214 +v 0.6204 1.5567 1.8214 +v 0.5595 1.6208 1.6964 +v 0.5595 1.6208 1.8214 +v 0.5628 1.7458 1.8214 +v 0.622 1.6192 1.6964 +v 0.6253 1.7441 1.6964 +v 0.622 1.6192 1.8214 +v 0.6253 1.7441 1.8214 +v 0.7501 1.7532 1.6964 +v 0.7946 1.0643 1.1339 +v 0.8142 1.814 1.1339 +v 0.7946 1.0643 1.8839 +v 0.8142 1.814 1.8839 +v 0.8571 1.0627 1.1339 +v 0.8767 1.8124 1.1339 +v 0.8571 1.0627 1.8839 +v 0.8767 1.8124 1.8839 +v 0.7403 1.3783 1.1964 +v 0.7501 1.7532 1.1964 +v 0.7403 1.3783 1.4151 +v 0.7501 1.7532 1.4151 +v 0.8028 1.3767 1.1964 +v 0.8126 1.7516 1.1964 +v 0.8028 1.3767 1.4151 +v 0.8126 1.7516 1.4151 +v 0.7321 1.191 1.4464 +v 0.7419 1.5659 1.4464 +v 0.7321 1.191 1.6651 +v 0.7419 1.5659 1.6651 +v 0.7946 1.1894 1.4464 +v 0.8044 1.5642 1.4464 +v 0.7946 1.1894 1.6651 +v 0.8044 1.5642 1.6651 +v 0.737 1.2534 1.6964 +v 0.7403 1.3783 1.6964 +v 0.737 1.2534 1.8214 +v 0.7403 1.3783 1.8214 +v 0.7995 1.2517 1.6964 +v 0.8028 1.3767 1.6964 +v 0.7995 1.2517 1.8214 +v 0.8028 1.3767 1.8214 +v 0.7419 1.4408 1.6964 +v 0.7452 1.5658 1.6964 +v 0.7419 1.4408 1.8214 +v 0.7452 1.5658 1.8214 +v 0.8044 1.4392 1.6964 +v 0.8077 1.5641 1.6964 +v 0.8044 1.4392 1.8214 +v 0.8077 1.5641 1.8214 +v 0.7468 1.6283 1.6964 +v 0.7468 1.6283 1.8214 +v 0.7501 1.7532 1.8214 +v 0.8093 1.6266 1.6964 +v 0.8126 1.7516 1.6964 +v 0.8093 1.6266 1.8214 +v 0.8126 1.7516 1.8214 +v 0.125 1.8125 1.375 +v 0.125 1.8125 1.875 +v 0.125 1.6875 1.375 +v 0.125 1.6875 1.875 +v 0.0625 1.8125 1.375 +v 0.0625 1.8125 1.875 +v 0.0625 1.6875 1.375 +v 0.0625 1.6875 1.875 +v 0.4375 1.8125 1.875 +v 0.4375 1.8125 1.9375 +v 0.4375 1.6875 1.875 +v 0.4375 1.6875 1.9375 +v 0.0625 1.8125 1.9375 +v 0.0625 1.6875 1.9375 +v 0.125 1.625 1.375 +v 0.125 1.625 1.875 +v 0.125 1.5 1.375 +v 0.125 1.5 1.875 +v 0.0625 1.625 1.375 +v 0.0625 1.625 1.875 +v 0.0625 1.5 1.375 +v 0.0625 1.5 1.875 +v 0.4375 1.625 1.875 +v 0.4375 1.625 1.9375 +v 0.4375 1.5 1.875 +v 0.4375 1.5 1.9375 +v 0.0625 1.625 1.9375 +v 0.0625 1.5 1.9375 +v 0.125 1.4375 1.375 +v 0.125 1.4375 1.875 +v 0.125 1.3125 1.375 +v 0.125 1.3125 1.875 +v 0.0625 1.4375 1.375 +v 0.0625 1.4375 1.875 +v 0.0625 1.3125 1.375 +v 0.0625 1.3125 1.875 +v 0.4375 1.4375 1.875 +v 0.4375 1.4375 1.9375 +v 0.4375 1.3125 1.875 +v 0.4375 1.3125 1.9375 +v 0.0625 1.4375 1.9375 +v 0.0625 1.3125 1.9375 +v 0.0313 1.875 0.9406 +v 0.0313 1.875 1.0031 +v 0.0313 1.75 0.9406 +v 0.0313 1.75 1.0031 +v -0.0312 1.875 0.9406 +v -0.0312 1.875 1.0031 +v -0.0312 1.75 0.9406 +v -0.0312 1.75 1.0031 +v 0.9375 -0.1875 0.75 +v 0.9375 -0.1875 0.9375 +v 0.9375 -1 0.75 +v 0.9375 -1 0.9375 +v 0.75 -0.1875 0.75 +v 0.75 -0.1875 0.9375 +v 0.75 -1 0.75 +v 0.75 -1 0.9375 +v 0.9375 -0.1875 0.125 +v 0.9375 -0.1875 0.3125 +v 0.9375 -1 0.125 +v 0.9375 -1 0.3125 +v 0.75 -0.1875 0.125 +v 0.75 -0.1875 0.3125 +v 0.75 -1 0.125 +v 0.75 -1 0.3125 +v -0.75 -0.1875 0.75 +v -0.75 -0.1875 0.9375 +v -0.75 -1 0.75 +v -0.75 -1 0.9375 +v -0.9375 -0.1875 0.75 +v -0.9375 -0.1875 0.9375 +v -0.9375 -1 0.75 +v -0.9375 -1 0.9375 +v -0.75 -0.1875 0.0625 +v -0.75 -0.1875 0.25 +v -0.75 -1 0.0625 +v -0.75 -1 0.25 +v -0.9375 -0.1875 0.0625 +v -0.9375 -0.1875 0.25 +v -0.9375 -1 0.0625 +v -0.9375 -1 0.25 +v 1 0 0 +v 1 -0.1875 0 +v 1 -0.1875 1 +v -1 0 0 +v -1 -0.1875 0 +v -1 -0.1875 1 +v -0.0312 1.25 0.9406 +v -0.0312 1.25 1.0031 +v -0.0312 1.125 0.9406 +v -0.0312 1.125 1.0031 +v 0.0313 1.25 1.0031 +v 0.0313 1.25 0.9406 +v 0.0313 1.125 1.0031 +v 0.0313 1.125 0.9406 +v -0.7187 1 0.8781 +v -0.7187 1 1.0031 +v -0.7187 0.875 0.8781 +v -0.7187 0.875 1.0031 +v -0.6562 1 1.0031 +v -0.6562 1 0.8781 +v -0.6562 0.875 1.0031 +v -0.6562 0.875 0.8781 +v -0.4687 1 0.8781 +v -0.4687 1 1.0031 +v -0.4687 0.875 0.8781 +v -0.4687 0.875 1.0031 +v -0.4062 1 1.0031 +v -0.4062 1 0.8781 +v -0.4062 0.875 1.0031 +v -0.4062 0.875 0.8781 +v -0.4531 1.2031 0.9375 +v -0.4531 1.2031 1 +v -0.4531 1.0156 0.9375 +v -0.4531 1.0156 1 +v -0.6406 1.2031 0.9375 +v -0.6406 1.2031 1 +v -0.6406 1.0156 0.9375 +v -0.6406 1.0156 1 +v -0.6123 1.043 0.769 +v -0.6123 1.168 0.8003 +v -0.4873 1.043 0.769 +v -0.4873 1.168 0.8003 +v -0.4869 1.1674 0.894 +v -0.6119 1.1674 0.894 +v -0.6119 1.0424 0.894 +v -0.4869 1.0424 0.894 +v -0.6115 1.0418 0.9565 +v -0.4865 1.1668 0.9565 +v -0.6115 1.1668 0.9565 +v -0.4865 1.0418 0.9565 +v -0.375 0.9792 0.9465 +v -0.375 0.7962 0.9059 +v -0.375 1.0604 0.5804 +v -0.375 0.8773 0.5398 +v -0.75 0.9792 0.9465 +v -0.75 0.7962 0.9059 +v -0.75 1.0604 0.5804 +v -0.75 0.8773 0.5398 +v -0.6875 0.8097 0.8449 +v -0.4375 0.8097 0.8449 +v -0.6875 0.8638 0.6008 +v -0.4375 0.8638 0.6008 +v -0.6875 0.8707 0.8584 +v -0.4375 0.8707 0.8584 +v -0.6875 0.9248 0.6144 +v -0.4375 0.9248 0.6144 +v -0.4375 1.0538 0.899 +v -0.4375 1.1079 0.6549 +v -0.6875 1.0538 0.899 +v -0.6875 1.1079 0.6549 +v -0.6875 0.8402 0.8517 +v -0.4375 0.8402 0.8517 +v -0.6875 0.8943 0.6076 +v -0.4375 0.8943 0.6076 +v -1 2 1 +v -1 2 2 +v -0.875 1.9375 1.875 +v -0.875 1.9375 1.125 +v -0.125 1.9375 1.875 +v -0.125 1.9375 1.125 +v -0.875 2 1.125 +v -0.875 2 1.875 +v -0.125 2 1.875 +v 0 2 2 +v -0.125 2 1.125 +v 0 2 1 +v -0.25 2.0062 1.25 +v -0.25 2.0062 1.75 +v -0.25 1.9437 1.25 +v -0.25 1.9437 1.75 +v -0.75 2.0062 1.25 +v -0.75 2.0062 1.75 +v -0.75 1.9437 1.25 +v -0.75 1.9437 1.75 +v -0.0625 1 1 +v -0.0625 2 1 +v 0.125 0.25 0.9375 +v 0.125 0.25 1 +v 0.125 0.0625 0.9375 +v 0.125 0.0625 1 +v -0.0625 0.25 0.9375 +v -0.0625 0.25 1 +v -0.0625 0.0625 0.9375 +v -0.0625 0.0625 1 +v 0.125 0.25 0.6875 +v 0.125 0.25 0.9375 +v 0.125 0.0625 0.6875 +v 0.125 0.0625 0.9375 +v -0.0625 0.25 0.6875 +v -0.0625 0.25 0.9375 +v -0.0625 0.0625 0.6875 +v -0.0625 0.0625 0.9375 +v 0.125 0.1875 0.6875 +v -0.0625 0.1875 0.6875 +v 0 0.0625 0.6875 +v 0 0.1875 0.6875 +v -1.0062 -0.75 1.25 +v -1.0062 -0.75 1.75 +v -0.9437 -0.75 1.25 +v -0.9437 -0.75 1.75 +v -1.0062 -0.25 1.25 +v -0.9437 -0.25 1.25 +v -1.0062 -0.25 1.75 +v -0.9437 -0.25 1.75 +v 0.9438 -0.25 1.25 +v 0.9438 -0.25 1.75 +v 0.9438 -0.75 1.25 +v 0.9438 -0.75 1.75 +v 1.0063 -0.25 1.25 +v 1.0063 -0.25 1.75 +v 1.0063 -0.75 1.25 +v 1.0063 -0.75 1.75 +v -1.0047 -0.0625 1.375 +v -0.9406 -0.0625 1.375 +v -1.0047 -0.25 1.375 +v -0.9406 -0.25 1.375 +v -1.0047 -0.0625 1.625 +v -1.0047 -0.25 1.625 +v -0.9406 -0.0625 1.625 +v -0.9406 -0.25 1.625 +v 1.0047 -0.0625 1.375 +v 0.9406 -0.0625 1.375 +v 1.0047 -0.25 1.375 +v 0.9406 -0.25 1.375 +v 1.0047 -0.0625 1.625 +v 1.0047 -0.25 1.625 +v 0.9406 -0.0625 1.625 +v 0.9406 -0.25 1.625 +vt 0.7656 0.0625 +vt 0.9844 0.0625 +vt 0.9844 0 +vt 0.7656 0 +vt 0.7813 0.0625 +vt 1 0.0625 +vt 1 0 +vt 0.7813 0 +vt 0.7656 0.0625 +vt 0.7656 0.25 +vt 0.9844 0.25 +vt 0.9844 0.0625 +vt 0.7969 0.4531 +vt 0.9844 0.4531 +vt 0.9844 0.3906 +vt 0.7969 0.3906 +vt 0.75 0.5 +vt 1 0.5 +vt 1 0.25 +vt 0.75 0.25 +vt 0.75 0.5 +vt 1 0.5 +vt 1 0.25 +vt 0.75 0.25 +vt 0.25 0.5 +vt 0.25 0.25 +vt 0 0.25 +vt 0 0.5 +vt 0.75 0.25 +vt 0.5 0.25 +vt 0.5 0.5 +vt 0.75 0.5 +vt 1 0.5 +vt 0.75 0.5 +vt 0.75 0.25 +vt 1 0.25 +vt 0.5 0 +vt 0.25 0 +vt 0.25 0.25 +vt 0.5 0.25 +vt 0.25 0.25 +vt 0.25 0 +vt 0 0 +vt 0 0.25 +vt 0 0.5 +vt 0.25 0.5 +vt 0.25 0.25 +vt 0 0.25 +vt 1 0.25 +vt 1 0 +vt 0.75 0 +vt 0.75 0.25 +vt 0.5 0.25 +vt 0.5 0.5 +vt 0.75 0.5 +vt 0.75 0.25 +vt 0 0.25 +vt 0.25 0.25 +vt 0.25 0 +vt 0 0 +vt 0.75 0.75 +vt 1 0.75 +vt 1 1 +vt 0.75 1 +vt 0.25 0 +vt 0.25 0.25 +vt 0.5 0.25 +vt 0.5 0 +vt 0.75 0.25 +vt 1 0.25 +vt 1 0 +vt 0.75 0 +vt 0.75 1 +vt 1 1 +vt 1 0.75 +vt 0.75 0.75 +vt 0.4844 1 +vt 0.75 1 +vt 0.75 0.75 +vt 0.4844 0.75 +vt 0.7813 0.2188 +vt 0.9688 0.2188 +vt 0.9688 0.0313 +vt 0.7813 0.0313 +vt 1 0 +vt 0.9688 0.0313 +vt 0.9688 0.2188 +vt 1 0.25 +vt 1 0.25 +vt 0.9688 0.2188 +vt 0.7813 0.2188 +vt 0.75 0.25 +vt 0.75 0.25 +vt 0.7813 0.2188 +vt 0.7813 0.0313 +vt 0.75 0 +vt 0.75 0 +vt 0.7813 0.0313 +vt 0.9688 0.0313 +vt 1 0 +vt 0.9688 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.0313 +vt 0.9688 0.0313 +vt 0.9688 0.2344 +vt 0.9688 0.2188 +vt 0.7813 0.2188 +vt 0.7813 0.2344 +vt 0.7656 0.2188 +vt 0.7813 0.2188 +vt 0.7813 0.0313 +vt 0.7656 0.0313 +vt 0.7813 0.0313 +vt 0.7813 0.0156 +vt 0.9688 0.0156 +vt 0.9688 0.0313 +vt 0.9688 0.0313 +vt 0.9688 0.2188 +vt 0.7813 0.2188 +vt 0.7813 0.0313 +vt 0.9688 0.2188 +vt 0.9688 0.0313 +vt 1 0 +vt 1 0.25 +vt 0.7813 0.2188 +vt 0.9688 0.2188 +vt 1 0.25 +vt 0.75 0.25 +vt 0.7813 0.0313 +vt 0.7813 0.2188 +vt 0.75 0.25 +vt 0.75 0 +vt 0.9688 0.0313 +vt 0.7813 0.0313 +vt 0.75 0 +vt 1 0 +vt 0.9844 0.0313 +vt 0.9844 0.2188 +vt 0.9688 0.2188 +vt 0.9688 0.0313 +vt 0.7813 0.2188 +vt 0.9688 0.2188 +vt 0.9688 0.2344 +vt 0.7813 0.2344 +vt 0.7813 0.0313 +vt 0.7813 0.2188 +vt 0.7656 0.2188 +vt 0.7656 0.0313 +vt 0.9688 0.0156 +vt 0.7813 0.0156 +vt 0.7813 0.0313 +vt 0.9688 0.0313 +vt 0.7188 0.2188 +vt 0.7344 0.2188 +vt 0.7344 0.0313 +vt 0.7188 0.0313 +vt 0.7188 0.2344 +vt 0.7188 0.2188 +vt 0.5313 0.2188 +vt 0.5313 0.2344 +vt 0.5156 0.2188 +vt 0.5313 0.2188 +vt 0.5313 0.0313 +vt 0.5156 0.0313 +vt 0.5313 0.0313 +vt 0.5313 0.0156 +vt 0.7188 0.0156 +vt 0.7188 0.0313 +vt 0.75 0.25 +vt 1 0.25 +vt 1 0 +vt 0.75 0 +vt 0.7813 1 +vt 1 1 +vt 1 0.9844 +vt 0.7813 0.9844 +vt 0.75 0.25 +vt 1 0.25 +vt 1 0 +vt 0.75 0 +vt 0.75 1 +vt 1 1 +vt 1 0.75 +vt 0.75 0.75 +vt 0.9844 1 +vt 1 1 +vt 1 0.75 +vt 0.9844 0.75 +vt 0.75 0.25 +vt 1 0.25 +vt 1 0 +vt 0.75 0 +vt 0.2344 1 +vt 0.2344 0.75 +vt 0 0.75 +vt 0 1 +vt 0 0 +vt 0 0.25 +vt 0.25 0.25 +vt 0.25 0 +vt 0 0.3438 +vt 0 0.375 +vt 0.2813 0.375 +vt 0.2813 0.3438 +vt 0 0.1875 +vt 0 0.2188 +vt 0.2813 0.2188 +vt 0.2813 0.1875 +vt 0.25 0.375 +vt 0.2813 0.375 +vt 0.2813 0.1875 +vt 0.25 0.1875 +vt 0 0.375 +vt 0.0313 0.375 +vt 0.0313 0.1875 +vt 0 0.1875 +vt 0.625 0.0938 +vt 0.75 0.0938 +vt 0.75 0.0781 +vt 0.625 0.0781 +vt 0.625 0.0938 +vt 0.75 0.0938 +vt 0.75 0.0781 +vt 0.625 0.0781 +vt 0.7344 0.125 +vt 0.75 0.125 +vt 0.75 0.1094 +vt 0.7344 0.1094 +vt 0.625 0.125 +vt 0.6406 0.125 +vt 0.6406 0.1094 +vt 0.625 0.1094 +vt 0.6406 0.125 +vt 0.7344 0.125 +vt 0.7344 0.1094 +vt 0.6406 0.1094 +vt 0.6406 0.125 +vt 0.7344 0.125 +vt 0.75 0.1094 +vt 0.625 0.1094 +vt 0.625 0.125 +vt 0.6406 0.125 +vt 0.6406 0.1094 +vt 0.625 0.1094 +vt 0.625 0.1094 +vt 0.6406 0.1094 +vt 0.6406 0.0938 +vt 0.625 0.0938 +vt 0.625 0.125 +vt 0.6406 0.125 +vt 0.6406 0.1094 +vt 0.625 0.1094 +vt 0.7344 0.1094 +vt 0.75 0.1094 +vt 0.75 0.0938 +vt 0.7344 0.0938 +vt 0.625 0.1094 +vt 0.6406 0.1094 +vt 0.6406 0.0781 +vt 0.625 0.0781 +vt 0.625 0.125 +vt 0.6406 0.125 +vt 0.6406 0.0938 +vt 0.625 0.0938 +vt 0.6406 0.0781 +vt 0.6406 0.0938 +vt 0.7344 0.0938 +vt 0.7344 0.0781 +vt 0.7344 0.125 +vt 0.7344 0.1094 +vt 0.6406 0.1094 +vt 0.6406 0.125 +vt 0.625 0.0938 +vt 0.625 0.1094 +vt 0.75 0.1094 +vt 0.75 0.0938 +vt 0.5 0.0938 +vt 0.625 0.0938 +vt 0.625 0.0781 +vt 0.5 0.0781 +vt 0.5 0.0938 +vt 0.625 0.0938 +vt 0.625 0.0781 +vt 0.5 0.0781 +vt 0.6094 0.125 +vt 0.625 0.125 +vt 0.625 0.1094 +vt 0.6094 0.1094 +vt 0.5 0.125 +vt 0.5156 0.125 +vt 0.5156 0.1094 +vt 0.5 0.1094 +vt 0.5156 0.125 +vt 0.6094 0.125 +vt 0.6094 0.1094 +vt 0.5156 0.1094 +vt 0.5156 0.125 +vt 0.6094 0.125 +vt 0.625 0.1094 +vt 0.5 0.1094 +vt 0.5 0.125 +vt 0.5156 0.125 +vt 0.5156 0.1094 +vt 0.5 0.1094 +vt 0.5 0.1094 +vt 0.5156 0.1094 +vt 0.5156 0.0938 +vt 0.5 0.0938 +vt 0.5 0.125 +vt 0.5156 0.125 +vt 0.5156 0.1094 +vt 0.5 0.1094 +vt 0.6094 0.1094 +vt 0.625 0.1094 +vt 0.625 0.0938 +vt 0.6094 0.0938 +vt 0.5 0.1094 +vt 0.5156 0.1094 +vt 0.5156 0.0781 +vt 0.5 0.0781 +vt 0.5 0.125 +vt 0.5156 0.125 +vt 0.5156 0.0938 +vt 0.5 0.0938 +vt 0.5156 0.0781 +vt 0.5156 0.0938 +vt 0.6094 0.0938 +vt 0.6094 0.0781 +vt 0.6094 0.125 +vt 0.6094 0.1094 +vt 0.5156 0.1094 +vt 0.5156 0.125 +vt 0.5 0.0938 +vt 0.5 0.1094 +vt 0.625 0.1094 +vt 0.625 0.0938 +vt 0 1 +vt 0.0313 1 +vt 0.0313 0.625 +vt 0 0.625 +vt 0.2813 1 +vt 0.3125 1 +vt 0.3125 0.625 +vt 0.2813 0.625 +vt 0.0313 1 +vt 0.2813 1 +vt 0.2813 0.9688 +vt 0.0313 0.9688 +vt 0.0313 0.6563 +vt 0.2813 0.6563 +vt 0.2813 0.625 +vt 0.0313 0.625 +vt 0 1 +vt 0.3125 1 +vt 0.3125 0.625 +vt 0 0.625 +vt 0.0313 1 +vt 0.2813 1 +vt 0.2813 0.625 +vt 0.0313 0.625 +vt 0.75 1 +vt 0.8125 1 +vt 0.8125 0.8125 +vt 0.75 0.8125 +vt 0.75 1 +vt 0.8125 1 +vt 0.8125 0.8125 +vt 0.75 0.8125 +vt 0.75 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 0.8125 1 +vt 0.8125 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 0.75 1 +vt 0.75 1 +vt 0.8125 1 +vt 0.8125 0.8125 +vt 0.75 0.8125 +vt 0.75 1 +vt 0.8125 1 +vt 0.8125 0.8125 +vt 0.75 0.8125 +vt 0.75 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 0.8125 1 +vt 0.8125 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 0.75 1 +vt 0.75 1 +vt 0.8125 1 +vt 0.8125 0.8125 +vt 0.75 0.8125 +vt 0.75 1 +vt 0.8125 1 +vt 0.8125 0.8125 +vt 0.75 0.8125 +vt 0.75 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 0.8125 1 +vt 0.8125 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 0.75 1 +vt 0.75 0.25 +vt 0.75 1 +vt 0 1 +vt 0 0.25 +vt 0 0.25 +vt 0 1 +vt 0.75 1 +vt 0.75 0.25 +vt 0 1 +vt 0.75 1 +vt 0.75 0.9375 +vt 0 0.9375 +vt 0.75 0.3125 +vt 0 0.3125 +vt 0 0.25 +vt 0.75 0.25 +vt 0.0625 0.25 +vt 0.0625 1 +vt 0 1 +vt 0 0.25 +vt 0.75 0.25 +vt 0.75 1 +vt 0.6875 1 +vt 0.6875 0.25 +vt 1 0.625 +vt 0.75 0.625 +vt 0.75 1 +vt 1 1 +vt 0.75 1 +vt 0.75 0.625 +vt 0.8125 0.625 +vt 0.8125 1 +vt 1 0.625 +vt 1 1 +vt 0.9375 1 +vt 0.9375 0.625 +vt 1 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 1 1 +vt 1 0.625 +vt 0.75 0.625 +vt 0.75 0.6875 +vt 1 0.6875 +vt 1 0.25 +vt 0.75 0.25 +vt 0.75 0.625 +vt 1 0.625 +vt 0.8125 0.625 +vt 0.8125 0.25 +vt 0.75 0.25 +vt 0.75 0.625 +vt 1 0.25 +vt 1 0.625 +vt 0.9375 0.625 +vt 0.9375 0.25 +vt 1 0.5625 +vt 0.75 0.5625 +vt 0.75 0.625 +vt 1 0.625 +vt 1 0.25 +vt 0.75 0.25 +vt 0.75 0.3125 +vt 1 0.3125 +vt 0.75 0.125 +vt 0.75 0.25 +vt 0.625 0.25 +vt 0.625 0.125 +vt 0.625 0.25 +vt 0.75 0.25 +vt 0.75 0.1875 +vt 0.625 0.1875 +vt 0.75 0.1875 +vt 0.625 0.1875 +vt 0.625 0.125 +vt 0.75 0.125 +vt 0.625 0.125 +vt 0.625 0.25 +vt 0.6875 0.25 +vt 0.6875 0.125 +vt 0.6875 0.125 +vt 0.6875 0.25 +vt 0.75 0.25 +vt 0.75 0.125 +vt 0.875 0.125 +vt 0.875 0.25 +vt 0.75 0.25 +vt 0.75 0.125 +vt 0.75 0.25 +vt 0.875 0.25 +vt 0.875 0.1875 +vt 0.75 0.1875 +vt 0.875 0.1875 +vt 0.75 0.1875 +vt 0.75 0.125 +vt 0.875 0.125 +vt 0.75 0.125 +vt 0.75 0.25 +vt 0.8125 0.25 +vt 0.8125 0.125 +vt 0.8125 0.125 +vt 0.8125 0.25 +vt 0.875 0.25 +vt 0.875 0.125 +vt 1 0.125 +vt 1 0.25 +vt 0.875 0.25 +vt 0.875 0.125 +vt 0.875 0.25 +vt 1 0.25 +vt 1 0.1875 +vt 0.875 0.1875 +vt 1 0.1875 +vt 0.875 0.1875 +vt 0.875 0.125 +vt 1 0.125 +vt 0.875 0.125 +vt 0.875 0.25 +vt 0.9375 0.25 +vt 0.9375 0.125 +vt 0.9375 0.125 +vt 0.9375 0.25 +vt 1 0.25 +vt 1 0.125 +vt 0.75 0.25 +vt 0.75 1 +vt 0 1 +vt 0 0.25 +vt 0 0.25 +vt 0 1 +vt 0.75 1 +vt 0.75 0.25 +vt 0 1 +vt 0.75 1 +vt 0.75 0.9375 +vt 0 0.9375 +vt 0.75 0.3125 +vt 0 0.3125 +vt 0 0.25 +vt 0.75 0.25 +vt 0.0625 0.25 +vt 0.0625 1 +vt 0 1 +vt 0 0.25 +vt 0.75 0.25 +vt 0.75 1 +vt 0.6875 1 +vt 0.6875 0.25 +vt 1 0.625 +vt 0.75 0.625 +vt 0.75 1 +vt 1 1 +vt 0.75 1 +vt 0.75 0.625 +vt 0.8125 0.625 +vt 0.8125 1 +vt 1 0.625 +vt 1 1 +vt 0.9375 1 +vt 0.9375 0.625 +vt 1 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 1 1 +vt 1 0.625 +vt 0.75 0.625 +vt 0.75 0.6875 +vt 1 0.6875 +vt 1 0.25 +vt 0.75 0.25 +vt 0.75 0.625 +vt 1 0.625 +vt 0.8125 0.625 +vt 0.8125 0.25 +vt 0.75 0.25 +vt 0.75 0.625 +vt 1 0.25 +vt 1 0.625 +vt 0.9375 0.625 +vt 0.9375 0.25 +vt 1 0.5625 +vt 0.75 0.5625 +vt 0.75 0.625 +vt 1 0.625 +vt 1 0.25 +vt 0.75 0.25 +vt 0.75 0.3125 +vt 1 0.3125 +vt 0.75 0.125 +vt 0.75 0.25 +vt 0.625 0.25 +vt 0.625 0.125 +vt 0.625 0.25 +vt 0.75 0.25 +vt 0.75 0.1875 +vt 0.625 0.1875 +vt 0.75 0.1875 +vt 0.625 0.1875 +vt 0.625 0.125 +vt 0.75 0.125 +vt 0.625 0.125 +vt 0.625 0.25 +vt 0.6875 0.25 +vt 0.6875 0.125 +vt 0.6875 0.125 +vt 0.6875 0.25 +vt 0.75 0.25 +vt 0.75 0.125 +vt 0.875 0.125 +vt 0.875 0.25 +vt 0.75 0.25 +vt 0.75 0.125 +vt 0.75 0.25 +vt 0.875 0.25 +vt 0.875 0.1875 +vt 0.75 0.1875 +vt 0.875 0.1875 +vt 0.75 0.1875 +vt 0.75 0.125 +vt 0.875 0.125 +vt 0.75 0.125 +vt 0.75 0.25 +vt 0.8125 0.25 +vt 0.8125 0.125 +vt 0.8125 0.125 +vt 0.8125 0.25 +vt 0.875 0.25 +vt 0.875 0.125 +vt 1 0.125 +vt 1 0.25 +vt 0.875 0.25 +vt 0.875 0.125 +vt 0.875 0.25 +vt 1 0.25 +vt 1 0.1875 +vt 0.875 0.1875 +vt 1 0.1875 +vt 0.875 0.1875 +vt 0.875 0.125 +vt 1 0.125 +vt 0.875 0.125 +vt 0.875 0.25 +vt 0.9375 0.25 +vt 0.9375 0.125 +vt 0.9375 0.125 +vt 0.9375 0.25 +vt 1 0.25 +vt 1 0.125 +vt 0.75 0.25 +vt 0.75 1 +vt 0 1 +vt 0 0.25 +vt 0 0.25 +vt 0 1 +vt 0.75 1 +vt 0.75 0.25 +vt 0 1 +vt 0.75 1 +vt 0.75 0.9375 +vt 0 0.9375 +vt 0.75 0.3125 +vt 0 0.3125 +vt 0 0.25 +vt 0.75 0.25 +vt 0.0625 0.25 +vt 0.0625 1 +vt 0 1 +vt 0 0.25 +vt 0.75 0.25 +vt 0.75 1 +vt 0.6875 1 +vt 0.6875 0.25 +vt 1 0.625 +vt 0.75 0.625 +vt 0.75 1 +vt 1 1 +vt 0.75 1 +vt 0.75 0.625 +vt 0.8125 0.625 +vt 0.8125 1 +vt 1 0.625 +vt 1 1 +vt 0.9375 1 +vt 0.9375 0.625 +vt 1 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 1 1 +vt 1 0.625 +vt 0.75 0.625 +vt 0.75 0.6875 +vt 1 0.6875 +vt 1 0.25 +vt 0.75 0.25 +vt 0.75 0.625 +vt 1 0.625 +vt 0.8125 0.625 +vt 0.8125 0.25 +vt 0.75 0.25 +vt 0.75 0.625 +vt 1 0.25 +vt 1 0.625 +vt 0.9375 0.625 +vt 0.9375 0.25 +vt 1 0.5625 +vt 0.75 0.5625 +vt 0.75 0.625 +vt 1 0.625 +vt 1 0.25 +vt 0.75 0.25 +vt 0.75 0.3125 +vt 1 0.3125 +vt 0.75 0.125 +vt 0.75 0.25 +vt 0.625 0.25 +vt 0.625 0.125 +vt 0.625 0.25 +vt 0.75 0.25 +vt 0.75 0.1875 +vt 0.625 0.1875 +vt 0.75 0.1875 +vt 0.625 0.1875 +vt 0.625 0.125 +vt 0.75 0.125 +vt 0.625 0.125 +vt 0.625 0.25 +vt 0.6875 0.25 +vt 0.6875 0.125 +vt 0.6875 0.125 +vt 0.6875 0.25 +vt 0.75 0.25 +vt 0.75 0.125 +vt 0.875 0.125 +vt 0.875 0.25 +vt 0.75 0.25 +vt 0.75 0.125 +vt 0.75 0.25 +vt 0.875 0.25 +vt 0.875 0.1875 +vt 0.75 0.1875 +vt 0.875 0.1875 +vt 0.75 0.1875 +vt 0.75 0.125 +vt 0.875 0.125 +vt 0.75 0.125 +vt 0.75 0.25 +vt 0.8125 0.25 +vt 0.8125 0.125 +vt 0.8125 0.125 +vt 0.8125 0.25 +vt 0.875 0.25 +vt 0.875 0.125 +vt 1 0.125 +vt 1 0.25 +vt 0.875 0.25 +vt 0.875 0.125 +vt 0.875 0.25 +vt 1 0.25 +vt 1 0.1875 +vt 0.875 0.1875 +vt 1 0.1875 +vt 0.875 0.1875 +vt 0.875 0.125 +vt 1 0.125 +vt 0.875 0.125 +vt 0.875 0.25 +vt 0.9375 0.25 +vt 0.9375 0.125 +vt 0.9375 0.125 +vt 0.9375 0.25 +vt 1 0.25 +vt 1 0.125 +vt 0.5625 0.0625 +vt 0.5625 0.5625 +vt 0.6875 0.5625 +vt 0.6875 0.0625 +vt 0.5625 0.5625 +vt 0.625 0.5625 +vt 0.625 0.0625 +vt 0.5625 0.0625 +vt 0.5625 0.0625 +vt 0.625 0.0625 +vt 0.625 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.0625 +vt 0.5625 0.125 +vt 0.6875 0.125 +vt 0.6875 0.0625 +vt 0.5625 0.875 +vt 0.5625 0.9375 +vt 0.6875 0.9375 +vt 0.6875 0.875 +vt 0.5625 0.5625 +vt 0.5625 0.9375 +vt 0.625 0.9375 +vt 0.625 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.9375 +vt 0.625 0.9375 +vt 0.625 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.9375 +vt 0.6875 0.9375 +vt 0.6875 0.5625 +vt 0.5625 0.0625 +vt 0.5625 0.5625 +vt 0.6875 0.5625 +vt 0.6875 0.0625 +vt 0.5625 0.5625 +vt 0.625 0.5625 +vt 0.625 0.0625 +vt 0.5625 0.0625 +vt 0.5625 0.0625 +vt 0.625 0.0625 +vt 0.625 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.0625 +vt 0.5625 0.125 +vt 0.6875 0.125 +vt 0.6875 0.0625 +vt 0.5625 0.875 +vt 0.5625 0.9375 +vt 0.6875 0.9375 +vt 0.6875 0.875 +vt 0.5625 0.5625 +vt 0.5625 0.9375 +vt 0.625 0.9375 +vt 0.625 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.9375 +vt 0.625 0.9375 +vt 0.625 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.9375 +vt 0.6875 0.9375 +vt 0.6875 0.5625 +vt 0.5625 0.0625 +vt 0.5625 0.5625 +vt 0.6875 0.5625 +vt 0.6875 0.0625 +vt 0.5625 0.5625 +vt 0.625 0.5625 +vt 0.625 0.0625 +vt 0.5625 0.0625 +vt 0.5625 0.0625 +vt 0.625 0.0625 +vt 0.625 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.0625 +vt 0.5625 0.125 +vt 0.6875 0.125 +vt 0.6875 0.0625 +vt 0.5625 0.875 +vt 0.5625 0.9375 +vt 0.6875 0.9375 +vt 0.6875 0.875 +vt 0.5625 0.5625 +vt 0.5625 0.9375 +vt 0.625 0.9375 +vt 0.625 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.9375 +vt 0.625 0.9375 +vt 0.625 0.5625 +vt 0.5625 0.5625 +vt 0.5625 0.9375 +vt 0.6875 0.9375 +vt 0.6875 0.5625 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.2031 +vt 0.6875 0.2031 +vt 0.6875 0.2031 +vt 0.7031 0.2031 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.7969 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.7969 0.5 +vt 0.7969 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.7969 0.5 +vt 0.8438 0.75 +vt 0.8906 0.75 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.7031 +vt 0.8906 0.7031 +vt 0.8906 0.5 +vt 0.8438 0.5 +vt 0.8438 0.7031 +vt 0.8906 0.7031 +vt 0.8906 0.5 +vt 0.8438 0.5 +vt 0.8438 0.7031 +vt 0.8906 0.7031 +vt 0.8906 0.5 +vt 0.8438 0.5 +vt 0.8438 0.7031 +vt 0.8906 0.7031 +vt 0.8906 0.5 +vt 0.8438 0.5 +vt 0.8438 0.75 +vt 0.8906 0.75 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.7969 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.7969 0.5 +vt 0.7969 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.7969 0.5 +vt 0.7969 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.7969 0.5 +vt 0.7969 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.7969 0.5 +vt 0.8438 0.75 +vt 0.8906 0.75 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.7031 +vt 0.8906 0.7031 +vt 0.8906 0.5 +vt 0.8438 0.5 +vt 0.8438 0.7031 +vt 0.8906 0.7031 +vt 0.8906 0.5 +vt 0.8438 0.5 +vt 0.7969 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.7969 0.5 +vt 0.7969 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.5 +vt 0.7969 0.5 +vt 0.8438 0.75 +vt 0.8906 0.75 +vt 0.8906 0.7031 +vt 0.8438 0.7031 +vt 0.8438 0.7031 +vt 0.8906 0.7031 +vt 0.8906 0.5 +vt 0.8438 0.5 +vt 0.8438 0.7031 +vt 0.8906 0.7031 +vt 0.8906 0.5 +vt 0.8438 0.5 +vt 0.7969 0.5 +vt 0.7969 0.75 +vt 0.8438 0.75 +vt 0.8438 0.5 +vt 0.7969 0.5 +vt 0.7969 0.75 +vt 0.8438 0.75 +vt 0.8438 0.5 +vt 0.5 0 +vt 0 0 +vt 0 0.25 +vt 0.5 0.25 +vt 0.5 0.25 +vt 0 0.25 +vt 0 0 +vt 0.5 0 +vt 0.75 0.25 +vt 0.75 0.75 +vt 0.7969 0.75 +vt 0.7969 0.25 +vt 0 0.1875 +vt 0 0.375 +vt 0.2813 0.375 +vt 0.2813 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.2031 +vt 0.6875 0.2031 +vt 0.6875 0.2031 +vt 0.7031 0.2031 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.2031 +vt 0.6875 0.2031 +vt 0.6875 0.2031 +vt 0.7031 0.2031 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.2031 +vt 0.6875 0.2031 +vt 0.6875 0.2031 +vt 0.7031 0.2031 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.1875 +vt 0.6875 0.1875 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.6875 0.2656 +vt 0.7031 0.2656 +vt 0.7031 0.2188 +vt 0.6875 0.2188 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.25 +vt 0.6875 0.25 +vt 0.6875 0.2344 +vt 0.7344 0.2344 +vt 0.7344 0.2188 +vt 0.6875 0.2188 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.6875 0.2188 +vt 0.6875 0.875 +vt 0.6875 1 +vt 0.5625 1 +vt 0.5625 0.875 +vt 0.6875 1 +vt 0.5625 1 +vt 0.5625 0.875 +vt 0.6875 0.875 +vt 1 0.125 +vt 1 0.25 +vt 0.875 0.25 +vt 0.875 0.125 +vt 0.875 0.125 +vt 0.75 0.125 +vt 0.75 0 +vt 0.875 0 +vt 0.6875 0.6875 +vt 0.5625 0.6875 +vt 0.5625 0.625 +vt 0.6875 0.625 +vt 0.6875 0.6875 +vt 0.5625 0.6875 +vt 0.5625 0.625 +vt 0.6875 0.625 +vt 0.5625 0.6875 +vt 0.6875 0.6875 +vt 0.6875 0.625 +vt 0.5625 0.625 +vt 0.5625 0.6875 +vt 0.6875 0.6875 +vt 0.6875 0.625 +vt 0.5625 0.625 +vt 0.6875 0.4688 +vt 0.6875 0.375 +vt 0.875 0.375 +vt 0.875 0.4688 +vt 0.375 0.375 +vt 0.375 0.4688 +vt 0.5625 0.4688 +vt 0.5625 0.375 +vt 0.5313 0.375 +vt 0.7188 0.375 +vt 0.7188 0.4688 +vt 0.5313 0.4688 +vt 0.5313 0.4688 +vt 0.7188 0.4688 +vt 0.7188 0.375 +vt 0.5313 0.375 +vt 0.7188 0.375 +vt 0.8438 0.375 +vt 0.8438 0.25 +vt 0.7188 0.25 +vt 0.7188 0.1875 +vt 0.6875 0.2188 +vt 0.6875 0.3438 +vt 0.7188 0.375 +vt 0.7188 0.375 +vt 0.6875 0.3438 +vt 0.5625 0.3438 +vt 0.5313 0.375 +vt 0.5313 0.375 +vt 0.5625 0.3438 +vt 0.5625 0.2188 +vt 0.5313 0.1875 +vt 0.5313 0.1875 +vt 0.5625 0.2188 +vt 0.6875 0.2188 +vt 0.7188 0.1875 +vt 0.6875 0.2188 +vt 0.6563 0.2188 +vt 0.6563 0.3438 +vt 0.6875 0.3438 +vt 0.5625 0.3125 +vt 0.5625 0.3438 +vt 0.6875 0.3438 +vt 0.6875 0.3125 +vt 0.5625 0.3438 +vt 0.5938 0.3438 +vt 0.5938 0.2188 +vt 0.5625 0.2188 +vt 0.6875 0.25 +vt 0.6875 0.2188 +vt 0.5625 0.2188 +vt 0.5625 0.25 +vt 0.7188 0.5 +vt 0.6875 0.4688 +vt 0.875 0.4688 +vt 0.8438 0.5 +vt 0.375 0.4688 +vt 0.4063 0.5 +vt 0.5313 0.5 +vt 0.5625 0.4688 +vt 0.5313 0.4688 +vt 0.7188 0.4688 +vt 0.6875 0.5 +vt 0.5625 0.5 +vt 0.5625 0.5 +vt 0.6875 0.5 +vt 0.7188 0.4688 +vt 0.5313 0.4688 +vt 0.5625 0.3438 +vt 0.6875 0.3438 +vt 0.6875 0.2188 +vt 0.5625 0.2188 +vt 0.7188 0.25 +vt 0.8438 0.25 +vt 0.8438 0.125 +vt 0.7188 0.125 +vt 0.5313 0.2188 +vt 0.7188 0.2188 +vt 0.7188 0.0313 +vt 0.5313 0.0313 +vt 0.75 0 +vt 0.7188 0.0313 +vt 0.7188 0.2188 +vt 0.75 0.25 +vt 0.75 0.25 +vt 0.7188 0.2188 +vt 0.5313 0.2188 +vt 0.5 0.25 +vt 0.5 0.25 +vt 0.5313 0.2188 +vt 0.5313 0.0313 +vt 0.5 0 +vt 0.5 0 +vt 0.5313 0.0313 +vt 0.7188 0.0313 +vt 0.75 0 +vt 0.125 0.4844 +vt 0.1094 0.4844 +vt 0.1094 0.6094 +vt 0.125 0.6094 +vt 0 0.6094 +vt 0 0.4844 +vt 0.0156 0.4844 +vt 0.0156 0.6094 +vt 0.125 0.6094 +vt 0.125 0.4844 +vt 0 0.4844 +vt 0 0.6094 +vt 0 0.5 +vt 0.125 0.5 +vt 0.125 0.4844 +vt 0 0.4844 +vt 0.125 0.5938 +vt 0.125 0.6094 +vt 0 0.6094 +vt 0 0.5938 +vt 0.7188 1 +vt 0.75 1 +vt 0.75 0.75 +vt 0.7188 0.75 +vt 0 0.75 +vt 0 1 +vt 0.2344 1 +vt 0.2344 0.75 +vt 0.8281 0.3594 +vt 0.8281 0.3438 +vt 0.7813 0.3438 +vt 0.7813 0.3594 +vt 0.8281 0.3594 +vt 0.8281 0.3438 +vt 0.7813 0.3438 +vt 0.7813 0.3594 +vt 0.7813 0.3594 +vt 0.8281 0.3594 +vt 0.8281 0.3438 +vt 0.7813 0.3438 +vt 0.7813 0.3594 +vt 0.8281 0.3594 +vt 0.8281 0.3438 +vt 0.7813 0.3438 +vt 0.7813 0.2813 +vt 0.8281 0.2813 +vt 0.8281 0.2344 +vt 0.7813 0.2344 +vt 0.7813 0.2813 +vt 0.8281 0.2813 +vt 0.8281 0.2344 +vt 0.7813 0.2344 +vt 0.875 0.875 +vt 0.875 1 +vt 0.9688 1 +vt 0.9688 0.875 +vt 0.875 0.875 +vt 0.875 1 +vt 0.9688 1 +vt 0.9688 0.875 +vt 0.875 1 +vt 0.9688 1 +vt 0.9688 0.875 +vt 0.875 0.875 +vt 0.875 1 +vt 0.9688 1 +vt 0.9688 0.875 +vt 0.875 0.875 +vt 0.875 0.875 +vt 0.9688 0.875 +vt 0.9688 0.7813 +vt 0.875 0.7813 +vt 0.5938 0.4688 +vt 0.6406 0.4688 +vt 0.6406 0.4531 +vt 0.5938 0.4531 +vt 0.6406 0.4375 +vt 0.6406 0.4063 +vt 0.6094 0.4063 +vt 0.6094 0.4375 +vt 0.5938 0.4063 +vt 0.5781 0.4063 +vt 0.5781 0.4375 +vt 0.5938 0.4375 +vt 0.75 0.4844 +vt 0.75 0.6094 +vt 0.7344 0.6094 +vt 0.7344 0.4844 +vt 0.75 0.4844 +vt 0.75 0.6094 +vt 0.7344 0.6094 +vt 0.7344 0.4844 +vt 0.625 0.4844 +vt 0.6406 0.4844 +vt 0.6406 0.6094 +vt 0.625 0.6094 +vt 0.6406 0.6094 +vt 0.625 0.6094 +vt 0.625 0.4844 +vt 0.6406 0.4844 +vt 0.875 0.6094 +vt 0.75 0.6094 +vt 0.75 0.4844 +vt 0.875 0.4844 +vt 0.75 0.4844 +vt 0.75 0.6094 +vt 0.625 0.6094 +vt 0.625 0.4844 +vt 0.75 0.4844 +vt 0.7656 0.4844 +vt 0.7656 0.6094 +vt 0.75 0.6094 +vt 0.7656 0.4844 +vt 0.7656 0.6094 +vt 0.75 0.6094 +vt 0.75 0.4844 +vt 0.7656 0.4844 +vt 0.7656 0.6094 +vt 0.75 0.6094 +vt 0.75 0.4844 +vt 0.7656 0.6094 +vt 0.75 0.6094 +vt 0.75 0.4844 +vt 0.7656 0.4844 +vt 0.125 0.6875 +vt 0.125 0.7344 +vt 0.0625 0.7344 +vt 0.0625 0.6875 +vt 0.0781 0.6875 +vt 0.0781 0.7344 +vt 0.0625 0.7344 +vt 0.0625 0.6875 +vt 0.125 0.6875 +vt 0.125 0.7344 +vt 0.1094 0.7344 +vt 0.1094 0.6875 +vt 0 0.7344 +vt 0.0625 0.7344 +vt 0.0625 0.6875 +vt 0 0.6875 +vt 0 0.7344 +vt 0.0156 0.7344 +vt 0.0156 0.6875 +vt 0 0.6875 +vt 0.0469 0.7344 +vt 0.0625 0.7344 +vt 0.0625 0.6875 +vt 0.0469 0.6875 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 0 1 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 -1 +vn 0 -1 0 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 1 0 0 +vn 1 0 0 +vn 1 0 0 +vn 1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn 0 -1 0 +vn 0 0 1 +vn 0 1 0 +vn -1 0 0 +vn -1 0 0 +vn -1 0 0 +vn -1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 -1 0 +vn 0 0 1 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 0 1 +vn 0 1 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 -1 0 +vn 0 0 -1 +vn 0.71 0.71 0 +vn -0.71 0.71 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 -1 0 +vn 0 0 -1 +vn 0.71 0.71 0 +vn -0.71 0.71 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0.04 +vn 0 -1 -0.04 +vn 0 0.04 -1 +vn 0 -0.04 1 +vn -0.97 0 -0.24 +vn 0.97 0 -0.24 +vn 0 0.97 -0.24 +vn 0 -0.97 -0.24 +vn -0.97 0 -0.24 +vn 0.97 0 -0.24 +vn 0 0.97 -0.24 +vn 0 -0.97 -0.24 +vn -0.97 0 -0.24 +vn 0.97 0 -0.24 +vn 0 0.97 -0.24 +vn 0 -0.97 -0.24 +vn -1 0.03 0 +vn 1 -0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 1 -0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 1 -0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn -1 0.03 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.03 -1 0 +vn 0.03 1 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 1 0.01 +vn 0 0.24 -0.97 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0.01 +vn 0 -1 -0.01 +vn 1 0 -0.01 +vn -1 0 0.01 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.22 0.98 +vn 0 0.22 -0.98 +vn 0 -0.98 -0.22 +vn 0 -0.98 -0.22 +vn 0 -0.98 -0.22 +vn 0 -0.98 -0.22 +vn 0 -0.98 -0.22 +vn 1 0 0 +vn 0 0.22 -0.98 +vn -1 0 0 +vn 0 -0.22 0.98 +vn 0.71 0.69 0.15 +vn -0.71 0.69 0.15 +vn 0 0.54 0.84 +vn 0 0.84 -0.54 +vn 0 0.98 0.22 +vn 0 -0.98 -0.22 +vn 0 1 0 +vn 0 1 0 +vn 0 1 0 +vn 0 1 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 -1 0 +vn 0 0 -1 +vn 0 1 0 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn 0 0 -1 +vn 0 0 1 +usemtl common_table +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 6/5/2 5/6/2 7/7/2 8/8/2 +f 7/9/3 3/10/3 4/11/3 8/12/3 +f 2/13/4 6/14/4 8/15/4 4/16/4 +usemtl common_steel +f 11/17/5 12/18/5 13/19/5 9/20/5 +f 15/21/6 14/22/6 10/23/6 16/24/6 +f 23/25/7 24/26/7 10/27/7 14/28/7 +f 16/29/8 22/30/8 21/31/8 15/32/8 +usemtl common_bottom +f 25/33/9 26/34/9 20/35/9 19/36/9 +usemtl common_steel +f 17/37/10 25/38/10 24/39/10 9/40/10 +f 26/41/11 22/42/11 16/43/11 20/44/11 +f 12/45/12 21/46/12 22/47/12 13/48/12 +usemtl common_wooden_base_light +f 23/49/13 21/50/13 12/51/13 11/52/13 +usemtl common_steel +f 24/53/14 23/54/14 11/55/14 9/56/14 +f 10/57/15 24/58/15 25/59/15 19/60/15 +usemtl common_bottom +f 26/61/16 25/62/16 17/63/16 18/64/16 +usemtl common_steel +f 22/65/17 26/66/17 18/67/17 13/68/17 +f 27/69/18 28/70/18 30/71/18 29/72/18 +f 32/73/19 31/74/19 14/75/19 15/76/19 +f 28/77/20 32/78/20 15/79/20 30/80/20 +f 39/81/21 40/82/21 37/83/21 38/84/21 +f 18/85/22 36/86/22 34/87/22 13/88/22 +f 13/89/23 34/90/23 33/91/23 9/92/23 +f 9/93/24 33/94/24 35/95/24 17/96/24 +f 17/97/25 35/98/25 36/99/25 18/100/25 +f 36/101/26 37/102/26 40/103/26 34/104/26 +f 34/105/27 40/106/27 39/107/27 33/108/27 +f 33/109/28 39/110/28 38/111/28 35/112/28 +f 35/113/29 38/114/29 37/115/29 36/116/29 +f 43/117/30 41/118/30 42/119/30 44/120/30 +f 46/121/31 47/122/31 20/123/31 16/124/31 +f 45/125/32 46/126/32 16/127/32 10/128/32 +f 48/129/33 45/130/33 10/131/33 19/132/33 +f 47/133/34 48/134/34 19/135/34 20/136/34 +f 41/137/35 43/138/35 47/139/35 46/140/35 +f 42/141/36 41/142/36 46/143/36 45/144/36 +f 44/145/37 42/146/37 45/147/37 48/148/37 +f 43/149/38 44/150/38 48/151/38 47/152/38 +usemtl common_bottom +f 55/153/39 51/154/39 49/155/39 54/156/39 +f 54/157/40 49/158/40 50/159/40 53/160/40 +f 53/161/41 50/162/41 52/163/41 57/164/41 +f 57/165/42 52/166/42 51/167/42 55/168/42 +usemtl common_wooden_base_light +f 62/169/43 60/170/43 61/171/43 63/172/43 +usemtl common_steel +f 27/173/44 59/174/44 60/175/44 62/176/44 +f 66/177/45 64/178/45 65/179/45 67/180/45 +f 68/181/46 69/182/46 12/183/46 11/184/46 +f 59/185/47 68/186/47 11/187/47 71/188/47 +usemtl common_wooden_base_light +f 70/189/48 59/190/48 71/191/48 72/192/48 +usemtl common_steel +f 28/193/49 30/194/49 12/195/49 69/196/49 +f 69/197/50 68/198/50 58/199/50 56/200/50 +usemtl data_input_machine +f 78/201/51 74/202/51 73/203/51 77/204/51 +f 79/205/52 75/206/52 76/207/52 80/208/52 +f 77/209/53 73/210/53 75/211/53 79/212/53 +f 74/213/54 78/214/54 80/215/54 76/216/54 +usemtl common_thingies +f 85/217/55 82/218/55 83/219/55 86/220/55 +f 84/221/56 81/222/56 82/223/56 85/224/56 +f 87/225/57 88/226/57 90/227/57 89/228/57 +f 92/229/58 91/230/58 93/231/58 94/232/58 +f 92/233/59 88/234/59 87/235/59 91/236/59 +f 91/237/60 87/238/60 89/239/60 93/240/60 +f 95/241/61 96/242/61 98/243/61 97/244/61 +f 93/245/62 95/246/62 97/247/62 84/248/62 +f 100/249/63 99/250/63 101/251/63 102/252/63 +f 99/253/64 89/254/64 81/255/64 101/256/64 +f 94/257/65 93/258/65 85/259/65 86/260/65 +f 89/261/66 90/262/66 83/263/66 82/264/66 +f 97/265/67 98/266/67 102/267/67 101/268/67 +f 99/269/68 100/270/68 96/271/68 95/272/68 +f 104/273/69 106/274/69 105/275/69 103/276/69 +f 111/277/70 108/278/70 109/279/70 112/280/70 +f 110/281/71 107/282/71 108/283/71 111/284/71 +f 113/285/72 114/286/72 116/287/72 115/288/72 +f 118/289/73 117/290/73 119/291/73 120/292/73 +f 118/293/74 114/294/74 113/295/74 117/296/74 +f 117/297/75 113/298/75 115/299/75 119/300/75 +f 121/301/76 122/302/76 124/303/76 123/304/76 +f 119/305/77 121/306/77 123/307/77 110/308/77 +f 126/309/78 125/310/78 127/311/78 128/312/78 +f 125/313/79 115/314/79 107/315/79 127/316/79 +f 120/317/80 119/318/80 111/319/80 112/320/80 +f 115/321/81 116/322/81 109/323/81 108/324/81 +f 123/325/82 124/326/82 128/327/82 127/328/82 +f 125/329/83 126/330/83 122/331/83 121/332/83 +f 130/333/84 132/334/84 131/335/84 129/336/84 +usemtl data_input_machine +f 133/337/85 134/338/85 136/339/85 135/340/85 +f 138/341/86 137/342/86 139/343/86 140/344/86 +f 138/345/87 134/346/87 133/347/87 137/348/87 +f 139/349/88 135/350/88 136/351/88 140/352/88 +f 137/353/89 133/354/89 135/355/89 139/356/89 +f 134/357/90 138/358/90 140/359/90 136/360/90 +usemtl circuit_basic +f 141/361/91 142/362/91 144/363/91 143/364/91 +f 146/365/92 145/366/92 147/367/92 148/368/92 +f 146/369/93 142/370/93 141/371/93 145/372/93 +f 147/373/94 143/374/94 144/375/94 148/376/94 +f 149/377/95 150/378/95 152/379/95 151/380/95 +f 154/381/96 153/382/96 155/383/96 156/384/96 +f 154/385/97 150/386/97 149/387/97 153/388/97 +f 155/389/98 151/390/98 152/391/98 156/392/98 +f 157/393/99 158/394/99 160/395/99 159/396/99 +f 162/397/100 161/398/100 163/399/100 164/400/100 +f 162/401/101 158/402/101 157/403/101 161/404/101 +f 163/405/102 159/406/102 160/407/102 164/408/102 +f 169/409/103 167/410/103 166/411/103 168/412/103 +f 172/413/104 170/414/104 171/415/104 173/416/104 +f 166/417/105 167/418/105 171/419/105 170/420/105 +f 169/421/106 168/422/106 172/423/106 173/424/106 +f 168/425/107 166/426/107 170/427/107 172/428/107 +f 173/429/108 171/430/108 167/431/108 169/432/108 +f 177/433/109 175/434/109 174/435/109 176/436/109 +f 174/437/110 175/438/110 179/439/110 178/440/110 +f 177/441/111 176/442/111 180/443/111 181/444/111 +f 176/445/112 174/446/112 178/447/112 180/448/112 +f 181/449/113 179/450/113 175/451/113 177/452/113 +f 185/453/114 183/454/114 182/455/114 184/456/114 +f 182/457/115 183/458/115 187/459/115 186/460/115 +f 185/461/116 184/462/116 188/463/116 189/464/116 +f 184/465/117 182/466/117 186/467/117 188/468/117 +f 189/469/118 187/470/118 183/471/118 185/472/118 +f 193/473/119 191/474/119 190/475/119 192/476/119 +f 190/477/120 191/478/120 195/479/120 194/480/120 +f 193/481/121 192/482/121 196/483/121 197/484/121 +f 192/485/122 190/486/122 194/487/122 196/488/122 +f 197/489/123 195/490/123 191/491/123 193/492/123 +f 201/493/124 199/494/124 198/495/124 200/496/124 +f 198/497/125 199/498/125 203/499/125 202/500/125 +f 201/501/126 200/502/126 204/503/126 205/504/126 +f 200/505/127 198/506/127 202/507/127 204/508/127 +f 205/509/128 203/510/128 199/511/128 201/512/128 +f 208/513/129 165/514/129 206/515/129 207/516/129 +f 206/517/130 165/518/130 210/519/130 209/520/130 +f 208/521/131 207/522/131 211/523/131 212/524/131 +f 207/525/132 206/526/132 209/527/132 211/528/132 +f 212/529/133 210/530/133 165/531/133 208/532/133 +f 217/533/134 215/534/134 214/535/134 216/536/134 +f 220/537/135 218/538/135 219/539/135 221/540/135 +f 214/541/136 215/542/136 219/543/136 218/544/136 +f 217/545/137 216/546/137 220/547/137 221/548/137 +f 216/549/138 214/550/138 218/551/138 220/552/138 +f 221/553/139 219/554/139 215/555/139 217/556/139 +f 225/557/140 223/558/140 222/559/140 224/560/140 +f 222/561/141 223/562/141 227/563/141 226/564/141 +f 225/565/142 224/566/142 228/567/142 229/568/142 +f 224/569/143 222/570/143 226/571/143 228/572/143 +f 229/573/144 227/574/144 223/575/144 225/576/144 +f 233/577/145 231/578/145 230/579/145 232/580/145 +f 230/581/146 231/582/146 235/583/146 234/584/146 +f 233/585/147 232/586/147 236/587/147 237/588/147 +f 232/589/148 230/590/148 234/591/148 236/592/148 +f 237/593/149 235/594/149 231/595/149 233/596/149 +f 241/597/150 239/598/150 238/599/150 240/600/150 +f 238/601/151 239/602/151 243/603/151 242/604/151 +f 241/605/152 240/606/152 244/607/152 245/608/152 +f 240/609/153 238/610/153 242/611/153 244/612/153 +f 245/613/154 243/614/154 239/615/154 241/616/154 +f 249/617/155 247/618/155 246/619/155 248/620/155 +f 246/621/156 247/622/156 251/623/156 250/624/156 +f 249/625/157 248/626/157 252/627/157 253/628/157 +f 248/629/158 246/630/158 250/631/158 252/632/158 +f 253/633/159 251/634/159 247/635/159 249/636/159 +f 256/637/160 213/638/160 254/639/160 255/640/160 +f 254/641/161 213/642/161 258/643/161 257/644/161 +f 256/645/162 255/646/162 259/647/162 260/648/162 +f 255/649/163 254/650/163 257/651/163 259/652/163 +f 260/653/164 258/654/164 213/655/164 256/656/164 +f 265/657/165 263/658/165 262/659/165 264/660/165 +f 268/661/166 266/662/166 267/663/166 269/664/166 +f 262/665/167 263/666/167 267/667/167 266/668/167 +f 265/669/168 264/670/168 268/671/168 269/672/168 +f 264/673/169 262/674/169 266/675/169 268/676/169 +f 269/677/170 267/678/170 263/679/170 265/680/170 +f 273/681/171 271/682/171 270/683/171 272/684/171 +f 270/685/172 271/686/172 275/687/172 274/688/172 +f 273/689/173 272/690/173 276/691/173 277/692/173 +f 272/693/174 270/694/174 274/695/174 276/696/174 +f 277/697/175 275/698/175 271/699/175 273/700/175 +f 281/701/176 279/702/176 278/703/176 280/704/176 +f 278/705/177 279/706/177 283/707/177 282/708/177 +f 281/709/178 280/710/178 284/711/178 285/712/178 +f 280/713/179 278/714/179 282/715/179 284/716/179 +f 285/717/180 283/718/180 279/719/180 281/720/180 +f 289/721/181 287/722/181 286/723/181 288/724/181 +f 286/725/182 287/726/182 291/727/182 290/728/182 +f 289/729/183 288/730/183 292/731/183 293/732/183 +f 288/733/184 286/734/184 290/735/184 292/736/184 +f 293/737/185 291/738/185 287/739/185 289/740/185 +f 297/741/186 295/742/186 294/743/186 296/744/186 +f 294/745/187 295/746/187 299/747/187 298/748/187 +f 297/749/188 296/750/188 300/751/188 301/752/188 +f 296/753/189 294/754/189 298/755/189 300/756/189 +f 301/757/190 299/758/190 295/759/190 297/760/190 +f 304/761/191 261/762/191 302/763/191 303/764/191 +f 302/765/192 261/766/192 306/767/192 305/768/192 +f 304/769/193 303/770/193 307/771/193 308/772/193 +f 303/773/194 302/774/194 305/775/194 307/776/194 +f 308/777/195 306/778/195 261/779/195 304/780/195 +usemtl common_copper_cable +f 309/781/196 310/782/196 312/783/196 311/784/196 +f 314/785/197 310/786/197 309/787/197 313/788/197 +f 315/789/198 311/790/198 312/791/198 316/792/198 +f 313/793/199 309/794/199 311/795/199 315/796/199 +f 317/797/200 318/798/200 320/799/200 319/800/200 +f 321/801/201 318/802/201 317/803/201 314/804/201 +f 316/805/202 319/806/202 320/807/202 322/808/202 +f 314/809/203 317/810/203 319/811/203 316/812/203 +f 323/813/204 324/814/204 326/815/204 325/816/204 +f 328/817/205 324/818/205 323/819/205 327/820/205 +f 329/821/206 325/822/206 326/823/206 330/824/206 +f 327/825/207 323/826/207 325/827/207 329/828/207 +f 331/829/208 332/830/208 334/831/208 333/832/208 +f 335/833/209 332/834/209 331/835/209 328/836/209 +f 330/837/210 333/838/210 334/839/210 336/840/210 +f 328/841/211 331/842/211 333/843/211 330/844/211 +f 337/845/212 338/846/212 340/847/212 339/848/212 +f 342/849/213 338/850/213 337/851/213 341/852/213 +f 343/853/214 339/854/214 340/855/214 344/856/214 +f 341/857/215 337/858/215 339/859/215 343/860/215 +f 345/861/216 346/862/216 348/863/216 347/864/216 +f 349/865/217 346/866/217 345/867/217 342/868/217 +f 344/869/218 347/870/218 348/871/218 350/872/218 +f 342/873/219 345/874/219 347/875/219 344/876/219 +usemtl common_steel +f 351/877/220 352/878/220 354/879/220 353/880/220 +f 356/881/221 355/882/221 357/883/221 358/884/221 +f 356/885/222 352/886/222 351/887/222 355/888/222 +f 357/889/223 353/890/223 354/891/223 358/892/223 +f 355/893/224 351/894/224 353/895/224 357/896/224 +usemtl common_table +f 359/897/225 360/898/225 362/899/225 361/900/225 +f 364/901/226 363/902/226 365/903/226 366/904/226 +f 365/905/227 361/906/227 362/907/227 366/908/227 +f 363/909/228 359/910/228 361/911/228 365/912/228 +f 360/913/229 364/914/229 366/915/229 362/916/229 +f 367/917/230 368/918/230 370/919/230 369/920/230 +f 372/921/231 371/922/231 373/923/231 374/924/231 +f 373/925/232 369/926/232 370/927/232 374/928/232 +f 371/929/233 367/930/233 369/931/233 373/932/233 +f 368/933/234 372/934/234 374/935/234 370/936/234 +f 375/937/235 376/938/235 378/939/235 377/940/235 +f 380/941/236 379/942/236 381/943/236 382/944/236 +f 381/945/237 377/946/237 378/947/237 382/948/237 +f 379/949/238 375/950/238 377/951/238 381/952/238 +f 376/953/239 380/954/239 382/955/239 378/956/239 +f 383/957/240 384/958/240 386/959/240 385/960/240 +f 388/961/241 387/962/241 389/963/241 390/964/241 +f 389/965/242 385/966/242 386/967/242 390/968/242 +f 387/969/243 383/970/243 385/971/243 389/972/243 +f 384/973/244 388/974/244 390/975/244 386/976/244 +f 391/977/245 9/978/245 393/979/245 392/980/245 +f 10/981/246 394/982/246 395/983/246 396/984/246 +f 10/985/247 9/986/247 391/987/247 394/988/247 +f 395/989/248 392/990/248 393/991/248 396/992/248 +f 394/993/249 391/994/249 392/995/249 395/996/249 +usemtl data_input_machine +f 80/997/250 78/998/250 77/999/250 79/1000/250 +usemtl common_steel +f 402/1001/251 401/1002/251 403/1003/251 404/1004/251 +f 398/1005/252 397/1006/252 399/1007/252 400/1008/252 +f 398/1009/253 401/1010/253 402/1011/253 397/1012/253 +f 399/1013/254 404/1014/254 403/1015/254 400/1016/254 +f 397/1017/255 402/1018/255 404/1019/255 399/1020/255 +f 410/1021/256 409/1022/256 411/1023/256 412/1024/256 +f 406/1025/257 405/1026/257 407/1027/257 408/1028/257 +f 406/1029/258 409/1030/258 410/1031/258 405/1032/258 +f 407/1033/259 412/1034/259 411/1035/259 408/1036/259 +f 405/1037/260 410/1038/260 412/1039/260 407/1040/260 +f 418/1041/261 417/1042/261 419/1043/261 420/1044/261 +f 414/1045/262 413/1046/262 415/1047/262 416/1048/262 +f 414/1049/263 417/1050/263 418/1051/263 413/1052/263 +f 415/1053/264 420/1054/264 419/1055/264 416/1056/264 +f 413/1057/265 418/1058/265 420/1059/265 415/1060/265 +usemtl common_thingies +f 421/1061/266 422/1062/266 424/1063/266 423/1064/266 +f 426/1065/267 425/1066/267 427/1067/267 428/1068/267 +f 426/1069/268 422/1070/268 421/1071/268 425/1072/268 +f 427/1073/269 423/1074/269 424/1075/269 428/1076/269 +f 425/1077/270 421/1078/270 423/1079/270 427/1080/270 +usemtl common_copper_cable +f 433/1081/271 432/1082/271 430/1083/271 434/1084/271 +f 431/1085/272 429/1086/272 430/1087/272 432/1088/272 +f 436/1089/273 431/1090/273 432/1091/273 433/1092/273 +f 434/1093/274 430/1094/274 429/1095/274 435/1096/274 +f 433/1097/275 434/1098/275 439/1099/275 438/1100/275 +f 435/1101/276 436/1102/276 440/1103/276 437/1104/276 +f 436/1105/277 433/1106/277 438/1107/277 440/1108/277 +f 434/1109/278 435/1110/278 437/1111/278 439/1112/278 +usemtl data_input_machine +f 441/1113/279 442/1114/279 444/1115/279 443/1116/279 +f 446/1117/280 445/1118/280 447/1119/280 448/1120/280 +f 446/1121/281 442/1122/281 441/1123/281 445/1124/281 +f 447/1125/282 443/1126/282 444/1127/282 448/1128/282 +f 454/1129/283 453/1130/283 455/1131/283 456/1132/283 +f 448/1133/284 451/1134/284 449/1135/284 446/1136/284 +f 446/1137/285 449/1138/285 450/1139/285 442/1140/285 +f 442/1141/286 450/1142/286 452/1143/286 444/1144/286 +f 444/1145/287 452/1146/287 451/1147/287 448/1148/287 +f 451/1149/288 455/1150/288 453/1151/288 449/1152/288 +f 449/1153/289 453/1154/289 454/1155/289 450/1156/289 +f 450/1157/290 454/1158/290 456/1159/290 452/1160/290 +f 452/1161/291 456/1162/291 455/1163/291 451/1164/291 +f 457/1165/292 441/1166/292 443/1167/292 458/1168/292 +f 445/1169/293 459/1170/293 460/1171/293 447/1172/293 +f 445/1173/294 441/1174/294 457/1175/294 459/1176/294 +f 460/1177/295 458/1178/295 443/1179/295 447/1180/295 +f 459/1181/296 457/1182/296 458/1183/296 460/1184/296 +f 462/1185/297 461/1186/297 463/1187/297 464/1188/297 +usemtl common_bottom +f 468/1189/298 467/1190/298 469/1191/298 470/1192/298 +f 474/1193/299 473/1194/299 472/1195/299 466/1196/299 +f 466/1197/300 472/1198/300 471/1199/300 465/1200/300 +f 465/1201/301 471/1202/301 475/1203/301 476/1204/301 +f 476/1205/302 475/1206/302 473/1207/302 474/1208/302 +usemtl common_thingies +f 479/1209/303 477/1210/303 478/1211/303 480/1212/303 +f 482/1213/304 481/1214/304 483/1215/304 484/1216/304 +f 478/1217/305 477/1218/305 481/1219/305 482/1220/305 +f 481/1221/306 477/1222/306 479/1223/306 483/1224/306 +f 480/1225/307 478/1226/307 482/1227/307 484/1228/307 +usemtl common_steel +f 486/1229/308 27/1230/308 29/1231/308 485/1232/308 +f 14/1233/309 31/1234/309 486/1235/309 485/1236/309 +usemtl common_thingies +f 487/1237/310 488/1238/310 490/1239/310 489/1240/310 +f 492/1241/311 491/1242/311 493/1243/311 494/1244/311 +f 492/1245/312 488/1246/312 487/1247/312 491/1248/312 +f 493/1249/313 489/1250/313 490/1251/313 494/1252/313 +f 491/1253/314 487/1254/314 489/1255/314 493/1256/314 +f 488/1257/315 492/1258/315 494/1259/315 490/1260/315 +usemtl data_input_machine +f 495/1261/316 496/1262/316 498/1263/316 497/1264/316 +f 500/1265/317 499/1266/317 501/1267/317 502/1268/317 +f 500/1269/318 496/1270/318 495/1271/318 499/1272/318 +f 501/1273/319 497/1274/319 498/1275/319 502/1276/319 +f 496/1277/320 500/1278/320 502/1279/320 498/1280/320 +usemtl common_thingies +f 499/1281/321 495/1282/321 503/1283/321 504/1284/321 +f 503/1285/322 497/1286/322 505/1287/322 506/1288/322 +f 505/1289/323 501/1290/323 504/1291/323 506/1292/323 +f 508/1293/324 507/1294/324 509/1295/324 510/1296/324 +f 507/1297/325 511/1298/325 512/1299/325 509/1300/325 +f 512/1301/326 511/1302/326 513/1303/326 514/1304/326 +f 514/1305/327 513/1306/327 508/1307/327 510/1308/327 +f 513/1309/328 511/1310/328 507/1311/328 508/1312/328 +f 521/1313/329 519/1314/329 520/1315/329 522/1316/329 +f 519/1317/330 515/1318/330 516/1319/330 520/1320/330 +f 518/1321/331 517/1322/331 521/1323/331 522/1324/331 +f 517/1325/332 515/1326/332 519/1327/332 521/1328/332 +f 520/1329/333 516/1330/333 518/1331/333 522/1332/333 +f 528/1333/334 527/1334/334 523/1335/334 525/1336/334 +f 525/1337/335 523/1338/335 524/1339/335 526/1340/335 +f 530/1341/336 529/1342/336 527/1343/336 528/1344/336 +f 531/1345/337 535/1346/337 536/1347/337 533/1348/337 +f 532/1349/338 531/1350/338 533/1351/338 534/1352/338 +f 535/1353/339 537/1354/339 538/1355/339 536/1356/339 +o mess_basic +v -0.1562 0.1875 1 +v -0.1562 0.1875 0.9375 +v -0.1562 0 1 +v -0.1562 0 0.9375 +v -0.3437 0.1875 1 +v -0.3437 0.1875 0.9375 +v -0.3437 0 1 +v -0.3437 0 0.9375 +v -0.4062 0.1875 1 +v -0.4062 0.1875 0.9375 +v -0.4062 0 1 +v -0.4062 0 0.9375 +v -0.5937 0.1875 1 +v -0.5937 0.1875 0.9375 +v -0.5937 0 1 +v -0.5937 0 0.9375 +v -0.9687 0.2476 0.5459 +v -0.9687 0.1057 0.2675 +v -0.9687 0.1919 0.5743 +v -0.0937 0.2476 0.5459 +v -0.0937 0.1057 0.2675 +v -0.0937 0.1919 0.5743 +v -0.0937 0.0501 0.2959 +v -0.2812 0.1057 0.2675 +v -0.2812 0.0501 0.2959 +v -0.0937 0.1057 0.2675 +v -0.0937 0.0501 0.2959 +v -0.9687 0.1057 0.2675 +v -0.9687 0.0774 0.2118 +v -0.9687 0.0217 0.2402 +v -0.2812 0.1057 0.2675 +v -0.2812 0.0774 0.2118 +v -0.2812 0.0501 0.2959 +v -0.2812 0.0217 0.2402 +v -0.2812 0.0774 0.2118 +v -0.2812 0.049 0.1561 +v -0.2812 0.0217 0.2402 +v -0.2812 -0.0067 0.1845 +v -0.0937 0.0774 0.2118 +v -0.0937 0.049 0.1561 +v -0.0937 0.0217 0.2402 +v -0.0937 -0.0067 0.1845 +v -0.2187 0.1057 0.2675 +v -0.2187 0.0774 0.2118 +v -0.2187 0.0501 0.2959 +v -0.2187 0.0217 0.2402 +v -0.1562 0.1057 0.2675 +v -0.1562 0.0774 0.2118 +v -0.1562 0.0501 0.2959 +v -0.1562 0.0217 0.2402 +v -0.0937 0.1875 0.9375 +v -0.0937 0.1875 0.5625 +v -0.0937 0 0.9375 +v -0.0937 0 0.1875 +v -0.9687 0.1875 0.9375 +v -0.9687 0.1875 0.5625 +v -0.9687 0 0.9375 +v -0.9687 0 0.1875 +v -0.1562 0.25 0.625 +v -0.1562 0.25 0.8125 +v -0.1562 0.1875 0.625 +v -0.1562 0.1875 0.8125 +v -0.9062 0.25 0.625 +v -0.9062 0.25 0.8125 +v -0.9062 0.1875 0.625 +v -0.9062 0.1875 0.8125 +vt 0.0156 0.9531 +vt 0.0156 1 +vt 0 1 +vt 0 0.9531 +vt 0.0156 0.9531 +vt 0.0156 1 +vt 0 1 +vt 0 0.9531 +vt 0.0469 0.9844 +vt 0.0469 1 +vt 0 1 +vt 0 0.9844 +vt 0.5156 0.7188 +vt 0.5156 0.7344 +vt 0.4688 0.7344 +vt 0.4688 0.7188 +vt 0.5156 0.7188 +vt 0.5156 0.7656 +vt 0.4688 0.7656 +vt 0.4688 0.7188 +vt 0.0156 0.9531 +vt 0.0156 1 +vt 0 1 +vt 0 0.9531 +vt 0.0156 0.9531 +vt 0.0156 1 +vt 0 1 +vt 0 0.9531 +vt 0.0469 0.9844 +vt 0.0469 1 +vt 0 1 +vt 0 0.9844 +vt 0.5156 0.7188 +vt 0.5156 0.7344 +vt 0.4688 0.7344 +vt 0.4688 0.7188 +vt 0.5156 0.7188 +vt 0.5156 0.7656 +vt 0.4688 0.7656 +vt 0.4688 0.7188 +vt 1 0.6406 +vt 0.7813 0.6406 +vt 0.7813 0.7188 +vt 1 0.7188 +vt 1 0.7188 +vt 0.7813 0.7188 +vt 0.7813 0.7031 +vt 1 0.7031 +vt 0.9844 0.6406 +vt 0.9844 0.7188 +vt 1 0.7188 +vt 1 0.6406 +vt 0.9531 0.6563 +vt 1 0.6563 +vt 1 0.6406 +vt 0.9531 0.6406 +vt 0.9375 0.6406 +vt 0.9531 0.6406 +vt 0.9531 0.625 +vt 0.9375 0.625 +vt 0.9531 0.6406 +vt 0.7813 0.6406 +vt 0.7813 0.625 +vt 0.9531 0.625 +vt 0.7813 0.6406 +vt 0.9531 0.6406 +vt 0.9531 0.625 +vt 0.7813 0.625 +vt 0.9531 0.625 +vt 0.9688 0.625 +vt 0.9688 0.6094 +vt 0.9531 0.6094 +vt 0.9531 0.625 +vt 1 0.625 +vt 1 0.6094 +vt 0.9531 0.6094 +vt 0.9531 0.625 +vt 1 0.625 +vt 1 0.6094 +vt 0.9531 0.6094 +vt 0.9531 0.625 +vt 1 0.625 +vt 1 0.6094 +vt 0.9531 0.6094 +vt 0.9844 0.6094 +vt 0.9844 0.625 +vt 1 0.625 +vt 1 0.6094 +vt 0.9688 0.6406 +vt 0.9844 0.6406 +vt 0.9844 0.625 +vt 0.9688 0.625 +vt 0.9688 0.6406 +vt 0.9844 0.6406 +vt 0.9844 0.625 +vt 0.9688 0.625 +vt 0.9688 0.6406 +vt 0.9844 0.6406 +vt 0.9844 0.625 +vt 0.9688 0.625 +vt 0.7969 0.7188 +vt 0.7813 0.7188 +vt 0.7813 0.625 +vt 0.7969 0.625 +vt 0.4375 0.625 +vt 0.5313 0.8125 +vt 0.5313 1 +vt 0.4375 1 +vt 0.4375 1 +vt 0.5313 1 +vt 0.5313 0.8125 +vt 0.4375 0.625 +vt 0.4375 1 +vt 0.4375 0.8125 +vt 0 0.8125 +vt 0 1 +vt 0 0.5 +vt 0 0.5938 +vt 0.4375 0.5938 +vt 0.4375 0.5 +vt 0 0.5938 +vt 0 0.8125 +vt 0.4375 0.8125 +vt 0.4375 0.5938 +vt 0.6094 0.2188 +vt 0.6094 0.2656 +vt 0.625 0.2656 +vt 0.625 0.2188 +vt 0.4375 0.2188 +vt 0.4375 0.2656 +vt 0.4531 0.2656 +vt 0.4531 0.2188 +vt 0.4375 0.2656 +vt 0.625 0.2656 +vt 0.625 0.2188 +vt 0.4375 0.2188 +vt 0.4375 0.2344 +vt 0.625 0.2344 +vt 0.625 0.2188 +vt 0.4375 0.2188 +vt 0.625 0.2656 +vt 0.4375 0.2656 +vt 0.4375 0.25 +vt 0.625 0.25 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0.89 -0.45 +vn 0 0.45 0.89 +vn 1 0 0 +vn 0 -0.45 -0.89 +vn 1 0 0 +vn 0 0.89 -0.45 +vn 0 -0.45 -0.89 +vn -1 0 0 +vn 0 0.89 -0.45 +vn 0 0.45 0.89 +vn 0 -0.45 -0.89 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0.89 -0.45 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0.89 -0.45 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 1 +usemtl common_thingies +f 542/1357/340 540/1358/340 539/1359/340 541/1360/340 +f 545/1361/341 543/1362/341 544/1363/341 546/1364/341 +f 539/1365/342 540/1366/342 544/1367/342 543/1368/342 +usemtl common_copper_cable +f 542/1369/343 541/1370/343 545/1371/343 546/1372/343 +f 541/1373/344 539/1374/344 543/1375/344 545/1376/344 +usemtl common_thingies +f 550/1377/345 548/1378/345 547/1379/345 549/1380/345 +f 553/1381/346 551/1382/346 552/1383/346 554/1384/346 +f 547/1385/347 548/1386/347 552/1387/347 551/1388/347 +usemtl common_copper_cable +f 550/1389/348 549/1390/348 553/1391/348 554/1392/348 +f 549/1393/349 547/1394/349 551/1395/349 553/1396/349 +usemtl common_thingies +f 559/1397/350 556/1398/350 555/1399/350 558/1400/350 +f 558/1401/351 555/1402/351 557/1403/351 560/1404/351 +f 559/1405/352 558/1406/352 560/1407/352 561/1408/352 +f 562/1409/353 564/1410/353 565/1411/353 563/1412/353 +f 570/1413/354 569/1414/354 571/1415/354 572/1416/354 +f 570/1417/355 567/1418/355 566/1419/355 569/1420/355 +f 567/1421/356 570/1422/356 572/1423/356 568/1424/356 +f 573/1425/357 574/1426/357 576/1427/357 575/1428/357 +f 578/1429/358 574/1430/358 573/1431/358 577/1432/358 +f 577/1433/359 573/1434/359 575/1435/359 579/1436/359 +f 574/1437/360 578/1438/360 580/1439/360 576/1440/360 +f 580/1441/361 578/1442/361 577/1443/361 579/1444/361 +f 581/1445/362 582/1446/362 584/1447/362 583/1448/362 +f 586/1449/363 585/1450/363 587/1451/363 588/1452/363 +f 586/1453/364 582/1454/364 581/1455/364 585/1456/364 +f 557/1457/365 555/1458/365 567/1459/365 568/1460/365 +usemtl typewriter_red +f 592/1461/366 590/1462/366 589/1463/366 591/1464/366 +f 595/1465/367 593/1466/367 594/1467/367 596/1468/367 +f 589/1469/368 590/1470/368 594/1471/368 593/1472/368 +f 591/1473/369 589/1474/369 593/1475/369 595/1476/369 +f 596/1477/370 594/1478/370 590/1479/370 592/1480/370 +usemtl common_thingies +f 597/1481/371 598/1482/371 600/1483/371 599/1484/371 +f 602/1485/372 601/1486/372 603/1487/372 604/1488/372 +f 602/1489/373 598/1490/373 597/1491/373 601/1492/373 +f 601/1493/374 597/1494/374 599/1495/374 603/1496/374 +f 598/1497/375 602/1498/375 604/1499/375 600/1500/375 +o mb_book_holder +v -0.4687 0.3125 0.75 +v -0.4687 0.3125 1.1875 +v -0.4687 0.25 0.75 +v -0.4687 0.25 1.1875 +v -0.5937 0.3125 0.75 +v -0.5937 0.3125 1.1875 +v -0.5937 0.25 0.75 +v -0.5937 0.25 1.1875 +v -0.4687 0.4375 0.6875 +v -0.4687 0.4375 0.75 +v -0.4687 0.25 0.6875 +v -0.4687 0.25 0.75 +v -0.5937 0.4375 0.6875 +v -0.5937 0.4375 0.75 +v -0.5937 0.25 0.6875 +v -0.5937 0.25 0.75 +vt 0.9063 0.7813 +vt 0.9063 1 +vt 0.9375 1 +vt 0.9375 0.7813 +vt 0.875 0.7813 +vt 0.875 1 +vt 0.9063 1 +vt 0.9063 0.7813 +vt 0.875 1 +vt 0.9375 1 +vt 0.9375 0.7813 +vt 0.875 0.7813 +vt 0.875 1 +vt 0.9375 1 +vt 0.9375 0.7813 +vt 0.875 0.7813 +vt 0.875 1 +vt 0.9375 1 +vt 0.9375 0.9688 +vt 0.875 0.9688 +vt 0.9063 1 +vt 0.9375 1 +vt 0.9375 0.9063 +vt 0.9063 0.9063 +vt 0.875 1 +vt 0.9063 1 +vt 0.9063 0.9063 +vt 0.875 0.9063 +vt 0.875 1 +vt 0.9375 1 +vt 0.9375 0.9688 +vt 0.875 0.9688 +vt 0.875 1 +vt 0.9375 1 +vt 0.9375 0.9063 +vt 0.875 0.9063 +vt 0.9375 1 +vt 0.875 1 +vt 0.875 0.9063 +vt 0.9375 0.9063 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 1 +usemtl typewriter_red +f 605/1501/376 606/1502/376 608/1503/376 607/1504/376 +f 610/1505/377 609/1506/377 611/1507/377 612/1508/377 +f 610/1509/378 606/1510/378 605/1511/378 609/1512/378 +f 611/1513/379 607/1514/379 608/1515/379 612/1516/379 +f 606/1517/380 610/1518/380 612/1519/380 608/1520/380 +f 613/1521/381 614/1522/381 616/1523/381 615/1524/381 +f 618/1525/382 617/1526/382 619/1527/382 620/1528/382 +f 618/1529/383 614/1530/383 613/1531/383 617/1532/383 +f 617/1533/384 613/1534/384 615/1535/384 619/1536/384 +f 614/1537/385 618/1538/385 620/1539/385 616/1540/385 +o mb_book_left +v -0.5312 0.375 0.75 +v -0.5312 0.375 1.25 +v -0.5312 0.3125 0.75 +v -0.5312 0.3125 1.25 +v -0.9062 0.375 0.75 +v -0.9062 0.375 1.25 +v -0.9062 0.3125 0.75 +v -0.9062 0.3125 1.25 +vt 0.9688 0.0313 +vt 0.7188 0.0313 +vt 0.7188 0.0625 +vt 0.9688 0.0625 +vt 0.625 0.75 +vt 0.625 1 +vt 0.6563 1 +vt 0.6563 0.75 +vt 0.625 1 +vt 0.8125 1 +vt 0.8125 0.75 +vt 0.625 0.75 +vt 0.0313 0.1875 +vt 0.0313 0 +vt 0.2813 0 +vt 0.2813 0.1875 +vt 0.625 0.7813 +vt 0.8125 0.7813 +vt 0.8125 0.75 +vt 0.625 0.75 +vt 0.625 1 +vt 0.8125 1 +vt 0.8125 0.9688 +vt 0.625 0.9688 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +usemtl data_input_machine +f 621/1541/386 622/1542/386 624/1543/386 623/1544/386 +f 626/1545/387 625/1546/387 627/1547/387 628/1548/387 +f 626/1549/388 622/1550/388 621/1551/388 625/1552/388 +f 627/1553/389 623/1554/389 624/1555/389 628/1556/389 +f 625/1557/390 621/1558/390 623/1559/390 627/1560/390 +f 622/1561/391 626/1562/391 628/1563/391 624/1564/391 +o mb_book_right +v -0.5312 0.375 0.75 +v -0.5312 0.375 1.25 +v -0.5312 0.3125 0.75 +v -0.5312 0.3125 1.25 +v -0.1562 0.375 0.75 +v -0.1562 0.375 1.25 +v -0.1562 0.3125 0.75 +v -0.1562 0.3125 1.25 +v -0.2812 0.286 0.6391 +v -0.2812 0.3438 0.75 +v -0.2812 0.286 0.6391 +v -0.2812 0.3438 0.75 +v -0.4062 0.286 0.6391 +v -0.4062 0.3438 0.75 +v -0.4062 0.286 0.6391 +v -0.4062 0.3438 0.75 +vt 0.7188 0.0625 +vt 0.7188 0.0313 +vt 0.9688 0.0313 +vt 0.9688 0.0625 +vt 0.7813 0.75 +vt 0.8125 0.75 +vt 0.8125 1 +vt 0.7813 1 +vt 0.625 1 +vt 0.625 0.75 +vt 0.8125 0.75 +vt 0.8125 1 +vt 0.7188 0 +vt 0.4688 0 +vt 0.4688 0.1875 +vt 0.7188 0.1875 +vt 0.625 1 +vt 0.625 0.9688 +vt 0.8125 0.9688 +vt 0.8125 1 +vt 0.625 0.7813 +vt 0.625 0.75 +vt 0.8125 0.75 +vt 0.8125 0.7813 +vt 0.8438 0.1875 +vt 0.9063 0.1875 +vt 0.9063 0.1875 +vt 0.8438 0.1875 +vt 0.8438 0.1875 +vt 0.9063 0.1875 +vt 0.9063 0.1875 +vt 0.8438 0.1875 +vt 0.8438 0.1875 +vt 0.9063 0.1875 +vt 0.9063 0.125 +vt 0.8438 0.125 +vt 0.8438 0.1875 +vt 0.9063 0.1875 +vt 0.9063 0.125 +vt 0.8438 0.125 +vt 0.8438 0.1875 +vt 0.9063 0.1875 +vt 0.9063 0.1875 +vt 0.8438 0.1875 +vt 0.8438 0.1875 +vt 0.9063 0.1875 +vt 0.9063 0.1875 +vt 0.8438 0.1875 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 0 0 +vn 0 0 0 +vn 0 0.89 -0.46 +vn 0 -0.89 0.46 +vn 0 0 0 +vn 0 0 0 +usemtl data_input_machine +f 632/1565/392 630/1566/392 629/1567/392 631/1568/392 +f 635/1569/393 633/1570/393 634/1571/393 636/1572/393 +f 629/1573/394 630/1574/394 634/1575/394 633/1576/394 +f 632/1577/395 631/1578/395 635/1579/395 636/1580/395 +f 631/1581/396 629/1582/396 633/1583/396 635/1584/396 +f 636/1585/397 634/1586/397 630/1587/397 632/1588/397 +f 637/1589/398 638/1590/398 640/1591/398 639/1592/398 +f 642/1593/399 641/1594/399 643/1595/399 644/1596/399 +f 642/1597/400 638/1598/400 637/1599/400 641/1600/400 +f 643/1601/401 639/1602/401 640/1603/401 644/1604/401 +f 641/1605/402 637/1606/402 639/1607/402 643/1608/402 +f 638/1609/403 642/1610/403 644/1611/403 640/1612/403 +o mb_cup +v 0.202 0.3125 0.1184 +v 0.3454 0.3125 0.3232 +v 0.202 0.0625 0.1184 +v 0.3454 0.0625 0.3232 +v 0.1508 0.3125 0.1543 +v 0.2942 0.3125 0.3591 +v 0.2584 0.3125 0.3079 +v 0.2584 0.0625 0.3079 +v 0.156 0.3125 0.3796 +v 0.1918 0.3125 0.4308 +v 0.156 0.0625 0.3796 +v 0.0485 0.3125 0.226 +v -0.0027 0.3125 0.2618 +v 0.1407 0.3125 0.4666 +v -0.0027 0.0625 0.2618 +v 0.1407 0.0625 0.4666 +v 0.1867 0.3125 0.2055 +v 0.0843 0.3125 0.2772 +v 0.1867 0.0625 0.2055 +v 0.0843 0.0625 0.2772 +v 0.202 0 0.1184 +v 0.3454 0 0.3232 +v -0.0027 0 0.2618 +v 0.1407 0 0.4666 +v 0.051 0.2813 0.3386 +v 0.0869 0.2813 0.3898 +v 0.051 0.2188 0.3386 +v 0.0869 0.2188 0.3898 +v -0.0002 0.2813 0.3745 +v 0.0357 0.2813 0.4257 +v -0.0002 0.2188 0.3745 +v 0.0357 0.2188 0.4257 +v -0.0514 0.2188 0.4103 +v -0.0155 0.2188 0.4615 +v -0.0002 0.0938 0.3745 +v 0.0357 0.0938 0.4257 +v -0.0514 0.0938 0.4103 +v -0.0155 0.0938 0.4615 +v -0.0002 0.0313 0.3745 +v 0.0357 0.0313 0.4257 +v 0.051 0.0938 0.3386 +v 0.0869 0.0938 0.3898 +v 0.051 0.0313 0.3386 +v 0.0869 0.0313 0.3898 +vt 0 0.625 +vt 0.125 0.625 +vt 0.125 0.5 +vt 0 0.5 +vt 0 0.5313 +vt 0 0.5625 +vt 0.125 0.5625 +vt 0.125 0.5313 +vt 0.0313 0.625 +vt 0.0938 0.625 +vt 0.0938 0.5937 +vt 0.0313 0.5938 +vt 0.0313 0.625 +vt 0.0938 0.625 +vt 0.0938 0.5 +vt 0.0313 0.5 +vt 0 0.625 +vt 0.125 0.625 +vt 0.125 0.5 +vt 0 0.5 +vt 0.0313 0.625 +vt 0.0625 0.625 +vt 0.0625 0.5 +vt 0.0313 0.5 +vt 0.0625 0.5938 +vt 0 0.5938 +vt 0 0.625 +vt 0.0625 0.625 +vt 0 0.625 +vt 0.125 0.625 +vt 0.125 0.5 +vt 0 0.5 +vt 0 0.625 +vt 0.125 0.625 +vt 0.125 0.5 +vt 0 0.5 +vt 0 0.625 +vt 0.0625 0.625 +vt 0.0625 0.5 +vt 0 0.5 +vt 0.0625 0.5 +vt 0 0.5 +vt 0 0.625 +vt 0.0625 0.625 +vt 0.0313 0.5 +vt 0.0313 0.625 +vt 0.0938 0.625 +vt 0.0938 0.5 +vt 0 0.5938 +vt 0.125 0.5938 +vt 0.125 0.5625 +vt 0 0.5625 +vt 0 0.5938 +vt 0.125 0.5938 +vt 0.125 0.5625 +vt 0 0.5625 +vt 0 0.5 +vt 0 0.625 +vt 0.125 0.625 +vt 0.125 0.5 +vt 0 0.5938 +vt 0.125 0.5938 +vt 0.125 0.5625 +vt 0 0.5625 +vt 0 0.625 +vt 0.125 0.625 +vt 0.125 0.5938 +vt 0 0.5938 +vt 0.125 0.5938 +vt 0.125 0.625 +vt 0.1563 0.625 +vt 0.1563 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.625 +vt 0.0625 0.625 +vt 0.0625 0.5938 +vt 0.125 0.625 +vt 0.1563 0.625 +vt 0.1563 0.5938 +vt 0.125 0.5938 +vt 0.125 0.625 +vt 0.1563 0.625 +vt 0.1563 0.5938 +vt 0.125 0.5938 +vt 0.1563 0.5938 +vt 0.1563 0.625 +vt 0.1875 0.625 +vt 0.1875 0.5938 +vt 0.1563 0.5938 +vt 0.1875 0.5938 +vt 0.1875 0.5313 +vt 0.1563 0.5313 +vt 0.1563 0.5938 +vt 0.1875 0.5938 +vt 0.1875 0.5313 +vt 0.1563 0.5313 +vt 0.1563 0.5938 +vt 0.1875 0.5938 +vt 0.1875 0.5313 +vt 0.1563 0.5313 +vt 0.1563 0.5938 +vt 0.1875 0.5938 +vt 0.1875 0.5313 +vt 0.1563 0.5313 +vt 0.1875 0.5313 +vt 0.1875 0.5027 +vt 0.1563 0.5027 +vt 0.1563 0.5313 +vt 0.125 0.5313 +vt 0.1563 0.5313 +vt 0.1563 0.5 +vt 0.125 0.5 +vt 0.125 0.5313 +vt 0.1563 0.5313 +vt 0.1563 0.5 +vt 0.125 0.5 +vt 0.125 0.5313 +vt 0.1563 0.5313 +vt 0.1563 0.5 +vt 0.125 0.5 +vt 0.125 0.5313 +vt 0.1563 0.5313 +vt 0.1563 0.5 +vt 0.125 0.5 +vt 0.1875 0.625 +vt 0.1875 0.5938 +vt 0.1563 0.5938 +vt 0.1563 0.5313 +vt 0.1875 0.5313 +vt 0.1875 0.5 +vt 0.1875 0.5938 +vt 0.1563 0.5938 +vt 0.1563 0.625 +vt 0.0313 0.5625 +vt 0.0625 0.5625 +vt 0.0313 0.5313 +vn 0.82 0 -0.57 +vn 0 1 0 +vn 0 1 0 +vn -0.57 0 -0.82 +vn -0.82 0 0.57 +vn 0 1 0 +vn 0 1 0 +vn 0.57 0 0.82 +vn -0.57 0 -0.82 +vn 0.57 0 0.82 +vn -0.82 0 0.57 +vn 0.82 0 -0.57 +vn 0.82 0 -0.57 +vn -0.82 0 0.57 +vn 0 1 0 +vn -0.57 0 -0.82 +vn 0.57 0 0.82 +vn 0 1 0 +vn 0 -1 0 +vn -0.57 0 -0.82 +vn 0.57 0 0.82 +vn -0.58 0.71 0.41 +vn 0.82 0 -0.57 +vn -0.82 0 0.57 +vn -0.57 0 -0.82 +vn 0.57 0 0.82 +vn -0.58 -0.71 0.41 +vn 0 1 0 +vn 0 -1 0 +vn -0.57 0 -0.82 +vn 0.57 0 0.82 +vn -0.57 0 -0.82 +vn -0.57 0 -0.82 +vn 0.57 0 0.82 +vn 0.57 0 0.82 +usemtl data_input_machine +f 645/1613/404 646/1614/404 648/1615/404 647/1616/404 +f 650/1617/405 646/1618/405 645/1619/405 649/1620/405 +f 654/1621/406 650/1622/406 651/1623/406 653/1624/406 +f 653/1625/407 651/1626/407 652/1627/407 655/1628/407 +f 658/1629/408 657/1630/408 659/1631/408 660/1632/408 +f 658/1633/409 654/1634/409 656/1635/409 657/1636/409 +f 662/1637/410 661/1638/410 649/1639/410 656/1640/410 +f 660/1641/411 648/1642/411 646/1643/411 658/1644/411 +f 657/1645/412 645/1646/412 647/1647/412 659/1648/412 +f 661/1649/413 662/1650/413 664/1651/413 663/1652/413 +f 663/1653/414 652/1654/414 651/1655/414 661/1656/414 +f 664/1657/415 662/1658/415 653/1659/415 655/1660/415 +f 647/1661/416 648/1662/416 666/1663/416 665/1664/416 +f 660/1665/417 659/1666/417 667/1667/417 668/1668/417 +f 660/1669/418 648/1670/418 647/1671/418 659/1672/418 +f 659/1673/419 647/1674/419 665/1675/419 667/1676/419 +f 648/1677/420 660/1678/420 668/1679/420 666/1680/420 +f 674/1681/421 670/1682/421 669/1683/421 673/1684/421 +f 675/1685/422 671/1686/422 672/1687/422 676/1688/422 +f 673/1689/423 669/1690/423 671/1691/423 675/1692/423 +f 670/1693/424 674/1694/424 676/1695/424 672/1696/424 +f 678/1697/425 674/1698/425 673/1699/425 677/1700/425 +f 675/1701/426 676/1702/426 680/1703/426 679/1704/426 +f 678/1705/427 677/1706/427 681/1707/427 682/1708/427 +f 677/1709/428 675/1710/428 679/1711/428 681/1712/428 +f 676/1713/429 678/1714/429 682/1715/429 680/1716/429 +f 681/1717/430 683/1718/430 684/1719/430 682/1720/430 +f 680/1721/431 686/1722/431 685/1723/431 679/1724/431 +f 683/1725/432 687/1726/432 688/1727/432 684/1728/432 +f 679/1729/433 685/1730/433 687/1731/433 683/1732/433 +f 686/1733/434 680/1734/434 684/1735/434 688/1736/434 +f 673/1736/435 675/1737/435 677/1738/435 673/1739/435 +f 681/1739/436 679/1740/436 683/1741/436 681/1742/436 +f 678/1742/437 676/1743/437 674/1744/437 678/1745/437 +f 680/1745/438 682/1746/438 684/1747/438 680/1748/438 +o mb_pen +v 0.3028 0.0625 0.5674 +v 0.3163 0.0625 0.6285 +v 0.3028 0 0.5674 +v 0.3163 0 0.6285 +v 0.0587 0.0625 0.6215 +v 0.0722 0.0625 0.6826 +v 0.0587 0 0.6215 +v 0.0722 0 0.6826 +vt 0.25 0.5625 +vt 0.2813 0.5625 +vt 0.2813 0.5313 +vt 0.25 0.5313 +vt 0.25 0.5625 +vt 0.2813 0.5625 +vt 0.2813 0.5313 +vt 0.25 0.5313 +vt 0.1875 0.5625 +vt 0.3125 0.5625 +vt 0.3125 0.5313 +vt 0.1875 0.5313 +vt 0.1875 0.5625 +vt 0.3125 0.5625 +vt 0.3125 0.5313 +vt 0.1875 0.5313 +vt 0.1875 0.5625 +vt 0.3125 0.5625 +vt 0.3125 0.5313 +vt 0.1875 0.5313 +vt 0.1875 0.5625 +vt 0.3125 0.5625 +vt 0.3125 0.5313 +vt 0.1875 0.5313 +vn 0.98 0 -0.22 +vn -0.98 0 0.22 +vn 0 1 0 +vn 0 -1 0 +vn -0.22 0 -0.98 +vn 0.22 0 0.98 +usemtl data_input_machine +f 689/1749/439 690/1750/439 692/1751/439 691/1752/439 +f 694/1753/440 693/1754/440 695/1755/440 696/1756/440 +f 694/1757/441 690/1758/441 689/1759/441 693/1760/441 +f 695/1761/442 691/1762/442 692/1763/442 696/1764/442 +f 693/1765/443 689/1766/443 691/1767/443 695/1768/443 +f 690/1769/444 694/1770/444 696/1771/444 692/1772/444 +o mb_penholder +v 0.4531 0.1875 0.6259 +v 0.5249 0.1875 0.7991 +v 0.4531 0 0.6259 +v 0.5249 0 0.7991 +v 0.2799 0.1875 0.6976 +v 0.3517 0.1875 0.8708 +v 0.2799 0 0.6976 +v 0.3517 0 0.8708 +vt 0.2813 0.5 +vt 0.375 0.5 +vt 0.375 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.5 +vt 0.375 0.5 +vt 0.375 0.4063 +vt 0.2813 0.4063 +vt 0.1875 0.5 +vt 0.2813 0.5 +vt 0.2813 0.4063 +vt 0.1875 0.4063 +vt 0.2813 0.5 +vt 0.375 0.5 +vt 0.375 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.5 +vt 0.375 0.5 +vt 0.375 0.4063 +vt 0.2813 0.4063 +vt 0.0938 0.4062 +vt 0.0938 0.5 +vt 0.1875 0.5 +vt 0.1875 0.4062 +vn 0.92 0 -0.38 +vn -0.92 0 0.38 +vn 0 1 0 +vn -0.38 0 -0.92 +vn 0.38 0 0.92 +vn 0 -1 0 +usemtl data_input_machine +f 697/1773/445 698/1774/445 700/1775/445 699/1776/445 +f 702/1777/446 701/1778/446 703/1779/446 704/1780/446 +f 702/1781/447 698/1782/447 697/1783/447 701/1784/447 +f 701/1785/448 697/1786/448 699/1787/448 703/1788/448 +f 698/1789/449 702/1790/449 704/1791/449 700/1792/449 +f 704/1793/450 703/1794/450 699/1795/450 700/1796/450 +o mb_holder_pens +v 0.4172 0.0937 0.7192 +v 0.4349 0.1119 0.7763 +v 0.3586 0.0863 0.7397 +v 0.3763 0.1045 0.7968 +v 0.3663 0.3309 0.6591 +v 0.384 0.3492 0.7162 +v 0.3077 0.3235 0.6797 +v 0.3254 0.3418 0.7368 +v 0.4543 0.1004 0.7369 +v 0.4816 0.0976 0.793 +v 0.3984 0.0929 0.7638 +v 0.4257 0.0902 0.8199 +v 0.4324 0.3484 0.7596 +v 0.4597 0.3456 0.8157 +v 0.3764 0.3409 0.7865 +v 0.4038 0.3382 0.8426 +vt 0.2813 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.2813 0.5625 +vt 0.1875 0.5938 +vt 0.2188 0.5938 +vt 0.2188 0.5625 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.1875 0.5625 +vt 0.1875 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.5625 +vt 0.1875 0.5625 +vt 0.3125 0.5938 +vt 0.1875 0.5938 +vt 0.1875 0.5625 +vt 0.3125 0.5625 +vt 0.2813 0.625 +vt 0.3125 0.625 +vt 0.3125 0.5938 +vt 0.2813 0.5938 +vt 0.1875 0.625 +vt 0.2188 0.625 +vt 0.2188 0.5938 +vt 0.1875 0.5938 +vt 0.1875 0.625 +vt 0.3125 0.625 +vt 0.3125 0.5938 +vt 0.1875 0.5938 +vt 0.1875 0.625 +vt 0.3125 0.625 +vt 0.3125 0.5938 +vt 0.1875 0.5938 +vt 0.1875 0.625 +vt 0.3125 0.625 +vt 0.3125 0.5938 +vt 0.1875 0.5938 +vt 0.3125 0.625 +vt 0.1875 0.625 +vt 0.1875 0.5938 +vt 0.3125 0.5938 +vn 0.2 -0.95 0.24 +vn -0.2 0.95 -0.24 +vn 0.94 0.12 -0.33 +vn -0.94 -0.12 0.33 +vn -0.28 -0.29 -0.91 +vn 0.28 0.29 0.91 +vn 0.09 -0.99 -0.09 +vn -0.09 0.99 0.09 +vn 0.9 0.12 -0.43 +vn -0.9 -0.12 0.43 +vn -0.44 0.04 -0.9 +vn 0.44 -0.04 0.9 +usemtl data_input_machine +f 705/1797/451 706/1798/451 708/1799/451 707/1800/451 +f 710/1801/452 709/1802/452 711/1803/452 712/1804/452 +f 710/1805/453 706/1806/453 705/1807/453 709/1808/453 +f 711/1809/454 707/1810/454 708/1811/454 712/1812/454 +f 709/1813/455 705/1814/455 707/1815/455 711/1816/455 +f 706/1817/456 710/1818/456 712/1819/456 708/1820/456 +f 713/1821/457 714/1822/457 716/1823/457 715/1824/457 +f 718/1825/458 717/1826/458 719/1827/458 720/1828/458 +f 718/1829/459 714/1830/459 713/1831/459 717/1832/459 +f 719/1833/460 715/1834/460 716/1835/460 720/1836/460 +f 717/1837/461 713/1838/461 715/1839/461 719/1840/461 +f 714/1841/462 718/1842/462 720/1843/462 716/1844/462 +o mb_book1 +v 0.7951 0.125 0.0505 +v 0.9076 0.125 0.5376 +v 0.7951 0 0.0505 +v 0.9076 0 0.5376 +v 0.4297 0.125 0.1348 +v 0.5422 0.125 0.622 +v 0.4297 0 0.1348 +v 0.5422 0 0.622 +vt 0.8125 0.75 +vt 0.8125 1 +vt 0.875 1 +vt 0.875 0.75 +vt 0.625 0.5 +vt 0.625 0.75 +vt 0.6875 0.75 +vt 0.6875 0.5 +vt 0.4375 0.75 +vt 0.625 0.75 +vt 0.625 0.5 +vt 0.4375 0.5 +vt 0.6875 0.75 +vt 0.875 0.75 +vt 0.875 0.5 +vt 0.6875 0.5 +vt 0.3125 0.5 +vt 0.3125 0.6875 +vt 0.375 0.6875 +vt 0.375 0.5 +vt 0.3125 0.6875 +vt 0.3125 0.5 +vt 0.375 0.5 +vt 0.375 0.6875 +vn 0.97 0 -0.22 +vn -0.97 0 0.22 +vn 0 1 0 +vn 0 -1 0 +vn -0.22 0 -0.97 +vn 0.22 0 0.97 +usemtl data_input_machine +f 721/1845/463 722/1846/463 724/1847/463 723/1848/463 +f 726/1849/464 725/1850/464 727/1851/464 728/1852/464 +f 726/1853/465 722/1854/465 721/1855/465 725/1856/465 +f 727/1857/466 723/1858/466 724/1859/466 728/1860/466 +f 725/1861/467 721/1862/467 723/1863/467 727/1864/467 +f 722/1865/468 726/1866/468 728/1867/468 724/1868/468 +o mb_book2 +v 0.9041 0.25 0.1307 +v 0.8001 0.25 0.6198 +v 0.9041 0.125 0.1307 +v 0.8001 0.125 0.6198 +v 0.5373 0.25 0.0527 +v 0.4333 0.25 0.5418 +v 0.5373 0.125 0.0527 +v 0.4333 0.125 0.5418 +vt 0.8125 0.75 +vt 0.8125 1 +vt 0.875 1 +vt 0.875 0.75 +vt 0.375 0.75 +vt 0.375 1 +vt 0.4375 1 +vt 0.4375 0.75 +vt 0.4375 1 +vt 0.625 1 +vt 0.625 0.75 +vt 0.4375 0.75 +vt 0.2813 0.375 +vt 0.4688 0.375 +vt 0.4688 0.125 +vt 0.2813 0.125 +vt 0.3125 0.75 +vt 0.3125 0.9375 +vt 0.375 0.9375 +vt 0.375 0.75 +vt 0.3125 0.9375 +vt 0.3125 0.75 +vt 0.375 0.75 +vt 0.375 0.9375 +vn 0.98 0 0.21 +vn -0.98 0 -0.21 +vn 0 1 0 +vn 0 -1 0 +vn 0.21 0 -0.98 +vn -0.21 0 0.98 +usemtl data_input_machine +f 729/1869/469 730/1870/469 732/1871/469 731/1872/469 +f 734/1873/470 733/1874/470 735/1875/470 736/1876/470 +f 734/1877/471 730/1878/471 729/1879/471 733/1880/471 +f 735/1881/472 731/1882/472 732/1883/472 736/1884/472 +f 733/1885/473 729/1886/473 731/1887/473 735/1888/473 +f 730/1889/474 734/1890/474 736/1891/474 732/1892/474 +o drawer +v -0.3125 -0.25 0.0625 +v -0.3125 -0.25 0 +v -0.3125 -0.375 0.0625 +v -0.3125 -0.375 0 +v -0.4375 -0.25 0.0625 +v -0.4375 -0.25 0 +v -0.4375 -0.375 0.0625 +v -0.4375 -0.375 0 +v 0 -0.1875 0.125 +v 0 -0.1875 0.0625 +v 0 -0.4375 0.125 +v 0 -0.4375 0.0625 +v -0.75 -0.1875 0.125 +v -0.75 -0.1875 0.0625 +v -0.75 -0.4375 0.125 +v -0.75 -0.4375 0.0625 +v -0.0312 -0.3437 0.625 +v -0.0312 -0.3437 0.125 +v -0.0312 -0.4062 0.625 +v -0.0312 -0.4062 0.125 +v -0.7187 -0.3437 0.625 +v -0.7187 -0.3437 0.125 +v -0.7187 -0.4062 0.625 +v -0.7187 -0.4062 0.125 +v -0.6562 -0.2187 0.625 +v -0.6562 -0.2187 0.125 +v -0.6562 -0.3437 0.625 +v -0.6562 -0.3437 0.125 +v -0.7187 -0.2187 0.625 +v -0.7187 -0.2187 0.125 +v -0.7187 -0.3437 0.625 +v -0.7187 -0.3437 0.125 +v -0.0312 -0.2187 0.625 +v -0.0312 -0.2187 0.125 +v -0.0312 -0.3437 0.625 +v -0.0312 -0.3437 0.125 +v -0.0937 -0.2187 0.625 +v -0.0937 -0.2187 0.125 +v -0.0937 -0.3437 0.625 +v -0.0937 -0.3437 0.125 +vt 0.9844 0.2813 +vt 0.9844 0.3125 +vt 1 0.3125 +vt 1 0.2813 +vt 0.9688 0.2813 +vt 0.9688 0.3125 +vt 0.9844 0.3125 +vt 0.9844 0.2813 +vt 1 0.3125 +vt 1 0.2969 +vt 0.9688 0.2969 +vt 0.9688 0.3125 +vt 1 0.2813 +vt 1 0.2969 +vt 0.9688 0.2969 +vt 0.9688 0.2813 +vt 0.9688 0.2813 +vt 0.9688 0.3125 +vt 1 0.3125 +vt 1 0.2813 +vt 0.8125 0.3906 +vt 0.8125 0.4531 +vt 0.7969 0.4531 +vt 0.7969 0.3906 +vt 0.9844 0.3906 +vt 0.9844 0.4531 +vt 0.9688 0.4531 +vt 0.9688 0.3906 +vt 0.7813 0.25 +vt 0.7656 0.25 +vt 0.7656 0.0625 +vt 0.7813 0.0625 +vt 1 0.25 +vt 0.9844 0.25 +vt 0.9844 0.0625 +vt 1 0.0625 +vt 0.9844 0.3906 +vt 0.9844 0.4531 +vt 0.7969 0.4531 +vt 0.7969 0.3906 +vt 0.9844 0.3906 +vt 0.9844 0.4531 +vt 0.7969 0.4531 +vt 0.7969 0.3906 +vt 0.9688 0.25 +vt 0.9531 0.25 +vt 0.9531 0.125 +vt 0.9688 0.125 +vt 0.8125 0.125 +vt 0.7969 0.125 +vt 0.7969 0.25 +vt 0.8125 0.25 +vt 0.9688 0.25 +vt 0.9688 0.375 +vt 0.7969 0.375 +vt 0.7969 0.25 +vt 0.9688 0.25 +vt 0.9688 0.125 +vt 0.7969 0.125 +vt 0.7969 0.25 +vt 0.9375 0.0781 +vt 0.9375 0.0938 +vt 0.7656 0.0938 +vt 0.7656 0.0781 +vt 0.8281 0.375 +vt 0.7969 0.375 +vt 0.7969 0.25 +vt 0.8281 0.25 +vt 0.8281 0.375 +vt 0.7969 0.375 +vt 0.7969 0.25 +vt 0.8281 0.25 +vt 0.7969 0.375 +vt 0.7969 0.25 +vt 0.8125 0.25 +vt 0.8125 0.375 +vt 0.9375 0.375 +vt 0.9688 0.375 +vt 0.9688 0.25 +vt 0.9375 0.25 +vt 0.9375 0.375 +vt 0.9688 0.375 +vt 0.9688 0.25 +vt 0.9375 0.25 +vt 0.9531 0.375 +vt 0.9531 0.25 +vt 0.9375 0.25 +vt 0.9375 0.375 +vt 0.9531 0.3906 +vt 0.9531 0.3594 +vt 0.8125 0.3594 +vt 0.8125 0.3906 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 -1 +usemtl common_table +f 740/1893/475 738/1894/475 737/1895/475 739/1896/475 +f 743/1897/476 741/1898/476 742/1899/476 744/1900/476 +f 737/1901/477 738/1902/477 742/1903/477 741/1904/477 +f 740/1905/478 739/1906/478 743/1907/478 744/1908/478 +f 744/1909/479 742/1910/479 738/1911/479 740/1912/479 +f 748/1913/480 746/1914/480 745/1915/480 747/1916/480 +f 751/1917/481 749/1918/481 750/1919/481 752/1920/481 +f 745/1921/482 746/1922/482 750/1923/482 749/1924/482 +f 748/1925/483 747/1926/483 751/1927/483 752/1928/483 +f 747/1929/484 745/1930/484 749/1931/484 751/1932/484 +f 752/1933/485 750/1934/485 746/1935/485 748/1936/485 +f 756/1937/486 754/1938/486 753/1939/486 755/1940/486 +f 759/1941/487 757/1942/487 758/1943/487 760/1944/487 +f 753/1945/488 754/1946/488 758/1947/488 757/1948/488 +f 756/1949/489 755/1950/489 759/1951/489 760/1952/489 +f 760/1953/490 758/1954/490 754/1955/490 756/1956/490 +f 764/1957/491 762/1958/491 761/1959/491 763/1960/491 +f 767/1961/492 765/1962/492 766/1963/492 768/1964/492 +f 761/1965/493 762/1966/493 766/1967/493 765/1968/493 +f 772/1969/494 770/1970/494 769/1971/494 771/1972/494 +f 775/1973/495 773/1974/495 774/1975/495 776/1976/495 +f 769/1977/496 770/1978/496 774/1979/496 773/1980/496 +f 773/1981/497 775/1982/497 763/1983/497 761/1984/497 +o door +v 0 2 0.9375 +v 1 2 0.9375 +v 0 1 0.9375 +v 1 1 0.9375 +v 0 2 1 +v 1 2 1 +v 0 1 1 +v 1 1 1 +vt 0.5 0.25 +vt 0.75 0.25 +vt 0.75 0 +vt 0.5 0 +vt 0.5 0.25 +vt 0.75 0.25 +vt 0.75 0 +vt 0.5 0 +vt 0.5 0.2344 +vt 0.5 0.25 +vt 0.75 0.25 +vt 0.75 0.2344 +vt 0.5 0 +vt 0.5 0.0156 +vt 0.75 0.0156 +vt 0.75 0 +vt 0.5 0.25 +vt 0.5156 0.25 +vt 0.5156 0 +vt 0.5 0 +vt 0.7344 0.25 +vt 0.75 0.25 +vt 0.75 0 +vt 0.7344 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +usemtl common_steel +f 777/1985/498 778/1986/498 780/1987/498 779/1988/498 +f 782/1989/499 781/1990/499 783/1991/499 784/1992/499 +f 782/1993/500 778/1994/500 777/1995/500 781/1996/500 +f 783/1997/501 779/1998/501 780/1999/501 784/2000/501 +f 781/2001/502 777/2002/502 779/2003/502 783/2004/502 +f 778/2005/503 782/2006/503 784/2007/503 780/2008/503 \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/block/multiblock/data_input_machine/upgrades/advanced_data.obj b/src/main/resources/assets/immersiveintelligence/models/block/multiblock/data_input_machine/upgrades/advanced_data.obj new file mode 100644 index 000000000..48bfdb2e0 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/block/multiblock/data_input_machine/upgrades/advanced_data.obj @@ -0,0 +1,1052 @@ +# Made by Pabilo8 with Blockbench +# Exported with IIToolkit Plugin on 03/06/2026 +mtllib data_input_machine.mtl + +o mess_upgraded +v -0.9687 0.2476 0.4678 +v -0.9687 0.1057 0.1894 +v -0.9687 0.1919 0.4962 +v -0.0937 0.2476 0.4678 +v -0.0937 0.1057 0.1894 +v -0.0937 0.1919 0.4962 +v -0.0937 0.0501 0.2177 +v -0.2812 0.1057 0.1894 +v -0.2812 0.0501 0.2177 +v -0.0937 0.1057 0.1894 +v -0.0937 0.0501 0.2177 +v -0.9687 0.1057 0.1894 +v -0.9687 0.0774 0.1337 +v -0.9687 0.0217 0.1621 +v -0.2812 0.1057 0.1894 +v -0.2812 0.0774 0.1337 +v -0.2812 0.0501 0.2177 +v -0.2812 0.0217 0.1621 +v -0.2812 0.0774 0.1337 +v -0.2812 0.049 0.078 +v -0.2812 0.0217 0.1621 +v -0.2812 -0.0067 0.1064 +v -0.0937 0.0774 0.1337 +v -0.0937 0.049 0.078 +v -0.0937 0.0217 0.1621 +v -0.0937 -0.0067 0.1064 +v -0.2187 0.1057 0.1894 +v -0.2187 0.0774 0.1337 +v -0.2187 0.0501 0.2177 +v -0.2187 0.0217 0.1621 +v -0.1562 0.1057 0.1894 +v -0.1562 0.0774 0.1337 +v -0.1562 0.0501 0.2177 +v -0.1562 0.0217 0.1621 +v -0.0937 0.1875 1 +v -0.0937 0.1875 0.4844 +v -0.0937 0 1 +v -0.0937 0 0.1094 +v -0.9687 0.1875 1 +v -0.9687 0.1875 0.4844 +v -0.9687 0 1 +v -0.9687 0 0.1094 +v -0.1875 0.5901 0.8672 +v -0.375 0.5901 0.8672 +v -0.1875 0.5305 0.8484 +v -0.375 0.5305 0.8484 +v -0.1875 0.5713 0.9269 +v -0.1875 0.5117 0.9081 +v -0.375 0.5713 0.9269 +v -0.375 0.5117 0.9081 +v -0.25 0.5305 0.8484 +v -0.3125 0.5305 0.8484 +v -0.25 0.4113 0.8109 +v -0.3125 0.4113 0.8109 +v -0.25 0.5117 0.9081 +v -0.25 0.3925 0.8705 +v -0.3125 0.5117 0.9081 +v -0.3125 0.3925 0.8705 +v -0.4375 0.5799 0.7858 +v -0.625 0.5799 0.7858 +v -0.4375 0.5183 0.7966 +v -0.625 0.5183 0.7966 +v -0.4375 0.5907 0.8473 +v -0.4375 0.5292 0.8582 +v -0.625 0.5907 0.8473 +v -0.625 0.5292 0.8582 +v -0.5 0.5183 0.7966 +v -0.5625 0.5183 0.7966 +v -0.5 0.3952 0.8183 +v -0.5625 0.3952 0.8183 +v -0.5 0.5292 0.8582 +v -0.5 0.4061 0.8799 +v -0.5625 0.5292 0.8582 +v -0.5625 0.4061 0.8799 +v -0.1875 0.5469 0.5625 +v -0.375 0.5469 0.5625 +v -0.1875 0.4844 0.5625 +v -0.375 0.4844 0.5625 +v -0.1875 0.5469 0.625 +v -0.1875 0.4844 0.625 +v -0.375 0.5469 0.625 +v -0.375 0.4844 0.625 +v -0.25 0.4844 0.5625 +v -0.3125 0.4844 0.5625 +v -0.25 0.3594 0.5625 +v -0.3125 0.3594 0.5625 +v -0.25 0.4844 0.625 +v -0.25 0.3594 0.625 +v -0.3125 0.4844 0.625 +v -0.3125 0.3594 0.625 +v -0.7187 0.5278 0.7633 +v -0.7187 0.5441 0.8872 +v -0.8437 0.5278 0.7633 +v -0.8437 0.5441 0.8872 +v -0.7187 0.4658 0.7714 +v -0.8437 0.4658 0.7714 +v -0.8437 0.4822 0.8954 +v -0.7187 0.4822 0.8954 +v -0.6875 0.4332 0.5236 +v -0.6875 0.4903 0.9573 +v -0.875 0.4332 0.5236 +v -0.875 0.4903 0.9573 +v -0.6875 0.3712 0.5317 +v -0.875 0.3712 0.5317 +v -0.875 0.4283 0.9655 +v -0.6875 0.4283 0.9655 +v -0.7187 0.5033 0.5774 +v -0.7187 0.5196 0.7013 +v -0.8437 0.5033 0.5774 +v -0.8437 0.5196 0.7013 +v -0.7187 0.4414 0.5855 +v -0.8437 0.4414 0.5855 +v -0.8437 0.4577 0.7095 +v -0.7187 0.4577 0.7095 +v -0.125 0.4375 1 +v -0.9375 0.4375 1 +v -0.125 0.1875 1 +v -0.9375 0.1875 1 +v -0.125 0.3655 0.4962 +v -0.125 0.1875 0.4962 +v -0.9375 0.3655 0.4962 +v -0.9375 0.1875 0.4962 +v -0.5 0.5183 0.6091 +v -0.5625 0.5183 0.6091 +v -0.5 0.3952 0.6308 +v -0.5625 0.3952 0.6308 +v -0.5 0.5292 0.6707 +v -0.5 0.4061 0.6924 +v -0.5625 0.5292 0.6707 +v -0.5625 0.4061 0.6924 +v -0.4375 0.5799 0.5983 +v -0.625 0.5799 0.5983 +v -0.4375 0.5183 0.6091 +v -0.625 0.5183 0.6091 +v -0.4375 0.5907 0.6598 +v -0.4375 0.5292 0.6707 +v -0.625 0.5907 0.6598 +v -0.625 0.5292 0.6707 +v -0.5 0.4375 1 +v -0.5 0.3655 0.4962 +v -0.5 0.1875 0.4962 +v -0.5 0.3655 0.4962 +v -0.5 0.4015 0.7481 +v -0.9375 0.4015 0.7481 +v -0.5 0.4015 0.7481 +v -0.125 0.4015 0.7481 +v 0.6875 -0.1875 0.0625 +v 0.6875 -0.1875 1 +v 0.6875 -1 0.0625 +v 0.6875 -1 1 +v 0.0625 -0.1875 0.0625 +v 0.0625 -0.1875 1 +v 0.0625 -1 0.0625 +v 0.0625 -1 1 +v 0.375 -1 0.0625 +v 0.375 -1 1 +v 0.375 -0.1875 1 +v 0.375 -0.1875 0.0625 +v 0.375 -0.625 0.0625 +v 0.0625 -0.625 0.0625 +v 0.6875 -0.625 0.0625 +v 0.375 -0.625 0.0625 +v 0.6875 -0.625 1 +v 0.6875 -0.625 0.0625 +v 0.0625 -0.625 1 +v 0.0625 -0.625 0.0625 +v 0.375 -0.625 1 +v 0.6875 -0.625 1 +v 0.0625 -0.625 1 +v 0.375 -0.625 1 +v 0.6875 -0.625 0.5625 +v 0.6875 -0.1875 0.5625 +v 0.6875 -1 0.5625 +v 0.6875 -0.625 0.5625 +v 0.0625 -1 0.5625 +v 0.0625 -0.625 0.5625 +v 0.0625 -0.1875 0.5625 +v 0.0625 -0.625 0.5625 +v 0.0625 -1 0.5625 +v 0.375 -1 0.5625 +v 0.6875 -1 0.5625 +v 0.375 -1 0.5625 +v -1.0959 0.6161 0.5922 +v -1.0959 0.6161 0.9672 +v -0.9665 0.1331 0.5922 +v -0.9665 0.1331 0.9672 +v -1.2167 0.5837 0.5922 +v -1.2167 0.5837 0.9672 +v -1.0873 0.1008 0.5922 +v -1.0873 0.1008 0.9672 +v -1.1439 0.3183 0.6297 +v -1.1439 0.3183 0.7484 +v -1.0792 0.0768 0.6297 +v -1.0792 0.0768 0.7484 +v -1.2043 0.3021 0.6297 +v -1.2043 0.3021 0.7484 +v -1.1396 0.0607 0.6297 +v -1.1396 0.0607 0.7484 +v -0.9687 0.125 0.625 +v -0.9687 0.125 0.75 +v -0.9687 0.0625 0.625 +v -0.9687 0.0625 0.75 +v -1.1375 0.125 0.625 +v -1.1375 0.125 0.75 +v -1.1375 0.0625 0.625 +v -1.1375 0.0625 0.75 +v -1.1439 0.3183 0.8172 +v -1.1439 0.3183 0.9359 +v -1.0792 0.0768 0.8172 +v -1.0792 0.0768 0.9359 +v -1.2043 0.3021 0.8172 +v -1.2043 0.3021 0.9359 +v -1.1396 0.0607 0.8172 +v -1.1396 0.0607 0.9359 +v -0.9687 0.125 0.8125 +v -0.9687 0.125 0.9375 +v -0.9687 0.0625 0.8125 +v -0.9687 0.0625 0.9375 +v -1.1375 0.125 0.8125 +v -1.1375 0.125 0.9375 +v -1.1375 0.0625 0.8125 +v -1.1375 0.0625 0.9375 +vt 1 0.6406 +vt 0.7813 0.6406 +vt 0.7813 0.7188 +vt 1 0.7188 +vt 1 0.7188 +vt 0.7813 0.7188 +vt 0.7813 0.7031 +vt 1 0.7031 +vt 0.9844 0.6406 +vt 0.9844 0.7188 +vt 1 0.7188 +vt 1 0.6406 +vt 0.9531 0.6563 +vt 1 0.6563 +vt 1 0.6406 +vt 0.9531 0.6406 +vt 0.9375 0.6406 +vt 0.9531 0.6406 +vt 0.9531 0.625 +vt 0.9375 0.625 +vt 0.9531 0.6406 +vt 0.7813 0.6406 +vt 0.7813 0.625 +vt 0.9531 0.625 +vt 0.7813 0.6406 +vt 0.9531 0.6406 +vt 0.9531 0.625 +vt 0.7813 0.625 +vt 0.9531 0.625 +vt 0.9688 0.625 +vt 0.9688 0.6094 +vt 0.9531 0.6094 +vt 0.9531 0.625 +vt 1 0.625 +vt 1 0.6094 +vt 0.9531 0.6094 +vt 0.9531 0.625 +vt 1 0.625 +vt 1 0.6094 +vt 0.9531 0.6094 +vt 0.9531 0.625 +vt 1 0.625 +vt 1 0.6094 +vt 0.9531 0.6094 +vt 0.9844 0.6094 +vt 0.9844 0.625 +vt 1 0.625 +vt 1 0.6094 +vt 0.9688 0.6406 +vt 0.9844 0.6406 +vt 0.9844 0.625 +vt 0.9688 0.625 +vt 0.9688 0.6406 +vt 0.9844 0.6406 +vt 0.9844 0.625 +vt 0.9688 0.625 +vt 0.9688 0.6406 +vt 0.9844 0.6406 +vt 0.9844 0.625 +vt 0.9688 0.625 +vt 0.7969 0.7188 +vt 0.7813 0.7188 +vt 0.7813 0.625 +vt 0.7969 0.625 +vt 0.4375 0.625 +vt 0.5313 0.8125 +vt 0.5313 1 +vt 0.4375 1 +vt 0.4375 1 +vt 0.5313 1 +vt 0.5313 0.8125 +vt 0.4375 0.625 +vt 0.4375 1 +vt 0.4375 0.8125 +vt 0 0.8125 +vt 0 1 +vt 0 0.5 +vt 0 0.5938 +vt 0.4375 0.5938 +vt 0.4375 0.5 +vt 0 0.5938 +vt 0 0.8125 +vt 0.4375 0.8125 +vt 0.4375 0.5938 +vt 0 0.8828 +vt 0.0938 0.8828 +vt 0.0938 0.8672 +vt 0 0.8672 +vt 0.2031 0.2031 +vt 0.25 0.2031 +vt 0.25 0.1875 +vt 0.2031 0.1875 +vt 0.2031 0.3281 +vt 0.25 0.3281 +vt 0.25 0.3125 +vt 0.2031 0.3125 +vt 0.25 0.3125 +vt 0.25 0.2031 +vt 0.2031 0.2031 +vt 0.2031 0.3125 +vt 0.2188 0.3125 +vt 0.2187 0.2031 +vt 0.2031 0.2031 +vt 0.2031 0.3125 +vt 0.25 0.3125 +vt 0.25 0.2031 +vt 0.2344 0.2031 +vt 0.2344 0.3125 +vt 0.7813 0.9219 +vt 0.8125 0.9219 +vt 0.8125 0.9063 +vt 0.7813 0.9063 +vt 0.8125 0.9375 +vt 0.7813 0.9375 +vt 0.7813 0.9219 +vt 0.8125 0.9219 +vt 0.8125 0.9375 +vt 0.8125 0.9063 +vt 0.7813 0.9063 +vt 0.7813 0.9375 +vt 0.7969 0.9375 +vt 0.7969 0.9062 +vt 0.7813 0.9062 +vt 0.7813 0.9375 +vt 0.8125 0.9219 +vt 0.7813 0.9219 +vt 0.7813 0.9062 +vt 0.8125 0.9062 +vt 0.75 0.9219 +vt 0.7813 0.9219 +vt 0.7813 0.9063 +vt 0.75 0.9063 +vt 0.7813 0.9375 +vt 0.75 0.9375 +vt 0.75 0.9219 +vt 0.7813 0.9219 +vt 0.7813 0.9375 +vt 0.7813 0.9063 +vt 0.75 0.9063 +vt 0.75 0.9375 +vt 0.7656 0.9375 +vt 0.7656 0.9062 +vt 0.75 0.9062 +vt 0.75 0.9375 +vt 0.7813 0.9219 +vt 0.75 0.9219 +vt 0.75 0.9063 +vt 0.7813 0.9062 +vt 0.7813 0.3906 +vt 0.7969 0.3906 +vt 0.7969 0.375 +vt 0.7813 0.375 +vt 0.7813 0.3906 +vt 0.7969 0.3906 +vt 0.7969 0.375 +vt 0.7813 0.375 +vt 0.7813 0.3906 +vt 0.8281 0.3906 +vt 0.8281 0.375 +vt 0.7813 0.375 +vt 0.7813 0.3906 +vt 0.8281 0.3906 +vt 0.8281 0.375 +vt 0.7813 0.375 +vt 0.7813 0.3906 +vt 0.8281 0.3906 +vt 0.8281 0.375 +vt 0.7813 0.375 +vt 0.7813 0.3906 +vt 0.8281 0.3906 +vt 0.8281 0.375 +vt 0.7813 0.375 +vt 0.8281 0.3906 +vt 0.8438 0.3906 +vt 0.8438 0.3594 +vt 0.8281 0.3594 +vt 0.8281 0.3906 +vt 0.8438 0.3906 +vt 0.8438 0.3594 +vt 0.8281 0.3594 +vt 0.8281 0.3906 +vt 0.8438 0.3906 +vt 0.8438 0.3594 +vt 0.8281 0.3594 +vt 0.8281 0.3906 +vt 0.8438 0.3906 +vt 0.8438 0.3594 +vt 0.8281 0.3594 +vt 0.7813 0.375 +vt 0.7969 0.375 +vt 0.7969 0.3594 +vt 0.7813 0.3594 +vt 0.7969 0.375 +vt 0.7969 0.3594 +vt 0.7813 0.3594 +vt 0.7813 0.375 +vt 0.7813 0.375 +vt 0.8281 0.375 +vt 0.8281 0.3594 +vt 0.7813 0.3594 +vt 0.8281 0.3594 +vt 0.7813 0.3594 +vt 0.7813 0.375 +vt 0.8281 0.375 +vt 0.7813 0.375 +vt 0.8281 0.375 +vt 0.8281 0.3594 +vt 0.7813 0.3594 +vt 0.7813 0.375 +vt 0.8281 0.375 +vt 0.8281 0.3594 +vt 0.7813 0.3594 +vt 0.8281 0.3906 +vt 0.8438 0.3906 +vt 0.8438 0.3594 +vt 0.8281 0.3594 +vt 0.8281 0.3125 +vt 0.8281 0.3281 +vt 0.7969 0.3281 +vt 0.7969 0.3125 +vt 0.8281 0.3906 +vt 0.8438 0.3906 +vt 0.8438 0.3594 +vt 0.8281 0.3594 +vt 0.8281 0.3906 +vt 0.8438 0.3906 +vt 0.8438 0.3594 +vt 0.8281 0.3594 +vt 0.7969 0.3594 +vt 0.7969 0.3438 +vt 0.7813 0.3438 +vt 0.7813 0.3594 +vt 0.7813 0.3594 +vt 0.7969 0.3594 +vt 0.7969 0.3437 +vt 0.7813 0.3437 +vt 0.8281 0.3438 +vt 0.7813 0.3438 +vt 0.7813 0.3594 +vt 0.8281 0.3594 +vt 0.7813 0.375 +vt 0.8281 0.375 +vt 0.8281 0.3594 +vt 0.7813 0.3594 +vt 0.7813 0.3594 +vt 0.8281 0.3594 +vt 0.8281 0.3438 +vt 0.7813 0.3438 +vt 0.7813 0.3594 +vt 0.8281 0.3594 +vt 0.8281 0.3438 +vt 0.7813 0.3438 +vt 0.8281 0.3125 +vt 0.8281 0.3281 +vt 0.7969 0.3281 +vt 0.7969 0.3125 +vt 0.8281 0.3906 +vt 0.8437 0.3906 +vt 0.8437 0.3594 +vt 0.8281 0.3594 +vt 0.8281 0.3906 +vt 0.8438 0.3906 +vt 0.8438 0.3594 +vt 0.8281 0.3594 +vt 0.8281 0.3906 +vt 0.8438 0.3906 +vt 0.8438 0.3594 +vt 0.8281 0.3594 +vt 0.7969 0.375 +vt 0.7969 0.4195 +vt 0.9219 0.4375 +vt 0.9219 0.375 +vt 0.9844 0.4195 +vt 0.9844 0.375 +vt 0.8594 0.375 +vt 0.8594 0.4375 +vt 0.7813 0.3437 +vt 0.7969 0.3438 +vt 0.7969 0.3281 +vt 0.7813 0.3281 +vt 0.7969 0.3438 +vt 0.7969 0.3281 +vt 0.7813 0.3281 +vt 0.7813 0.3438 +vt 0.7813 0.3438 +vt 0.8281 0.3438 +vt 0.8281 0.3281 +vt 0.7813 0.3281 +vt 0.8281 0.3281 +vt 0.7813 0.3281 +vt 0.7813 0.3438 +vt 0.8281 0.3438 +vt 0.7813 0.3438 +vt 0.8281 0.3438 +vt 0.8281 0.3281 +vt 0.7813 0.3281 +vt 0.7813 0.3438 +vt 0.8281 0.3438 +vt 0.8281 0.3281 +vt 0.7813 0.3281 +vt 0.8281 0.3906 +vt 0.8438 0.3906 +vt 0.8438 0.3594 +vt 0.8281 0.3594 +vt 0.8438 0.3906 +vt 0.8281 0.3906 +vt 0.8281 0.3594 +vt 0.8437 0.3594 +vt 0.8281 0.3906 +vt 0.8438 0.3906 +vt 0.8438 0.3594 +vt 0.8281 0.3594 +vt 0.8281 0.3906 +vt 0.8438 0.3906 +vt 0.8438 0.3594 +vt 0.8281 0.3594 +vt 0.2031 1 +vt 0.2031 0.8741 +vt 0 0.8741 +vt 0 1 +vt 1 0.25 +vt 1 0.2031 +vt 0.9063 0.2031 +vt 0.9063 0.25 +vt 0.875 0.2031 +vt 0.7656 0.2031 +vt 0.7656 0.25 +vt 0.875 0.25 +vt 0.7656 0.25 +vt 0.875 0.25 +vt 0.875 0.1875 +vt 0.7656 0.1875 +vt 0.875 0.125 +vt 0.875 0.0625 +vt 0.7656 0.0625 +vt 0.7656 0.125 +vt 0.9063 0.25 +vt 1 0.25 +vt 1 0.1875 +vt 0.9063 0.1875 +vt 1 0.0625 +vt 0.9063 0.0625 +vt 0.9063 0.125 +vt 1 0.125 +vt 0.6563 0.1875 +vt 0.6563 0 +vt 0.5 0 +vt 0.5 0.1875 +vt 0.5 0.5 +vt 0.6563 0.5 +vt 0.6563 0.2813 +vt 0.5 0.2813 +vt 0.8438 0.5 +vt 1 0.5 +vt 1 0.2813 +vt 0.8438 0.2813 +vt 1 0.1875 +vt 1 0 +vt 0.8438 0 +vt 0.8438 0.1875 +vt 0.6563 0.1875 +vt 0.6563 0 +vt 0.5 0 +vt 0.5 0.1875 +vt 0.5 0.5 +vt 0.6563 0.5 +vt 0.6563 0.2813 +vt 0.5 0.2813 +vt 0.8438 0.5 +vt 1 0.5 +vt 1 0.2813 +vt 0.8438 0.2813 +vt 1 0.1875 +vt 1 0 +vt 0.8438 0 +vt 0.8438 0.1875 +vt 1 0.5 +vt 1 0.2813 +vt 0.7813 0.2813 +vt 0.7813 0.5 +vt 0.75 0.2813 +vt 0.5 0.2813 +vt 0.5 0.5 +vt 0.75 0.5 +vt 1 0.1875 +vt 1 0 +vt 0.7813 0 +vt 0.7813 0.1875 +vt 0.75 0 +vt 0.5 0 +vt 0.5 0.1875 +vt 0.75 0.1875 +vt 0.7188 0 +vt 0.5 0 +vt 0.5 0.1875 +vt 0.7188 0.1875 +vt 1 0.1875 +vt 1 0 +vt 0.75 0 +vt 0.75 0.1875 +vt 0.5 0.2813 +vt 0.5 0.5 +vt 0.7188 0.5 +vt 0.7188 0.2813 +vt 0.75 0.5 +vt 1 0.5 +vt 1 0.2813 +vt 0.75 0.2813 +vt 0.5 0.3438 +vt 0.5 0.5 +vt 0.7188 0.5 +vt 0.7188 0.3438 +vt 0.75 0.5 +vt 1 0.5 +vt 1 0.3438 +vt 0.75 0.3438 +vt 1 0.1563 +vt 1 0 +vt 0.75 0 +vt 0.75 0.1563 +vt 0.7188 0 +vt 0.5 0 +vt 0.5 0.1563 +vt 0.7188 0.1563 +vt 0.4063 0.75 +vt 0.625 0.75 +vt 0.625 0.5 +vt 0.4063 0.5 +vt 0.625 0.75 +vt 0.4063 0.75 +vt 0.4063 0.5 +vt 0.625 0.5 +vt 0.375 0.7188 +vt 0.3125 0.7188 +vt 0.3125 0.5 +vt 0.375 0.5 +vt 0.375 0.5 +vt 0.3125 0.5 +vt 0.3125 0.7188 +vt 0.375 0.7188 +vt 0.4063 0.75 +vt 0.4688 0.75 +vt 0.4688 0.5 +vt 0.4063 0.5 +vt 0.3125 0.75 +vt 0.375 0.75 +vt 0.375 0.5313 +vt 0.3125 0.5313 +vt 0.0313 0.2969 +vt 0 0.2969 +vt 0 0.2344 +vt 0.0313 0.2344 +vt 0 0.2969 +vt 0.0313 0.2969 +vt 0.0313 0.2344 +vt 0 0.2344 +vt 0 0.2969 +vt 0 0.2813 +vt 0.0313 0.2813 +vt 0.0313 0.2969 +vt 0.0313 0.25 +vt 0.0313 0.2344 +vt 0 0.2344 +vt 0 0.25 +vt 0.0156 0.2969 +vt 0.0313 0.2969 +vt 0.0313 0.2344 +vt 0.0156 0.2344 +vt 0 0.2969 +vt 0.0156 0.2969 +vt 0.0156 0.2344 +vt 0 0.2344 +vt 0 0.2813 +vt 0.0313 0.2813 +vt 0.0313 0.2656 +vt 0 0.2656 +vt 0 0.2813 +vt 0.0313 0.2813 +vt 0.0313 0.2656 +vt 0 0.2656 +vt 0.0313 0.3234 +vt 0.0313 0.2813 +vt 0 0.2813 +vt 0 0.3234 +vt 0.0313 0.3234 +vt 0.0313 0.2813 +vt 0 0.2813 +vt 0 0.3234 +vt 0.0156 0.2609 +vt 0.0156 0.2188 +vt 0 0.2188 +vt 0 0.2609 +vt 0.0156 0.2609 +vt 0.0156 0.2188 +vt 0 0.2188 +vt 0 0.2609 +vt 0.0313 0.2969 +vt 0 0.2969 +vt 0 0.2344 +vt 0.0313 0.2344 +vt 0 0.2969 +vt 0.0313 0.2969 +vt 0.0313 0.2344 +vt 0 0.2344 +vt 0 0.2969 +vt 0 0.2813 +vt 0.0313 0.2813 +vt 0.0313 0.2969 +vt 0.0313 0.25 +vt 0.0313 0.2344 +vt 0 0.2344 +vt 0 0.25 +vt 0.0156 0.2969 +vt 0.0313 0.2969 +vt 0.0313 0.2344 +vt 0.0156 0.2344 +vt 0 0.2969 +vt 0.0156 0.2969 +vt 0.0156 0.2344 +vt 0 0.2344 +vt 0 0.2813 +vt 0.0313 0.2813 +vt 0.0313 0.2656 +vt 0 0.2656 +vt 0 0.2813 +vt 0.0313 0.2813 +vt 0.0313 0.2656 +vt 0 0.2656 +vt 0.0313 0.3234 +vt 0.0313 0.2813 +vt 0 0.2813 +vt 0 0.3234 +vt 0.0313 0.3234 +vt 0.0313 0.2813 +vt 0 0.2813 +vt 0 0.3234 +vt 0.0156 0.2609 +vt 0.0156 0.2188 +vt 0 0.2188 +vt 0 0.2609 +vt 0.0156 0.2609 +vt 0.0156 0.2188 +vt 0 0.2188 +vt 0 0.2609 +vn 0 0.89 -0.45 +vn 0 0.45 0.89 +vn 1 0 0 +vn 0 -0.45 -0.89 +vn 1 0 0 +vn 0 0.89 -0.45 +vn 0 -0.45 -0.89 +vn -1 0 0 +vn 0 0.89 -0.45 +vn 0 0.45 0.89 +vn 0 -0.45 -0.89 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0.89 -0.45 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0.89 -0.45 +vn 0 0 1 +vn 0 -0.13 -0.99 +vn 0 0.13 0.99 +vn 0 0.99 -0.13 +vn -1 0 0 +vn 1 0 0 +vn 0 -0.13 -0.99 +vn 0 0.13 0.99 +vn 0 0.99 -0.13 +vn -1 0 0 +vn 1 0 0 +vn 0 -0.13 -0.99 +vn 0 0.13 0.99 +vn 0 0.99 -0.13 +vn -1 0 0 +vn 1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 0.98 -0.17 +vn 0 -0.98 0.17 +vn 0 -0.17 -0.98 +vn 0 0.17 0.98 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.17 -0.98 +vn 0 0.17 0.98 +vn 1 0 0 +vn -1 0 0 +vn 0 0.95 0.3 +vn 0 -0.95 -0.3 +vn 0 0.3 -0.95 +vn 0 -0.3 0.95 +vn 1 0 0 +vn -1 0 0 +vn 0 0.3 -0.95 +vn 0 -0.3 0.95 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0.98 -0.17 +vn 0 -0.98 0.17 +vn 0 -0.17 -0.98 +vn 0 0.17 0.98 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.17 -0.98 +vn 0 0.17 0.98 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0.99 -0.14 +vn 0 0.99 -0.14 +vn 0 0.99 -0.14 +vn 0 0.99 -0.14 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 1 +vn 0 0 1 +vn 0 0 1 +vn 0 0 1 +vn 1 0 0 +vn 1 0 0 +vn 1 0 0 +vn 1 0 0 +vn -1 0 0 +vn -1 0 0 +vn -1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 -1 0 +vn 0 -1 0 +vn 0 -1 0 +vn 0.97 0.26 0 +vn -0.97 -0.26 0 +vn -0.26 0.97 0 +vn 0.26 -0.97 0 +vn 0 0 -1 +vn 0 0 1 +vn 0.97 0.26 0 +vn -0.97 -0.26 0 +vn -0.26 0.97 0 +vn 0.26 -0.97 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0.97 0.26 0 +vn -0.97 -0.26 0 +vn -0.26 0.97 0 +vn 0.26 -0.97 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +usemtl common_thingies +f 5/1/1 2/2/1 1/3/1 4/4/1 +f 4/5/2 1/6/2 3/7/2 6/8/2 +f 5/9/3 4/10/3 6/11/3 7/12/3 +f 8/13/4 10/14/4 11/15/4 9/16/4 +f 16/17/5 15/18/5 17/19/5 18/20/5 +f 16/21/6 13/22/6 12/23/6 15/24/6 +f 13/25/7 16/26/7 18/27/7 14/28/7 +f 19/29/8 20/30/8 22/31/8 21/32/8 +f 24/33/9 20/34/9 19/35/9 23/36/9 +f 23/37/10 19/38/10 21/39/10 25/40/10 +f 20/41/11 24/42/11 26/43/11 22/44/11 +f 26/45/12 24/46/12 23/47/12 25/48/12 +f 27/49/13 28/50/13 30/51/13 29/52/13 +f 32/53/14 31/54/14 33/55/14 34/56/14 +f 32/57/15 28/58/15 27/59/15 31/60/15 +f 3/61/16 1/62/16 13/63/16 14/64/16 +usemtl typewriter_red +f 38/65/17 36/66/17 35/67/17 37/68/17 +f 41/69/18 39/70/18 40/71/18 42/72/18 +f 35/73/19 36/74/19 40/75/19 39/76/19 +f 37/77/20 35/78/20 39/79/20 41/80/20 +f 42/81/21 40/82/21 36/83/21 38/84/21 +usemtl common_thingies +f 115/85/22 116/86/22 118/87/22 117/88/22 +f 101/89/23 99/90/23 103/91/23 104/92/23 +f 100/93/24 102/94/24 105/95/24 106/96/24 +f 100/97/25 99/98/25 101/99/25 102/100/25 +f 102/101/26 101/102/26 104/103/26 105/104/26 +f 99/105/27 100/106/27 106/107/27 103/108/27 +f 93/109/28 91/110/28 95/111/28 96/112/28 +f 92/113/29 94/114/29 97/115/29 98/116/29 +f 92/117/30 91/118/30 93/119/30 94/120/30 +f 94/121/31 93/122/31 96/123/31 97/124/31 +f 91/125/32 92/126/32 98/127/32 95/128/32 +f 109/129/33 107/130/33 111/131/33 112/132/33 +f 108/133/34 110/134/34 113/135/34 114/136/34 +f 108/137/35 107/138/35 109/139/35 110/140/35 +f 110/141/36 109/142/36 112/143/36 113/144/36 +f 107/145/37 108/146/37 114/147/37 111/148/37 +f 75/149/38 79/150/38 80/151/38 77/152/38 +f 81/153/39 76/154/39 78/155/39 82/156/39 +f 81/157/40 79/158/40 75/159/40 76/160/40 +f 78/161/41 77/162/41 80/163/41 82/164/41 +f 76/165/42 75/166/42 77/167/42 78/168/42 +f 79/169/43 81/170/43 82/171/43 80/172/43 +f 83/173/44 87/174/44 88/175/44 85/176/44 +f 89/177/45 84/178/45 86/179/45 90/180/45 +f 84/181/46 83/182/46 85/183/46 86/184/46 +f 87/185/47 89/186/47 90/187/47 88/188/47 +f 59/189/48 63/190/48 64/191/48 61/192/48 +f 65/193/49 60/194/49 62/195/49 66/196/49 +f 65/197/50 63/198/50 59/199/50 60/200/50 +f 62/201/51 61/202/51 64/203/51 66/204/51 +f 60/205/52 59/206/52 61/207/52 62/208/52 +f 63/209/53 65/210/53 66/211/53 64/212/53 +f 67/213/54 71/214/54 72/215/54 69/216/54 +f 73/217/55 68/218/55 70/219/55 74/220/55 +f 68/221/56 67/222/56 69/223/56 70/224/56 +f 71/225/57 73/226/57 74/227/57 72/228/57 +f 43/229/58 47/230/58 48/231/58 45/232/58 +f 49/233/59 44/234/59 46/235/59 50/236/59 +f 49/237/60 47/238/60 43/239/60 44/240/60 +f 46/241/61 45/242/61 48/243/61 50/244/61 +f 44/245/62 43/246/62 45/247/62 46/248/62 +f 47/249/63 49/250/63 50/251/63 48/252/63 +f 51/253/64 55/254/64 56/255/64 53/256/64 +f 57/257/65 52/258/65 54/259/65 58/260/65 +f 52/261/66 51/262/66 53/263/66 54/264/66 +f 55/265/67 57/266/67 58/267/67 56/268/67 +usemtl common_table +f 120/269/68 119/270/68 115/271/68 117/272/68 +f 121/273/69 122/274/69 118/275/69 116/276/69 +usemtl common_thingies +f 131/277/70 135/278/70 136/279/70 133/280/70 +f 137/281/71 132/282/71 134/283/71 138/284/71 +f 137/285/72 135/286/72 131/287/72 132/288/72 +f 134/289/73 133/290/73 136/291/73 138/292/73 +f 132/293/74 131/294/74 133/295/74 134/296/74 +f 135/297/75 137/298/75 138/299/75 136/300/75 +f 123/301/76 127/302/76 128/303/76 125/304/76 +f 129/305/77 124/306/77 126/307/77 130/308/77 +f 124/309/78 123/310/78 125/311/78 126/312/78 +f 127/313/79 129/314/79 130/315/79 128/316/79 +f 120/317/80 117/318/80 118/319/80 122/320/80 +usemtl common_table +f 119/321/81 120/322/81 141/323/81 142/324/81 +f 141/325/82 122/326/82 121/327/82 142/328/82 +f 116/329/83 139/330/83 143/331/83 144/332/83 +f 143/333/84 140/334/84 121/335/84 144/336/84 +f 139/337/85 115/338/85 146/339/85 145/340/85 +f 119/341/86 140/342/86 145/343/86 146/344/86 +usemtl typewriter_red +f 159/345/87 155/346/87 153/347/87 160/348/87 +f 151/349/88 158/350/88 159/351/88 160/352/88 +f 158/353/89 147/354/89 161/355/89 162/356/89 +f 161/357/90 149/358/90 155/359/90 162/360/90 +f 167/361/91 156/362/91 150/363/91 168/364/91 +f 148/365/92 157/366/92 167/367/92 168/368/92 +f 157/369/93 152/370/93 169/371/93 170/372/93 +f 169/373/94 154/374/94 156/375/94 170/376/94 +f 148/377/95 163/378/95 171/379/95 172/380/95 +f 171/381/96 164/382/96 147/383/96 172/384/96 +f 163/385/97 150/386/97 173/387/97 174/388/97 +f 173/389/98 149/390/98 164/391/98 174/392/98 +f 175/393/99 154/394/99 165/395/99 176/396/99 +f 166/397/100 153/398/100 175/399/100 176/400/100 +f 165/401/101 152/402/101 177/403/101 178/404/101 +f 177/405/102 151/406/102 166/407/102 178/408/102 +f 156/409/103 154/410/103 179/411/103 180/412/103 +f 179/413/104 153/414/104 155/415/104 180/416/104 +f 155/417/105 149/418/105 181/419/105 182/420/105 +f 181/421/106 150/422/106 156/423/106 182/424/106 +usemtl data_input_machine +f 183/425/107 184/426/107 186/427/107 185/428/107 +f 188/429/108 187/430/108 189/431/108 190/432/108 +f 188/433/109 184/434/109 183/435/109 187/436/109 +f 189/437/110 185/438/110 186/439/110 190/440/110 +f 187/441/111 183/442/111 185/443/111 189/444/111 +f 184/445/112 188/446/112 190/447/112 186/448/112 +usemtl common_thingies +f 191/449/113 192/450/113 194/451/113 193/452/113 +f 196/453/114 195/454/114 197/455/114 198/456/114 +f 196/457/115 192/458/115 191/459/115 195/460/115 +f 197/461/116 193/462/116 194/463/116 198/464/116 +f 195/465/117 191/466/117 193/467/117 197/468/117 +f 192/469/118 196/470/118 198/471/118 194/472/118 +f 199/473/119 200/474/119 202/475/119 201/476/119 +f 204/477/120 203/478/120 205/479/120 206/480/120 +f 204/481/121 200/482/121 199/483/121 203/484/121 +f 205/485/122 201/486/122 202/487/122 206/488/122 +f 203/489/123 199/490/123 201/491/123 205/492/123 +f 200/493/124 204/494/124 206/495/124 202/496/124 +f 207/497/125 208/498/125 210/499/125 209/500/125 +f 212/501/126 211/502/126 213/503/126 214/504/126 +f 212/505/127 208/506/127 207/507/127 211/508/127 +f 213/509/128 209/510/128 210/511/128 214/512/128 +f 211/513/129 207/514/129 209/515/129 213/516/129 +f 208/517/130 212/518/130 214/519/130 210/520/130 +f 215/521/131 216/522/131 218/523/131 217/524/131 +f 220/525/132 219/526/132 221/527/132 222/528/132 +f 220/529/133 216/530/133 215/531/133 219/532/133 +f 221/533/134 217/534/134 218/535/134 222/536/134 +f 219/537/135 215/538/135 217/539/135 221/540/135 +f 216/541/136 220/542/136 222/543/136 218/544/136 \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/block/multiblock/data_input_machine/upgrades/data_input_machine.mtl b/src/main/resources/assets/immersiveintelligence/models/block/multiblock/data_input_machine/upgrades/data_input_machine.mtl new file mode 100644 index 000000000..67f69eb55 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/block/multiblock/data_input_machine/upgrades/data_input_machine.mtl @@ -0,0 +1,20 @@ +# Made by Pabilo8 with Blockbench + +newmtl data_input_machine +map_Kd immersiveintelligence:blocks/multiblock/data_input_machine +newmtl circuit_basic +map_Kd immersiveintelligence:blocks/multiblock/circuits/circuit_basic +newmtl common_thingies +map_Kd immersiveintelligence:blocks/common/common_thingies +newmtl common_table +map_Kd immersiveintelligence:blocks/common/common_table +newmtl common_bottom +map_Kd immersiveintelligence:blocks/common/common_bottom +newmtl common_steel +map_Kd immersiveintelligence:blocks/common/common_steel +newmtl common_wooden_base_light +map_Kd immersiveintelligence:blocks/common/common_wooden_base_light +newmtl common_copper_cable +map_Kd immersiveintelligence:blocks/common/common_copper_cable +newmtl typewriter_red +map_Kd immersiveintelligence:blocks/metal_device/typewriter_red \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/block/multiblock/filler/filler.obj.amt b/src/main/resources/assets/immersiveintelligence/models/block/multiblock/filler/filler.obj.amt index d4041a8ef..8c14b4289 100644 --- a/src/main/resources/assets/immersiveintelligence/models/block/multiblock/filler/filler.obj.amt +++ b/src/main/resources/assets/immersiveintelligence/models/block/multiblock/filler/filler.obj.amt @@ -3,7 +3,7 @@ "fan": [27.525, 22, 10], "filling_part": [8, 18.225, -8], "conveyor_off": [-48, 0, -16], - "conveyor_onii": [-48, 0, -16], + "conveyor_on": [-48, 0, -16], "item": [32, 2, -8], "item_out": [32, 2, -8] }, diff --git a/src/main/resources/assets/immersiveintelligence/models/block/multiblock/projectile_workshop/projectile_workshop_inv.obj b/src/main/resources/assets/immersiveintelligence/models/block/multiblock/projectile_workshop/projectile_workshop_inv.obj index 7b5683294..1820204f5 100644 --- a/src/main/resources/assets/immersiveintelligence/models/block/multiblock/projectile_workshop/projectile_workshop_inv.obj +++ b/src/main/resources/assets/immersiveintelligence/models/block/multiblock/projectile_workshop/projectile_workshop_inv.obj @@ -1,4411 +1,6082 @@ # Made by Pabilo8 with Blockbench -# Exported with IIToolkit Plugin +# Exported with IIToolkit Plugin on 03/06/2026 mtllib projectile_workshop.mtl - o main -v -1.0000000034054226 1.5 1.0624999997996811 -v -1.3125 1.6875000008012755 0.24999999519234484 -v -2.0249999984976066 1.75 0.4687500092146717 -v -2.0874999984976066 1.75 0.4687500092146717 -v -2.0249999984976066 1.5625 0.4687500092146717 -v -2.0874999984976066 1.5625 0.4687500092146717 -v -2.0249999984976066 1.75 0.6562500092146717 -v -2.0874999984976066 1.75 0.6562500092146717 -v -2.0249999984976066 1.5625 0.6562500092146717 -v -2.0874999984976066 1.5625 0.6562500092146717 -v -1.0625 2.440625 1.003125 -v -1.0625 1.5031249999999998 1.003125 -v -2 2.440625 1.003125 -v -2 1.5031249999999998 1.003125 -v -2.9375 2.440625 1.003125 -v -2.9375 1.5031249999999998 1.003125 -v -0.9375 1.625 0.0625 -v -0.9375 1.625 0.9375 -v -0.9375 1.5 0.0625 -v -0.0625 1.625 0.0625 -v -0.0625 1.625 0.9375 -v -0.0625 1.5 0.0625 -v -1.25 2.3125 3 -v -1.25 2.3125 2.9375 -v -1.25 1.8125 3 -v -1.25 1.8125 2.9375 -v -1.75 2.3125 3 -v -1.75 2.3125 2.9375 -v -1.75 1.8125 3 -v -1.75 1.8125 2.9375 -v -1.375 2.5 3 -v -1.375 2.5 2.9375 -v -1.375 2.3125 3 -v -1.375 2.3125 2.9375 -v -1.625 2.5 3 -v -1.625 2.5 2.9375 -v -1.625 2.3125 3 -v -1.625 2.3125 2.9375 -v -1.9984374999999996 2.188868931746468 0.0016814376983114165 -v -3.374999999999999 2.25 1.8125 -v 0 1.6875 0.75 -v 0 1.6875 0.0625 -v -6.310047595547985e-9 1.5 0.7500000030047844 -v 0 1.5 0.0625 -v -0.0625 1.6875 0.75 -v -0.0625 1.6875 0.0625 -v -0.0625000063100476 1.5 0.7500000030047844 -v -0.9375 1.6875000000000002 0.75 -v -0.9375 1.6875 0.0625 -v -0.9375000063100476 1.5000000000000002 0.7500000030047844 -v -1 1.6875000000000002 0.75 -v -1 1.6875 0.0625 -v -1.0000000063100476 1.5000000000000002 0.7500000030047844 -v -1 1.5 0.0625 -v -3 1.6875 1 -v -3 1.6875 0.125 -v -3 1.5 1 -v -3 1.5 0.125 -v -3.0625 1.6875 1 -v -3.0625 1.6875 0.125 -v -3.0625 1.5 1 -v -3.0625 1.5 0.125 -v -3 1.6875 1.6875 -v -3.0000000063100476 1.5 1.6875000030047844 -v -3.0625 1.6875 1.6875 -v -3.0625000063100476 1.5 1.6875000030047844 -v -3 1.6875 0.0625 -v -3 1.5 0.0625 -v -3.9375 1.6875 0.125 -v -3.9375 1.6875 0.0625 -v -3.937500000000001 1.5000000015357786 0.12500000013354606 -v -3.9375 1.5 0.0625 -v -3.9375 1.6875 1.6875 -v -3.9375 1.6874999999999998 1 -v -3.9375000063100476 1.5 1.6875000030047844 -v -3.9375 1.4999999999999998 1 -v -4 1.6875 1.6875 -v -4 1.6874999999999998 1 -v -4.000000006310048 1.5 1.6875000030047844 -v -4 1.4999999999999998 1 -v -2 2.434375001001595 1.068749992197576 -v -3.374999999999999 2.4375 1.875 -v -3.374999999999999 2.4375 1.8125 -v -3.374999999999999 2.25 1.875 -v -3.624999999999999 2.4375 1.875 -v -3.624999999999999 2.4375 1.8125 -v -3.624999999999999 2.25 1.875 -v -3.624999999999999 2.25 1.8125 -v -4.000000014122487 2.1875000035055825 1.8749999994992033 -v -3.9375000126200943 2.1875 1.8750000060095693 -v -4.000000012720254 1.5000000040063797 1.8750000030047846 -v -3.937500012620095 1.5 1.8750000060095693 -v -4.000000014122487 2.1875000035055825 1.6874999994992028 -v -3.9375000126200943 2.1875 1.6875000060095688 -v -4.000000012620095 1.8125 1.8750000060095693 -v -4.000000012620095 1.8125 1.6875000060095688 -v -3.937500012620095 1.8125 1.6875000060095688 -v -3.937500012620095 1.8125 1.8750000060095693 -v -3.00000001562488 2.250000007011165 1.8749999929888368 -v -3.000000014122487 2.1875000035055825 1.8749999994992028 -v -4.000000015624879 2.250000007011165 1.8749999929888372 -v -3.00000001562488 2.250000007011165 1.6874999929888368 -v -3.000000014122487 2.1875000035055825 1.6874999994992028 -v -4.000000015624879 2.250000007011165 1.6874999929888368 -v -3.0625000126200943 2.1875 1.8750000060095688 -v -3.062500012620095 1.5 1.8750000060095688 -v -3.000000012720254 1.5000000040063792 1.8750000030047844 -v -3.0625000126200943 2.1875 1.6875000060095688 -v -3.062500012620095 1.8125 1.8750000060095688 -v -3.062500012620095 1.8125 1.6875000060095688 -v -3.000000012620095 1.8125 1.6875000060095688 -v -3.000000012620095 1.8125 1.8750000060095688 -v -1.5593749999999993 2.0625 0 -v -4.000000012820414 2.500000008012759 2.875 -v -4.000000012820414 2.5000000080127585 1.8749999999999998 -v -2.9375000042734705 2.5000000026709195 2.875 -v -2.937500012820414 2.500000008012759 1.8749999999999998 -v -4.000000005475384 1.5000000057424767 2.8750000022702817 -v -2.9375000042734714 1.5000000026709188 2.875 -v -2.937500012820414 1.5000000080127585 1.875 -v -3.000000012820414 2.500000008012759 1.8749999999999998 -v -3.000000012820414 1.5000000080127585 2.875 -v -3.000000012820414 2.500000008012759 2.875 -v -2 3.25 1.0562500000000001 -v -2 2.6875 1.05625 -v -2.624999999999999 3.25 1.0562500000000001 -v -2.624999999999999 2.6875 1.05625 -v -0.375 2.4375 0.9375 -v -0.375 2.4375 0.875 -v -0.375 2.25 0.9375 -v -0.375 2.25 0.875 -v -0.625 2.4375 0.9375 -v -0.625 2.4375 0.875 -v -0.625 2.25 0.9375 -v -0.625 2.25 0.875 -v -1.5624880056464008e-8 2.250000007011165 0.9374999929888368 -v -1.4122487179690779e-8 2.1875000035055825 0.9374999994992028 -v -1.00000001562488 2.250000007011165 0.9374999929888368 -v -1.0000000141224872 2.1875000035055825 0.937499999499203 -v -1.5624880056464008e-8 2.250000007011165 0.7499999929888368 -v -1.4122487179690779e-8 2.1875000035055825 0.7499999994992028 -v -1.00000001562488 2.250000007011165 0.7499999929888368 -v -1.0000000141224872 2.1875000035055825 0.7499999994992028 -v -0.06250001262009475 2.1875 0.9375000060095688 -v -0.06250001262009519 1.5 0.9375000060095688 -v -6.310047595547985e-9 1.5 0.9375000030047844 -v -0.06250001262009475 2.1875 0.7500000060095688 -v -0.06250001262009519 1.8125 0.9375000060095688 -v -0.06250001262009519 1.8125 0.7500000060095688 -v -1.262009519109597e-8 1.8125 0.7500000060095688 -v -1.262009519109597e-8 1.8125 0.9375000060095688 -v -0.9375000126200952 2.1875 0.9375000060095693 -v -1.0000000126200952 1.5 0.9375000060095693 -v -0.9375000063100476 1.5 0.9375000030047846 -v -0.9375000126200952 2.1875 0.7500000060095688 -v -1.0000000126200952 1.8125 0.9375000060095693 -v -1.0000000126200952 1.8125000000000002 0.7500000060095688 -v -0.9375000126200952 1.8125000000000002 0.7500000060095688 -v -0.9375000126200952 1.8125 0.9375000060095693 -v -0.06249999999999911 1.4375000032050993 1.5000000002003155 -v -0.9375 3.375 1.0625 -v -0.9375 3.375 0.9375 -v -0.9375 2.4375 1.0625 -v -0.9375 2.4375 0.9375 -v -1.9375 3.4999999999999996 2 -v -1.9375 3.5 1.0625 -v -1.9375 1.5 1.0625 -v -2.9375 3.5 2 -v -2.9375 3.5 1.0625 -v -2.9375000008513563 1.4999999999999991 1.0609374999499204 -v -2.93750000170271 2.5 1.0624999998998406 -v -1.9375 2.5000000000000004 1.0625 -v -2.937499999999999 2.5 2 -v -2.9375 1.4999999999999991 1.9999999999999998 -v -1.9375 3.4999999999999996 2.9374999999999996 -v -2.9375 3.5 2.9374999999999996 -v -2.9374999999999982 2.5 2.9375 -v -2.9375 1.4999999999999991 2.9375 -v -1.9375 1.5 2.9375 -v -1.9375 2.5 2.9375 -v -0.9375 3.5 2 -v -0.9375 3.5 1.0625 -v -0.9375 1.5000000000000002 1.9999999999999998 -v -0.9375 1.5 1.0625 -v -0.9375 2.5 1.0625 -v -0.9375 2.5 2 -v -0.9375 3.5 2.9374999999999996 -v -0.9375 2.5 2.9375 -v -1.687499994951854 4.4375 2.2500000030288874 -v -1.687499994951854 4.4375 2.8750000030288874 -v -1.6874999899037082 3.9999999999999987 2.250000006057775 -v -1.6874999899037082 3.999999999999999 2.875000006057775 -v -1.062499994951854 4.4375 2.2500000030288874 -v -1.062499994951854 4.4375 2.8750000030288874 -v -1.0624999899037082 3.9999999999999987 2.250000006057775 -v -1.0624999899037082 3.999999999999999 2.875000006057775 -v -1.0000000122194557 4.000000011217862 2.9374999887821382 -v -1.0000000122194557 3.5000000112178613 2.9374999887821382 -v -1.8750000122194557 4.000000011217862 2.9374999887821382 -v -1.8750000122194557 3.5000000112178613 2.9374999887821382 -v -1.0000000122194557 4.000000011217862 2.1249999887821387 -v -1.0000000122194557 3.5000000112178613 2.1249999887821387 -v -1.8750000122194557 4.000000011217862 2.1249999887821387 -v -1.8750000122194557 3.5000000112178618 2.1249999887821387 -v -1.4375000122194557 4.000000011217862 2.1249999887821387 -v -1.4375000122194557 3.5000000112178613 2.1249999887821387 -v -1.4375000122194557 3.500000011217861 2.9374999887821382 -v -1.4375000122194557 4.000000011217862 2.9374999887821382 -v -1.4375000122194557 3.7500000112178613 2.1249999887821387 -v -1.8750000122194557 3.7500000112178618 2.1249999887821387 -v -1.8750000122194557 3.7500000112178618 2.9374999887821382 -v -1.4375000122194557 3.7500000112178613 2.9374999887821382 -v -1.0000000122194557 3.7500000112178613 2.9374999887821382 -v -1.0000000122194557 3.7500000112178613 2.1249999887821387 -v -1.8750000122194557 3.750000011217862 2.5624999887821382 -v -1.8750000122194557 3.5000000112178618 2.5624999887821382 -v -1.0000000122194557 3.5000000112178613 2.5624999887821382 -v -1.0000000122194557 3.7500000112178618 2.5624999887821382 -v -1.0000000122194557 4.000000011217862 2.5624999887821382 -v -1.4375000122194557 4.000000011217862 2.5624999887821382 -v -1.8750000122194557 4.000000011217862 2.5624999887821382 -v -1.125 4.5 2.8124999999999996 -v -1.125 4.5 2.3125 -v -1.625 4.5 2.8124999999999996 -v -1.625 4.5 2.3125 -v -2.625000002804464 3.1250000035389682 3.125 -v -2.625000004206697 3.125000005308453 2.9375 -v -2.624999999999999 1.999999999999999 3.125 -v -2.624999999999999 1.999999999999999 2.9375 -v -2.812499999999999 3.125 3.125 -v -2.812499999999999 3.125 2.9375 -v -2.812499999999999 1.9999999999999991 3.125 -v -2.812499999999999 1.9999999999999991 2.9375 -v -2.624999999999999 2.5625 3.125 -v -2.812499999999999 2.5625 3.125 -v -2.812499999999999 2.5625 2.9375 -v -2.624999999999999 2.5625 2.9375 -v -2.624999999999999 1.937499999999999 3.125 -v -2.625 1.812499999999999 2.9375 -v -2.812499999999999 1.9374999999999991 3.125 -v -2.8125 1.8124999999999991 2.9375 -v -2.625000004206697 3.312500005308453 3.125 -v -2.625000004206697 3.312500005308453 2.9375 -v -1.687500002804466 3.312500003538967 3.125 -v -1.687500004206698 3.3125000053084515 2.9375 -v -1.687500004206698 3.1250000053084515 3.125 -v -1.687500004206698 3.1250000053084515 2.9375 -v -1.6875000066186807 3.6874999969711117 3.1249999999999996 -v -1.6875000066186807 3.6874999969711117 2.9374999999999996 -v -1.6875000132373614 3.812499993942224 3.1249999999999996 -v -1.6875000132373614 3.874999993942224 2.9374999999999996 -v -1.5000000066186807 3.687499996971112 3.1249999999999996 -v -1.5000000066186807 3.687499996971112 2.9374999999999996 -v -1.5000000132373614 3.812499993942225 3.1249999999999996 -v -1.5000000132373614 3.874999993942225 2.9374999999999996 -v -1.5 3.312499999999999 3.125 -v -1.5 3.312499999999999 2.9375 -v -1.0625000066186807 3.687499996971112 3.1249999999999996 -v -1.0625000066186807 3.687499996971112 2.9374999999999996 -v -1.0625 2.874999999999999 3.125 -v -1.0625 2.874999999999999 2.9375 -v -1.2500000066186807 3.6874999969711117 3.1249999999999996 -v -1.2500000066186807 3.6874999969711117 2.9374999999999996 -v -1.2500000024038274 2.875000003071557 3.125 -v -1.2500000036057415 2.8750000046073354 2.9375 -v -2.2500000036057406 2.875000004607336 3.125 -v -2.2500000036057406 2.875000004607336 2.9375 -v -2.2500000024038274 2.6875000030715572 3.125 -v -2.2500000036057415 2.687500004607336 2.9375 -v -1.2500000036057415 2.6875000046073354 3.125 -v -1.2500000036057415 2.6875000046073354 2.9375 -v -2.25 2 3.125 -v -2.25 2 2.9375 -v -2.4375 2.6874999999999996 3.125 -v -2.4375 2.6874999999999996 2.9375 -v -2.4375 2 3.125 -v -2.4375 2 2.9375 -v -2.437499999999999 2.8124999999999996 3.125 -v -2.437499999999999 2.8124999999999996 2.9375 -v -2.25 1.9375 3.125 -v -2.25 1.8124999999999998 2.9375 -v -2.4375 1.9375 3.125 -v -2.4375 1.8124999999999998 2.9375 -v -2.812499999999999 3.25 3.125 -v -2.812499999999999 3.25 2.9375 -v -1.5 3.187499999999999 3.125 -v -1.5 3.187499999999999 2.9375 -v -1.0625 2.749999999999999 3.125 -v -1.0625 2.749999999999999 2.9375 -v -1.2500000132373614 3.812499993942224 3.1249999999999996 -v -1.2500000132373614 3.874999993942224 2.9374999999999996 -v -1.0625000132373614 3.812499993942225 3.1249999999999996 -v -1.0625000132373614 3.874999993942225 2.9374999999999996 -v -2.8750000036057415 1.437500004607335 2.9375 -v -2.8750000036057415 1.437500004607335 2.875 -v -4.0000000036057415 1.4375000046073356 2.9375 -v -4.00000000180287 1.4375000046073356 2.8750000034054226 -v -2.8750000036057415 1.500000004607335 2.9375 -v -2.8750000036057415 1.500000004607335 2.875 -v -4.00000000180287 1.5000000023036681 2.9375 -v 4.440892098500626e-16 1.000781250400638 0 -v 0 0.5000000016025519 -8.881784197001252e-16 -v 4.440892098500626e-16 1.0000000016025514 1.4999999999999967 -v 0 0.5000000016025514 1.499999999999996 -v -2 1.000000001602551 -4.440892098500626e-16 -v -2 0.500000001602551 -8.881784197001252e-16 -v -2 0.5000000016025512 1.499999999999996 -v -2 0.7500000016025509 -8.881784197001252e-16 -v 0 0.7500000016025514 1.4999999999999962 -v 0 0.7500000016025519 -8.881784197001252e-16 -v -3.999999999999999 1.000781250400638 0 -v -3.999999999999999 0.5000000016025519 -8.881784197001252e-16 -v -3.999999999999999 1.0000000016025519 1.4999999999999971 -v -3.999999999999999 0.5000000016025519 1.4999999999999962 -v -3.999999999999999 0.7500000016025518 -8.881784197001252e-16 -v -3.999999999999999 0.7500000016025518 1.4999999999999964 -v -2 1.0000000005341825 2.999999999999998 -v -2 0.5000000008012732 2.9999999999999964 -v 8.881784197001252e-16 1.000781250400637 2.9999999999999982 -v 4.440892098500626e-16 0.5000000016025472 2.999999999999992 -v 4.440892098500626e-16 0.7500000016025475 2.999999999999993 -v -2 0.7500000016025465 2.999999999999994 -v -3.9999999999999982 1.0000000005341838 2.937499999999998 -v -3.999999999999999 0.5000000008012739 2.9374999999999964 -v -1.9999999999999991 1.0000000012019115 2.9375000012019106 -v -2 0.5000000008012742 2.937499999999996 -v -2 0.7500000016025483 2.937499999999994 -v -3.999999999999999 0.7500000016025483 2.937499999999994 -v -3 0.7500000016025483 2.937499999999994 -v -3 0.5000000005341825 2.937499999999998 -v -3 0.5000000016025519 1.4999999999999933 -v -2.9999999999999982 1.0000000024038234 2.9375000024038234 -v 0 1 0.062499999999999556 -v -3.999999999999999 1 0.062499999999999556 -v 4.440892098500626e-16 1 2.9374999999999996 -v -0.062499999999999556 1 2.937499999999999 -v -0.0625 1 0.06249999999999911 -v -3.9375 1.0000000010683676 2.937500001602551 -v -3.937499999999999 1 0.06249999999999911 -v -3.125000008413397 1.4375000046073354 0 -v 0 1.5015625023036687 0.12500000020031887 -v 0 1.5031250000000007 0 -v 8.881784197001252e-16 1.0031249999999998 0.125 -v -0.125 1.5031249999999998 0.125 -v -0.12500000020031887 1.5015625023036678 0 -v -0.125 1.0031249999999998 0.125 -v -0.125 1.0031249999999998 0 -v 0 1.5031250000000007 3 -v 0 1.5015625023036687 2.8750000034054226 -v 8.881784197001252e-16 1.0031250000000007 2.875 -v -0.12500000020031887 1.5015625023036678 3 -v -0.125 1.5031249999999998 2.875 -v -0.125 1.0031250000000007 3 -v -0.125 1.0031250000000007 2.875 -v 0 1.5000000046073367 2.1250000052082934 -v 0 1.4375000046073367 2.1250000052082934 -v 0 1.4375000046073367 2.875000006810845 -v -0.0625 1.5000000046073367 2.1250000052082934 -v -0.0625 1.4375000046073367 2.1250000052082934 -v -0.0625 1.5000000046073367 2.875000006810845 -v -0.0625 1.4375000046073367 2.875000006810845 -v 0 1.4375000046073367 0.12500000040063775 -v 0 1.5000000046073363 1.1250000020031896 -v 0 1.4375000046073363 1.12500000200319 -v -0.0625 1.5000000046073367 0.12500000040063775 -v -0.0625 1.4375000046073367 0.12500000040063775 -v -0.0625 1.5000000046073363 1.1250000020031896 -v -0.0625 1.4375000046073363 1.12500000200319 -v -0.12500000040063775 1.4375000046073358 0.0625 -v -0.12500000040063775 1.4375000046073358 0 -v -1.1250000020031896 1.4375000046073358 0.0625 -v -1.1250000020031896 1.4375000046073358 0 -v -0.12500000040063775 1.5000000046073358 0.0625 -v -1.1250000020031896 1.5000000046073358 0.0625 -v -1.1250000020031896 1.5000000046073358 0 -v -3.125000008413397 1.4375000046073354 0.0625 -v -3.87500001001595 1.4375000046073358 0.0625 -v -3.87500001001595 1.4375000046073358 0 -v -3.125000008413397 1.5000000046073354 0.0625 -v -3.125000008413397 1.5000000046073354 0 -v -3.87500001001595 1.5000000046073358 0.0625 -v -3.8750000050079754 1.5015625023036678 0 -v -2.1250000052082934 1.4375000046073354 0.0625 -v -2.1250000052082934 1.4375000046073354 0 -v -2.1250000052082934 1.5000000046073358 0.0625 -v -2.1250000052082934 1.5000000046073358 0 -v -3.937500000000001 1.4375000046073358 0.12500000040063775 -v -3.937500000000001 1.5000000046073356 1.1250000020031896 -v -3.937500000000001 1.4375000046073363 1.12500000200319 -v -3.999999999999999 1.5015625023036678 0.12500000020031887 -v -3.999999999999999 1.4375000046073358 0.12500000040063775 -v -3.999999999999999 1.5000000046073356 1.1250000020031896 -v -3.999999999999999 1.437500004607336 1.12500000200319 -v -3.937500000000001 1.5000000046073358 2.1250000052082934 -v -3.937500000000001 1.4375000046073358 2.1250000052082934 -v -3.999999999999999 1.5000000046073358 2.1250000052082934 -v -3.999999999999999 1.4375000046073358 2.1250000052082934 -v -3.937500000000001 1.5000000046073356 2.875000006810845 -v -3.937500000000001 1.4375000046073356 2.875000006810845 -v -0.12500000040063775 1.4375000046073358 3 -v -0.12500000040063775 1.4375000046073358 2.9375 -v -1.1250000020031896 1.4375000046073358 3 -v -1.1250000020031896 1.4375000046073358 2.9375 -v -0.12500000040063775 1.5000000046073367 2.9375 -v -1.1250000020031896 1.5000000046073358 3 -v -1.1250000020031896 1.5000000046073358 2.9375 -v -2.0000000036057415 1.4375000046073358 3 -v -2.0000000012019097 1.4375000036725156 2.9375000016693247 -v -2.0000000018028707 1.500000002303668 3 -v -2.0000000018028707 1.5000000023036684 2.9375 -v -3.937500000000001 1.0000000032050993 1.5000000048076547 -v -3.937499999999999 1.4375000032051037 1.5000000025039901 -v -3.9374999999999956 1.437500003205101 2.937500004807654 -v -2.9999999999999956 1.4375000032050984 2.937500004807651 -v -3.937500000000001 1.2500000032050993 1.5000000048076547 -v -3.9374999999999956 1.2500000032051009 2.9375000048076547 -v -2.9999999999999956 1.2500000032050984 2.937500004807652 -v -1.9999999999999964 1.2500000032050966 2.9375000048076494 -v -3.937500000000006 0.9375000032051028 0.06250000020032775 -v -3.937500000000006 1.4375000032051028 0.06250000020032553 -v -3.937500000000001 0.937500003205109 1.5000000002003278 -v -2.0000000000000053 0.937500003205098 0.06250000020031932 -v -2.0000000000000044 1.4375000032050975 0.06250000020031798 -v -3.937500000000006 1.1875000032051028 0.06250000020032687 -v -2.0000000000000044 1.1875000032050975 0.06250000020031887 -v -3.937500000000001 1.1875000032051082 1.5000000002003269 -v -0.06250000000000444 0.9375000032050957 0.06250000020031354 -v -0.06250000000000355 1.4375000032050957 0.0625000002003131 -v -0.06250000000000089 0.9375000032050992 1.5000000002003162 -v -0.06250000000000311 1.1875000032050957 0.0625000002003131 -v -0.06249999999999911 1.1875000032050993 1.500000000200316 -v -1.9999999999999947 0.9375000032051144 2.9375000002003278 -v -0.06249999999999467 0.9375000032051082 2.937500000200319 -v -0.062499999999992895 1.4375000032051073 2.937500000200317 -v -1.9999999999999938 1.1875000032051144 2.937500000200327 -v -0.06249999999999334 1.1875000032051073 2.937500000200318 -v -3.875 1.5031249999999998 0.125 -v -3.875000000000001 1.0031249999999998 0.125 -v -3.875000000000001 1.0031249999999998 0 -v -3.999999999999999 1.5031249999999998 0 -v -3.999999999999999 1.0031249999999998 0.125 -v -3.999999999999999 0.4999999999999998 3 -v -3.999999999999999 0.625 3 -v -3.999999999999999 0.625 2.9375 -v -3 0.49999999999999956 3 -v -3 0.6249999999999998 3 -v -3 0.6249999999999996 2.9375 -v -2.875 1.375 3 -v -2.875 1.375 2.9375 -v -2.875 0.625 3 -v -2.875 0.625 2.9375 -v -3 1.375 3 -v -3.125 1.375 3 -v -3.125 1.375 2.9375 -v -3.125 0.6249999999999991 3 -v -3.125 0.6249999999999991 2.9375 -v -2 0.625 3 -v -2 0.625 2.9375 -v -2 1.375 3 -v -2 1.375 2.9375 -v -2.125 1.375 3 -v -2.125 1.375 2.9375 -v -2.125 0.625 3 -v -2.125 0.625 2.9375 -v -3 1.5 3 -v -3 1.5 2.9375 -v -3 1.375 2.9375 -v -3.999999999999999 1.5000000000000007 3 -v -3.999999999999999 1.3750000000000009 3 -v -3.999999999999999 1.3750000000000009 2.9375 -v -3.875000000000001 1.3750000000000009 3 -v -3.875000000000001 1.3750000000000009 2.9375 -v -3.874999999999999 0.6250000000000009 3 -v -3.874999999999999 0.6250000000000009 2.9375 -v -3.25 1.25 3.0125 -v -3.25 1.25 2.95 -v -3.25 0.7500000000000001 3.0125 -v -3.25 0.7500000000000001 2.95 -v -3.750000000000001 1.2500000000000009 3.0125 -v -3.750000000000001 1.2500000000000009 2.95 -v -3.749999999999999 0.7500000000000009 3.0125 -v -3.749999999999999 0.7500000000000009 2.95 -v -2.25 1.25 3.0125 -v -2.25 1.2499999999999998 2.95 -v -2.25 0.75 3.0125 -v -2.25 0.75 2.95 -v -2.75 1.25 3.0125 -v -2.75 1.25 2.95 -v -2.75 0.7500000000000001 3.0125 -v -2.75 0.7500000000000001 2.95 -v -1.0625 2.4968750010015945 0.31874999219757605 -v -1.0625 2.4343750010015945 0.31874999219757605 -v -1.0625 2.4968750010015945 1.068749992197576 -v -1.0625 2.4343750010015945 1.068749992197576 -v -2 2.4968750010015945 0.31874999219757605 -v -2 2.4343750010015945 0.31874999219757605 -v -2 2.496875001001595 1.068749992197576 -v -1.5 2.4968750010015945 0.31874999219757605 -v -1.5 2.4968750010015945 1.068749992197576 -v -1.5 2.4343750010015945 1.068749992197576 -v -1.5 2.4343750010015945 0.31874999219757605 -v -1.0625 2.4554029064378895 0.3569162659898968 -v -1.0625000017027117 2.4997985401310245 0.3126110459827096 -v -1.0625 2.146043689668776 0.04755704922078241 -v -1.0617187517027116 2.188184465873234 0.000840718748996494 -v -2 2.4554029064378895 0.3569162659898968 -v -2 2.499597080262049 0.31272209216573765 -v -2 2.146043689668776 0.04755704922078241 -v -1.5625 2.499597080262049 0.31272209216573765 -v -1.5609374999999996 2.188868931746468 0.0016814376983114165 -v -1.5625 2.146043689668776 0.04755704922078241 -v -1.5625 2.4554029064378895 0.3569162659898968 -v -2.937499999999999 2.4968750010015945 0.31874999219757605 -v -2.937499999999999 2.4343750010015945 0.31874999219757605 -v -2.937499999999999 2.4968750010015945 1.068749992197576 -v -2.937499999999999 2.4343750010015945 1.068749992197576 -v -2.4375 2.4968750010015945 0.31874999219757605 -v -2.4375 2.496875001001595 1.068749992197576 -v -2.4375 2.434375001001595 1.068749992197576 -v -2.4375 2.4343750010015945 0.31874999219757605 -v -2.937499999999999 2.4554029064378895 0.3569162659898968 -v -2.93750000170271 2.4997985401310245 0.3126110459827096 -v -2.937499999999999 2.146043689668776 0.04755704922078241 -v -2.9367187517027107 2.188184465873234 0.000840718748996494 -v -2.5 2.499597080262049 0.31272209216573765 -v -2.4984374999999996 2.188868931746468 0.0016814376983114165 -v -2.5 2.146043689668776 0.04755704922078241 -v -2.5 2.4554029064378895 0.3569162659898968 -v -2.125 2.3750000000000004 1 -v -1.9968750000000002 2.0625 0.0625 -v -1.9968750000000002 2.0625 0 -v -2.934375 2.0625 0.0625 -v -2.934375 2.0625 0 -v -1.9968750000000002 2.1875 0.0625 -v -2.934375 2.1875 0.0625 -v -2.4968749999999993 2.0625 0 -v -2.4968749999999993 2.0625 0.0625 -v -2.4968749999999993 2.1875 0.0625 -v -1.0593750000000002 2.0625 0.0625 -v -1.0593750000000002 2.0625 0 -v -1.0593750000000002 2.1875 0.0625 -v -1.5593749999999993 2.0625 0.0625 -v -1.5593749999999993 2.1875 0.0625 -v -1.0249999999999995 1.6875 1 -v -1.0249999999999995 1.6875000000000002 0.875 -v -1.9624999999999995 1.6874999999999998 1 -v -1.9624999999999995 1.6875 0.875 -v -1.0249999999999995 1.8125 1 -v -1.0249999999999995 1.8125000000000002 0.875 -v -1.9624999999999995 1.8125 1 -v -1.9624999999999995 1.8125 0.875 -v -1.8999999984976066 1.84375 0.8437500092146717 -v -1.9624999984976066 1.84375 0.8437500092146717 -v -1.8999999984976066 1.65625 0.8437500092146717 -v -1.9624999984976066 1.65625 0.8437500092146717 -v -1.8999999984976066 1.84375 1.0312500092146717 -v -1.9624999984976066 1.84375 1.0312500092146717 -v -1.8999999984976066 1.65625 1.0312500092146717 -v -1.9624999984976066 1.65625 1.0312500092146717 -v -1.0499999984976052 1.8437500000000002 0.8437500092146717 -v -1.1124999984976052 1.8437500000000002 0.8437500092146717 -v -1.0499999984976052 1.6562500000000002 0.8437500092146717 -v -1.1124999984976052 1.6562500000000002 0.8437500092146717 -v -1.0499999984976052 1.84375 1.0312500092146717 -v -1.1124999984976052 1.84375 1.0312500092146717 -v -1.0499999984976052 1.65625 1.0312500092146717 -v -1.1124999984976052 1.65625 1.0312500092146717 -v -1.0625 1.6875000008012757 0.24999999519234484 -v -1.0625 1.5000000008012757 0.24999999519234484 -v -1.0625 1.6875000008012757 0.8124999951923448 -v -1.0625 1.5000000008012757 0.8124999951923448 -v -1.5625 1.6875000008012755 0.24999999519234484 -v -1.5625 1.5000000008012755 0.24999999519234484 -v -1.5625 1.6875000008012755 0.8124999951923448 -v -1.5625 1.5000000008012757 0.8124999951923448 -v -1.0625 1.6875000008012757 0.5624999951923448 -v -1.5625 1.6875000008012755 0.5624999951923448 -v -1.5625 1.5000000008012755 0.5624999951923448 -v -1.0625 1.5000000008012757 0.5624999951923448 -v -1.3125 1.6875000008012755 0.5624999951923448 -v -1.3125 1.5000000008012755 0.24999999519234484 -v -1.3125 1.5000000008012757 0.8124999951923448 -v -1.3125 1.6875000008012757 0.8124999951923448 -v -1.625 2.3125 0.9375 -v -1.625 2.3125 0.875 -v -1.625 2.0625 0.9375 -v -1.625 2.0625 0.875 -v -1.875 2.3125 0.9375 -v -1.875 2.3125 0.875 -v -1.875 2.0625 0.9375 -v -1.875 2.0625 0.875 -v -1.1875 2.3125 0.9375 -v -1.1875 2.3125 0.875 -v -1.1875 1.9375 0.9375 -v -1.1875 1.9375000000000002 0.875 -v -1.5625 2.3125 0.9375 -v -1.5625 2.3125 0.875 -v -1.5625 1.9375 0.9375 -v -1.5625 1.9375000000000002 0.875 -v -1.125 2.375 1.0625 -v -1.125 2.375 0.9375 -v -1.125 1.875 1.0625 -v -1.125 1.875 0.9375 -v -1.875 2.3750000000000004 1.0625 -v -1.875 2.375 0.9375 -v -1.875 1.875 1.0625 -v -1.875 1.875 0.9375 -v -1.875 2.125 0.9375 -v -1.125 2.125 0.9375 -v -1.125 2.125 1.0625 -v -1.875 2.1250000000000004 1.0625 -v -1.5 2.125 0.9375 -v -1.5 1.875 0.9375 -v -1.5 1.875 1.0625 -v -1.5 2.375 1.0625 -v -1.5 2.375 0.9375 -v -1.6875 1.656250000701116 0.4374999975460927 -v -1.6875 1.531250000701116 0.4374999975460927 -v -1.6875 1.656250001402232 1.0624999950921854 -v -1.6875 1.531250001402232 1.0624999950921854 -v -1.8124999983640615 1.6562500024038274 0.43749999836406195 -v -1.8124999983640615 1.5312500024038274 0.43749999836406195 -v -1.8125 1.656250001402232 1.0624999950921854 -v -1.8125 1.531250001402232 1.0624999950921854 -v -1.8999999984976066 1.6875 0.2812500092146717 -v -1.9624999984976066 1.6875 0.2812500092146717 -v -1.8999999984976066 1.5 0.2812500092146717 -v -1.9624999984976066 1.5 0.2812500092146717 -v -1.8999999984976066 1.6875 0.4687500092146717 -v -1.9624999984976066 1.6875 0.4687500092146717 -v -1.8999999984976066 1.5 0.4687500092146717 -v -1.9624999984976066 1.5 0.4687500092146717 -v -1.8124999975460927 1.531250002904625 0.3125 -v -1.9999999950921854 1.53125000580925 0.4375 -v -1.9999999950921854 1.53125000580925 0.3125 -v -1.8124999975460927 1.656250002904625 0.3125 -v -1.9999999950921854 1.65625000580925 0.4375 -v -1.9999999950921854 1.65625000580925 0.3125 -v -1.75 1.65625 0.3125 -v -1.75 1.53125 0.3125 -v -1.8374999984976066 1.6875 0.9687500092146717 -v -1.8374999984976066 1.6875 1.0312500092146717 -v -1.8374999984976066 1.5 0.9687500092146717 -v -1.8374999984976066 1.5 1.0312500092146717 -v -1.6499999984976066 1.6875 0.9687500092146717 -v -1.6499999984976066 1.6875 1.0312500092146717 -v -1.6499999984976066 1.5 0.9687500092146717 -v -1.6499999984976066 1.5 1.0312500092146717 -v -1.9641801768540965 2.328228081796288 0.7037948700657086 -v -1.9329301768540965 2.328228081796288 0.7037948700657086 -v -1.9641801768540965 1.7705403472735197 0.7772158531894875 -v -1.9329301768540965 1.7705403472735197 0.7772158531894875 -v -1.9641801768540965 2.2711228727000154 0.27003774321466656 -v -1.9329301768540965 2.2711228727000154 0.27003774321466656 -v -1.9641801768540965 1.713435138177248 0.34345872633844543 -v -1.9329301768540965 1.713435138177248 0.34345872633844543 -v -1.9625000034054212 2.5000000000000004 1.0624999997996811 -v -2.025000003405421 2.5000000000000004 1.0624999997996811 -v -1.9625000034054212 2.1875000000000004 1.0624999997996811 -v -2.025000003405421 2.1875000000000004 1.0624999997996811 -v -1.9625000034054212 2.5 0.3124999997996811 -v -2.025000003405421 2.5 0.3124999997996811 -v -1.9625000034054212 2.1875 -2.0031887260074654e-10 -v -2.025000003405421 2.1875 -2.0031887260074654e-10 -v -1.9625000034054212 1.5 1.0624999997996811 -v -2.025000003405422 1.5 1.0624999997996811 -v -1.9625000034054212 1.5 -2.0031887260074654e-10 -v -2.025000003405422 1.5 -2.0031887260074654e-10 -v -3.000000003405421 2.499999999999999 1.0624999997996811 -v -2.937500003405421 2.1875 1.0624999997996811 -v -3.000000003405421 2.187499999999999 1.0624999997996811 -v -3.000000003405421 2.499999999999999 0.3124999997996811 -v -3.000000003405421 2.187499999999999 -2.0031887260074654e-10 -v -3.0000000034054226 1.4999999999999991 1.0624999997996811 -v -2.9375000034054226 1.4999999999999991 -2.0031887260074654e-10 -v -3.0000000034054226 1.4999999999999991 -2.0031887260074654e-10 -v -2.562499999999999 2.3750000000000004 1 -v -2.562499999999999 2.375 0.8125 -v -2.562499999999999 1.874999999999999 1 -v -2.562499999999999 1.8749999999999991 0.8125 -v -2.937499999999999 2.375 1 -v -2.937499999999999 2.375 0.8125 -v -2.937499999999999 1.8749999999999991 1 -v -2.937499999999999 1.8749999999999993 0.8125 -v -2.125 2.375 0.8125 -v -2.125 1.8749999999999998 1 -v -2.125 1.875 0.8125 -v -2.5 2.3750000000000004 1 -v -2.5 2.375 0.8125 -v -2.5 1.8749999999999998 1 -v -2.5 1.875 0.8125 -v -2 1.7499999999999998 1 -v -2 1.75 0.875 -v -2.9375 1.7499999999999991 1 -v -2.9375 1.7499999999999993 0.875 -v -2 1.875 1 -v -2 1.875 0.875 -v -2.937499999999999 1.8749999999999993 0.875 -v -2.0249999984976066 1.90625 0.8437500092146717 -v -2.0874999984976066 1.90625 0.8437500092146717 -v -2.0249999984976066 1.71875 0.8437500092146717 -v -2.0874999984976066 1.71875 0.8437500092146717 -v -2.0249999984976066 1.90625 1.0312500092146717 -v -2.0874999984976066 1.9062499999999998 1.0312500092146717 -v -2.0249999984976066 1.7187499999999998 1.0312500092146717 -v -2.0874999984976066 1.7187499999999998 1.0312500092146717 -v -2.874999998497608 1.9062499999999993 0.8437500092146717 -v -2.937499998497608 1.9062499999999993 0.8437500092146717 -v -2.874999998497608 1.7187499999999998 0.8437500092146717 -v -2.937499998497608 1.7187499999999998 0.8437500092146717 -v -2.874999998497608 1.9062499999999991 1.0312500092146717 -v -2.937499998497608 1.9062499999999991 1.0312500092146717 -v -2.874999998497608 1.7187499999999991 1.0312500092146717 -v -2.937499998497608 1.7187499999999991 1.0312500092146717 -v -2.874999998497608 1.7187500000000002 0.6562500092146717 -v -2.937499998497608 1.7187500000000002 0.6562500092146717 -v -2.874999998497608 1.5312500000000002 0.6562500092146717 -v -2.937499998497608 1.5312500000000002 0.6562500092146717 -v -2.874999998497608 1.5312500000000002 0.8437500092146717 -v -2.937499998497608 1.5312500000000002 0.8437500092146717 -v -2.874999998497608 1.6874999999999993 0.2812500092146717 -v -2.937499998497608 1.6874999999999991 0.2812500092146717 -v -2.874999998497608 1.4999999999999993 0.2812500092146717 -v -2.937499998497608 1.4999999999999991 0.2812500092146717 -v -2.874999998497608 1.6874999999999993 0.4687500092146717 -v -2.937499998497608 1.6874999999999993 0.4687500092146717 -v -2.874999998497608 1.4999999999999993 0.4687500092146717 -v -2.937499998497608 1.4999999999999993 0.4687500092146717 -v -2.8750000049078146 1.656249993189155 0.4375 -v -2.8750000049078146 1.656249993189155 0.3125 -v -2.087500004907814 1.6562499931891548 0.4375 -v -2.087500004907814 1.6562499931891548 0.3125 -v -2.8750000049078146 1.531249993189155 0.4375 -v -2.8750000049078146 1.531249993189155 0.3125 -v -2.087500004907814 1.5312499931891548 0.4375 -v -2.087500004907814 1.5312499931891548 0.3125 -v -2.0249999984976066 1.6875 0.2812500092146717 -v -2.0874999984976066 1.6875 0.2812500092146717 -v -2.0249999984976066 1.5 0.2812500092146717 -v -2.0874999984976066 1.5 0.2812500092146717 -v -2.0249999984976066 1.6875 0.4687500092146717 -v -2.0874999984976066 1.6875 0.4687500092146717 -v -2.0249999984976066 1.5 0.4687500092146717 -v -2.0874999984976066 1.5 0.4687500092146717 -v -2.6874999974960128 1.5625000043068566 0.8125 -v -2.6874999983306758 1.5625000028712375 0.6875 -v -2.8749999949920246 1.5625000086137144 0.8125 -v -2.8749999949920246 1.5625000086137144 0.6875 -v -2.6874999974960128 1.6875000043068566 0.8125 -v -2.6874999983306758 1.6875000028712375 0.6875 -v -2.8749999949920246 1.6875000086137144 0.8125 -v -2.8749999949920246 1.6875000086137144 0.6875 -v -2.5625 1.6874999999999991 0.5 -v -2.5625 1.5624999999999991 0.5 -v -2.5625 1.6874999999999991 0.625 -v -2.5625 1.5624999999999991 0.625 -v -2.625 1.6874999999999991 0.5 -v -2.625 1.5624999999999991 0.5 -v -2.6875 1.6874999999999991 0.625 -v -2.6875 1.5624999999999991 0.625 -v -2 1.5625 0.625 -v -2 1.5625 0.5 -v -2 1.6875 0.625 -v -2 1.6875 0.5 -v -2.625 1.6874999999999991 0.8125 -v -2.625 1.5624999999999991 0.8125 -v -2.5625 1.6874999999999991 0.6875 -v -2.5625 1.5624999999999991 0.6875 -v -2 1.5031249999999998 0.05937500000000018 -v -2 1.4968749999999993 0.05937500000000018 -v -2 1.5031249999999998 1.0593750000000002 -v -2 1.4968749999999993 1.0593750000000002 -v -2.9375 1.4999999999999991 0.05937500000000018 -v -1.0625 1.5031249999999998 0.05937500000000018 -v -1.0625 1.4968749999999993 0.05937500000000018 -v -1.0625000017027117 1.5015625 1.0609374998998407 -v -1.0625 1.4968749999999993 1.0593750000000002 -v -1.0000000034054226 2.5 1.0624999997996811 -v -1.0625000034054226 2.5 1.0624999997996811 -v -1.0000000034054226 2.1875 1.0624999997996811 -v -1.0625000034054226 2.1875 1.0624999997996811 -v -1.0000000034054226 2.5 0.3124999997996811 -v -1.0000000034054226 2.1875 -2.0031887260074654e-10 -v -1.0000000034054226 1.5 -2.0031887260074654e-10 -v -1.0625000034054226 1.5 -2.0031887260074654e-10 -v -3.0625 1.625 1.875 -v -3.0625 1.625 1 -v -3.9375 1.625 1.875 -v -3.9375 1.6249999999999998 1 -v -3.0625 1.625 0.125 -v -3.9375 1.625 0.125 -v -0.9375 1.5 2.9375 -v 0 1.5 1.9375 -v 0 1.5 2.9375 -v 0 2.4375 2.9375 -v 0 2.4375 1.9375 -v -0.9375 2.4375 2.9375 -v 0 2.4375 0.9375 -v 0 3.374999999999999 1.9375 -v 0 3.3749999999999996 0.9375 -v -0.9375 3.375 1.9375 -v 0 3.374999999999999 2.9375 -v -0.9375 3.375 2.9375 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.6875 0.265625 -vt 0.703125 0.265625 -vt 0.703125 0.21875 -vt 0.6875 0.21875 -vt 0.734375 0.21875 -vt 0.71875 0.21875 -vt 0.71875 0.265625 -vt 0.734375 0.265625 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.234375 0 -vt 0.234375 0.234375 -vt 0 0.234375 +v -0.0625 0 -1 +v -0.9375 0 -1 +v -1 0.1875 -0.25 +v -1 0.1875 -1 +v -1 0 -0.25 +v -1 0.0016 -1 +v -0.9375 0.1875 -0.25 +v -0.9375 0.1875 -1 +v -0.9375 0 -0.25 +v -0.0625 0.1875 -0.25 +v -0.0625 0.1875 -1 +v -0.0625 0 -0.25 +v 0 0.1875 -0.25 +v 0 0.1875 -1 +v 0 0 -1 +v 0 0 0.0625 +v 0.3125 0.1875 -0.75 +v 1.025 0.25 -0.5312 +v 1.0875 0.25 -0.5312 +v 1.025 0.0625 -0.5312 +v 1.0875 0.0625 -0.5312 +v 1.025 0.25 -0.3437 +v 1.0875 0.25 -0.3437 +v 1.025 0.0625 -0.3437 +v 1.0875 0.0625 -0.3437 +v 0.0625 0.9406 0.0031 +v 0.0625 0.0031 0.0031 +v 1 0.9406 0.0031 +v 1 0.0031 0.0031 +v 1.9375 0.9406 0.0031 +v 1.9375 0.0031 0.0031 +v -0.0625 0.125 -1 +v -0.0625 0.125 -0.0625 +v -0.9375 0.125 -1 +v -0.9375 0.125 -0.0625 +v 0.25 0.8125 2 +v 0.25 0.8125 1.9375 +v 0.25 0.3125 2 +v 0.25 0.3125 1.9375 +v 0.75 0.8125 2 +v 0.75 0.8125 1.9375 +v 0.75 0.3125 2 +v 0.75 0.3125 1.9375 +v 0.375 1 2 +v 0.375 1 1.9375 +v 0.375 0.8125 2 +v 0.375 0.8125 1.9375 +v 0.625 1 2 +v 0.625 1 1.9375 +v 0.625 0.8125 2 +v 0.625 0.8125 1.9375 +v 0.9984 0.6889 -0.9983 +v 2.375 0.75 0.8125 +v 0 0.1875 -0.9375 +v 0 0 -0.25 +v 0 0 -0.9375 +v 2 0.1875 0 +v 2 0 0 +v 2.0625 0.1875 0 +v 2.0625 0.1875 -0.9375 +v 2.0625 0 0 +v 2.0625 0 -0.9375 +v 2 0.1875 0.6875 +v 2 0 0.6875 +v 2.0625 0.1875 0.6875 +v 2.0625 0 0.6875 +v 2.9375 0.1875 -0.9375 +v 2.9375 0 -0.9375 +v 2.9375 0.1875 0.6875 +v 2.9375 0.1875 0 +v 2.9375 0 0.6875 +v 2.9375 0 0 +v 3 0.1875 0.6875 +v 3 0.1875 0 +v 3 0 0.6875 +v 3 0 0 +v 1 0.9344 0.0687 +v 2.375 0.9375 0.875 +v 2.375 0.9375 0.8125 +v 2.375 0.75 0.875 +v 2.625 0.9375 0.875 +v 2.625 0.9375 0.8125 +v 2.625 0.75 0.875 +v 2.625 0.75 0.8125 +v 3 0.6875 0.875 +v 2.9375 0.6875 0.875 +v 3 0 0.875 +v 2.9375 0 0.875 +v 3 0.6875 0.6875 +v 2.9375 0.6875 0.6875 +v 3 0.3125 0.875 +v 3 0.3125 0.6875 +v 2.9375 0.3125 0.6875 +v 2.9375 0.3125 0.875 +v 2 0.75 0.875 +v 2 0.6875 0.875 +v 3 0.75 0.875 +v 2 0.75 0.6875 +v 2 0.6875 0.6875 +v 3 0.75 0.6875 +v 2.0625 0.6875 0.875 +v 2.0625 0 0.875 +v 2 0 0.875 +v 2.0625 0.6875 0.6875 +v 2.0625 0.3125 0.875 +v 2.0625 0.3125 0.6875 +v 2 0.3125 0.6875 +v 2 0.3125 0.875 +v 0.5594 0.5625 -1 +v 3 1 1.875 +v 3 1 0.875 +v 1.9406 1 1.875 +v 1.9406 1 0.875 +v 3 0 1.875 +v 1.9375 0 1.875 +v 1.9375 0 0.875 +v 2 1 0.875 +v 2 0 1.875 +v 2 1 1.875 +v -0.625 0.9375 -0.0625 +v -0.625 0.9375 -0.125 +v -0.625 0.75 -0.0625 +v -0.625 0.75 -0.125 +v -0.375 0.9375 -0.0625 +v -0.375 0.9375 -0.125 +v -0.375 0.75 -0.0625 +v -0.375 0.75 -0.125 +v -1 0.75 -0.0625 +v -1 0.6875 -0.0625 +v 0 0.75 -0.0625 +v 0 0.6875 -0.0625 +v -1 0.75 -0.25 +v -1 0.6875 -0.25 +v 0 0.75 -0.25 +v 0 0.6875 -0.25 +v -0.9375 0.6875 -0.0625 +v -0.9375 0 -0.0625 +v -1 0 -0.0625 +v -0.9375 0.6875 -0.25 +v -0.9375 0.3125 -0.0625 +v -0.9375 0.3125 -0.25 +v -1 0.3125 -0.25 +v -1 0.3125 -0.0625 +v -0.0625 0.6875 -0.0625 +v 0 0 -0.0625 +v -0.0625 0 -0.0625 +v -0.0625 0.6875 -0.25 +v 0 0.3125 -0.0625 +v 0 0.3125 -0.25 +v -0.0625 0.3125 -0.25 +v -0.0625 0.3125 -0.0625 +v -0.9375 -0.0625 0.5 +v -0.0625 1.875 -0.0625 +v -0.0625 0.9375 -0.0625 +v 0.9375 2 1 +v 0.9375 2 0.0625 +v 0.9375 -0.0625 0.0625 +v 1.9375 2 1 +v 1.9375 2 0.0625 +v 1.9375 -0.0625 0.0609 +v 1.9375 1 0.0625 +v 0.9375 1 0.0625 +v 1.9375 1 1 +v 1.9375 -0.0625 1 +v 0.9375 2 1.9375 +v 1.9375 2 1.9375 +v 1.9375 1 1.9375 +v 1.9375 0 1.9375 +v 0.9375 0 1.9375 +v 0.9375 1 1.9375 +v -0.0625 2 1 +v -0.0625 2 0.0625 +v -0.0625 -0.0625 1 +v -0.0625 -0.0625 0.0625 +v -0.0625 1 0.0625 +v -0.0625 1 1 +v -0.0625 2 1.9375 +v -0.0625 1 1.9375 +v 1.625 1.625 2.125 +v 1.625 1.625 1.9375 +v 1.625 0.5 2.125 +v 1.625 0.5 1.9375 +v 1.8125 1.625 2.125 +v 1.8125 1.625 1.9375 +v 1.8125 0.5 2.125 +v 1.8125 0.5 1.9375 +v 1.625 1.0625 2.125 +v 1.8125 1.0625 2.125 +v 1.8125 1.0625 1.9375 +v 1.625 1.0625 1.9375 +v 1.625 0.4375 2.125 +v 1.625 0.3125 1.9375 +v 1.8125 0.4375 2.125 +v 1.8125 0.3125 1.9375 +v 1.625 1.8125 2.125 +v 1.625 1.8125 1.9375 +v 0.6875 1.8125 2.125 +v 0.6875 1.8125 1.9375 +v 0.6875 1.625 2.125 +v 0.6875 1.625 1.9375 +v 0.6875 2.1875 2.125 +v 0.6875 2.1875 1.9375 +v 0.6875 2.3125 2.125 +v 0.6875 2.375 1.9375 +v 0.5 2.1875 2.125 +v 0.5 2.1875 1.9375 +v 0.5 2.3125 2.125 +v 0.5 2.375 1.9375 +v 0.5 1.8125 2.125 +v 0.5 1.8125 1.9375 +v 0.0625 2.1875 2.125 +v 0.0625 2.1875 1.9375 +v 0.0625 1.375 2.125 +v 0.0625 1.375 1.9375 +v 0.25 2.1875 2.125 +v 0.25 2.1875 1.9375 +v 0.25 1.375 2.125 +v 0.25 1.375 1.9375 +v 1.25 1.375 2.125 +v 1.25 1.375 1.9375 +v 1.25 1.1875 2.125 +v 1.25 1.1875 1.9375 +v 0.25 1.1875 2.125 +v 0.25 1.1875 1.9375 +v 1.25 0.5 2.125 +v 1.25 0.5 1.9375 +v 1.4375 1.1875 2.125 +v 1.4375 1.1875 1.9375 +v 1.4375 0.5 2.125 +v 1.4375 0.5 1.9375 +v 1.4375 1.3125 2.125 +v 1.4375 1.3125 1.9375 +v 1.25 0.4375 2.125 +v 1.25 0.3125 1.9375 +v 1.4375 0.4375 2.125 +v 1.4375 0.3125 1.9375 +v 1.8125 1.75 2.125 +v 1.8125 1.75 1.9375 +v 0.5 1.6875 2.125 +v 0.5 1.6875 1.9375 +v 0.0625 1.25 2.125 +v 0.0625 1.25 1.9375 +v 0.25 2.3125 2.125 +v 0.25 2.375 1.9375 +v 0.0625 2.3125 2.125 +v 0.0625 2.375 1.9375 +v 1.875 -0.0625 1.9375 +v 1.875 -0.0625 1.875 +v 3 -0.0625 1.9375 +v 3 -0.0625 1.875 +v 1.875 0 1.9375 +v 1.875 0 1.875 +v -1 -0.4992 -1 +v -1 -1 -1 +v -1 -0.5 0.5 +v -1 -1 0.5 +v 1 -0.5 -1 +v 1 -1 -1 +v 1 -1 0.5 +v 3 -0.4992 -1 +v 3 -1 -1 +v 3 -0.5 0.5 +v 3 -1 0.5 +v 1 -0.5 2 +v 1 -1 2 +v -1 -0.4992 2 +v -1 -1 2 +v 3 -0.5 1.9375 +v 3 -1 1.9375 +v 1 -0.5 1.9375 +v 1 -1 1.9375 +v 1 -0.75 1.9375 +v 3 -0.75 1.9375 +v 2 -0.75 1.9375 +v 2 -1 1.9375 +v 2 -1 0.5 +v 2 -0.5 1.9375 +v -1 -0.5 -0.9375 +v 3 -0.5 -0.9375 +v -1 -0.5 1.9375 +v -0.9375 -0.5 1.9375 +v -0.9375 -0.5 -0.9375 +v 2.9375 -0.5 1.9375 +v 2.9375 -0.5 -0.9375 +v 2.125 -0.0625 -1 +v -1 0.0016 -0.875 +v -1 -0.4969 -0.875 +v -0.875 0.0031 -0.875 +v -0.875 0.0016 -1 +v -0.875 -0.4969 -0.875 +v -0.875 -0.4969 -1 +v -1 0.0031 2 +v -1 0.0016 1.875 +v -1 -0.4969 1.875 +v -0.875 0.0016 2 +v -0.875 0.0031 1.875 +v -0.875 -0.4969 2 +v -0.875 -0.4969 1.875 +v -1 0 1.125 +v -1 -0.0625 1.125 +v -1 -0.0625 1.875 +v -0.9375 0 1.125 +v -0.9375 -0.0625 1.125 +v -0.9375 0 1.875 +v -0.9375 -0.0625 1.875 +v -1 -0.0625 -0.875 +v -1 0 0.125 +v -1 -0.0625 0.125 +v -0.9375 0 -0.875 +v -0.9375 -0.0625 -0.875 +v -0.9375 0 0.125 +v -0.9375 -0.0625 0.125 +v -0.875 -0.0625 -0.9375 +v -0.875 -0.0625 -1 +v 0.125 -0.0625 -0.9375 +v 0.125 -0.0625 -1 +v -0.875 0 -0.9375 +v 0.125 0 -0.9375 +v 0.125 0 -1 +v 2.125 -0.0625 -0.9375 +v 2.875 -0.0625 -0.9375 +v 2.875 -0.0625 -1 +v 2.125 0 -0.9375 +v 2.125 0 -1 +v 2.875 0 -0.9375 +v 2.875 0.0016 -1 +v 1.125 -0.0625 -0.9375 +v 1.125 -0.0625 -1 +v 1.125 0 -0.9375 +v 1.125 0 -1 +v 2.9375 -0.0625 -0.875 +v 2.9375 0 0.125 +v 2.9375 -0.0625 0.125 +v 3 0.0016 -0.875 +v 3 -0.0625 -0.875 +v 3 0 0.125 +v 3 -0.0625 0.125 +v 2.9375 0 1.125 +v 2.9375 -0.0625 1.125 +v 3 0 1.125 +v 3 -0.0625 1.125 +v 2.9375 0 1.875 +v 2.9375 -0.0625 1.875 +v -0.875 -0.0625 2 +v -0.875 -0.0625 1.9375 +v 0.125 -0.0625 2 +v 0.125 -0.0625 1.9375 +v -0.875 0 1.9375 +v 0.125 0 2 +v 0.125 0 1.9375 +v 1 -0.0625 2 +v 1 -0.0625 1.9375 +v 1 0 2 +v 1 0 1.9375 +v 2.9375 -0.5 0.5 +v 2.9375 -0.0625 0.5 +v 2.9375 -0.0625 1.9375 +v 2 -0.0625 1.9375 +v 2.9375 -0.25 0.5 +v 2.9375 -0.25 1.9375 +v 2 -0.25 1.9375 +v 1 -0.25 1.9375 +v 2.9375 -0.5625 -0.9375 +v 2.9375 -0.0625 -0.9375 +v 2.9375 -0.5625 0.5 +v 1 -0.5625 -0.9375 +v 1 -0.0625 -0.9375 +v 2.9375 -0.3125 -0.9375 +v 1 -0.3125 -0.9375 +v 2.9375 -0.3125 0.5 +v -0.9375 -0.5625 -0.9375 +v -0.9375 -0.0625 -0.9375 +v -0.9375 -0.5625 0.5 +v -0.9375 -0.3125 -0.9375 +v -0.9375 -0.3125 0.5 +v 1 -0.5625 1.9375 +v -0.9375 -0.5625 1.9375 +v -0.9375 -0.0625 1.9375 +v 1 -0.3125 1.9375 +v -0.9375 -0.3125 1.9375 +v 2.875 0.0031 -0.875 +v 2.875 -0.4969 -0.875 +v 2.875 -0.4969 -1 +v 3 0.0016 -1 +v 3 -0.4969 -0.875 +v 3 -1 2 +v 3 -0.875 2 +v 2 -1 2 +v 2 -0.875 2 +v 2 -0.875 1.9375 +v 1.875 -0.125 2 +v 1.875 -0.125 1.9375 +v 1.875 -0.875 2 +v 1.875 -0.875 1.9375 +v 2 -0.125 2 +v 2.125 -0.125 2 +v 2.125 -0.125 1.9375 +v 2.125 -0.875 2 +v 2.125 -0.875 1.9375 +v 1 -0.875 2 +v 1 -0.875 1.9375 +v 1 -0.125 2 +v 1 -0.125 1.9375 +v 1.125 -0.125 2 +v 1.125 -0.125 1.9375 +v 1.125 -0.875 2 +v 1.125 -0.875 1.9375 +v 2 0 2 +v 3 0 2 +v 3 -0.125 2 +v 2.875 -0.125 2 +v 2.875 -0.875 2 +v 2.25 -0.25 2.0125 +v 2.25 -0.25 1.95 +v 2.25 -0.75 2.0125 +v 2.25 -0.75 1.95 +v 2.75 -0.25 2.0125 +v 2.75 -0.25 1.95 +v 2.75 -0.75 2.0125 +v 2.75 -0.75 1.95 +v 1.25 -0.25 2.0125 +v 1.25 -0.25 1.95 +v 1.25 -0.75 2.0125 +v 1.25 -0.75 1.95 +v 1.75 -0.25 2.0125 +v 1.75 -0.25 1.95 +v 1.75 -0.75 2.0125 +v 1.75 -0.75 1.95 +v 0.0625 0.9969 -0.6812 +v 0.0625 0.9344 -0.6812 +v 0.0625 0.9969 0.0687 +v 0.0625 0.9344 0.0687 +v 1 0.9969 -0.6812 +v 1 0.9344 -0.6812 +v 1 0.9969 0.0687 +v 0.5 0.9969 -0.6812 +v 0.5 0.9969 0.0687 +v 0.5 0.9344 0.0687 +v 0.5 0.9344 -0.6812 +v 0.0625 0.9554 -0.6431 +v 0.0625 0.9998 -0.6874 +v 0.0625 0.646 -0.9524 +v 0.0617 0.6882 -0.9992 +v 1 0.9554 -0.6431 +v 1 0.9996 -0.6873 +v 1 0.646 -0.9524 +v 0.5625 0.9996 -0.6873 +v 0.5609 0.6889 -0.9983 +v 0.5625 0.646 -0.9524 +v 0.5625 0.9554 -0.6431 +v 1.9375 0.9969 -0.6812 +v 1.9375 0.9344 -0.6812 +v 1.9375 0.9969 0.0687 +v 1.9375 0.9344 0.0687 +v 1.4375 0.9969 -0.6812 +v 1.4375 0.9969 0.0687 +v 1.4375 0.9344 0.0687 +v 1.4375 0.9344 -0.6812 +v 1.9375 0.9554 -0.6431 +v 1.9375 0.9998 -0.6874 +v 1.9375 0.646 -0.9524 +v 1.9367 0.6882 -0.9992 +v 1.5 0.9996 -0.6873 +v 1.4984 0.6889 -0.9983 +v 1.5 0.646 -0.9524 +v 1.5 0.9554 -0.6431 +v 1.125 0.875 0 +v 0.9969 0.5625 -0.9375 +v 0.9969 0.5625 -1 +v 1.9344 0.5625 -0.9375 +v 1.9344 0.5625 -1 +v 0.9969 0.6875 -0.9375 +v 1.9344 0.6875 -0.9375 +v 1.4969 0.5625 -1 +v 1.4969 0.5625 -0.9375 +v 1.4969 0.6875 -0.9375 +v 0.0594 0.5625 -0.9375 +v 0.0594 0.5625 -1 +v 0.0594 0.6875 -0.9375 +v 0.5594 0.5625 -0.9375 +v 0.5594 0.6875 -0.9375 +v 0.025 0.1875 0 +v 0.025 0.1875 -0.125 +v 0.9625 0.1875 0 +v 0.9625 0.1875 -0.125 +v 0.025 0.3125 0 +v 0.025 0.3125 -0.125 +v 0.9625 0.3125 0 +v 0.9625 0.3125 -0.125 +v 0.9 0.3438 -0.1562 +v 0.9625 0.3438 -0.1562 +v 0.9 0.1563 -0.1562 +v 0.9625 0.1563 -0.1562 +v 0.9 0.3438 0.0313 +v 0.9625 0.3438 0.0313 +v 0.9 0.1563 0.0313 +v 0.9625 0.1563 0.0313 +v 0.05 0.3438 -0.1562 +v 0.1125 0.3438 -0.1562 +v 0.05 0.1563 -0.1562 +v 0.1125 0.1563 -0.1562 +v 0.05 0.3438 0.0313 +v 0.1125 0.3438 0.0313 +v 0.05 0.1563 0.0313 +v 0.1125 0.1563 0.0313 +v 0.0625 0.1875 -0.75 +v 0.0625 0 -0.75 +v 0.0625 0.1875 -0.1875 +v 0.0625 0 -0.1875 +v 0.5625 0.1875 -0.75 +v 0.5625 0 -0.75 +v 0.5625 0.1875 -0.1875 +v 0.5625 0 -0.1875 +v 0.0625 0.1875 -0.4375 +v 0.5625 0.1875 -0.4375 +v 0.5625 0 -0.4375 +v 0.0625 0 -0.4375 +v 0.3125 0.1875 -0.4375 +v 0.3125 0 -0.75 +v 0.3125 0 -0.1875 +v 0.3125 0.1875 -0.1875 +v 0.625 0.8125 -0.0625 +v 0.625 0.8125 -0.125 +v 0.625 0.5625 -0.0625 +v 0.625 0.5625 -0.125 +v 0.875 0.8125 -0.0625 +v 0.875 0.8125 -0.125 +v 0.875 0.5625 -0.0625 +v 0.875 0.5625 -0.125 +v 0.1875 0.8125 -0.0625 +v 0.1875 0.8125 -0.125 +v 0.1875 0.4375 -0.0625 +v 0.1875 0.4375 -0.125 +v 0.5625 0.8125 -0.0625 +v 0.5625 0.8125 -0.125 +v 0.5625 0.4375 -0.0625 +v 0.5625 0.4375 -0.125 +v 0.125 0.875 0.0625 +v 0.125 0.875 -0.0625 +v 0.125 0.375 0.0625 +v 0.125 0.375 -0.0625 +v 0.875 0.875 0.0625 +v 0.875 0.875 -0.0625 +v 0.875 0.375 0.0625 +v 0.875 0.375 -0.0625 +v 0.875 0.625 -0.0625 +v 0.125 0.625 -0.0625 +v 0.125 0.625 0.0625 +v 0.875 0.625 0.0625 +v 0.5 0.625 -0.0625 +v 0.5 0.375 -0.0625 +v 0.5 0.375 0.0625 +v 0.5 0.875 0.0625 +v 0.5 0.875 -0.0625 +v 0.6875 0.1563 -0.5625 +v 0.6875 0.0313 -0.5625 +v 0.6875 0.1563 0.0625 +v 0.6875 0.0313 0.0625 +v 0.8125 0.1563 -0.5625 +v 0.8125 0.0313 -0.5625 +v 0.8125 0.1563 0.0625 +v 0.8125 0.0313 0.0625 +v 0.9 0.1875 -0.7187 +v 0.9625 0.1875 -0.7187 +v 0.9 0 -0.7187 +v 0.9625 0 -0.7187 +v 0.9 0.1875 -0.5312 +v 0.9625 0.1875 -0.5312 +v 0.9 0 -0.5312 +v 0.9625 0 -0.5312 +v 0.8125 0.0313 -0.6875 +v 1 0.0313 -0.5625 +v 1 0.0313 -0.6875 +v 0.8125 0.1563 -0.6875 +v 1 0.1563 -0.5625 +v 1 0.1563 -0.6875 +v 0.75 0.1563 -0.6875 +v 0.75 0.0313 -0.6875 +v 0.8375 0.1875 -0.0312 +v 0.8375 0.1875 0.0313 +v 0.8375 0 -0.0312 +v 0.8375 0 0.0313 +v 0.65 0.1875 -0.0312 +v 0.65 0.1875 0.0313 +v 0.65 0 -0.0312 +v 0.65 0 0.0313 +v 0.9642 0.8282 -0.2962 +v 0.9329 0.8282 -0.2962 +v 0.9642 0.2705 -0.2228 +v 0.9329 0.2705 -0.2228 +v 0.9642 0.7711 -0.73 +v 0.9329 0.7711 -0.73 +v 0.9642 0.2134 -0.6565 +v 0.9329 0.2134 -0.6565 +v 0.9625 1 0.0625 +v 1.025 1 0.0625 +v 0.9625 0.6875 0.0625 +v 1.025 0.6875 0.0625 +v 0.9625 1 -0.6875 +v 1.025 1 -0.6875 +v 0.9625 0.6875 -1 +v 1.025 0.6875 -1 +v 0.9625 0 0.0625 +v 1.025 0 0.0625 +v 0.9625 0 -1 +v 1.025 0 -1 +v 2 1 0.0625 +v 1.9375 0.6875 0.0625 +v 2 0.6875 0.0625 +v 2 1 -0.6875 +v 2 0.6875 -1 +v 2 0 0.0625 +v 1.9375 0 -1 +v 2 0 -1 +v 1.5625 0.875 0 +v 1.5625 0.875 -0.1875 +v 1.5625 0.375 0 +v 1.5625 0.375 -0.1875 +v 1.9375 0.875 0 +v 1.9375 0.875 -0.1875 +v 1.9375 0.375 0 +v 1.9375 0.375 -0.1875 +v 1.125 0.875 -0.1875 +v 1.125 0.375 0 +v 1.125 0.375 -0.1875 +v 1.5 0.875 0 +v 1.5 0.875 -0.1875 +v 1.5 0.375 0 +v 1.5 0.375 -0.1875 +v 1 0.25 0 +v 1 0.25 -0.125 +v 1.9375 0.25 0 +v 1.9375 0.25 -0.125 +v 1 0.375 0 +v 1 0.375 -0.125 +v 1.9375 0.375 -0.125 +v 1.025 0.4063 -0.1562 +v 1.0875 0.4063 -0.1562 +v 1.025 0.2188 -0.1562 +v 1.0875 0.2188 -0.1562 +v 1.025 0.4063 0.0313 +v 1.0875 0.4063 0.0313 +v 1.025 0.2188 0.0313 +v 1.0875 0.2188 0.0313 +v 1.875 0.4063 -0.1562 +v 1.9375 0.4063 -0.1562 +v 1.875 0.2188 -0.1562 +v 1.9375 0.2188 -0.1562 +v 1.875 0.4063 0.0313 +v 1.9375 0.4063 0.0313 +v 1.875 0.2188 0.0313 +v 1.9375 0.2188 0.0313 +v 1.875 0.2188 -0.3437 +v 1.9375 0.2188 -0.3437 +v 1.875 0.0313 -0.3437 +v 1.9375 0.0313 -0.3437 +v 1.875 0.0313 -0.1562 +v 1.9375 0.0313 -0.1562 +v 1.875 0.1875 -0.7187 +v 1.9375 0.1875 -0.7187 +v 1.875 0 -0.7187 +v 1.9375 0 -0.7187 +v 1.875 0.1875 -0.5312 +v 1.9375 0.1875 -0.5312 +v 1.875 0 -0.5312 +v 1.9375 0 -0.5312 +v 1.875 0.1563 -0.5625 +v 1.875 0.1563 -0.6875 +v 1.0875 0.1563 -0.5625 +v 1.0875 0.1563 -0.6875 +v 1.875 0.0313 -0.5625 +v 1.875 0.0313 -0.6875 +v 1.0875 0.0313 -0.5625 +v 1.0875 0.0313 -0.6875 +v 1.025 0.1875 -0.7187 +v 1.0875 0.1875 -0.7187 +v 1.025 0 -0.7187 +v 1.0875 0 -0.7187 +v 1.025 0.1875 -0.5312 +v 1.0875 0.1875 -0.5312 +v 1.025 0 -0.5312 +v 1.0875 0 -0.5312 +v 1.6875 0.0625 -0.1875 +v 1.6875 0.0625 -0.3125 +v 1.875 0.0625 -0.1875 +v 1.875 0.0625 -0.3125 +v 1.6875 0.1875 -0.1875 +v 1.6875 0.1875 -0.3125 +v 1.875 0.1875 -0.1875 +v 1.875 0.1875 -0.3125 +v 1.5625 0.1875 -0.5 +v 1.5625 0.0625 -0.5 +v 1.5625 0.1875 -0.375 +v 1.5625 0.0625 -0.375 +v 1.625 0.1875 -0.5 +v 1.625 0.0625 -0.5 +v 1.6875 0.1875 -0.375 +v 1.6875 0.0625 -0.375 +v 1 0.0625 -0.375 +v 1 0.0625 -0.5 +v 1 0.1875 -0.375 +v 1 0.1875 -0.5 +v 1.625 0.1875 -0.1875 +v 1.625 0.0625 -0.1875 +v 1.5625 0.1875 -0.3125 +v 1.5625 0.0625 -0.3125 +v 1 0.0031 -0.9406 +v 1 -0.0031 -0.9406 +v 1 0.0031 0.0594 +v 1 -0.0031 0.0594 +v 1.9375 0 -0.9406 +v 0.0625 0.0031 -0.9406 +v 0.0625 -0.0031 -0.9406 +v 0.0625 -0.0008 0.0602 +v 0 1 0.0625 +v 0.0625 1 0.0625 +v 0 0.6875 0.0625 +v 0.0625 0.6875 0.0625 +v 0 1 -0.6875 +v 0 0.6875 -1 +v 0.0625 0 -1 +v 2.0625 0.125 0.875 +v 2.0625 0.125 0 +v 2.9375 0.125 0.875 +v 2.9375 0.125 0 +v -0.0625 0 1.9375 +v -1 0 0.9375 +v -1 0 1.9375 +v -1 0.9375 1.9375 +v -1 0.9375 0.9375 +v -0.0625 0.9375 1.9375 +v -1 0.9375 -0.0625 +v -1 1.875 0.9375 +v -1 1.875 -0.0625 +v -0.0625 1.875 0.9375 +v -1 1.875 1.9375 +v -0.0625 1.875 1.9375 +v 2.875 -0.125 1.9375 +v 3 -0.125 1.9375 +v 2.875 -0.875 1.9375 +v 3 -0.875 1.9375 +v 2 0 1.9375 +v 3 0 1.9375 +v 2 -0.125 1.9375 +v 3 0 -0.9375 +v 3 0.125 0 +v 2.0625 0.125 -0.9375 +v 3 0.125 -0.9375 +v 2 0.1875 -1 +v 3 0.1875 -1 +v 1.9438 -0.0625 1.875 +v 1.9438 -0.0625 0.875 +v 1.625 1 0.0625 +v 1.625 2 0.0625 +v 1.625 2 1 +v 1.625 2 1.9375 +v 1.625 1 1.9375 +v 1.625 0 1.9375 +v 1.625 -0.0625 0.0614 +v 1.625 1.75 0.0625 +v 0.9375 1.75 0.0625 +v -0.0625 1.75 0.0625 +v -0.0625 1.75 1 +v -0.0625 1.75 1.9375 +v 0.9375 1.75 1.9375 +v 1.625 1.75 1.9375 +v 1.9375 1.75 1.9375 +v 1.9375 1.75 0.0625 +v 0.9375 1.1875 0.0625 +v 1.625 1.1875 0.0625 +v 1.9375 1.1875 0.0625 +v 1.9375 1.1875 1.9375 +v 1.625 1.1875 1.9375 +v 0.9375 1.1875 1.9375 +v -0.0625 1.1875 1.9375 +v -0.0625 1.1875 1 +v -0.0625 1.1875 0.0625 +v 1 1.1875 0.0625 +v 1 1.75 0.0625 +v 1 2 0.0625 +v 1 2 1 +v 1 2 1.9375 +v 1 1.75 1.9375 +v 1 1.1875 1.9375 +v 1 1 1.9375 +v 1 1 0.0625 +v 1 -0.0625 0.0624 +v 2 -0.125 0.0313 +v -0.125 -0.125 0.0313 +v 2 -0.125 0.9688 +v -0.125 -0.125 0.9688 +v 0.9375 -0.125 0.9688 +v 0.9375 -0.125 0.0313 +v 1.75 0.0625 0.875 +v 1.75 0.0625 0.8125 +v 1.75 -0.125 0.875 +v 1.75 -0.125 0.8125 +v 0.125 0.0625 0.875 +v 0.125 0.0625 0.8125 +v 0.125 -0.125 0.875 +v 0.125 -0.125 0.8125 +v 0.9375 0 1.75 +v 0.9375 0 0.875 +v 0.9375 -0.125 0.875 +v -0.0625 0 1.75 +v -0.0625 0 0.875 +v -0.0625 -0.125 0.875 +v 1.9375 0 1.75 +v 1.9375 -0.125 0.875 +v 0.125 0.9375 1.75 +v 0.125 0.4375 1.75 +v -0.0625 0.9375 1.75 +v -0.0625 0.4375 1.75 +v 0.125 0.9375 1.8125 +v 0.125 0.4375 1.8125 +v -0.0625 0.9375 1.8125 +v -0.0625 0.4375 1.8125 +v 0.125 0.9375 0.875 +v 0.125 0.9375 0.8125 +v 0.125 0.4375 0.875 +v 0.125 0.4375 0.8125 +v -0.0625 0.9375 0.875 +v -0.0625 0.4375 0.875 +v 0.125 1 0.8125 +v -0.0625 1 0.8125 +v -0.0625 0.9375 0.8125 +v 0.0625 0.9375 1.7688 +v 0.0625 0.9375 1.6063 +v 0.0625 0.4375 1.7688 +v 0.0625 0.4375 1.6063 +v 0 0.9375 1.7688 +v 0 0.9375 1.6063 +v 0 0.4375 1.7688 +v 0 0.4375 1.6063 +v 0.0625 0.9375 1.5813 +v 0.0625 0.9375 1.4188 +v 0.0625 0.4375 1.5813 +v 0.0625 0.4375 1.4188 +v 0 0.9375 1.5813 +v 0 0.9375 1.4188 +v 0 0.4375 1.5813 +v 0 0.4375 1.4188 +v 0.0625 0.9375 1.3938 +v 0.0625 0.9375 1.2313 +v 0.0625 0.4375 1.3938 +v 0.0625 0.4375 1.2313 +v 0 0.9375 1.3938 +v 0 0.9375 1.2313 +v 0 0.4375 1.3938 +v 0 0.4375 1.2313 +v 0.0625 0.9375 1.2063 +v 0.0625 0.9375 1.0438 +v 0.0625 0.4375 1.2063 +v 0.0625 0.4375 1.0438 +v 0 0.9375 1.2063 +v 0 0.9375 1.0438 +v 0 0.4375 1.2063 +v 0 0.4375 1.0438 +v 0.0625 0.9375 1.0188 +v 0.0625 0.9375 0.8563 +v 0.0625 0.4375 1.0188 +v 0.0625 0.4375 0.8563 +v 0 0.9375 1.0188 +v 0 0.9375 0.8563 +v 0 0.4375 1.0188 +v 0 0.4375 0.8563 +v 0.125 1 1.8125 +v -0.0625 1 1.8125 +v -0.0625 0.4375 0.8125 +v 0.125 -0.0625 0.875 +v -0.0625 -0.0625 0.875 +v 0.125 -0.0625 0.8125 +v -0.0625 -0.0625 0.8125 +v 0.125 -0.0625 1.75 +v 0.125 -0.0625 1.8125 +v -0.0625 -0.0625 1.75 +v 0.125 -0.125 1.8125 +v -0.0625 -0.125 1.8125 +v -0.0625 -0.0625 1.8125 +v 0.0625 -0.0625 0.8563 +v 0.0625 -0.0625 1.0188 +v 0 -0.0625 0.8563 +v 0 -0.0625 1.0188 +v 0.0625 -0.0625 1.0438 +v 0.0625 -0.0625 1.2063 +v 0 -0.0625 1.0438 +v 0 -0.0625 1.2063 +v 0.0625 -0.0625 1.2313 +v 0.0625 -0.0625 1.3938 +v 0 -0.0625 1.2313 +v 0 -0.0625 1.3938 +v 0.0625 -0.0625 1.4188 +v 0.0625 -0.0625 1.5813 +v 0 -0.0625 1.4188 +v 0 -0.0625 1.5813 +v 0.0625 -0.0625 1.6063 +v 0.0625 -0.0625 1.7688 +v 0 -0.0625 1.6063 +v 0 -0.0625 1.7688 +v -0.0625 -0.125 0.8125 +v 1.75 0.9375 0.875 +v 1.75 0.4375 0.875 +v 1.9375 0.9375 0.875 +v 1.9375 0.4375 0.875 +v 1.75 0.9375 0.8125 +v 1.75 0.4375 0.8125 +v 1.9375 0.9375 0.8125 +v 1.9375 0.4375 0.8125 +v 1.75 0.9375 1.75 +v 1.75 0.9375 1.8125 +v 1.75 0.4375 1.75 +v 1.75 0.4375 1.8125 +v 1.9375 0.9375 1.75 +v 1.9375 0.4375 1.75 +v 1.75 1 1.8125 +v 1.9375 1 1.8125 +v 1.9375 0.9375 1.8125 +v 1.8125 0.9375 0.8563 +v 1.8125 0.9375 1.0188 +v 1.8125 0.4375 0.8563 +v 1.8125 0.4375 1.0188 +v 1.875 0.9375 0.8563 +v 1.875 0.9375 1.0188 +v 1.875 0.4375 0.8563 +v 1.875 0.4375 1.0188 +v 1.8125 0.9375 1.0438 +v 1.8125 0.9375 1.2063 +v 1.8125 0.4375 1.0438 +v 1.8125 0.4375 1.2063 +v 1.875 0.9375 1.0438 +v 1.875 0.9375 1.2063 +v 1.875 0.4375 1.0438 +v 1.875 0.4375 1.2063 +v 1.8125 0.9375 1.2313 +v 1.8125 0.9375 1.3938 +v 1.8125 0.4375 1.2313 +v 1.8125 0.4375 1.3938 +v 1.875 0.9375 1.2313 +v 1.875 0.9375 1.3938 +v 1.875 0.4375 1.2313 +v 1.875 0.4375 1.3938 +v 1.8125 0.9375 1.4188 +v 1.8125 0.9375 1.5813 +v 1.8125 0.4375 1.4188 +v 1.8125 0.4375 1.5813 +v 1.875 0.9375 1.4188 +v 1.875 0.9375 1.5813 +v 1.875 0.4375 1.4188 +v 1.875 0.4375 1.5813 +v 1.8125 0.9375 1.6063 +v 1.8125 0.9375 1.7688 +v 1.8125 0.4375 1.6063 +v 1.8125 0.4375 1.7688 +v 1.875 0.9375 1.6063 +v 1.875 0.9375 1.7688 +v 1.875 0.4375 1.6063 +v 1.875 0.4375 1.7688 +v 1.75 1 0.8125 +v 1.9375 1 0.8125 +v 1.9375 0.4375 1.8125 +v 1.75 -0.0625 1.75 +v 1.9375 -0.0625 1.75 +v 1.75 -0.0625 1.8125 +v 1.9375 -0.0625 1.8125 +v 1.75 -0.0625 0.875 +v 1.75 -0.0625 0.8125 +v 1.9375 -0.0625 0.875 +v 1.9375 -0.125 0.8125 +v 1.9375 -0.0625 0.8125 +v 1.8125 -0.0625 1.7688 +v 1.8125 -0.0625 1.6063 +v 1.875 -0.0625 1.7688 +v 1.875 -0.0625 1.6063 +v 1.8125 -0.0625 1.5813 +v 1.8125 -0.0625 1.4188 +v 1.875 -0.0625 1.5813 +v 1.875 -0.0625 1.4188 +v 1.8125 -0.0625 1.3938 +v 1.8125 -0.0625 1.2313 +v 1.875 -0.0625 1.3938 +v 1.875 -0.0625 1.2313 +v 1.8125 -0.0625 1.2063 +v 1.8125 -0.0625 1.0438 +v 1.875 -0.0625 1.2063 +v 1.875 -0.0625 1.0438 +v 1.8125 -0.0625 1.0188 +v 1.8125 -0.0625 0.8563 +v 1.875 -0.0625 1.0188 +v 1.875 -0.0625 0.8563 +v 1.75 -0.125 1.8125 +v 1.9375 -0.125 1.8125 +v 1.75 0.125 1.8125 +v 1.75 0.125 1.75 +v 1.75 -0.125 1.75 +v 1.125 0.125 1.8125 +v 1.125 0.125 1.75 +v 1.125 -0.125 1.8125 +v 1.125 -0.125 1.75 +v -0.0625 0.9375 0.0625 +v -0.0625 0 0.0625 +v -0.0625 1.875 0.0625 +v 0 0.75 0.0625 +v -0.0625 0.75 0.0625 +v -0.0625 0.75 -0.0625 +v 0.8125 2.9375 1.1875 +v 0.8125 2.9375 1.8125 +v 0.8125 2.5 1.1875 +v 0.8125 2.5 1.8125 +v 0.1875 2.9375 1.1875 +v 0.1875 2.9375 1.8125 +v 0.1875 2.5 1.1875 +v 0.1875 2.5 1.8125 +v 0.25 3 1.75 +v 0.25 3 1.25 +v 0.75 3 1.75 +v 0.75 3 1.25 +v 0.0625 2.5 1.9375 +v 0.0625 2 1.9375 +v 0.9375 2.5 1.9375 +v 0.0625 2.5 1.125 +v 0.0625 2 1.125 +v 0.9375 2.5 1.125 +v 0.9375 2 1.125 +v 0.5 2.5 1.125 +v 0.5 2 1.125 +v 0.5 2 1.9375 +v 0.5 2.5 1.9375 +v 0.5 2.25 1.125 +v 0.9375 2.25 1.125 +v 0.9375 2.25 1.9375 +v 0.5 2.25 1.9375 +v 0.0625 2.25 1.9375 +v 0.0625 2.25 1.125 +v 0.9375 2.25 1.5625 +v 0.9375 2 1.5625 +v 0.0625 2 1.5625 +v 0.0625 2.25 1.5625 +v 0.0625 2.5 1.5625 +v 0.5 2.5 1.5625 +v 0.9375 2.5 1.5625 +v 0.1875 2.1875 1.125 +v 0.1875 2.1875 0.9375 +v 0.375 2.1875 0.9375 +v 0.375 2.1875 1.125 +v 0.1875 2.3125 0.9375 +v 0.375 2.3125 0.9375 +v 0.375 2.375 1.125 +v 0.1875 2.375 1.125 +v 0.375 2 1.125 +v 0.375 2 0.9375 +v 0.1875 2 0.9375 +v 0.1875 2 1.125 +v 0.625 2.1875 0.9375 +v 0.625 2 0.9375 +v 0.4375 2 0.9375 +v 0.4375 2.1875 0.9375 +v 0.625 2.1875 1.125 +v 0.625 2 1.125 +v 0.625 2.3125 0.9375 +v 0.625 2.375 1.125 +v 0.4375 2.3125 0.9375 +v 0.4375 2.375 1.125 +v 0.4375 2.1875 1.125 +v 0.4375 2 1.125 +v 1.9187 1.9813 1.9156 +v 1.9187 1.9813 0.0844 +v 1.9187 -0.1062 1.9156 +v 1.9187 -0.1062 0.0844 +v -0.0438 1.9813 1.9156 +v -0.0438 1.9813 0.0844 +v -0.0438 -0.1062 1.9156 +v -0.0438 -0.1062 0.0844 +v 1.9187 1.9813 1 +v 1.9187 -0.1062 1 +v -0.0438 1.9813 1 +v -0.0438 -0.1062 1 +v 0.9375 1.9813 1.9156 +v 0.9375 -0.1062 1.9156 +v 0.9375 1.9813 1 +v 0.9375 1.9813 0.0844 +v 0.9375 -0.1062 0.0844 +v -0.0438 -0.0812 1 +v 0.9375 -0.0812 1 +v 0.9375 -0.0812 1.9156 +v -0.0438 -0.0812 1.9156 +v 1.9187 -0.0812 1.9156 +v 1.9187 -0.0812 1 +v 2 0.1875 -0.9375 +v 3 0.1875 -0.9375 +v 3 0.0016 -0.9375 +v 2 0 -0.9375 +vt 0.1094 1 +vt 0.2813 1 +vt 0.2813 0.9531 +vt 0.1094 0.9531 +vt 0.1094 1 +vt 0.2813 1 +vt 0.2813 0.9531 +vt 0.1094 0.9531 +vt 0 1 +vt 0.0156 1 +vt 0.0156 0.8281 +vt 0 0.8281 +vt 0.1094 1 +vt 0.125 1 +vt 0.125 0.9531 +vt 0.1094 0.9531 +vt 0.1094 1 +vt 0.2813 1 +vt 0.2813 0.9531 +vt 0.1094 0.9531 +vt 0 1 +vt 0.0156 1 +vt 0.0156 0.8281 +vt 0 0.8281 +vt 0.1094 1 +vt 0.125 1 +vt 0.125 0.9531 +vt 0.1094 0.9531 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.2656 +vt 0.6875 0.2656 +vt 0.6875 0.2188 +vt 0.7188 0.2656 +vt 0.7188 0.2188 +vt 0.7344 0.2188 +vt 0.7344 0.2656 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.6875 0.2188 +vt 0 0.2344 +vt 0.2344 0.2344 +vt 0.2344 0 vt 0 0 -vt 0.46875 0 -vt 0.46875 0.234375 -vt 0.234375 0.234375 -vt 0.234375 0 -vt 0.0625 0.9375 -vt 0.0625 0.0625 +vt 0.2344 0.2344 +vt 0.4688 0.2344 +vt 0.4688 0 +vt 0.2344 0 vt 0.9375 0.0625 +vt 0.0625 0.0625 +vt 0.0625 0.9375 vt 0.9375 0.9375 +vt 0.0625 0.875 vt 0.9375 0.875 vt 0.9375 1 vt 0.0625 1 -vt 0.0625 0.875 -vt 0.875 0.484375 -vt 0.875 0.609375 -vt 0.859375 0.609375 -vt 0.859375 0.484375 -vt 0.859375 0.484375 -vt 0.859375 0.609375 -vt 0.84375 0.609375 -vt 0.84375 0.484375 -vt 0.875 0.59375 -vt 0.875 0.609375 -vt 0.75 0.609375 -vt 0.75 0.59375 -vt 0.875 0.484375 -vt 0.875 0.5 +vt 0.8594 0.6094 +vt 0.875 0.6094 +vt 0.875 0.4844 +vt 0.8594 0.4844 +vt 0.8438 0.6094 +vt 0.8594 0.6094 +vt 0.8594 0.4844 +vt 0.8438 0.4844 +vt 0.75 0.6094 +vt 0.875 0.6094 +vt 0.875 0.5938 +vt 0.75 0.5938 vt 0.75 0.5 -vt 0.75 0.484375 -vt 0.5 0.484375 -vt 0.5 0.609375 -vt 0.375 0.609375 -vt 0.375 0.484375 +vt 0.875 0.5 +vt 0.875 0.4844 +vt 0.75 0.4844 +vt 0.375 0.6094 +vt 0.5 0.6094 +vt 0.5 0.4844 +vt 0.375 0.4844 +vt 0.0781 0.7344 +vt 0.0625 0.7344 vt 0.0625 0.6875 -vt 0.0625 0.734375 -vt 0.078125 0.734375 -vt 0.078125 0.6875 +vt 0.0781 0.6875 +vt 0.0156 0.7344 +vt 0 0.7344 vt 0 0.6875 -vt 0 0.734375 -vt 0.015625 0.734375 -vt 0.015625 0.6875 +vt 0.0156 0.6875 +vt 0 0.7344 +vt 0.0625 0.7344 vt 0.0625 0.75 -vt 0.0625 0.734375 -vt 0 0.734375 vt 0 0.75 +vt 0.0625 0.7344 +vt 0 0.7344 vt 0 0.6875 -vt 0 0.734375 -vt 0.0625 0.734375 vt 0.0625 0.6875 -vt 0.28125 0.953125 -vt 0.28125 1 -vt 0.109375 1 -vt 0.109375 0.953125 -vt 0.28125 0.953125 -vt 0.28125 1 -vt 0.109375 1 -vt 0.109375 0.953125 -vt 0.015625 0.828125 -vt 0.015625 1 -vt 0 1 -vt 0 0.828125 -vt 0.125 0.953125 -vt 0.125 1 -vt 0.109375 1 -vt 0.109375 0.953125 -vt 0.28125 0.953125 -vt 0.28125 1 -vt 0.109375 1 -vt 0.109375 0.953125 -vt 0.28125 0.953125 -vt 0.28125 1 -vt 0.109375 1 -vt 0.109375 0.953125 -vt 0.015625 0.828125 -vt 0.015625 1 -vt 0 1 -vt 0 0.828125 -vt 0.125 0.953125 -vt 0.125 1 -vt 0.109375 1 -vt 0.109375 0.953125 -vt 0.40625 0.953125 -vt 0.40625 1 +vt 0.1094 1 +vt 0.2813 1 +vt 0.2813 0.9531 +vt 0.1094 0.9531 vt 0.1875 1 -vt 0.1875 0.953125 -vt 0.40625 0.953125 -vt 0.40625 1 +vt 0.4063 1 +vt 0.4063 0.9531 +vt 0.1875 0.9531 vt 0.1875 1 -vt 0.1875 0.953125 -vt 0.015625 0.78125 -vt 0.015625 1 +vt 0.4063 1 +vt 0.4063 0.9531 +vt 0.1875 0.9531 vt 0 1 -vt 0 0.78125 -vt 0.28125 0.953125 -vt 0.28125 1 -vt 0.109375 1 -vt 0.109375 0.953125 -vt 0.28125 0.953125 -vt 0.28125 1 -vt 0.109375 1 -vt 0.109375 0.953125 -vt 0.015625 0.828125 -vt 0.015625 1 +vt 0.0156 1 +vt 0.0156 0.7813 +vt 0 0.7813 +vt 0.1094 1 +vt 0.2813 1 +vt 0.2813 0.9531 +vt 0.1094 0.9531 +vt 0.1094 1 +vt 0.2813 1 +vt 0.2813 0.9531 +vt 0.1094 0.9531 vt 0 1 -vt 0 0.828125 -vt 0.15625 0.953125 -vt 0.15625 1 -vt 0.140625 1 -vt 0.140625 0.953125 -vt 0.15625 0.953125 -vt 0.15625 1 -vt 0.140625 1 -vt 0.140625 0.953125 -vt 0.375 0.984375 -vt 0.375 1 -vt 0.140625 1 -vt 0.140625 0.984375 -vt 0.375 0.953125 +vt 0.0156 1 +vt 0.0156 0.8281 +vt 0 0.8281 +vt 0.1406 1 vt 0.375 1 -vt 0.140625 1 -vt 0.140625 0.953125 -vt 0.375 0.953125 -vt 0.375 1 -vt 0.140625 1 -vt 0.140625 0.953125 -vt 0.28125 0.953125 -vt 0.28125 1 -vt 0.109375 1 -vt 0.109375 0.953125 -vt 0.28125 0.953125 -vt 0.28125 1 -vt 0.109375 1 -vt 0.109375 0.953125 -vt 0.015625 0.828125 -vt 0.015625 1 +vt 0.375 0.9531 +vt 0.1406 0.9531 +vt 0.1094 1 +vt 0.2813 1 +vt 0.2813 0.9531 +vt 0.1094 0.9531 +vt 0.1094 1 +vt 0.2813 1 +vt 0.2813 0.9531 +vt 0.1094 0.9531 vt 0 1 -vt 0 0.828125 -vt 0.125 0.953125 +vt 0.0156 1 +vt 0.0156 0.8281 +vt 0 0.8281 +vt 0.1094 1 vt 0.125 1 -vt 0.109375 1 -vt 0.109375 0.953125 +vt 0.125 0.9531 +vt 0.1094 0.9531 +vt 0.0781 0.7344 +vt 0.0625 0.7344 vt 0.0625 0.6875 -vt 0.0625 0.734375 -vt 0.078125 0.734375 -vt 0.078125 0.6875 +vt 0.0781 0.6875 +vt 0.0156 0.7344 +vt 0 0.7344 vt 0 0.6875 -vt 0 0.734375 -vt 0.015625 0.734375 -vt 0.015625 0.6875 -vt 0.078125 0.75 -vt 0.078125 0.734375 -vt 0.015625 0.734375 -vt 0.015625 0.75 +vt 0.0156 0.6875 +vt 0.0156 0.7344 +vt 0.0781 0.7344 +vt 0.0781 0.75 +vt 0.0156 0.75 +vt 0.125 0.7344 +vt 0.0625 0.7344 vt 0.0625 0.6875 -vt 0.0625 0.734375 -vt 0.125 0.734375 vt 0.125 0.6875 +vt 0.5781 0.9063 +vt 0.5625 0.9063 vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.578125 0.90625 -vt 0.578125 1 +vt 0.5781 1 +vt 0.6094 0.9063 +vt 0.5625 0.9063 vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.609375 0.90625 -vt 0.609375 1 +vt 0.6094 1 +vt 0.5469 0.9063 +vt 0.5 0.9063 vt 0.5 1 -vt 0.5 0.90625 -vt 0.546875 0.90625 -vt 0.546875 1 -vt 0.609375 0.75 -vt 0.609375 0.828125 -vt 0.5625 0.828125 +vt 0.5469 1 +vt 0.5625 0.8281 +vt 0.6094 0.8281 +vt 0.6094 0.75 vt 0.5625 0.75 -vt 0.578125 0.828125 -vt 0.578125 0.90625 -vt 0.5625 0.90625 -vt 0.5625 0.828125 -vt 0.546875 0.75 -vt 0.546875 0.828125 -vt 0.5 0.828125 +vt 0.5625 0.9063 +vt 0.5781 0.9063 +vt 0.5781 0.8281 +vt 0.5625 0.8281 +vt 0.5 0.8281 +vt 0.5469 0.8281 +vt 0.5469 0.75 vt 0.5 0.75 -vt 0.578125 0.75 -vt 0.578125 1 vt 0.5625 1 +vt 0.5781 1 +vt 0.5781 0.75 vt 0.5625 0.75 -vt 0.609375 0.984375 -vt 0.609375 1 vt 0.5625 1 -vt 0.5625 0.984375 -vt 0.609375 0.984375 -vt 0.609375 1 +vt 0.6094 1 +vt 0.6094 0.9844 +vt 0.5625 0.9844 vt 0.5625 1 -vt 0.5625 0.984375 -vt 0.609375 0.75 -vt 0.609375 1 +vt 0.6094 1 +vt 0.6094 0.9844 +vt 0.5625 0.9844 vt 0.5625 1 +vt 0.6094 1 +vt 0.6094 0.75 vt 0.5625 0.75 -vt 0.546875 0.75 -vt 0.546875 1 vt 0.5 1 +vt 0.5469 1 +vt 0.5469 0.75 vt 0.5 0.75 +vt 0.5781 0.9063 +vt 0.5625 0.9063 vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.578125 0.90625 -vt 0.578125 1 +vt 0.5781 1 +vt 0.6094 0.9063 +vt 0.5625 0.9063 vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.609375 0.90625 -vt 0.609375 1 -vt 0.609375 0.75 -vt 0.609375 0.828125 -vt 0.5625 0.828125 +vt 0.6094 1 +vt 0.5625 0.8281 +vt 0.6094 0.8281 +vt 0.6094 0.75 vt 0.5625 0.75 -vt 0.578125 0.828125 -vt 0.578125 0.90625 -vt 0.5625 0.90625 -vt 0.5625 0.828125 -vt 0.546875 0.75 -vt 0.546875 0.828125 -vt 0.5 0.828125 +vt 0.5625 0.9063 +vt 0.5781 0.9063 +vt 0.5781 0.8281 +vt 0.5625 0.8281 +vt 0.5 0.8281 +vt 0.5469 0.8281 +vt 0.5469 0.75 vt 0.5 0.75 +vt 0.5469 0.9063 +vt 0.5 0.9063 vt 0.5 1 -vt 0.5 0.90625 -vt 0.546875 0.90625 -vt 0.546875 1 +vt 0.5469 1 +vt 0.5 0.0156 +vt 0.75 0.0156 vt 0.75 0 -vt 0.75 0.015625 -vt 0.5 0.015625 vt 0.5 0 -vt 0.75 0 -vt 0.75 0.25 vt 0.5 0.25 +vt 0.75 0.25 +vt 0.75 0 vt 0.5 0 +vt 0.5 0.0156 +vt 0.75 0.0156 vt 0.75 0 -vt 0.75 0.015625 -vt 0.5 0.015625 vt 0.5 0 -vt 0.2500000000000001 0.2499999999999999 -vt 0.2500000000000001 0.2656249999999999 -vt 5.224578939412501e-17 0.2656249999999999 -vt 5.551115123125783e-17 0.2499999999999999 +vt 0 0.2656 +vt 0.25 0.2656 +vt 0.25 0.25 +vt 0 0.25 +vt 0.25 0.25 +vt 0 0.25 vt 0 0.5 -vt 5.224578939412501e-17 0.2499999999999999 -vt 0.2500000000000001 0.2499999999999999 -vt 0.2500000000000001 0.5 -vt 0.5 0.265625 -vt 0.5 0.015625 -vt 0.75 0.015625 -vt 0.75 0.265625 -vt 0.5 0.265625 -vt 0.5 0.015625 -vt 0.75 0.015625 -vt 0.75 0.265625 +vt 0.25 0.5 +vt 0.75 0.0156 +vt 0.5 0.0156 +vt 0.5 0.2656 +vt 0.75 0.2656 +vt 0.75 0.0156 +vt 0.5 0.0156 +vt 0.5 0.2656 +vt 0.75 0.2656 +vt 0.0781 0.7344 +vt 0.0625 0.7344 vt 0.0625 0.6875 -vt 0.0625 0.734375 -vt 0.078125 0.734375 -vt 0.078125 0.6875 +vt 0.0781 0.6875 +vt 0.0156 0.7344 +vt 0 0.7344 vt 0 0.6875 -vt 0 0.734375 -vt 0.015625 0.734375 -vt 0.015625 0.6875 -vt 0.078125 0.75 -vt 0.078125 0.734375 -vt 0.015625 0.734375 -vt 0.015625 0.75 +vt 0.0156 0.6875 +vt 0.0156 0.7344 +vt 0.0781 0.7344 +vt 0.0781 0.75 +vt 0.0156 0.75 +vt 0.0625 0.7344 +vt 0 0.7344 vt 0 0.6875 -vt 0 0.734375 -vt 0.0625 0.734375 vt 0.0625 0.6875 -vt 0.578125 0.75 -vt 0.578125 1 vt 0.5625 1 +vt 0.5781 1 +vt 0.5781 0.75 vt 0.5625 0.75 -vt 0.609375 0.984375 -vt 0.609375 1 vt 0.5625 1 -vt 0.5625 0.984375 -vt 0.609375 0.984375 -vt 0.609375 1 +vt 0.6094 1 +vt 0.6094 0.9844 +vt 0.5625 0.9844 vt 0.5625 1 -vt 0.5625 0.984375 -vt 0.609375 0.75 -vt 0.609375 1 +vt 0.6094 1 +vt 0.6094 0.9844 +vt 0.5625 0.9844 vt 0.5625 1 +vt 0.6094 1 +vt 0.6094 0.75 vt 0.5625 0.75 -vt 0.546875 0.75 -vt 0.546875 1 vt 0.5 1 +vt 0.5469 1 +vt 0.5469 0.75 vt 0.5 0.75 +vt 0.5781 0.9063 +vt 0.5625 0.9063 vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.578125 0.90625 -vt 0.578125 1 -vt 0.609375 0.984375 -vt 0.609375 1 +vt 0.5781 1 vt 0.5625 1 -vt 0.5625 0.984375 +vt 0.6094 1 +vt 0.6094 0.9844 +vt 0.5625 0.9844 +vt 0.6094 0.9063 +vt 0.5625 0.9063 vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.609375 0.90625 -vt 0.609375 1 +vt 0.6094 1 +vt 0.5469 0.9063 +vt 0.5 0.9063 vt 0.5 1 -vt 0.5 0.90625 -vt 0.546875 0.90625 -vt 0.546875 1 -vt 0.609375 0.75 -vt 0.609375 0.828125 -vt 0.5625 0.828125 +vt 0.5469 1 +vt 0.5625 0.8281 +vt 0.6094 0.8281 +vt 0.6094 0.75 vt 0.5625 0.75 -vt 0.578125 0.828125 -vt 0.578125 0.90625 -vt 0.5625 0.90625 -vt 0.5625 0.828125 -vt 0.546875 0.75 -vt 0.546875 0.828125 -vt 0.5 0.828125 +vt 0.5625 0.9063 +vt 0.5781 0.9063 +vt 0.5781 0.8281 +vt 0.5625 0.8281 +vt 0.5 0.8281 +vt 0.5469 0.8281 +vt 0.5469 0.75 vt 0.5 0.75 +vt 0.5781 0.9063 +vt 0.5625 0.9063 vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.578125 0.90625 -vt 0.578125 1 -vt 0.609375 0.984375 -vt 0.609375 1 +vt 0.5781 1 vt 0.5625 1 -vt 0.5625 0.984375 -vt 0.609375 0.984375 -vt 0.609375 1 +vt 0.6094 1 +vt 0.6094 0.9844 +vt 0.5625 0.9844 vt 0.5625 1 -vt 0.5625 0.984375 +vt 0.6094 1 +vt 0.6094 0.9844 +vt 0.5625 0.9844 +vt 0.6094 0.9063 +vt 0.5625 0.9063 vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.609375 0.90625 -vt 0.609375 1 +vt 0.6094 1 +vt 0.5469 0.9063 +vt 0.5 0.9063 vt 0.5 1 -vt 0.5 0.90625 -vt 0.546875 0.90625 -vt 0.546875 1 -vt 0.609375 0.75 -vt 0.609375 0.828125 -vt 0.5625 0.828125 +vt 0.5469 1 +vt 0.5625 0.8281 +vt 0.6094 0.8281 +vt 0.6094 0.75 vt 0.5625 0.75 -vt 0.578125 0.828125 -vt 0.578125 0.90625 -vt 0.5625 0.90625 -vt 0.5625 0.828125 -vt 0.546875 0.75 -vt 0.546875 0.828125 -vt 0.5 0.828125 +vt 0.5625 0.9063 +vt 0.5781 0.9063 +vt 0.5781 0.8281 +vt 0.5625 0.8281 +vt 0.5 0.8281 +vt 0.5469 0.8281 +vt 0.5469 0.75 vt 0.5 0.75 -vt 0.03125 0.765625 -vt 0.03125 1 -vt 0 1 -vt 0 0.765625 -vt 0.75 1 -vt 0.75 0.75 -vt 0.515625 0.75 -vt 0.515625 1 -vt 0.25 0.484375 +vt 0.25 0.4844 +vt 0.2344 0.4844 +vt 0.2344 0.25 vt 0.25 0.25 -vt 0 0.25 -vt 0 0.484375 -vt 0.25 1 -vt 0.25 0.75 -vt 0 0.75 -vt 0 1 -vt 0.5 0 -vt 0.5 0.25 +vt 0.25 0.9375 +vt 0.2344 0.9375 +vt 0.2344 0.7969 +vt 0.25 0.7969 vt 0.75 0.25 +vt 0.7344 0.25 +vt 0.7344 0 vt 0.75 0 -vt 0.515625 0.25 -vt 0.515625 0.5 vt 0.75 0.5 +vt 0.5156 0.5 +vt 0.5156 0.25 vt 0.75 0.25 vt 0.25 1 -vt 0.25 0.765625 -vt 0 0.765625 -vt 0 1 -vt 0.015625 0.75 -vt 0.015625 1 -vt 0 1 -vt 0 0.75 -vt 0.234375 1 -vt 0.234375 0.75 -vt 0 0.75 +vt 0.2344 1 +vt 0.2344 0.7656 +vt 0.25 0.7656 vt 0 1 -vt 0.75 1 -vt 0.75 0.75 -vt 0.5 0.75 -vt 0.5 1 -vt 0.484375 0.25 -vt 0.484375 0.5 -vt 0.734375 0.5 -vt 0.734375 0.25 -vt 0.234375 1 -vt 0.234375 0.75 +vt 0.0156 1 +vt 0.0156 0.75 vt 0 0.75 -vt 0 1 -vt 0.75 0.484375 -vt 0.75 0.25 +vt 0.5 0.7969 +vt 0.5156 0.7969 +vt 0.5156 0.9375 +vt 0.5 0.9375 +vt 0 0.9375 +vt 0 0.7969 +vt 0.2344 0.7969 +vt 0.2344 0.9375 vt 0.5 0.25 -vt 0.5 0.484375 -vt 0.75 1 -vt 0.75 0.75 -vt 0.5 0.75 -vt 0.5 1 -vt 0.515625 0 -vt 0.515625 0.25 -vt 0.765625 0.25 -vt 0.765625 0 -vt 0 0.5 +vt 0.75 0.25 +vt 0.75 0.4844 +vt 0.5 0.4844 +vt 0.5 0.9375 +vt 0.5 0.7969 +vt 0.75 0.7969 +vt 0.75 0.9375 +vt 0.7656 0.25 +vt 0.5156 0.25 +vt 0.5156 0 +vt 0.7656 0 +vt 0.2344 0.75 vt 0 0.75 -vt 0.234375 0.75 -vt 0.234375 0.5 +vt 0 0.5 +vt 0.2344 0.5 +vt 0.5 0.7656 +vt 0.75 0.7656 vt 0.75 1 -vt 0.75 0.765625 -vt 0.5 0.765625 vt 0.5 1 -vt 0.75 1 -vt 0.75 0.75 -vt 0.515625 0.75 -vt 0.515625 1 -vt 0.25 1 -vt 0.25 0.75 -vt 0 0.75 -vt 0 1 -vt 0 0.25 -vt 0 0.5 +vt 0.5156 0.9375 +vt 0.5156 0.7969 +vt 0.75 0.7969 +vt 0.75 0.9375 +vt 0 0.9375 +vt 0 0.7969 +vt 0.25 0.7969 +vt 0.25 0.9375 vt 0.25 0.5 +vt 0 0.5 +vt 0 0.25 vt 0.25 0.25 -vt 0.515625 0.5 -vt 0.515625 0.75 vt 0.75 0.75 +vt 0.5156 0.75 +vt 0.5156 0.5 vt 0.75 0.5 -vt 0.40625 0.3125 -vt 0.40625 0.421875 -vt 0.25 0.421875 -vt 0.25 0.3125 -vt 0.40625 0.3125 -vt 0.40625 0.421875 -vt 0.25 0.421875 -vt 0.25 0.3125 -vt 0.40625 0.3125 -vt 0.40625 0.421875 -vt 0.25 0.421875 -vt 0.25 0.3125 -vt 0.40625 0.3125 -vt 0.40625 0.421875 -vt 0.25 0.421875 -vt 0.25 0.3125 -vt 1 1 -vt 0.9375 1 -vt 0.9375 0.890625 -vt 1 0.890625 -vt 0.75 0.890625 -vt 0.8125 0.890625 -vt 0.8125 1 -vt 0.75 1 -vt 0.75 0.9375 -vt 0.859375 0.9375 -vt 0.859375 1 -vt 0.75 1 -vt 0.75 0.25 -vt 0.859375 0.25 -vt 0.859375 0.3125 -vt 0.75 0.3125 -vt 0.75 0.890625 -vt 0.859375 0.890625 -vt 0.859375 1 -vt 0.75 1 -vt 0.75 0.25 -vt 0.8125 0.25 -vt 0.8125 0.359375 -vt 0.75 0.359375 -vt 1 0.359375 -vt 0.9375 0.359375 -vt 0.9375 0.25 -vt 1 0.25 -vt 0.75 0.25 -vt 0.859375 0.25 -vt 0.859375 0.359375 -vt 0.75 0.359375 -vt 1 0.359375 -vt 0.9375 0.359375 -vt 0.9375 0.25 -vt 1 0.25 -vt 0.75 0.9375 -vt 0.859375 0.9375 -vt 0.859375 1 -vt 0.75 1 -vt 0.75 0.25 -vt 0.8125 0.25 -vt 0.8125 0.359375 -vt 0.75 0.359375 -vt 0.75 0.890625 -vt 0.8125 0.890625 -vt 0.8125 1 -vt 0.75 1 -vt 0.75 0.25 -vt 0.859375 0.25 -vt 0.859375 0.3125 -vt 0.75 0.3125 -vt 1 1 -vt 0.9375 1 -vt 0.9375 0.890625 -vt 1 0.890625 -vt 1 0.3125 -vt 0.90625 0.3125 -vt 0.90625 0.25 -vt 1 0.25 -vt 1 1 -vt 0.90625 1 -vt 0.90625 0.9375 -vt 1 0.9375 -vt 1 0.3125 -vt 0.90625 0.3125 -vt 0.90625 0.25 -vt 1 0.25 -vt 1 1 -vt 0.90625 1 -vt 0.90625 0.890625 -vt 1 0.890625 -vt 1 0.359375 -vt 0.90625 0.359375 -vt 0.90625 0.25 -vt 1 0.25 -vt 1 1 -vt 0.90625 1 -vt 0.90625 0.9375 -vt 1 0.9375 -vt 0.40625 0.328125 -vt 0.390625 0.34375 -vt 0.265625 0.34375 -vt 0.25 0.328125 -vt 0.40625 0.328125 -vt 0.390625 0.34375 -vt 0.265625 0.34375 -vt 0.25 0.328125 -vt 0.125 0.484375 -vt 0.125 0.609375 -vt 0 0.609375 -vt 0 0.484375 -vt 0.40625 0.328125 -vt 0.390625 0.34375 -vt 0.265625 0.34375 -vt 0.25 0.328125 -vt 0.40625 0.3125 -vt 0.390625 0.328125 -vt 0.265625 0.328125 -vt 0.25 0.3125 -vt 0.3125 1 -vt 0.3125 0.4375 vt 0.5 0.4375 -vt 0.5 1 -vt 0.3125 1 vt 0.3125 0.4375 -vt 0.5 0.4375 -vt 0.5 1 vt 0.3125 1 +vt 0.5 1 +vt 0.5 0.4375 vt 0.3125 0.4375 +vt 0.3125 1 +vt 0.5 1 vt 0.5 0.4375 +vt 0.3125 0.4375 +vt 0.3125 1 vt 0.5 1 -vt 0.5 0 -vt 0.5 0.5625 vt 0.3125 0.5625 -vt 0.3125 0 -vt 0.5 0 vt 0.5 0.5625 -vt 0.3125 0.5625 -vt 0.3125 0 vt 0.5 0 +vt 0.3125 0 +vt 0.3125 0.5625 vt 0.5 0.5625 +vt 0.5 0 +vt 0.3125 0 vt 0.3125 0.5625 +vt 0.5 0.5625 +vt 0.5 0 vt 0.3125 0 -vt 0.9991855820223742 0.31330740369829624 -vt 1 0.12581441797762583 -vt 0.8133144179776258 0.12419259630170376 -vt 0.8116925963017038 0.3116855820223742 -vt 0.8116925963017038 0.3116855820223742 -vt 0.9991855820223742 0.31330740369829624 -vt 1 0.12581441797762583 -vt 0.8133144179776258 0.12419259630170376 -vt 0.5 0.3125 -vt 0.5 0.5 +vt 0.8133 0.1242 +vt 1 0.1258 +vt 0.9992 0.3133 +vt 0.8117 0.3117 +vt 1 0.1258 +vt 0.9992 0.3133 +vt 0.8117 0.3117 +vt 0.8133 0.1242 vt 0.3125 0.5 -vt 0.3125 0.3125 -vt 0.5 0.4375 vt 0.5 0.5 +vt 0.5 0.3125 +vt 0.3125 0.3125 vt 0.3125 0.5 +vt 0.5 0.5 +vt 0.5 0.4375 vt 0.3125 0.4375 -vt 0.5 0 -vt 0.5 0.9375 vt 0.3125 0.9375 -vt 0.3125 0 -vt 0.5 0 vt 0.5 0.9375 -vt 0.3125 0.9375 -vt 0.3125 0 vt 0.5 0 +vt 0.3125 0 +vt 0.3125 0.9375 vt 0.5 0.9375 +vt 0.5 0 +vt 0.3125 0 vt 0.3125 0.9375 +vt 0.5 0.9375 +vt 0.5 0 vt 0.3125 0 -vt 0.8133144179776258 0.12419259630170376 -vt 1 0.12581441797762583 -vt 0.9991855820223742 0.31330740369829624 -vt 0.8116925963017038 0.3116855820223742 -vt 0.8133144179776258 0.3133074036982961 -vt 0.8116925963017039 0.12581441797762583 -vt 0.9991855820223742 0.12419259630170387 -vt 1 0.3116855820223742 -vt 0.5 0.375 -vt 0.5 0.5625 +vt 0.9992 0.3133 +vt 1 0.1258 +vt 0.8133 0.1242 +vt 0.8117 0.3117 +vt 0.9992 0.1242 +vt 0.8117 0.1258 +vt 0.8133 0.3133 +vt 1 0.3117 vt 0.3125 0.5625 -vt 0.3125 0.375 +vt 0.5 0.5625 vt 0.5 0.375 -vt 0.5 0.5 +vt 0.3125 0.375 vt 0.3125 0.5 +vt 0.5 0.5 +vt 0.5 0.375 vt 0.3125 0.375 -vt 0.5 0.4375 -vt 0.5 0.8125 vt 0.3125 0.8125 -vt 0.3125 0.4375 -vt 0.5 0.4375 vt 0.5 0.8125 -vt 0.3125 0.8125 +vt 0.5 0.4375 vt 0.3125 0.4375 +vt 0.3125 0.8125 +vt 0.5 0.8125 vt 0.5 0.4375 -vt 0.5 0.625 -vt 0.3125 0.625 vt 0.3125 0.4375 +vt 0.3125 0.625 +vt 0.5 0.625 vt 0.5 0.4375 -vt 0.5 0.8125 -vt 0.3125 0.8125 vt 0.3125 0.4375 -vt 0.5 0 -vt 0.5 0.8125 vt 0.3125 0.8125 -vt 0.3125 0 -vt 0.5 0 vt 0.5 0.8125 +vt 0.5 0.4375 +vt 0.3125 0.4375 vt 0.3125 0.8125 -vt 0.3125 0 +vt 0.5 0.8125 vt 0.5 0 -vt 0.5 0.1875 -vt 0.3125 0.1875 vt 0.3125 0 -vt 0.5 0 -vt 0.5 0.8125 vt 0.3125 0.8125 -vt 0.3125 0 +vt 0.5 0.8125 vt 0.5 0 -vt 0.5 1 -vt 0.3125 1 vt 0.3125 0 +vt 0.3125 0.1875 +vt 0.5 0.1875 vt 0.5 0 -vt 0.5 1 -vt 0.3125 1 vt 0.3125 0 +vt 0.3125 0.8125 +vt 0.5 0.8125 vt 0.5 0 -vt 0.5 1 +vt 0.3125 0 vt 0.3125 1 +vt 0.5 1 +vt 0.5 0 vt 0.3125 0 -vt 0.5 0.3125 +vt 0.3125 1 vt 0.5 1 +vt 0.5 0 +vt 0.3125 0 vt 0.3125 1 -vt 0.3125 0.3125 -vt 0.5 0.3125 vt 0.5 1 +vt 0.5 0 +vt 0.3125 0 vt 0.3125 1 -vt 0.3125 0.3125 -vt 0.5 0.3125 vt 0.5 1 +vt 0.5 0.3125 +vt 0.3125 0.3125 vt 0.3125 1 +vt 0.5 1 +vt 0.5 0.3125 vt 0.3125 0.3125 +vt 0.3125 1 +vt 0.5 1 vt 0.5 0.3125 -vt 0.5 0.4375 +vt 0.3125 0.3125 vt 0.3125 0.4375 +vt 0.5 0.4375 +vt 0.5 0.3125 vt 0.3125 0.3125 -vt 0.5 0.5 -vt 0.3125 0.5 vt 0.3125 0.3125 +vt 0.3125 0.5 +vt 0.5 0.5 vt 0.5 0.3125 -vt 1 0.125 -vt 1 0.3125 vt 0.8125 0.3125 +vt 1 0.3125 +vt 1 0.125 vt 0.8125 0.125 -vt 0.9991855820223742 0.31330740369829624 -vt 1 0.12581441797762583 -vt 0.8133144179776258 0.12419259630170376 -vt 0.8116925963017038 0.3116855820223742 -vt 0.8116925963017038 0.3116855820223742 -vt 0.9991855820223742 0.31330740369829624 -vt 1 0.12581441797762583 -vt 0.8133144179776258 0.12419259630170376 -vt 0.5 0.3125 -vt 0.5 0.5 +vt 0.8133 0.1242 +vt 1 0.1258 +vt 0.9992 0.3133 +vt 0.8117 0.3117 +vt 1 0.1258 +vt 0.9992 0.3133 +vt 0.8117 0.3117 +vt 0.8133 0.1242 vt 0.3125 0.5 -vt 0.3125 0.3125 -vt 0.5 0.4375 vt 0.5 0.5 -vt 0.3125 0.5 -vt 0.3125 0.4375 vt 0.5 0.3125 +vt 0.3125 0.3125 +vt 0.3125 0.5 +vt 0.5 0.5 vt 0.5 0.4375 vt 0.3125 0.4375 +vt 0.3125 0.4375 +vt 0.5 0.4375 +vt 0.5 0.3125 vt 0.3125 0.3125 -vt 0.5 0.5 -vt 0.3125 0.5 vt 0.3125 0.3125 +vt 0.3125 0.5 +vt 0.5 0.5 vt 0.5 0.3125 -vt 1 0.125 -vt 1 0.3125 vt 0.8125 0.3125 +vt 1 0.3125 +vt 1 0.125 vt 0.8125 0.125 -vt 0.5 0.3125 -vt 0.5 0.4375 vt 0.3125 0.4375 +vt 0.5 0.4375 +vt 0.5 0.3125 vt 0.3125 0.3125 -vt 0.5 0.5 -vt 0.3125 0.5 vt 0.3125 0.3125 +vt 0.3125 0.5 +vt 0.5 0.5 vt 0.5 0.3125 -vt 1 0.125 -vt 1 0.3125 vt 0.8125 0.3125 +vt 1 0.3125 +vt 1 0.125 vt 0.8125 0.125 -vt 0.5 0.3125 -vt 0.5 0.4375 vt 0.3125 0.4375 +vt 0.5 0.4375 +vt 0.5 0.3125 vt 0.3125 0.3125 -vt 0.5 0.5 -vt 0.3125 0.5 vt 0.3125 0.3125 +vt 0.3125 0.5 +vt 0.5 0.5 vt 0.5 0.3125 -vt 1 0.125 -vt 1 0.3125 vt 0.8125 0.3125 +vt 1 0.3125 +vt 1 0.125 vt 0.8125 0.125 -vt 0.8133144179776258 0.12419259630170376 -vt 1 0.12581441797762583 -vt 0.9991855820223742 0.31330740369829624 -vt 0.8116925963017038 0.3116855820223742 -vt 0.8133144179776258 0.3133074036982961 -vt 0.8116925963017039 0.12581441797762583 -vt 0.9991855820223742 0.12419259630170387 -vt 1 0.3116855820223742 -vt 0.5 0.375 -vt 0.5 0.5625 +vt 0.9992 0.3133 +vt 1 0.1258 +vt 0.8133 0.1242 +vt 0.8117 0.3117 +vt 0.9992 0.1242 +vt 0.8117 0.1258 +vt 0.8133 0.3133 +vt 1 0.3117 vt 0.3125 0.5625 -vt 0.3125 0.375 +vt 0.5 0.5625 vt 0.5 0.375 -vt 0.5 0.5 +vt 0.3125 0.375 vt 0.3125 0.5 +vt 0.5 0.5 +vt 0.5 0.375 vt 0.3125 0.375 -vt 1 0.21875 +vt 0.9844 0.5 vt 1 0.5 -vt 0.984375 0.5 -vt 0.984375 0.21875 -vt 1 0.21875 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.5 vt 1 0.5 -vt 0.984375 0.5 -vt 0.984375 0.21875 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.21875 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.5 vt 1 0.5 -vt 0.984375 0.5 -vt 0.984375 0.21875 -vt 1 0.21875 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.5 vt 1 0.5 -vt 0.984375 0.5 -vt 0.984375 0.21875 +vt 1 0.2188 +vt 0.9844 0.2188 vt 0 1 -vt 0 0.9375 -vt 0.375 0.9375 -vt 0.375 1 vt 0.5 1 -vt 0.5 0.9375 -vt 1 0.9375 -vt 1 1 vt 0.5 0.625 -vt 0.5 1 -vt 0 1 vt 0 0.625 vt 0.375 0.875 -vt 0.375 0.9375 -vt 0 0.9375 vt 0 0.875 +vt 0 1 +vt 0.375 1 vt 1 0.875 -vt 1 0.9375 -vt 0.5 0.9375 vt 0.5 0.875 -vt 0.625 1 -vt 0.625 0.9375 -vt 1 0.9375 -vt 1 1 -vt 0 1 -vt 0 0.9375 -vt 0.5 0.9375 vt 0.5 1 -vt 0.75 0.625 -vt 0.75 1 +vt 1 1 vt 0.25 1 +vt 0.75 1 +vt 0.75 0.625 vt 0.25 0.625 vt 1 0.875 -vt 1 0.9375 -vt 0.625 0.9375 vt 0.625 0.875 -vt 0.5 0.875 -vt 0.5 0.9375 -vt 0 0.9375 -vt 0 0.875 vt 0.625 1 -vt 0.625 0.9375 -vt 1 0.9375 vt 1 1 +vt 0.5 0.875 +vt 0 0.875 vt 0 1 -vt 0 0.9375 -vt 0.5 0.9375 vt 0.5 1 -vt 0.75 0.625 -vt 0.75 1 vt 0.25 1 +vt 0.75 1 +vt 0.75 0.625 vt 0.25 0.625 vt 1 0.875 -vt 1 0.9375 -vt 0.625 0.9375 vt 0.625 0.875 +vt 0.625 1 +vt 1 1 vt 0.5 0.875 -vt 0.5 0.9375 -vt 0 0.9375 vt 0 0.875 vt 0 1 -vt 0 0.9375 -vt 0.359375 0.9375 -vt 0.359375 1 -vt 0.75 0 -vt 1 0 +vt 0.5 1 vt 1 0.0625 +vt 1 0 +vt 0.75 0 vt 0.75 0.0625 -vt 0 0.625 -vt 0.25 0.625 vt 0.25 1 +vt 0.25 0.625 +vt 0 0.625 vt 0 1 -vt 0.359375 0.875 -vt 0.359375 0.9375 -vt 0 0.9375 +vt 0.3594 0.875 vt 0 0.875 -vt 0.75 0.09375 -vt 1 0.09375 -vt 1 0.15625 -vt 0.75 0.15625 -vt 1 0.0625 -vt 0.75 0.0625 +vt 0 1 +vt 0.3594 1 +vt 1 0.1563 +vt 1 0.0938 +vt 0.75 0.0938 +vt 0.75 0.1563 vt 0.75 0 +vt 0.75 0.0625 +vt 1 0.0625 vt 1 0 -vt 0.5 1 -vt 0.25 1 vt 0.25 0.625 +vt 0.25 1 +vt 0.5 1 vt 0.5 0.625 -vt 1 0.15625 -vt 0.75 0.15625 -vt 0.75 0.09375 -vt 1 0.09375 +vt 0.75 0.0938 +vt 0.75 0.1563 +vt 1 0.1563 +vt 1 0.0938 vt 1 0.25 -vt 1 0.265625 -vt 0 0.265625 +vt 1 0.2656 +vt 0 0.2656 vt 0 0.25 vt 0.75 0.25 -vt 0.75 0.265625 -vt 0.25 0.265625 +vt 0.75 0.2656 +vt 0.25 0.2656 vt 0.25 0.25 -vt 0.71875 0.25 -vt 0.71875 0.265625 -vt 0 0.265625 +vt 0.7188 0.25 +vt 0.7188 0.2656 +vt 0 0.2656 vt 0 0.25 -vt 0.71875 0.25 -vt 0.71875 0.265625 -vt 0 0.265625 +vt 0.7188 0.25 +vt 0.7188 0.2656 +vt 0 0.2656 vt 0 0.25 -vt 0.734375 0.421875 -vt 0.734375 0.546875 -vt 0.765625 0.546875 -vt 0.765625 0.421875 -vt 0.734375 0.4375 -vt 0.734375 0.5625 -vt 0.765625 0.5625 -vt 0.765625 0.4375 -vt 0.765625 0.59375 -vt 0.765625 0.5625 -vt 0.734375 0.5625 -vt 0.734375 0.59375 -vt 0.734375 0.546875 -vt 0.734375 0.578125 -vt 0.703125 0.578125 -vt 0.703125 0.546875 -vt 0.734375 0.421875 -vt 0.734375 0.546875 -vt 0.765625 0.546875 -vt 0.765625 0.421875 -vt 0.734375 0.4375 -vt 0.734375 0.5625 -vt 0.765625 0.5625 -vt 0.765625 0.4375 -vt 0.734375 0.421875 -vt 0.734375 0.546875 -vt 0.765625 0.546875 -vt 0.765625 0.421875 -vt 0.734375 0.4375 -vt 0.734375 0.5625 -vt 0.765625 0.5625 -vt 0.765625 0.4375 -vt 0.703125 0.578125 -vt 0.703125 0.546875 -vt 0.671875 0.546875 -vt 0.671875 0.578125 -vt 0.734375 0.546875 -vt 0.734375 0.578125 -vt 0.703125 0.578125 -vt 0.703125 0.546875 -vt 0.734375 0.421875 -vt 0.734375 0.546875 -vt 0.765625 0.546875 -vt 0.765625 0.421875 -vt 0.734375 0.4375 -vt 0.734375 0.5625 -vt 0.765625 0.5625 -vt 0.765625 0.4375 -vt 1 0.28125 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.28125 -vt 1 0.28125 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.28125 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.28125 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.28125 -vt 1 0.28125 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.28125 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.46875 -vt 1 0.71875 -vt 0.984375 0.71875 -vt 0.984375 0.46875 -vt 1 0.46875 -vt 1 0.71875 -vt 0.984375 0.71875 -vt 0.984375 0.46875 -vt 1 0.71875 -vt 1 0.734375 -vt 0.984375 0.734375 -vt 0.984375 0.71875 -vt 1 0.46875 -vt 1 0.71875 -vt 0.984375 0.71875 -vt 0.984375 0.46875 -vt 1 0.46875 -vt 1 0.71875 -vt 0.984375 0.71875 -vt 0.984375 0.46875 -vt 1 0.28125 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.28125 -vt 1 0.28125 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.28125 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.28125 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.28125 -vt 1 0.28125 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.28125 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.28125 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.28125 -vt 1 0.28125 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.28125 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.28125 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.28125 -vt 1 0.28125 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.28125 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 -vt 1 0.21875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.21875 +vt 0.7656 0.5469 +vt 0.7344 0.5469 +vt 0.7344 0.4219 +vt 0.7656 0.4219 +vt 0.7656 0.5625 +vt 0.7344 0.5625 +vt 0.7344 0.4375 +vt 0.7656 0.4375 +vt 0.7344 0.5625 +vt 0.7656 0.5625 +vt 0.7656 0.5938 +vt 0.7344 0.5938 +vt 0.7031 0.5781 +vt 0.7344 0.5781 +vt 0.7344 0.5469 +vt 0.7031 0.5469 +vt 0.7656 0.5469 +vt 0.7344 0.5469 +vt 0.7344 0.4219 +vt 0.7656 0.4219 +vt 0.7656 0.5625 +vt 0.7344 0.5625 +vt 0.7344 0.4375 +vt 0.7656 0.4375 +vt 0.7656 0.5469 +vt 0.7344 0.5469 +vt 0.7344 0.4219 +vt 0.7656 0.4219 +vt 0.7656 0.5625 +vt 0.7344 0.5625 +vt 0.7344 0.4375 +vt 0.7656 0.4375 +vt 0.6719 0.5469 +vt 0.7031 0.5469 +vt 0.7031 0.5781 +vt 0.6719 0.5781 +vt 0.7031 0.5781 +vt 0.7344 0.5781 +vt 0.7344 0.5469 +vt 0.7031 0.5469 +vt 0.7656 0.5469 +vt 0.7344 0.5469 +vt 0.7344 0.4219 +vt 0.7656 0.4219 +vt 0.7656 0.5625 +vt 0.7344 0.5625 +vt 0.7344 0.4375 +vt 0.7656 0.4375 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2813 +vt 0.9844 0.2813 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2813 +vt 0.9844 0.2813 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2813 +vt 0.9844 0.2813 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2813 +vt 0.9844 0.2813 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.7188 +vt 1 0.7188 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.7188 +vt 1 0.7188 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.7344 +vt 1 0.7344 +vt 1 0.7188 +vt 0.9844 0.7188 +vt 0.9844 0.7188 +vt 1 0.7188 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.7188 +vt 1 0.7188 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2813 +vt 0.9844 0.2813 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2813 +vt 0.9844 0.2813 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2813 +vt 0.9844 0.2813 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2813 +vt 0.9844 0.2813 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2813 +vt 0.9844 0.2813 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2813 +vt 0.9844 0.2813 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2813 +vt 0.9844 0.2813 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2813 +vt 0.9844 0.2813 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.2188 +vt 0.9844 0.2188 +vt 0.9844 0.4688 +vt 1 0.4688 vt 1 0.25 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.25 +vt 0.9844 0.25 +vt 0.9844 0.4688 +vt 1 0.4688 vt 1 0.25 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.25 +vt 0.9844 0.25 +vt 0.9844 0.4688 +vt 1 0.4688 vt 1 0.25 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.25 +vt 0.9844 0.25 +vt 0.9844 0.4688 +vt 1 0.4688 vt 1 0.25 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.25 +vt 0.9844 0.25 +vt 1 0.0536 +vt 0.75 0.0536 vt 0.75 0.125 -vt 0.75 0.0535714285714286 -vt 1 0.0535714285714286 vt 1 0.125 -vt 0.765625 0.125 -vt 0.765625 0.0535714285714286 -vt 1 0.0535714285714286 +vt 1 0.0536 +vt 0.7656 0.0536 +vt 0.7656 0.125 vt 1 0.125 -vt 0.578125 0.25 -vt 0.578125 0.296875 -vt 0.21875 0.296875 -vt 0.21875 0.25 +vt 0.2188 0.2969 +vt 0.5781 0.2969 +vt 0.5781 0.25 +vt 0.2188 0.25 +vt 0.75 0.0536 +vt 1 0.0536 vt 1 0 -vt 1 0.0535714285714286 -vt 0.75 0.0535714285714286 vt 0.75 0 -vt 0.328125 1 -vt 0.328125 0.9375 vt 0.6875 0.9375 +vt 0.3281 0.9375 +vt 0.3281 1 vt 0.6875 1 +vt 0.7656 0.0536 +vt 1 0.0536 vt 1 0 -vt 1 0.0535714285714286 -vt 0.765625 0.0535714285714286 -vt 0.765625 0 -vt 0.46875 0.25 -vt 0.46875 0.3125 -vt 0.109375 0.3125 -vt 0.109375 0.25 -vt 0.578125 0.25 -vt 0.578125 0.3125 -vt 0.09375 0.3125 -vt 0.09375 0.25 -vt 0.171875 1 -vt 0.171875 0.9375 -vt 0.65625 0.9375 -vt 0.65625 1 -vt 0.15625 1 -vt 0.15625 0.9375 -vt 0.515625 0.9375 -vt 0.515625 1 -vt 0.546875 0.25 -vt 0.546875 0.3125 +vt 0.7656 0 +vt 0.1094 0.3125 +vt 0.4688 0.3125 +vt 0.4688 0.25 +vt 0.1094 0.25 +vt 0.0938 0.3125 +vt 0.5781 0.3125 +vt 0.5781 0.25 +vt 0.0938 0.25 +vt 0.6563 0.9375 +vt 0.1719 0.9375 +vt 0.1719 1 +vt 0.6563 1 +vt 0.5156 0.9375 +vt 0.1563 0.9375 +vt 0.1563 1 +vt 0.5156 1 vt 0.1875 0.3125 +vt 0.5469 0.3125 +vt 0.5469 0.25 vt 0.1875 0.25 -vt 0.59375 0.25 -vt 0.59375 0.3125 -vt 0.109375 0.3125 -vt 0.109375 0.25 -vt 0.1875 1 +vt 0.1094 0.3125 +vt 0.5938 0.3125 +vt 0.5938 0.25 +vt 0.1094 0.25 +vt 0.5469 0.9375 vt 0.1875 0.9375 -vt 0.546875 0.9375 -vt 0.546875 1 -vt 0.140625 1 -vt 0.140625 0.9375 +vt 0.1875 1 +vt 0.5469 1 vt 0.625 0.9375 +vt 0.1406 0.9375 +vt 0.1406 1 vt 0.625 1 -vt 0.15625 1 -vt 0.15625 0.9375 -vt 0.515625 0.9375 -vt 0.515625 1 -vt 0.15625 1 -vt 0.15625 0.9375 -vt 0.640625 0.9375 -vt 0.640625 1 -vt 0.578125 0.25 -vt 0.578125 0.3125 -vt 0.09375 0.3125 -vt 0.09375 0.25 -vt 0.5 0.25 +vt 0.5156 0.9375 +vt 0.1563 0.9375 +vt 0.1563 1 +vt 0.5156 1 +vt 0.6406 0.9375 +vt 0.1563 0.9375 +vt 0.1563 1 +vt 0.6406 1 +vt 0.0938 0.3125 +vt 0.5781 0.3125 +vt 0.5781 0.25 +vt 0.0938 0.25 +vt 0.1406 0.3125 vt 0.5 0.3125 -vt 0.140625 0.3125 -vt 0.140625 0.25 -vt 0.734375 0.421875 -vt 0.734375 0.546875 -vt 0.765625 0.546875 -vt 0.765625 0.421875 -vt 0.734375 0.4375 -vt 0.734375 0.5625 -vt 0.765625 0.5625 -vt 0.765625 0.4375 -vt 0.765625 0.59375 -vt 0.765625 0.5625 -vt 0.734375 0.5625 -vt 0.734375 0.59375 -vt 0.734375 0.546875 -vt 0.734375 0.578125 -vt 0.703125 0.578125 -vt 0.703125 0.546875 -vt 0.734375 0.421875 -vt 0.734375 0.546875 -vt 0.765625 0.546875 -vt 0.765625 0.421875 -vt 0.734375 0.4375 -vt 0.734375 0.5625 -vt 0.765625 0.5625 -vt 0.765625 0.4375 -vt 0.015625 0.96875 -vt 0.015625 1 +vt 0.5 0.25 +vt 0.1406 0.25 +vt 0.7656 0.5469 +vt 0.7344 0.5469 +vt 0.7344 0.4219 +vt 0.7656 0.4219 +vt 0.7656 0.5625 +vt 0.7344 0.5625 +vt 0.7344 0.4375 +vt 0.7656 0.4375 +vt 0.7344 0.5625 +vt 0.7656 0.5625 +vt 0.7656 0.5938 +vt 0.7344 0.5938 +vt 0.7031 0.5781 +vt 0.7344 0.5781 +vt 0.7344 0.5469 +vt 0.7031 0.5469 +vt 0.7656 0.5469 +vt 0.7344 0.5469 +vt 0.7344 0.4219 +vt 0.7656 0.4219 +vt 0.7656 0.5625 +vt 0.7344 0.5625 +vt 0.7344 0.4375 +vt 0.7656 0.4375 vt 0 1 -vt 0 0.96875 -vt 0.25 0.984375 -vt 0.25 1 +vt 0.0156 1 +vt 0.0156 0.9688 +vt 0 0.9688 vt 0 1 -vt 0 0.984375 -vt 0.40625 0.890625 -vt 0.40625 0.90625 -vt 0.15625 0.90625 -vt 0.15625 0.890625 -vt 0.75 0.234375 -vt 0.75 0.265625 -vt 0.5 0.265625 -vt 0.5 0.234375 -vt 0.140625 0.6875 -vt 0.140625 0.875 +vt 0.25 1 +vt 0.25 0.9844 +vt 0 0.9844 +vt 0.1563 0.9063 +vt 0.4063 0.9063 +vt 0.4063 0.8906 +vt 0.1563 0.8906 +vt 0.5 0.2656 +vt 0.75 0.2656 +vt 0.75 0.2344 +vt 0.5 0.2344 vt 0.125 0.875 +vt 0.1406 0.875 +vt 0.1406 0.6875 vt 0.125 0.6875 -vt 0.03125 0.734375 -vt 0.03125 0.921875 -vt 0 0.921875 -vt 0 0.734375 -vt 0.921875 0.546875 -vt 0.921875 0.734375 -vt 0.90625 0.734375 -vt 0.90625 0.546875 -vt 1 0.625 +vt 0 0.9219 +vt 0.0313 0.9219 +vt 0.0313 0.7344 +vt 0 0.7344 +vt 0.9063 0.7344 +vt 0.9219 0.7344 +vt 0.9219 0.5469 +vt 0.9063 0.5469 +vt 0.9688 0.8125 vt 1 0.8125 -vt 0.96875 0.8125 -vt 0.96875 0.625 -vt 0.015625 0.96875 -vt 0.015625 1 +vt 1 0.625 +vt 0.9688 0.625 vt 0 1 -vt 0 0.96875 -vt 0.25 0.984375 -vt 0.25 1 +vt 0.0156 1 +vt 0.0156 0.9688 +vt 0 0.9688 vt 0 1 -vt 0 0.984375 -vt 0.40625 0.890625 -vt 0.40625 0.90625 -vt 0.15625 0.90625 -vt 0.15625 0.890625 -vt 0.75 0.234375 -vt 0.75 0.265625 -vt 0.5 0.265625 -vt 0.5 0.234375 -vt 0.015625 0.8125 -vt 0.015625 1 +vt 0.25 1 +vt 0.25 0.9844 +vt 0 0.9844 +vt 0.1563 0.9063 +vt 0.4063 0.9063 +vt 0.4063 0.8906 +vt 0.1563 0.8906 +vt 0.5 0.2656 +vt 0.75 0.2656 +vt 0.75 0.2344 +vt 0.5 0.2344 vt 0 1 +vt 0.0156 1 +vt 0.0156 0.8125 vt 0 0.8125 -vt 0.921875 0.546875 -vt 0.921875 0.734375 -vt 0.90625 0.734375 -vt 0.90625 0.546875 -vt 0.03125 0.984375 -vt 0.03125 1 +vt 0.9063 0.7344 +vt 0.9219 0.7344 +vt 0.9219 0.5469 +vt 0.9063 0.5469 vt 0 1 -vt 0 0.984375 -vt 1 0.625 +vt 0.0313 1 +vt 0.0313 0.9844 +vt 0 0.9844 +vt 0.9688 0.8125 vt 1 0.8125 -vt 0.96875 0.8125 -vt 0.96875 0.625 -vt 0.015625 0.96875 -vt 0.015625 1 +vt 1 0.625 +vt 0.9688 0.625 +vt 0 1 +vt 0.0156 1 +vt 0.0156 0.9688 +vt 0 0.9688 vt 0 1 -vt 0 0.96875 -vt 0.25 0.984375 vt 0.25 1 +vt 0.25 0.9844 +vt 0 0.9844 +vt 0.1563 0.9063 +vt 0.4063 0.9063 +vt 0.4063 0.8906 +vt 0.1563 0.8906 +vt 0.5 0.2656 +vt 0.75 0.2656 +vt 0.75 0.2344 +vt 0.5 0.2344 vt 0 1 -vt 0 0.984375 -vt 0.40625 0.890625 -vt 0.40625 0.90625 -vt 0.15625 0.90625 -vt 0.15625 0.890625 -vt 0.75 0.234375 -vt 0.75 0.265625 -vt 0.5 0.265625 -vt 0.5 0.234375 -vt 0.015625 0.96875 -vt 0.015625 1 +vt 0.0156 1 +vt 0.0156 0.9688 +vt 0 0.9688 vt 0 1 -vt 0 0.96875 -vt 0.25 0.984375 vt 0.25 1 -vt 0 1 -vt 0 0.984375 -vt 0.40625 0.890625 -vt 0.40625 0.90625 -vt 0.15625 0.90625 -vt 0.15625 0.890625 -vt 0.75 0.234375 -vt 0.75 0.265625 -vt 0.5 0.265625 -vt 0.5 0.234375 -vt 0.140625 0.6875 -vt 0.140625 0.875 +vt 0.25 0.9844 +vt 0 0.9844 +vt 0.1563 0.9063 +vt 0.4063 0.9063 +vt 0.4063 0.8906 +vt 0.1563 0.8906 +vt 0.5 0.2656 +vt 0.75 0.2656 +vt 0.75 0.2344 +vt 0.5 0.2344 vt 0.125 0.875 +vt 0.1406 0.875 +vt 0.1406 0.6875 vt 0.125 0.6875 -vt 0.015625 0.8125 -vt 0.015625 1 vt 0 1 +vt 0.0156 1 +vt 0.0156 0.8125 vt 0 0.8125 -vt 0.03125 0.984375 -vt 0.03125 1 vt 0 1 -vt 0 0.984375 -vt 0.03125 0.984375 -vt 0.03125 1 +vt 0.0313 1 +vt 0.0313 0.9844 +vt 0 0.9844 vt 0 1 -vt 0 0.984375 -vt 0.03125 0.734375 -vt 0.03125 0.921875 -vt 0 0.921875 -vt 0 0.734375 -vt 0.875 0.484375 -vt 0.875 0.609375 -vt 0.859375 0.609375 -vt 0.859375 0.484375 -vt 0.859375 0.484375 -vt 0.859375 0.609375 -vt 0.84375 0.609375 -vt 0.84375 0.484375 -vt 0.875 0.59375 -vt 0.875 0.609375 -vt 0.75 0.609375 -vt 0.75 0.59375 -vt 0.875 0.484375 -vt 0.875 0.5 +vt 0.0313 1 +vt 0.0313 0.9844 +vt 0 0.9844 +vt 0 0.9219 +vt 0.0313 0.9219 +vt 0.0313 0.7344 +vt 0 0.7344 +vt 0.8594 0.6094 +vt 0.875 0.6094 +vt 0.875 0.4844 +vt 0.8594 0.4844 +vt 0.8438 0.6094 +vt 0.8594 0.6094 +vt 0.8594 0.4844 +vt 0.8438 0.4844 +vt 0.75 0.6094 +vt 0.875 0.6094 +vt 0.875 0.5938 +vt 0.75 0.5938 vt 0.75 0.5 -vt 0.75 0.484375 -vt 0.875 0.484375 -vt 0.875 0.609375 -vt 0.75 0.609375 -vt 0.75 0.484375 -vt 0.875 0.484375 -vt 0.875 0.609375 -vt 0.859375 0.609375 -vt 0.859375 0.484375 -vt 0.859375 0.484375 -vt 0.859375 0.609375 -vt 0.84375 0.609375 -vt 0.84375 0.484375 -vt 0.875 0.59375 -vt 0.875 0.609375 -vt 0.75 0.609375 -vt 0.75 0.59375 -vt 0.875 0.484375 vt 0.875 0.5 +vt 0.875 0.4844 +vt 0.75 0.4844 +vt 0.75 0.6094 +vt 0.875 0.6094 +vt 0.875 0.4844 +vt 0.75 0.4844 +vt 0.8594 0.6094 +vt 0.875 0.6094 +vt 0.875 0.4844 +vt 0.8594 0.4844 +vt 0.8438 0.6094 +vt 0.8594 0.6094 +vt 0.8594 0.4844 +vt 0.8438 0.4844 +vt 0.75 0.6094 +vt 0.875 0.6094 +vt 0.875 0.5938 +vt 0.75 0.5938 vt 0.75 0.5 -vt 0.75 0.484375 -vt 0.75 0.484375 -vt 0.75 0.609375 -vt 0.625 0.609375 -vt 0.625 0.484375 -vt 0.75 0.25 -vt 0.875 0.25 +vt 0.875 0.5 +vt 0.875 0.4844 +vt 0.75 0.4844 +vt 0.625 0.6094 +vt 0.75 0.6094 +vt 0.75 0.4844 +vt 0.625 0.4844 vt 0.875 0.4375 +vt 0.875 0.25 +vt 0.75 0.25 vt 0.75 0.4375 -vt 0.75 0.8125 -vt 0.875 0.8125 vt 0.875 1 +vt 0.875 0.8125 +vt 0.75 0.8125 vt 0.75 1 +vt 0.8906 0.25 +vt 0.8906 0.4375 vt 1 0.4375 -vt 0.890625 0.4375 -vt 0.890625 0.25 vt 1 0.25 +vt 0.8906 0.8125 +vt 0.8906 1 vt 1 1 -vt 0.890625 1 -vt 0.890625 0.8125 vt 1 0.8125 -vt 0.25 0.015625 -vt 0.125 0.015625 vt 0.125 0 +vt 0.125 0.0156 +vt 0.25 0.0156 vt 0.25 0 -vt 0.484375 0.015625 -vt 0.359375 0.015625 -vt 0.359375 0 -vt 0.484375 0 -vt 1 0.734375 -vt 0.875 0.734375 +vt 0.3594 0 +vt 0.3594 0.0156 +vt 0.4844 0.0156 +vt 0.4844 0 vt 0.875 0.625 +vt 0.875 0.7344 +vt 1 0.7344 vt 1 0.625 -vt 0 0.0625 +vt 0.125 0.1719 vt 0.125 0.0625 -vt 0.125 0.171875 -vt 0 0.171875 -vt 1 0.640625 -vt 0.890625 0.640625 -vt 0.890625 0.53125 -vt 1 0.53125 +vt 0 0.0625 +vt 0 0.1719 +vt 0.8906 0.5313 +vt 0.8906 0.6406 +vt 1 0.6406 +vt 1 0.5313 +vt 0.3594 0.0156 +vt 0.3594 0 vt 0.25 0 -vt 0.359375 0 -vt 0.359375 0.015625 -vt 0.25 0.015625 -vt 0 0.578125 -vt 0.109375 0.578125 -vt 0.109375 0.6875 +vt 0.25 0.0156 +vt 0.1094 0.6875 +vt 0.1094 0.5781 +vt 0 0.5781 vt 0 0.6875 -vt 0.015625 0 +vt 0.125 0.0156 vt 0.125 0 -vt 0.125 0.015625 -vt 0.015625 0.015625 -vt 0.75 0.25 -vt 0.875 0.25 +vt 0.0156 0 +vt 0.0156 0.0156 vt 0.875 0.4375 +vt 0.875 0.25 +vt 0.75 0.25 vt 0.75 0.4375 -vt 0.75 0.8125 -vt 0.875 0.8125 vt 0.875 1 +vt 0.875 0.8125 +vt 0.75 0.8125 vt 0.75 1 +vt 0.8906 0.25 +vt 0.8906 0.4375 vt 1 0.4375 -vt 0.890625 0.4375 -vt 0.890625 0.25 vt 1 0.25 +vt 0.8906 0.8125 +vt 0.8906 1 vt 1 1 -vt 0.890625 1 -vt 0.890625 0.8125 vt 1 0.8125 -vt 0.25 0.015625 -vt 0.125 0.015625 vt 0.125 0 +vt 0.125 0.0156 +vt 0.25 0.0156 vt 0.25 0 -vt 0.484375 0.015625 -vt 0.359375 0.015625 -vt 0.359375 0 -vt 0.484375 0 -vt 1 0.734375 -vt 0.875 0.734375 +vt 0.3594 0 +vt 0.3594 0.0156 +vt 0.4844 0.0156 +vt 0.4844 0 vt 0.875 0.625 +vt 0.875 0.7344 +vt 1 0.7344 vt 1 0.625 -vt 0 0.0625 +vt 0.125 0.1719 vt 0.125 0.0625 -vt 0.125 0.171875 -vt 0 0.171875 -vt 1 0.640625 -vt 0.890625 0.640625 -vt 0.890625 0.53125 -vt 1 0.53125 +vt 0 0.0625 +vt 0 0.1719 +vt 0.8906 0.5313 +vt 0.8906 0.6406 +vt 1 0.6406 +vt 1 0.5313 +vt 0.3594 0.0156 +vt 0.3594 0 vt 0.25 0 -vt 0.359375 0 -vt 0.359375 0.015625 -vt 0.25 0.015625 -vt 0 0.578125 -vt 0.109375 0.578125 -vt 0.109375 0.6875 +vt 0.25 0.0156 +vt 0.1094 0.6875 +vt 0.1094 0.5781 +vt 0 0.5781 vt 0 0.6875 -vt 0.015625 0 +vt 0.125 0.0156 vt 0.125 0 -vt 0.125 0.015625 -vt 0.015625 0.015625 -vt 0.359375 0.015625 -vt 0.23437500000000006 0.015625 -vt 0.23437500000000006 0 -vt 0.359375 0 -vt 0.3125 0.015625 -vt 0.18750000000000006 0.015625 -vt 0.18750000000000006 0 +vt 0.0156 0 +vt 0.0156 0.0156 +vt 0.2344 0 +vt 0.2344 0.0156 +vt 0.3594 0.0156 +vt 0.3594 0 +vt 0.1875 0 +vt 0.1875 0.0156 +vt 0.3125 0.0156 vt 0.3125 0 -vt 0.5 0.03125 -vt 0.37500000000000006 0.03125 -vt 0.37500000000000006 0 +vt 0.375 0 +vt 0.375 0.0313 +vt 0.5 0.0313 vt 0.5 0 +vt 0.125 0.0313 +vt 0.125 0 vt 0 0 -vt 0.12499999999999994 0 -vt 0.12499999999999994 0.03125 -vt 0 0.03125 -vt 0.5 0.03125 -vt 0.39062499999999994 0.03125 -vt 0.39062499999999994 0 +vt 0 0.0313 +vt 0.3906 0 +vt 0.3906 0.0313 +vt 0.5 0.0313 vt 0.5 0 +vt 0.2344 0.0156 +vt 0.2344 0 vt 0.125 0 -vt 0.23437500000000006 0 -vt 0.23437500000000006 0.015625 -vt 0.125 0.015625 +vt 0.125 0.0156 +vt 0.1094 0.0313 +vt 0.1094 0 vt 0 0 -vt 0.10937500000000006 0 -vt 0.10937500000000006 0.03125 -vt 0 0.03125 -vt 0.078125 0 -vt 0.18750000000000006 0 -vt 0.18750000000000006 0.015625 -vt 0.078125 0.015625 -vt 0.359375 0.015625 -vt 0.23437500000000006 0.015625 -vt 0.23437500000000006 0 -vt 0.359375 0 -vt 0.3125 0.015625 -vt 0.18750000000000006 0.015625 -vt 0.18750000000000006 0 +vt 0 0.0313 +vt 0.1875 0.0156 +vt 0.1875 0 +vt 0.0781 0 +vt 0.0781 0.0156 +vt 0.2344 0 +vt 0.2344 0.0156 +vt 0.3594 0.0156 +vt 0.3594 0 +vt 0.1875 0 +vt 0.1875 0.0156 +vt 0.3125 0.0156 vt 0.3125 0 -vt 0.5 0.03125 -vt 0.37500000000000006 0.03125 -vt 0.37500000000000006 0 +vt 0.375 0 +vt 0.375 0.0313 +vt 0.5 0.0313 vt 0.5 0 +vt 0.125 0.0313 +vt 0.125 0 vt 0 0 -vt 0.12499999999999994 0 -vt 0.12499999999999994 0.03125 -vt 0 0.03125 -vt 0.5 0.03125 -vt 0.39062499999999994 0.03125 -vt 0.39062499999999994 0 +vt 0 0.0313 +vt 0.3906 0 +vt 0.3906 0.0313 +vt 0.5 0.0313 vt 0.5 0 +vt 0.2344 0.0156 +vt 0.2344 0 vt 0.125 0 -vt 0.23437500000000006 0 -vt 0.23437500000000006 0.015625 -vt 0.125 0.015625 +vt 0.125 0.0156 +vt 0.1094 0.0313 +vt 0.1094 0 vt 0 0 -vt 0.10937500000000006 0 -vt 0.10937500000000006 0.03125 -vt 0 0.03125 -vt 0.078125 0 -vt 0.18750000000000006 0 -vt 0.18750000000000006 0.015625 -vt 0.078125 0.015625 -vt 0.5625 0.9375000000000001 +vt 0 0.0313 +vt 0.1875 0.0156 +vt 0.1875 0 +vt 0.0781 0 +vt 0.0781 0.0156 +vt 0.6875 0 +vt 0.5625 0 +vt 0.5625 0.9375 +vt 0.6875 0.9375 vt 0.5625 0 vt 0.6875 0 -vt 0.6875 0.9375000000000001 -vt 0.6874999999999999 0.9375000000000001 -vt 0.6874999999999999 2.220446049250313e-16 -vt 0.5624999999999999 2.220446049250313e-16 -vt 0.5624999999999999 0.9375000000000001 -vt 0.5625000000000001 0.9375 -vt 0.5625000000000001 0 -vt 0.6875000000000001 0 -vt 0.6875000000000001 0.9375 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.6875 0.21875 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.71875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.6875 0.265625 -vt 0.703125 0.265625 -vt 0.703125 0.21875 -vt 0.6875 0.21875 -vt 0.734375 0.21875 -vt 0.71875 0.21875 -vt 0.71875 0.265625 -vt 0.734375 0.265625 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.734375 0.046875 -vt 0.65625 0.046875 -vt 0.65625 0 -vt 0.734375 0 -vt 0.265625 0.25 -vt 0.34375 0.25 -vt 0.34375 0.296875 -vt 0.265625 0.296875 -vt 0.265625 0.25 -vt 0.328125 0.25 -vt 0.328125 0.296875 -vt 0.265625 0.296875 -vt 0.34375 0.296875 -vt 0.28125 0.296875 -vt 0.28125 0.25 -vt 0.34375 0.25 -vt 1 0.984375 -vt 0.9375 0.984375 -vt 0.9375 0.90625 -vt 1 0.90625 -vt 1 0.921875 -vt 0.9375 0.921875 -vt 0.9375 0.859375 -vt 1 0.859375 -vt 0.34375 0.296875 -vt 0.28125 0.296875 -vt 0.28125 0.25 -vt 0.34375 0.25 -vt 0.59375 0 -vt 0.65625 0 -vt 0.65625 0.046875 -vt 0.59375 0.046875 -vt 0.90625 0.90625 -vt 0.96875 0.90625 -vt 0.96875 0.984375 -vt 0.90625 0.984375 -vt 0.34375 0.296875 -vt 0.28125 0.296875 -vt 0.28125 0.25 -vt 0.34375 0.25 -vt 0.25 0.25 +vt 0.6875 0.9375 +vt 0.5625 0.9375 +vt 0.6875 0 +vt 0.5625 0 +vt 0.5625 0.9375 +vt 0.6875 0.9375 +vt 0.6875 0.2656 +vt 0.7031 0.2656 +vt 0.7031 0.2188 +vt 0.6875 0.2188 +vt 0.7031 0.2656 +vt 0.7031 0.2188 +vt 0.6875 0.2188 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7188 0.2656 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.6875 0.2188 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.2656 +vt 0.6875 0.2656 +vt 0.6875 0.2188 +vt 0.7188 0.2656 +vt 0.7188 0.2188 +vt 0.7344 0.2188 +vt 0.7344 0.2656 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.6875 0.2188 +vt 0.6563 0 +vt 0.6563 0.0469 +vt 0.7344 0.0469 +vt 0.7344 0 +vt 0.3438 0.2969 +vt 0.3438 0.25 +vt 0.2656 0.25 +vt 0.2656 0.2969 +vt 0.3281 0.2969 +vt 0.3281 0.25 +vt 0.2656 0.25 +vt 0.2656 0.2969 +vt 0.2813 0.25 +vt 0.2813 0.2969 +vt 0.3438 0.2969 +vt 0.3438 0.25 +vt 0.9375 0.9063 +vt 0.9375 0.9844 +vt 1 0.9844 +vt 1 0.9063 +vt 0.9375 0.8594 +vt 0.9375 0.9219 +vt 1 0.9219 +vt 1 0.8594 +vt 0.2813 0.25 +vt 0.2813 0.2969 +vt 0.3438 0.2969 +vt 0.3438 0.25 +vt 0.6563 0.0469 +vt 0.6563 0 +vt 0.5938 0 +vt 0.5938 0.0469 +vt 0.9688 0.9844 +vt 0.9688 0.9063 +vt 0.9063 0.9063 +vt 0.9063 0.9844 +vt 0.2813 0.25 +vt 0.2813 0.2969 +vt 0.3438 0.2969 +vt 0.3438 0.25 +vt 0.3125 0.2969 vt 0.3125 0.25 -vt 0.3125 0.296875 -vt 0.25 0.296875 -vt 0.90625 0.859375 -vt 0.96875 0.859375 -vt 0.96875 0.921875 -vt 0.90625 0.921875 -vt 0.453125 0.609375 -vt 0.453125 0.671875 -vt 0.4375 0.671875 -vt 0.4375 0.609375 -vt 0.375 0.609375 -vt 0.375 0.671875 -vt 0.359375 0.671875 -vt 0.359375 0.609375 -vt 0.4375 0.609375 -vt 0.4375 0.625 +vt 0.25 0.25 +vt 0.25 0.2969 +vt 0.9688 0.9219 +vt 0.9688 0.8594 +vt 0.9063 0.8594 +vt 0.9063 0.9219 +vt 0.4375 0.6719 +vt 0.4531 0.6719 +vt 0.4531 0.6094 +vt 0.4375 0.6094 +vt 0.3594 0.6719 +vt 0.375 0.6719 +vt 0.375 0.6094 +vt 0.3594 0.6094 vt 0.375 0.625 -vt 0.375 0.609375 -vt 0.5 0.609375 -vt 0.5 0.625 vt 0.4375 0.625 -vt 0.4375 0.609375 -vt 0.5 0.609375 -vt 0.5 0.671875 -vt 0.4375 0.671875 -vt 0.4375 0.609375 +vt 0.4375 0.6094 +vt 0.375 0.6094 +vt 0.4375 0.625 +vt 0.5 0.625 +vt 0.5 0.6094 +vt 0.4375 0.6094 +vt 0.4375 0.6719 +vt 0.5 0.6719 +vt 0.5 0.6094 +vt 0.4375 0.6094 +vt 0.0156 0.9063 +vt 0 0.9063 vt 0 0.8125 -vt 0 0.90625 -vt 0.015625 0.90625 -vt 0.015625 0.8125 +vt 0.0156 0.8125 +vt 0.0156 0.9063 +vt 0 0.9063 vt 0 0.8125 -vt 0 0.90625 -vt 0.015625 0.90625 -vt 0.015625 0.8125 -vt 0.09375 0.90625 -vt 0.09375 0.890625 -vt 0 0.890625 -vt 0 0.90625 -vt 0.09375 0.8125 -vt 0.09375 0.828125 -vt 0 0.828125 +vt 0.0156 0.8125 +vt 0 0.8906 +vt 0.0938 0.8906 +vt 0.0938 0.9063 +vt 0 0.9063 +vt 0 0.8281 +vt 0.0938 0.8281 +vt 0.0938 0.8125 vt 0 0.8125 +vt 0.0938 0.9063 +vt 0 0.9063 vt 0 0.8125 -vt 0 0.90625 -vt 0.09375 0.90625 -vt 0.09375 0.8125 -vt 0.21875 0.125 -vt 0.21875 0.0625 +vt 0.0938 0.8125 vt 0.25 0.0625 +vt 0.2188 0.0625 +vt 0.2188 0.125 vt 0.25 0.125 -vt 0 0.125 +vt 0.0313 0.0625 vt 0 0.0625 -vt 0.03125 0.0625 -vt 0.03125 0.125 -vt 0.21875 0.03125 -vt 0.125 0.03125 +vt 0 0.125 +vt 0.0313 0.125 vt 0.125 0 -vt 0.21875 0 -vt 0.40625 0.03125 -vt 0.3125 0.03125 +vt 0.125 0.0313 +vt 0.2188 0.0313 +vt 0.2188 0 vt 0.3125 0 -vt 0.40625 0 +vt 0.3125 0.0313 +vt 0.4063 0.0313 +vt 0.4063 0 +vt 0.8438 1 +vt 0.8438 0.9375 vt 0.75 0.9375 -vt 0.84375 0.9375 -vt 0.84375 1 vt 0.75 1 +vt 0.8438 0.3125 +vt 0.8438 0.25 vt 0.75 0.25 -vt 0.84375 0.25 -vt 0.84375 0.3125 vt 0.75 0.3125 -vt 0.25 0 +vt 0.2188 0.0625 vt 0.25 0.0625 -vt 0.21875 0.0625 -vt 0.21875 0 -vt 0.03125 0 -vt 0.03125 0.0625 +vt 0.25 0 +vt 0.2188 0 vt 0 0.0625 +vt 0.0313 0.0625 +vt 0.0313 0 vt 0 0 +vt 0.9063 0.25 +vt 0.9063 0.3125 vt 1 0.3125 -vt 0.90625 0.3125 -vt 0.90625 0.25 vt 1 0.25 -vt 0.21875 0 +vt 0.3125 0.0313 vt 0.3125 0 -vt 0.3125 0.03125 -vt 0.21875 0.03125 -vt 0.03125 0 +vt 0.2188 0 +vt 0.2188 0.0313 +vt 0.125 0.0313 vt 0.125 0 -vt 0.125 0.03125 -vt 0.03125 0.03125 +vt 0.0313 0 +vt 0.0313 0.0313 +vt 0.9063 0.9375 +vt 0.9063 1 vt 1 1 -vt 0.90625 1 -vt 0.90625 0.9375 vt 1 0.9375 -vt 0.6875 0.3125 -vt 0.6875 0.9375 -vt 0.5625 0.9375 -vt 0.5625 0.3125 vt 0.5625 0.9375 +vt 0.6875 0.9375 +vt 0.6875 0.3125 vt 0.5625 0.3125 vt 0.6875 0.3125 +vt 0.5625 0.3125 +vt 0.5625 0.9375 vt 0.6875 0.9375 -vt 0.6875 0 -vt 0.6875 0.625 vt 0.5625 0.625 +vt 0.6875 0.625 +vt 0.6875 0 vt 0.5625 0 -vt 0.5625 0.9375 -vt 0.5625 0.3125 vt 0.6875 0.3125 +vt 0.5625 0.3125 +vt 0.5625 0.9375 vt 0.6875 0.9375 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.6875 0.21875 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.6874999999999999 0.6875000000000001 -vt 0.6874999999999999 0.8750000000000001 -vt 0.5624999999999999 0.8750000000000001 -vt 0.5624999999999999 0.6875000000000001 -vt 0.6874999999999999 0.6875000000000001 -vt 0.6874999999999999 0.8750000000000001 -vt 0.5624999999999999 0.8750000000000001 -vt 0.5624999999999999 0.6875000000000001 -vt 0.6874999999999999 0.7500000000000001 -vt 0.6874999999999999 0.8750000000000001 -vt 0.5624999999999999 0.8750000000000001 -vt 0.5624999999999999 0.7500000000000001 -vt 0.6874999999999999 0.6875000000000001 -vt 0.6874999999999999 0.8750000000000001 -vt 0.5624999999999999 0.8750000000000001 -vt 0.5624999999999999 0.6875000000000001 -vt 0.5624999999999999 0.8750000000000001 -vt 0.5624999999999999 0.6875000000000001 -vt 0.6874999999999999 0.6875000000000001 -vt 0.6874999999999999 0.8750000000000001 -vt 0.6875 0.25 -vt 0.6875 0.375 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.6875 0.2656 +vt 0.7031 0.2656 +vt 0.7031 0.2188 +vt 0.6875 0.2188 +vt 0.7031 0.2656 +vt 0.7031 0.2188 +vt 0.6875 0.2188 +vt 0.6875 0.2656 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.6875 0.2188 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.6875 0.2188 +vt 0.5625 0.875 +vt 0.6875 0.875 +vt 0.6875 0.6875 +vt 0.5625 0.6875 +vt 0.5625 0.875 +vt 0.6875 0.875 +vt 0.6875 0.6875 +vt 0.5625 0.6875 +vt 0.5625 0.875 +vt 0.6875 0.875 +vt 0.6875 0.75 +vt 0.5625 0.75 +vt 0.5625 0.875 +vt 0.6875 0.875 +vt 0.6875 0.6875 +vt 0.5625 0.6875 +vt 0.6875 0.6875 +vt 0.5625 0.6875 +vt 0.5625 0.875 +vt 0.6875 0.875 vt 0.5625 0.375 +vt 0.6875 0.375 +vt 0.6875 0.25 vt 0.5625 0.25 -vt 0.875 0.125 -vt 0.75 0.125 vt 0.75 0 +vt 0.75 0.125 +vt 0.875 0.125 vt 0.875 0 -vt 0.7505429453184171 0.12553826913219746 -vt 0.7494617308678025 0.0005429453184171429 -vt 0.8744570546815829 0 -vt 0.8755382691321975 0.12445705468158286 -vt 0.6874999999999999 0.3125000000000001 -vt 0.5624999999999999 0.3125000000000001 -vt 0.5624999999999999 0.2500000000000001 -vt 0.6874999999999999 0.2500000000000001 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.6875 0.21875 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.84375 0.71875 -vt 0.84375 0.859375 -vt 0.828125 0.859375 -vt 0.828125 0.71875 -vt 0.84375 0.71875 -vt 0.84375 0.859375 -vt 0.828125 0.859375 -vt 0.828125 0.71875 -vt 0.828125 0.734375 -vt 0.84375 0.734375 -vt 0.84375 0.84375 -vt 0.828125 0.84375 -vt 0.84375 0.859375 -vt 0.828125 0.859375 -vt 0.828125 0.75 -vt 0.84375 0.75 -vt 0.84375 0.71875 -vt 0.84375 0.859375 -vt 0.734375 0.859375 -vt 0.734375 0.71875 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.3582640625 -vt 1 0.3582640625 -vt 0.984375 0.515625 -vt 0.984375 0.328125 -vt 1 0.328125 -vt 1 0.515625 -vt 0.546875 0.25 -vt 0.734375 0.25 -vt 0.734375 0.328125 -vt 0.46875 0.328125 -vt 0.734375 0.265625 -vt 0.921875 0.265625 -vt 1 0.34375 -vt 0.734375 0.34375 +vt 0.8745 0 +vt 0.7495 0.0005 +vt 0.7505 0.1255 +vt 0.8755 0.1245 +vt 0.5625 0.25 +vt 0.5625 0.3125 +vt 0.6875 0.3125 +vt 0.6875 0.25 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.6875 0.2656 +vt 0.7031 0.2656 +vt 0.7031 0.2188 +vt 0.6875 0.2188 +vt 0.7031 0.2656 +vt 0.7031 0.2188 +vt 0.6875 0.2188 +vt 0.6875 0.2656 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.6875 0.2188 +vt 0.8281 0.8594 +vt 0.8438 0.8594 +vt 0.8438 0.7188 +vt 0.8281 0.7188 +vt 0.8281 0.8594 +vt 0.8438 0.8594 +vt 0.8438 0.7188 +vt 0.8281 0.7188 +vt 0.8438 0.8438 +vt 0.8438 0.7344 +vt 0.8281 0.7344 +vt 0.8281 0.8438 +vt 0.8281 0.75 +vt 0.8281 0.8594 +vt 0.8438 0.8594 +vt 0.8438 0.75 +vt 0.7344 0.8594 +vt 0.8438 0.8594 +vt 0.8438 0.7188 +vt 0.7344 0.7188 +vt 0.9844 0.3583 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.3583 +vt 1 0.3281 +vt 0.9844 0.3281 +vt 0.9844 0.5156 +vt 1 0.5156 +vt 0.7344 0.3281 +vt 0.7344 0.25 +vt 0.5469 0.25 +vt 0.4688 0.3281 +vt 1 0.3438 +vt 0.9219 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.3438 +vt 0.9844 0.3281 +vt 0.9844 0.5 vt 1 0.5 -vt 0.984375 0.5 -vt 0.984375 0.328125 -vt 1 0.328125 -vt 0.734375 0.34375 -vt 1 0.34375 -vt 1 0.515625 -vt 0.734375 0.515625 -vt 0.734375 0.34375 -vt 1 0.34375 -vt 1 0.515625 -vt 0.734375 0.515625 +vt 1 0.3281 +vt 1 0.5156 +vt 1 0.3438 +vt 0.7344 0.3438 +vt 0.7344 0.5156 +vt 1 0.5156 +vt 1 0.3438 +vt 0.7344 0.3438 +vt 0.7344 0.5156 +vt 0.9844 0.3594 +vt 0.9844 0.4375 vt 1 0.4375 -vt 0.984375 0.4375 -vt 0.984375 0.359375 -vt 1 0.359375 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.3582640625 -vt 1 0.3582640625 -vt 0.984375 0.515625 -vt 0.984375 0.328125 -vt 1 0.328125 -vt 1 0.515625 -vt 0.546875 0.25 -vt 0.734375 0.25 -vt 0.734375 0.328125 -vt 0.46875 0.328125 -vt 0.734375 0.265625 -vt 0.921875 0.265625 -vt 1 0.34375 -vt 0.734375 0.34375 +vt 1 0.3594 +vt 0.9844 0.3583 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.3583 +vt 1 0.3281 +vt 0.9844 0.3281 +vt 0.9844 0.5156 +vt 1 0.5156 +vt 0.7344 0.3281 +vt 0.7344 0.25 +vt 0.5469 0.25 +vt 0.4688 0.3281 +vt 1 0.3438 +vt 0.9219 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.3438 +vt 0.9844 0.3281 +vt 0.9844 0.5 vt 1 0.5 -vt 0.984375 0.5 -vt 0.984375 0.328125 -vt 1 0.328125 +vt 1 0.3281 +vt 0.9844 0.3281 +vt 0.9844 0.5 vt 1 0.5 -vt 0.984375 0.5 -vt 0.984375 0.328125 -vt 1 0.328125 -vt 0.59375 0.140625 -vt 0.59375 0.40625 -vt 0.578125 0.40625 -vt 0.578125 0.140625 -vt 0.734375 0.34375 -vt 1 0.34375 -vt 1 0.515625 -vt 0.734375 0.515625 -vt 0.734375 0.34375 -vt 1 0.34375 -vt 1 0.515625 -vt 0.734375 0.515625 -vt 0.90625 0.859375 -vt 0.90625 0.984375 -vt 0.859375 0.984375 -vt 0.859375 0.859375 -vt 0.59375 0 -vt 0.59375 0.125 -vt 0.546875 0.125 -vt 0.546875 0 -vt 0.34375 0.25 -vt 0.34375 0.296875 -vt 0.25 0.296875 +vt 1 0.3281 +vt 0.5781 0.4063 +vt 0.5938 0.4063 +vt 0.5938 0.1406 +vt 0.5781 0.1406 +vt 1 0.5156 +vt 1 0.3438 +vt 0.7344 0.3438 +vt 0.7344 0.5156 +vt 1 0.5156 +vt 1 0.3438 +vt 0.7344 0.3438 +vt 0.7344 0.5156 +vt 0.8594 0.9844 +vt 0.9063 0.9844 +vt 0.9063 0.8594 +vt 0.8594 0.8594 +vt 0.5469 0.125 +vt 0.5938 0.125 +vt 0.5938 0 +vt 0.5469 0 +vt 0.25 0.2969 +vt 0.3438 0.2969 +vt 0.3438 0.25 vt 0.25 0.25 -vt 0.34375 0.25 -vt 0.34375 0.296875 -vt 0.25 0.296875 +vt 0.25 0.2969 +vt 0.3438 0.2969 +vt 0.3438 0.25 vt 0.25 0.25 -vt 1 0.859375 -vt 1 0.984375 -vt 0.90625 0.984375 -vt 0.90625 0.859375 -vt 0.90625 0.859375 -vt 0.90625 0.984375 -vt 0.859375 0.984375 -vt 0.859375 0.859375 -vt 0.90625 0.859375 -vt 0.90625 0.984375 -vt 0.859375 0.984375 -vt 0.859375 0.859375 -vt 0.34375 0.25 -vt 0.34375 0.296875 -vt 0.25 0.296875 +vt 0.9063 0.9844 +vt 1 0.9844 +vt 1 0.8594 +vt 0.9063 0.8594 +vt 0.8594 0.9844 +vt 0.9063 0.9844 +vt 0.9063 0.8594 +vt 0.8594 0.8594 +vt 0.8594 0.9844 +vt 0.9063 0.9844 +vt 0.9063 0.8594 +vt 0.8594 0.8594 +vt 0.25 0.2969 +vt 0.3438 0.2969 +vt 0.3438 0.25 vt 0.25 0.25 -vt 0.34375 0.25 -vt 0.34375 0.296875 -vt 0.25 0.296875 +vt 0.25 0.2969 +vt 0.3438 0.2969 +vt 0.3438 0.25 vt 0.25 0.25 -vt 1 0.859375 -vt 1 0.984375 -vt 0.90625 0.984375 -vt 0.90625 0.859375 -vt 0.5625 0.9375000000000001 +vt 0.9063 0.9844 +vt 1 0.9844 +vt 1 0.8594 +vt 0.9063 0.8594 +vt 0.6875 0 +vt 0.5625 0 +vt 0.5625 0.9375 +vt 0.6875 0.9375 vt 0.5625 0 vt 0.6875 0 -vt 0.6875 0.9375000000000001 -vt 0.6874999999999999 0.9375000000000001 -vt 0.6874999999999999 2.220446049250313e-16 -vt 0.5624999999999999 2.220446049250313e-16 -vt 0.5624999999999999 0.9375000000000001 -vt 0.5625000000000001 0.9375 -vt 0.5625000000000001 0 -vt 0.6875000000000001 0 -vt 0.6875000000000001 0.9375 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.6875 0.265625 -vt 0.703125 0.265625 -vt 0.703125 0.21875 -vt 0.6875 0.21875 -vt 0.734375 0.21875 -vt 0.71875 0.21875 -vt 0.71875 0.265625 -vt 0.734375 0.265625 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.6875 0.21875 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.71875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.6875 0.21875 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.71875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.6875 0.21875 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.71875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 +vt 0.6875 0.9375 +vt 0.5625 0.9375 +vt 0.6875 0 +vt 0.5625 0 +vt 0.5625 0.9375 +vt 0.6875 0.9375 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.2656 +vt 0.6875 0.2656 +vt 0.6875 0.2188 +vt 0.7188 0.2656 +vt 0.7188 0.2188 +vt 0.7344 0.2188 +vt 0.7344 0.2656 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.6875 0.2188 +vt 0.6875 0.2656 +vt 0.7031 0.2656 +vt 0.7031 0.2188 +vt 0.6875 0.2188 +vt 0.7031 0.2656 +vt 0.7031 0.2188 +vt 0.6875 0.2188 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7188 0.2656 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.6875 0.2188 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.6875 0.2656 +vt 0.7031 0.2656 +vt 0.7031 0.2188 +vt 0.6875 0.2188 +vt 0.7031 0.2656 +vt 0.7031 0.2188 +vt 0.6875 0.2188 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7188 0.2656 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.6875 0.2188 +vt 0.6875 0.2656 +vt 0.7031 0.2656 +vt 0.7031 0.2188 +vt 0.6875 0.2188 +vt 0.7031 0.2656 +vt 0.7031 0.2188 +vt 0.6875 0.2188 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7188 0.2656 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.6875 0.2188 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.6875 0.2188 +vt 0.5625 0.2188 vt 0.5625 1 -vt 0.5625 0.21875 -vt 0.6875 0.21875 vt 0.6875 1 +vt 0.6875 0.2188 +vt 0.5625 0.2188 vt 0.5625 1 -vt 0.5625 0.21875 -vt 0.6875 0.21875 vt 0.6875 1 +vt 0.5625 0.7813 +vt 0.6875 0.7813 vt 0.6875 0 -vt 0.6875 0.78125 -vt 0.5625 0.78125 vt 0.5625 0 +vt 0.6875 0.2188 +vt 0.5625 0.2188 vt 0.5625 1 -vt 0.5625 0.21875 -vt 0.6875 0.21875 vt 0.6875 1 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.6875 0.265625 -vt 0.703125 0.265625 -vt 0.703125 0.21875 -vt 0.6875 0.21875 -vt 0.734375 0.21875 -vt 0.71875 0.21875 -vt 0.71875 0.265625 -vt 0.734375 0.265625 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.6875000000000001 0.6874999999999999 -vt 0.6875000000000001 0.8749999999999999 -vt 0.5625000000000001 0.8749999999999999 -vt 0.5625000000000001 0.6874999999999999 -vt 0.6875000000000001 0.6874999999999999 -vt 0.6875000000000001 0.8749999999999999 -vt 0.5625000000000001 0.8749999999999999 -vt 0.5625000000000001 0.6874999999999999 -vt 0.6875000000000001 0.6874999999999999 -vt 0.6875000000000001 0.8749999999999999 -vt 0.5625000000000001 0.8749999999999999 -vt 0.5625000000000001 0.6874999999999999 -vt 0.5625000000000001 0.8749999999999999 -vt 0.5625000000000001 0.6874999999999999 -vt 0.6875000000000001 0.6874999999999999 -vt 0.6875000000000001 0.8749999999999999 -vt 0.6875 0.375 -vt 0.5625 0.375 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7188 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.7188 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.2656 +vt 0.6875 0.2656 +vt 0.6875 0.2188 +vt 0.7188 0.2656 +vt 0.7188 0.2188 +vt 0.7344 0.2188 +vt 0.7344 0.2656 +vt 0.6875 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.2188 +vt 0.6875 0.2188 +vt 0.5625 0.875 +vt 0.6875 0.875 +vt 0.6875 0.6875 +vt 0.5625 0.6875 +vt 0.5625 0.875 +vt 0.6875 0.875 +vt 0.6875 0.6875 +vt 0.5625 0.6875 +vt 0.5625 0.875 +vt 0.6875 0.875 +vt 0.6875 0.6875 +vt 0.5625 0.6875 +vt 0.6875 0.6875 +vt 0.5625 0.6875 +vt 0.5625 0.875 +vt 0.6875 0.875 vt 0.5625 0.25 +vt 0.5625 0.375 +vt 0.6875 0.375 vt 0.6875 0.25 -vt 0.5624999999999999 0.3125000000000001 -vt 0.6874999999999999 0.3125000000000001 -vt 0.6874999999999999 0.3750000000000001 -vt 0.5624999999999999 0.3750000000000001 -vt 0.875 0 -vt 0.875 0.125 +vt 0.6875 0.375 +vt 0.6875 0.3125 +vt 0.5625 0.3125 +vt 0.5625 0.375 vt 0.8125 0.125 +vt 0.875 0.125 +vt 0.875 0 vt 0.75 0 -vt 0.75 0.125 -vt 0.8125 0 vt 0.875 0 +vt 0.8125 0 +vt 0.75 0.125 vt 0.875 0.125 -vt 0.6875000000000001 0.3124999999999999 -vt 0.6875000000000001 0.875 -vt 0.5625000000000001 0.875 -vt 0.5625000000000001 0.3124999999999999 -vt 0.6874999999999999 0.3125000000000001 -vt 0.6874999999999999 0.875 -vt 0.5624999999999999 0.875 -vt 0.5624999999999999 0.3125000000000001 -vt 0.65625 0.09375 -vt 0.65625 0.65625 -vt 0.53125 0.65625 -vt 0.53125 0.09375 -vt 0.5624999999999999 0.9375 -vt 0.5624999999999999 0.3750000000000001 -vt 0.6874999999999999 0.3750000000000001 -vt 0.6874999999999999 0.9375 +vt 0.5625 0.875 +vt 0.6875 0.875 +vt 0.6875 0.3125 +vt 0.5625 0.3125 +vt 0.5625 0.875 +vt 0.6875 0.875 +vt 0.6875 0.3125 +vt 0.5625 0.3125 +vt 0.5313 0.6563 +vt 0.6563 0.6563 +vt 0.6563 0.0938 +vt 0.5313 0.0938 vt 0.6875 0.375 vt 0.5625 0.375 +vt 0.5625 0.9375 +vt 0.6875 0.9375 vt 0.5625 0.25 +vt 0.5625 0.375 +vt 0.6875 0.375 vt 0.6875 0.25 -vt 0.5624999999999999 0.3125000000000001 -vt 0.6874999999999999 0.3125000000000001 -vt 0.6874999999999999 0.3750000000000001 -vt 0.5624999999999999 0.3750000000000001 -vt 0.875 0 -vt 0.875 0.125 +vt 0.6875 0.375 +vt 0.6875 0.3125 +vt 0.5625 0.3125 +vt 0.5625 0.375 vt 0.8125 0.125 +vt 0.875 0.125 +vt 0.875 0 vt 0.75 0 -vt 0.75 0.125 -vt 0.8125 0 vt 0.875 0 +vt 0.8125 0 +vt 0.75 0.125 vt 0.875 0.125 -vt 0.6875 0.25 -vt 0.6875 0.375 vt 0.625 0.375 -vt 0.625 0.25 -vt 0.6875 0.25 vt 0.6875 0.375 -vt 0.625 0.375 +vt 0.6875 0.25 vt 0.625 0.25 +vt 0.625 0.375 +vt 0.6875 0.375 vt 0.6875 0.25 -vt 0.6875 0.3125 +vt 0.625 0.25 vt 0.5625 0.3125 -vt 0.5625 0.25 -vt 0.6875 0.25 vt 0.6875 0.3125 +vt 0.6875 0.25 +vt 0.5625 0.25 vt 0.5625 0.3125 +vt 0.6875 0.3125 +vt 0.6875 0.25 vt 0.5625 0.25 -vt 0.734375 0 -vt 0.734375 0 +vt 0.7344 0 +vt 0.7344 0 vt 0.5 0 -vt 0.734375 0 vt 0.5 0 -vt 0.734375 0 -vt 0.234375 0 -vt 0.234375 0.25 +vt 0.7344 0 +vt 0.7344 0 vt 0 0.25 +vt 0.2344 0.25 +vt 0.2344 0 vt 0 0 -vt 0.734375 0 -vt 0.734375 0.25 -vt 0.734375 0.25 -vt 0.734375 0 -vt 0.734375 0 -vt 0.734375 0 +vt 0.7344 0.25 +vt 0.7344 0.25 +vt 0.7344 0 vt 0.5 0 +vt 0.7344 0 +vt 0.7344 0 vt 0.5 0 -vt 0.734375 0 -vt 0.734375 0 vt 0.5 0 +vt 0.7344 0 vt 0.5 0 -vt 0.46875 0 -vt 0.46875 0.25 -vt 0.234375 0.25 -vt 0.234375 0 -vt 1 0.46875 -vt 0.984375 0.46875 -vt 0.984375 0.3582640625 -vt 1 0.3582640625 -vt 0.984375 0.515625 -vt 0.984375 0.328125 -vt 1 0.328125 -vt 1 0.515625 -vt 0.546875 0.25 -vt 0.734375 0.25 -vt 0.734375 0.328125 -vt 0.46875 0.328125 -vt 0.734375 0.265625 -vt 0.921875 0.265625 -vt 1 0.34375 -vt 0.734375 0.34375 -vt 0.46875 0.3125 -vt 0.453125 0.3125 -vt 0.453125 0.140625 -vt 0.46875 0.140625 +vt 0.2344 0.25 +vt 0.4688 0.25 +vt 0.4688 0 +vt 0.2344 0 +vt 0.9844 0.3583 +vt 0.9844 0.4688 +vt 1 0.4688 +vt 1 0.3583 +vt 1 0.3281 +vt 0.9844 0.3281 +vt 0.9844 0.5156 +vt 1 0.5156 +vt 0.7344 0.3281 +vt 0.7344 0.25 +vt 0.5469 0.25 +vt 0.4688 0.3281 +vt 1 0.3438 +vt 0.9219 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.3438 +vt 0.4531 0.1406 +vt 0.4531 0.3125 +vt 0.4688 0.3125 +vt 0.4688 0.1406 +vt 0.9844 0.3281 +vt 0.9844 0.5 vt 1 0.5 -vt 0.984375 0.5 -vt 0.984375 0.328125 -vt 1 0.328125 -vt 0.59375 0.140625 -vt 0.59375 0.40625 -vt 0.578125 0.40625 -vt 0.578125 0.140625 -vt 0.734375 0.34375 -vt 1 0.34375 -vt 1 0.515625 -vt 0.734375 0.515625 -vt 0.734375 0.34375 -vt 1 0.34375 -vt 1 0.515625 -vt 0.734375 0.515625 -vt 0.0625 0.9375 -vt 0.0625 0.0625 +vt 1 0.3281 +vt 0.5781 0.4063 +vt 0.5938 0.4063 +vt 0.5938 0.1406 +vt 0.5781 0.1406 +vt 1 0.5156 +vt 1 0.3438 +vt 0.7344 0.3438 +vt 0.7344 0.5156 +vt 1 0.5156 +vt 1 0.3438 +vt 0.7344 0.3438 +vt 0.7344 0.5156 vt 0.9375 0.0625 -vt 0.9375 0.9375 -vt 0.0625 0.9375 vt 0.0625 0.0625 -vt 0.9375 0.0625 +vt 0.0625 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.875 -vt 0.9375 1 -vt 0.0625 1 -vt 0.0625 0.875 -vt 1 0.71875 -vt 1 0.859375 -vt 0.84375 0.859375 -vt 0.84375 0.71875 -vt 0.25 0.53125 -vt 0.25 0.765625 -vt 0 0.765625 -vt 0 0.53125 -vt 0.484375 0.53125 -vt 0.484375 0.765625 -vt 0.25 0.765625 -vt 0.25 0.53125 -vt 0.484375 0.53125 -vt 0.484375 0.765625 -vt 0.234375 0.765625 -vt 0.234375 0.53125 -vt 0.234375 0.484375 -vt 0 0.484375 +vt 0 0.7656 +vt 0.25 0.7656 +vt 0.25 0.5313 +vt 0 0.5313 +vt 0.25 0.7656 +vt 0.4844 0.7656 +vt 0.4844 0.5313 +vt 0.25 0.5313 +vt 0.2344 0.7656 +vt 0.4844 0.7656 +vt 0.4844 0.5313 +vt 0.2344 0.5313 vt 0 0.25 -vt 0.234375 0.25 -vt 0.484375 0.765625 -vt 0.484375 1 -vt 0.234375 1 -vt 0.234375 0.765625 -vt 0.234375 0.765625 -vt 0.484375 0.765625 -vt 0.484375 1 -vt 0.234375 1 -vt 0.484375 0.765625 -vt 0.484375 1 -vt 0.25 1 -vt 0.25 0.765625 -vt 0.25 0.765625 +vt 0 0.4844 +vt 0.2344 0.4844 +vt 0.2344 0.25 +vt 0.2344 1 +vt 0.4844 1 +vt 0.4844 0.7656 +vt 0.2344 0.7656 +vt 0.4844 1 +vt 0.4844 0.7656 +vt 0.2344 0.7656 +vt 0.2344 1 vt 0.25 1 +vt 0.4844 1 +vt 0.4844 0.7656 +vt 0.25 0.7656 vt 0 1 -vt 0 0.765625 -vt 0 0.765625 -vt 0.25 0.765625 vt 0.25 1 +vt 0.25 0.7656 +vt 0 0.7656 +vt 0.25 1 +vt 0.25 0.7656 +vt 0 0.7656 vt 0 1 -vt 0.484375 0.765625 -vt 0.484375 1 vt 0.25 1 -vt 0.25 0.765625 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 1 0.46875 -vt 1 0.484375 -vt 0.984375 0.484375 -vt 0.984375 0.46875 -vt 0.734375 0 -vt 0.734375 0.25 -vt 0.734375 0.25 -vt 0.734375 0 -vn 0 0 -1 +vt 0.4844 1 +vt 0.4844 0.7656 +vt 0.25 0.7656 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.9844 0.4844 +vt 1 0.4844 +vt 1 0.4688 +vt 0.9844 0.4688 +vt 0.7344 0.25 +vt 0.7344 0.25 +vt 0.7344 0 +vt 0.7344 0 +vt 0.75 0.2344 +vt 0.75 0.2656 +vt 0.5 0.2656 +vt 0.5 0.2344 +vt 0.0313 0.7344 +vt 0.0313 0.9219 +vt 0 0.9219 +vt 0 0.7344 +vt 0.9375 0.0625 +vt 0.0625 0.0625 +vt 0.0625 0.9375 +vt 0.9375 0.9375 +vt 0.0625 1 +vt 0.9375 1 +vt 0.9375 0.875 +vt 0.0625 0.875 +vt 0.1406 1 +vt 0.1563 1 +vt 0.1563 0.9531 +vt 0.1406 0.9531 +vt 0.1406 1 +vt 0.375 1 +vt 0.375 0.9844 +vt 0.1406 0.9844 +vt 0.1406 1 +vt 0.375 1 +vt 0.375 0.9531 +vt 0.1406 0.9531 +vt 0.75 0.4063 +vt 0.75 0.6563 +vt 0.5 0.6563 +vt 0.5 0.4063 +vt 0 0.9375 +vt 0 0.7969 +vt 0.0781 0.7969 +vt 0.0781 0.9375 +vt 0 0.25 +vt 0.0781 0.25 +vt 0.0781 0.4844 +vt 0 0.4844 +vt 0 0.7656 +vt 0.0781 0.7656 +vt 0.0781 1 +vt 0 1 +vt 0.6719 0.9375 +vt 0.6719 0.7969 +vt 0.75 0.7969 +vt 0.75 0.9375 +vt 0.7344 0.5 +vt 0.6563 0.5 +vt 0.6563 0.25 +vt 0.7344 0.25 +vt 0.5 0 +vt 0.5781 0 +vt 0.5781 0.25 +vt 0.5 0.25 +vt 0.25 1 +vt 0.2344 1 +vt 0.2344 0.9375 +vt 0.25 0.9375 +vt 0.5 1 +vt 0.5 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 0 1 +vt 0 0.9375 +vt 0.2344 0.9375 +vt 0.2344 1 +vt 0.5156 1 +vt 0.5156 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 0 1 +vt 0 0.9375 +vt 0.25 0.9375 +vt 0.25 1 +vt 0.5 0.9375 +vt 0.5156 0.9375 +vt 0.5156 1 +vt 0.5 1 +vt 0.6719 1 +vt 0.6719 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 0 1 +vt 0 0.9375 +vt 0.0781 0.9375 +vt 0.0781 1 +vt 0.25 0.7969 +vt 0.2344 0.7969 +vt 0.2344 0.75 +vt 0.25 0.75 +vt 0.0781 0.75 +vt 0.0781 0.7969 +vt 0 0.7969 +vt 0 0.75 +vt 0 1 +vt 0 0.75 +vt 0.2344 0.75 +vt 0.2344 1 +vt 0.75 0.75 +vt 0.75 0.7969 +vt 0.6719 0.7969 +vt 0.6719 0.75 +vt 0.5 0.75 +vt 0.5156 0.75 +vt 0.5156 0.7969 +vt 0.5 0.7969 +vt 0.25 0.75 +vt 0.25 0.7969 +vt 0 0.7969 +vt 0 0.75 +vt 0.75 0.75 +vt 0.75 0.7969 +vt 0.5156 0.7969 +vt 0.5156 0.75 +vt 0.2344 0.75 +vt 0.2344 0.7969 +vt 0 0.7969 +vt 0 0.75 +vt 0.75 0.75 +vt 0.75 0.7969 +vt 0.5 0.7969 +vt 0.5 0.75 +vt 0.0781 0.9375 +vt 0.2344 0.9375 +vt 0.2344 1 +vt 0.0781 1 +vt 0.0781 0.25 +vt 0.2344 0.25 +vt 0.2344 0.4844 +vt 0.0781 0.4844 +vt 0.0781 0.7656 +vt 0.2344 0.7656 +vt 0.2344 1 +vt 0.0781 1 +vt 0.6719 1 +vt 0.5156 1 +vt 0.5156 0.9375 +vt 0.6719 0.9375 +vt 0.6719 0.9375 +vt 0.5156 0.9375 +vt 0.5156 0.7969 +vt 0.6719 0.7969 +vt 0.6719 0.7969 +vt 0.5156 0.7969 +vt 0.5156 0.75 +vt 0.6719 0.75 +vt 0.4844 0.25 +vt 0.6563 0.25 +vt 0.6563 0.5 +vt 0.4844 0.5 +vt 0.0781 0.75 +vt 0.2344 0.75 +vt 0.2344 0.7969 +vt 0.0781 0.7969 +vt 0.5781 0 +vt 0.7344 0 +vt 0.7344 0.25 +vt 0.5781 0.25 +vt 0.8438 0.8594 +vt 1 0.8594 +vt 1 0.7188 +vt 0.8438 0.7188 +vt 0 0.7656 +vt 0.25 0.7656 +vt 0.25 1 +vt 0 1 +vt 0.75 1 +vt 0.5 1 +vt 0.5 0.7656 +vt 0.75 0.7656 +vt 0.5 0.9844 +vt 0.5 1 +vt 0.0938 1 +vt 0.0938 0.9844 +vt 0.5 0.9531 +vt 0.5 1 +vt 0.0938 1 +vt 0.0938 0.9531 +vt 0.5 0.9531 +vt 0.5 1 +vt 0.0938 1 +vt 0.0938 0.9531 +vt 0.9375 0 +vt 0.0625 0 +vt 0.0625 1 +vt 0.9375 1 +vt 0.875 1 +vt 1 1 +vt 1 0 +vt 0.875 0 +vt 0.9375 0 +vt 0.0625 0 +vt 0.0625 1 +vt 0.9375 1 +vt 0.875 1 +vt 1 1 +vt 1 0 +vt 0.875 0 +vt 0.6094 0.7656 +vt 0.6094 0.8906 +vt 0.5625 0.8906 +vt 0.5625 0.7656 +vt 0.5781 1 +vt 0.5781 0.8594 +vt 0.5625 0.8594 +vt 0.5625 1 +vt 0.5625 0.7656 +vt 0.5625 0.8906 +vt 0.6094 0.8906 +vt 0.6094 0.7656 +vt 0.5781 1 +vt 0.5781 0.8594 +vt 0.5625 0.8594 +vt 0.5625 1 +vt 0.5625 0.7656 +vt 0.5625 0.8906 +vt 0.6094 0.8906 +vt 0.6094 0.7656 +vt 0.5469 0.75 +vt 0.5469 0.7656 +vt 0.5 0.7656 +vt 0.5 0.75 +vt 0.0625 0.2656 +vt 0.2031 0.2656 +vt 0.2031 0.4844 +vt 0.0625 0.4844 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.5469 0.75 +vt 0.5469 1 +vt 0.5313 1 +vt 0.5313 0.75 +vt 0.5469 0.75 +vt 0.5469 1 +vt 0.5 1 +vt 0.5 0.75 +vt 0.6094 0.75 +vt 0.6094 1 +vt 0.5625 1 +vt 0.5625 0.75 +vt 0.5 0.7656 +vt 0.5469 0.7656 +vt 0.5469 0.75 +vt 0.5 0.75 +vt 0.6094 0.7656 +vt 0.6094 0.8906 +vt 0.5625 0.8906 +vt 0.5625 0.7656 +vt 0.6094 0.7656 +vt 0.6094 0.8906 +vt 0.5625 0.8906 +vt 0.5625 0.7656 +vt 0.5781 1 +vt 0.5781 0.8594 +vt 0.5625 0.8594 +vt 0.5625 1 +vt 0.5625 0.7656 +vt 0.5625 0.8906 +vt 0.6094 0.8906 +vt 0.6094 0.7656 +vt 0.5781 1 +vt 0.5781 0.8594 +vt 0.5625 0.8594 +vt 0.5625 1 +vt 0.5625 0.7656 +vt 0.5625 0.8906 +vt 0.6094 0.8906 +vt 0.6094 0.7656 +vt 0.5469 0.75 +vt 0.5469 0.7656 +vt 0.5 0.7656 +vt 0.5 0.75 +vt 0.0625 0.2656 +vt 0.2031 0.2656 +vt 0.2031 0.4844 +vt 0.0625 0.4844 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.5469 0.75 +vt 0.5469 1 +vt 0.5313 1 +vt 0.5313 0.75 +vt 0.6094 0.75 +vt 0.6094 1 +vt 0.5938 1 +vt 0.5938 0.75 +vt 0.5469 0.75 +vt 0.5469 1 +vt 0.5 1 +vt 0.5 0.75 +vt 0.6094 0.75 +vt 0.6094 1 +vt 0.5625 1 +vt 0.5625 0.75 +vt 0.5 0.7656 +vt 0.5469 0.7656 +vt 0.5469 0.75 +vt 0.5 0.75 +vt 0.6094 0.7656 +vt 0.6094 0.8906 +vt 0.5625 0.8906 +vt 0.5625 0.7656 +vt 0.6094 0.7656 +vt 0.6094 0.8906 +vt 0.5625 0.8906 +vt 0.5625 0.7656 +vt 0.5781 1 +vt 0.5781 0.8594 +vt 0.5625 0.8594 +vt 0.5625 1 +vt 0.5625 0.7656 +vt 0.5625 0.8906 +vt 0.6094 0.8906 +vt 0.6094 0.7656 +vt 0.5781 1 +vt 0.5781 0.8594 +vt 0.5625 0.8594 +vt 0.5625 1 +vt 0.5625 0.7656 +vt 0.5625 0.8906 +vt 0.6094 0.8906 +vt 0.6094 0.7656 +vt 0.5469 0.75 +vt 0.5469 0.7656 +vt 0.5 0.7656 +vt 0.5 0.75 +vt 0.0625 0.2656 +vt 0.2031 0.2656 +vt 0.2031 0.4844 +vt 0.0625 0.4844 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.5469 0.75 +vt 0.5469 1 +vt 0.5313 1 +vt 0.5313 0.75 +vt 0.5469 0.75 +vt 0.5469 1 +vt 0.5 1 +vt 0.5 0.75 +vt 0.6094 0.75 +vt 0.6094 1 +vt 0.5625 1 +vt 0.5625 0.75 +vt 0.5 0.7656 +vt 0.5469 0.7656 +vt 0.5469 0.75 +vt 0.5 0.75 +vt 0.6094 0.7656 +vt 0.6094 0.8906 +vt 0.5625 0.8906 +vt 0.5625 0.7656 +vt 0.6094 0.7656 +vt 0.6094 0.8906 +vt 0.5625 0.8906 +vt 0.5625 0.7656 +vt 0.5781 1 +vt 0.5781 0.8594 +vt 0.5625 0.8594 +vt 0.5625 1 +vt 0.5625 0.7656 +vt 0.5625 0.8906 +vt 0.6094 0.8906 +vt 0.6094 0.7656 +vt 0.5781 1 +vt 0.5781 0.8594 +vt 0.5625 0.8594 +vt 0.5625 1 +vt 0.5625 0.7656 +vt 0.5625 0.8906 +vt 0.6094 0.8906 +vt 0.6094 0.7656 +vt 0.5469 0.75 +vt 0.5469 0.7656 +vt 0.5 0.7656 +vt 0.5 0.75 +vt 0.0625 0.2656 +vt 0.2031 0.2656 +vt 0.2031 0.4844 +vt 0.0625 0.4844 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.7656 0.875 +vt 0.7656 1 +vt 0.7344 1 +vt 0.7344 0.875 +vt 0.5469 0.75 +vt 0.5469 1 +vt 0.5313 1 +vt 0.5313 0.75 +vt 0.6094 0.75 +vt 0.6094 1 +vt 0.5938 1 +vt 0.5938 0.75 +vt 0.5469 0.75 +vt 0.5469 1 +vt 0.5 1 +vt 0.5 0.75 +vt 0.6094 0.75 +vt 0.6094 1 +vt 0.5625 1 +vt 0.5625 0.75 +vt 0.5 0.7656 +vt 0.5469 0.7656 +vt 0.5469 0.75 +vt 0.5 0.75 +vt 0.6094 0.7656 +vt 0.6094 0.8906 +vt 0.5625 0.8906 +vt 0.5625 0.7656 +vt 0.5156 0.9844 +vt 0.5156 1 +vt 0.3594 1 +vt 0.3594 0.9844 +vt 0.5156 0.9375 +vt 0.5156 1 +vt 0.3594 1 +vt 0.3594 0.9375 +vt 0.5156 0.9375 +vt 0.5156 1 +vt 0.3594 1 +vt 0.3594 0.9375 +vt 0 1 +vt 0.0313 1 +vt 0.0313 0.7656 +vt 0 0.7656 +vt 0 1 +vt 0.0313 1 +vt 0.0313 0.7656 +vt 0 0.7656 +vt 0.5625 0.9375 +vt 0.5625 0.9688 +vt 0.5469 0.9688 +vt 0.5469 0.9375 +vt 0.25 0.4219 +vt 0.4063 0.4219 +vt 0.4063 0.3125 +vt 0.25 0.3125 +vt 0.25 0.4219 +vt 0.4063 0.4219 +vt 0.4063 0.3125 +vt 0.25 0.3125 +vt 0.25 0.4219 +vt 0.4063 0.4219 +vt 0.4063 0.3125 +vt 0.25 0.3125 +vt 0.25 0.4219 +vt 0.4063 0.4219 +vt 0.4063 0.3125 +vt 0.25 0.3125 +vt 0.2656 0.3438 +vt 0.3906 0.3438 +vt 0.4063 0.3281 +vt 0.25 0.3281 +vt 0.2656 0.3438 +vt 0.3906 0.3438 +vt 0.4063 0.3281 +vt 0.25 0.3281 +vt 0 0.6094 +vt 0.125 0.6094 +vt 0.125 0.4844 +vt 0 0.4844 +vt 0.2656 0.3438 +vt 0.3906 0.3438 +vt 0.4063 0.3281 +vt 0.25 0.3281 +vt 0.2656 0.3281 +vt 0.3906 0.3281 +vt 0.4063 0.3125 +vt 0.25 0.3125 +vt 0.9375 0.8906 +vt 0.9375 1 +vt 1 1 +vt 1 0.8906 +vt 0.8125 1 +vt 0.8125 0.8906 +vt 0.75 0.8906 +vt 0.75 1 +vt 0.8594 1 +vt 0.8594 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 0.8594 0.3125 +vt 0.8594 0.25 +vt 0.75 0.25 +vt 0.75 0.3125 +vt 0.8594 1 +vt 0.8594 0.8906 +vt 0.75 0.8906 +vt 0.75 1 +vt 0.8125 0.3594 +vt 0.8125 0.25 +vt 0.75 0.25 +vt 0.75 0.3594 +vt 0.9375 0.25 +vt 0.9375 0.3594 +vt 1 0.3594 +vt 1 0.25 +vt 0.8594 0.3594 +vt 0.8594 0.25 +vt 0.75 0.25 +vt 0.75 0.3594 +vt 0.9375 0.25 +vt 0.9375 0.3594 +vt 1 0.3594 +vt 1 0.25 +vt 0.8594 1 +vt 0.8594 0.9375 +vt 0.75 0.9375 +vt 0.75 1 +vt 0.8125 0.3594 +vt 0.8125 0.25 +vt 0.75 0.25 +vt 0.75 0.3594 +vt 0.8125 1 +vt 0.8125 0.8906 +vt 0.75 0.8906 +vt 0.75 1 +vt 0.8594 0.3125 +vt 0.8594 0.25 +vt 0.75 0.25 +vt 0.75 0.3125 +vt 0.9375 0.8906 +vt 0.9375 1 +vt 1 1 +vt 1 0.8906 +vt 0.9063 0.25 +vt 0.9063 0.3125 +vt 1 0.3125 +vt 1 0.25 +vt 0.9063 0.9375 +vt 0.9063 1 +vt 1 1 +vt 1 0.9375 +vt 0.9063 0.25 +vt 0.9063 0.3125 +vt 1 0.3125 +vt 1 0.25 +vt 0.9063 0.8906 +vt 0.9063 1 +vt 1 1 +vt 1 0.8906 +vt 0.9063 0.25 +vt 0.9063 0.3594 +vt 1 0.3594 +vt 1 0.25 +vt 0.9063 0.9375 +vt 0.9063 1 +vt 1 1 +vt 1 0.9375 +vt 0.9992 0.3133 +vt 1 0.1258 +vt 0.8133 0.1242 +vt 0.8117 0.3117 +vt 0.9992 0.1242 +vt 0.8117 0.1258 +vt 0.8133 0.3133 +vt 1 0.3117 +vt 0.3125 0.5625 +vt 0.5 0.5625 +vt 0.5 0.375 +vt 0.3125 0.375 +vt 0.3125 0.5 +vt 0.5 0.5 +vt 0.5 0.375 +vt 0.3125 0.375 +vt 0.5 0.8125 +vt 0.5 0.625 +vt 0.3125 0.625 +vt 0.3125 0.8125 +vt 0.5 0.8125 +vt 0.5 0.625 +vt 0.3125 0.625 +vt 0.3125 0.8125 +vt 0.5 0.8125 +vt 0.5 0.625 +vt 0.3125 0.625 +vt 0.3125 0.8125 +vt 0.9992 0.3133 +vt 1 0.1258 +vt 0.8133 0.1242 +vt 0.8117 0.3117 +vt 0.9992 0.1242 +vt 0.8117 0.1258 +vt 0.8133 0.3133 +vt 1 0.3117 +vt 0.3125 0.5625 +vt 0.5 0.5625 +vt 0.5 0.375 +vt 0.3125 0.375 +vt 0.3125 0.5 +vt 0.5 0.5 +vt 0.5 0.375 +vt 0.3125 0.375 +vt 0.5 0.8125 +vt 0.5 0.625 +vt 0.3125 0.625 +vt 0.3125 0.8125 +vt 0.5 0.8125 +vt 0.5 0.625 +vt 0.3125 0.625 +vt 0.3125 0.8125 +vt 0.5 0.8125 +vt 0.5 0.625 +vt 0.3125 0.625 +vt 0.3125 0.8125 +vt 0.7656 0.8813 +vt 0.7656 0.9219 +vt 0.7344 0.9219 +vt 0.7344 0.8813 +vt 0.7656 0.8813 +vt 0.7656 0.9219 +vt 0.7344 0.9219 +vt 0.7344 0.8813 +vt 0.7656 0.8813 +vt 0.7656 0.9219 +vt 0.7344 0.9219 +vt 0.7344 0.8813 +vt 0.7656 0.8813 +vt 0.7656 0.9219 +vt 0.7344 0.9219 +vt 0.7344 0.8813 +vt 0.7656 0.8813 +vt 0.7656 0.9219 +vt 0.7344 0.9219 +vt 0.7344 0.8813 +vt 0.7656 0.8813 +vt 0.7656 0.9219 +vt 0.7344 0.9219 +vt 0.7344 0.8813 +vt 0.7656 0.8813 +vt 0.7656 0.9219 +vt 0.7344 0.9219 +vt 0.7344 0.8813 +vt 0.7656 0.8813 +vt 0.7656 0.9219 +vt 0.7344 0.9219 +vt 0.7344 0.8813 +vt 0.7656 0.8813 +vt 0.7656 0.9219 +vt 0.7344 0.9219 +vt 0.7344 0.8813 +vt 0.7656 0.8813 +vt 0.7656 0.9219 +vt 0.7344 0.9219 +vt 0.7344 0.8813 +vt 0.75 0.75 +vt 0.75 1 +vt 0.5156 1 +vt 0.5156 0.75 +vt 0.75 0.4844 +vt 0.5313 0.4844 +vt 0.5313 1 +vt 0.75 1 +vt 0 1 +vt 0.2344 1 +vt 0.2344 0.4844 +vt 0 0.4844 +vt 0.7656 0.7656 +vt 0.5313 0.7656 +vt 0.5313 1 +vt 0.7656 1 +vt 0.75 0.4844 +vt 0.5156 0.4844 +vt 0.5156 1 +vt 0.75 1 +vt 0 1 +vt 0.2344 1 +vt 0.2344 0.4844 +vt 0 0.4844 +vt 0.75 0.25 +vt 0.5156 0.25 +vt 0.5156 0.4688 +vt 0.75 0.4688 +vt 0.75 0.4844 +vt 0.5313 0.4844 +vt 0.5313 1 +vt 0.75 1 +vt 0 1 +vt 0.25 1 +vt 0.25 0.4844 +vt 0 0.4844 +vt 0 0.4688 +vt 0.25 0.4688 +vt 0.25 0.25 +vt 0 0.25 +vt 0 1 +vt 0.25 1 +vt 0.25 0.7656 +vt 0 0.7656 +vt 0.75 0.4844 +vt 0.5156 0.4844 +vt 0.5156 1 +vt 0.75 1 +vt 0.5156 0.4688 +vt 0.5156 0.25 +vt 0.75 0.25 +vt 0.75 0.4688 +vt 0.25 0.25 +vt 0.25 0.4688 +vt 0 0.4688 +vt 0 0.25 +vt 0.375 0.9531 +vt 0.375 1 +vt 0.1406 1 +vt 0.1406 0.9531 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn 0 0 -1 +vn 0 0 -1 +vn 0 1 0 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 0 -1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 1 0 0.05 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 1 +vn -1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 -0.83 0.55 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 0.95 0.32 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 1 0 0 +vn 0.32 0.95 0 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 -0.83 0.55 +vn 0 0 1 +vn 1 0 0 +vn 0.32 0.95 0 +vn 0 0 1 +vn -1 0 0 +vn -0.32 -0.95 0 +vn 0 0 1 +vn -1 0 0 +vn -0.32 -0.95 0 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 0.95 0.32 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 -1 0 +vn 1 0 0 +vn 0 0 -1 +vn 0 -1 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 1 +vn 0 -1 0 +vn 1 0 0 +vn 0 0 1 +vn 0 0 1 +vn 0 -1 0 +vn 0 0 1 +vn 0 1 0.01 +vn 0 1 -0.01 +vn 0 1 0 +vn 0 1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0.02 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn -0.01 1 -0.01 +vn 0.02 -1 -0.02 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn 0.02 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 -1 0 +vn 0 1 0.02 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 0 1 0 +vn 1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 -0.71 -0.71 +vn -0.02 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 0 1 -0.02 +vn -1 0 0 vn 0 0 1 -vn 0 1 0 +vn 0 0 -1 vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 1 +vn 0 0 1 +vn 1 0 0 +vn 0 0 1 +vn 1 0 0 +vn 0 0 1 +vn 1 0 0 +vn 0 0 -1 +vn 0 0 -1 +vn 1 0 0 vn -1 0 0 vn 0 0 -1 +vn -1 0 0 vn 0 0 -1 -vn 0 1 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 1 +vn -1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 1 -0.01 +vn 0 -1 0 +vn 0 0 1 vn 0 0 -1 vn 1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 +vn -1 0 0 +vn 0 0 1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0.71 0.71 +vn 0 -0.73 -0.68 +vn 0 -0.71 0.71 +vn 0 0.71 -0.71 +vn 0 0.71 -0.71 +vn 0 -0.73 -0.68 +vn 0 -0.71 0.71 +vn 0 0.71 0.71 +vn 0 1 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0.71 0.71 +vn 0 -0.73 -0.68 +vn 0 -0.71 0.71 +vn 0 0.71 -0.71 +vn 0 0.71 -0.71 +vn 0 -0.73 -0.68 +vn 0 -0.71 0.71 +vn 0 0.71 0.71 +vn 0 -1 0 +vn 0 1 0.02 +vn 0 0 1 +vn 0 0.01 -1 +vn 0 0.01 -1 +vn 0 -1 0 +vn 0 0 1 +vn 0 1 0.02 +vn 0 -1 0 +vn 0 1 0.02 +vn 0 0 1 +vn 0 0.01 -1 +vn 0 0.01 -1 +vn 0 -1 0 +vn 0 0 1 +vn 0 1 0.02 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 vn -1 0 0 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 1 vn 0 1 0 vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 -1 vn 0 0 1 +vn 0 1 0 +vn 0 1 0 vn 1 0 0 vn -1 0 0 vn 0 1 0 +vn 0 0 -1 vn 0 0 1 +vn 0 1 0 +vn -1 0 0 vn 1 0 0 -vn -0.9999999999999996 3.3653587176255905e-8 0 vn 0 1 0 +vn 0 -1 0 vn 0 0 -1 +vn -1 0 0 vn 1 0 0 -vn -0.9999999999999996 3.3653587176255905e-8 -1.1229603467386552e-23 -vn 0 1 -3.2297397080004555e-16 +vn 0 1 0 +vn 0 -1 0 vn 0 0 -1 +vn -1 0 0 vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 -1 vn -1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn 0 -1 0 vn 0 1 0 +vn 0 0 -1 +vn -1 0 0 vn 1 0 0 -vn -0.9999999999999996 3.3653587176255905e-8 0 vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn -1 0 0 vn 1 0 0 -vn -1 4.7369516105335156e-15 0 +vn 0 -1 0 vn 0 1 0 +vn 1 0 0 vn 0 0 1 vn 0 0 -1 -vn 1 0 0 -vn -0.9999999999999996 3.3653587176255905e-8 -1.1229603467386552e-23 -vn 0 1 -3.2297397080004555e-16 +vn -0.89 0 -0.45 +vn 0 1 0 +vn 0 -1 0 vn 0 0 -1 vn 1 0 0 vn -1 0 0 vn 0 1 0 vn 0 0 -1 +vn 0 0.13 0.99 +vn 0 -0.13 -0.99 +vn 0 0.99 -0.13 +vn 0 -0.99 0.13 +vn -1 0 0 +vn 0 0.71 -0.71 +vn 0 1 0 +vn -1 0 0 +vn 1 0 0 vn 0 0 -1 -vn -1 -4.0063785988003155e-9 0 -vn 1 -2.3684757858670005e-15 0 -vn -1 3.205087791847785e-10 0 -vn 0 9.61531014809225e-9 -1 -vn 0.9999999999999998 2.0192152305753548e-8 0 -vn 0 -1.0416585054236009e-7 -0.9999999999999947 -vn 0.9999999999999999 2.403828468008062e-8 0 -vn -0.9999999999999999 -2.4038270469226703e-8 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 0 0.71 -0.71 +vn 0 1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn -0.01 0 -1 +vn 0.71 -0.71 -0.04 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 vn 0 1 0 vn 0 -1 0 -vn 0 -1.73609759018645e-8 -0.9999999999999999 -vn -1 2.3684757858670005e-15 0 +vn 0 0 -1 vn -1 0 0 -vn 0 9.61531014809225e-9 -1 -vn 0.9999999999999998 2.0192152305753548e-8 0 -vn 1 4.0063785988003155e-9 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 -1 0 vn 0 1 0 -vn -1 -1.001598799883047e-10 4.447992196268332e-26 +vn 0 0 -1 +vn 0 0 -1 vn 0 0 1 -vn -4.807655062489375e-8 -3.0047846361004626e-9 -0.9999999999999989 -vn 1.3343924326770227e-24 -3.0047846312851245e-9 -1 -vn 2.2702817570549753e-9 0 1 vn 0 1 0 +vn 0 -1 0 vn 1 0 0 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 vn -1 0 0 +vn 0 0 -1 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0.89 0 -0.45 +vn 0 0 -1 vn 0 1 0 +vn 0 -1 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 vn 0 0 -1 -vn 0 -1.0416585054236009e-7 -0.9999999999999947 -vn 0.9999999999999999 2.403828468008062e-8 0 -vn -0.9999999999999999 -2.403828468008062e-8 0 +vn -0.89 0 0.45 +vn 0 0 1 vn 0 1 0 vn 0 -1 0 -vn 0 -1.73609759018645e-8 -0.9999999999999999 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 vn 0 -1 0 -vn -1 1.1842378929335002e-15 0 -vn 1 4.0063785988003155e-9 0 +vn 0 0 1 +vn 0 0 1 +vn 0 1 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 0.71 -0.71 +vn 0 1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 0.01 0 -1 +vn -0.01 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn -1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn 0 0 -1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn 0 0 -1 +vn 0 1 0 +vn 1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 0 -1 vn -1 0 0 -vn 0 9.61531014809225e-9 -1 -vn 0.9999999999999998 2.0192152305753548e-8 0 vn 0 0 -1 -vn 5.608931850705546e-8 0.9999999999999986 0 -vn -5.693407069514731e-23 -1 -1.1842378739554753e-15 -vn -1 -4.006378598800318e-9 -4.4116298923752534e-24 +vn 0 1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 -1 +vn -1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 1 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 -1 vn 1 0 0 +vn 0 0 1 +vn 0 0 1 +vn 0 0 1 vn -1 0 0 -vn 0 9.61531014809225e-9 -1 -vn 0.9999999999999998 2.0192152305753548e-8 2.1175823681357454e-23 vn -1 0 0 -vn -1 1.7027099728352239e-9 1.816224918414553e-9 -vn 0 1 4.736951571734001e-16 -vn 1.0015943612983081e-10 0 -1 -vn 1.0015931299776508e-10 0.001562498042575235 -0.9999987792991885 -vn -1 8.881784192968415e-16 1.8162249184145528e-9 -vn 4.440892098500626e-16 1 0 -vn -0.9999999999999978 1.776356839400245e-15 6.83755558839038e-8 -vn -1 -8.881784197001252e-16 9.473903143468002e-16 -vn 0 4.440892098500626e-16 1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 1 +vn 0 0 1 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 1 0 +vn 0 1 0 +vn 0 1 0 vn 0 0 1 -vn 1 0 0 +vn 0 0 -1 +vn 0 1 0 +vn 0 0 -1 vn 0 1 0 vn 0 0 -1 vn 0 0 -1 vn 1 0 0 -vn -4.440892098500626e-16 1 0 -vn 1 0 0 -vn 0 4.440892098500628e-16 1 vn 0 0 1 vn 1 0 0 -vn -1 -1.1538619202968069e-8 0 -vn 1 1.1538619202968056e-8 0 -vn 0 -6.923172130817464e-9 -1 -vn 0 6.923172130817471e-9 1 vn 0 0 1 vn 0 0 -1 vn 1 0 0 +vn 1 0 0 vn -1 0 0 -vn 0 1 0 vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 vn 0 0 1 -vn 0 1 0 vn 0 0 -1 +vn 1 0 0 vn -1 0 0 vn 0 0 1 -vn 0 0 1 -vn 1 0 0 vn 0 0 -1 -vn -1 0 0 vn 1 0 0 -vn 1 0 0 -vn 0 1 0 -vn 0 1 0 -vn -1 0 0 -vn 0.7071067526299225 0.7071068097431714 0 -vn -0.7071068097431737 0.7071067526299203 0 -vn 0 1 0 -vn 0 0.7071067983205238 0.7071067640525709 -vn 0 0.7071067640525726 -0.7071067983205221 -vn 1 4.985715710123701e-9 0 vn -1 0 0 vn 0 0 1 -vn 0 0 1 -vn -1 0 0 +vn 0 0 -1 vn 1 0 0 -vn 1 -4.736951571734001e-15 0 vn -1 0 0 -vn -9.853454873813468e-16 -0.8320502943378438 0.5547001962252291 vn 0 0 1 -vn 1.4210854715202016e-15 1 0 -vn 1.887448777873958e-9 -1 -9.437250994797139e-9 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 vn 0 0 1 -vn -0.9999999999999994 -3.52996310481504e-8 0 -vn 0.9999999999999987 5.294944699989987e-8 0 -vn -4.493866839778178e-15 0.948683298050514 0.316227766016838 +vn 0 0 -1 vn 0 0 1 -vn 1 1.7649815381517003e-8 0 -vn -1 -1.0171239436388048e-8 0 -vn -1.887449457362738e-8 -1 0 -vn -2.8048387967739252e-30 1.1842379024986275e-15 1 -vn 1 8.146068602194587e-9 0 -vn -1 -5.187511860761027e-9 0 -vn -1.638164072263065e-8 -1 0 -vn -1.294540977496247e-30 5.465713372376189e-16 1 -vn 4.44089209850063e-16 1 0 -vn 1.5357781731480002e-9 -1 -8.190819291931787e-9 +vn 1 0 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 -1 vn 0 0 1 -vn 1 5.2447148494634394e-9 -6.410208617216948e-9 +vn 1 0 0 +vn 1 0 0 vn -1 0 0 vn 0 0 1 -vn -1 7.105427357601002e-15 0 -vn -0.3162277924703032 0.9486832892326916 0 -vn 0 0 1 vn 1 0 0 vn -1 0 0 -vn 0 -0.8320502943378434 0.5547001962252299 +vn 0 0 -1 vn 0 0 1 +vn 1 0 0 vn -1 0 0 -vn -0.31622779657515127 0.9486832878644088 0 +vn 0 0 -1 vn 0 0 1 vn 1 0 0 -vn 0.316227735458527 -0.948683308236617 0 +vn -1 0 0 +vn 0 0 -1 vn 0 0 1 vn 1 0 0 -vn 0.31622773956337297 -0.948683306868335 0 +vn -1 0 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 1 vn 0 0 1 -vn -0.9999999999999994 -3.52996310481504e-8 0 -vn 0.9999999999999987 5.294944699989987e-8 0 -vn -4.493866839778178e-15 0.948683298050514 0.316227766016838 +vn -1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 0 -1 vn 0 0 1 -vn -5.921189474156519e-16 -1 0 -vn -2.0477038369384242e-9 1 0 +vn -1 0 0 +vn -1 0 0 vn 1 0 0 -vn -0.9999999999999992 2.8845947139440435e-8 -2.884594764793919e-8 vn 0 0 1 -vn -2.0180282103170633e-9 0 -1 +vn -1 0 0 vn 1 0 0 vn 0 0 -1 -vn 4.440892098500626e-16 -1 1.4802973661668785e-16 -vn 1 -1.7763568394002505e-15 -5.259072701473422e-31 -vn -1.7694076463591074e-30 3.5416460519152807e-15 -1 +vn 0 0 1 vn -1 0 0 +vn 1 0 0 vn 0 0 -1 -vn -4.440892098500628e-16 -1 0 -vn -1 0 0 -vn 7.888609052210118e-31 1.7763568394002497e-15 -1 -vn 1 2.629536350736712e-31 -2.9605947323337575e-16 -vn 4.440892098500643e-16 -3.552713678800496e-15 1 -vn 4.00637023556527e-10 -1 -2.812564995835683e-15 -vn 1 -1.7708230259576096e-15 -2.9605947323338034e-16 -vn 4.440892098500708e-16 -1.665334544054469e-14 1 -vn -1 0 0 -vn -1.1657341717642864e-15 1.5321077674353097e-14 1 -vn -2.1453450970719878e-24 -1 -7.432134907503474e-10 +vn 0 0 1 vn -1 0 0 -vn 0 -9.615318288515652e-9 1 -vn 0 1.5321077674353097e-14 1 -vn 2.670916821045909e-10 -1 -7.432134907503474e-10 -vn 1.2019125579139e-9 -9.61531828851566e-9 1 -vn 0 -0.9999218840739726 -0.012499029960630773 -vn 0.0003905943894035675 -0.9999218077979403 0.012499029007165801 -vn 0 -1 0 -vn 8.54694270436724e-9 -1 1.8580302513950758e-10 -vn 1 8.840345086491864e-16 1.1050415048229825e-17 -vn -1 0 1.6025509808059724e-9 -vn -0.012498028891920402 0.9998437870725775 0.012498028891913296 -vn 0 -0.9998242651450613 0.01874670176692834 -vn -1.6075746441623402e-9 -4.018936610405879e-10 1 -vn 0 0 -1 -vn 1 1.7819253480546976e-15 -2.2274034617788337e-17 -vn -1 -4.018936610405865e-10 -1.6075746441623431e-9 -vn 0.01249802925231087 0.9998437870635676 -0.012498029252317973 -vn -0.018743408475519238 -0.9996486229057887 -0.01874340847551937 -vn 3.86764526688263e-17 -3.094120780272147e-15 1 -vn 2.7243380884556235e-8 0 -0.9999999999999997 -vn 1 0 0 -vn -1 0 0 -vn 5.315781827164857e-8 5.315781827164857e-8 0.9999999999999972 -vn 0 0.9999978298745641 -0.0020833257456959477 -vn 0 -1 0 vn 1 0 0 +vn 0 0 -1 +vn 0 0 1 vn -1 0 0 -vn 0 -3.126928855479454e-9 -1 -vn -0.02499212384224005 0.9996864277750709 0.0015620077376372486 -vn 0 -1 -4.4408920913838643e-16 vn 1 0 0 +vn 0 0 -1 vn -1 0 0 -vn 0 1 -4.4408920842671063e-16 -vn 0 -1 4.4408920842671083e-16 +vn 0 1 0 vn 0 -1 0 -vn 0 0.9996876473287262 0.024992154336042873 -vn 1 -3.126928855479454e-9 0 +vn 0 0 -1 vn 0 0 1 vn 0 0 -1 -vn -5.921189452015477e-16 -1 0 -vn 5.921189452015477e-16 1 0 vn -1 0 0 vn 0 0 1 -vn 0 0 -1 -vn 0 -1 0 -vn -4.4408920842671063e-16 1 0 +vn -1 0 0 vn 0 0 1 vn 0 0 -1 -vn 1 0 0 vn -1 0 0 -vn 0 -4.273467123692655e-9 -1 -vn 0.024992203434921926 0.9996876461012547 -3.0705975901902473e-9 -vn 0 -1 2.2204460456919321e-16 +vn -1 0 0 vn 1 0 0 +vn 0 0 -1 vn -1 0 0 -vn 0 1 -2.2204460421335531e-16 -vn 3.552713678800602e-15 -1 -2.2204460421335541e-16 vn 1 0 0 -vn -1 0 -7.300512815492057e-9 -vn -7.26490093276516e-8 0 0.9999999999999973 -vn 0 1 2.960594726007742e-16 -vn 0 -1 -2.96059473945051e-16 -vn 4.4408920842671063e-16 -1 0 -vn 0 1 0 vn 0 0 1 vn 0 0 -1 -vn 0 -1 0 -vn -0.001562007737636805 0.9996864277750711 -0.024992123842225846 -vn 1 0 0 -vn 0 0 1 -vn 0 0 -1 -vn 1.0683659681009347e-9 -1 0 -vn -2.6327633412735967e-9 1 0 -vn 0 0 1 -vn 0 0 -1 -vn 2.6645352336142453e-15 -1.4422954270794259e-8 1 -vn 2.842170918049091e-15 -9.615314735801985e-9 1 -vn -1 9.473903189014969e-15 3.7071794909222515e-15 -vn 2.6645352591003863e-15 4.736951571734001e-15 1 -vn -1 1.77635681946509e-14 3.707179490922243e-15 -vn 2.8421709430404127e-15 4.7369515717339955e-15 1 -vn -1 1.9755820930752297e-29 3.707179490922262e-15 -vn -4.12573201409091e-15 -3.552713678800501e-15 -1 -vn -4.12573201409091e-15 -3.552713678800501e-15 -1 -vn -1 1.317054728716824e-29 3.707179490922262e-15 -vn 1 -4.938955232688064e-30 -2.780384618191691e-15 -vn -2.9796953435100957e-15 -5.293002202773237e-30 -1 -vn 1 -5.329070518200756e-15 -2.7803846181916776e-15 -vn -2.9796953435100973e-15 -1.7763568394002432e-15 -1 -vn 1 -7.105427357601002e-15 -4.016111115165738e-15 -vn 4.584146682323239e-15 3.552713678800489e-15 1 -vn 4.584146660731259e-15 -5.875990572007237e-9 1 -vn 1 -1.7763568394002647e-15 -4.016111115165768e-15 -vn 0.9999999999999992 1.004734687179068e-8 -4.018939459259008e-8 -vn -1 0 0 -vn 0.012498029412498021 0.999843787059563 -0.012498029412497932 -vn 0 -1 0 -vn 1.6025509808059837e-9 -2.8467023952422887e-24 1 -vn 0 0 -1 vn -1 0 0 -vn -2.6709146005997245e-10 -1 -1.2820386530164976e-8 -vn 2.220446049250315e-16 1 0 -vn 0 0 1 vn 1 0 0 vn 0 0 1 +vn 0 0 -1 vn -1 0 0 -vn 0 0 1 vn 1 0 0 -vn 2.670916821045784e-10 -1 -8.546926721919264e-9 -vn -2.220446049250313e-16 1 -3.552713678800501e-15 -vn 3.552713678800501e-15 0 1 -vn 1 0 0 -vn -1 0 0 -vn 0 -1 0 -vn 0 0 1 -vn 1 1.4422965666875271e-8 1.0257039406627005e-22 -vn -2.303668371329431e-9 1 7.105427357601002e-15 -vn 0 -1 0 -vn 0 0 1 -vn -0.9999999999999997 0 2.884593186536221e-8 -vn 2.303668140978396e-9 1 0 -vn -8.88178419700126e-16 -1 0 vn 0 0 1 -vn 1 2.3684757858670005e-15 0 +vn 0 0 -1 vn -1 0 0 -vn 0 1 0 -vn 7.105427357601002e-15 -1 0 -vn 0 0 1 vn 1 0 0 -vn -1 -3.552713678800501e-15 0 -vn 1.7763568394002473e-15 1 0 -vn -1.554312234475222e-15 -1 0 vn 0 0 1 -vn 1 0 0 vn -1 0 0 -vn 4.440892098500626e-16 1 -3.552713678800501e-15 -vn -2.220446049250313e-16 -1 0 -vn 0 0 1 -vn 8.881784197001252e-16 1 0 +vn 1 0 0 vn 0 -1 0 vn 0 1 0 -vn 0 -1 0 -vn -0.00012786426028117118 0.7071067754062044 0.7071067754062116 -vn 0 -0.7309916426049663 -0.6823864143150078 -vn 0 -0.7071067811865486 0.7071067811865466 -vn -0.0002202369017392044 0.7074615189952053 -0.7067518310105069 -vn 0 0.7074620893281489 -0.7067512944193668 -vn 0 -0.7309916426049663 -0.6823864143150078 -vn 0 -0.7071067811865486 0.7071067811865466 -vn 0 0.707106781186544 0.7071067811865511 -vn -8.881784197001268e-16 1 -5.921189464667501e-16 -vn 0 -1 5.921189464667501e-16 -vn 0 1 -5.921189464667501e-16 -vn 0 -1 5.921189464667501e-16 -vn 0 0.707106781186544 0.7071067811865511 -vn 0 -0.7309916426049663 -0.6823864143150078 -vn 0 -0.7071067811865486 0.7071067811865466 -vn 0 0.7074620893281489 -0.7067512944193668 -vn 0.0005051596318499985 0.7074632678834316 -0.7067499341418025 -vn 0.0024505310066757716 -0.7310310797310269 -0.6823397653406068 -vn 0 -0.7071067811865486 0.7071067811865466 -vn 0 0.707106781186544 0.7071067811865511 -vn 0 -1 0 -vn 0 0.9997467809857727 0.02250275335565457 -vn 0 0 1 -vn 0 0.01330460620901702 -0.9999114898097846 -vn 0.0018972296263049266 0.013328036574076853 -0.9999093778742278 -vn 0 -1 0 -vn 0 0 1 -vn 0 0.9997467809857727 0.022502753355654565 -vn 0 -1 0 -vn 0.0014085618739093995 0.9997466026734104 0.02246656174009945 vn 0 0 1 -vn 0 0.01330460620901702 -0.9999114898097846 -vn 0 0.01330460620901702 -0.9999114898097846 -vn 0 -1 0 -vn 0 0 1 -vn 0 0.9997467809857727 0.022502753355654565 -vn 2.3684757858670006e-16 -1 -1.7763568394002505e-15 -vn 0 1 1.7763568394002505e-15 vn 0 0 -1 -vn 0 0 1 vn 0 1 0 -vn 0 -1 0 -vn 1 0 0 -vn 0 0 -1 -vn 0 0 -1 vn 0 0 1 -vn 0 1 1.1842378929335002e-15 -vn 0 -1 -1.1842378929335002e-15 -vn -1 0 0 +vn 0 0 -1 +vn 1 0 0 +vn 1 0 0 +vn 0 1 0 vn 1 0 0 vn -1 0 0 vn 0 0 -1 vn 0 0 1 -vn -8.881784197001252e-16 1 0 -vn -8.881784197001252e-16 1 -8.881784197001252e-16 +vn -0.71 0.71 0 +vn 0.71 0.71 0 +vn 0 1 0 +vn 0 0.71 0.71 +vn 0 0.71 -0.71 +vn 0 0 1 +vn 0 0 -1 vn -1 0 0 vn 1 0 0 vn 0 1 0 vn 0 0 -1 vn 0 0 1 -vn -8.881784197001252e-16 1 -8.881784197001252e-16 -vn 1 0 0 -vn -1 0 0 vn 0 1 0 -vn 0 -1 0 vn 0 0 -1 vn 1 0 0 +vn 0 0 1 +vn 0 0 1 vn -1 0 0 -vn 0 1 0 -vn 0 -1 -3.552713678800501e-15 vn 0 0 -1 vn 1 0 0 vn -1 0 0 +vn -1 0 0 +vn 0 1 0 vn 0 1 0 -vn 0 -1 0 -vn 0 0 -1 -vn 0 0 -1 vn 1 0 0 vn -1 0 0 -vn 0 0 -1 -vn 0 -1 0 -vn 1.1842378929335002e-15 1 0 -vn 0 0 -1 vn 1 0 0 -vn -1 0 -2.6175016069520992e-9 -vn 1.362169061321142e-8 1 -1.1217856909685937e-9 -vn -1.3621690631038818e-8 -1 -1.602552445935607e-9 +vn 0 0.95 -0.32 vn 0 0 -1 -vn 0 0 1 -vn 0 1 0 vn 1 0 0 -vn -1 0 0 -vn -1.5491333455961336e-8 -0.9999999999999999 -4.0063811585335595e-9 -vn 1.8162254274924626e-8 0.9999999999999999 4.0063811760113995e-9 -vn -1 0 0 -vn 8.725003094607141e-9 0 1 -vn 0 0 -1 -vn 0.8944271874881695 0 -0.44721360252345055 -vn 4.6474001584341475e-8 0.9999999999999986 -2.8845929791273536e-8 -vn -1.3621690539280162e-8 -1 1.2419773946276775e-8 vn 0 0 -1 vn -1 0 0 +vn -1 0 0 vn 1 0 0 -vn 0 1 0 +vn 0 0.95 -0.32 vn 0 0 -1 -vn 0 0.13052619222005132 0.9914448613738105 -vn 0 -0.13052619222005155 -0.9914448613738105 -vn 0 0.9914448613738105 -0.1305261922200519 -vn 0 -0.9914448613738107 0.13052619222004988 vn 1 0 0 -vn 0 0.7071067811865476 -0.7071067811865476 -vn 0 1 -5.921189464667501e-16 -vn 1 0 0 -vn -1 0 0 vn 0 0 -1 -vn 1 0 0 -vn -1 1.2918958832001822e-15 -5.399689618625107e-31 -vn -1.6025509371470781e-9 0 1 -vn 0.003535842866965644 0.7072840060056999 -0.7069206692859881 -vn -1.4210854328050388e-14 1 0 -vn 1 -5.448674755826246e-9 1.4638024692386221e-12 vn -1 0 0 -vn 0 0 1 -vn 0.013271205704748438 0.0012064732458861873 -0.9999112058185214 vn 0 -1 0 -vn 0.9999997292412979 -0.0000016687319270854808 0.0007358767195217504 -vn -1 2.5837917664003644e-15 0 +vn 0 -1 0 +vn 0 -1 0 +vn 0 -1 0 +vn 0 -1 0 +vn 0 -1 0 +vn 0 -1 0 +vn 0 -1 0 +vn 0 -1 0 +vn 0 -1 0 vn 1 0 0 vn -1 0 0 -vn 0 1 -2.3684757858670005e-15 -vn -5.921189464667501e-16 -1 -1.1842378929335002e-15 -vn 0 0 -1 vn 1 0 0 -vn -1 0 0 -vn 0 1 -2.3684757858670005e-15 -vn 0 -1 -1.1842378929335002e-15 -vn 0 0 -1 -vn 7.105427357601002e-16 -1 -1.7763568394002505e-15 -vn -9.473903143468012e-16 1 0 -vn 0 0 -1 +vn 0 -1 0 vn 0 0 -1 -vn 0 0 1 -vn 0 1 1.1842378929335002e-15 -vn 0 -1 -1.1842378929335002e-15 vn -1 0 0 -vn 0 0 1 -vn 0 1 1.1842378929335002e-15 -vn 0 -1 -3.552713678800501e-15 -vn 1 0 0 -vn 0 0 -1 -vn 0 0 -1 -vn 0 0 1 -vn 0 1 2.3684757858670005e-15 vn 0 -1 0 vn 1 0 0 -vn 0 0 1 -vn -3.552713678800501e-15 1 -1.1842378929335002e-15 -vn 3.552713678800501e-15 -1 0 -vn 1 0 0 -vn 0 0 -1 -vn 2.819614030794046e-16 1 0 -vn -2.819614030794046e-16 -1 0 -vn 0 0 1 vn 0 0 -1 -vn 0 0 -1 -vn 0 0 1 -vn 0 1 0 vn 0 -1 0 -vn -1 0 0 -vn -3.062654421685228e-8 -0.9999999999999997 1.1484953637230455e-8 -vn 2.296990835644732e-8 0.9999999999999998 -1.148495358610477e-8 -vn 0 0 1 -vn 0 0 -1 -vn -0.8944271909999161 0 -0.44721359549995804 -vn 0 0 -1 -vn 0 1 0 vn 0 -1 0 -vn 1.578983857244667e-15 -1 0 -vn -1.578983857244667e-15 1 0 vn 0 0 1 -vn 0 0 -1 -vn 0.8944271909999161 0 0.44721359549995804 -vn 0 0 1 -vn 6.890972335715116e-8 0.9999999999999976 -1.1484953892858852e-8 -vn -6.890972335715113e-8 -0.999999999999997 -3.445486167857556e-8 -vn 1 0 0 -vn -0.9999999999999998 0 2.6709187750384438e-8 vn 0 1 0 -vn -2.2969907172209193e-8 -0.9999999999999999 0 -vn 0 0 1 -vn 0.0016666642969249202 0 0.9999986111140962 -vn -0.003333314814969893 0.9999944444907405 0 -vn 1 0 0 -vn 0 0 -1 -vn -0.002108180304909002 -0.3162270457363234 0.9486811957241902 -vn 0 0.9999987831048713 0.0015600605042196845 -vn -0.003535580374697578 0.7071023616391809 -0.7071023616391809 -vn 0 0.999999963912802 -0.00026865292611645943 -vn 1 0 0 -vn -0.9999968555359872 -0.0025077714583215224 6.714495544225196e-7 -vn 0 -0.0022778982721741127 0.9999974055863655 -vn -0.01362051215381449 0 -0.9999072365218026 -vn -0.024992191840647996 -0.9996876463911116 0 -vn 1 0 0 -vn -0.9999990843815886 0.00113613293579454 -0.0007351448408082318 -vn -2.5376526277146434e-16 1 0 -vn 0 1 2.5376526277146434e-16 -vn -1 0 0 -vn 0 3.9474596431116675e-16 -1 -vn 1 0 0 -vn 0 0 1 -vn 1 -6.7307174352511845e-9 0 -vn 0 -3.205103619544995e-9 -1 -vn 1 0 0 -vn 4.736951571734001e-16 1 4.440892098500626e-16 -vn 0 0 -1 -vn 1 0 0 -vn 9.473903143468002e-16 1 0 -vn 0 0 1 -vn 0 -7.105427357601002e-15 -1 +vn 0 1 0 vn 0 0 1 -vn -1 0 0 -vn 2.5243548967073364e-29 -7.105427357601078e-15 -1 -vn 0 0 -1 -vn 1 0 0 -vn -1 0 0 -vn 1 0 0 -vn -1 0 0 +usemtl common_steel +f 3/1/1 4/2/1 6/3/1 5/4/1 +f 8/5/2 7/6/2 9/7/2 2/8/2 +f 8/9/3 4/10/3 3/11/3 7/12/3 +f 4/13/4 8/14/4 2/15/4 6/16/4 +f 10/17/5 11/18/5 1/19/5 12/20/5 +f 14/21/6 11/22/6 10/23/6 13/24/6 +f 11/25/7 14/26/7 15/27/7 1/28/7 usemtl common_thingies -f 6/1/1 4/2/1 3/3/1 5/4/1 -f 9/5/2 7/6/2 8/7/2 10/8/2 -f 3/9/3 4/10/3 8/11/3 7/12/3 -f 6/13/4 5/14/4 9/15/4 10/16/4 -f 10/17/5 8/18/5 4/19/5 6/20/5 +f 18/29/8 19/30/8 21/31/8 20/32/8 +f 23/33/9 22/34/9 24/35/9 25/36/9 +f 23/37/10 19/38/10 18/39/10 22/40/10 +f 24/41/11 20/42/11 21/43/11 25/44/11 +f 19/45/12 23/46/12 25/47/12 21/48/12 usemtl projectile_workshop -f 14/21/6 13/22/6 11/23/6 12/24/6 -f 16/25/7 15/26/7 13/27/7 14/28/7 +f 26/49/13 28/50/13 29/51/13 27/52/13 +f 28/53/14 30/54/14 31/55/14 29/56/14 usemtl conveyor -f 17/29/8 18/30/8 21/31/8 20/32/8 -f 19/33/9 17/34/9 20/35/9 22/36/9 +f 35/57/15 33/58/15 32/59/15 34/60/15 +f 34/61/16 32/62/16 1/63/16 2/64/16 usemtl common_thingies -f 26/37/10 24/38/10 23/39/10 25/40/10 -f 29/41/11 27/42/11 28/43/11 30/44/11 -f 23/45/12 24/46/12 28/47/12 27/48/12 -f 26/49/13 25/50/13 29/51/13 30/52/13 -f 25/53/14 23/54/14 27/55/14 29/56/14 -f 34/57/15 32/58/15 31/59/15 33/60/15 -f 37/61/16 35/62/16 36/63/16 38/64/16 -f 31/65/17 32/66/17 36/67/17 35/68/17 -f 33/69/18 31/70/18 35/71/18 37/72/18 +f 36/65/17 37/66/17 39/67/17 38/68/17 +f 41/69/18 40/70/18 42/71/18 43/72/18 +f 41/73/19 37/74/19 36/75/19 40/76/19 +f 42/77/20 38/78/20 39/79/20 43/80/20 +f 40/81/21 36/82/21 38/83/21 42/84/21 +f 44/85/22 45/86/22 47/87/22 46/88/22 +f 49/89/23 48/90/23 50/91/23 51/92/23 +f 49/93/24 45/94/24 44/95/24 48/96/24 +f 48/97/25 44/98/25 46/99/25 50/100/25 usemtl common_steel -f 44/73/19 42/74/19 41/75/19 43/76/19 -f 47/77/20 45/78/20 46/79/20 22/80/20 -f 41/81/21 42/82/21 46/83/21 45/84/21 -f 22/85/22 46/86/22 42/87/22 44/88/22 -f 19/89/23 49/90/23 48/91/23 50/92/23 -f 53/93/24 51/94/24 52/95/24 54/96/24 -f 48/97/25 49/98/25 52/99/25 51/100/25 -f 54/101/26 52/102/26 49/103/26 19/104/26 -f 58/105/27 56/106/27 55/107/27 57/108/27 -f 61/109/28 59/110/28 60/111/28 62/112/28 -f 55/113/29 56/114/29 60/115/29 59/116/29 -f 57/117/30 55/118/30 63/119/30 64/120/30 -f 66/121/31 65/122/31 59/123/31 61/124/31 -f 63/125/32 55/126/32 59/127/32 65/128/32 -f 68/129/33 67/130/33 56/131/33 58/132/33 -f 71/133/34 69/134/34 70/135/34 72/136/34 -f 56/137/35 67/138/35 70/139/35 69/140/35 -f 58/141/36 56/142/36 69/143/36 71/144/36 -f 72/145/37 70/146/37 67/147/37 68/148/37 -f 76/149/38 74/150/38 73/151/38 75/152/38 -f 79/153/39 77/154/39 78/155/39 80/156/39 -f 73/157/40 74/158/40 78/159/40 77/160/40 -f 80/161/41 78/162/41 74/163/41 76/164/41 +f 54/101/26 13/102/26 55/103/26 56/104/26 +f 57/105/27 1088/106/27 1091/107/27 58/108/27 +f 60/109/28 59/110/28 61/111/28 62/112/28 +f 60/113/29 1088/114/29 57/115/29 59/116/29 +f 63/117/30 57/118/30 58/119/30 64/120/30 +f 59/121/31 65/122/31 66/123/31 61/124/31 +f 59/125/32 57/126/32 63/127/32 65/128/32 +f 67/129/33 1088/130/33 1091/131/33 68/132/33 +f 69/133/34 70/134/34 72/135/34 71/136/34 +f 74/137/35 73/138/35 75/139/35 76/140/35 +f 74/141/36 70/142/36 69/143/36 73/144/36 +f 70/145/37 74/146/37 76/147/37 72/148/37 usemtl common_thingies -f 40/165/42 83/166/42 82/167/42 84/168/42 -f 87/169/43 85/170/43 86/171/43 88/172/43 -f 82/173/44 83/174/44 86/175/44 85/176/44 -f 88/177/45 86/178/45 83/179/45 40/180/45 +f 78/149/38 79/150/38 53/151/38 80/152/38 +f 82/153/39 81/154/39 83/155/39 84/156/39 +f 82/157/40 79/158/40 78/159/40 81/160/40 +f 79/161/41 82/162/41 84/163/41 53/164/41 usemtl projectile_workshop -f 94/181/46 97/182/46 96/183/46 93/184/46 -f 93/185/47 96/186/47 95/187/47 89/188/47 -f 90/189/48 98/190/48 97/191/48 94/192/48 -f 91/193/49 95/194/49 96/195/49 79/196/49 -f 79/197/50 96/198/50 97/199/50 75/200/50 -f 75/201/51 97/202/51 98/203/51 92/204/51 -f 104/205/52 102/206/52 103/207/52 93/208/52 -f 99/209/53 100/210/53 103/211/53 102/212/53 -f 89/213/54 101/214/54 104/215/54 93/216/54 -f 101/217/55 99/218/55 102/219/55 104/220/55 -f 93/221/56 103/222/56 100/223/56 89/224/56 -f 103/225/57 111/226/57 110/227/57 108/228/57 -f 108/229/58 110/230/58 109/231/58 105/232/58 -f 106/233/59 109/234/59 110/235/59 66/236/59 -f 66/237/60 110/238/60 111/239/60 64/240/60 -f 64/241/61 111/242/61 112/243/61 107/244/61 -f 100/245/62 112/246/62 111/247/62 103/248/62 +f 92/165/42 93/166/42 90/167/42 89/168/42 +f 91/169/43 92/170/43 89/171/43 85/172/43 +f 93/173/44 94/174/44 86/175/44 90/176/44 +f 92/177/45 91/178/45 87/179/45 75/180/45 +f 93/181/46 92/182/46 75/183/46 71/184/46 +f 94/185/47 93/186/47 71/187/47 88/188/47 +f 99/189/48 98/190/48 100/191/48 89/192/48 +f 99/193/49 96/194/49 95/195/49 98/196/49 +f 100/197/50 97/198/50 85/199/50 89/200/50 +f 98/201/51 95/202/51 97/203/51 100/204/51 +f 96/205/52 99/206/52 89/207/52 85/208/52 +f 106/209/53 107/210/53 99/211/53 104/212/53 +f 105/213/54 106/214/54 104/215/54 101/216/54 +f 106/217/55 105/218/55 102/219/55 66/220/55 +f 107/221/56 106/222/56 66/223/56 64/224/56 +f 108/225/57 107/226/57 64/227/57 103/228/57 +f 107/229/58 108/230/58 96/231/58 99/232/58 usemtl common_rough_steel -f 117/249/63 121/250/63 123/251/63 116/252/63 -f 114/253/64 115/254/64 91/255/64 118/256/64 -f 116/257/65 123/258/65 122/259/65 119/260/65 +f 119/233/59 117/234/59 113/235/59 112/236/59 +f 87/237/60 111/238/60 110/239/60 114/240/60 +f 118/241/61 119/242/61 112/243/61 115/244/61 usemtl projectile_workshop -f 120/261/66 107/262/66 121/263/66 117/264/66 -f 115/265/67 121/266/67 107/267/67 91/268/67 +f 117/245/62 103/246/62 116/247/62 113/248/62 +f 103/249/63 117/250/63 111/251/63 87/252/63 usemtl common_rough_steel -f 118/269/68 122/270/68 123/271/68 114/272/68 -f 114/273/69 123/274/69 121/275/69 115/276/69 +f 119/253/64 118/254/64 114/255/64 110/256/64 +f 117/257/65 119/258/65 110/259/65 111/260/65 usemtl common_thingies -f 131/277/70 129/278/70 128/279/70 130/280/70 -f 134/281/71 132/282/71 133/283/71 135/284/71 -f 128/285/72 129/286/72 133/287/72 132/288/72 -f 135/289/73 133/290/73 129/291/73 131/292/73 +f 120/261/66 121/262/66 123/263/66 122/264/66 +f 125/265/67 124/266/67 126/267/67 127/268/67 +f 125/269/68 121/270/68 120/271/68 124/272/68 +f 121/273/69 125/274/69 127/275/69 123/276/69 usemtl projectile_workshop -f 142/293/74 140/294/74 141/295/74 143/296/74 -f 136/297/75 137/298/75 141/299/75 140/300/75 -f 139/301/76 138/302/76 142/303/76 143/304/76 -f 138/305/77 136/306/77 140/307/77 142/308/77 -f 143/309/78 141/310/78 137/311/78 139/312/78 -f 141/313/79 150/314/79 149/315/79 147/316/79 -f 146/317/80 145/318/80 47/319/80 43/320/80 -f 147/321/81 149/322/81 148/323/81 144/324/81 -f 137/325/82 151/326/82 150/327/82 141/328/82 -f 145/329/83 148/330/83 149/331/83 47/332/83 -f 47/333/84 149/334/84 150/335/84 43/336/84 -f 43/337/85 150/338/85 151/339/85 146/340/85 -f 155/341/86 158/342/86 157/343/86 143/344/86 -f 139/345/87 152/346/87 155/347/87 143/348/87 -f 154/349/88 153/350/88 53/351/88 50/352/88 -f 143/353/89 157/354/89 156/355/89 139/356/89 -f 152/357/90 159/358/90 158/359/90 155/360/90 -f 153/361/91 156/362/91 157/363/91 53/364/91 -f 53/365/92 157/366/92 158/367/92 50/368/92 -f 50/369/93 158/370/93 159/371/93 154/372/93 -f 163/373/94 161/374/94 162/375/94 164/376/94 -usemtl common_steel -f 169/377/95 171/378/95 173/379/95 168/380/95 +f 133/277/70 132/278/70 134/279/70 135/280/70 +f 133/281/71 129/282/71 128/283/71 132/284/71 +f 134/285/72 130/286/72 131/287/72 135/288/72 +f 132/289/73 128/290/73 130/291/73 134/292/73 +f 129/293/74 133/294/74 135/295/74 131/296/74 +f 141/297/75 142/298/75 133/299/75 139/300/75 +f 9/301/76 137/302/76 138/303/76 5/304/76 +f 140/305/77 141/306/77 139/307/77 136/308/77 +f 142/309/78 143/310/78 129/311/78 133/312/78 +f 141/313/79 140/314/79 137/315/79 9/316/79 +f 142/317/80 141/318/80 9/319/80 5/320/80 +f 143/321/81 142/322/81 5/323/81 138/324/81 +f 149/325/82 150/326/82 147/327/82 135/328/82 +f 147/329/83 144/330/83 131/331/83 135/332/83 +f 55/333/84 145/334/84 146/335/84 12/336/84 +f 148/337/85 149/338/85 135/339/85 131/340/85 +f 150/341/86 151/342/86 144/343/86 147/344/86 +f 149/345/87 148/346/87 145/347/87 55/348/87 +f 150/349/88 149/350/88 55/351/88 12/352/88 +f 151/353/89 150/354/89 12/355/89 146/356/89 usemtl common_rough_steel -f 165/381/96 166/382/96 169/383/96 168/384/96 -f 166/385/97 172/386/97 171/387/97 169/388/97 +f 155/357/90 781/358/90 780/359/90 156/360/90 +f 761/361/91 779/362/91 778/363/91 769/364/91 usemtl common_steel -f 170/389/98 171/390/98 172/391/98 167/392/98 -f 174/393/99 173/394/99 171/395/99 170/396/99 +f 162/365/92 786/366/92 787/367/92 157/368/92 +f 161/369/93 163/370/93 164/371/93 160/372/93 usemtl common_rough_steel -f 175/397/100 165/398/100 168/399/100 176/400/100 +f 165/373/94 782/374/94 781/375/94 155/376/94 usemtl common_bottom -f 178/401/101 177/402/101 116/403/101 119/404/101 +f 112/377/95 167/378/95 168/379/95 115/380/95 usemtl common_steel -f 168/405/102 173/406/102 177/407/102 176/408/102 -f 176/409/103 177/410/103 180/411/103 175/412/103 -f 179/413/104 180/414/104 177/415/104 178/416/104 -f 181/417/105 186/418/105 185/419/105 182/420/105 +f 774/381/96 784/382/96 783/383/96 765/384/96 +f 762/385/97 777/386/97 776/387/97 763/388/97 usemtl common_rough_steel -f 181/421/106 182/422/106 166/423/106 165/424/106 +f 156/389/98 172/390/98 171/391/98 155/392/98 usemtl common_steel -f 182/425/107 185/426/107 172/427/107 166/428/107 -f 167/429/108 172/430/108 185/431/108 184/432/108 -f 184/433/109 185/434/109 186/435/109 183/436/109 +f 761/393/99 769/394/99 777/395/99 762/396/99 +f 175/397/100 162/398/100 157/399/100 174/400/100 +f 176/401/101 175/402/101 174/403/101 173/404/101 usemtl common_rough_steel -f 187/437/110 181/438/110 165/439/110 175/440/110 +f 155/405/102 171/406/102 177/407/102 165/408/102 usemtl common_steel -f 187/441/111 188/442/111 186/443/111 181/444/111 -f 175/445/112 180/446/112 188/447/112 187/448/112 -f 792/449/113 188/450/113 180/451/113 179/452/113 -f 183/453/114 186/454/114 188/455/114 792/456/114 -usemtl projectile_workshop -f 192/457/115 190/458/115 189/459/115 191/460/115 -f 195/461/116 193/462/116 194/463/116 196/464/116 -f 191/465/117 189/466/117 193/467/117 195/468/117 -f 196/469/118 194/470/118 190/471/118 192/472/118 -usemtl common_rough_steel -f 198/473/119 213/474/119 212/475/119 207/476/119 -f 206/477/120 209/478/120 214/479/120 202/480/120 -f 214/481/121 218/482/121 217/483/121 202/484/121 -f 204/485/122 216/486/122 215/487/122 210/488/122 -f 205/489/123 220/490/123 219/491/123 201/492/123 -f 204/493/124 210/494/124 209/495/124 206/496/124 -f 207/497/125 212/498/125 211/499/125 200/500/125 -f 203/501/126 221/502/126 220/503/126 205/504/126 -f 205/505/127 209/506/127 210/507/127 203/508/127 -f 210/509/128 215/510/128 221/511/128 203/512/128 -f 199/513/129 211/514/129 212/515/129 208/516/129 -f 208/517/130 212/518/130 213/519/130 197/520/130 -f 201/521/131 219/522/131 218/523/131 214/524/131 -f 201/525/132 214/526/132 209/527/132 205/528/132 -f 211/529/133 215/530/133 216/531/133 200/532/133 -f 198/533/134 217/534/134 218/535/134 213/536/134 -f 213/537/135 218/538/135 219/539/135 197/540/135 -f 197/541/136 219/542/136 220/543/136 208/544/136 -f 208/545/137 220/546/137 221/547/137 199/548/137 -f 199/549/138 221/550/138 215/551/138 211/552/138 -usemtl projectile_workshop -f 193/553/139 223/554/139 222/555/139 194/556/139 -f 190/557/140 224/558/140 225/559/140 189/560/140 -usemtl common_thingies -f 222/561/141 223/562/141 225/563/141 224/564/141 -usemtl projectile_workshop -f 194/565/142 222/566/142 224/567/142 190/568/142 -f 189/569/143 225/570/143 223/571/143 193/572/143 +f 763/409/103 776/410/103 775/411/103 764/412/103 +f 764/413/104 775/414/104 774/415/104 765/416/104 +f 170/417/105 178/418/105 726/419/105 169/420/105 +f 178/421/106 176/422/106 173/423/106 726/424/106 usemtl common_copper_cable -f 226/573/144 234/574/144 237/575/144 227/576/144 -f 231/577/145 236/578/145 235/579/145 230/580/145 -f 230/581/146 235/582/146 234/583/146 226/584/146 -f 228/585/147 234/586/147 235/587/147 232/588/147 -f 232/589/148 235/590/148 236/591/148 233/592/148 -f 229/593/149 237/594/149 234/595/149 228/596/149 -f 239/597/150 229/598/150 228/599/150 238/600/150 -f 240/601/151 232/602/151 233/603/151 241/604/151 -f 239/605/152 238/606/152 240/607/152 241/608/152 -f 238/609/153 228/610/153 232/611/153 240/612/153 -f 245/613/154 243/614/154 242/615/154 244/616/154 -f 246/617/155 226/618/155 227/619/155 247/620/155 -f 244/621/156 242/622/156 226/623/156 246/624/156 -f 251/625/157 249/626/157 248/627/157 250/628/157 -f 254/629/158 252/630/158 253/631/158 255/632/158 -f 251/633/159 250/634/159 254/635/159 255/636/159 -f 250/637/160 248/638/160 252/639/160 254/640/160 -f 257/641/161 253/642/161 252/643/161 256/644/161 -f 244/645/162 248/646/162 249/647/162 245/648/162 -f 257/649/163 256/650/163 244/651/163 245/652/163 -f 256/653/164 252/654/164 248/655/164 244/656/164 -f 261/657/165 259/658/165 258/659/165 260/660/165 -f 264/661/166 262/662/166 263/663/166 265/664/166 -f 261/665/167 260/666/167 264/667/167 265/668/167 -f 260/669/168 258/670/168 262/671/168 264/672/168 -f 265/673/169 267/674/169 266/675/169 264/676/169 -f 270/677/170 268/678/170 269/679/170 271/680/170 -f 264/681/171 266/682/171 268/683/171 270/684/171 -f 273/685/172 269/686/172 268/687/172 272/688/172 -f 276/689/173 274/690/173 275/691/173 277/692/173 -f 272/693/174 268/694/174 274/695/174 276/696/174 -f 274/697/175 278/698/175 279/699/175 275/700/175 -f 266/701/176 267/702/176 279/703/176 278/704/176 -f 268/705/177 266/706/177 278/707/177 274/708/177 -f 281/709/178 273/710/178 272/711/178 280/712/178 -f 282/713/179 276/714/179 277/715/179 283/716/179 -f 281/717/180 280/718/180 282/719/180 283/720/180 -f 280/721/181 272/722/181 276/723/181 282/724/181 -f 230/725/182 284/726/182 285/727/182 231/728/182 -f 242/729/183 243/730/183 285/731/183 284/732/183 -f 226/733/184 242/734/184 284/735/184 230/736/184 -f 256/737/185 286/738/185 287/739/185 257/740/185 -f 246/741/186 247/742/186 287/743/186 286/744/186 -f 244/745/187 246/746/187 286/747/187 256/748/187 -f 260/749/188 288/750/188 289/751/188 261/752/188 -f 270/753/189 271/754/189 289/755/189 288/756/189 -f 264/757/190 270/758/190 288/759/190 260/760/190 -f 291/761/191 263/762/191 262/763/191 290/764/191 -f 292/765/192 258/766/192 259/767/192 293/768/192 -f 291/769/193 290/770/193 292/771/193 293/772/193 -f 290/773/194 262/774/194 258/775/194 292/776/194 +f 190/425/107 187/426/107 179/427/107 180/428/107 +f 188/429/108 189/430/108 184/431/108 183/432/108 +f 187/433/109 188/434/109 183/435/109 179/436/109 +f 188/437/110 187/438/110 181/439/110 185/440/110 +f 189/441/111 188/442/111 185/443/111 186/444/111 +f 187/445/112 190/446/112 182/447/112 181/448/112 +f 181/449/113 182/450/113 192/451/113 191/452/113 +f 186/453/114 185/454/114 193/455/114 194/456/114 +f 193/457/115 191/458/115 192/459/115 194/460/115 +f 185/461/116 181/462/116 191/463/116 193/464/116 +f 195/465/117 196/466/117 198/467/117 197/468/117 +f 180/469/118 179/470/118 199/471/118 200/472/118 +f 179/473/119 195/474/119 197/475/119 199/476/119 +f 201/477/120 202/478/120 204/479/120 203/480/120 +f 206/481/121 205/482/121 207/483/121 208/484/121 +f 207/485/122 203/486/122 204/487/122 208/488/122 +f 205/489/123 201/490/123 203/491/123 207/492/123 +f 205/493/124 206/494/124 210/495/124 209/496/124 +f 202/497/125 201/498/125 197/499/125 198/500/125 +f 197/501/126 209/502/126 210/503/126 198/504/126 +f 201/505/127 205/506/127 209/507/127 197/508/127 +f 211/509/128 212/510/128 214/511/128 213/512/128 +f 216/513/129 215/514/129 217/515/129 218/516/129 +f 217/517/130 213/518/130 214/519/130 218/520/130 +f 215/521/131 211/522/131 213/523/131 217/524/131 +f 219/525/132 220/526/132 218/527/132 217/528/132 +f 222/529/133 221/530/133 223/531/133 224/532/133 +f 221/533/134 219/534/134 217/535/134 223/536/134 +f 221/537/135 222/538/135 226/539/135 225/540/135 +f 228/541/136 227/542/136 229/543/136 230/544/136 +f 227/545/137 221/546/137 225/547/137 229/548/137 +f 232/549/138 231/550/138 227/551/138 228/552/138 +f 232/553/139 220/554/139 219/555/139 231/556/139 +f 231/557/140 219/558/140 221/559/140 227/560/140 +f 225/561/141 226/562/141 234/563/141 233/564/141 +f 230/565/142 229/566/142 235/567/142 236/568/142 +f 235/569/143 233/570/143 234/571/143 236/572/143 +f 229/573/144 225/574/144 233/575/144 235/576/144 +f 238/577/145 237/578/145 183/579/145 184/580/145 +f 238/581/146 196/582/146 195/583/146 237/584/146 +f 237/585/147 195/586/147 179/587/147 183/588/147 +f 240/589/148 239/590/148 209/591/148 210/592/148 +f 240/593/149 200/594/149 199/595/149 239/596/149 +f 239/597/150 199/598/150 197/599/150 209/600/150 +f 242/601/151 241/602/151 213/603/151 214/604/151 +f 242/605/152 224/606/152 223/607/152 241/608/152 +f 241/609/153 223/610/153 217/611/153 213/612/153 +f 215/613/154 216/614/154 244/615/154 243/616/154 +f 212/617/155 211/618/155 245/619/155 246/620/155 +f 245/621/156 243/622/156 244/623/156 246/624/156 +f 211/625/157 215/626/157 243/627/157 245/628/157 usemtl common_steel -f 297/777/195 295/778/195 294/779/195 296/780/195 -f 300/781/196 298/782/196 299/783/196 118/784/196 -f 294/785/197 295/786/197 299/787/197 298/788/197 -f 297/789/198 296/790/198 300/791/198 118/792/198 -f 296/793/199 294/794/199 298/795/199 300/796/199 -f 118/797/200 299/798/200 295/799/200 297/800/200 -usemtl common_machinebase -f 302/801/201 310/802/201 309/803/201 304/804/201 -f 306/805/202 308/806/202 310/807/202 302/808/202 +f 247/629/158 248/630/158 250/631/158 249/632/158 +f 252/633/159 251/634/159 743/635/159 114/636/159 +f 252/637/160 248/638/160 247/639/160 251/640/160 +f 743/641/161 249/642/161 250/643/161 114/644/161 +f 251/645/162 247/646/162 249/647/162 743/648/162 +f 248/649/163 252/650/163 114/651/163 250/652/163 usemtl common_bottom -f 307/809/203 306/810/203 302/811/203 304/812/203 +f 254/653/164 258/654/164 259/655/164 256/656/164 usemtl common_machinebase -f 303/813/204 309/814/204 310/815/204 301/816/204 -f 301/817/205 310/818/205 308/819/205 305/820/205 -f 314/821/206 316/822/206 315/823/206 312/824/206 -f 312/825/207 315/826/207 308/827/207 306/828/207 +f 255/657/165 253/658/165 254/659/165 256/660/165 +f 253/661/166 257/662/166 258/663/166 254/664/166 usemtl common_bottom -f 314/829/208 312/830/208 306/831/208 307/832/208 +f 258/665/167 261/666/167 263/667/167 259/668/167 usemtl common_machinebase -f 311/833/209 315/834/209 316/835/209 313/836/209 -f 305/837/210 308/838/210 315/839/210 311/840/210 -f 304/841/211 309/842/211 321/843/211 320/844/211 -f 320/845/212 321/846/212 322/847/212 318/848/212 +f 260/669/168 262/670/168 263/671/168 261/672/168 +f 257/673/169 260/674/169 261/675/169 258/676/169 usemtl common_bottom -f 304/849/213 320/850/213 318/851/213 307/852/213 +f 265/677/170 267/678/170 256/679/170 259/680/170 usemtl common_machinebase -f 319/853/214 321/854/214 309/855/214 303/856/214 -f 317/857/215 322/858/215 321/859/215 319/860/215 -f 324/861/216 328/862/216 316/863/216 314/864/216 +f 266/681/171 255/682/171 256/683/171 267/684/171 +f 264/685/172 266/686/172 267/687/172 265/688/172 usemtl common_steel -f 324/865/217 330/866/217 329/867/217 328/868/217 +f 274/689/173 275/690/173 269/691/173 273/692/173 usemtl common_bottom -f 314/869/218 331/870/218 330/871/218 324/872/218 +f 275/693/174 276/694/174 263/695/174 269/696/174 usemtl common_machinebase -f 313/873/219 316/874/219 328/875/219 323/876/219 +f 262/697/175 268/698/175 269/699/175 263/700/175 usemtl common_steel -f 328/877/220 329/878/220 332/879/220 323/880/220 -f 327/881/221 329/882/221 330/883/221 326/884/221 +f 277/701/176 274/702/176 273/703/176 268/704/176 +f 275/705/177 274/706/177 272/707/177 271/708/177 usemtl common_bottom -f 326/885/222 330/886/222 331/887/222 307/888/222 +f 276/709/178 275/710/178 271/711/178 259/712/178 usemtl common_steel -f 325/889/223 332/890/223 329/891/223 327/892/223 +f 274/713/179 277/714/179 270/715/179 272/716/179 usemtl common_rough_steel -f 301/893/224 333/894/224 334/895/224 311/896/224 -f 335/897/225 319/898/225 317/899/225 325/900/225 -f 335/901/226 336/902/226 337/903/226 333/904/226 -f 338/905/227 323/906/227 334/907/227 339/908/227 -f 301/909/228 342/910/228 341/911/228 343/912/228 -f 346/913/229 344/914/229 345/915/229 347/916/229 -f 341/917/230 342/918/230 345/919/230 344/920/230 -f 301/921/231 343/922/231 346/923/231 347/924/231 -f 343/925/232 341/926/232 344/927/232 346/928/232 -f 347/929/233 345/930/233 342/931/233 301/932/233 -f 350/933/234 349/934/234 348/935/234 319/936/234 -f 353/937/235 351/938/235 352/939/235 354/940/235 -f 348/941/236 349/942/236 352/943/236 351/944/236 -f 350/945/237 319/946/237 353/947/237 354/948/237 -f 319/949/238 348/950/238 351/951/238 353/952/238 -f 354/953/239 352/954/239 349/955/239 350/956/239 +f 253/717/180 278/718/180 279/719/180 260/720/180 +f 280/721/181 266/722/181 264/723/181 270/724/181 +f 280/725/182 281/726/182 282/727/182 278/728/182 +f 283/729/183 268/730/183 279/731/183 284/732/183 +f 286/733/184 6/734/184 253/735/184 287/736/184 +f 289/737/185 288/738/185 290/739/185 291/740/185 +f 289/741/186 6/742/186 286/743/186 288/744/186 +f 290/745/187 287/746/187 253/747/187 291/748/187 +f 288/749/188 286/750/188 287/751/188 290/752/188 +f 6/753/189 289/754/189 291/755/189 253/756/189 +f 292/757/190 293/758/190 294/759/190 266/760/190 +f 296/761/191 295/762/191 297/763/191 298/764/191 +f 296/765/192 293/766/192 292/767/192 295/768/192 +f 297/769/193 266/770/193 294/771/193 298/772/193 +f 295/773/194 292/774/194 266/775/194 297/776/194 +f 293/777/195 296/778/195 298/779/195 294/780/195 usemtl common_steel -f 357/957/240 356/958/240 355/959/240 349/960/240 -f 360/961/241 358/962/241 359/963/241 361/964/241 -f 357/965/242 349/966/242 360/967/242 361/968/242 -f 349/969/243 355/970/243 358/971/243 360/972/243 -f 361/973/244 359/974/244 356/975/244 357/976/244 -f 364/977/245 362/978/245 341/979/245 363/980/245 -f 367/981/246 365/982/246 366/983/246 368/984/246 -f 341/985/247 362/986/247 366/987/247 365/988/247 -f 363/989/248 341/990/248 365/991/248 367/992/248 -f 368/993/249 366/994/249 362/995/249 364/996/249 -f 356/997/250 364/998/250 363/999/250 355/1000/250 -f 358/1001/251 367/1002/251 368/1003/251 359/1004/251 -f 355/1005/252 363/1006/252 367/1007/252 358/1008/252 -f 359/1009/253 368/1010/253 364/1011/253 356/1012/253 +f 299/781/196 300/782/196 301/783/196 293/784/196 +f 303/785/197 302/786/197 304/787/197 305/788/197 +f 304/789/198 293/790/198 301/791/198 305/792/198 +f 302/793/199 299/794/199 293/795/199 304/796/199 +f 300/797/200 303/798/200 305/799/200 301/800/200 +f 286/801/201 306/802/201 308/803/201 307/804/201 +f 310/805/202 309/806/202 311/807/202 312/808/202 +f 310/809/203 306/810/203 286/811/203 309/812/203 +f 309/813/204 286/814/204 307/815/204 311/816/204 +f 306/817/205 310/818/205 312/819/205 308/820/205 +f 307/821/206 308/822/206 300/823/206 299/824/206 +f 312/825/207 311/826/207 302/827/207 303/828/207 +f 311/829/208 307/830/208 299/831/208 302/832/208 +f 308/833/209 312/834/209 303/835/209 300/836/209 usemtl common_bottom -f 372/1013/254 370/1014/254 369/1015/254 371/1016/254 -f 374/1017/255 373/1018/255 345/1019/255 375/1020/255 -f 369/1021/256 370/1022/256 345/1023/256 373/1024/256 -f 371/1025/257 369/1026/257 373/1027/257 374/1028/257 -f 375/1029/258 345/1030/258 370/1031/258 372/1032/258 +f 313/837/210 314/838/210 316/839/210 315/840/210 +f 289/841/211 317/842/211 318/843/211 319/844/211 +f 289/845/212 314/846/212 313/847/212 317/848/212 +f 317/849/213 313/850/213 315/851/213 318/852/213 +f 314/853/214 289/854/214 319/855/214 316/856/214 usemtl common_steel -f 378/1033/259 340/1034/259 376/1035/259 377/1036/259 -f 381/1037/260 379/1038/260 380/1039/260 382/1040/260 -f 378/1041/261 377/1042/261 381/1043/261 382/1044/261 -f 377/1045/262 376/1046/262 379/1047/262 381/1048/262 -f 382/1049/263 380/1050/263 340/1051/263 378/1052/263 -f 340/1053/264 384/1054/264 383/1055/264 376/1056/264 -f 379/1057/265 385/1058/265 386/1059/265 380/1060/265 -f 376/1061/266 383/1062/266 385/1063/266 379/1064/266 -f 380/1065/267 386/1066/267 384/1067/267 340/1068/267 -f 389/1069/268 387/1070/268 71/1071/268 388/1072/268 -f 392/1073/269 390/1074/269 391/1075/269 393/1076/269 -f 71/1077/270 387/1078/270 391/1079/270 390/1080/270 -f 388/1081/271 71/1082/271 390/1083/271 392/1084/271 -f 393/1085/272 391/1086/272 387/1087/272 389/1088/272 -f 395/1089/273 389/1090/273 388/1091/273 394/1092/273 -f 396/1093/274 392/1094/274 393/1095/274 397/1096/274 -f 394/1097/275 388/1098/275 392/1099/275 396/1100/275 -f 397/1101/276 393/1102/276 389/1103/276 395/1104/276 -f 399/1105/277 395/1106/277 394/1107/277 398/1108/277 -f 118/1109/278 396/1110/278 397/1111/278 297/1112/278 -f 399/1113/279 398/1114/279 118/1115/279 297/1116/279 -f 398/1117/280 394/1118/280 396/1119/280 118/1120/280 -f 297/1121/281 397/1122/281 395/1123/281 399/1124/281 -f 384/1125/282 372/1126/282 371/1127/282 383/1128/282 -f 385/1129/283 374/1130/283 375/1131/283 386/1132/283 -f 383/1133/284 371/1134/284 374/1135/284 385/1136/284 -f 386/1137/285 375/1138/285 372/1139/285 384/1140/285 -f 403/1141/286 401/1142/286 400/1143/286 402/1144/286 -f 405/1145/287 351/1146/287 404/1147/287 406/1148/287 -f 400/1149/288 401/1150/288 404/1151/288 351/1152/288 -f 402/1153/289 400/1154/289 351/1155/289 405/1156/289 -f 406/1157/290 404/1158/290 401/1159/290 403/1160/290 -f 408/1161/291 403/1162/291 402/1163/291 407/1164/291 -f 409/1165/292 405/1166/292 406/1167/292 410/1168/292 -f 407/1169/293 402/1170/293 405/1171/293 409/1172/293 -f 410/1173/294 406/1174/294 403/1175/294 408/1176/294 -f 325/1177/295 418/1178/295 417/1179/295 332/1180/295 -f 332/1181/296 417/1182/296 416/1183/296 338/1184/296 -f 412/1185/297 415/1186/297 416/1187/297 413/1188/297 -f 414/1189/298 417/1190/298 418/1191/298 408/1192/298 -f 338/1193/299 416/1194/299 415/1195/299 411/1196/299 -f 413/1197/300 416/1198/300 417/1199/300 414/1200/300 -f 420/1201/301 424/1202/301 426/1203/301 412/1204/301 -f 423/1205/302 425/1206/302 424/1207/302 420/1208/302 -f 419/1209/303 424/1210/303 425/1211/303 422/1212/303 -f 421/1213/304 426/1214/304 424/1215/304 419/1216/304 -f 160/1217/305 431/1218/305 430/1219/305 428/1220/305 -f 428/1221/306 430/1222/306 425/1223/306 423/1224/306 -f 427/1225/307 430/1226/307 431/1227/307 429/1228/307 -f 422/1229/308 425/1230/308 430/1231/308 427/1232/308 -f 429/1233/309 431/1234/309 436/1235/309 433/1236/309 -f 433/1237/310 436/1238/310 435/1239/310 432/1240/310 -f 408/1241/311 435/1242/311 436/1243/311 434/1244/311 -f 434/1245/312 436/1246/312 431/1247/312 160/1248/312 +f 320/857/215 285/858/215 322/859/215 321/860/215 +f 324/861/216 323/862/216 325/863/216 326/864/216 +f 325/865/217 321/866/217 322/867/217 326/868/217 +f 323/869/218 320/870/218 321/871/218 325/872/218 +f 285/873/219 324/874/219 326/875/219 322/876/219 +f 327/877/220 328/878/220 285/879/220 320/880/220 +f 330/881/221 329/882/221 323/883/221 324/884/221 +f 329/885/222 327/886/222 320/887/222 323/888/222 +f 328/889/223 330/890/223 324/891/223 285/892/223 +f 68/893/224 331/894/224 333/895/224 332/896/224 +f 335/897/225 334/898/225 336/899/225 337/900/225 +f 335/901/226 331/902/226 68/903/226 334/904/226 +f 334/905/227 68/906/227 332/907/227 336/908/227 +f 331/909/228 335/910/228 337/911/228 333/912/228 +f 332/913/229 333/914/229 339/915/229 338/916/229 +f 337/917/230 336/918/230 340/919/230 341/920/230 +f 336/921/231 332/922/231 338/923/231 340/924/231 +f 333/925/232 337/926/232 341/927/232 339/928/232 +f 338/929/233 339/930/233 343/931/233 342/932/233 +f 341/933/234 340/934/234 114/935/234 250/936/234 +f 114/937/235 342/938/235 343/939/235 250/940/235 +f 340/941/236 338/942/236 342/943/236 114/944/236 +f 339/945/237 341/946/237 250/947/237 343/948/237 +f 315/949/238 316/950/238 328/951/238 327/952/238 +f 319/953/239 318/954/239 329/955/239 330/956/239 +f 318/957/240 315/958/240 327/959/240 329/960/240 +f 316/961/241 319/962/241 330/963/241 328/964/241 +f 344/965/242 345/966/242 347/967/242 346/968/242 +f 348/969/243 295/970/243 349/971/243 350/972/243 +f 348/973/244 345/974/244 344/975/244 295/976/244 +f 295/977/245 344/978/245 346/979/245 349/980/245 +f 345/981/246 348/982/246 350/983/246 347/984/246 +f 346/985/247 347/986/247 352/987/247 351/988/247 +f 350/989/248 349/990/248 353/991/248 354/992/248 +f 349/993/249 346/994/249 351/995/249 353/996/249 +f 347/997/250 350/998/250 354/999/250 352/1000/250 +f 361/1001/251 362/1002/251 270/1003/251 277/1004/251 +f 360/1005/252 361/1006/252 277/1007/252 283/1008/252 +f 360/1009/253 359/1010/253 356/1011/253 357/1012/253 +f 362/1013/254 361/1014/254 358/1015/254 352/1016/254 +f 359/1017/255 360/1018/255 283/1019/255 355/1020/255 +f 361/1021/256 360/1022/256 357/1023/256 358/1024/256 +f 370/1025/257 368/1026/257 364/1027/257 356/1028/257 +f 368/1029/258 369/1030/258 367/1031/258 364/1032/258 +f 369/1033/259 368/1034/259 363/1035/259 366/1036/259 +f 368/1037/260 370/1038/260 365/1039/260 363/1040/260 +f 374/1041/261 375/1042/261 152/1043/261 372/1044/261 +f 369/1045/262 374/1046/262 372/1047/262 367/1048/262 +f 375/1049/263 374/1050/263 371/1051/263 373/1052/263 +f 374/1053/264 369/1054/264 366/1055/264 371/1056/264 +f 380/1057/265 375/1058/265 373/1059/265 377/1060/265 +f 379/1061/266 380/1062/266 377/1063/266 376/1064/266 +f 380/1065/267 379/1066/267 352/1067/267 378/1068/267 +f 375/1069/268 380/1070/268 378/1071/268 152/1072/268 usemtl common_rough_steel -f 439/1249/313 382/1250/313 437/1251/313 438/1252/313 -f 441/1253/314 390/1254/314 440/1255/314 311/1256/314 -f 437/1257/315 382/1258/315 440/1259/315 390/1260/315 -f 439/1261/316 438/1262/316 441/1263/316 311/1264/316 -f 438/1265/317 437/1266/317 390/1267/317 441/1268/317 -f 311/1269/318 440/1270/318 382/1271/318 439/1272/318 +f 381/1073/269 326/1074/269 383/1075/269 382/1076/269 +f 384/1077/270 334/1078/270 385/1079/270 260/1080/270 +f 384/1081/271 326/1082/271 381/1083/271 334/1084/271 +f 385/1085/272 382/1086/272 383/1087/272 260/1088/272 +f 334/1089/273 381/1090/273 382/1091/273 385/1092/273 +f 326/1093/274 384/1094/274 260/1095/274 383/1096/274 usemtl common_steel -f 444/1273/319 324/1274/319 442/1275/319 443/1276/319 -f 442/1277/320 324/1278/320 330/1279/320 445/1280/320 -f 444/1281/321 443/1282/321 446/1283/321 447/1284/321 -f 443/1285/322 442/1286/322 445/1287/322 446/1288/322 -f 451/1289/323 449/1290/323 448/1291/323 450/1292/323 -f 450/1293/324 448/1294/324 452/1295/324 446/1296/324 -f 455/1297/325 453/1298/325 454/1299/325 456/1300/325 -f 446/1301/326 452/1302/326 453/1303/326 455/1304/326 -f 457/1305/327 318/1306/327 326/1307/327 458/1308/327 -f 445/1309/328 330/1310/328 326/1311/328 318/1312/328 -f 447/1313/329 446/1314/329 457/1315/329 458/1316/329 -f 446/1317/330 445/1318/330 318/1319/330 457/1320/330 -f 458/1321/331 460/1322/331 459/1323/331 457/1324/331 -f 463/1325/332 461/1326/332 462/1327/332 464/1328/332 -f 458/1329/333 457/1330/333 463/1331/333 464/1332/333 -f 457/1333/334 459/1334/334 461/1335/334 463/1336/334 -f 460/1337/335 410/1338/335 409/1339/335 459/1340/335 -f 409/1341/336 410/1342/336 466/1343/336 465/1344/336 -f 460/1345/337 459/1346/337 452/1347/337 467/1348/337 -f 459/1349/338 409/1350/338 465/1351/338 452/1352/338 -f 469/1353/339 468/1354/339 300/1355/339 470/1356/339 -f 465/1357/340 466/1358/340 300/1359/340 468/1360/340 -f 467/1361/341 452/1362/341 469/1363/341 470/1364/341 -f 452/1365/342 465/1366/342 468/1367/342 469/1368/342 -f 474/1369/343 472/1370/343 471/1371/343 473/1372/343 -f 443/1373/344 469/1374/344 470/1375/344 444/1376/344 -f 471/1377/345 472/1378/345 470/1379/345 469/1380/345 -f 474/1381/346 473/1382/346 443/1383/346 444/1384/346 -f 473/1385/347 471/1386/347 469/1387/347 443/1388/347 +f 386/1097/275 269/1098/275 741/1099/275 387/1100/275 +f 275/1101/276 269/1102/276 386/1103/276 388/1104/276 +f 389/1105/277 387/1106/277 741/1107/277 390/1108/277 +f 388/1109/278 386/1110/278 387/1111/278 389/1112/278 +f 391/1113/279 392/1114/279 394/1115/279 393/1116/279 +f 395/1117/280 391/1118/280 393/1119/280 389/1120/280 +f 397/1121/281 396/1122/281 398/1123/281 399/1124/281 +f 396/1125/282 395/1126/282 389/1127/282 398/1128/282 +f 271/1129/283 265/1130/283 400/1131/283 401/1132/283 +f 271/1133/284 275/1134/284 388/1135/284 265/1136/284 +f 400/1137/285 389/1138/285 390/1139/285 401/1140/285 +f 265/1141/286 388/1142/286 389/1143/286 400/1144/286 +f 402/1145/287 403/1146/287 401/1147/287 400/1148/287 +f 405/1149/288 404/1150/288 406/1151/288 407/1152/288 +f 406/1153/289 400/1154/289 401/1155/289 407/1156/289 +f 404/1157/290 402/1158/290 400/1159/290 406/1160/290 +f 353/1161/291 354/1162/291 403/1163/291 402/1164/291 +f 742/1165/292 354/1166/292 353/1167/292 408/1168/292 +f 395/1169/293 402/1170/293 403/1171/293 744/1172/293 +f 408/1173/294 353/1174/294 402/1175/294 395/1176/294 +f 743/1177/295 409/1178/295 410/1179/295 739/1180/295 +f 743/1181/296 742/1182/296 408/1183/296 409/1184/296 +f 410/1185/297 395/1186/297 744/1187/297 739/1188/297 +f 409/1189/298 408/1190/298 395/1191/298 410/1192/298 +f 411/1193/299 738/1194/299 740/1195/299 412/1196/299 +f 739/1197/300 410/1198/300 387/1199/300 741/1200/300 +f 739/1201/301 738/1202/301 411/1203/301 410/1204/301 +f 387/1205/302 412/1206/302 740/1207/302 741/1208/302 +f 410/1209/303 411/1210/303 412/1211/303 387/1212/303 usemtl common_thingies -f 478/1389/348 476/1390/348 475/1391/348 477/1392/348 -f 481/1393/349 479/1394/349 480/1395/349 482/1396/349 -f 475/1397/350 476/1398/350 480/1399/350 479/1400/350 -f 478/1401/351 477/1402/351 481/1403/351 482/1404/351 -f 477/1405/352 475/1406/352 479/1407/352 481/1408/352 -f 486/1409/353 484/1410/353 483/1411/353 485/1412/353 -f 489/1413/354 487/1414/354 488/1415/354 490/1416/354 -f 483/1417/355 484/1418/355 488/1419/355 487/1420/355 -f 486/1421/356 485/1422/356 489/1423/356 490/1424/356 -f 485/1425/357 483/1426/357 487/1427/357 489/1428/357 +f 413/1213/304 414/1214/304 416/1215/304 415/1216/304 +f 418/1217/305 417/1218/305 419/1219/305 420/1220/305 +f 418/1221/306 414/1222/306 413/1223/306 417/1224/306 +f 419/1225/307 415/1226/307 416/1227/307 420/1228/307 +f 417/1229/308 413/1230/308 415/1231/308 419/1232/308 +f 421/1233/309 422/1234/309 424/1235/309 423/1236/309 +f 426/1237/310 425/1238/310 427/1239/310 428/1240/310 +f 426/1241/311 422/1242/311 421/1243/311 425/1244/311 +f 427/1245/312 423/1246/312 424/1247/312 428/1248/312 +f 425/1249/313 421/1250/313 423/1251/313 427/1252/313 usemtl common_steel -f 497/1429/358 499/1430/358 498/1431/358 495/1432/358 -f 496/1433/359 501/1434/359 500/1435/359 81/1436/359 -f 491/1437/360 498/1438/360 499/1439/360 493/1440/360 -f 494/1441/361 500/1442/361 501/1443/361 492/1444/361 -f 503/1445/362 509/1446/362 512/1447/362 502/1448/362 -f 504/1449/363 511/1450/363 510/1451/363 505/1452/363 -f 502/1453/364 512/1454/364 511/1455/364 504/1456/364 -f 505/1457/365 510/1458/365 509/1459/365 503/1460/365 -f 507/1461/366 509/1462/366 510/1463/366 39/1464/366 -f 39/1465/367 510/1466/367 511/1467/367 508/1468/367 -f 508/1469/368 511/1470/368 512/1471/368 506/1472/368 -f 506/1473/369 512/1474/369 509/1475/369 507/1476/369 -f 515/1477/370 518/1478/370 517/1479/370 513/1480/370 -f 514/1481/371 520/1482/371 519/1483/371 516/1484/371 -f 495/1485/372 517/1486/372 518/1487/372 497/1488/372 -f 81/1489/373 519/1490/373 520/1491/373 496/1492/373 -f 507/1493/374 525/1494/374 528/1495/374 506/1496/374 -f 508/1497/375 527/1498/375 526/1499/375 39/1500/375 -f 506/1501/376 528/1502/376 527/1503/376 508/1504/376 -f 39/1505/377 526/1506/377 525/1507/377 507/1508/377 -f 522/1509/378 525/1510/378 526/1511/378 524/1512/378 -f 524/1513/379 526/1514/379 527/1515/379 523/1516/379 -f 523/1517/380 527/1518/380 528/1519/380 521/1520/380 -f 521/1521/381 528/1522/381 525/1523/381 522/1524/381 -f 530/1525/382 537/1526/382 536/1527/382 531/1528/382 -f 39/1529/383 526/1530/383 538/1531/383 534/1532/383 -f 534/1533/384 538/1534/384 537/1535/384 530/1536/384 -f 531/1537/385 536/1538/385 526/1539/385 39/1540/385 -f 524/1541/386 526/1542/386 536/1543/386 533/1544/386 -f 533/1545/387 536/1546/387 537/1547/387 532/1548/387 -f 532/1549/388 537/1550/388 538/1551/388 535/1552/388 -f 535/1553/389 538/1554/389 526/1555/389 524/1556/389 -f 539/1557/390 542/1558/390 113/1559/390 540/1560/390 -f 505/1561/391 510/1562/391 543/1563/391 541/1564/391 -f 541/1565/392 543/1566/392 542/1567/392 539/1568/392 -f 540/1569/393 113/1570/393 510/1571/393 505/1572/393 -f 39/1573/394 510/1574/394 113/1575/394 531/1576/394 -f 531/1577/395 113/1578/395 542/1579/395 530/1580/395 -f 530/1581/396 542/1582/396 543/1583/396 534/1584/396 -f 534/1585/397 543/1586/397 510/1587/397 39/1588/397 +f 436/1253/314 437/1254/314 435/1255/314 433/1256/314 +f 438/1257/315 439/1258/315 434/1259/315 77/1260/315 +f 437/1261/316 436/1262/316 429/1263/316 431/1264/316 +f 439/1265/317 438/1266/317 432/1267/317 430/1268/317 +f 450/1269/318 447/1270/318 441/1271/318 440/1272/318 +f 448/1273/319 449/1274/319 442/1275/319 443/1276/319 +f 449/1277/320 450/1278/320 440/1279/320 442/1280/320 +f 447/1281/321 448/1282/321 443/1283/321 441/1284/321 +f 448/1285/322 447/1286/322 445/1287/322 52/1288/322 +f 449/1289/323 448/1290/323 52/1291/323 446/1292/323 +f 450/1293/324 449/1294/324 446/1295/324 444/1296/324 +f 447/1297/325 450/1298/325 444/1299/325 445/1300/325 +f 455/1301/326 456/1302/326 453/1303/326 451/1304/326 +f 457/1305/327 458/1306/327 452/1307/327 454/1308/327 +f 456/1309/328 455/1310/328 433/1311/328 435/1312/328 +f 458/1313/329 457/1314/329 77/1315/329 434/1316/329 +f 466/1317/330 463/1318/330 445/1319/330 444/1320/330 +f 464/1321/331 465/1322/331 446/1323/331 52/1324/331 +f 465/1325/332 466/1326/332 444/1327/332 446/1328/332 +f 463/1329/333 464/1330/333 52/1331/333 445/1332/333 +f 464/1333/334 463/1334/334 460/1335/334 462/1336/334 +f 465/1337/335 464/1338/335 462/1339/335 461/1340/335 +f 466/1341/336 465/1342/336 461/1343/336 459/1344/336 +f 463/1345/337 466/1346/337 459/1347/337 460/1348/337 +f 474/1349/338 475/1350/338 468/1351/338 469/1352/338 +f 476/1353/339 464/1354/339 52/1355/339 472/1356/339 +f 475/1357/340 476/1358/340 472/1359/340 468/1360/340 +f 464/1361/341 474/1362/341 469/1363/341 52/1364/341 +f 474/1365/342 464/1366/342 462/1367/342 471/1368/342 +f 475/1369/343 474/1370/343 471/1371/343 470/1372/343 +f 476/1373/344 475/1374/344 470/1375/344 473/1376/344 +f 464/1377/345 476/1378/345 473/1379/345 462/1380/345 +f 109/1381/346 480/1382/346 477/1383/346 478/1384/346 +f 481/1385/347 448/1386/347 443/1387/347 479/1388/347 +f 480/1389/348 481/1390/348 479/1391/348 477/1392/348 +f 448/1393/349 109/1394/349 478/1395/349 443/1396/349 +f 109/1397/350 448/1398/350 52/1399/350 469/1400/350 +f 480/1401/351 109/1402/351 469/1403/351 468/1404/351 +f 481/1405/352 480/1406/352 468/1407/352 472/1408/352 +f 448/1409/353 481/1410/353 472/1411/353 52/1412/353 usemtl common_copper_cable -f 547/1589/398 545/1590/398 544/1591/398 546/1592/398 -f 550/1593/399 548/1594/399 549/1595/399 551/1596/399 -f 551/1597/400 549/1598/400 545/1599/400 547/1600/400 +f 482/1413/354 483/1414/354 485/1415/354 484/1416/354 +f 487/1417/355 486/1418/355 488/1419/355 489/1420/355 +f 483/1421/356 487/1422/356 489/1423/356 485/1424/356 usemtl common_thingies -f 558/1601/401 556/1602/401 557/1603/401 559/1604/401 -f 552/1605/402 553/1606/402 557/1607/402 556/1608/402 -f 555/1609/403 554/1610/403 558/1611/403 559/1612/403 -f 554/1613/404 552/1614/404 556/1615/404 558/1616/404 -f 555/1617/405 553/1618/405 552/1619/405 554/1620/405 -f 563/1621/406 561/1622/406 560/1623/406 562/1624/406 -f 566/1625/407 564/1626/407 565/1627/407 567/1628/407 -f 560/1629/408 561/1630/408 565/1631/408 564/1632/408 -f 563/1633/409 562/1634/409 566/1635/409 567/1636/409 -f 567/1637/410 565/1638/410 561/1639/410 563/1640/410 +f 495/1425/357 494/1426/357 496/1427/357 497/1428/357 +f 495/1429/358 491/1430/358 490/1431/358 494/1432/358 +f 496/1433/359 492/1434/359 493/1435/359 497/1436/359 +f 494/1437/360 490/1438/360 492/1439/360 496/1440/360 +f 490/1441/361 491/1442/361 493/1443/361 492/1444/361 +f 498/1445/362 499/1446/362 501/1447/362 500/1448/362 +f 503/1449/363 502/1450/363 504/1451/363 505/1452/363 +f 503/1453/364 499/1454/364 498/1455/364 502/1456/364 +f 504/1457/365 500/1458/365 501/1459/365 505/1460/365 +f 499/1461/366 503/1462/366 505/1463/366 501/1464/366 usemtl projectile_workshop -f 568/1641/411 576/1642/411 579/1643/411 569/1644/411 -f 573/1645/412 578/1646/412 577/1647/412 572/1648/412 -f 569/1649/413 581/1650/413 2/1651/413 568/1652/413 -f 570/1653/414 583/1654/414 582/1655/414 571/1656/414 -f 568/1657/415 2/1658/415 580/1659/415 576/1660/415 -f 576/1661/416 580/1662/416 583/1663/416 570/1664/416 -f 574/1665/417 577/1666/417 578/1667/417 575/1668/417 -f 571/1669/418 579/1670/418 576/1671/418 570/1672/418 -f 577/1673/419 580/1674/419 2/1675/419 572/1676/419 -f 572/1677/420 2/1678/420 581/1679/420 573/1680/420 -f 575/1681/421 582/1682/421 583/1683/421 574/1684/421 -f 574/1685/422 583/1686/422 580/1687/422 577/1688/422 +f 517/1465/367 514/1466/367 506/1467/367 507/1468/367 +f 515/1469/368 516/1470/368 511/1471/368 510/1472/368 +f 17/1473/369 519/1474/369 507/1475/369 506/1476/369 +f 520/1477/370 521/1478/370 508/1479/370 509/1480/370 +f 518/1481/371 17/1482/371 506/1483/371 514/1484/371 +f 521/1485/372 518/1486/372 514/1487/372 508/1488/372 +f 516/1489/373 515/1490/373 512/1491/373 513/1492/373 +f 514/1493/374 517/1494/374 509/1495/374 508/1496/374 +f 17/1497/375 518/1498/375 515/1499/375 510/1500/375 +f 519/1501/376 17/1502/376 510/1503/376 511/1504/376 +f 521/1505/377 520/1506/377 513/1507/377 512/1508/377 +f 518/1509/378 521/1510/378 512/1511/378 515/1512/378 usemtl common_thingies -f 587/1689/423 585/1690/423 584/1691/423 586/1692/423 -f 590/1693/424 588/1694/424 589/1695/424 591/1696/424 -f 584/1697/425 585/1698/425 589/1699/425 588/1700/425 -f 587/1701/426 586/1702/426 590/1703/426 591/1704/426 -f 591/1705/427 589/1706/427 585/1707/427 587/1708/427 -f 595/1709/428 593/1710/428 592/1711/428 594/1712/428 -f 598/1713/429 596/1714/429 597/1715/429 599/1716/429 -f 592/1717/430 593/1718/430 597/1719/430 596/1720/430 -f 595/1721/431 594/1722/431 598/1723/431 599/1724/431 -f 599/1725/432 597/1726/432 593/1727/432 595/1728/432 +f 522/1513/379 523/1514/379 525/1515/379 524/1516/379 +f 527/1517/380 526/1518/380 528/1519/380 529/1520/380 +f 527/1521/381 523/1522/381 522/1523/381 526/1524/381 +f 528/1525/382 524/1526/382 525/1527/382 529/1528/382 +f 523/1529/383 527/1530/383 529/1531/383 525/1532/383 +f 530/1533/384 531/1534/384 533/1535/384 532/1536/384 +f 535/1537/385 534/1538/385 536/1539/385 537/1540/385 +f 535/1541/386 531/1542/386 530/1543/386 534/1544/386 +f 536/1545/387 532/1546/387 533/1547/387 537/1548/387 +f 531/1549/388 535/1550/388 537/1551/388 533/1552/388 usemtl common_rough_steel -f 600/1729/433 610/1730/433 609/1731/433 601/1732/433 -f 605/1733/434 608/1734/434 611/1735/434 604/1736/434 -f 601/1737/435 616/1738/435 615/1739/435 600/1740/435 -f 602/1741/436 614/1742/436 613/1743/436 603/1744/436 -f 609/1745/437 612/1746/437 616/1747/437 601/1748/437 -f 603/1749/438 613/1750/438 612/1751/438 609/1752/438 -f 603/1753/439 609/1754/439 610/1755/439 602/1756/439 -f 606/1757/440 611/1758/440 608/1759/440 607/1760/440 -f 608/1761/441 612/1762/441 613/1763/441 607/1764/441 -f 607/1765/442 613/1766/442 614/1767/442 606/1768/442 -f 604/1769/443 615/1770/443 616/1771/443 605/1772/443 -f 605/1773/444 616/1774/444 612/1775/444 608/1776/444 +f 547/1553/389 548/1554/389 538/1555/389 539/1556/389 +f 549/1557/390 546/1558/390 543/1559/390 542/1560/390 +f 553/1561/391 554/1562/391 539/1563/391 538/1564/391 +f 551/1565/392 552/1566/392 540/1567/392 541/1568/392 +f 554/1569/393 550/1570/393 547/1571/393 539/1572/393 +f 550/1573/394 551/1574/394 541/1575/394 547/1576/394 +f 548/1577/395 547/1578/395 541/1579/395 540/1580/395 +f 546/1581/396 549/1582/396 544/1583/396 545/1584/396 +f 551/1585/397 550/1586/397 546/1587/397 545/1588/397 +f 552/1589/398 551/1590/398 545/1591/398 544/1592/398 +f 554/1593/399 553/1594/399 542/1595/399 543/1596/399 +f 550/1597/400 554/1598/400 543/1599/400 546/1600/400 usemtl common_copper_cable -f 620/1777/445 618/1778/445 617/1779/445 619/1780/445 -f 623/1781/446 621/1782/446 622/1783/446 624/1784/446 -f 619/1785/447 617/1786/447 621/1787/447 623/1788/447 -f 624/1789/448 622/1790/448 618/1791/448 620/1792/448 +f 555/1601/401 556/1602/401 558/1603/401 557/1604/401 +f 560/1605/402 559/1606/402 561/1607/402 562/1608/402 +f 559/1609/403 555/1610/403 557/1611/403 561/1612/403 +f 556/1613/404 560/1614/404 562/1615/404 558/1616/404 usemtl common_thingies -f 628/1793/449 626/1794/449 625/1795/449 627/1796/449 -f 631/1797/450 629/1798/450 630/1799/450 632/1800/450 -f 625/1801/451 626/1802/451 630/1803/451 629/1804/451 -f 627/1805/452 625/1806/452 629/1807/452 631/1808/452 -f 632/1809/453 630/1810/453 626/1811/453 628/1812/453 +f 563/1617/405 564/1618/405 566/1619/405 565/1620/405 +f 568/1621/406 567/1622/406 569/1623/406 570/1624/406 +f 568/1625/407 564/1626/407 563/1627/407 567/1628/407 +f 567/1629/408 563/1630/408 565/1631/408 569/1632/408 +f 564/1633/409 568/1634/409 570/1635/409 566/1636/409 usemtl common_copper_cable -f 635/1813/454 633/1814/454 622/1815/454 634/1816/454 -f 637/1817/455 621/1818/455 636/1819/455 638/1820/455 -f 635/1821/456 634/1822/456 637/1823/456 638/1824/456 -f 634/1825/457 622/1826/457 621/1827/457 637/1828/457 -f 638/1829/458 636/1830/458 633/1831/458 635/1832/458 -f 640/1833/459 639/1834/459 617/1835/459 618/1836/459 -f 617/1837/460 639/1838/460 636/1839/460 621/1840/460 -f 640/1841/461 618/1842/461 622/1843/461 633/1844/461 -f 633/1845/462 636/1846/462 639/1847/462 640/1848/462 +f 560/1637/410 571/1638/410 573/1639/410 572/1640/410 +f 574/1641/411 559/1642/411 575/1643/411 576/1644/411 +f 575/1645/412 572/1646/412 573/1647/412 576/1648/412 +f 559/1649/413 560/1650/413 572/1651/413 575/1652/413 +f 571/1653/414 574/1654/414 576/1655/414 573/1656/414 +f 555/1657/415 577/1658/415 578/1659/415 556/1660/415 +f 574/1661/416 577/1662/416 555/1663/416 559/1664/416 +f 560/1665/417 556/1666/417 578/1667/417 571/1668/417 +f 577/1669/418 574/1670/418 571/1671/418 578/1672/418 usemtl common_thingies -f 644/1849/463 642/1850/463 641/1851/463 643/1852/463 -f 647/1853/464 645/1854/464 646/1855/464 648/1856/464 -f 641/1857/465 642/1858/465 646/1859/465 645/1860/465 -f 643/1861/466 641/1862/466 645/1863/466 647/1864/466 +f 579/1673/419 580/1674/419 582/1675/419 581/1676/419 +f 584/1677/420 583/1678/420 585/1679/420 586/1680/420 +f 584/1681/421 580/1682/421 579/1683/421 583/1684/421 +f 583/1685/422 579/1686/422 581/1687/422 585/1688/422 usemtl projectile_workshop -f 652/1865/467 650/1866/467 649/1867/467 651/1868/467 -f 655/1869/468 653/1870/468 654/1871/468 656/1872/468 -f 649/1873/469 650/1874/469 654/1875/469 653/1876/469 -f 652/1877/470 651/1878/470 655/1879/470 656/1880/470 -f 656/1881/471 654/1882/471 650/1883/471 652/1884/471 -f 662/1885/472 661/1886/472 663/1887/472 664/1888/472 -f 662/1889/473 658/1890/473 657/1891/473 661/1892/473 -f 661/1893/474 657/1894/474 659/1895/474 663/1896/474 -f 658/1897/475 662/1898/475 664/1899/475 660/1900/475 -f 664/1901/476 663/1902/476 667/1903/476 668/1904/476 -f 663/1905/477 659/1906/477 665/1907/477 667/1908/477 -f 660/1909/478 664/1910/478 668/1911/478 666/1912/478 -f 171/1913/479 669/1914/479 671/1915/479 670/1916/479 -f 672/1917/480 522/1918/480 524/1919/480 673/1920/480 -f 672/1921/481 669/1922/481 171/1923/481 522/1924/481 -f 522/1925/482 171/1926/482 670/1927/482 524/1928/482 -f 669/1929/483 672/1930/483 673/1931/483 671/1932/483 -f 670/1933/484 671/1934/484 674/1935/484 170/1936/484 -f 673/1937/485 524/1938/485 675/1939/485 676/1940/485 -f 675/1941/486 170/1942/486 674/1943/486 676/1944/486 -f 524/1945/487 670/1946/487 170/1947/487 675/1948/487 -f 671/1949/488 673/1950/488 676/1951/488 674/1952/488 -f 680/1953/489 678/1954/489 677/1955/489 679/1956/489 -f 683/1957/490 681/1958/490 682/1959/490 684/1960/490 -f 677/1961/491 678/1962/491 682/1963/491 681/1964/491 -f 680/1965/492 679/1966/492 683/1967/492 684/1968/492 -f 684/1969/493 682/1970/493 678/1971/493 680/1972/493 -f 687/1973/494 685/1974/494 529/1975/494 686/1976/494 -f 690/1977/495 688/1978/495 689/1979/495 691/1980/495 -f 529/1981/496 685/1982/496 689/1983/496 688/1984/496 -f 687/1985/497 686/1986/497 690/1987/497 691/1988/497 -f 691/1989/498 689/1990/498 685/1991/498 687/1992/498 +f 587/1689/423 588/1690/423 590/1691/423 589/1692/423 +f 592/1693/424 591/1694/424 593/1695/424 594/1696/424 +f 592/1697/425 588/1698/425 587/1699/425 591/1700/425 +f 593/1701/426 589/1702/426 590/1703/426 594/1704/426 +f 588/1705/427 592/1706/427 594/1707/427 590/1708/427 +f 601/1709/428 599/1710/428 600/1711/428 602/1712/428 +f 595/1713/429 596/1714/429 600/1715/429 599/1716/429 +f 597/1717/430 595/1718/430 599/1719/430 601/1720/430 +f 602/1721/431 600/1722/431 596/1723/431 598/1724/431 +f 605/1725/432 601/1726/432 602/1727/432 606/1728/432 +f 603/1729/433 597/1730/433 601/1731/433 605/1732/433 +f 606/1733/434 602/1734/434 598/1735/434 604/1736/434 +f 609/1737/435 607/1738/435 161/1739/435 608/1740/435 +f 462/1741/436 460/1742/436 610/1743/436 611/1744/436 +f 161/1745/437 607/1746/437 610/1747/437 460/1748/437 +f 608/1749/438 161/1750/438 460/1751/438 462/1752/438 +f 611/1753/439 610/1754/439 607/1755/439 609/1756/439 +f 612/1757/440 609/1758/440 608/1759/440 160/1760/440 +f 613/1761/441 462/1762/441 611/1763/441 614/1764/441 +f 612/1765/442 160/1766/442 613/1767/442 614/1768/442 +f 160/1769/443 608/1770/443 462/1771/443 613/1772/443 +f 614/1773/444 611/1774/444 609/1775/444 612/1776/444 +f 615/1777/445 616/1778/445 618/1779/445 617/1780/445 +f 620/1781/446 619/1782/446 621/1783/446 622/1784/446 +f 620/1785/447 616/1786/447 615/1787/447 619/1788/447 +f 621/1789/448 617/1790/448 618/1791/448 622/1792/448 +f 616/1793/449 620/1794/449 622/1795/449 618/1796/449 +f 467/1797/450 623/1798/450 625/1799/450 624/1800/450 +f 627/1801/451 626/1802/451 628/1803/451 629/1804/451 +f 627/1805/452 623/1806/452 467/1807/452 626/1808/452 +f 628/1809/453 624/1810/453 625/1811/453 629/1812/453 +f 623/1813/454 627/1814/454 629/1815/454 625/1816/454 usemtl common_copper_cable -f 695/1993/499 693/1994/499 692/1995/499 694/1996/499 -f 683/1997/500 696/1998/500 697/1999/500 698/2000/500 -f 698/2001/501 697/2002/501 693/2003/501 695/2004/501 +f 630/1817/455 631/1818/455 633/1819/455 632/1820/455 +f 635/1821/456 634/1822/456 621/1823/456 636/1824/456 +f 631/1825/457 635/1826/457 636/1827/457 633/1828/457 usemtl common_thingies -f 702/2005/502 700/2006/502 699/2007/502 701/2008/502 -f 705/2009/503 703/2010/503 704/2011/503 706/2012/503 -f 699/2013/504 700/2014/504 704/2015/504 703/2016/504 -f 702/2017/505 701/2018/505 705/2019/505 706/2020/505 -f 706/2021/506 704/2022/506 700/2023/506 702/2024/506 -f 713/2025/507 711/2026/507 712/2027/507 714/2028/507 -f 707/2029/508 708/2030/508 712/2031/508 711/2032/508 -f 710/2033/509 709/2034/509 713/2035/509 714/2036/509 -f 709/2037/510 707/2038/510 711/2039/510 713/2040/510 -f 710/2041/511 708/2042/511 707/2043/511 709/2044/511 -f 718/2045/512 716/2046/512 715/2047/512 717/2048/512 -f 719/2049/513 709/2050/513 710/2051/513 720/2052/513 -f 715/2053/514 716/2054/514 710/2055/514 709/2056/514 -f 718/2057/515 717/2058/515 719/2059/515 720/2060/515 -f 717/2061/516 715/2062/516 709/2063/516 719/2064/516 -f 727/2065/517 725/2066/517 726/2067/517 728/2068/517 -f 721/2069/518 722/2070/518 726/2071/518 725/2072/518 -f 724/2073/519 723/2074/519 727/2075/519 728/2076/519 -f 723/2077/520 721/2078/520 725/2079/520 727/2080/520 -f 724/2081/521 722/2082/521 721/2083/521 723/2084/521 +f 637/1829/458 638/1830/458 640/1831/458 639/1832/458 +f 642/1833/459 641/1834/459 643/1835/459 644/1836/459 +f 642/1837/460 638/1838/460 637/1839/460 641/1840/460 +f 643/1841/461 639/1842/461 640/1843/461 644/1844/461 +f 638/1845/462 642/1846/462 644/1847/462 640/1848/462 +f 650/1849/463 649/1850/463 651/1851/463 652/1852/463 +f 650/1853/464 646/1854/464 645/1855/464 649/1856/464 +f 651/1857/465 647/1858/465 648/1859/465 652/1860/465 +f 649/1861/466 645/1862/466 647/1863/466 651/1864/466 +f 645/1865/467 646/1866/467 648/1867/467 647/1868/467 +f 653/1869/468 654/1870/468 656/1871/468 655/1872/468 +f 648/1873/469 647/1874/469 657/1875/469 658/1876/469 +f 648/1877/470 654/1878/470 653/1879/470 647/1880/470 +f 657/1881/471 655/1882/471 656/1883/471 658/1884/471 +f 647/1885/472 653/1886/472 655/1887/472 657/1888/472 +f 664/1889/473 663/1890/473 665/1891/473 666/1892/473 +f 664/1893/474 660/1894/474 659/1895/474 663/1896/474 +f 665/1897/475 661/1898/475 662/1899/475 666/1900/475 +f 663/1901/476 659/1902/476 661/1903/476 665/1904/476 +f 659/1905/477 660/1906/477 662/1907/477 661/1908/477 usemtl common_copper_cable -f 732/2085/522 730/2086/522 729/2087/522 731/2088/522 -f 735/2089/523 733/2090/523 734/2091/523 736/2092/523 -f 731/2093/524 729/2094/524 733/2095/524 735/2096/524 -f 736/2097/525 734/2098/525 730/2099/525 732/2100/525 +f 667/1909/478 668/1910/478 670/1911/478 669/1912/478 +f 672/1913/479 671/1914/479 673/1915/479 674/1916/479 +f 671/1917/480 667/1918/480 669/1919/480 673/1920/480 +f 668/1921/481 672/1922/481 674/1923/481 670/1924/481 usemtl common_thingies -f 740/2101/526 738/2102/526 737/2103/526 739/2104/526 -f 743/2105/527 741/2106/527 742/2107/527 744/2108/527 -f 737/2109/528 738/2110/528 742/2111/528 741/2112/528 -f 740/2113/529 739/2114/529 743/2115/529 744/2116/529 -f 744/2117/530 742/2118/530 738/2119/530 740/2120/530 +f 675/1925/482 676/1926/482 678/1927/482 677/1928/482 +f 680/1929/483 679/1930/483 681/1931/483 682/1932/483 +f 680/1933/484 676/1934/484 675/1935/484 679/1936/484 +f 681/1937/485 677/1938/485 678/1939/485 682/1940/485 +f 676/1941/486 680/1942/486 682/1943/486 678/1944/486 usemtl common_copper_cable -f 748/2121/531 746/2122/531 745/2123/531 747/2124/531 -f 751/2125/532 749/2126/532 750/2127/532 752/2128/532 -f 747/2129/533 745/2130/533 749/2131/533 751/2132/533 -f 752/2133/534 750/2134/534 746/2135/534 748/2136/534 -f 759/2137/535 757/2138/535 758/2139/535 760/2140/535 -f 753/2141/536 754/2142/536 758/2143/536 757/2144/536 -f 755/2145/537 753/2146/537 757/2147/537 759/2148/537 -f 760/2149/538 758/2150/538 754/2151/538 756/2152/538 -f 754/2153/539 762/2154/539 761/2155/539 756/2156/539 -f 755/2157/540 763/2158/540 764/2159/540 753/2160/540 -f 756/2161/541 761/2162/541 763/2163/541 755/2164/541 -f 753/2165/542 764/2166/542 762/2167/542 754/2168/542 -f 767/2169/543 765/2170/543 766/2171/543 768/2172/543 -f 749/2173/544 745/2174/544 766/2175/544 765/2176/544 -f 750/2177/545 749/2178/545 765/2179/545 767/2180/545 -f 768/2181/546 766/2182/546 745/2183/546 746/2184/546 -f 756/2185/547 755/2186/547 767/2187/547 768/2188/547 -f 746/2189/548 750/2190/548 759/2191/548 760/2192/548 -f 767/2193/549 755/2194/549 759/2195/549 750/2196/549 -f 756/2197/550 768/2198/550 746/2199/550 760/2200/550 +f 683/1945/487 684/1946/487 686/1947/487 685/1948/487 +f 688/1949/488 687/1950/488 689/1951/488 690/1952/488 +f 687/1953/489 683/1954/489 685/1955/489 689/1956/489 +f 684/1957/490 688/1958/490 690/1959/490 686/1960/490 +f 696/1961/491 695/1962/491 697/1963/491 698/1964/491 +f 696/1965/492 692/1966/492 691/1967/492 695/1968/492 +f 695/1969/493 691/1970/493 693/1971/493 697/1972/493 +f 692/1973/494 696/1974/494 698/1975/494 694/1976/494 +f 699/1977/495 700/1978/495 692/1979/495 694/1980/495 +f 702/1981/496 701/1982/496 693/1983/496 691/1984/496 +f 701/1985/497 699/1986/497 694/1987/497 693/1988/497 +f 700/1989/498 702/1990/498 691/1991/498 692/1992/498 +f 704/1993/499 703/1994/499 705/1995/499 706/1996/499 +f 704/1997/500 683/1998/500 687/1999/500 703/2000/500 +f 703/2001/501 687/2002/501 688/2003/501 705/2004/501 +f 683/2005/502 704/2006/502 706/2007/502 684/2008/502 +f 705/2009/503 693/2010/503 694/2011/503 706/2012/503 +f 697/2013/504 688/2014/504 684/2015/504 698/2016/504 +f 697/2017/505 693/2018/505 705/2019/505 688/2020/505 +f 684/2021/506 706/2022/506 694/2023/506 698/2024/506 +usemtl projectile_workshop +f 707/2024/507 708/2025/507 711/2026/507 707/2027/507 +f 160/2027/508 709/2028/508 710/2029/508 160/2030/508 +f 711/2031/509 707/2032/509 709/2033/509 160/2034/509 +f 712/2034/510 713/2035/510 714/2036/510 712/2037/510 +f 708/2038/511 713/2039/511 712/2040/511 707/2041/511 +f 709/2041/512 714/2042/512 710/2043/512 709/2044/512 +f 707/2045/513 712/2046/513 714/2047/513 709/2048/513 +f 720/2049/514 719/2050/514 441/2051/514 443/2052/514 +f 715/2053/515 716/2054/515 441/2055/515 719/2056/515 +f 717/2057/516 715/2058/516 719/2059/516 720/2060/516 +f 443/2061/517 441/2062/517 716/2063/517 718/2064/517 +f 714/2065/518 718/2066/518 717/2067/518 16/2068/518 +f 15/2069/519 720/2070/519 443/2071/519 721/2072/519 +f 714/2073/520 16/2074/520 15/2075/520 721/2076/520 +f 16/2077/521 717/2078/521 720/2079/521 15/2080/521 +f 721/2081/522 443/2082/522 718/2083/522 714/2084/522 +usemtl conveyor +f 725/2085/523 723/2086/523 722/2087/523 724/2088/523 +usemtl projectile_workshop +f 729/2089/524 730/2090/524 727/2091/524 728/2092/524 +f 731/2093/525 729/2094/525 728/2095/525 726/2096/525 +f 730/2097/526 732/2098/526 138/2099/526 727/2100/526 +f 732/2101/527 154/2102/527 146/2103/527 138/2104/527 +f 733/2105/528 734/2106/528 732/2107/528 730/2108/528 +f 153/2109/529 734/2110/529 733/2111/529 735/2112/529 +f 734/2113/530 153/2114/530 154/2115/530 732/2116/530 +f 736/2117/531 733/2118/531 730/2119/531 729/2120/531 +f 735/2121/532 733/2122/532 736/2123/532 737/2124/532 +f 737/2125/533 736/2126/533 729/2127/533 731/2128/533 +usemtl common_steel +f 312/2129/534 308/2130/534 307/2131/534 311/2132/534 +f 302/2133/535 299/2134/535 300/2135/535 303/2136/535 +f 323/2137/536 320/2138/536 285/2139/536 324/2140/536 +f 337/2141/537 333/2142/537 332/2143/537 336/2144/537 +f 341/2145/538 339/2146/538 338/2147/538 340/2148/538 +f 319/2149/539 316/2150/539 315/2151/539 318/2152/539 +f 329/2153/540 327/2154/540 328/2155/540 330/2156/540 +f 350/2157/541 347/2158/541 346/2159/541 349/2160/541 +usemtl projectile_workshop +f 708/2161/542 707/2162/542 709/2163/542 710/2164/542 +usemtl common_steel +f 744/2165/543 742/2166/543 743/2167/543 739/2168/543 +f 740/2169/544 738/2170/544 739/2171/544 741/2172/544 +usemtl conveyor +f 746/2173/545 748/2174/545 747/2175/545 723/2176/545 +f 748/2177/546 746/2178/546 76/2179/546 745/2180/546 +usemtl common_steel +f 750/2181/547 1089/2182/547 745/2183/547 384/2184/547 +f 750/2185/548 749/2186/548 1088/2187/548 1089/2188/548 +f 749/2189/549 750/2190/549 384/2191/549 614/2192/549 +usemtl common_rough_steel +f 751/2193/550 112/2194/550 113/2195/550 752/2196/550 +f 768/2197/551 771/2198/551 770/2199/551 760/2200/551 +f 159/2201/552 754/2202/552 755/2203/552 158/2204/552 +f 158/2205/553 755/2206/553 756/2207/553 166/2208/553 +usemtl common_steel +f 766/2209/554 773/2210/554 772/2211/554 767/2212/554 +f 167/2213/555 757/2214/555 758/2215/555 168/2216/555 +f 160/2217/556 759/2218/556 753/2219/556 161/2220/556 +usemtl common_rough_steel +f 156/2221/557 780/2222/557 779/2223/557 761/2224/557 +usemtl common_steel +f 156/2225/558 761/2226/558 762/2227/558 172/2228/558 +f 172/2229/559 762/2230/559 763/2231/559 171/2232/559 +f 171/2233/560 763/2234/560 764/2235/560 177/2236/560 +f 177/2237/561 764/2238/561 765/2239/561 165/2240/561 +f 765/2241/562 783/2242/562 782/2243/562 165/2244/562 +f 756/2245/563 766/2246/563 767/2247/563 166/2248/563 +usemtl common_rough_steel +f 159/2249/564 768/2250/564 760/2251/564 754/2252/564 +f 769/2253/565 778/2254/565 786/2255/565 162/2256/565 +f 753/2257/566 770/2258/566 771/2259/566 161/2260/566 +usemtl common_steel +f 166/2261/567 167/2262/567 163/2263/567 158/2264/567 +f 167/2265/568 772/2266/568 773/2267/568 757/2268/568 +f 170/2269/569 785/2270/569 784/2271/569 774/2272/569 +f 170/2273/570 774/2274/570 775/2275/570 178/2276/570 +f 178/2277/571 775/2278/571 776/2279/571 176/2280/571 +f 176/2281/572 776/2282/572 777/2283/572 175/2284/572 +f 175/2285/573 777/2286/573 769/2287/573 162/2288/573 +usemtl common_rough_steel +f 760/2289/574 779/2290/574 780/2291/574 754/2292/574 +f 754/2293/575 780/2294/575 781/2295/575 755/2296/575 +f 755/2297/576 781/2298/576 782/2299/576 756/2300/576 +usemtl common_steel +f 756/2301/577 782/2302/577 783/2303/577 766/2304/577 +f 766/2305/578 783/2306/578 784/2307/578 773/2308/578 +f 773/2309/579 784/2310/579 785/2311/579 757/2312/579 +f 169/2313/580 758/2314/580 757/2315/580 170/2316/580 +usemtl common_rough_steel +f 753/2317/581 786/2318/581 778/2319/581 770/2320/581 +usemtl common_steel +f 759/2321/582 787/2322/582 786/2323/582 753/2324/582 usemtl projectile_workshop -f 770/2201/551 769/2202/551 773/2203/551 -f 771/2204/552 170/2205/552 772/2206/552 -f 771/2207/553 769/2208/553 773/2209/553 170/2210/553 -f 777/2211/554 775/2212/554 774/2213/554 776/2214/554 -f 774/2215/555 775/2216/555 770/2217/555 769/2218/555 -f 777/2219/556 776/2220/556 771/2221/556 772/2222/556 -f 776/2223/557 774/2224/557 769/2225/557 771/2226/557 -f 503/2227/558 782/2228/558 783/2229/558 505/2230/558 -f 503/2231/559 779/2232/559 778/2233/559 782/2234/559 -f 782/2235/560 778/2236/560 780/2237/560 783/2238/560 -f 779/2239/561 503/2240/561 505/2241/561 781/2242/561 -f 780/2243/562 781/2244/562 776/2245/562 1/2246/562 -f 505/2247/563 783/2248/563 784/2249/563 785/2250/563 -f 784/2251/564 1/2252/564 776/2253/564 785/2254/564 -f 783/2255/565 780/2256/565 1/2257/565 784/2258/565 -f 781/2259/566 505/2260/566 785/2261/566 776/2262/566 +f 779/2325/583 760/2326/583 770/2327/583 778/2328/583 +usemtl common_rough_steel +f 791/2329/584 792/2330/584 793/2331/584 789/2332/584 +f 788/2333/585 793/2334/585 792/2335/585 790/2336/585 +usemtl common_steel +f 794/2337/586 795/2338/586 799/2339/586 798/2340/586 +f 796/2341/587 794/2342/587 798/2343/587 800/2344/587 +f 801/2345/588 799/2346/588 795/2347/588 797/2348/588 usemtl conveyor -f 786/2263/567 787/2264/567 789/2265/567 788/2266/567 -f 790/2267/568 791/2268/568 789/2269/568 787/2270/568 -f 76/2271/569 789/2272/569 791/2273/569 71/2274/569 +f 802/2349/589 803/2350/589 806/2351/589 805/2352/589 +f 807/2353/590 806/2354/590 803/2355/590 804/2356/590 +f 808/2357/591 116/2358/591 803/2359/591 802/2360/591 +f 804/2361/592 803/2362/592 116/2363/592 809/2364/592 +usemtl projectile_workshop +f 813/2365/593 812/2366/593 810/2367/593 811/2368/593 +f 811/2369/594 810/2370/594 814/2371/594 815/2372/594 +f 815/2373/595 814/2374/595 816/2375/595 817/2376/595 +f 821/2377/596 819/2378/596 818/2379/596 820/2380/596 +f 820/2381/597 818/2382/597 822/2383/597 823/2384/597 +f 824/2385/598 819/2386/598 826/2387/598 825/2388/598 +f 823/2389/599 822/2390/599 812/2391/599 813/2392/599 +f 830/2393/600 828/2394/600 827/2395/600 829/2396/600 +f 833/2397/601 831/2398/601 832/2399/601 834/2400/601 +f 834/2401/602 832/2402/602 828/2403/602 830/2404/602 +f 838/2405/603 836/2406/603 835/2407/603 837/2408/603 +f 841/2409/604 839/2410/604 840/2411/604 842/2412/604 +f 837/2413/605 835/2414/605 839/2415/605 841/2416/605 +f 842/2417/606 840/2418/606 836/2419/606 838/2420/606 +f 846/2421/607 844/2422/607 843/2423/607 845/2424/607 +f 849/2425/608 847/2426/608 848/2427/608 850/2428/608 +f 845/2429/609 843/2430/609 847/2431/609 849/2432/609 +f 850/2433/610 848/2434/610 844/2435/610 846/2436/610 +f 854/2437/611 852/2438/611 851/2439/611 853/2440/611 +f 857/2441/612 855/2442/612 856/2443/612 858/2444/612 +f 853/2445/613 851/2446/613 855/2447/613 857/2448/613 +f 858/2449/614 856/2450/614 852/2451/614 854/2452/614 +f 862/2453/615 860/2454/615 859/2455/615 861/2456/615 +f 865/2457/616 863/2458/616 864/2459/616 866/2460/616 +f 861/2461/617 859/2462/617 863/2463/617 865/2464/617 +f 814/2465/618 819/2466/618 824/2467/618 867/2468/618 +f 867/2469/619 824/2470/619 825/2471/619 868/2472/619 +f 816/2473/620 826/2474/620 819/2475/620 814/2476/620 +f 816/2477/621 814/2478/621 867/2479/621 868/2480/621 +f 869/2481/622 826/2482/622 819/2483/622 821/2484/622 +f 823/2485/623 871/2486/623 870/2487/623 820/2488/623 +f 820/2489/624 870/2490/624 872/2491/624 821/2492/624 +f 821/2493/625 872/2494/625 873/2495/625 869/2496/625 +f 815/2497/626 875/2498/626 874/2499/626 811/2500/626 +f 811/2501/627 874/2502/627 876/2503/627 813/2504/627 +f 877/2505/628 875/2506/628 879/2507/628 878/2508/628 +f 813/2509/629 876/2510/629 871/2511/629 823/2512/629 +f 861/2513/630 881/2514/630 880/2515/630 862/2516/630 +f 866/2517/631 882/2518/631 883/2519/631 865/2520/631 +f 865/2521/632 883/2522/632 881/2523/632 861/2524/632 +f 853/2525/633 885/2526/633 884/2527/633 854/2528/633 +f 858/2529/634 886/2530/634 887/2531/634 857/2532/634 +f 854/2533/635 884/2534/635 886/2535/635 858/2536/635 +f 857/2537/636 887/2538/636 885/2539/636 853/2540/636 +f 845/2541/637 889/2542/637 888/2543/637 846/2544/637 +f 850/2545/638 890/2546/638 891/2547/638 849/2548/638 +f 846/2549/639 888/2550/639 890/2551/639 850/2552/639 +f 849/2553/640 891/2554/640 889/2555/640 845/2556/640 +f 837/2557/641 893/2558/641 892/2559/641 838/2560/641 +f 842/2561/642 894/2562/642 895/2563/642 841/2564/642 +f 838/2565/643 892/2566/643 894/2567/643 842/2568/643 +f 841/2569/644 895/2570/644 893/2571/644 837/2572/644 +f 829/2573/645 897/2574/645 896/2575/645 830/2576/645 +f 834/2577/646 898/2578/646 899/2579/646 833/2580/646 +f 830/2581/647 896/2582/647 898/2583/647 834/2584/647 +f 872/2585/648 875/2586/648 877/2587/648 801/2588/648 +f 900/2589/649 878/2590/649 879/2591/649 873/2592/649 +f 801/2593/650 877/2594/650 878/2595/650 900/2596/650 +f 873/2597/651 879/2598/651 875/2599/651 872/2600/651 +f 873/2601/652 872/2602/652 801/2603/652 900/2604/652 +f 817/2605/653 879/2606/653 875/2607/653 815/2608/653 +f 904/2609/654 903/2610/654 901/2611/654 902/2612/654 +f 902/2613/655 901/2614/655 905/2615/655 906/2616/655 +f 906/2617/656 905/2618/656 907/2619/656 908/2620/656 +f 912/2621/657 910/2622/657 909/2623/657 911/2624/657 +f 911/2625/658 909/2626/658 913/2627/658 914/2628/658 +f 915/2629/659 910/2630/659 917/2631/659 916/2632/659 +f 914/2633/660 913/2634/660 903/2635/660 904/2636/660 +f 921/2637/661 919/2638/661 918/2639/661 920/2640/661 +f 924/2641/662 922/2642/662 923/2643/662 925/2644/662 +f 925/2645/663 923/2646/663 919/2647/663 921/2648/663 +f 929/2649/664 927/2650/664 926/2651/664 928/2652/664 +f 932/2653/665 930/2654/665 931/2655/665 933/2656/665 +f 928/2657/666 926/2658/666 930/2659/666 932/2660/666 +f 933/2661/667 931/2662/667 927/2663/667 929/2664/667 +f 937/2665/668 935/2666/668 934/2667/668 936/2668/668 +f 940/2669/669 938/2670/669 939/2671/669 941/2672/669 +f 936/2673/670 934/2674/670 938/2675/670 940/2676/670 +f 941/2677/671 939/2678/671 935/2679/671 937/2680/671 +f 945/2681/672 943/2682/672 942/2683/672 944/2684/672 +f 948/2685/673 946/2686/673 947/2687/673 949/2688/673 +f 944/2689/674 942/2690/674 946/2691/674 948/2692/674 +f 949/2693/675 947/2694/675 943/2695/675 945/2696/675 +f 953/2697/676 951/2698/676 950/2699/676 952/2700/676 +f 956/2701/677 954/2702/677 955/2703/677 957/2704/677 +f 952/2705/678 950/2706/678 954/2707/678 956/2708/678 +f 905/2709/679 910/2710/679 915/2711/679 958/2712/679 +f 958/2713/680 915/2714/680 916/2715/680 959/2716/680 +f 907/2717/681 917/2718/681 910/2719/681 905/2720/681 +f 907/2721/682 905/2722/682 958/2723/682 959/2724/682 +f 960/2725/683 917/2726/683 910/2727/683 912/2728/683 +f 914/2729/684 962/2730/684 961/2731/684 911/2732/684 +f 911/2733/685 961/2734/685 963/2735/685 912/2736/685 +f 912/2737/686 963/2738/686 964/2739/686 960/2740/686 +f 906/2741/687 966/2742/687 965/2743/687 902/2744/687 +f 902/2745/688 965/2746/688 967/2747/688 904/2748/688 +f 797/2749/689 966/2750/689 969/2751/689 968/2752/689 +f 904/2753/690 967/2754/690 962/2755/690 914/2756/690 +f 952/2757/691 971/2758/691 970/2759/691 953/2760/691 +f 957/2761/692 972/2762/692 973/2763/692 956/2764/692 +f 956/2765/693 973/2766/693 971/2767/693 952/2768/693 +f 944/2769/694 975/2770/694 974/2771/694 945/2772/694 +f 949/2773/695 976/2774/695 977/2775/695 948/2776/695 +f 945/2777/696 974/2778/696 976/2779/696 949/2780/696 +f 948/2781/697 977/2782/697 975/2783/697 944/2784/697 +f 936/2785/698 979/2786/698 978/2787/698 937/2788/698 +f 941/2789/699 980/2790/699 981/2791/699 940/2792/699 +f 937/2793/700 978/2794/700 980/2795/700 941/2796/700 +f 940/2797/701 981/2798/701 979/2799/701 936/2800/701 +f 928/2801/702 983/2802/702 982/2803/702 929/2804/702 +f 933/2805/703 984/2806/703 985/2807/703 932/2808/703 +f 929/2809/704 982/2810/704 984/2811/704 933/2812/704 +f 932/2813/705 985/2814/705 983/2815/705 928/2816/705 +f 920/2817/706 987/2818/706 986/2819/706 921/2820/706 +f 925/2821/707 988/2822/707 989/2823/707 924/2824/707 +f 921/2825/708 986/2826/708 988/2827/708 925/2828/708 +f 963/2829/709 966/2830/709 797/2831/709 990/2832/709 +f 991/2833/710 968/2834/710 969/2835/710 964/2836/710 +f 990/2837/711 797/2838/711 968/2839/711 991/2840/711 +f 964/2841/712 969/2842/712 966/2843/712 963/2844/712 +f 964/2845/713 963/2846/713 990/2847/713 991/2848/713 +f 908/2849/714 969/2850/714 966/2851/714 906/2852/714 +usemtl common_steel +f 992/2853/715 993/2854/715 996/2855/715 995/2856/715 +f 990/2857/716 992/2858/716 995/2859/716 997/2860/716 +f 998/2861/717 996/2862/717 993/2863/717 994/2864/717 +usemtl projectile_workshop +f 154/2865/718 999/2866/718 1000/2867/718 146/2868/718 +f 153/2869/719 1001/2870/719 999/2871/719 154/2872/719 +f 1002/2873/720 130/2874/720 1004/2875/720 1003/2876/720 +f 1005/2877/721 1006/2878/721 1008/2879/721 1007/2880/721 +f 1010/2881/722 1009/2882/722 1011/2883/722 1012/2884/722 +f 1009/2885/723 1005/2886/723 1007/2887/723 1011/2888/723 +f 1006/2889/724 1010/2890/724 1012/2891/724 1008/2892/724 +f 1013/2893/725 1014/2894/725 1009/2895/725 1010/2896/725 +f 1016/2897/726 1015/2898/726 1006/2899/726 1005/2900/726 +usemtl common_thingies +f 1016/2901/727 1014/2902/727 1013/2903/727 1015/2904/727 +usemtl projectile_workshop +f 1015/2905/728 1013/2906/728 1010/2907/728 1006/2908/728 +f 1014/2909/729 1016/2910/729 1005/2911/729 1009/2912/729 +usemtl common_rough_steel +f 1031/2913/730 1032/2914/730 1018/2915/730 1026/2916/730 +f 1033/2917/731 1028/2918/731 1025/2919/731 1021/2920/731 +f 1036/2921/732 1037/2922/732 1033/2923/732 1021/2924/732 +f 1034/2925/733 1035/2926/733 1023/2927/733 1029/2928/733 +f 1038/2929/734 1039/2930/734 1024/2931/734 1020/2932/734 +f 1028/2933/735 1029/2934/735 1023/2935/735 1025/2936/735 +f 1030/2937/736 1031/2938/736 1026/2939/736 165/2940/736 +f 1039/2941/737 1040/2942/737 1022/2943/737 1024/2944/737 +f 1029/2945/738 1028/2946/738 1024/2947/738 1022/2948/738 +f 1040/2949/739 1034/2950/739 1029/2951/739 1022/2952/739 +f 1031/2953/740 1030/2954/740 1019/2955/740 1027/2956/740 +f 1032/2957/741 1031/2958/741 1027/2959/741 1017/2960/741 +f 1037/2961/742 1038/2962/742 1020/2963/742 1033/2964/742 +f 1028/2965/743 1033/2966/743 1020/2967/743 1024/2968/743 +f 1035/2969/744 1034/2970/744 1030/2971/744 165/2972/744 +f 1037/2973/745 1036/2974/745 1018/2975/745 1032/2976/745 +f 1038/2977/746 1037/2978/746 1032/2979/746 1017/2980/746 +f 1039/2981/747 1038/2982/747 1017/2983/747 1027/2984/747 +f 1040/2985/748 1039/2986/748 1027/2987/748 1019/2988/748 +f 1034/2989/749 1040/2990/749 1019/2991/749 1030/2992/749 +usemtl common_copper_cable +f 1042/2993/750 1041/2994/750 1048/2995/750 1045/2996/750 +f 1044/2997/751 1043/2998/751 1046/2999/751 1047/3000/751 +f 1046/3001/752 1045/3002/752 1048/3003/752 1047/3004/752 +f 1043/3005/753 1042/3006/753 1045/3007/753 1046/3008/753 +f 1044/3009/754 1049/3010/754 1050/3011/754 1043/3012/754 +f 1043/3013/755 1050/3014/755 1051/3015/755 1042/3016/755 +f 1042/3017/756 1051/3018/756 1052/3019/756 1041/3020/756 +f 1056/3021/757 1063/3022/757 1062/3023/757 1061/3024/757 +f 1057/3025/758 1053/3026/758 1059/3027/758 1060/3028/758 +f 1059/3029/759 1061/3030/759 1062/3031/759 1060/3032/759 +f 1053/3033/760 1056/3034/760 1061/3035/760 1059/3036/760 +f 1057/3037/761 1058/3038/761 1054/3039/761 1053/3040/761 +f 1053/3041/762 1054/3042/762 1055/3043/762 1056/3044/762 +f 1056/3045/763 1055/3046/763 1064/3047/763 1063/3048/763 usemtl projectile_workshop -f 127/2275/570 126/2276/570 124/2277/570 125/2278/570 -f 793/2279/571 796/2280/571 795/2281/571 794/2282/571 -f 794/2283/572 795/2284/572 797/2285/572 792/2286/572 -f 146/2287/573 798/2288/573 796/2289/573 793/2290/573 -f 154/2291/574 164/2292/574 798/2293/574 146/2294/574 -f 798/2295/575 800/2296/575 799/2297/575 796/2298/575 -f 799/2299/576 800/2300/576 162/2301/576 801/2302/576 -f 164/2303/577 162/2304/577 800/2305/577 798/2306/577 -f 796/2307/578 799/2308/578 802/2309/578 795/2310/578 -f 802/2311/579 799/2312/579 801/2313/579 803/2314/579 -f 795/2315/580 802/2316/580 803/2317/580 797/2318/580 +f 830/3049/764 829/3050/764 833/3051/764 834/3052/764 +f 838/3053/765 837/3054/765 841/3055/765 842/3056/765 +f 846/3057/766 845/3058/766 849/3059/766 850/3060/766 +f 854/3061/767 853/3062/767 857/3063/767 858/3064/767 +f 862/3065/768 861/3066/768 865/3067/768 866/3068/768 +f 921/3069/769 920/3070/769 924/3071/769 925/3072/769 +f 929/3073/770 928/3074/770 932/3075/770 933/3076/770 +f 937/3077/771 936/3078/771 940/3079/771 941/3080/771 +f 945/3081/772 944/3082/772 948/3083/772 949/3084/772 +f 953/3085/773 952/3086/773 956/3087/773 957/3088/773 +usemtl common_steel +f 161/3089/774 159/3090/774 158/3091/774 163/3092/774 +f 1068/3093/775 1074/3094/775 1073/3095/775 1066/3096/775 +f 1070/3097/776 1075/3098/776 1076/3099/776 1072/3100/776 +f 1073/3101/777 1079/3102/777 1080/3103/777 1066/3104/777 +f 1067/3105/778 1078/3106/778 1077/3107/778 1065/3108/778 +f 1065/3109/779 1073/3110/779 1074/3111/779 1067/3112/779 +f 1065/3113/780 1077/3114/780 1079/3115/780 1073/3116/780 +f 1071/3117/781 1076/3118/781 1075/3119/781 1069/3120/781 +f 1069/3121/782 1077/3122/782 1078/3123/782 1071/3124/782 +f 1075/3125/783 1079/3126/783 1077/3127/783 1069/3128/783 +f 1070/3129/784 1080/3130/784 1079/3131/784 1075/3132/784 +f 1072/3133/785 1081/3134/785 1080/3135/785 1070/3136/785 +usemtl common_rough_steel +f 1083/3137/786 1084/3138/786 1086/3139/786 1087/3140/786 +f 1084/3141/787 1083/3142/787 1082/3143/787 1085/3144/787 usemtl common_steel -f 363/2319/581 364/2320/581 368/2321/581 367/2322/581 -f 356/2323/582 355/2324/582 358/2325/582 359/2326/582 -f 340/2327/583 376/2328/583 379/2329/583 380/2330/583 -f 388/2331/584 389/2332/584 393/2333/584 392/2334/584 -f 394/2335/585 395/2336/585 397/2337/585 396/2338/585 -f 371/2339/586 372/2340/586 375/2341/586 374/2342/586 -f 384/2343/587 383/2344/587 385/2345/587 386/2346/587 -f 402/2347/588 403/2348/588 406/2349/588 405/2350/588 +f 1090/3145/788 1089/3146/788 1088/3147/788 1091/3148/788 +o lid1 +v 2 0.6906 -1 +v 2 0.6906 -1.0625 +v 2 -0.0594 -1 +v 2 -0.0594 -1.0625 +v 1 0.6906 -1 +v 1 0.6906 -1.0625 +v 1 -0.0594 -1 +v 1 -0.0594 -1.0625 +v 1.5625 0.4375 -1.0625 +v 1.5625 0.4375 -1.125 +v 1.5625 0.3125 -1.0625 +v 1.5625 0.3125 -1.125 +v 1.4375 0.4375 -1.0625 +v 1.4375 0.4375 -1.125 +v 1.4375 0.3125 -1.0625 +v 1.4375 0.3125 -1.125 +vt 0.75 0.5156 +vt 0.75 0.7031 +vt 0.7344 0.7031 +vt 0.7344 0.5156 +vt 1 0.5156 +vt 1 0.7031 +vt 0.9844 0.7031 +vt 0.9844 0.5156 +vt 1 0.6875 +vt 1 0.7031 +vt 0.75 0.7031 +vt 0.75 0.6875 +vt 1 0.5156 +vt 1 0.5313 +vt 0.75 0.5313 +vt 0.75 0.5156 +vt 1 0.5156 +vt 1 0.7031 +vt 0.75 0.7031 +vt 0.75 0.5156 +vt 1 0.5156 +vt 1 0.7031 +vt 0.75 0.7031 +vt 0.75 0.5156 +vt 0.1875 0.9375 +vt 0.1875 0.9688 +vt 0.1719 0.9688 +vt 0.1719 0.9375 +vt 0.2031 0.9375 +vt 0.2031 0.9688 +vt 0.1875 0.9688 +vt 0.1875 0.9375 +vt 0.1719 0.9688 +vt 0.1719 0.9531 +vt 0.2031 0.9531 +vt 0.2031 0.9688 +vt 0.1719 0.9531 +vt 0.1719 0.9375 +vt 0.2031 0.9375 +vt 0.2031 0.9531 +vt 0.2031 0.9375 +vt 0.2031 0.9688 +vt 0.1719 0.9688 +vt 0.1719 0.9375 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 usemtl projectile_workshop -f 771/2351/589 769/2352/589 770/2353/589 772/2354/589 \ No newline at end of file +f 1095/3149/789 1093/3150/789 1092/3151/789 1094/3152/789 +f 1098/3153/790 1096/3154/790 1097/3155/790 1099/3156/790 +f 1092/3157/791 1093/3158/791 1097/3159/791 1096/3160/791 +f 1095/3161/792 1094/3162/792 1098/3163/792 1099/3164/792 +f 1094/3165/793 1092/3166/793 1096/3167/793 1098/3168/793 +f 1099/3169/794 1097/3170/794 1093/3171/794 1095/3172/794 +usemtl common_bottom +f 1103/3173/795 1101/3174/795 1100/3175/795 1102/3176/795 +f 1106/3177/796 1104/3178/796 1105/3179/796 1107/3180/796 +f 1100/3181/797 1101/3182/797 1105/3183/797 1104/3184/797 +f 1103/3185/798 1102/3186/798 1106/3187/798 1107/3188/798 +f 1107/3189/799 1105/3190/799 1101/3191/799 1103/3192/799 +o lid2 +v 1 0.6906 -1 +v 1 0.6906 -1.0625 +v 1 -0.0594 -1 +v 1 -0.0594 -1.0625 +v 0 0.6906 -1 +v 0 0.6906 -1.0625 +v 0 -0.0594 -1 +v 0 -0.0594 -1.0625 +v 0.5625 0.4375 -1.0625 +v 0.5625 0.4375 -1.125 +v 0.5625 0.3125 -1.0625 +v 0.5625 0.3125 -1.125 +v 0.4375 0.4375 -1.0625 +v 0.4375 0.4375 -1.125 +v 0.4375 0.3125 -1.0625 +v 0.4375 0.3125 -1.125 +vt 0.75 0.5156 +vt 0.75 0.7031 +vt 0.7344 0.7031 +vt 0.7344 0.5156 +vt 1 0.5156 +vt 1 0.7031 +vt 0.9844 0.7031 +vt 0.9844 0.5156 +vt 1 0.6875 +vt 1 0.7031 +vt 0.75 0.7031 +vt 0.75 0.6875 +vt 1 0.5156 +vt 1 0.5313 +vt 0.75 0.5313 +vt 0.75 0.5156 +vt 1 0.5156 +vt 1 0.7031 +vt 0.75 0.7031 +vt 0.75 0.5156 +vt 1 0.5156 +vt 1 0.7031 +vt 0.75 0.7031 +vt 0.75 0.5156 +vt 0.1875 0.9375 +vt 0.1875 0.9688 +vt 0.1719 0.9688 +vt 0.1719 0.9375 +vt 0.2031 0.9375 +vt 0.2031 0.9688 +vt 0.1875 0.9688 +vt 0.1875 0.9375 +vt 0.1719 0.9688 +vt 0.1719 0.9531 +vt 0.2031 0.9531 +vt 0.2031 0.9688 +vt 0.1719 0.9531 +vt 0.1719 0.9375 +vt 0.2031 0.9375 +vt 0.2031 0.9531 +vt 0.2031 0.9375 +vt 0.2031 0.9688 +vt 0.1719 0.9688 +vt 0.1719 0.9375 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +usemtl projectile_workshop +f 1111/3193/800 1109/3194/800 1108/3195/800 1110/3196/800 +f 1114/3197/801 1112/3198/801 1113/3199/801 1115/3200/801 +f 1108/3201/802 1109/3202/802 1113/3203/802 1112/3204/802 +f 1111/3205/803 1110/3206/803 1114/3207/803 1115/3208/803 +f 1110/3209/804 1108/3210/804 1112/3211/804 1114/3212/804 +f 1115/3213/805 1113/3214/805 1109/3215/805 1111/3216/805 +usemtl common_bottom +f 1119/3217/806 1117/3218/806 1116/3219/806 1118/3220/806 +f 1122/3221/807 1120/3222/807 1121/3223/807 1123/3224/807 +f 1116/3225/808 1117/3226/808 1121/3227/808 1120/3228/808 +f 1119/3229/809 1118/3230/809 1122/3231/809 1123/3232/809 +f 1123/3233/810 1121/3234/810 1117/3235/810 1119/3236/810 \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_flak/field_flak.mtl b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_flak/field_flak.mtl new file mode 100644 index 000000000..8a809901b --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_flak/field_flak.mtl @@ -0,0 +1,12 @@ +# Made by Pabilo8 with Blockbench + +newmtl hans +map_Kd immersiveintelligence:entity/hans +newmtl wheel_12 +map_Kd immersiveintelligence:entity/vehicle/suspension/wheel_12 +newmtl anti_aircraft_gun_painted +map_Kd immersiveintelligence:entity/vehicle/field_gun/anti_aircraft_gun_painted +newmtl anti_aircraft_gun +map_Kd immersiveintelligence:entity/vehicle/field_gun/anti_aircraft_gun +newmtl common_camo_net +map_Kd immersiveintelligence:blocks/common/camo_net/common_camo_net \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_flak/field_flak.obj b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_flak/field_flak.obj new file mode 100644 index 000000000..f4c011873 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_flak/field_flak.obj @@ -0,0 +1,3724 @@ +# Made by Pabilo8 with Blockbench +# Exported with IIToolkit Plugin on 29/05/2026 +mtllib field_flak.mtl + +o weapon +v 0.0625 0.3125 -1 +v -0.0625 0.3125 -1 +v 0.0625 0.1875 -1 +v -0.0625 0.1875 -1 +v 0.0625 0.3125 1 +v -0.0625 0.3125 1 +v 0.0625 0.1875 1 +v -0.0625 0.1875 1 +v 1.75 0.4375 -0.1625 +v 1.625 0.4375 -0.1625 +v 1.75 0.3125 -0.1625 +v 1.625 0.3125 -0.1625 +v 1.75 0.4375 0.2125 +v 1.625 0.4375 0.2125 +v 1.75 0.3125 0.2125 +v 1.625 0.3125 0.2125 +v 1.625 0.3125 -0.0375 +v 1.5 0.3125 -0.0375 +v 1.625 0.4375 -0.0375 +v 1.5 0.4375 -0.0375 +v 1.625 0.3125 -0.1625 +v 1.5 0.3125 -0.1625 +v 1.625 0.4375 -0.1625 +v 1.5 0.4375 -0.1625 +v 1.5 0.4375 -0.1625 +v 1.25 0.4375 -0.1625 +v 1.5 0.3125 -0.1625 +v 1.25 0.3125 -0.1625 +v 1.5 0.4375 0.2125 +v 1.25 0.4375 0.2125 +v 1.5 0.3125 0.2125 +v 1.25 0.3125 0.2125 +v 1.625 0.4375 0.0875 +v 1.5 0.4375 0.0875 +v 1.625 0.3125 0.0875 +v 1.5 0.3125 0.0875 +v 1.625 0.4375 0.2125 +v 1.5 0.4375 0.2125 +v 1.625 0.3125 0.2125 +v 1.5 0.3125 0.2125 +v 1.25 0.4375 0.1875 +v 1.25 0.4375 -0.125 +v 1.25 0.3125 0.1875 +v 1.25 0.3125 -0.125 +v 0.75 0.4375 0.3125 +v 0.75 0.4375 -0.25 +v 0.75 0.3125 0.3125 +v 0.75 0.3125 -0.25 +v 0.75 0.4375 0.3125 +v 0.75 0.4375 -0.25 +v 0.75 0.3125 0.3125 +v 0.75 0.3125 -0.25 +v -0.0625 0.4375 0.3125 +v -0.0625 0.4375 -0.25 +v -0.0625 0.3125 0.3125 +v -0.0625 0.3125 -0.25 +v 0.0981 0.4375 0.2845 +v -0.0751 0.4375 -0.0481 +v 0.0981 0.3125 0.2845 +v -0.0751 0.3125 -0.0481 +v -1.1504 0.4375 0.864 +v -1.2658 0.4375 0.6422 +v -1.1504 0.3125 0.864 +v -1.2658 0.3125 0.6422 +v -0.0732 0.4375 0.0737 +v 0.0999 0.4375 -0.2589 +v -0.0732 0.3125 0.0737 +v 0.0999 0.3125 -0.2589 +v -1.264 0.4375 -0.6166 +v -1.1486 0.4375 -0.8384 +v -1.264 0.3125 -0.6166 +v -1.1486 0.3125 -0.8384 +v 0.625 0.5 -0.375 +v 0.4141 0.5 -0.625 +v 0.625 0.4375 -0.375 +v 0.4141 0.4375 -0.625 +v -0.625 0.5 -0.375 +v -0.4141 0.5 -0.625 +v -0.625 0.4375 -0.375 +v -0.4141 0.4375 -0.625 +v 0.625 0.5 0.375 +v 0.625 0.5 -0.375 +v 0.625 0.4375 0.375 +v 0.625 0.4375 -0.375 +v -0.625 0.5 0.375 +v -0.625 0.5 -0.375 +v -0.625 0.4375 0.375 +v -0.625 0.4375 -0.375 +v -0.625 0.5 0.375 +v -0.4141 0.5 0.625 +v -0.625 0.4375 0.375 +v -0.4141 0.4375 0.625 +v 0.625 0.5 0.375 +v 0.4141 0.5 0.625 +v 0.625 0.4375 0.375 +v 0.4141 0.4375 0.625 +v 0.9566 0.5627 -0.0142 +v 0.9566 0.5622 0.1108 +v 0.9578 0.0627 -0.0161 +v 0.9578 0.0622 0.1089 +v 1.0816 0.563 -0.0142 +v 1.0816 0.5625 0.1108 +v 1.0828 0.063 -0.0161 +v 1.0828 0.0625 0.1089 +v 1.2079 0.0378 0.2366 +v 1.2079 0.0378 -0.1384 +v 1.1997 -0.0242 0.2366 +v 1.1997 -0.0242 -0.1384 +v 0.8361 0.0867 0.2366 +v 0.8361 0.0867 -0.1384 +v 0.8279 0.0247 0.2366 +v 0.8279 0.0247 -0.1384 +v -1.07 0.5628 -0.7236 +v -1.1277 0.5624 -0.6128 +v -1.0689 0.0628 -0.725 +v -1.1266 0.0624 -0.6141 +v -0.9591 0.5629 -0.6659 +v -1.0168 0.5624 -0.555 +v -0.958 0.0629 -0.6673 +v -1.0157 0.0624 -0.5564 +v -0.9603 0.0625 -0.388 +v -0.7871 0.0625 -0.7206 +v -0.9603 0 -0.388 +v -0.7871 0 -0.7206 +v -1.2929 0.0625 -0.5612 +v -1.1197 0.0625 -0.8938 +v -1.2929 0 -0.5612 +v -1.1197 0 -0.8938 +v -1.1287 0.5625 0.6381 +v -1.0662 0.5621 0.7464 +v -1.1277 0.0626 0.6357 +v -1.0652 0.0621 0.7439 +v -1.0205 0.5631 0.5756 +v -0.958 0.5627 0.6839 +v -1.0195 0.0631 0.5732 +v -0.957 0.0627 0.6814 +v -0.7875 0.0625 0.7273 +v -0.975 0.0625 0.4025 +v -0.7875 0 0.7273 +v -0.975 0 0.4025 +v -1.1123 0.0625 0.9148 +v -1.2998 0.0625 0.59 +v -1.1123 0 0.9148 +v -1.2998 0 0.59 +vt 0.0313 0.2188 +vt 0.0313 0.25 +vt 0 0.25 +vt 0 0.2188 +vt 0.0313 0.2188 +vt 0.0313 0.25 +vt 0 0.25 +vt 0 0.2188 +vt 0.7656 0.3438 +vt 0.7656 0.375 +vt 0.2656 0.375 +vt 0.2656 0.3438 +vt 0.75 0.3438 +vt 0.75 0.375 +vt 0.25 0.375 +vt 0.25 0.3438 +vt 0.75 0.375 +vt 0.75 0.3438 +vt 0.25 0.3438 +vt 0.25 0.375 +vt 0.75 0.3438 +vt 0.75 0.375 +vt 0.25 0.375 +vt 0.25 0.3438 +vt 0.7344 0.2188 +vt 0.7344 0.25 +vt 0.7656 0.25 +vt 0.7656 0.2188 +vt 0.7969 0.2188 +vt 0.7969 0.25 +vt 0.7656 0.25 +vt 0.7656 0.2188 +vt 0.7813 0.25 +vt 0.7813 0.2813 +vt 0.6875 0.2813 +vt 0.6875 0.25 +vt 0.7813 0.2813 +vt 0.7813 0.25 +vt 0.6875 0.25 +vt 0.6875 0.2813 +vt 0.7031 0.2188 +vt 0.7031 0.25 +vt 0.7969 0.25 +vt 0.7969 0.2188 +vt 0.7656 0.5625 +vt 0.7656 0.5938 +vt 0.8594 0.5938 +vt 0.8594 0.5625 +vt 0.8438 0.6094 +vt 0.8438 0.6406 +vt 0.875 0.6406 +vt 0.875 0.6094 +vt 0.7656 0.25 +vt 0.7656 0.2188 +vt 0.7344 0.2188 +vt 0.7344 0.25 +vt 0.7656 0.2813 +vt 0.7344 0.2813 +vt 0.7344 0.25 +vt 0.7656 0.25 +vt 0.75 0.2813 +vt 0.7188 0.2813 +vt 0.7188 0.25 +vt 0.75 0.25 +vt 0.6719 0.2188 +vt 0.6719 0.25 +vt 0.6094 0.25 +vt 0.6094 0.2188 +vt 0.5938 0.2188 +vt 0.5938 0.25 +vt 0.6563 0.25 +vt 0.6563 0.2188 +vt 0.9063 0.25 +vt 0.9063 0.1875 +vt 0.8125 0.1875 +vt 0.8125 0.25 +vt 1 0.25 +vt 1 0.1875 +vt 0.9063 0.1875 +vt 0.9063 0.25 +vt 0.8125 0.625 +vt 0.8125 0.6563 +vt 0.9063 0.6563 +vt 0.9063 0.625 +vt 0.9063 0.2188 +vt 0.9063 0.25 +vt 1 0.25 +vt 1 0.2188 +vt 0.8438 0.6094 +vt 0.8438 0.6406 +vt 0.875 0.6406 +vt 0.875 0.6094 +vt 0.7656 0.2188 +vt 0.7656 0.25 +vt 0.7344 0.25 +vt 0.7344 0.2188 +vt 0.7656 0.2813 +vt 0.7344 0.2813 +vt 0.7344 0.25 +vt 0.7656 0.25 +vt 0.75 0.2813 +vt 0.7188 0.2813 +vt 0.7188 0.25 +vt 0.75 0.25 +vt 0.5 0.6563 +vt 0.5 0.6875 +vt 0.4219 0.6875 +vt 0.4219 0.6563 +vt 0.1406 0.9688 +vt 0.1406 1 +vt 0 1 +vt 0 0.9688 +vt 0.6406 0.5625 +vt 0.6406 0.6406 +vt 0.5156 0.6719 +vt 0.5156 0.5313 +vt 0.6406 0.5625 +vt 0.6406 0.6406 +vt 0.5156 0.6719 +vt 0.5156 0.5313 +vt 0.4726 0.6563 +vt 0.4726 0.6875 +vt 0.3438 0.6875 +vt 0.3438 0.6563 +vt 0.5156 0.6563 +vt 0.5156 0.6875 +vt 0.3906 0.6875 +vt 0.3906 0.6563 +vt 0.1406 0.9688 +vt 0.1406 1 +vt 0 1 +vt 0 0.9688 +vt 0.5313 0.5313 +vt 0.5313 0.6719 +vt 0.3281 0.6719 +vt 0.3281 0.5313 +vt 0.5156 0.5313 +vt 0.5156 0.6719 +vt 0.3125 0.6719 +vt 0.3125 0.5313 +vt 0.5313 0.5156 +vt 0.5313 0.5469 +vt 0.3281 0.5469 +vt 0.3281 0.5156 +vt 0.5156 0.6563 +vt 0.5156 0.6875 +vt 0.3125 0.6875 +vt 0.3125 0.6563 +vt 0.5156 0.3906 +vt 0.5156 0.4219 +vt 0.4531 0.4219 +vt 0.4531 0.3906 +vt 0.3125 0.4063 +vt 0.6563 0.4063 +vt 0.6563 0.5 +vt 0.3125 0.5 +vt 0.6563 0.4063 +vt 0.6563 0.5 +vt 0.3125 0.5 +vt 0.3125 0.4063 +vt 0.6563 0.3906 +vt 0.6563 0.4219 +vt 0.3125 0.4219 +vt 0.3125 0.3906 +vt 0.6563 0.4219 +vt 0.3125 0.4219 +vt 0.3125 0.3906 +vt 0.6563 0.3906 +vt 0.5156 0.3906 +vt 0.5156 0.4219 +vt 0.4531 0.4219 +vt 0.4531 0.3906 +vt 0.6563 0.4063 +vt 0.6563 0.5 +vt 0.3125 0.5 +vt 0.3125 0.4063 +vt 0.6563 0.3906 +vt 0.6563 0.4219 +vt 0.3125 0.4219 +vt 0.3125 0.3906 +vt 0.6563 0.4219 +vt 0.3125 0.4219 +vt 0.3125 0.3906 +vt 0.6563 0.3906 +vt 0.3125 0.4063 +vt 0.6563 0.4063 +vt 0.6563 0.5 +vt 0.3125 0.5 +vt 0.8787 0.6719 +vt 0.7969 0.6719 +vt 0.7969 0.6563 +vt 0.8787 0.6563 +vt 0.9255 0.6563 +vt 0.9255 0.6719 +vt 0.8438 0.6719 +vt 0.8438 0.6563 +vt 0.6875 0.625 +vt 1 0.625 +vt 0.9473 0.6875 +vt 0.7402 0.6875 +vt 0.9473 0.6875 +vt 1 0.625 +vt 0.6875 0.625 +vt 0.7402 0.6875 +vt 0.3125 0.9219 +vt 0.3125 0.9375 +vt 0 0.9375 +vt 0 0.9219 +vt 0.957 0.3906 +vt 0.75 0.3906 +vt 0.75 0.375 +vt 0.957 0.375 +vt 0.9375 0.6719 +vt 0.9375 0.6875 +vt 0.75 0.6875 +vt 0.75 0.6719 +vt 0.9375 0.6563 +vt 0.9375 0.6719 +vt 0.75 0.6719 +vt 0.75 0.6563 +vt 1 0.4375 +vt 1 0.625 +vt 0.6875 0.625 +vt 0.6875 0.4375 +vt 1 0.625 +vt 1 0.4375 +vt 0.6875 0.4375 +vt 0.6875 0.625 +vt 0.5469 0.9844 +vt 0.5469 1 +vt 0.2344 1 +vt 0.2344 0.9844 +vt 0.5469 0.9844 +vt 0.5469 1 +vt 0.2344 1 +vt 0.2344 0.9844 +vt 0.9568 0.6875 +vt 0.875 0.6875 +vt 0.875 0.6719 +vt 0.9568 0.6719 +vt 0.8943 0.6719 +vt 0.8943 0.6875 +vt 0.8125 0.6875 +vt 0.8125 0.6719 +vt 0.6875 0.4375 +vt 1 0.4375 +vt 0.9473 0.375 +vt 0.7402 0.375 +vt 0.7402 0.375 +vt 0.6875 0.4375 +vt 1 0.4375 +vt 0.9473 0.375 +vt 0.3125 0.9063 +vt 0.3125 0.9219 +vt 0 0.9219 +vt 0 0.9063 +vt 0.9414 0.6875 +vt 0.7344 0.6875 +vt 0.7344 0.6719 +vt 0.9414 0.6719 +vt 0.4063 0.8125 +vt 0.375 0.8125 +vt 0.375 0.6875 +vt 0.4063 0.6875 +vt 0.4063 0.6875 +vt 0.4063 0.8125 +vt 0.375 0.8125 +vt 0.375 0.6875 +vt 0.4063 0.8125 +vt 0.4063 0.8438 +vt 0.375 0.8438 +vt 0.375 0.8125 +vt 0.0938 0.9219 +vt 0.0938 0.9375 +vt 0.0781 0.9375 +vt 0.0781 0.9219 +vt 0.375 0.6875 +vt 0.375 0.8125 +vt 0.4063 0.8125 +vt 0.4063 0.6875 +vt 0.375 0.8281 +vt 0.4063 0.8281 +vt 0.4063 0.6875 +vt 0.375 0.6875 +vt 0.5313 0.0938 +vt 0.4375 0.0938 +vt 0.4375 0.0781 +vt 0.5313 0.0781 +vt 0.4375 0.0156 +vt 0.4375 0 +vt 0.5313 0 +vt 0.5313 0.0156 +vt 0.4375 0 +vt 0.5313 0 +vt 0.5313 0.0938 +vt 0.4375 0.0938 +vt 0.5313 0.0938 +vt 0.4375 0.0938 +vt 0.4375 0 +vt 0.5313 0 +vt 0.5313 0 +vt 0.5313 0.0156 +vt 0.4375 0.0156 +vt 0.4375 0 +vt 0.4375 0.0781 +vt 0.5313 0.0781 +vt 0.5313 0.0938 +vt 0.4375 0.0938 +vt 0.4063 0.8125 +vt 0.375 0.8125 +vt 0.375 0.6875 +vt 0.4063 0.6875 +vt 0.4063 0.6875 +vt 0.4063 0.8125 +vt 0.375 0.8125 +vt 0.375 0.6875 +vt 0.4063 0.8125 +vt 0.4063 0.8438 +vt 0.375 0.8438 +vt 0.375 0.8125 +vt 0.375 0.6875 +vt 0.375 0.8125 +vt 0.4063 0.8125 +vt 0.4063 0.6875 +vt 0.375 0.8281 +vt 0.4063 0.8281 +vt 0.4063 0.6875 +vt 0.375 0.6875 +vt 0.5313 0.0938 +vt 0.4375 0.0938 +vt 0.4375 0.0781 +vt 0.5313 0.0781 +vt 0.4375 0.0156 +vt 0.4375 0 +vt 0.5313 0 +vt 0.5313 0.0156 +vt 0.4375 0 +vt 0.5313 0 +vt 0.5313 0.0938 +vt 0.4375 0.0938 +vt 0.5313 0.0938 +vt 0.4375 0.0938 +vt 0.4375 0 +vt 0.5313 0 +vt 0.5313 0 +vt 0.5313 0.0156 +vt 0.4375 0.0156 +vt 0.4375 0 +vt 0.4375 0.0781 +vt 0.5313 0.0781 +vt 0.5313 0.0938 +vt 0.4375 0.0938 +vt 0.4063 0.8125 +vt 0.375 0.8125 +vt 0.375 0.6875 +vt 0.4063 0.6875 +vt 0.4063 0.6875 +vt 0.4063 0.8125 +vt 0.375 0.8125 +vt 0.375 0.6875 +vt 0.4063 0.8125 +vt 0.4063 0.8438 +vt 0.375 0.8438 +vt 0.375 0.8125 +vt 0.375 0.6875 +vt 0.375 0.8125 +vt 0.4063 0.8125 +vt 0.4063 0.6875 +vt 0.375 0.8125 +vt 0.4063 0.8125 +vt 0.4063 0.6875 +vt 0.375 0.6875 +vt 0.5313 0.0938 +vt 0.4375 0.0938 +vt 0.4375 0.0781 +vt 0.5313 0.0781 +vt 0.4375 0.0156 +vt 0.4375 0 +vt 0.5313 0 +vt 0.5313 0.0156 +vt 0.4375 0 +vt 0.5313 0 +vt 0.5313 0.0938 +vt 0.4375 0.0938 +vt 0.5313 0.0938 +vt 0.4375 0.0938 +vt 0.4375 0 +vt 0.5313 0 +vt 0.5313 0 +vt 0.5313 0.0156 +vt 0.4375 0.0156 +vt 0.4375 0 +vt 0.4375 0.0781 +vt 0.5313 0.0781 +vt 0.5313 0.0938 +vt 0.4375 0.0938 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0.24 0 0.97 +vn 0.24 0 -0.97 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn -0.89 0 0.46 +vn 0 1 0 +vn 0 -1 0 +vn 0.42 0 0.91 +vn -0.5 0 -0.87 +vn -0.89 0 -0.46 +vn 0 -1 0 +vn -0.5 0 0.87 +vn 0.42 0 -0.91 +vn 0 1 0 +vn 0.76 0 -0.64 +vn -0.76 0 -0.64 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn -0.76 0 0.64 +vn 0.76 0 0.64 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0.99 -0.13 0 +vn -0.99 0.13 0 +vn 0.13 0.99 0 +vn -0.13 -0.99 0 +vn 0 0 1 +vn 0 0 -1 +vn -0.89 0 -0.46 +vn 0.89 0 0.46 +vn 0 1 0 +vn 0.46 0 -0.89 +vn -0.46 0 0.89 +vn 0.89 0 0.46 +vn -0.89 0 -0.46 +vn 0 1 0 +vn 0 -1 0 +vn -0.46 0 0.89 +vn 0.46 0 -0.89 +vn -0.87 0 0.5 +vn 0.87 0 -0.5 +vn 0 1 0 +vn -0.5 0 -0.87 +vn 0.5 0 0.87 +vn 0.87 0 -0.5 +vn -0.87 0 0.5 +vn 0 1 0 +vn 0 -1 0 +vn 0.5 0 0.87 +vn -0.5 0 -0.87 +usemtl anti_aircraft_gun_painted +f 4/1/1 2/2/1 1/3/1 3/4/1 +f 7/5/2 5/6/2 6/7/2 8/8/2 +f 1/9/3 2/10/3 6/11/3 5/12/3 +f 4/13/4 3/14/4 7/15/4 8/16/4 +f 3/17/5 1/18/5 5/19/5 7/20/5 +f 8/21/6 6/22/6 2/23/6 4/24/6 +f 12/25/7 10/26/7 9/27/7 11/28/7 +f 15/29/8 13/30/8 14/31/8 16/32/8 +f 9/33/9 10/34/9 14/35/9 13/36/9 +usemtl anti_aircraft_gun +f 12/37/10 11/38/10 15/39/10 16/40/10 +usemtl anti_aircraft_gun_painted +f 11/41/11 9/42/11 13/43/11 15/44/11 +f 16/45/12 14/46/12 10/47/12 12/48/12 +f 20/49/13 18/50/13 17/51/13 19/52/13 +f 23/53/14 21/54/14 22/55/14 24/56/14 +usemtl anti_aircraft_gun +f 17/57/15 18/58/15 22/59/15 21/60/15 +usemtl anti_aircraft_gun_painted +f 20/61/16 19/62/16 23/63/16 24/64/16 +f 28/65/17 26/66/17 25/67/17 27/68/17 +f 31/69/18 29/70/18 30/71/18 32/72/18 +f 25/73/19 26/74/19 30/75/19 29/76/19 +usemtl anti_aircraft_gun +f 28/77/20 27/78/20 31/79/20 32/80/20 +usemtl anti_aircraft_gun_painted +f 27/81/21 25/82/21 29/83/21 31/84/21 +f 32/85/22 30/86/22 26/87/22 28/88/22 +f 36/89/23 34/90/23 33/91/23 35/92/23 +f 39/93/24 37/94/24 38/95/24 40/96/24 +f 33/97/25 34/98/25 38/99/25 37/100/25 +usemtl anti_aircraft_gun +f 36/101/26 35/102/26 39/103/26 40/104/26 +usemtl anti_aircraft_gun_painted +f 44/105/27 42/106/27 41/107/27 43/108/27 +f 47/109/28 45/110/28 46/111/28 48/112/28 +f 41/113/29 42/114/29 46/115/29 45/116/29 +usemtl anti_aircraft_gun +f 44/117/30 43/118/30 47/119/30 48/120/30 +usemtl anti_aircraft_gun_painted +f 43/121/31 41/122/31 45/123/31 47/124/31 +f 48/125/32 46/126/32 42/127/32 44/128/32 +f 52/129/33 50/130/33 49/131/33 51/132/33 +f 49/133/34 50/134/34 54/135/34 53/136/34 +usemtl anti_aircraft_gun +f 52/137/35 51/138/35 55/139/35 56/140/35 +usemtl anti_aircraft_gun_painted +f 51/141/36 49/142/36 53/143/36 55/144/36 +f 56/145/37 54/146/37 50/147/37 52/148/37 +f 63/149/38 61/150/38 62/151/38 64/152/38 +f 61/153/39 57/154/39 58/155/39 62/156/39 +usemtl anti_aircraft_gun +f 60/157/40 59/158/40 63/159/40 64/160/40 +usemtl anti_aircraft_gun_painted +f 59/161/41 57/162/41 61/163/41 63/164/41 +f 62/165/42 58/166/42 60/167/42 64/168/42 +f 71/169/43 69/170/43 70/171/43 72/172/43 +usemtl anti_aircraft_gun +f 68/173/44 67/174/44 71/175/44 72/176/44 +usemtl anti_aircraft_gun_painted +f 67/177/45 65/178/45 69/179/45 71/180/45 +f 70/181/46 66/182/46 68/183/46 72/184/46 +f 69/185/47 65/186/47 66/187/47 70/188/47 +f 74/189/48 73/190/48 75/191/48 76/192/48 +f 79/193/49 77/194/49 78/195/49 80/196/49 +f 77/197/50 73/198/50 74/199/50 78/200/50 +usemtl anti_aircraft_gun +f 76/201/51 75/202/51 79/203/51 80/204/51 +usemtl anti_aircraft_gun_painted +f 75/205/52 73/206/52 77/207/52 79/208/52 +f 78/209/53 74/210/53 76/211/53 80/212/53 +f 84/213/54 82/214/54 81/215/54 83/216/54 +f 87/217/55 85/218/55 86/219/55 88/220/55 +f 81/221/56 82/222/56 86/223/56 85/224/56 +usemtl anti_aircraft_gun +f 84/225/57 83/226/57 87/227/57 88/228/57 +usemtl anti_aircraft_gun_painted +f 83/229/58 81/230/58 85/231/58 87/232/58 +f 88/233/59 86/234/59 82/235/59 84/236/59 +f 90/237/60 89/238/60 91/239/60 92/240/60 +f 95/241/61 93/242/61 94/243/61 96/244/61 +f 93/245/62 89/246/62 90/247/62 94/248/62 +usemtl anti_aircraft_gun +f 92/249/63 91/250/63 95/251/63 96/252/63 +usemtl anti_aircraft_gun_painted +f 91/253/64 89/254/64 93/255/64 95/256/64 +f 94/257/65 90/258/65 92/259/65 96/260/65 +f 98/261/66 97/262/66 99/263/66 100/264/66 +f 103/265/67 101/266/67 102/267/67 104/268/67 +f 101/269/68 97/270/68 98/271/68 102/272/68 +f 100/273/69 99/274/69 103/275/69 104/276/69 +f 99/277/70 97/278/70 101/279/70 103/280/70 +f 102/281/71 98/282/71 100/283/71 104/284/71 +f 106/285/72 105/286/72 107/287/72 108/288/72 +f 111/289/73 109/290/73 110/291/73 112/292/73 +f 109/293/74 105/294/74 106/295/74 110/296/74 +f 108/297/75 107/298/75 111/299/75 112/300/75 +f 107/301/76 105/302/76 109/303/76 111/304/76 +f 110/305/77 106/306/77 108/307/77 112/308/77 +f 114/309/78 113/310/78 115/311/78 116/312/78 +f 119/313/79 117/314/79 118/315/79 120/316/79 +f 117/317/80 113/318/80 114/319/80 118/320/80 +f 115/321/81 113/322/81 117/323/81 119/324/81 +f 118/325/82 114/326/82 116/327/82 120/328/82 +f 122/329/83 121/330/83 123/331/83 124/332/83 +f 127/333/84 125/334/84 126/335/84 128/336/84 +f 125/337/85 121/338/85 122/339/85 126/340/85 +f 124/341/86 123/342/86 127/343/86 128/344/86 +f 123/345/87 121/346/87 125/347/87 127/348/87 +f 126/349/88 122/350/88 124/351/88 128/352/88 +f 130/353/89 129/354/89 131/355/89 132/356/89 +f 135/357/90 133/358/90 134/359/90 136/360/90 +f 133/361/91 129/362/91 130/363/91 134/364/91 +f 131/365/92 129/366/92 133/367/92 135/368/92 +f 134/369/93 130/370/93 132/371/93 136/372/93 +f 138/373/94 137/374/94 139/375/94 140/376/94 +f 143/377/95 141/378/95 142/379/95 144/380/95 +f 141/381/96 137/382/96 138/383/96 142/384/96 +f 140/385/97 139/386/97 143/387/97 144/388/97 +f 139/389/98 137/390/98 141/391/98 143/392/98 +f 142/393/99 138/394/99 140/395/99 144/396/99 +o wheel2 +v -0.1875 0.4339 1.0561 +v 0.1875 0.4339 1.0561 +v -0.1875 0.0589 1.0561 +v 0.1875 0.0589 1.0561 +v -0.1875 0.4339 0.9936 +v 0.1875 0.4339 0.9936 +v -0.1875 0.0589 0.9936 +v 0.1875 0.0589 0.9936 +v 0.1875 0.6793 1.3085 +v 0.1875 0.6793 1.0585 +v 0.4375 0.4293 1.3085 +v 0.4375 0.4293 1.0585 +v -0.1875 0.6793 1.3085 +v -0.1875 0.6793 1.0585 +v -0.4375 0.4293 1.3085 +v -0.4375 0.4293 1.0585 +v 0.1875 -0.1957 1.3085 +v 0.1875 -0.1957 1.0585 +v 0.4375 0.0543 1.3085 +v 0.4375 0.0543 1.0585 +v -0.1875 -0.1957 1.3085 +v -0.1875 -0.1957 1.0585 +v -0.4375 0.0543 1.3085 +v -0.4375 0.0543 1.0585 +v 0.4375 0.4293 1.3085 +v 0.4375 0.4293 1.0585 +v 0.4375 0.0543 1.3085 +v 0.4375 0.0543 1.0585 +v -0.4375 0.4293 1.3085 +v -0.4375 0.4293 1.0585 +v -0.4375 0.0543 1.3085 +v -0.4375 0.0543 1.0585 +vt 0.5313 0.0938 +vt 0.5313 0 +vt 0.625 0 +vt 0.625 0.0938 +vt 0.5391 0 +vt 0.5391 0.0938 +vt 0.5313 0.0938 +vt 0.5313 0 +vt 0.6172 0.0938 +vt 0.6172 0 +vt 0.6094 0 +vt 0.6094 0.0938 +vt 0.5313 0.0938 +vt 0.5313 0 +vt 0.5469 0 +vt 0.5469 0.0938 +vt 0.6094 0.0938 +vt 0.6094 0 +vt 0.6172 0 +vt 0.6172 0.0938 +vt 0.8438 0.542 +vt 0.8438 0.7188 +vt 0.7188 0.7188 +vt 0.7188 0.542 +vt 0.1563 0.7188 +vt 0.1563 0.542 +vt 0.2813 0.542 +vt 0.2813 0.7188 +vt 0.4063 0.8438 +vt 0.4063 0.7188 +vt 0.5938 0.7188 +vt 0.5938 0.8438 +vt 0.7188 0.5938 +vt 0.5938 0.7188 +vt 0.4063 0.7188 +vt 0.2813 0.5938 +vt 0.7188 0.5938 +vt 0.5938 0.7188 +vt 0.4063 0.7188 +vt 0.2813 0.5938 +vt 0.7188 0.292 +vt 0.8438 0.292 +vt 0.8438 0.4688 +vt 0.7188 0.4688 +vt 0.2813 0.4688 +vt 0.1563 0.4688 +vt 0.1563 0.292 +vt 0.2813 0.292 +vt 0.4063 0.1563 +vt 0.5938 0.1563 +vt 0.5938 0.2813 +vt 0.4063 0.2813 +vt 0.4063 0.2813 +vt 0.5938 0.2813 +vt 0.7188 0.4063 +vt 0.2813 0.4063 +vt 0.4063 0.2813 +vt 0.5938 0.2813 +vt 0.7188 0.4063 +vt 0.2813 0.4063 +vt 0.8438 0.4063 +vt 0.8438 0.5938 +vt 0.7188 0.5938 +vt 0.7188 0.4063 +vt 0.1563 0.5938 +vt 0.1563 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.5938 +vt 0.7188 0.4063 +vt 0.7188 0.5938 +vt 0.2813 0.5938 +vt 0.2813 0.4063 +vt 0.7188 0.4063 +vt 0.7188 0.5938 +vt 0.2813 0.5938 +vt 0.2813 0.4063 +vn 0 0 -1 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0.71 0.71 0 +vn -0.71 0.71 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0.71 -0.71 0 +vn -0.71 -0.71 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +usemtl anti_aircraft_gun_painted +f 151/397/100 149/398/100 150/399/100 152/400/100 +f 145/401/101 146/402/101 150/403/101 149/404/101 +f 148/405/102 147/406/102 151/407/102 152/408/102 +f 147/409/103 145/410/103 149/411/103 151/412/103 +f 152/413/104 150/414/104 146/415/104 148/416/104 +usemtl wheel_12 +f 156/417/105 154/418/105 153/419/105 155/420/105 +f 159/421/106 157/422/106 158/423/106 160/424/106 +f 153/425/107 154/426/107 158/427/107 157/428/107 +f 155/429/108 153/430/108 157/431/108 159/432/108 +f 160/433/109 158/434/109 154/435/109 156/436/109 +f 161/437/110 162/438/110 164/439/110 163/440/110 +f 166/441/111 165/442/111 167/443/111 168/444/111 +f 166/445/112 162/446/112 161/447/112 165/448/112 +f 165/449/113 161/450/113 163/451/113 167/452/113 +f 162/453/114 166/454/114 168/455/114 164/456/114 +f 172/457/115 170/458/115 169/459/115 171/460/115 +f 175/461/116 173/462/116 174/463/116 176/464/116 +f 171/465/117 169/466/117 173/467/117 175/468/117 +f 176/469/118 174/470/118 170/471/118 172/472/118 +o wheel1 +v 0.1875 0.4293 -1.0376 +v -0.1875 0.4293 -1.0376 +v 0.1875 0.0543 -1.0376 +v -0.1875 0.0543 -1.0376 +v 0.1875 0.4293 -0.9751 +v -0.1875 0.4293 -0.9751 +v 0.1875 0.0543 -0.9751 +v -0.1875 0.0543 -0.9751 +v -0.1875 0.6793 -1.2876 +v -0.1875 0.6793 -1.0376 +v -0.4375 0.4293 -1.2876 +v -0.4375 0.4293 -1.0376 +v 0.1875 0.6793 -1.2876 +v 0.1875 0.6793 -1.0376 +v 0.4375 0.4293 -1.2876 +v 0.4375 0.4293 -1.0376 +v -0.1875 -0.1957 -1.2876 +v -0.1875 -0.1957 -1.0376 +v -0.4375 0.0543 -1.2876 +v -0.4375 0.0543 -1.0376 +v 0.1875 -0.1957 -1.2876 +v 0.1875 -0.1957 -1.0376 +v 0.4375 0.0543 -1.2876 +v 0.4375 0.0543 -1.0376 +v -0.4375 0.4293 -1.2876 +v -0.4375 0.4293 -1.0376 +v -0.4375 0.0543 -1.2876 +v -0.4375 0.0543 -1.0376 +v 0.4375 0.4293 -1.2876 +v 0.4375 0.4293 -1.0376 +v 0.4375 0.0543 -1.2876 +v 0.4375 0.0543 -1.0376 +vt 0.5313 0.0938 +vt 0.5313 0 +vt 0.625 0 +vt 0.625 0.0938 +vt 0.5391 0 +vt 0.5391 0.0938 +vt 0.5313 0.0938 +vt 0.5313 0 +vt 0.6172 0.0938 +vt 0.6172 0 +vt 0.6094 0 +vt 0.6094 0.0938 +vt 0.5313 0.0938 +vt 0.5313 0 +vt 0.5469 0 +vt 0.5469 0.0938 +vt 0.6094 0.0938 +vt 0.6094 0 +vt 0.6172 0 +vt 0.6172 0.0938 +vt 0.8438 0.542 +vt 0.8438 0.7188 +vt 0.7188 0.7188 +vt 0.7188 0.542 +vt 0.1563 0.7188 +vt 0.1563 0.542 +vt 0.2813 0.542 +vt 0.2813 0.7188 +vt 0.4063 0.8438 +vt 0.4063 0.7188 +vt 0.5938 0.7188 +vt 0.5938 0.8438 +vt 0.7188 0.5938 +vt 0.5938 0.7188 +vt 0.4063 0.7188 +vt 0.2813 0.5938 +vt 0.7188 0.5938 +vt 0.5938 0.7188 +vt 0.4063 0.7188 +vt 0.2813 0.5938 +vt 0.7188 0.292 +vt 0.8438 0.292 +vt 0.8438 0.4688 +vt 0.7188 0.4688 +vt 0.2813 0.4688 +vt 0.1563 0.4688 +vt 0.1563 0.292 +vt 0.2813 0.292 +vt 0.4063 0.1563 +vt 0.5938 0.1563 +vt 0.5938 0.2813 +vt 0.4063 0.2813 +vt 0.4063 0.2813 +vt 0.5938 0.2813 +vt 0.7188 0.4063 +vt 0.2813 0.4063 +vt 0.4063 0.2813 +vt 0.5938 0.2813 +vt 0.7188 0.4063 +vt 0.2813 0.4063 +vt 0.8438 0.4063 +vt 0.8438 0.5938 +vt 0.7188 0.5938 +vt 0.7188 0.4063 +vt 0.1563 0.5938 +vt 0.1563 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.5938 +vt 0.7188 0.4063 +vt 0.7188 0.5938 +vt 0.2813 0.5938 +vt 0.2813 0.4063 +vt 0.7188 0.4063 +vt 0.7188 0.5938 +vt 0.2813 0.5938 +vt 0.2813 0.4063 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn -0.71 0.71 0 +vn 0.71 0.71 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.71 -0.71 0 +vn 0.71 -0.71 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn 0 0 1 +usemtl anti_aircraft_gun_painted +f 183/473/119 181/474/119 182/475/119 184/476/119 +f 177/477/120 178/478/120 182/479/120 181/480/120 +f 180/481/121 179/482/121 183/483/121 184/484/121 +f 179/485/122 177/486/122 181/487/122 183/488/122 +f 184/489/123 182/490/123 178/491/123 180/492/123 +usemtl wheel_12 +f 188/493/124 186/494/124 185/495/124 187/496/124 +f 191/497/125 189/498/125 190/499/125 192/500/125 +f 185/501/126 186/502/126 190/503/126 189/504/126 +f 187/505/127 185/506/127 189/507/127 191/508/127 +f 192/509/128 190/510/128 186/511/128 188/512/128 +f 193/513/129 194/514/129 196/515/129 195/516/129 +f 198/517/130 197/518/130 199/519/130 200/520/130 +f 198/521/131 194/522/131 193/523/131 197/524/131 +f 197/525/132 193/526/132 195/527/132 199/528/132 +f 194/529/133 198/530/133 200/531/133 196/532/133 +f 204/533/134 202/534/134 201/535/134 203/536/134 +f 207/537/135 205/538/135 206/539/135 208/540/135 +f 203/541/136 201/542/136 205/543/136 207/544/136 +f 208/545/137 206/546/137 202/547/137 204/548/137 +o weapon_net +v -0.6037 0.4438 0.2566 +v -0.4537 0.4438 0.5449 +v -0.6037 0.2563 0.2566 +v -0.4537 0.2563 0.5449 +v -1.2546 0.4438 0.6306 +v -1.1333 0.4438 0.8635 +v -1.2546 0.2563 0.6306 +v -1.1333 0.2563 0.8635 +v -0.6153 0.4438 -0.2344 +v -0.4652 0.4438 -0.5227 +v -0.6153 0.2563 -0.2344 +v -0.4652 0.2563 -0.5227 +v -1.2661 0.4438 -0.6084 +v -1.1449 0.4438 -0.8413 +v -1.2661 0.2563 -0.6084 +v -1.1449 0.2563 -0.8413 +vt 0.8125 0.7266 +vt 1 0.7344 +vt 1 0.6531 +vt 0.8125 0.6609 +vt 0.1563 0.9531 +vt 0.3439 0.9531 +vt 0.3439 0.9063 +vt 0.1563 0.9063 +vt 0.1875 0.6094 +vt 0.3752 0.6094 +vt 0.3752 0.5625 +vt 0.1875 0.5625 +vt 1 0.6531 +vt 1 0.7344 +vt 0.8125 0.7266 +vt 0.8125 0.6609 +vt 0.3439 0.9063 +vt 0.3439 0.9531 +vt 0.1563 0.9531 +vt 0.1563 0.9063 +vt 0.3752 0.5625 +vt 0.3752 0.6094 +vt 0.1875 0.6094 +vt 0.1875 0.5625 +vn 0 1 0 +vn -0.5 0 -0.87 +vn 0.42 0 0.91 +vn 0 1 0 +vn -0.5 0 0.87 +vn 0.42 0 -0.91 +usemtl common_camo_net +f 214/549/138 210/550/138 209/551/138 213/552/138 +f 213/553/139 209/554/139 211/555/139 215/556/139 +f 210/557/140 214/558/140 216/559/140 212/560/140 +f 217/561/141 218/562/141 222/563/141 221/564/141 +f 219/565/142 217/566/142 221/567/142 223/568/142 +f 224/569/143 222/570/143 218/571/143 220/572/143 +o turret +v 0.75 1.375 -0.4375 +v 0.75 1.375 -0.9375 +v 0.75 0.875 -0.4375 +v 0.75 0.875 -0.9375 +v 0.6875 1.375 -0.4375 +v 0.6875 1.375 -0.9375 +v 0.6875 0.875 -0.4375 +v 0.6875 0.875 -0.9375 +v 0.6875 0.6875 -0.4375 +v 0.6875 0.6875 -0.9375 +v 0.6875 0.625 -0.4375 +v 0.6875 0.625 -0.9375 +v 0.1875 0.6875 -0.4375 +v 0.1875 0.6875 -0.9375 +v 0.1875 0.625 -0.4375 +v 0.1875 0.625 -0.9375 +v 0.7501 0.875 -0.6291 +v 0.7501 0.875 -0.7541 +v 0.7501 0.625 -0.6291 +v 0.7501 0.625 -0.7541 +v 0.6876 0.875 -0.6291 +v 0.6876 0.875 -0.7541 +v 0.6876 0.625 -0.6291 +v 0.6876 0.625 -0.7541 +v 0.75 1.375 0.875 +v 0.75 1.375 0.375 +v 0.75 0.875 0.875 +v 0.75 0.875 0.375 +v 0.6875 1.375 0.875 +v 0.6875 1.375 0.375 +v 0.6875 0.875 0.875 +v 0.6875 0.875 0.375 +v 0.6875 0.6875 0.875 +v 0.6875 0.6875 0.375 +v 0.6875 0.625 0.875 +v 0.6875 0.625 0.375 +v 0.1875 0.6875 0.875 +v 0.1875 0.6875 0.375 +v 0.1875 0.625 0.875 +v 0.1875 0.625 0.375 +v 0.7501 0.875 0.6834 +v 0.7501 0.875 0.5584 +v 0.7501 0.625 0.6834 +v 0.7501 0.625 0.5584 +v 0.6876 0.875 0.6834 +v 0.6876 0.875 0.5584 +v 0.6876 0.625 0.6834 +v 0.6876 0.625 0.5584 +v -0.4375 1.875 1.125 +v -0.4375 1.875 0.375 +v -0.6875 1.3125 1.125 +v -0.6875 1.3125 0.375 +v -0.5 1.875 1.125 +v -0.5 1.875 0.375 +v -0.75 1.3125 1.125 +v -0.75 1.3125 0.375 +v -0.6875 1.3125 1.125 +v -0.6875 1.3125 0.375 +v -0.5 0.875 1.125 +v -0.5 0.875 0.375 +v -0.75 1.3125 1.125 +v -0.75 1.3125 0.375 +v -0.5625 0.875 1.125 +v -0.5625 0.875 0.375 +v -0.5 0.875 1.125 +v -0.5 0.875 0.375 +v -0.375 0.625 1.125 +v -0.375 0.625 0.375 +v -0.5625 0.875 1.125 +v -0.5625 0.875 0.375 +v -0.4375 0.625 1.125 +v -0.4375 0.625 0.375 +v -0.6875 1.3125 -0.375 +v -0.6875 1.3125 -1.125 +v -0.5 0.875 -0.375 +v -0.5 0.875 -1.125 +v -0.75 1.3125 -0.375 +v -0.75 1.3125 -1.125 +v -0.5625 0.875 -0.375 +v -0.5625 0.875 -1.125 +v -0.5 0.875 -0.375 +v -0.5 0.875 -1.125 +v -0.375 0.625 -0.375 +v -0.375 0.625 -0.9375 +v -0.5625 0.875 -0.375 +v -0.5625 0.875 -1.125 +v -0.4375 0.625 -0.375 +v -0.4375 0.625 -0.9375 +v -0.4375 1.875 -0.375 +v -0.4375 1.875 -1.125 +v -0.6875 1.3125 -0.375 +v -0.6875 1.3125 -1.125 +v -0.5 1.875 -0.375 +v -0.5 1.875 -1.125 +v -0.75 1.3125 -0.375 +v -0.75 1.3125 -1.125 +v 0.1876 1.375 0.0272 +v 0.1876 1.375 -0.0353 +v 0.1876 0.625 0.0272 +v 0.1876 0.625 -0.0353 +v -0.5624 1.375 0.0272 +v -0.5624 1.375 -0.0353 +v -0.5624 0.625 0.0272 +v -0.5624 0.625 -0.0353 +v 0.5626 1 0.1834 +v 0.5626 1 -0.1916 +v 0.5626 0.625 0.1834 +v 0.5626 0.625 -0.1916 +v 0.3126 1 0.1834 +v 0.3126 1 -0.1916 +v 0.3126 0.625 0.1834 +v 0.3126 0.625 -0.1916 +v 0.5626 0.625 0.3084 +v 0.5626 0.625 -0.3166 +v 0.5626 0.5 0.3084 +v 0.5626 0.5 -0.3166 +v -0.5624 0.625 0.3084 +v -0.5624 0.625 -0.3166 +v -0.5624 0.5 0.3084 +v -0.5624 0.5 -0.3166 +v 0.0001 0.625 -0.3166 +v 0.0001 0.625 0.3084 +v 0.0001 0.5 0.3084 +v 0.0001 0.5 -0.3166 +v -0.3515 0.625 -0.5666 +v -0.5624 0.625 -0.3166 +v -0.3515 0.5 -0.5666 +v -0.5624 0.5 -0.3166 +v 0.3517 0.625 -0.5666 +v 0.5626 0.625 -0.3166 +v 0.3517 0.5 -0.5666 +v 0.5626 0.5 -0.3166 +v 0.3517 0.625 0.5584 +v 0.5626 0.625 0.3084 +v 0.3517 0.5 0.5584 +v 0.5626 0.5 0.3084 +v -0.3515 0.625 0.5584 +v -0.5624 0.625 0.3084 +v -0.3515 0.5 0.5584 +v -0.5624 0.5 0.3084 +vt 0.4219 0.2188 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.4219 0.2188 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.3125 0.2188 +vt 0.3125 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.3125 0.2188 +vt 0.3125 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.3125 0.2188 +vt 0.3125 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.3125 0.2188 +vt 0.3125 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.4219 0.3281 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.3281 +vt 0.4219 0.3281 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.3281 +vt 0.4219 0.2188 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.4219 0.2188 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.4219 0.3281 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.3281 +vt 0.4219 0.3281 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.3281 +vt 0.5938 0.375 +vt 0.5313 0.375 +vt 0.5313 0.3438 +vt 0.5938 0.3438 +vt 0.5313 0.3438 +vt 0.5938 0.3438 +vt 0.5938 0.375 +vt 0.5313 0.375 +vt 0.5938 0.3594 +vt 0.5313 0.3594 +vt 0.5313 0.3438 +vt 0.5938 0.3438 +vt 0.5938 0.375 +vt 0.5313 0.375 +vt 0.5313 0.3594 +vt 0.5938 0.3594 +vt 0.5625 0.3594 +vt 0.5313 0.3594 +vt 0.5313 0.3438 +vt 0.5625 0.3438 +vt 0.4219 0.2188 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.4219 0.2188 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.3125 0.2188 +vt 0.3125 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.3125 0.2188 +vt 0.3125 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.3125 0.2188 +vt 0.3125 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.3125 0.2188 +vt 0.3125 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.4219 0.3281 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.3281 +vt 0.4219 0.3281 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.3281 +vt 0.4219 0.2188 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.4219 0.2188 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.2188 +vt 0.4219 0.3281 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.3281 +vt 0.4219 0.3281 +vt 0.4219 0.3438 +vt 0.2969 0.3438 +vt 0.2969 0.3281 +vt 0.5938 0.375 +vt 0.5313 0.375 +vt 0.5313 0.3438 +vt 0.5938 0.3438 +vt 0.5313 0.3438 +vt 0.5938 0.3438 +vt 0.5938 0.375 +vt 0.5313 0.375 +vt 0.5938 0.3594 +vt 0.5313 0.3594 +vt 0.5313 0.3438 +vt 0.5938 0.3438 +vt 0.5938 0.375 +vt 0.5313 0.375 +vt 0.5313 0.3594 +vt 0.5938 0.3594 +vt 0.5625 0.3594 +vt 0.5313 0.3594 +vt 0.5313 0.3438 +vt 0.5625 0.3438 +vt 0 0.8594 +vt 0 1 +vt 0.1875 1 +vt 0.1875 0.8594 +vt 0.375 0.8594 +vt 0.375 1 +vt 0.1875 1 +vt 0.1875 0.8594 +vt 0.1875 1 +vt 0 1 +vt 0 0.9844 +vt 0.1875 0.9844 +vt 0.375 0.8594 +vt 0.375 1 +vt 0.3594 1 +vt 0.3594 0.8594 +vt 0.2031 0.8594 +vt 0.2031 1 +vt 0.1875 1 +vt 0.1875 0.8594 +vt 0 0.8125 +vt 0 0.9219 +vt 0.1875 0.9219 +vt 0.1875 0.8125 +vt 0.375 0.7656 +vt 0.375 0.875 +vt 0.1875 0.875 +vt 0.1875 0.7656 +vt 0.0156 0.8125 +vt 0.0156 1 +vt 0 1 +vt 0 0.8125 +vt 0.375 0.75 +vt 0.375 0.8594 +vt 0.3594 0.8594 +vt 0.3594 0.75 +vt 0.2031 0.7656 +vt 0.2031 0.875 +vt 0.1875 0.875 +vt 0.1875 0.7656 +vt 0.1875 0.6957 +vt 0.1875 0.7656 +vt 0.375 0.7656 +vt 0.375 0.6957 +vt 0.375 0.6957 +vt 0.375 0.7656 +vt 0.1875 0.7656 +vt 0.1875 0.6957 +vt 0.375 0.7031 +vt 0.1875 0.7031 +vt 0.1875 0.6875 +vt 0.375 0.6875 +vt 0.375 0.6875 +vt 0.375 0.75 +vt 0.3594 0.75 +vt 0.3594 0.6875 +vt 0.2031 0.6875 +vt 0.2031 0.7656 +vt 0.1875 0.7656 +vt 0.1875 0.6875 +vt 0 0.8125 +vt 0 0.9219 +vt 0.1875 0.9219 +vt 0.1875 0.8125 +vt 0.1875 0.7656 +vt 0.1875 0.875 +vt 0 0.875 +vt 0 0.7656 +vt 0.0156 0.8125 +vt 0.0156 1 +vt 0 1 +vt 0 0.8125 +vt 0.1875 0.75 +vt 0.1875 0.8594 +vt 0.1719 0.8594 +vt 0.1719 0.75 +vt 0.0156 0.7188 +vt 0.0156 0.8281 +vt 0 0.8281 +vt 0 0.7188 +vt 0.0469 0.6957 +vt 0 0.7656 +vt 0.1875 0.7656 +vt 0.1875 0.6957 +vt 0.1875 0.6957 +vt 0.1875 0.7656 +vt 0 0.7656 +vt 0.0469 0.6957 +vt 0.0156 0.8438 +vt 0.0156 0.9688 +vt 0 0.9688 +vt 0 0.8438 +vt 0.1875 0.6875 +vt 0.1875 0.75 +vt 0.1719 0.75 +vt 0.1719 0.6875 +vt 0.0156 0.7188 +vt 0.0156 0.8125 +vt 0 0.8125 +vt 0 0.7188 +vt 0 0.8594 +vt 0 1 +vt 0.1875 1 +vt 0.1875 0.8594 +vt 0.1875 0.8594 +vt 0.1875 1 +vt 0 1 +vt 0 0.8594 +vt 0.1875 1 +vt 0 1 +vt 0 0.9844 +vt 0.1875 0.9844 +vt 0.1875 0.8594 +vt 0.1875 1 +vt 0.1719 1 +vt 0.1719 0.8594 +vt 0.0156 0.8594 +vt 0.0156 1 +vt 0 1 +vt 0 0.8594 +vt 0.0156 0.8125 +vt 0.0156 1 +vt 0 1 +vt 0 0.8125 +vt 0.0156 0.8125 +vt 0.0156 1 +vt 0 1 +vt 0 0.8125 +vt 0.1875 0.9844 +vt 0.1875 1 +vt 0 1 +vt 0 0.9844 +vt 0.4375 0 +vt 0.4375 0.1875 +vt 0.25 0.1875 +vt 0.25 0 +vt 0.4375 0 +vt 0.4375 0.1875 +vt 0.25 0.1875 +vt 0.25 0 +vt 0.7031 0.8125 +vt 0.7031 0.9063 +vt 0.6094 0.9063 +vt 0.6094 0.8125 +vt 0.7031 0.8125 +vt 0.7031 0.9063 +vt 0.6094 0.9063 +vt 0.6094 0.8125 +vt 0.6875 0.9063 +vt 0.6875 1 +vt 0.625 1 +vt 0.625 0.9063 +vt 0.6875 0.9063 +vt 0.6875 1 +vt 0.625 1 +vt 0.625 0.9063 +vt 0.6875 0.9063 +vt 0.6875 1 +vt 0.625 1 +vt 0.625 0.9063 +vt 0.9531 0.9688 +vt 0.9531 1 +vt 0.7969 1 +vt 0.7969 0.9688 +vt 0.9531 0.9688 +vt 0.9531 1 +vt 0.7969 1 +vt 0.7969 0.9688 +vt 0.7188 0.7656 +vt 0.8594 0.7656 +vt 0.8594 0.9219 +vt 0.7188 0.9219 +vt 0.7188 0.9219 +vt 0.8594 0.9219 +vt 0.8594 0.7656 +vt 0.7188 0.7656 +vt 0 0.9688 +vt 0.1406 0.9688 +vt 0.1406 1 +vt 0 1 +vt 0.2813 1 +vt 0.1406 1 +vt 0.1406 0.9688 +vt 0.2813 0.9688 +vt 1 0.9219 +vt 0.8594 0.9219 +vt 0.8594 0.7656 +vt 1 0.7656 +vt 0.2813 1 +vt 0.1406 1 +vt 0.1406 0.9688 +vt 0.2813 0.9688 +vt 1 0.7656 +vt 0.8594 0.7656 +vt 0.8594 0.9219 +vt 1 0.9219 +vt 0 0.9688 +vt 0.1406 0.9688 +vt 0.1406 1 +vt 0 1 +vt 0.875 1 +vt 0.7969 1 +vt 0.7969 0.9688 +vt 0.875 0.9688 +vt 0.8906 0.9688 +vt 0.8906 1 +vt 0.8125 1 +vt 0.8125 0.9688 +vt 0.7715 0.9688 +vt 0.9473 0.9688 +vt 1 0.9063 +vt 0.7188 0.9063 +vt 1 0.9063 +vt 0.9473 0.9688 +vt 0.7715 0.9688 +vt 0.7188 0.9063 +vt 0.9844 0.9688 +vt 0.9844 1 +vt 0.8125 1 +vt 0.8125 0.9688 +vt 0.25 1 +vt 0 1 +vt 0 0.875 +vt 0.25 0.875 +vt 0.8594 1 +vt 0.7813 1 +vt 0.7813 0.9688 +vt 0.8594 0.9688 +vt 1 0.9688 +vt 1 1 +vt 0.9219 1 +vt 0.9219 0.9688 +vt 0.7715 0.6875 +vt 0.9473 0.6875 +vt 1 0.75 +vt 0.7188 0.75 +vt 1 0.75 +vt 0.9473 0.6875 +vt 0.7715 0.6875 +vt 0.7188 0.75 +vt 0.9531 0.9688 +vt 0.9531 1 +vt 0.7813 1 +vt 0.7813 0.9688 +vt 0.25 1 +vt 0 1 +vt 0 0.875 +vt 0.25 0.875 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 0.91 -0.41 0 +vn -0.91 0.41 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0.92 0.39 0 +vn -0.92 -0.39 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0.89 0.45 0 +vn -0.89 -0.45 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0.92 0.39 0 +vn -0.92 -0.39 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0.89 0.45 0 +vn -0.89 -0.45 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 -0.6 -0.8 +vn 0.91 -0.41 0 +vn -0.91 0.41 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 1 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 0 -1 +vn -0.76 0 -0.64 +vn 0.76 0 -0.64 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0.76 0 0.64 +vn -0.76 0 0.64 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +usemtl anti_aircraft_gun_painted +f 228/573/144 226/574/144 225/575/144 227/576/144 +f 231/577/145 229/578/145 230/579/145 232/580/145 +f 225/581/146 226/582/146 230/583/146 229/584/146 +f 228/585/147 227/586/147 231/587/147 232/588/147 +f 227/589/148 225/590/148 229/591/148 231/592/148 +f 232/593/149 230/594/149 226/595/149 228/596/149 +f 236/597/150 234/598/150 233/599/150 235/600/150 +f 239/601/151 237/602/151 238/603/151 240/604/151 +f 233/605/152 234/606/152 238/607/152 237/608/152 +f 236/609/153 235/610/153 239/611/153 240/612/153 +f 235/613/154 233/614/154 237/615/154 239/616/154 +f 240/617/155 238/618/155 234/619/155 236/620/155 +f 244/621/156 242/622/156 241/623/156 243/624/156 +f 247/625/157 245/626/157 246/627/157 248/628/157 +f 243/629/158 241/630/158 245/631/158 247/632/158 +f 248/633/159 246/634/159 242/635/159 244/636/159 +f 244/637/160 243/638/160 247/639/160 248/640/160 +f 252/641/161 250/642/161 249/643/161 251/644/161 +f 255/645/162 253/646/162 254/647/162 256/648/162 +f 249/649/163 250/650/163 254/651/163 253/652/163 +f 252/653/164 251/654/164 255/655/164 256/656/164 +f 251/657/165 249/658/165 253/659/165 255/660/165 +f 256/661/166 254/662/166 250/663/166 252/664/166 +f 260/665/167 258/666/167 257/667/167 259/668/167 +f 263/669/168 261/670/168 262/671/168 264/672/168 +f 257/673/169 258/674/169 262/675/169 261/676/169 +f 260/677/170 259/678/170 263/679/170 264/680/170 +f 259/681/171 257/682/171 261/683/171 263/684/171 +f 264/685/172 262/686/172 258/687/172 260/688/172 +f 268/689/173 266/690/173 265/691/173 267/692/173 +f 271/693/174 269/694/174 270/695/174 272/696/174 +f 267/697/175 265/698/175 269/699/175 271/700/175 +f 272/701/176 270/702/176 266/703/176 268/704/176 +f 268/705/177 267/706/177 271/707/177 272/708/177 +usemtl anti_aircraft_gun +f 276/709/178 274/710/178 273/711/178 275/712/178 +usemtl anti_aircraft_gun_painted +f 279/713/179 277/714/179 278/715/179 280/716/179 +f 273/717/180 274/718/180 278/719/180 277/720/180 +f 275/721/181 273/722/181 277/723/181 279/724/181 +f 280/725/182 278/726/182 274/727/182 276/728/182 +usemtl anti_aircraft_gun +f 284/729/183 282/730/183 281/731/183 283/732/183 +usemtl anti_aircraft_gun_painted +f 287/733/184 285/734/184 286/735/184 288/736/184 +f 284/737/185 283/738/185 287/739/185 288/740/185 +f 283/741/186 281/742/186 285/743/186 287/744/186 +f 288/745/187 286/746/187 282/747/187 284/748/187 +usemtl anti_aircraft_gun +f 292/749/188 290/750/188 289/751/188 291/752/188 +usemtl anti_aircraft_gun_painted +f 295/753/189 293/754/189 294/755/189 296/756/189 +f 292/757/190 291/758/190 295/759/190 296/760/190 +f 291/761/191 289/762/191 293/763/191 295/764/191 +f 296/765/192 294/766/192 290/767/192 292/768/192 +usemtl anti_aircraft_gun +f 300/769/193 298/770/193 297/771/193 299/772/193 +usemtl anti_aircraft_gun_painted +f 303/773/194 301/774/194 302/775/194 304/776/194 +f 300/777/195 299/778/195 303/779/195 304/780/195 +f 299/781/196 297/782/196 301/783/196 303/784/196 +f 304/785/197 302/786/197 298/787/197 300/788/197 +usemtl anti_aircraft_gun +f 308/789/198 306/790/198 305/791/198 307/792/198 +usemtl anti_aircraft_gun_painted +f 311/793/199 309/794/199 310/795/199 312/796/199 +f 308/797/200 307/798/200 311/799/200 312/800/200 +f 307/801/201 305/802/201 309/803/201 311/804/201 +f 312/805/202 310/806/202 306/807/202 308/808/202 +usemtl anti_aircraft_gun +f 316/809/203 314/810/203 313/811/203 315/812/203 +usemtl anti_aircraft_gun_painted +f 319/813/204 317/814/204 318/815/204 320/816/204 +f 313/817/205 314/818/205 318/819/205 317/820/205 +f 315/821/206 313/822/206 317/823/206 319/824/206 +f 320/825/207 318/826/207 314/827/207 316/828/207 +usemtl anti_aircraft_gun +f 324/829/208 322/830/208 321/831/208 323/832/208 +usemtl anti_aircraft_gun_painted +f 327/833/209 325/834/209 326/835/209 328/836/209 +usemtl anti_aircraft_gun +f 321/837/210 322/838/210 326/839/210 325/840/210 +f 323/841/211 321/842/211 325/843/211 327/844/211 +f 328/845/212 326/846/212 322/847/212 324/848/212 +f 332/849/213 330/850/213 329/851/213 331/852/213 +f 335/853/214 333/854/214 334/855/214 336/856/214 +f 329/857/215 330/858/215 334/859/215 333/860/215 +f 331/861/216 329/862/216 333/863/216 335/864/216 +f 336/865/217 334/866/217 330/867/217 332/868/217 +usemtl anti_aircraft_gun_painted +f 340/869/218 338/870/218 337/871/218 339/872/218 +f 343/873/219 341/874/219 342/875/219 344/876/219 +usemtl anti_aircraft_gun +f 341/877/220 346/878/220 345/879/220 342/880/220 +usemtl anti_aircraft_gun_painted +f 344/881/221 348/882/221 347/883/221 343/884/221 +f 343/885/222 347/886/222 346/887/222 341/888/222 +f 342/889/223 345/890/223 348/891/223 344/892/223 +usemtl anti_aircraft_gun +f 338/893/224 345/894/224 346/895/224 337/896/224 +usemtl anti_aircraft_gun_painted +f 337/897/225 346/898/225 347/899/225 339/900/225 +f 339/901/226 347/902/226 348/903/226 340/904/226 +f 340/905/227 348/906/227 345/907/227 338/908/227 +f 350/909/228 349/910/228 351/911/228 352/912/228 +f 355/913/229 353/914/229 354/915/229 356/916/229 +usemtl anti_aircraft_gun +f 353/917/230 349/918/230 350/919/230 354/920/230 +usemtl anti_aircraft_gun_painted +f 352/921/231 351/922/231 355/923/231 356/924/231 +f 351/925/232 349/926/232 353/927/232 355/928/232 +f 354/929/233 350/930/233 352/931/233 356/932/233 +f 358/933/234 357/934/234 359/935/234 360/936/234 +f 363/937/235 361/938/235 362/939/235 364/940/235 +usemtl anti_aircraft_gun +f 361/941/236 357/942/236 358/943/236 362/944/236 +usemtl anti_aircraft_gun_painted +f 360/945/237 359/946/237 363/947/237 364/948/237 +f 359/949/238 357/950/238 361/951/238 363/952/238 +f 362/953/239 358/954/239 360/955/239 364/956/239 +o gun +v -0.8437 1.1875 0.0272 +v -0.9687 1.1875 0.0272 +v -0.6562 0.6875 0.0272 +v -0.7812 0.6875 0.0272 +v -0.8437 1.1875 0.3397 +v -0.9687 1.1875 0.3397 +v -0.6562 0.6875 0.3397 +v -0.7812 0.6875 0.3397 +v -0.8437 1.1875 -0.3478 +v -0.9687 1.1875 -0.3478 +v -0.6562 0.6875 -0.3478 +v -0.7812 0.6875 -0.3478 +v -0.8437 1.1875 -0.0353 +v -0.9687 1.1875 -0.0353 +v -0.6562 0.6875 -0.0353 +v -0.7812 0.6875 -0.0353 +v -0.5937 1.6875 -0.3478 +v -0.7187 1.6875 -0.3478 +v -0.8437 1.1875 -0.3478 +v -0.9687 1.1875 -0.3478 +v -0.5937 1.6875 -0.0353 +v -0.7187 1.6875 -0.0353 +v -0.8437 1.1875 -0.0353 +v -0.9687 1.1875 -0.0353 +v -0.5937 1.6875 0.0272 +v -0.7187 1.6875 0.0272 +v -0.8437 1.1875 0.0272 +v -0.9687 1.1875 0.0272 +v -0.5937 1.6875 0.3397 +v -0.7187 1.6875 0.3397 +v -0.8437 1.1875 0.3397 +v -0.9687 1.1875 0.3397 +v -0.1812 1.3125 -0.0666 +v -0.1812 1.3125 -0.3166 +v -0.1812 1.25 -0.0666 +v -0.1812 1.25 -0.3166 +v -0.6812 1.3125 -0.0666 +v -0.6812 1.3125 -0.3166 +v -0.6812 1.25 -0.0666 +v -0.6812 1.25 -0.3166 +v -0.4312 1.3125 -0.3166 +v -0.4312 1.3125 -0.0666 +v -0.4312 1.25 -0.0666 +v -0.4312 1.25 -0.3166 +v -0.1406 1.25 -0.3469 +v -0.7656 1.25 -0.3469 +v -0.1406 1 -0.3469 +v -0.7656 1 -0.3469 +v -0.1406 1.25 -0.0344 +v -0.7656 1.25 -0.0344 +v -0.1406 1 -0.0344 +v -0.7656 1 -0.0344 +v -0.1406 1.25 -0.2219 +v -0.1406 1 -0.2219 +v -0.7656 1 -0.2219 +v -0.7656 1.25 -0.2219 +v -0.7656 1.2188 -0.2844 +v -1.2656 1.2188 -0.2844 +v -0.7656 1.0313 -0.2844 +v -1.2656 1.0313 -0.2844 +v -0.7656 1.2188 -0.0969 +v -1.2656 1.2188 -0.0969 +v -0.7656 1.0313 -0.0969 +v -1.2656 1.0313 -0.0969 +v -1.3281 1.1875 -0.1281 +v -1.2656 1.2188 -0.0969 +v -1.3281 1.0625 -0.1281 +v -1.2656 1.0313 -0.0969 +v -1.3281 1.1875 -0.2531 +v -1.2656 1.2188 -0.2844 +v -1.3281 1.0625 -0.2531 +v -1.2656 1.0313 -0.2844 +v -0.1812 1.3125 0.3084 +v -0.1812 1.3125 0.0584 +v -0.1812 1.25 0.3084 +v -0.1812 1.25 0.0584 +v -0.6812 1.3125 0.3084 +v -0.6812 1.3125 0.0584 +v -0.6812 1.25 0.3084 +v -0.6812 1.25 0.0584 +v -0.4312 1.3125 0.0584 +v -0.4312 1.3125 0.3084 +v -0.4312 1.25 0.3084 +v -0.4312 1.25 0.0584 +v -0.1406 1.25 0.0281 +v -0.7656 1.25 0.0281 +v -0.1406 1 0.0281 +v -0.7656 1 0.0281 +v -0.1406 1.25 0.3406 +v -0.7656 1.25 0.3406 +v -0.1406 1 0.3406 +v -0.7656 1 0.3406 +v -0.1406 1.25 0.1531 +v -0.1406 1 0.1531 +v -0.7656 1 0.1531 +v -0.7656 1.25 0.1531 +v -0.7656 1.2188 0.0906 +v -1.2656 1.2188 0.0906 +v -0.7656 1.0313 0.0906 +v -1.2656 1.0313 0.0906 +v -0.7656 1.2188 0.2781 +v -1.2656 1.2188 0.2781 +v -0.7656 1.0313 0.2781 +v -1.2656 1.0313 0.2781 +v -1.3281 1.1875 0.2469 +v -1.2656 1.2188 0.2781 +v -1.3281 1.0625 0.2469 +v -1.2656 1.0313 0.2781 +v -1.3281 1.1875 0.1219 +v -1.2656 1.2188 0.0906 +v -1.3281 1.0625 0.1219 +v -1.2656 1.0313 0.0906 +vt 0.5938 1 +vt 0.5625 1 +vt 0.5625 0.8594 +vt 0.5938 0.8594 +vt 0.5625 1 +vt 0.5625 0.8594 +vt 0.5313 0.8594 +vt 0.5313 1 +vt 0.4531 0.9688 +vt 0.4531 1 +vt 0.5313 1 +vt 0.5313 0.9688 +vt 0.375 1 +vt 0.375 0.8602 +vt 0.4531 0.8602 +vt 0.4531 1 +vt 0.4531 0.8602 +vt 0.375 0.8602 +vt 0.375 1 +vt 0.4531 1 +vt 0.5938 0.8594 +vt 0.5625 0.8594 +vt 0.5625 1 +vt 0.5938 1 +vt 0.5625 1 +vt 0.5625 0.8594 +vt 0.5313 0.8594 +vt 0.5313 1 +vt 0.4531 0.9688 +vt 0.4531 1 +vt 0.5313 1 +vt 0.5313 0.9688 +vt 0.375 1 +vt 0.375 0.8602 +vt 0.4531 0.8602 +vt 0.4531 1 +vt 0.4531 0.8602 +vt 0.375 0.8602 +vt 0.375 1 +vt 0.4531 1 +vt 0.5938 1 +vt 0.5625 1 +vt 0.5625 0.8594 +vt 0.5938 0.8594 +vt 0.5625 0.8594 +vt 0.5625 1 +vt 0.5313 1 +vt 0.5313 0.8594 +vt 0.5313 0.9688 +vt 0.4531 0.9688 +vt 0.4531 1 +vt 0.5313 1 +vt 0.375 0.8602 +vt 0.375 1 +vt 0.4531 1 +vt 0.4531 0.8602 +vt 0.4531 1 +vt 0.375 1 +vt 0.375 0.8602 +vt 0.4531 0.8602 +vt 0.5938 1 +vt 0.5625 1 +vt 0.5625 0.8594 +vt 0.5938 0.8594 +vt 0.5625 0.8594 +vt 0.5625 1 +vt 0.5313 1 +vt 0.5313 0.8594 +vt 0.5313 0.9688 +vt 0.4531 0.9688 +vt 0.4531 1 +vt 0.5313 1 +vt 0.375 0.8602 +vt 0.375 1 +vt 0.4531 1 +vt 0.4531 0.8602 +vt 0.4531 1 +vt 0.375 1 +vt 0.375 0.8602 +vt 0.4531 0.8602 +vt 0.6094 0.0938 +vt 0.6094 0.125 +vt 0.5469 0.125 +vt 0.5469 0.0938 +vt 0.5625 0.0938 +vt 0.5625 0.125 +vt 0.5 0.125 +vt 0.5 0.0938 +vt 0.4531 0.1094 +vt 0.5156 0.1094 +vt 0.5156 0.1719 +vt 0.4531 0.1719 +vt 0.4531 0.0938 +vt 0.5156 0.0938 +vt 0.5156 0.125 +vt 0.4531 0.125 +vt 0.5625 0.125 +vt 0.5 0.125 +vt 0.5 0.0938 +vt 0.5625 0.0938 +vt 0.6094 0.1719 +vt 0.5469 0.1719 +vt 0.5469 0.1094 +vt 0.6094 0.1094 +vt 0.6094 0.125 +vt 0.5469 0.125 +vt 0.5469 0.0938 +vt 0.6094 0.0938 +vt 0.5156 0.0938 +vt 0.5781 0.0938 +vt 0.5781 0.125 +vt 0.5156 0.125 +vt 0.0781 0.6875 +vt 0.0156 0.6875 +vt 0.0156 0.5313 +vt 0.0781 0.5313 +vt 0.0781 0.6875 +vt 0.0156 0.6875 +vt 0.0156 0.5313 +vt 0.0781 0.5313 +vt 0.0156 0.5313 +vt 0.0625 0.5313 +vt 0.0625 0.6875 +vt 0.0156 0.6875 +vt 0 0.5313 +vt 0.0469 0.5313 +vt 0.0469 0.6875 +vt 0 0.6875 +vt 0 0.4688 +vt 0.0469 0.4688 +vt 0.0469 0.5313 +vt 0 0.5313 +vt 0.125 0.5313 +vt 0.0781 0.5313 +vt 0.0781 0.4688 +vt 0.125 0.4688 +vt 0.125 0.5313 +vt 0.0938 0.5313 +vt 0.0938 0.4688 +vt 0.125 0.4688 +vt 0.0781 0.6875 +vt 0.0469 0.6875 +vt 0.0469 0.5313 +vt 0.0781 0.5313 +vt 0 0.4688 +vt 0.0313 0.4688 +vt 0.0313 0.5313 +vt 0 0.5313 +vt 0.0938 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.5313 +vt 0.0938 0.5313 +vt 0.1563 0.5469 +vt 0.2031 0.5469 +vt 0.2031 0.6719 +vt 0.1563 0.6719 +vt 0.2031 0.6719 +vt 0.1563 0.6719 +vt 0.1563 0.5469 +vt 0.2031 0.5469 +vt 0.2031 0.5469 +vt 0.2031 0.6719 +vt 0.1563 0.6719 +vt 0.1563 0.5469 +vt 0.1563 0.6719 +vt 0.1563 0.5469 +vt 0.2031 0.5469 +vt 0.2031 0.6719 +vt 0.9219 0.1875 +vt 0.9219 0.2344 +vt 0.875 0.2344 +vt 0.875 0.1875 +vt 0.875 0.1875 +vt 0.875 0.2344 +vt 0.8281 0.2344 +vt 0.8281 0.1875 +vt 0.1563 0.5938 +vt 0.1641 0.5781 +vt 0.1953 0.5781 +vt 0.2031 0.5938 +vt 0.1641 0.6094 +vt 0.1953 0.6094 +vt 0.2031 0.625 +vt 0.1563 0.625 +vt 0.1953 0.625 +vt 0.1641 0.625 +vt 0.1563 0.6094 +vt 0.2031 0.6094 +vt 0.2031 0.6075 +vt 0.1953 0.625 +vt 0.1641 0.625 +vt 0.1563 0.6075 +vt 0.1875 0.5938 +vt 0.1875 0.625 +vt 0.1563 0.625 +vt 0.1563 0.5938 +vt 0.2031 0.6406 +vt 0.1563 0.6406 +vt 0.1563 0.5938 +vt 0.2031 0.5938 +vt 0.6094 0.0938 +vt 0.6094 0.125 +vt 0.5469 0.125 +vt 0.5469 0.0938 +vt 0.5625 0.0938 +vt 0.5625 0.125 +vt 0.5 0.125 +vt 0.5 0.0938 +vt 0.4531 0.1094 +vt 0.5156 0.1094 +vt 0.5156 0.1719 +vt 0.4531 0.1719 +vt 0.4531 0.0938 +vt 0.5156 0.0938 +vt 0.5156 0.125 +vt 0.4531 0.125 +vt 0.5625 0.125 +vt 0.5 0.125 +vt 0.5 0.0938 +vt 0.5625 0.0938 +vt 0.6094 0.1719 +vt 0.5469 0.1719 +vt 0.5469 0.1094 +vt 0.6094 0.1094 +vt 0.6094 0.125 +vt 0.5469 0.125 +vt 0.5469 0.0938 +vt 0.6094 0.0938 +vt 0.5156 0.0938 +vt 0.5781 0.0938 +vt 0.5781 0.125 +vt 0.5156 0.125 +vt 0.0781 0.6875 +vt 0.0156 0.6875 +vt 0.0156 0.5313 +vt 0.0781 0.5313 +vt 0.0781 0.6875 +vt 0.0156 0.6875 +vt 0.0156 0.5313 +vt 0.0781 0.5313 +vt 0.0156 0.5313 +vt 0.0625 0.5313 +vt 0.0625 0.6875 +vt 0.0156 0.6875 +vt 0 0.5313 +vt 0.0469 0.5313 +vt 0.0469 0.6875 +vt 0 0.6875 +vt 0 0.4688 +vt 0.0469 0.4688 +vt 0.0469 0.5313 +vt 0 0.5313 +vt 0.125 0.5313 +vt 0.0781 0.5313 +vt 0.0781 0.4688 +vt 0.125 0.4688 +vt 0.125 0.5313 +vt 0.0938 0.5313 +vt 0.0938 0.4688 +vt 0.125 0.4688 +vt 0.0781 0.6875 +vt 0.0469 0.6875 +vt 0.0469 0.5313 +vt 0.0781 0.5313 +vt 0 0.4688 +vt 0.0313 0.4688 +vt 0.0313 0.5313 +vt 0 0.5313 +vt 0.0938 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.5313 +vt 0.0938 0.5313 +vt 0.1563 0.5469 +vt 0.2031 0.5469 +vt 0.2031 0.6719 +vt 0.1563 0.6719 +vt 0.2031 0.6719 +vt 0.1563 0.6719 +vt 0.1563 0.5469 +vt 0.2031 0.5469 +vt 0.2031 0.5469 +vt 0.2031 0.6719 +vt 0.1563 0.6719 +vt 0.1563 0.5469 +vt 0.1563 0.6719 +vt 0.1563 0.5469 +vt 0.2031 0.5469 +vt 0.2031 0.6719 +vt 0.9219 0.1875 +vt 0.9219 0.2344 +vt 0.875 0.2344 +vt 0.875 0.1875 +vt 0.875 0.1875 +vt 0.875 0.2344 +vt 0.8281 0.2344 +vt 0.8281 0.1875 +vt 0.1563 0.5938 +vt 0.1641 0.5781 +vt 0.1953 0.5781 +vt 0.2031 0.5938 +vt 0.1641 0.6094 +vt 0.1953 0.6094 +vt 0.2031 0.625 +vt 0.1563 0.625 +vt 0.1953 0.625 +vt 0.1641 0.625 +vt 0.1563 0.6094 +vt 0.2031 0.6094 +vt 0.2031 0.6075 +vt 0.1953 0.625 +vt 0.1641 0.625 +vt 0.1563 0.6075 +vt 0.1875 0.5938 +vt 0.1875 0.625 +vt 0.1563 0.625 +vt 0.1563 0.5938 +vt 0.2031 0.6406 +vt 0.1563 0.6406 +vt 0.1563 0.5938 +vt 0.2031 0.5938 +vn 0 0 -1 +vn 0 0 1 +vn 0 -1 0 +vn 0.94 0.35 0 +vn -0.94 -0.35 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 -1 0 +vn 0.94 0.35 0 +vn -0.94 -0.35 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0.89 -0.45 0 +vn -0.89 0.45 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0.89 -0.45 0 +vn -0.89 0.45 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 -1 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn -0.45 0 0.89 +vn -0.45 0 -0.89 +vn -0.45 0.89 0 +vn -0.45 -0.89 0 +vn -1 0 0 +vn 1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 -1 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn -0.45 0 0.89 +vn -0.45 0 -0.89 +vn -0.45 0.89 0 +vn -0.45 -0.89 0 +vn -1 0 0 +vn 1 0 0 +usemtl anti_aircraft_gun_painted +f 366/957/240 365/958/240 367/959/240 368/960/240 +f 371/961/241 369/962/241 370/963/241 372/964/241 +f 368/965/242 367/966/242 371/967/242 372/968/242 +usemtl anti_aircraft_gun +f 367/969/243 365/970/243 369/971/243 371/972/243 +usemtl anti_aircraft_gun_painted +f 370/973/244 366/974/244 368/975/244 372/976/244 +f 374/977/245 373/978/245 375/979/245 376/980/245 +f 379/981/246 377/982/246 378/983/246 380/984/246 +f 376/985/247 375/986/247 379/987/247 380/988/247 +usemtl anti_aircraft_gun +f 375/989/248 373/990/248 377/991/248 379/992/248 +usemtl anti_aircraft_gun_painted +f 378/993/249 374/994/249 376/995/249 380/996/249 +f 382/997/250 381/998/250 383/999/250 384/1000/250 +f 387/1001/251 385/1002/251 386/1003/251 388/1004/251 +f 385/1005/252 381/1006/252 382/1007/252 386/1008/252 +usemtl anti_aircraft_gun +f 383/1009/253 381/1010/253 385/1011/253 387/1012/253 +usemtl anti_aircraft_gun_painted +f 386/1013/254 382/1014/254 384/1015/254 388/1016/254 +f 390/1017/255 389/1018/255 391/1019/255 392/1020/255 +f 395/1021/256 393/1022/256 394/1023/256 396/1024/256 +f 393/1025/257 389/1026/257 390/1027/257 394/1028/257 +usemtl anti_aircraft_gun +f 391/1029/258 389/1030/258 393/1031/258 395/1032/258 +usemtl anti_aircraft_gun_painted +f 394/1033/259 390/1034/259 392/1035/259 396/1036/259 +f 400/1037/260 398/1038/260 397/1039/260 399/1040/260 +f 403/1041/261 401/1042/261 402/1043/261 404/1044/261 +f 401/1045/262 406/1046/262 405/1047/262 402/1048/262 +f 403/1049/263 407/1050/263 406/1051/263 401/1052/263 +f 402/1053/264 405/1054/264 408/1055/264 404/1056/264 +f 398/1057/265 405/1058/265 406/1059/265 397/1060/265 +f 397/1061/266 406/1062/266 407/1063/266 399/1064/266 +f 400/1065/267 408/1066/267 405/1067/267 398/1068/267 +f 412/1069/268 410/1070/268 409/1071/268 411/1072/268 +f 415/1073/269 413/1074/269 414/1075/269 416/1076/269 +f 413/1077/270 417/1078/270 420/1079/270 414/1080/270 +f 416/1081/271 419/1082/271 418/1083/271 415/1084/271 +f 415/1085/272 418/1086/272 417/1087/272 413/1088/272 +f 414/1089/273 420/1090/273 419/1091/273 416/1092/273 +f 409/1093/274 417/1094/274 418/1095/274 411/1096/274 +f 411/1097/275 418/1098/275 419/1099/275 412/1100/275 +f 412/1101/276 419/1102/276 420/1103/276 410/1104/276 +f 410/1105/277 420/1106/277 417/1107/277 409/1108/277 +f 424/1109/278 422/1110/278 421/1111/278 423/1112/278 +f 427/1113/279 425/1114/279 426/1115/279 428/1116/279 +f 421/1117/280 422/1118/280 426/1119/280 425/1120/280 +f 424/1121/281 423/1122/281 427/1123/281 428/1124/281 +f 423/1125/282 421/1126/282 425/1127/282 427/1128/282 +f 428/1129/283 426/1130/283 422/1131/283 424/1132/283 +f 430/1133/284 429/1134/284 431/1135/284 432/1136/284 +f 435/1137/285 433/1138/285 434/1139/285 436/1140/285 +f 433/1141/286 429/1142/286 430/1143/286 434/1144/286 +f 432/1145/287 431/1146/287 435/1147/287 436/1148/287 +f 431/1149/288 429/1150/288 433/1151/288 435/1152/288 +f 434/1153/289 430/1154/289 432/1155/289 436/1156/289 +f 440/1157/290 438/1158/290 437/1159/290 439/1160/290 +f 443/1161/291 441/1162/291 442/1163/291 444/1164/291 +f 441/1165/292 446/1166/292 445/1167/292 442/1168/292 +f 443/1169/293 447/1170/293 446/1171/293 441/1172/293 +f 442/1173/294 445/1174/294 448/1175/294 444/1176/294 +f 438/1177/295 445/1178/295 446/1179/295 437/1180/295 +f 437/1181/296 446/1182/296 447/1183/296 439/1184/296 +f 440/1185/297 448/1186/297 445/1187/297 438/1188/297 +f 452/1189/298 450/1190/298 449/1191/298 451/1192/298 +f 455/1193/299 453/1194/299 454/1195/299 456/1196/299 +f 453/1197/300 457/1198/300 460/1199/300 454/1200/300 +f 456/1201/301 459/1202/301 458/1203/301 455/1204/301 +f 455/1205/302 458/1206/302 457/1207/302 453/1208/302 +f 454/1209/303 460/1210/303 459/1211/303 456/1212/303 +f 449/1213/304 457/1214/304 458/1215/304 451/1216/304 +f 451/1217/305 458/1218/305 459/1219/305 452/1220/305 +f 452/1221/306 459/1222/306 460/1223/306 450/1224/306 +f 450/1225/307 460/1226/307 457/1227/307 449/1228/307 +f 464/1229/308 462/1230/308 461/1231/308 463/1232/308 +f 467/1233/309 465/1234/309 466/1235/309 468/1236/309 +f 461/1237/310 462/1238/310 466/1239/310 465/1240/310 +f 464/1241/311 463/1242/311 467/1243/311 468/1244/311 +f 463/1245/312 461/1246/312 465/1247/312 467/1248/312 +f 468/1249/313 466/1250/313 462/1251/313 464/1252/313 +f 470/1253/314 469/1254/314 471/1255/314 472/1256/314 +f 475/1257/315 473/1258/315 474/1259/315 476/1260/315 +f 473/1261/316 469/1262/316 470/1263/316 474/1264/316 +f 472/1265/317 471/1266/317 475/1267/317 476/1268/317 +f 471/1269/318 469/1270/318 473/1271/318 475/1272/318 +f 474/1273/319 470/1274/319 472/1275/319 476/1276/319 +o cannon2 +v -1.3281 1.1875 -0.2531 +v -2.3281 1.1875 -0.2531 +v -1.3281 1.0625 -0.2531 +v -2.3281 1.0625 -0.2531 +v -1.3281 1.1875 -0.1281 +v -2.3281 1.1875 -0.1281 +v -1.3281 1.0625 -0.1281 +v -2.3281 1.0625 -0.1281 +v -2.3906 1.0313 -0.0969 +v -2.5156 1.0313 -0.0969 +v -2.3906 1.2188 -0.0969 +v -2.5156 1.2188 -0.0969 +v -2.3906 1.0313 -0.2844 +v -2.5156 1.0313 -0.2844 +v -2.3906 1.2188 -0.2844 +v -2.5156 1.2188 -0.2844 +v -2.3281 1.0625 -0.1281 +v -2.3906 1.0313 -0.0969 +v -2.3281 1.1875 -0.1281 +v -2.3906 1.2188 -0.0969 +v -2.3281 1.0625 -0.2531 +v -2.3906 1.0313 -0.2844 +v -2.3281 1.1875 -0.2531 +v -2.3906 1.2188 -0.2844 +vt 0.25 0.4375 +vt 0.25 0.4688 +vt 0 0.4688 +vt 0 0.4375 +vt 0 0.4688 +vt 0 0.4375 +vt 0.25 0.4375 +vt 0.25 0.4688 +vt 0 0.4375 +vt 0.25 0.4375 +vt 0.25 0.4688 +vt 0 0.4688 +vt 0.25 0.4688 +vt 0 0.4688 +vt 0 0.4375 +vt 0.25 0.4375 +vt 0.6563 0.125 +vt 0.6563 0.1563 +vt 0.625 0.1563 +vt 0.625 0.125 +vt 0.2969 0.4375 +vt 0.2969 0.4688 +vt 0.2656 0.4688 +vt 0.2656 0.4375 +vt 0.2031 0.5938 +vt 0.1563 0.5938 +vt 0.1563 0.5625 +vt 0.2031 0.5625 +vt 0.1563 0.5625 +vt 0.2031 0.5625 +vt 0.2031 0.5938 +vt 0.1563 0.5938 +vt 0.1563 0.5938 +vt 0.1563 0.5625 +vt 0.2031 0.5625 +vt 0.2031 0.5938 +vt 0.2031 0.5625 +vt 0.2031 0.5938 +vt 0.1563 0.5938 +vt 0.1563 0.5625 +vt 0.25 0.5313 +vt 0.25 0.5781 +vt 0.2031 0.5781 +vt 0.2031 0.5313 +vt 0.2031 0.5156 +vt 0.2031 0.5625 +vt 0.1563 0.5625 +vt 0.1563 0.5156 +vt 0.1563 0.6094 +vt 0.1641 0.5938 +vt 0.1953 0.5938 +vt 0.2031 0.6094 +vt 0.1641 0.625 +vt 0.1953 0.625 +vt 0.2031 0.6406 +vt 0.1563 0.6406 +vt 0.1953 0.6406 +vt 0.1641 0.6406 +vt 0.1563 0.625 +vt 0.2031 0.625 +vt 0.2031 0.6232 +vt 0.1953 0.6406 +vt 0.1641 0.6406 +vt 0.1563 0.6232 +vt 0.1875 0.6094 +vt 0.1875 0.6406 +vt 0.1563 0.6406 +vt 0.1563 0.6094 +vt 0.2031 0.6563 +vt 0.1563 0.6563 +vt 0.1563 0.6094 +vt 0.2031 0.6094 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0.45 0 0.89 +vn 0.45 0 -0.89 +vn 0.45 -0.89 0 +vn 0.45 0.89 0 +vn 1 0 0 +vn -1 0 0 +usemtl anti_aircraft_gun_painted +f 480/1277/320 478/1278/320 477/1279/320 479/1280/320 +f 483/1281/321 481/1282/321 482/1283/321 484/1284/321 +f 477/1285/322 478/1286/322 482/1287/322 481/1288/322 +f 480/1289/323 479/1290/323 483/1291/323 484/1292/323 +f 479/1293/324 477/1294/324 481/1295/324 483/1296/324 +f 484/1297/325 482/1298/325 478/1299/325 480/1300/325 +f 488/1301/326 486/1302/326 485/1303/326 487/1304/326 +f 491/1305/327 489/1306/327 490/1307/327 492/1308/327 +f 485/1309/328 486/1310/328 490/1311/328 489/1312/328 +f 488/1313/329 487/1314/329 491/1315/329 492/1316/329 +f 487/1317/330 485/1318/330 489/1319/330 491/1320/330 +f 492/1321/331 490/1322/331 486/1323/331 488/1324/331 +f 494/1325/332 493/1326/332 495/1327/332 496/1328/332 +f 499/1329/333 497/1330/333 498/1331/333 500/1332/333 +f 497/1333/334 493/1334/334 494/1335/334 498/1336/334 +f 496/1337/335 495/1338/335 499/1339/335 500/1340/335 +f 495/1341/336 493/1342/336 497/1343/336 499/1344/336 +f 498/1345/337 494/1346/337 496/1347/337 500/1348/337 +o cannon1 +v -1.3281 1.1875 0.1219 +v -2.3281 1.1875 0.1219 +v -1.3281 1.0625 0.1219 +v -2.3281 1.0625 0.1219 +v -1.3281 1.1875 0.2469 +v -2.3281 1.1875 0.2469 +v -1.3281 1.0625 0.2469 +v -2.3281 1.0625 0.2469 +v -2.3906 1.0313 0.2781 +v -2.5156 1.0313 0.2781 +v -2.3906 1.2188 0.2781 +v -2.5156 1.2188 0.2781 +v -2.3906 1.0313 0.0906 +v -2.5156 1.0313 0.0906 +v -2.3906 1.2188 0.0906 +v -2.5156 1.2188 0.0906 +v -2.3281 1.0625 0.2469 +v -2.3906 1.0313 0.2781 +v -2.3281 1.1875 0.2469 +v -2.3906 1.2188 0.2781 +v -2.3281 1.0625 0.1219 +v -2.3906 1.0313 0.0906 +v -2.3281 1.1875 0.1219 +v -2.3906 1.2188 0.0906 +vt 0.25 0.4375 +vt 0.25 0.4688 +vt 0 0.4688 +vt 0 0.4375 +vt 0 0.4688 +vt 0 0.4375 +vt 0.25 0.4375 +vt 0.25 0.4688 +vt 0 0.4375 +vt 0.25 0.4375 +vt 0.25 0.4688 +vt 0 0.4688 +vt 0.25 0.4688 +vt 0 0.4688 +vt 0 0.4375 +vt 0.25 0.4375 +vt 0.6563 0.125 +vt 0.6563 0.1563 +vt 0.625 0.1563 +vt 0.625 0.125 +vt 0.2969 0.4375 +vt 0.2969 0.4688 +vt 0.2656 0.4688 +vt 0.2656 0.4375 +vt 0.2031 0.5938 +vt 0.1563 0.5938 +vt 0.1563 0.5625 +vt 0.2031 0.5625 +vt 0.1563 0.5625 +vt 0.2031 0.5625 +vt 0.2031 0.5938 +vt 0.1563 0.5938 +vt 0.1563 0.5938 +vt 0.1563 0.5625 +vt 0.2031 0.5625 +vt 0.2031 0.5938 +vt 0.2031 0.5625 +vt 0.2031 0.5938 +vt 0.1563 0.5938 +vt 0.1563 0.5625 +vt 0.25 0.5313 +vt 0.25 0.5781 +vt 0.2031 0.5781 +vt 0.2031 0.5313 +vt 0.2031 0.5156 +vt 0.2031 0.5625 +vt 0.1563 0.5625 +vt 0.1563 0.5156 +vt 0.1563 0.6094 +vt 0.1641 0.5938 +vt 0.1953 0.5938 +vt 0.2031 0.6094 +vt 0.1641 0.625 +vt 0.1953 0.625 +vt 0.2031 0.6406 +vt 0.1563 0.6406 +vt 0.1953 0.6406 +vt 0.1641 0.6406 +vt 0.1563 0.625 +vt 0.2031 0.625 +vt 0.2031 0.6232 +vt 0.1953 0.6406 +vt 0.1641 0.6406 +vt 0.1563 0.6232 +vt 0.1875 0.6094 +vt 0.1875 0.6406 +vt 0.1563 0.6406 +vt 0.1563 0.6094 +vt 0.2031 0.6563 +vt 0.1563 0.6563 +vt 0.1563 0.6094 +vt 0.2031 0.6094 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0.45 0 0.89 +vn 0.45 0 -0.89 +vn 0.45 -0.89 0 +vn 0.45 0.89 0 +vn 1 0 0 +vn -1 0 0 +usemtl anti_aircraft_gun_painted +f 504/1349/338 502/1350/338 501/1351/338 503/1352/338 +f 507/1353/339 505/1354/339 506/1355/339 508/1356/339 +f 501/1357/340 502/1358/340 506/1359/340 505/1360/340 +f 504/1361/341 503/1362/341 507/1363/341 508/1364/341 +f 503/1365/342 501/1366/342 505/1367/342 507/1368/342 +f 508/1369/343 506/1370/343 502/1371/343 504/1372/343 +f 512/1373/344 510/1374/344 509/1375/344 511/1376/344 +f 515/1377/345 513/1378/345 514/1379/345 516/1380/345 +f 509/1381/346 510/1382/346 514/1383/346 513/1384/346 +f 512/1385/347 511/1386/347 515/1387/347 516/1388/347 +f 511/1389/348 509/1390/348 513/1391/348 515/1392/348 +f 516/1393/349 514/1394/349 510/1395/349 512/1396/349 +f 518/1397/350 517/1398/350 519/1399/350 520/1400/350 +f 523/1401/351 521/1402/351 522/1403/351 524/1404/351 +f 521/1405/352 517/1406/352 518/1407/352 522/1408/352 +f 520/1409/353 519/1410/353 523/1411/353 524/1412/353 +f 519/1413/354 517/1414/354 521/1415/354 523/1416/354 +f 522/1417/355 518/1418/355 520/1419/355 524/1420/355 +o magazine +v -0.2437 1.749 0.2448 +v -0.4937 1.749 0.2448 +v -0.2437 1.749 0.1198 +v -0.4937 1.749 0.1198 +v -0.2437 1.3115 0.2448 +v -0.4937 1.3115 0.2448 +v -0.2437 1.3115 0.1198 +v -0.4937 1.3115 0.1198 +v -0.1187 1.749 0.2448 +v -0.2437 1.749 0.2448 +v -0.1187 1.749 0.1198 +v -0.2437 1.749 0.1198 +v -0.1187 1.5615 0.2448 +v -0.2437 1.3115 0.2448 +v -0.1187 1.5615 0.1198 +v -0.2437 1.3115 0.1198 +v -0.4937 1.749 0.2448 +v -0.6187 1.4365 0.2448 +v -0.4937 1.749 0.1198 +v -0.6187 1.4365 0.1198 +v -0.4937 1.3115 0.2448 +v -0.6187 1.3115 0.2448 +v -0.4937 1.3115 0.1198 +v -0.6187 1.3115 0.1198 +vt 0.3125 0.5625 +vt 0.3125 0.5938 +vt 0.25 0.5938 +vt 0.25 0.5625 +vt 0.5625 0.125 +vt 0.5625 0.1563 +vt 0.5 0.1563 +vt 0.5 0.125 +vt 0.3125 0.5938 +vt 0.3125 0.6563 +vt 0.2031 0.6563 +vt 0.2031 0.5938 +vt 0.3125 0.6094 +vt 0.3125 0.6719 +vt 0.2031 0.6719 +vt 0.2031 0.6094 +vt 0.3125 0.5938 +vt 0.3125 0.625 +vt 0.2031 0.625 +vt 0.2031 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.625 +vt 0.2031 0.625 +vt 0.2031 0.5938 +vt 0.2656 0.5938 +vt 0.2344 0.5938 +vt 0.2344 0.5625 +vt 0.2656 0.5625 +vt 0.273 0.5625 +vt 0.273 0.5938 +vt 0.2031 0.5938 +vt 0.2031 0.5625 +vt 0.2656 0.5625 +vt 0.3125 0.5625 +vt 0.3125 0.5938 +vt 0.2031 0.5938 +vt 0.3125 0.5625 +vt 0.3125 0.5938 +vt 0.2656 0.5938 +vt 0.2031 0.5625 +vt 0.25 0.5625 +vt 0.25 0.5938 +vt 0.2031 0.5938 +vt 0.2031 0.5625 +vt 0.3281 0.6094 +vt 0.2188 0.6094 +vt 0.2188 0.5781 +vt 0.3281 0.5781 +vt 0.3029 0.5938 +vt 0.2188 0.5938 +vt 0.2188 0.5625 +vt 0.3029 0.5625 +vt 0.5469 0.125 +vt 0.5469 0.1563 +vt 0.5156 0.1563 +vt 0.5156 0.125 +vt 0.2031 0.6563 +vt 0.3125 0.6563 +vt 0.2344 0.6875 +vt 0.2031 0.6875 +vt 0.2344 0.5781 +vt 0.3125 0.6094 +vt 0.2031 0.6094 +vt 0.2031 0.5781 +vt 0.3125 0.6406 +vt 0.3125 0.6719 +vt 0.2031 0.6719 +vt 0.2031 0.6406 +vt 0.2969 0.5938 +vt 0.2656 0.5938 +vt 0.2656 0.5625 +vt 0.2969 0.5625 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0.89 -0.45 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn -0.93 0.37 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +usemtl anti_aircraft_gun_painted +f 528/1421/356 526/1422/356 525/1423/356 527/1424/356 +f 531/1425/357 529/1426/357 530/1427/357 532/1428/357 +f 525/1429/358 526/1430/358 530/1431/358 529/1432/358 +f 528/1433/359 527/1434/359 531/1435/359 532/1436/359 +f 527/1437/360 525/1438/360 529/1439/360 531/1440/360 +f 532/1441/361 530/1442/361 526/1443/361 528/1444/361 +f 534/1445/362 533/1446/362 535/1447/362 536/1448/362 +f 539/1449/363 537/1450/363 538/1451/363 540/1452/363 +f 537/1453/364 533/1454/364 534/1455/364 538/1456/364 +f 536/1457/365 535/1458/365 539/1459/365 540/1460/365 +f 535/1461/366 533/1462/366 537/1463/366 539/1464/366 +f 538/1465/367 534/1466/367 536/1467/367 540/1468/367 +f 542/1469/368 541/1470/368 543/1471/368 544/1472/368 +f 547/1473/369 545/1474/369 546/1475/369 548/1476/369 +f 545/1477/370 541/1478/370 542/1479/370 546/1480/370 +f 544/1481/371 543/1482/371 547/1483/371 548/1484/371 +f 543/1485/372 541/1486/372 545/1487/372 547/1488/372 +f 546/1489/373 542/1490/373 544/1491/373 548/1492/373 +o magazine2 +v -0.2437 1.749 -0.1302 +v -0.4937 1.749 -0.1302 +v -0.2437 1.749 -0.2552 +v -0.4937 1.749 -0.2552 +v -0.2437 1.3115 -0.1302 +v -0.4937 1.3115 -0.1302 +v -0.2437 1.3115 -0.2552 +v -0.4937 1.3115 -0.2552 +v -0.1187 1.749 -0.1302 +v -0.2437 1.749 -0.1302 +v -0.1187 1.749 -0.2552 +v -0.2437 1.749 -0.2552 +v -0.1187 1.5615 -0.1302 +v -0.2437 1.3115 -0.1302 +v -0.1187 1.5615 -0.2552 +v -0.2437 1.3115 -0.2552 +v -0.4937 1.749 -0.1302 +v -0.6187 1.4365 -0.1302 +v -0.4937 1.749 -0.2552 +v -0.6187 1.4365 -0.2552 +v -0.4937 1.3115 -0.1302 +v -0.6187 1.3115 -0.1302 +v -0.4937 1.3115 -0.2552 +v -0.6187 1.3115 -0.2552 +vt 0.3125 0.5625 +vt 0.3125 0.5938 +vt 0.25 0.5938 +vt 0.25 0.5625 +vt 0.5625 0.125 +vt 0.5625 0.1563 +vt 0.5 0.1563 +vt 0.5 0.125 +vt 0.3125 0.5938 +vt 0.3125 0.6563 +vt 0.2031 0.6563 +vt 0.2031 0.5938 +vt 0.3125 0.6094 +vt 0.3125 0.6719 +vt 0.2031 0.6719 +vt 0.2031 0.6094 +vt 0.3125 0.5938 +vt 0.3125 0.625 +vt 0.2031 0.625 +vt 0.2031 0.5938 +vt 0.3125 0.5938 +vt 0.3125 0.625 +vt 0.2031 0.625 +vt 0.2031 0.5938 +vt 0.2656 0.5938 +vt 0.2344 0.5938 +vt 0.2344 0.5625 +vt 0.2656 0.5625 +vt 0.273 0.5625 +vt 0.273 0.5938 +vt 0.2031 0.5938 +vt 0.2031 0.5625 +vt 0.2656 0.5625 +vt 0.3125 0.5625 +vt 0.3125 0.5938 +vt 0.2031 0.5938 +vt 0.3125 0.5625 +vt 0.3125 0.5938 +vt 0.2656 0.5938 +vt 0.2031 0.5625 +vt 0.25 0.5625 +vt 0.25 0.5938 +vt 0.2031 0.5938 +vt 0.2031 0.5625 +vt 0.3281 0.6094 +vt 0.2188 0.6094 +vt 0.2188 0.5781 +vt 0.3281 0.5781 +vt 0.3029 0.5938 +vt 0.2188 0.5938 +vt 0.2188 0.5625 +vt 0.3029 0.5625 +vt 0.5469 0.125 +vt 0.5469 0.1563 +vt 0.5156 0.1563 +vt 0.5156 0.125 +vt 0.2031 0.6563 +vt 0.3125 0.6563 +vt 0.2344 0.6875 +vt 0.2031 0.6875 +vt 0.2344 0.5781 +vt 0.3125 0.6094 +vt 0.2031 0.6094 +vt 0.2031 0.5781 +vt 0.3125 0.6406 +vt 0.3125 0.6719 +vt 0.2031 0.6719 +vt 0.2031 0.6406 +vt 0.2969 0.5938 +vt 0.2656 0.5938 +vt 0.2656 0.5625 +vt 0.2969 0.5625 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0.89 -0.45 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn -0.93 0.37 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +usemtl anti_aircraft_gun_painted +f 552/1493/374 550/1494/374 549/1495/374 551/1496/374 +f 555/1497/375 553/1498/375 554/1499/375 556/1500/375 +f 549/1501/376 550/1502/376 554/1503/376 553/1504/376 +f 552/1505/377 551/1506/377 555/1507/377 556/1508/377 +f 551/1509/378 549/1510/378 553/1511/378 555/1512/378 +f 556/1513/379 554/1514/379 550/1515/379 552/1516/379 +f 558/1517/380 557/1518/380 559/1519/380 560/1520/380 +f 563/1521/381 561/1522/381 562/1523/381 564/1524/381 +f 561/1525/382 557/1526/382 558/1527/382 562/1528/382 +f 560/1529/383 559/1530/383 563/1531/383 564/1532/383 +f 559/1533/384 557/1534/384 561/1535/384 563/1536/384 +f 562/1537/385 558/1538/385 560/1539/385 564/1540/385 +f 566/1541/386 565/1542/386 567/1543/386 568/1544/386 +f 571/1545/387 569/1546/387 570/1547/387 572/1548/387 +f 569/1549/388 565/1550/388 566/1551/388 570/1552/388 +f 568/1553/389 567/1554/389 571/1555/389 572/1556/389 +f 567/1557/390 565/1558/390 569/1559/390 571/1560/390 +f 570/1561/391 566/1562/391 568/1563/391 572/1564/391 +o horizontal_drive_guida_mechanismnce +v 0.3438 1.1816 0.2153 +v 0.3438 1.1816 -0.2847 +v 0.3438 1.1191 0.2153 +v 0.3438 1.1191 -0.2847 +v 0.2813 1.1816 0.1528 +v 0.2813 1.1816 -0.2222 +v 0.2813 1.1191 0.1528 +v 0.2813 1.1191 -0.2222 +v 0.7813 1.1816 0.1528 +v 0.7813 1.1816 -0.2222 +v 0.7813 1.1191 0.1528 +v 0.7813 1.1191 -0.2222 +v 0.7188 1.1816 0.2153 +v 0.7188 1.1816 -0.2847 +v 0.7188 1.1191 0.2153 +v 0.7188 1.1191 -0.2847 +v 0.7188 1.1816 0.1528 +v 0.7188 1.1191 0.1528 +v 0.3438 1.1816 0.1528 +v 0.3438 1.1191 0.1528 +v 0.7188 1.1816 -0.2222 +v 0.7188 1.1191 -0.2222 +v 0.3438 1.1816 -0.2222 +v 0.3438 1.1191 -0.2222 +v 0.5398 1.1784 -0.0661 +v 0.3791 1.1784 -0.2577 +v 0.5398 1.1159 -0.0661 +v 0.3791 1.1159 -0.2577 +v 0.4919 1.1784 -0.026 +v 0.3312 1.1784 -0.2175 +v 0.4919 1.1159 -0.026 +v 0.3312 1.1159 -0.2175 +v 0.5704 1.1784 -0.02 +v 0.7311 1.1784 -0.2115 +v 0.5704 1.1159 -0.02 +v 0.7311 1.1159 -0.2115 +v 0.5225 1.1784 -0.0601 +v 0.6832 1.1784 -0.2516 +v 0.5225 1.1159 -0.0601 +v 0.6832 1.1159 -0.2516 +v 0.5625 1.1784 0.1528 +v 0.5625 1.1784 -0.0347 +v 0.5625 1.1159 0.1528 +v 0.5625 1.1159 -0.0347 +v 0.5 1.1784 0.1528 +v 0.5 1.1784 -0.0347 +v 0.5 1.1159 0.1528 +v 0.5 1.1159 -0.0347 +v 0.5938 1.2441 0.0278 +v 0.5938 1.2441 -0.0972 +v 0.5938 1.1191 0.0278 +v 0.5938 1.1191 -0.0972 +v 0.4688 1.2441 0.0278 +v 0.4688 1.2441 -0.0972 +v 0.4688 1.1191 0.0278 +v 0.4688 1.1191 -0.0972 +v 0.5613 1.1222 -0.0677 +v 0.4988 1.1222 -0.0677 +v 0.5613 1.0597 -0.0677 +v 0.4988 1.0597 -0.0677 +v 0.5613 1.1222 -0.0052 +v 0.4988 1.1222 -0.0052 +v 0.5613 1.0597 -0.0052 +v 0.4988 1.0597 -0.0052 +v 0.5613 1.0597 -0.0677 +v 0.4988 1.0597 -0.0677 +v 0.5613 0.9972 -0.0677 +v 0.4988 0.9972 -0.0677 +v 0.5613 1.0597 -0.0052 +v 0.4988 1.0597 -0.0052 +v 0.5613 0.9972 -0.0052 +v 0.4988 0.9972 -0.0052 +vt 0.0156 0.375 +vt 0 0.375 +vt 0 0.25 +vt 0.0156 0.25 +vt 0.0156 0.2656 +vt 0 0.2656 +vt 0 0.3594 +vt 0.0156 0.3594 +vt 0.0156 0.25 +vt 0.0156 0.375 +vt 0 0.3594 +vt 0 0.2656 +vt 0.0156 0.375 +vt 0.0156 0.25 +vt 0 0.2656 +vt 0 0.3594 +vt 0.0156 0.25 +vt 0.0156 0.2656 +vt 0 0.2656 +vt 0 0.25 +vt 0.0156 0.3594 +vt 0.0156 0.375 +vt 0 0.375 +vt 0 0.3594 +vt 0.125 0.3594 +vt 0.1094 0.3594 +vt 0.1094 0.2656 +vt 0.125 0.2656 +vt 0.125 0.375 +vt 0.1094 0.375 +vt 0.1094 0.25 +vt 0.125 0.25 +vt 0.125 0.2656 +vt 0.125 0.3594 +vt 0.1094 0.375 +vt 0.1094 0.25 +vt 0.125 0.3594 +vt 0.125 0.2656 +vt 0.1094 0.25 +vt 0.1094 0.375 +vt 0.125 0.25 +vt 0.125 0.2656 +vt 0.1094 0.2656 +vt 0.1094 0.25 +vt 0.125 0.3594 +vt 0.125 0.375 +vt 0.1094 0.375 +vt 0.1094 0.3594 +vt 0.1094 0.25 +vt 0.1094 0.2656 +vt 0.0156 0.2656 +vt 0.0156 0.25 +vt 0.1094 0.25 +vt 0.1094 0.2656 +vt 0.0156 0.2656 +vt 0.0156 0.25 +vt 0.1094 0.25 +vt 0.1094 0.2656 +vt 0.0156 0.2656 +vt 0.0156 0.25 +vt 0.1094 0.25 +vt 0.1094 0.2656 +vt 0.0156 0.2656 +vt 0.0156 0.25 +vt 0.1094 0.3594 +vt 0.1094 0.375 +vt 0.0156 0.375 +vt 0.0156 0.3594 +vt 0.1094 0.3594 +vt 0.1094 0.375 +vt 0.0156 0.375 +vt 0.0156 0.3594 +vt 0.0156 0.375 +vt 0.0156 0.3594 +vt 0.1094 0.3594 +vt 0.1094 0.375 +vt 0.0156 0.3594 +vt 0.0156 0.375 +vt 0.1094 0.375 +vt 0.1094 0.3594 +vt 0.0313 0.3594 +vt 0.0156 0.3594 +vt 0.0156 0.2969 +vt 0.0313 0.2969 +vt 0.0313 0.3594 +vt 0.0156 0.3594 +vt 0.0156 0.2969 +vt 0.0313 0.2969 +vt 0.0313 0.2969 +vt 0.0313 0.3594 +vt 0.0156 0.3594 +vt 0.0156 0.2969 +vt 0.0313 0.2969 +vt 0.0313 0.3594 +vt 0.0156 0.3594 +vt 0.0156 0.2969 +vt 0.0469 0.3281 +vt 0.0469 0.3438 +vt 0.1094 0.3438 +vt 0.1094 0.3281 +vt 0.1094 0.3281 +vt 0.1094 0.3438 +vt 0.0469 0.3438 +vt 0.0469 0.3281 +vt 0.1094 0.3438 +vt 0.0469 0.3438 +vt 0.0469 0.3281 +vt 0.1094 0.3281 +vt 0.0469 0.3438 +vt 0.1094 0.3438 +vt 0.1094 0.3281 +vt 0.0469 0.3281 +vt 0.0469 0.3438 +vt 0.0313 0.3438 +vt 0.0313 0.2969 +vt 0.0469 0.2969 +vt 0.0469 0.3438 +vt 0.0313 0.3438 +vt 0.0313 0.2969 +vt 0.0469 0.2969 +vt 0.0469 0.2969 +vt 0.0469 0.3438 +vt 0.0313 0.3438 +vt 0.0313 0.2969 +vt 0.0469 0.2969 +vt 0.0469 0.3438 +vt 0.0313 0.3438 +vt 0.0313 0.2969 +vt 0.1094 0.3125 +vt 0.0781 0.3125 +vt 0.0781 0.2813 +vt 0.1094 0.2813 +vt 0.0469 0.2813 +vt 0.0781 0.2813 +vt 0.0781 0.3125 +vt 0.0469 0.3125 +vt 0.0938 0.2813 +vt 0.0938 0.3125 +vt 0.0625 0.3125 +vt 0.0625 0.2813 +vt 0.0469 0.2656 +vt 0.0469 0.2969 +vt 0.0156 0.2969 +vt 0.0156 0.2656 +vt 0.0938 0.2656 +vt 0.0938 0.2969 +vt 0.0625 0.2969 +vt 0.0625 0.2656 +vt 0.0625 0.3281 +vt 0.0625 0.2969 +vt 0.0938 0.2969 +vt 0.0938 0.3281 +vt 0.2031 0.2031 +vt 0.2031 0.2188 +vt 0.2188 0.2188 +vt 0.2188 0.2031 +vt 0.1875 0.2031 +vt 0.1875 0.2188 +vt 0.2031 0.2188 +vt 0.2031 0.2031 +vt 0.2031 0.2031 +vt 0.2031 0.2188 +vt 0.2188 0.2188 +vt 0.2188 0.2031 +vt 0.2188 0.2031 +vt 0.2188 0.2188 +vt 0.2344 0.2188 +vt 0.2344 0.2031 +vt 0.1875 0.1875 +vt 0.1875 0.2031 +vt 0.2031 0.2031 +vt 0.2031 0.1875 +vt 0.1719 0.1875 +vt 0.1719 0.2031 +vt 0.1875 0.2031 +vt 0.1875 0.1875 +vt 0.1875 0.1875 +vt 0.1875 0.2031 +vt 0.2031 0.2031 +vt 0.2031 0.1875 +vt 0.2031 0.1875 +vt 0.2031 0.2031 +vt 0.2188 0.2031 +vt 0.2188 0.1875 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn -0.71 0 0.71 +vn -0.71 0 -0.71 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0.71 0 0.71 +vn 0.71 0 -0.71 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0.77 0 -0.64 +vn -0.77 0 0.64 +vn 0 1 0 +vn 0 -1 0 +vn 0.77 0 0.64 +vn -0.77 0 -0.64 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +usemtl anti_aircraft_gun_painted +f 576/1565/392 574/1566/392 573/1567/392 575/1568/392 +f 579/1569/393 577/1570/393 578/1571/393 580/1572/393 +f 573/1573/394 574/1574/394 578/1575/394 577/1576/394 +f 576/1577/395 575/1578/395 579/1579/395 580/1580/395 +f 575/1581/396 573/1582/396 577/1583/396 579/1584/396 +f 580/1585/397 578/1586/397 574/1587/397 576/1588/397 +f 584/1589/398 582/1590/398 581/1591/398 583/1592/398 +f 587/1593/399 585/1594/399 586/1595/399 588/1596/399 +f 581/1597/400 582/1598/400 586/1599/400 585/1600/400 +f 584/1601/401 583/1602/401 587/1603/401 588/1604/401 +f 583/1605/402 581/1606/402 585/1607/402 587/1608/402 +f 588/1609/403 586/1610/403 582/1611/403 584/1612/403 +f 585/1613/404 589/1614/404 591/1615/404 573/1616/404 +f 590/1617/405 587/1618/405 575/1619/405 592/1620/405 +f 587/1621/406 585/1622/406 573/1623/406 575/1624/406 +f 592/1625/407 591/1626/407 589/1627/407 590/1628/407 +f 593/1629/408 586/1630/408 574/1631/408 595/1632/408 +f 588/1633/409 594/1634/409 596/1635/409 576/1636/409 +f 594/1637/410 593/1638/410 595/1639/410 596/1640/410 +f 576/1641/411 574/1642/411 586/1643/411 588/1644/411 +f 600/1645/412 598/1646/412 597/1647/412 599/1648/412 +f 603/1649/413 601/1650/413 602/1651/413 604/1652/413 +f 597/1653/414 598/1654/414 602/1655/414 601/1656/414 +f 600/1657/415 599/1658/415 603/1659/415 604/1660/415 +f 608/1661/416 606/1662/416 605/1663/416 607/1664/416 +f 611/1665/417 609/1666/417 610/1667/417 612/1668/417 +f 605/1669/418 606/1670/418 610/1671/418 609/1672/418 +f 608/1673/419 607/1674/419 611/1675/419 612/1676/419 +f 616/1677/420 614/1678/420 613/1679/420 615/1680/420 +f 619/1681/421 617/1682/421 618/1683/421 620/1684/421 +f 613/1685/422 614/1686/422 618/1687/422 617/1688/422 +f 616/1689/423 615/1690/423 619/1691/423 620/1692/423 +f 624/1693/424 622/1694/424 621/1695/424 623/1696/424 +f 627/1697/425 625/1698/425 626/1699/425 628/1700/425 +f 621/1701/426 622/1702/426 626/1703/426 625/1704/426 +f 624/1705/427 623/1706/427 627/1707/427 628/1708/427 +f 623/1709/428 621/1710/428 625/1711/428 627/1712/428 +f 628/1713/429 626/1714/429 622/1715/429 624/1716/429 +f 632/1717/430 630/1718/430 629/1719/430 631/1720/430 +f 635/1721/431 633/1722/431 634/1723/431 636/1724/431 +f 631/1725/432 629/1726/432 633/1727/432 635/1728/432 +f 636/1729/433 634/1730/433 630/1731/433 632/1732/433 +f 640/1733/434 638/1734/434 637/1735/434 639/1736/434 +f 643/1737/435 641/1738/435 642/1739/435 644/1740/435 +f 639/1741/436 637/1742/436 641/1743/436 643/1744/436 +f 644/1745/437 642/1746/437 638/1747/437 640/1748/437 +o firing_pedal +v -0.0023 0.6156 -0.25 +v -0.0023 0.6156 -0.4375 +v -0.0425 0.5678 -0.25 +v -0.0425 0.5678 -0.4375 +v -0.2896 0.8567 -0.25 +v -0.2896 0.8567 -0.4375 +v -0.3297 0.8088 -0.25 +v -0.3297 0.8088 -0.4375 +vt 0.2031 0.2188 +vt 0.2031 0.2344 +vt 0.1563 0.2344 +vt 0.1563 0.2188 +vt 0.2031 0.2188 +vt 0.2031 0.2344 +vt 0.1563 0.2344 +vt 0.1563 0.2188 +vt 0.25 0.1875 +vt 0.25 0.2344 +vt 0.1563 0.2344 +vt 0.1563 0.1875 +vt 0.25 0.1875 +vt 0.25 0.2344 +vt 0.1563 0.2344 +vt 0.1563 0.1875 +vt 0.25 0.2188 +vt 0.25 0.2344 +vt 0.1563 0.2344 +vt 0.1563 0.2188 +vt 0.25 0.2188 +vt 0.25 0.2344 +vt 0.1563 0.2344 +vt 0.1563 0.2188 +vn 0.77 -0.64 0 +vn -0.77 0.64 0 +vn 0.64 0.77 0 +vn -0.64 -0.77 0 +vn 0 0 1 +vn 0 0 -1 +usemtl anti_aircraft_gun_painted +f 648/1749/438 646/1750/438 645/1751/438 647/1752/438 +f 651/1753/439 649/1754/439 650/1755/439 652/1756/439 +f 645/1757/440 646/1758/440 650/1759/440 649/1760/440 +f 648/1761/441 647/1762/441 651/1763/441 652/1764/441 +f 647/1765/442 645/1766/442 649/1767/442 651/1768/442 +f 652/1769/443 650/1770/443 646/1771/443 648/1772/443 +o vertical_drive_guida_mechanismnce +v -0.1282 1.0319 -0.6937 +v -0.1282 1.5319 -0.6937 +v -0.1907 1.0319 -0.6937 +v -0.1907 1.5319 -0.6937 +v -0.1282 1.0944 -0.6312 +v -0.1282 1.4694 -0.6312 +v -0.1907 1.0944 -0.6312 +v -0.1907 1.4694 -0.6312 +v -0.1282 1.0944 -1.1312 +v -0.1282 1.4694 -1.1312 +v -0.1907 1.0944 -1.1312 +v -0.1907 1.4694 -1.1312 +v -0.1282 1.0319 -1.0687 +v -0.1282 1.5319 -1.0687 +v -0.1907 1.0319 -1.0687 +v -0.1907 1.5319 -1.0687 +v -0.1282 1.0944 -1.0687 +v -0.1907 1.0944 -1.0687 +v -0.1282 1.0944 -0.6937 +v -0.1907 1.0944 -0.6937 +v -0.1282 1.4694 -1.0687 +v -0.1907 1.4694 -1.0687 +v -0.1282 1.4694 -0.6937 +v -0.1907 1.4694 -0.6937 +v -0.1313 1.3133 -0.8898 +v -0.1313 1.5048 -0.7291 +v -0.1938 1.3133 -0.8898 +v -0.1938 1.5048 -0.7291 +v -0.1313 1.2732 -0.8419 +v -0.1313 1.4647 -0.6812 +v -0.1938 1.2732 -0.8419 +v -0.1938 1.4647 -0.6812 +v -0.1313 1.2672 -0.9204 +v -0.1313 1.4587 -1.0811 +v -0.1938 1.2672 -0.9204 +v -0.1938 1.4587 -1.0811 +v -0.1313 1.3073 -0.8725 +v -0.1313 1.4988 -1.0332 +v -0.1938 1.3073 -0.8725 +v -0.1938 1.4988 -1.0332 +v -0.1313 1.0944 -0.9125 +v -0.1313 1.2819 -0.9125 +v -0.1938 1.0944 -0.9125 +v -0.1938 1.2819 -0.9125 +v -0.1313 1.0944 -0.85 +v -0.1313 1.2819 -0.85 +v -0.1938 1.0944 -0.85 +v -0.1938 1.2819 -0.85 +v -0.0657 1.2194 -0.9437 +v -0.0657 1.3444 -0.9437 +v -0.1907 1.2194 -0.9437 +v -0.1907 1.3444 -0.9437 +v -0.0657 1.2194 -0.8187 +v -0.0657 1.3444 -0.8187 +v -0.1907 1.2194 -0.8187 +v -0.1907 1.3444 -0.8187 +v -0.1875 1.3125 -0.8437 +v -0.1875 1.3125 -0.9062 +v -0.1875 1.25 -0.8437 +v -0.1875 1.25 -0.9062 +v -0.6875 1.3125 -0.8437 +v -0.6875 1.3125 -0.9062 +v -0.6875 1.25 -0.8437 +v -0.6875 1.25 -0.9062 +vt 0.0156 0.375 +vt 0 0.375 +vt 0 0.25 +vt 0.0156 0.25 +vt 0.0156 0.2656 +vt 0 0.2656 +vt 0 0.3594 +vt 0.0156 0.3594 +vt 0.0156 0.25 +vt 0.0156 0.375 +vt 0 0.3594 +vt 0 0.2656 +vt 0.0156 0.375 +vt 0.0156 0.25 +vt 0 0.2656 +vt 0 0.3594 +vt 0.0156 0.25 +vt 0.0156 0.2656 +vt 0 0.2656 +vt 0 0.25 +vt 0.0156 0.3594 +vt 0.0156 0.375 +vt 0 0.375 +vt 0 0.3594 +vt 0.125 0.3594 +vt 0.1094 0.3594 +vt 0.1094 0.2656 +vt 0.125 0.2656 +vt 0.125 0.375 +vt 0.1094 0.375 +vt 0.1094 0.25 +vt 0.125 0.25 +vt 0.125 0.2656 +vt 0.125 0.3594 +vt 0.1094 0.375 +vt 0.1094 0.25 +vt 0.125 0.3594 +vt 0.125 0.2656 +vt 0.1094 0.25 +vt 0.1094 0.375 +vt 0.125 0.25 +vt 0.125 0.2656 +vt 0.1094 0.2656 +vt 0.1094 0.25 +vt 0.125 0.3594 +vt 0.125 0.375 +vt 0.1094 0.375 +vt 0.1094 0.3594 +vt 0.1094 0.25 +vt 0.1094 0.2656 +vt 0.0156 0.2656 +vt 0.0156 0.25 +vt 0.1094 0.25 +vt 0.1094 0.2656 +vt 0.0156 0.2656 +vt 0.0156 0.25 +vt 0.1094 0.25 +vt 0.1094 0.2656 +vt 0.0156 0.2656 +vt 0.0156 0.25 +vt 0.1094 0.25 +vt 0.1094 0.2656 +vt 0.0156 0.2656 +vt 0.0156 0.25 +vt 0.1094 0.3594 +vt 0.1094 0.375 +vt 0.0156 0.375 +vt 0.0156 0.3594 +vt 0.1094 0.3594 +vt 0.1094 0.375 +vt 0.0156 0.375 +vt 0.0156 0.3594 +vt 0.0156 0.375 +vt 0.0156 0.3594 +vt 0.1094 0.3594 +vt 0.1094 0.375 +vt 0.0156 0.3594 +vt 0.0156 0.375 +vt 0.1094 0.375 +vt 0.1094 0.3594 +vt 0.0313 0.3594 +vt 0.0156 0.3594 +vt 0.0156 0.2969 +vt 0.0313 0.2969 +vt 0.0313 0.3594 +vt 0.0156 0.3594 +vt 0.0156 0.2969 +vt 0.0313 0.2969 +vt 0.0313 0.2969 +vt 0.0313 0.3594 +vt 0.0156 0.3594 +vt 0.0156 0.2969 +vt 0.0313 0.2969 +vt 0.0313 0.3594 +vt 0.0156 0.3594 +vt 0.0156 0.2969 +vt 0.0469 0.3281 +vt 0.0469 0.3438 +vt 0.1094 0.3438 +vt 0.1094 0.3281 +vt 0.1094 0.3281 +vt 0.1094 0.3438 +vt 0.0469 0.3438 +vt 0.0469 0.3281 +vt 0.1094 0.3438 +vt 0.0469 0.3438 +vt 0.0469 0.3281 +vt 0.1094 0.3281 +vt 0.0469 0.3438 +vt 0.1094 0.3438 +vt 0.1094 0.3281 +vt 0.0469 0.3281 +vt 0.0469 0.3438 +vt 0.0313 0.3438 +vt 0.0313 0.2969 +vt 0.0469 0.2969 +vt 0.0469 0.3438 +vt 0.0313 0.3438 +vt 0.0313 0.2969 +vt 0.0469 0.2969 +vt 0.0469 0.2969 +vt 0.0469 0.3438 +vt 0.0313 0.3438 +vt 0.0313 0.2969 +vt 0.0469 0.2969 +vt 0.0469 0.3438 +vt 0.0313 0.3438 +vt 0.0313 0.2969 +vt 0.1094 0.3125 +vt 0.0781 0.3125 +vt 0.0781 0.2813 +vt 0.1094 0.2813 +vt 0.0469 0.2813 +vt 0.0781 0.2813 +vt 0.0781 0.3125 +vt 0.0469 0.3125 +vt 0.0938 0.2813 +vt 0.0938 0.3125 +vt 0.0625 0.3125 +vt 0.0625 0.2813 +vt 0.0469 0.2656 +vt 0.0469 0.2969 +vt 0.0156 0.2969 +vt 0.0156 0.2656 +vt 0.0938 0.2656 +vt 0.0938 0.2969 +vt 0.0625 0.2969 +vt 0.0625 0.2656 +vt 0.0625 0.3281 +vt 0.0625 0.2969 +vt 0.0938 0.2969 +vt 0.0938 0.3281 +vt 0.125 0.2031 +vt 0.125 0.2188 +vt 0.1094 0.2188 +vt 0.1094 0.2031 +vt 0.125 0.2031 +vt 0.125 0.2188 +vt 0.1094 0.2188 +vt 0.1094 0.2031 +vt 0.2344 0.2031 +vt 0.2344 0.2188 +vt 0.1094 0.2188 +vt 0.1094 0.2031 +vt 0.2344 0.2031 +vt 0.2344 0.2188 +vt 0.1094 0.2188 +vt 0.1094 0.2031 +vt 0.2344 0.2031 +vt 0.2344 0.2188 +vt 0.1094 0.2188 +vt 0.1094 0.2031 +vt 0.2344 0.2031 +vt 0.2344 0.2188 +vt 0.1094 0.2188 +vt 0.1094 0.2031 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.71 0.71 +vn 0 0.71 0.71 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.71 -0.71 +vn 0 0.71 -0.71 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0.64 -0.77 +vn 0 -0.64 0.77 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.64 -0.77 +vn 0 0.64 0.77 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +usemtl anti_aircraft_gun_painted +f 656/1773/444 654/1774/444 653/1775/444 655/1776/444 +f 659/1777/445 657/1778/445 658/1779/445 660/1780/445 +f 653/1781/446 654/1782/446 658/1783/446 657/1784/446 +f 656/1785/447 655/1786/447 659/1787/447 660/1788/447 +f 655/1789/448 653/1790/448 657/1791/448 659/1792/448 +f 660/1793/449 658/1794/449 654/1795/449 656/1796/449 +f 664/1797/450 662/1798/450 661/1799/450 663/1800/450 +f 667/1801/451 665/1802/451 666/1803/451 668/1804/451 +f 661/1805/452 662/1806/452 666/1807/452 665/1808/452 +f 664/1809/453 663/1810/453 667/1811/453 668/1812/453 +f 663/1813/454 661/1814/454 665/1815/454 667/1816/454 +f 668/1817/455 666/1818/455 662/1819/455 664/1820/455 +f 665/1821/456 669/1822/456 671/1823/456 653/1824/456 +f 670/1825/457 667/1826/457 655/1827/457 672/1828/457 +f 667/1829/458 665/1830/458 653/1831/458 655/1832/458 +f 672/1833/459 671/1834/459 669/1835/459 670/1836/459 +f 673/1837/460 666/1838/460 654/1839/460 675/1840/460 +f 668/1841/461 674/1842/461 676/1843/461 656/1844/461 +f 674/1845/462 673/1846/462 675/1847/462 676/1848/462 +f 656/1849/463 654/1850/463 666/1851/463 668/1852/463 +f 680/1853/464 678/1854/464 677/1855/464 679/1856/464 +f 683/1857/465 681/1858/465 682/1859/465 684/1860/465 +f 677/1861/466 678/1862/466 682/1863/466 681/1864/466 +f 680/1865/467 679/1866/467 683/1867/467 684/1868/467 +f 688/1869/468 686/1870/468 685/1871/468 687/1872/468 +f 691/1873/469 689/1874/469 690/1875/469 692/1876/469 +f 685/1877/470 686/1878/470 690/1879/470 689/1880/470 +f 688/1881/471 687/1882/471 691/1883/471 692/1884/471 +f 696/1885/472 694/1886/472 693/1887/472 695/1888/472 +f 699/1889/473 697/1890/473 698/1891/473 700/1892/473 +f 693/1893/474 694/1894/474 698/1895/474 697/1896/474 +f 696/1897/475 695/1898/475 699/1899/475 700/1900/475 +f 704/1901/476 702/1902/476 701/1903/476 703/1904/476 +f 707/1905/477 705/1906/477 706/1907/477 708/1908/477 +f 701/1909/478 702/1910/478 706/1911/478 705/1912/478 +f 704/1913/479 703/1914/479 707/1915/479 708/1916/479 +f 703/1917/480 701/1918/480 705/1919/480 707/1920/480 +f 708/1921/481 706/1922/481 702/1923/481 704/1924/481 +f 712/1925/482 710/1926/482 709/1927/482 711/1928/482 +f 715/1929/483 713/1930/483 714/1931/483 716/1932/483 +f 709/1933/484 710/1934/484 714/1935/484 713/1936/484 +f 712/1937/485 711/1938/485 715/1939/485 716/1940/485 +f 711/1941/486 709/1942/486 713/1943/486 715/1944/486 +f 716/1945/487 714/1946/487 710/1947/487 712/1948/487 \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_flak/field_flak.obj.amt b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_flak/field_flak.obj.amt new file mode 100644 index 000000000..264af81d2 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_flak/field_flak.obj.amt @@ -0,0 +1,85 @@ +{ + "origins": { + "weapon": [0, 4, 0], + "turret": [0.65286, 14.82609, 0.03393], + "gun": [-5.49657, 18.475, -0.08503], + "cannon2": [-35.41667, 18, -3.05], + "cannon2_net": [-31.91667, 17.01667, -3.05], + "cannon1": [-35.41667, 18, 2.95], + "cannon1_net": [-0.25, -1, -0.05], + "magazine": [-5.89857, 24.40124, 2.91667], + "magazine2": [-5.89857, 24.40124, -3.08333], + "gun_net": [-13.85227, 18.95276, -0.06543], + "horizontal_drive_guida_mechanismnce": [8.49527, 18.1216, -0.76452], + "firing_pedal": [-0.5, 10, -5.5], + "vertical_drive_guida_mechanismnce": [-3.06296, 20.73755, -14.08691], + "turret_net": [-11.40416, 19.90014, 0], + "wheel2": [0, 3.90621, 17.66739], + "wheel1": [0, 3.90621, -17.33261], + "weapon_net": [-15.71564, 6, 8.49793], + "hans_commander": [14, 15.66667, 18], + "hans_commander_body": [14, 12, 18], + "hans_commander_head": [14, 24, 18], + "hans_commander_left_arm": [8, 22, 18], + "hans_commander_right_arm": [20, 21.97429, 18.21228], + "hans_commander_right_leg": [16, 11, 18], + "hans_commander_left_leg": [12, 11, 18], + "hans_gunner": [14, 15.66667, -19], + "hans_gunner_body": [14, 12, -19], + "hans_gunner_head": [14, 24, -19], + "hans_gunner_left_arm": [8, 22, -19], + "hans_gunner_right_arm": [21, 21.97429, -18.78772], + "hans_gunner_right_leg": [16, 11, -19], + "hans_gunner_left_leg": [12, 11, -19], + "turret_base": [0.65286, 8.82609, 0.03393], + "cannon2_fire": [-40.25, 18, -3.05], + "cannon1_fire": [-40.25, 18, 2.95] + }, + "hierarchy": { + "turret": "turret_base", + "gun": "turret", + "cannon2": "gun", + "cannon2_net": "cannon2", + "cannon1": "gun", + "cannon1_net": "cannon1", + "magazine": "gun", + "magazine2": "gun", + "gun_net": "gun", + "horizontal_drive_guida_mechanismnce": "turret", + "firing_pedal": "turret", + "vertical_drive_guida_mechanismnce": "turret", + "turret_net": "turret", + "wheel2": "weapon", + "wheel1": "weapon", + "weapon_net": "weapon", + "hans_commander": "turret_base", + "hans_commander_body": "hans_commander", + "hans_commander_head": "hans_commander_body", + "hans_commander_left_arm": "hans_commander_body", + "hans_commander_right_arm": "hans_commander_body", + "hans_commander_right_leg": "hans_commander", + "hans_commander_left_leg": "hans_commander", + "hans_gunner": "turret_base", + "hans_gunner_body": "hans_gunner", + "hans_gunner_head": "hans_gunner_body", + "hans_gunner_left_arm": "hans_gunner_body", + "hans_gunner_right_arm": "hans_gunner_body", + "hans_gunner_right_leg": "hans_gunner", + "hans_gunner_left_leg": "hans_gunner", + "turret_base": "weapon", + "cannon2_fire": "cannon2", + "cannon1_fire": "cannon1" + }, + "properties": { + "cannon1_fire": { + "particle": "ammo/gunfire", + "rotation": [180.0, 90.0, 0.0], + "position": [0.425, 0.0, 0.0] + }, + "cannon2_fire": { + "particle": "ammo/gunfire", + "rotation": [180.0, 90.0, 0.0], + "position": [0.425, 0.0, 0.0] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_howitzer/field_howitzer.mtl b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_howitzer/field_howitzer.mtl new file mode 100644 index 000000000..9460749e0 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_howitzer/field_howitzer.mtl @@ -0,0 +1,20 @@ +# Made by Pabilo8 with Blockbench + +newmtl field_howitzer +map_Kd immersiveintelligence:entity/vehicle/field_gun/field_howitzer +newmtl field_howitzer_paint +map_Kd immersiveintelligence:entity/vehicle/field_gun/field_howitzer_painted +newmtl hans +map_Kd immersiveintelligence:entity/hans +newmtl wheel_12_terrain +map_Kd immersiveintelligence:entity/vehicle/suspension/wheel_12_terrain +newmtl artillery_scope +map_Kd immersiveintelligence:entity/vehicle/field_gun/artillery_scope +newmtl common_camo_net +map_Kd immersiveintelligence:blocks/common/camo_net/common_camo_net +newmtl radio_backpack +map_Kd immersiveintelligence:armor/radio_backpack +newmtl radio_backpack2 +map_Kd immersiveintelligence:armor/radio_backpack2 +newmtl snow_vehicle +map_Kd immersiveintelligence:entity/vehicle/environment_effects/snow \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_howitzer/field_howitzer.obj b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_howitzer/field_howitzer.obj new file mode 100644 index 000000000..0abcbc782 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_howitzer/field_howitzer.obj @@ -0,0 +1,2833 @@ +# Made by Pabilo8 with Blockbench +# Exported with IIToolkit Plugin on 29/05/2026 +mtllib field_howitzer.mtl + +o howizer +v -0.4375 0.3125 0.4375 +v -0.4375 0.3125 0.375 +v -0.4375 0.5625 0.4375 +v -0.4375 0.5625 0.375 +v -0.1875 0.3125 0.6875 +v -0.1875 0.3125 0.375 +v -0.1875 0.5625 0.6875 +v -0.1875 0.5625 0.375 +v -0.1875 0.5625 0.375 +v -0.1875 0.5625 -0.3125 +v -0.1875 0.3125 0.375 +v -0.1875 0.3125 -0.3125 +v -0.4375 0.5625 0.375 +v -0.4375 0.5625 -0.3125 +v -0.4375 0.3125 0.375 +v -0.4375 0.3125 -0.3125 +v 0.3125 0.5625 0.6875 +v 0.3125 0.5625 0.4375 +v 0.3125 0.3125 0.6875 +v 0.3125 0.3125 0.4375 +v -0.1875 0.5625 0.6875 +v -0.1875 0.5625 0.4375 +v -0.1875 0.3125 0.6875 +v -0.1875 0.3125 0.4375 +v 0.5625 0.5625 0.4375 +v 0.5625 0.5625 0.375 +v 0.5625 0.3125 0.4375 +v 0.5625 0.3125 0.375 +v 0.3125 0.5625 0.6875 +v 0.3125 0.5625 0.375 +v 0.3125 0.3125 0.6875 +v 0.3125 0.3125 0.375 +v 0.5625 0.5625 0.375 +v 0.5625 0.5625 -0.3125 +v 0.5625 0.3125 0.375 +v 0.5625 0.3125 -0.3125 +v 0.3125 0.5625 0.375 +v 0.3125 0.5625 -0.3125 +v 0.3125 0.3125 0.375 +v 0.3125 0.3125 -0.3125 +v 0.25 0.5625 0.9375 +v 0.25 0.5625 0.6875 +v 0.25 0.3125 0.9375 +v 0.25 0.3125 0.6875 +v -0.125 0.5625 0.9375 +v -0.125 0.5625 0.6875 +v -0.125 0.3125 0.9375 +v -0.125 0.3125 0.6875 +v 0.25 0.5625 1.0625 +v 0.25 0.5625 0.9375 +v 0.25 0.3125 1.0625 +v 0.25 0.3125 0.9375 +v 0.125 0.5625 1.0625 +v 0.125 0.5625 0.9375 +v 0.125 0.3125 1.0625 +v 0.125 0.3125 0.9375 +v 0 0.5625 1.0625 +v 0 0.5625 0.9375 +v 0 0.3125 1.0625 +v 0 0.3125 0.9375 +v -0.125 0.5625 1.0625 +v -0.125 0.5625 0.9375 +v -0.125 0.3125 1.0625 +v -0.125 0.3125 0.9375 +v 0.25 0.5625 1.1875 +v 0.25 0.5625 1.0625 +v 0.25 0.3125 1.1875 +v 0.25 0.3125 1.0625 +v -0.125 0.5625 1.1875 +v -0.125 0.5625 1.0625 +v -0.125 0.3125 1.1875 +v -0.125 0.3125 1.0625 +v 0.5625 0.5625 -0.3125 +v 0.5625 0.5625 -0.5625 +v 0.5625 0.1875 -0.3125 +v 0.5625 0.1875 -0.5625 +v -0.4375 0.5625 -0.3125 +v -0.4375 0.5625 -0.5625 +v -0.4375 0.1875 -0.3125 +v -0.4375 0.1875 -0.5625 +v 0.375 1.1974 -0.3243 +v 0.375 1.1757 -0.4474 +v 0.375 1.0743 -0.3026 +v 0.375 1.0526 -0.4257 +v 0.3125 1.1974 -0.3243 +v 0.3125 1.1757 -0.4474 +v 0.3125 1.0743 -0.3026 +v 0.3125 1.0526 -0.4257 +v -0.1875 1.1974 -0.3243 +v -0.1875 1.1757 -0.4474 +v -0.1875 1.0743 -0.3026 +v -0.1875 1.0526 -0.4257 +v -0.25 1.1974 -0.3243 +v -0.25 1.1757 -0.4474 +v -0.25 1.0743 -0.3026 +v -0.25 1.0526 -0.4257 +v 0.625 0.5 -0.125 +v 0.625 0.5 -0.25 +v 0.625 0.375 -0.125 +v 0.625 0.375 -0.25 +v -0.5 0.5 -0.125 +v -0.5 0.5 -0.25 +v -0.5 0.375 -0.125 +v -0.5 0.375 -0.25 +v 0.6875 0.625 0 +v 0.6875 0.625 -0.375 +v 0.6875 0.25 0 +v 0.6875 0.25 -0.375 +v 0.625 0.625 0 +v 0.625 0.625 -0.375 +v 0.625 0.25 0 +v 0.625 0.25 -0.375 +v -0.5 0.625 0 +v -0.5 0.625 -0.375 +v -0.5 0.25 0 +v -0.5 0.25 -0.375 +v -0.5625 0.625 0 +v -0.5625 0.625 -0.375 +v -0.5625 0.25 0 +v -0.5625 0.25 -0.375 +v -0.25 0.9375 -0.3125 +v -0.25 0.9375 -0.5562 +v -0.25 0.5625 -0.3125 +v -0.25 0.5625 -0.5625 +v -0.375 0.9375 -0.3125 +v -0.375 0.9375 -0.5562 +v -0.375 0.5625 -0.3125 +v -0.375 0.5625 -0.5625 +v 0.5 0.9375 -0.3125 +v 0.5 0.9375 -0.5562 +v 0.5 0.5625 -0.3125 +v 0.5 0.5625 -0.5625 +v 0.375 0.9375 -0.3125 +v 0.375 0.9375 -0.5562 +v 0.375 0.5625 -0.3125 +v 0.375 0.5625 -0.5625 +v 0.375 1.2516 -0.2441 +v 0.375 1.2537 -0.5566 +v 0.375 1.0016 -0.2463 +v 0.375 1.0038 -0.5588 +v 0.5 1.2516 -0.2441 +v 0.5 1.2537 -0.5566 +v 0.5 1.0016 -0.2463 +v 0.5 1.0038 -0.5588 +v -0.25 1.2516 -0.2441 +v -0.25 1.2537 -0.5566 +v -0.25 1.0016 -0.2463 +v -0.25 1.0038 -0.5588 +v -0.375 1.2516 -0.2441 +v -0.375 1.2537 -0.5566 +v -0.375 1.0016 -0.2463 +v -0.375 1.0038 -0.5588 +v -0.25 1.6662 -0.5533 +v -0.25 1.6673 -0.6783 +v -0.25 0.4163 -0.5642 +v -0.25 0.4174 -0.6892 +v -0.375 1.6662 -0.5533 +v -0.375 1.6673 -0.6783 +v -0.375 0.4163 -0.5642 +v -0.375 0.4174 -0.6892 +v -0.25 1.6673 -0.6783 +v -0.25 1.6679 -0.7408 +v -0.25 0.4174 -0.6892 +v -0.25 0.4179 -0.7517 +v -0.875 1.6673 -0.6783 +v -0.875 1.6679 -0.7408 +v -1 0.4174 -0.6892 +v -1 0.4179 -0.7517 +v -1 1.4804 -0.7424 +v -0.25 1.4804 -0.7424 +v -0.25 1.4798 -0.6799 +v -1 1.4798 -0.6799 +v 0.5 1.6662 -0.5533 +v 0.5 1.6673 -0.6783 +v 0.5 0.4163 -0.5642 +v 0.5 0.4174 -0.6892 +v 0.375 1.6662 -0.5533 +v 0.375 1.6673 -0.6783 +v 0.375 0.4163 -0.5642 +v 0.375 0.4174 -0.6892 +v 1 1.6673 -0.6783 +v 1 1.6679 -0.7408 +v 1.125 0.4174 -0.6892 +v 1.125 0.4179 -0.7517 +v 0.375 1.6673 -0.6783 +v 0.375 1.6679 -0.7408 +v 0.375 0.4174 -0.6892 +v 0.375 0.4179 -0.7517 +v 0.375 1.4804 -0.7424 +v 1.125 1.4804 -0.7424 +v 1.125 1.4798 -0.6799 +v 0.375 1.4798 -0.6799 +v 1.0625 1.2939 -0.621 +v 1.0625 1.2944 -0.6835 +v 1.0625 0.9189 -0.6242 +v 1.0625 0.9194 -0.6867 +v 0.5 1.2939 -0.621 +v 0.5 1.2944 -0.6835 +v 0.5 0.9189 -0.6242 +v 0.5 0.9194 -0.6867 +vt 0.4688 0.4688 +vt 0.4688 0.5313 +vt 0.4531 0.5313 +vt 0.4531 0.4688 +vt 0.3125 0.4688 +vt 0.3125 0.5313 +vt 0.2344 0.5313 +vt 0.2344 0.4688 +vt 0.4844 0.5938 +vt 0.4844 0.6094 +vt 0.4219 0.6094 +vt 0.4219 0.5313 +vt 0.4531 0.6094 +vt 0.4531 0.5938 +vt 0.5156 0.5313 +vt 0.5156 0.6094 +vt 0.604 0.4688 +vt 0.604 0.5313 +vt 0.5156 0.5313 +vt 0.5156 0.4688 +vt 0.3906 0.4688 +vt 0.3906 0.5313 +vt 0.3281 0.5313 +vt 0.3281 0.4688 +vt 0.1875 0.0625 +vt 0.1875 0 +vt 0.0156 0 +vt 0.0156 0.0625 +vt 0.0156 0.0625 +vt 0.0156 0 +vt 0.1875 0 +vt 0.1875 0.0625 +vt 0 0.125 +vt 0.1719 0.125 +vt 0.1719 0.0625 +vt 0 0.0625 +vt 0.1719 0.125 +vt 0 0.125 +vt 0 0.0625 +vt 0.1719 0.0625 +vt 0.4219 0.5313 +vt 0.4219 0.5938 +vt 0.2969 0.5938 +vt 0.2969 0.5313 +vt 0.4219 0.5938 +vt 0.4219 0.5313 +vt 0.2969 0.5313 +vt 0.2969 0.5938 +vt 0.4844 0.4688 +vt 0.4844 0.5313 +vt 0.6094 0.5313 +vt 0.6094 0.4688 +vt 0.2969 0.4688 +vt 0.2969 0.5313 +vt 0.4219 0.5313 +vt 0.4219 0.4688 +vt 0.4688 0.4688 +vt 0.4688 0.5313 +vt 0.4531 0.5313 +vt 0.4531 0.4688 +vt 0.3125 0.4688 +vt 0.3125 0.5313 +vt 0.2344 0.5313 +vt 0.2344 0.4688 +vt 0.4844 0.5938 +vt 0.4844 0.6094 +vt 0.4219 0.6094 +vt 0.4219 0.5313 +vt 0.4844 0.6094 +vt 0.4844 0.5938 +vt 0.4219 0.5313 +vt 0.4219 0.6094 +vt 0.604 0.4688 +vt 0.604 0.5313 +vt 0.5156 0.5313 +vt 0.5156 0.4688 +vt 0.3906 0.4688 +vt 0.3906 0.5313 +vt 0.3281 0.5313 +vt 0.3281 0.4688 +vt 0.1875 0.0625 +vt 0.1875 0 +vt 0.0156 0 +vt 0.0156 0.0625 +vt 0.0156 0.0625 +vt 0.0156 0 +vt 0.1875 0 +vt 0.1875 0.0625 +vt 0 0.125 +vt 0.1719 0.125 +vt 0.1719 0.0625 +vt 0 0.0625 +vt 0.1719 0.125 +vt 0 0.125 +vt 0 0.0625 +vt 0.1719 0.0625 +vt 0.2188 0.125 +vt 0.2188 0.1875 +vt 0.1563 0.1875 +vt 0.1563 0.125 +vt 0 0.125 +vt 0 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.125 +vt 0.1563 0.25 +vt 0.1563 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.25 +vt 0.25 0.25 +vt 0.25 0.1875 +vt 0.1563 0.1875 +vt 0.1563 0.25 +vt 0.2188 0.125 +vt 0.2188 0.1875 +vt 0.3125 0.1875 +vt 0.3125 0.125 +vt 0.0625 0.125 +vt 0.0625 0.1875 +vt 0.1563 0.1875 +vt 0.1563 0.125 +vt 0.25 0 +vt 0.25 0.0625 +vt 0.2813 0.0625 +vt 0.2813 0 +vt 0.3125 0 +vt 0.3125 0.0625 +vt 0.2813 0.0625 +vt 0.2813 0 +vt 0.2813 0.0938 +vt 0.2813 0.0625 +vt 0.3125 0.0625 +vt 0.3125 0.0938 +vt 0.2813 0.0625 +vt 0.2813 0.0938 +vt 0.3125 0.0938 +vt 0.3125 0.0625 +vt 0.2813 0 +vt 0.2813 0.0625 +vt 0.3125 0.0625 +vt 0.3125 0 +vt 0.2813 0 +vt 0.2813 0.0625 +vt 0.25 0.0625 +vt 0.25 0 +vt 0.3125 0.0938 +vt 0.3125 0.0625 +vt 0.2813 0.0625 +vt 0.2813 0.0938 +vt 0.3125 0.0625 +vt 0.3125 0.0938 +vt 0.2813 0.0938 +vt 0.2813 0.0625 +vt 0.4063 0 +vt 0.4063 0.0625 +vt 0.4375 0.0625 +vt 0.4375 0 +vt 0.4375 0 +vt 0.4375 0.0625 +vt 0.4063 0.0625 +vt 0.4063 0 +vt 0.5 0.0625 +vt 0.5 0.0938 +vt 0.4063 0.0938 +vt 0.4063 0.0625 +vt 0.5 0.0938 +vt 0.5 0.0625 +vt 0.4063 0.0625 +vt 0.4063 0.0938 +vt 0.4375 0 +vt 0.4375 0.0625 +vt 0.5313 0.0625 +vt 0.5313 0 +vt 0.3125 0 +vt 0.3125 0.0625 +vt 0.4063 0.0625 +vt 0.4063 0 +vt 0.25 0.9063 +vt 0.25 1 +vt 0.3125 1 +vt 0.3125 0.9063 +vt 0.25 0.9063 +vt 0.25 1 +vt 0.3125 1 +vt 0.3125 0.9063 +vt 0.8125 1 +vt 0.8125 0.9375 +vt 0.5625 0.9375 +vt 0.5625 1 +vt 0.5625 0.9375 +vt 0.5625 1 +vt 0.8125 1 +vt 0.8125 0.9375 +vt 0.3125 0.9063 +vt 0.3125 1 +vt 0.5625 1 +vt 0.5625 0.9063 +vt 0.3125 0.9063 +vt 0.3125 1 +vt 0.5625 1 +vt 0.5625 0.9063 +vt 0.0781 0.9844 +vt 0.0781 0.9531 +vt 0.0625 0.9531 +vt 0.0625 0.9844 +vt 0.0781 0.9531 +vt 0.0781 0.9844 +vt 0.0625 0.9844 +vt 0.0625 0.9531 +vt 0.0469 0.9531 +vt 0.0469 0.9844 +vt 0.0625 0.9844 +vt 0.0625 0.9531 +vt 0.0469 0.9844 +vt 0.0469 0.9531 +vt 0.0625 0.9531 +vt 0.0625 0.9844 +vt 0.0781 0.9844 +vt 0.0781 0.9531 +vt 0.0625 0.9531 +vt 0.0625 0.9844 +vt 0.0781 0.9531 +vt 0.0781 0.9844 +vt 0.0625 0.9844 +vt 0.0625 0.9531 +vt 0.0469 0.9531 +vt 0.0469 0.9844 +vt 0.0625 0.9844 +vt 0.0625 0.9531 +vt 0.0469 0.9844 +vt 0.0469 0.9531 +vt 0.0625 0.9531 +vt 0.0625 0.9844 +vt 0.0313 0.2969 +vt 0.0313 0.2656 +vt 0.3125 0.2656 +vt 0.3125 0.2969 +vt 0.0313 0.2969 +vt 0.0313 0.2656 +vt 0.3125 0.2656 +vt 0.3125 0.2969 +vt 0.0313 0.2656 +vt 0.0313 0.2969 +vt 0.3125 0.2969 +vt 0.3125 0.2656 +vt 0.3125 0.2969 +vt 0.3125 0.2656 +vt 0.0313 0.2656 +vt 0.0313 0.2969 +vt 0.2188 0.4531 +vt 0.2188 0.3594 +vt 0.3125 0.3594 +vt 0.3125 0.4531 +vt 0.2344 0.3594 +vt 0.2344 0.4531 +vt 0.2188 0.4531 +vt 0.2188 0.3594 +vt 0.3125 0.4531 +vt 0.3125 0.3594 +vt 0.2969 0.3594 +vt 0.2969 0.4531 +vt 0.2188 0.4531 +vt 0.2188 0.3594 +vt 0.2344 0.3594 +vt 0.2344 0.4531 +vt 0.2969 0.4531 +vt 0.2969 0.3594 +vt 0.3125 0.3594 +vt 0.3125 0.4531 +vt 0.3125 0.4531 +vt 0.3125 0.3594 +vt 0.2188 0.3594 +vt 0.2188 0.4531 +vt 0.2344 0.3594 +vt 0.2344 0.4531 +vt 0.2188 0.4531 +vt 0.2188 0.3594 +vt 0.3125 0.4531 +vt 0.3125 0.3594 +vt 0.2969 0.3594 +vt 0.2969 0.4531 +vt 0.2188 0.4531 +vt 0.2188 0.3594 +vt 0.2344 0.3594 +vt 0.2344 0.4531 +vt 0.2969 0.4531 +vt 0.2969 0.3594 +vt 0.3125 0.3594 +vt 0.3125 0.4531 +vt 0.6547 0.8906 +vt 0.5938 0.8906 +vt 0.5938 0.7969 +vt 0.6563 0.7969 +vt 0.6563 0.7969 +vt 0.6563 0.8906 +vt 0.5953 0.8906 +vt 0.5938 0.7969 +vt 0.6563 0.8906 +vt 0.6563 0.9219 +vt 0.5938 0.9219 +vt 0.5938 0.8906 +vt 0.5938 0.7969 +vt 0.5938 0.8906 +vt 0.5625 0.8906 +vt 0.5625 0.7969 +vt 0.6547 0.8906 +vt 0.5938 0.8906 +vt 0.5938 0.7969 +vt 0.6563 0.7969 +vt 0.6563 0.7969 +vt 0.6563 0.8906 +vt 0.5953 0.8906 +vt 0.5938 0.7969 +vt 0.6563 0.8906 +vt 0.6563 0.9219 +vt 0.5938 0.9219 +vt 0.5938 0.8906 +vt 0.5938 0.7969 +vt 0.5938 0.8906 +vt 0.5625 0.8906 +vt 0.5625 0.7969 +vt 0.1094 0.9219 +vt 0.0313 0.9217 +vt 0.0313 0.8594 +vt 0.1094 0.8595 +vt 0.0469 0.9217 +vt 0.125 0.9219 +vt 0.125 0.8595 +vt 0.0469 0.8594 +vt 0.1563 0.8594 +vt 0.1563 0.8906 +vt 0.2344 0.8906 +vt 0.2344 0.8594 +vt 0.2344 0.9219 +vt 0.2344 0.8906 +vt 0.1563 0.8906 +vt 0.1563 0.9219 +vt 0.25 0.9219 +vt 0.2188 0.9219 +vt 0.2188 0.8594 +vt 0.25 0.8594 +vt 0.0313 0.8594 +vt 0.0313 0.9217 +vt 0.1094 0.9219 +vt 0.1094 0.8595 +vt 0.125 0.8595 +vt 0.125 0.9219 +vt 0.0469 0.9217 +vt 0.0469 0.8594 +vt 0.2344 0.8906 +vt 0.1563 0.8906 +vt 0.1563 0.8594 +vt 0.2344 0.8594 +vt 0.1563 0.8906 +vt 0.2344 0.8906 +vt 0.2344 0.9219 +vt 0.1563 0.9219 +vt 0.2188 0.8594 +vt 0.2188 0.9219 +vt 0.25 0.9219 +vt 0.25 0.8594 +vt 0.3125 0.125 +vt 0.3125 0.4375 +vt 0.3438 0.4375 +vt 0.3438 0.125 +vt 0.3125 0.125 +vt 0.3125 0.4375 +vt 0.3438 0.4375 +vt 0.3438 0.125 +vt 0.3125 0.4688 +vt 0.3125 0.4375 +vt 0.3438 0.4375 +vt 0.3438 0.4688 +vt 0.3438 0.4688 +vt 0.3438 0.4375 +vt 0.3125 0.4375 +vt 0.3125 0.4688 +vt 0.3438 0.125 +vt 0.3438 0.4375 +vt 0.3125 0.4375 +vt 0.3125 0.125 +vt 0.3594 0.4688 +vt 0.3594 0.4219 +vt 0.3438 0.4219 +vt 0.3438 0.4688 +vt 0.5313 0.4688 +vt 0.5313 0.4219 +vt 0.5156 0.4219 +vt 0.5156 0.4688 +vt 0.3438 0.4688 +vt 0.3438 0.4531 +vt 0.5313 0.4531 +vt 0.5313 0.4688 +vt 0.3438 0.1563 +vt 0.3438 0.1719 +vt 0.5313 0.1719 +vt 0.5313 0.1563 +vt 0.375 0.4688 +vt 0.3438 0.4219 +vt 0.5313 0.4219 +vt 0.5313 0.4688 +vt 0.3438 0.4688 +vt 0.3438 0.4219 +vt 0.5313 0.4219 +vt 0.5 0.4688 +vt 0.5313 0.1563 +vt 0.5313 0.4219 +vt 0.3438 0.4219 +vt 0.3438 0.1563 +vt 0.3438 0.1563 +vt 0.3438 0.4219 +vt 0.3594 0.4219 +vt 0.3594 0.1563 +vt 0.3438 0.1563 +vt 0.3438 0.4219 +vt 0.5313 0.4219 +vt 0.5313 0.1563 +vt 0.5156 0.1563 +vt 0.5156 0.4219 +vt 0.5313 0.4219 +vt 0.5313 0.1563 +vt 0.3125 0.125 +vt 0.3125 0.4375 +vt 0.3438 0.4375 +vt 0.3438 0.125 +vt 0.3125 0.125 +vt 0.3125 0.4375 +vt 0.3438 0.4375 +vt 0.3438 0.125 +vt 0.3125 0.4688 +vt 0.3125 0.4375 +vt 0.3438 0.4375 +vt 0.3438 0.4688 +vt 0.3438 0.4688 +vt 0.3438 0.4375 +vt 0.3125 0.4375 +vt 0.3125 0.4688 +vt 0.3438 0.125 +vt 0.3438 0.4375 +vt 0.3125 0.4375 +vt 0.3125 0.125 +vt 0.3594 0.4688 +vt 0.3594 0.4219 +vt 0.3438 0.4219 +vt 0.3438 0.4688 +vt 0.5313 0.4688 +vt 0.5313 0.4219 +vt 0.5156 0.4219 +vt 0.5156 0.4688 +vt 0.3438 0.4688 +vt 0.3438 0.4531 +vt 0.5313 0.4531 +vt 0.5313 0.4688 +vt 0.3438 0.1563 +vt 0.3438 0.1719 +vt 0.5313 0.1719 +vt 0.5313 0.1563 +vt 0.5313 0.4688 +vt 0.5313 0.4219 +vt 0.3438 0.4219 +vt 0.375 0.4688 +vt 0.375 0.4688 +vt 0.3438 0.4219 +vt 0.5313 0.4219 +vt 0.5313 0.4688 +vt 0.5313 0.1563 +vt 0.5313 0.4219 +vt 0.3438 0.4219 +vt 0.3438 0.1563 +vt 0.3438 0.1563 +vt 0.3438 0.4219 +vt 0.3594 0.4219 +vt 0.3594 0.1563 +vt 0.3438 0.1563 +vt 0.3438 0.4219 +vt 0.5313 0.4219 +vt 0.5313 0.1563 +vt 0.5156 0.1563 +vt 0.5156 0.4219 +vt 0.5313 0.4219 +vt 0.5313 0.1563 +vt 0 0.7656 +vt 0 0.8594 +vt 0.0156 0.8594 +vt 0.0156 0.7656 +vt 0 0.7656 +vt 0 0.8594 +vt 0.0156 0.8594 +vt 0.0156 0.7656 +vt 0.1406 0.8594 +vt 0.1406 0.8438 +vt 0 0.8438 +vt 0 0.8594 +vt 0.1406 0.8438 +vt 0.1406 0.8594 +vt 0 0.8594 +vt 0 0.8438 +vt 0 0.7656 +vt 0 0.8594 +vt 0.1406 0.8594 +vt 0.1406 0.7656 +vn -1 0 0 +vn 1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn -0.71 0 0.71 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0.71 0 0.71 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0.98 -0.17 +vn 0 -0.98 0.17 +vn 0 0.17 0.98 +vn 0 -0.17 -0.98 +vn 0 0.98 -0.17 +vn 0 -0.98 0.17 +vn 0 0.17 0.98 +vn 0 -0.17 -0.98 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0.01 +vn 0 -1 -0.01 +vn 0 -0.01 1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0.01 +vn 0 -1 -0.01 +vn 0 -0.01 1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0.01 +vn 0 -1 -0.01 +vn 0 -0.01 1 +vn 1 0 0 +vn -0.83 0.55 0 +vn 0 1 0.01 +vn 0 -1 -0.01 +vn 0 -0.01 1 +vn 0 0.01 -1 +vn 0 0.01 -1 +vn 1 0 0 +vn 0 -0.01 1 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0.01 +vn 0 -1 -0.01 +vn 0 -0.01 1 +vn 0.83 0.55 0 +vn -1 0 0 +vn 0 1 0.01 +vn 0 -1 -0.01 +vn 0 -0.01 1 +vn 0 0.01 -1 +vn 0 0.01 -1 +vn 1 0 0 +vn 0 -0.01 1 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0.01 +vn 0 -1 -0.01 +vn 0 -0.01 1 +usemtl field_howitzer_paint +f 4/1/1 2/2/1 1/3/1 3/4/1 +f 7/5/2 5/6/2 6/7/2 8/8/2 +f 1/9/3 2/10/3 6/11/3 5/12/3 +f 4/13/4 3/14/4 7/15/4 8/16/4 +f 3/17/5 1/18/5 5/19/5 7/20/5 +f 8/21/6 6/22/6 2/23/6 4/24/6 +f 12/25/7 10/26/7 9/27/7 11/28/7 +f 15/29/8 13/30/8 14/31/8 16/32/8 +f 9/33/9 10/34/9 14/35/9 13/36/9 +f 12/37/10 11/38/10 15/39/10 16/40/10 +f 17/41/11 18/42/11 22/43/11 21/44/11 +f 20/45/12 19/46/12 23/47/12 24/48/12 +f 19/49/13 17/50/13 21/51/13 23/52/13 +f 24/53/14 22/54/14 18/55/14 20/56/14 +f 28/57/15 26/58/15 25/59/15 27/60/15 +f 31/61/16 29/62/16 30/63/16 32/64/16 +f 25/65/17 26/66/17 30/67/17 29/68/17 +f 28/69/18 27/70/18 31/71/18 32/72/18 +f 27/73/19 25/74/19 29/75/19 31/76/19 +f 32/77/20 30/78/20 26/79/20 28/80/20 +f 36/81/21 34/82/21 33/83/21 35/84/21 +f 39/85/22 37/86/22 38/87/22 40/88/22 +f 33/89/23 34/90/23 38/91/23 37/92/23 +f 36/93/24 35/94/24 39/95/24 40/96/24 +f 44/97/25 42/98/25 41/99/25 43/100/25 +f 47/101/26 45/102/26 46/103/26 48/104/26 +f 41/105/27 42/106/27 46/107/27 45/108/27 +f 44/109/28 43/110/28 47/111/28 48/112/28 +f 43/113/29 41/114/29 45/115/29 47/116/29 +f 48/117/30 46/118/30 42/119/30 44/120/30 +f 52/121/31 50/122/31 49/123/31 51/124/31 +f 55/125/32 53/126/32 54/127/32 56/128/32 +f 49/129/33 50/130/33 54/131/33 53/132/33 +f 52/133/34 51/134/34 55/135/34 56/136/34 +f 60/137/35 58/138/35 57/139/35 59/140/35 +f 63/141/36 61/142/36 62/143/36 64/144/36 +f 57/145/37 58/146/37 62/147/37 61/148/37 +f 60/149/38 59/150/38 63/151/38 64/152/38 +f 68/153/39 66/154/39 65/155/39 67/156/39 +f 71/157/40 69/158/40 70/159/40 72/160/40 +f 65/161/41 66/162/41 70/163/41 69/164/41 +f 68/165/42 67/166/42 71/167/42 72/168/42 +f 67/169/43 65/170/43 69/171/43 71/172/43 +f 72/173/44 70/174/44 66/175/44 68/176/44 +usemtl field_howitzer +f 76/177/45 74/178/45 73/179/45 75/180/45 +f 79/181/46 77/182/46 78/183/46 80/184/46 +f 73/185/47 74/186/47 78/187/47 77/188/47 +f 76/189/48 75/190/48 79/191/48 80/192/48 +f 75/193/49 73/194/49 77/195/49 79/196/49 +f 80/197/50 78/198/50 74/199/50 76/200/50 +f 81/201/51 82/202/51 86/203/51 85/204/51 +f 84/205/52 83/206/52 87/207/52 88/208/52 +f 83/209/53 81/210/53 85/211/53 87/212/53 +f 88/213/54 86/214/54 82/215/54 84/216/54 +f 89/217/55 90/218/55 94/219/55 93/220/55 +f 92/221/56 91/222/56 95/223/56 96/224/56 +f 91/225/57 89/226/57 93/227/57 95/228/57 +f 96/229/58 94/230/58 90/231/58 92/232/58 +f 97/233/59 98/234/59 102/235/59 101/236/59 +f 100/237/60 99/238/60 103/239/60 104/240/60 +f 99/241/61 97/242/61 101/243/61 103/244/61 +f 104/245/62 102/246/62 98/247/62 100/248/62 +f 111/249/63 109/250/63 110/251/63 112/252/63 +f 105/253/64 106/254/64 110/255/64 109/256/64 +f 108/257/65 107/258/65 111/259/65 112/260/65 +f 107/261/66 105/262/66 109/263/66 111/264/66 +f 112/265/67 110/266/67 106/267/67 108/268/67 +f 116/269/68 114/270/68 113/271/68 115/272/68 +f 113/273/69 114/274/69 118/275/69 117/276/69 +f 116/277/70 115/278/70 119/279/70 120/280/70 +f 115/281/71 113/282/71 117/283/71 119/284/71 +f 120/285/72 118/286/72 114/287/72 116/288/72 +f 122/289/73 121/290/73 123/291/73 124/292/73 +f 127/293/74 125/294/74 126/295/74 128/296/74 +f 125/297/75 121/298/75 122/299/75 126/300/75 +f 123/301/76 121/302/76 125/303/76 127/304/76 +f 130/305/77 129/306/77 131/307/77 132/308/77 +f 135/309/78 133/310/78 134/311/78 136/312/78 +f 133/313/79 129/314/79 130/315/79 134/316/79 +f 131/317/80 129/318/80 133/319/80 135/320/80 +f 137/321/81 138/322/81 140/323/81 139/324/81 +f 142/325/82 141/326/82 143/327/82 144/328/82 +f 142/329/83 138/330/83 137/331/83 141/332/83 +f 143/333/84 139/334/84 140/335/84 144/336/84 +f 141/337/85 137/338/85 139/339/85 143/340/85 +f 148/341/86 146/342/86 145/343/86 147/344/86 +f 151/345/87 149/346/87 150/347/87 152/348/87 +f 145/349/88 146/350/88 150/351/88 149/352/88 +f 148/353/89 147/354/89 151/355/89 152/356/89 +f 147/357/90 145/358/90 149/359/90 151/360/90 +usemtl field_howitzer_paint +f 156/361/91 154/362/91 153/363/91 155/364/91 +f 159/365/92 157/366/92 158/367/92 160/368/92 +f 153/369/93 154/370/93 158/371/93 157/372/93 +f 156/373/94 155/374/94 159/375/94 160/376/94 +f 155/377/95 153/378/95 157/379/95 159/380/95 +f 161/381/96 171/382/96 170/383/96 162/384/96 +f 166/385/97 169/386/97 172/387/97 165/388/97 +f 161/389/98 162/390/98 166/391/98 165/392/98 +f 164/393/99 163/394/99 167/395/99 168/396/99 +f 165/397/100 172/398/100 171/399/100 161/400/100 +f 162/401/101 170/402/101 169/403/101 166/404/101 +f 168/405/102 169/406/102 170/407/102 164/408/102 +f 164/409/103 170/410/103 171/411/103 163/412/103 +f 163/413/104 171/414/104 172/415/104 167/416/104 +f 167/417/105 172/418/105 169/419/105 168/420/105 +f 176/421/106 174/422/106 173/423/106 175/424/106 +f 179/425/107 177/426/107 178/427/107 180/428/107 +f 173/429/108 174/430/108 178/431/108 177/432/108 +f 176/433/109 175/434/109 179/435/109 180/436/109 +f 175/437/110 173/438/110 177/439/110 179/440/110 +f 181/441/111 191/442/111 190/443/111 182/444/111 +f 186/445/112 189/446/112 192/447/112 185/448/112 +f 181/449/113 182/450/113 186/451/113 185/452/113 +f 184/453/114 183/454/114 187/455/114 188/456/114 +f 185/457/115 192/458/115 191/459/115 181/460/115 +f 182/461/116 190/462/116 189/463/116 186/464/116 +f 188/465/117 189/466/117 190/467/117 184/468/117 +f 184/469/118 190/470/118 191/471/118 183/472/118 +f 183/473/119 191/474/119 192/475/119 187/476/119 +f 187/477/120 192/478/120 189/479/120 188/480/120 +usemtl field_howitzer +f 196/481/121 194/482/121 193/483/121 195/484/121 +f 199/485/122 197/486/122 198/487/122 200/488/122 +f 193/489/123 194/490/123 198/491/123 197/492/123 +f 196/493/124 195/494/124 199/495/124 200/496/124 +f 195/497/125 193/498/125 197/499/125 199/500/125 +o howi +v 0.25 1.3757 -0.7532 +v 0.25 1.3757 -1.2532 +v 0.25 1.3132 -0.7532 +v 0.25 1.3132 -1.2532 +v -0.125 1.3757 -0.7532 +v -0.125 1.3757 -1.2532 +v -0.125 1.3132 -0.7532 +v -0.125 1.3132 -1.2532 +v 0.3125 1.3757 -0.1282 +v 0.3125 1.3757 -1.2532 +v 0.3125 0.9382 -0.1282 +v 0.3125 0.9382 -1.2532 +v 0.25 1.3757 -0.1282 +v 0.25 1.3757 -1.2532 +v 0.25 0.9382 -0.1282 +v 0.25 0.9382 -1.2532 +v 0.3125 1.3757 -0.6907 +v 0.3125 0.9382 -0.6907 +v 0.25 0.9382 -0.6907 +v 0.25 1.3757 -0.6907 +v 0.3125 0.9382 -0.1282 +v 0.3125 0.9382 -1.2532 +v 0.3125 0.8757 -0.1282 +v 0.3125 0.8757 -1.2532 +v -0.1875 0.9382 -0.1282 +v -0.1875 0.9382 -1.2532 +v -0.1875 0.8757 -0.1282 +v -0.1875 0.8757 -1.2532 +v 0.3125 0.8757 -0.6907 +v -0.1875 0.8757 -0.6907 +v -0.1875 0.9382 -0.6907 +v 0.3125 0.9382 -0.6907 +v -0.125 1.3757 -0.1282 +v -0.125 1.3757 -1.2532 +v -0.125 0.9382 -0.1282 +v -0.125 0.9382 -1.2532 +v -0.1875 1.3757 -0.1282 +v -0.1875 1.3757 -1.2532 +v -0.1875 0.9382 -0.1282 +v -0.1875 0.9382 -1.2532 +v -0.125 1.3757 -0.6907 +v -0.125 0.9382 -0.6907 +v -0.1875 0.9382 -0.6907 +v -0.1875 1.3757 -0.6907 +v 0.1875 0.875 -0.0625 +v 0.1875 0.875 -1.3125 +v 0.1875 0.75 -0.0625 +v 0.1875 0.75 -1.3125 +v -0.0625 0.875 -0.0625 +v -0.0625 0.875 -1.3125 +v -0.0625 0.75 -0.0625 +v -0.0625 0.75 -1.3125 +vt 0.5313 0.7344 +vt 0.6563 0.7344 +vt 0.6563 0.6406 +vt 0.5313 0.6406 +vt 0.6563 0.7188 +vt 0.5313 0.7188 +vt 0.5313 0.625 +vt 0.6563 0.625 +vt 0.8281 0.4375 +vt 0.8125 0.4375 +vt 0.8125 0.3438 +vt 0.8281 0.3438 +vt 0.6719 0.625 +vt 0.6563 0.625 +vt 0.6563 0.7188 +vt 0.6719 0.7188 +vt 0.5156 0.6406 +vt 0.6563 0.6406 +vt 0.6563 0.75 +vt 0.5156 0.75 +vt 0.875 0.4688 +vt 0.7344 0.4688 +vt 0.7344 0.3594 +vt 0.875 0.3594 +vt 0.6719 0.75 +vt 0.5313 0.75 +vt 0.5313 0.7344 +vt 0.6719 0.7344 +vt 0.625 0.6406 +vt 0.625 0.75 +vt 0.6094 0.75 +vt 0.6094 0.6406 +vt 0.6406 0.6406 +vt 0.6406 0.75 +vt 0.625 0.75 +vt 0.625 0.6406 +vt 0.6719 0.75 +vt 0.5313 0.75 +vt 0.5313 0.6406 +vt 0.6719 0.6406 +vt 0.7188 0.3438 +vt 0.8594 0.3438 +vt 0.8594 0.4531 +vt 0.7188 0.4531 +vt 0.5156 0.7344 +vt 0.6563 0.7344 +vt 0.6563 0.75 +vt 0.5156 0.75 +vt 0.5156 0.625 +vt 0.6563 0.625 +vt 0.6563 0.6406 +vt 0.5156 0.6406 +vt 0.6563 0.75 +vt 0.5156 0.75 +vt 0.5156 0.7344 +vt 0.6563 0.7344 +vt 0.8594 0.3438 +vt 0.7188 0.3438 +vt 0.7188 0.4688 +vt 0.8594 0.4688 +vt 0.6563 0.75 +vt 0.5156 0.75 +vt 0.5156 0.625 +vt 0.6563 0.625 +vt 0.6094 0.625 +vt 0.5938 0.625 +vt 0.5938 0.75 +vt 0.6094 0.75 +vt 0.5938 0.75 +vt 0.5781 0.75 +vt 0.5781 0.625 +vt 0.5938 0.625 +vt 0.6563 0.625 +vt 0.5156 0.625 +vt 0.5156 0.75 +vt 0.6563 0.75 +vt 0.5313 0.7344 +vt 0.6719 0.7344 +vt 0.6719 0.75 +vt 0.5313 0.75 +vt 0.7188 0.4688 +vt 0.8594 0.4688 +vt 0.8594 0.3438 +vt 0.7188 0.3438 +vt 0.6719 0.6406 +vt 0.5313 0.6406 +vt 0.5313 0.625 +vt 0.6719 0.625 +vt 0.7188 0.4531 +vt 0.8594 0.4531 +vt 0.8594 0.3438 +vt 0.7188 0.3438 +vt 0.6719 0.625 +vt 0.5313 0.625 +vt 0.5313 0.7344 +vt 0.6719 0.7344 +vt 0.6719 0.6406 +vt 0.5313 0.6406 +vt 0.5313 0.625 +vt 0.6719 0.625 +vt 0.625 0.75 +vt 0.625 0.6406 +vt 0.6094 0.6406 +vt 0.6094 0.75 +vt 0.6406 0.75 +vt 0.6406 0.6406 +vt 0.625 0.6406 +vt 0.625 0.75 +vt 0.875 0.3438 +vt 0.7344 0.3438 +vt 0.7344 0.4531 +vt 0.875 0.4531 +vt 0.5313 0.7344 +vt 0.6719 0.7344 +vt 0.6719 0.625 +vt 0.5313 0.625 +vt 0.5156 0.625 +vt 0.6563 0.625 +vt 0.6563 0.6406 +vt 0.5156 0.6406 +vt 0.5625 0.4688 +vt 0.5313 0.4688 +vt 0.5313 0.1563 +vt 0.5625 0.1563 +vt 0.7188 0.1563 +vt 0.6875 0.1563 +vt 0.6875 0.4688 +vt 0.7188 0.4688 +vt 0.625 0.4688 +vt 0.625 0.1563 +vt 0.5625 0.1563 +vt 0.5625 0.4688 +vt 0.6875 0.1563 +vt 0.6875 0.4688 +vt 0.625 0.4688 +vt 0.625 0.1563 +vt 0.6875 0.125 +vt 0.6875 0.1563 +vt 0.625 0.1563 +vt 0.625 0.125 +vt 0.625 0.125 +vt 0.625 0.1563 +vt 0.6875 0.1563 +vt 0.6875 0.125 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn -1 0 0 +vn 0 1 0 +vn 1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +usemtl field_howitzer +f 201/501/126 202/502/126 206/503/126 205/504/126 +f 204/505/127 203/506/127 207/507/127 208/508/127 +f 203/509/128 201/510/128 205/511/128 207/512/128 +f 208/513/129 206/514/129 202/515/129 204/516/129 +f 211/517/130 218/518/130 217/519/130 209/520/130 +f 213/521/131 220/522/131 219/523/131 215/524/131 +f 209/525/132 217/526/132 220/527/132 213/528/132 +f 211/529/133 209/530/133 213/531/133 215/532/133 +f 216/533/134 214/534/134 210/535/134 212/536/134 +f 210/537/135 217/538/135 218/539/135 212/540/135 +f 216/541/136 219/542/136 220/543/136 214/544/136 +f 214/545/137 220/546/137 217/547/137 210/548/137 +f 223/549/138 229/550/138 232/551/138 221/552/138 +f 225/553/139 231/554/139 230/555/139 227/556/139 +f 221/557/140 232/558/140 231/559/140 225/560/140 +f 227/561/141 230/562/141 229/563/141 223/564/141 +f 223/565/142 221/566/142 225/567/142 227/568/142 +f 228/569/143 226/570/143 222/571/143 224/572/143 +f 224/573/144 229/574/144 230/575/144 228/576/144 +f 228/577/145 230/578/145 231/579/145 226/580/145 +f 226/581/146 231/582/146 232/583/146 222/584/146 +f 222/585/147 232/586/147 229/587/147 224/588/147 +f 235/589/148 242/590/148 241/591/148 233/592/148 +f 237/593/149 244/594/149 243/595/149 239/596/149 +f 233/597/150 241/598/150 244/599/150 237/600/150 +f 235/601/151 233/602/151 237/603/151 239/604/151 +f 240/605/152 238/606/152 234/607/152 236/608/152 +f 234/609/153 241/610/153 242/611/153 236/612/153 +f 240/613/154 243/614/154 244/615/154 238/616/154 +f 238/617/155 244/618/155 241/619/155 234/620/155 +f 248/621/156 246/622/156 245/623/156 247/624/156 +f 251/625/157 249/626/157 250/627/157 252/628/157 +f 245/629/158 246/630/158 250/631/158 249/632/158 +f 248/633/159 247/634/159 251/635/159 252/636/159 +f 247/637/160 245/638/160 249/639/160 251/640/160 +f 252/641/161 250/642/161 246/643/161 248/644/161 +o breech +v 0.25 1.3757 -0.1282 +v 0.25 1.3757 -0.7532 +v 0.25 1.3132 -0.1282 +v 0.25 1.3132 -0.7532 +v -0.125 1.3757 -0.1282 +v -0.125 1.3757 -0.7532 +v -0.125 1.3132 -0.1282 +v -0.125 1.3132 -0.7532 +vt 0.9688 0.625 +vt 0.9531 0.625 +vt 0.9531 0.4688 +vt 0.9688 0.4688 +vt 0.875 0.4688 +vt 0.8906 0.4688 +vt 0.8906 0.625 +vt 0.875 0.625 +vt 0.4063 0.7813 +vt 0.4063 0.625 +vt 0.3125 0.625 +vt 0.3125 0.7813 +vt 0.9688 0.4688 +vt 0.9688 0.625 +vt 0.875 0.625 +vt 0.875 0.4688 +vt 0.9688 0.625 +vt 0.9688 0.6094 +vt 0.875 0.6094 +vt 0.875 0.625 +vt 0.875 0.4688 +vt 0.875 0.4844 +vt 0.9688 0.4844 +vt 0.9688 0.4688 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +usemtl field_howitzer +f 256/645/162 254/646/162 253/647/162 255/648/162 +f 259/649/163 257/650/163 258/651/163 260/652/163 +f 253/653/164 254/654/164 258/655/164 257/656/164 +f 256/657/165 255/658/165 259/659/165 260/660/165 +f 255/661/166 253/662/166 257/663/166 259/664/166 +f 260/665/167 258/666/167 254/667/167 256/668/167 +o gun +v 0.25 1.3132 -0.8157 +v 0.25 1.3132 -1.3782 +v 0.25 1.2507 -0.8157 +v 0.25 1.2507 -1.3782 +v -0.125 1.3132 -0.8157 +v -0.125 1.3132 -1.3782 +v -0.125 1.2507 -0.8157 +v -0.125 1.2507 -1.3782 +v 0.25 1.3132 -1.1907 +v -0.125 1.3132 -1.1907 +v -0.125 1.2507 -1.1907 +v 0.25 1.2507 -1.1907 +v 0.25 1.2507 -0.8157 +v 0.25 1.2507 -1.3782 +v 0.25 1.0007 -0.8157 +v 0.25 1.0007 -1.3782 +v 0.1875 1.2507 -0.8157 +v 0.1875 1.2507 -1.3782 +v 0.1875 1.0007 -0.8157 +v 0.1875 1.0007 -1.3782 +v 0.25 1.2507 -1.1907 +v 0.25 1.0007 -1.1907 +v 0.1875 1.0007 -1.1907 +v 0.1875 1.2507 -1.1907 +v -0.125 0.9382 -0.8157 +v -0.125 0.9382 -1.3782 +v -0.125 1.0007 -0.8157 +v -0.125 1.0007 -1.3782 +v 0.25 0.9382 -0.8157 +v 0.25 0.9382 -1.3782 +v 0.25 1.0007 -0.8157 +v 0.25 1.0007 -1.3782 +v -0.125 0.9382 -1.1907 +v 0.25 0.9382 -1.1907 +v 0.25 1.0007 -1.1907 +v -0.125 1.0007 -1.1907 +v -0.125 1.0007 -0.8157 +v -0.125 1.0007 -1.3782 +v -0.125 1.2507 -0.8157 +v -0.125 1.2507 -1.3782 +v -0.0625 1.0007 -0.8157 +v -0.0625 1.0007 -1.3782 +v -0.0625 1.2507 -0.8157 +v -0.0625 1.2507 -1.3782 +v -0.125 1.0007 -1.1907 +v -0.125 1.2507 -1.1907 +v -0.0625 1.2507 -1.1907 +v -0.0625 1.0007 -1.1907 +v 0.25 1.3132 -0.7532 +v 0.25 1.3132 -0.8157 +v 0.25 0.9382 -0.7532 +v 0.25 0.9382 -0.8157 +v -0.125 1.3132 -0.7532 +v -0.125 1.3132 -0.8157 +v -0.125 0.9382 -0.7532 +v -0.125 0.9382 -0.8157 +v 0.3125 1.3757 0.1218 +v 0.3125 1.3757 -0.1282 +v 0.3125 0.8757 0.1218 +v 0.3125 0.8757 -0.1282 +v -0.1875 1.3757 0.1218 +v -0.1875 1.3757 -0.1282 +v -0.1875 0.8757 0.1218 +v -0.1875 0.8757 -0.1282 +v -0.125 1.3132 -1.0032 +v 0.25 1.3132 -1.0032 +v -0.125 0.9382 -1.0032 +v 0.25 0.9382 -1.0032 +vt 0.7031 0.8438 +vt 0.6563 0.8438 +vt 0.6563 0.8281 +vt 0.7031 0.8281 +vt 0.6563 0.75 +vt 0.7031 0.75 +vt 0.7031 0.7656 +vt 0.6563 0.7656 +vt 0.6563 0.75 +vt 0.7031 0.75 +vt 0.7031 0.8438 +vt 0.6563 0.8438 +vt 0.1406 0.5469 +vt 0.0938 0.5469 +vt 0.0938 0.6406 +vt 0.1406 0.6406 +vt 0.7813 0.75 +vt 0.7813 0.7656 +vt 0.6875 0.7656 +vt 0.6875 0.75 +vt 0.7813 0.8281 +vt 0.7813 0.8438 +vt 0.6875 0.8438 +vt 0.6875 0.8281 +vt 0.6719 0.6563 +vt 0.5781 0.6563 +vt 0.5781 0.75 +vt 0.6719 0.75 +vt 0.6719 0.7188 +vt 0.5781 0.7188 +vt 0.5781 0.7031 +vt 0.6719 0.7031 +vt 0 0.6406 +vt 0.0938 0.6406 +vt 0.0938 0.5469 +vt 0 0.5469 +vt 0.5469 0.6563 +vt 0.6406 0.6563 +vt 0.6406 0.6719 +vt 0.5469 0.6719 +vt 0.5469 0.7344 +vt 0.6406 0.7344 +vt 0.6406 0.6719 +vt 0.5469 0.6719 +vt 0.7031 0.7656 +vt 0.7031 0.8281 +vt 0.6875 0.8281 +vt 0.6875 0.7656 +vt 0.7031 0.8281 +vt 0.6563 0.8281 +vt 0.6563 0.7656 +vt 0.7031 0.7656 +vt 0.0781 0.625 +vt 0.125 0.625 +vt 0.125 0.5625 +vt 0.0781 0.5625 +vt 0.7031 0.8438 +vt 0.6563 0.8438 +vt 0.6563 0.8281 +vt 0.7031 0.8281 +vt 0.6563 0.75 +vt 0.7031 0.75 +vt 0.7031 0.7656 +vt 0.6563 0.7656 +vt 0.6563 0.75 +vt 0.7031 0.75 +vt 0.7031 0.8438 +vt 0.6563 0.8438 +vt 0.1406 0.5469 +vt 0.0938 0.5469 +vt 0.0938 0.6406 +vt 0.1406 0.6406 +vt 0.5625 0.6563 +vt 0.5781 0.6563 +vt 0.5781 0.75 +vt 0.5625 0.75 +vt 0.7813 0.8281 +vt 0.7813 0.8438 +vt 0.6875 0.8438 +vt 0.6875 0.8281 +vt 0.6719 0.6563 +vt 0.5781 0.6563 +vt 0.5781 0.75 +vt 0.6719 0.75 +vt 0.6719 0.7188 +vt 0.5781 0.7188 +vt 0.5781 0.7031 +vt 0.6719 0.7031 +vt 0 0.6406 +vt 0.0938 0.6406 +vt 0.0938 0.5469 +vt 0 0.5469 +vt 0.5469 0.6563 +vt 0.6406 0.6563 +vt 0.6406 0.6719 +vt 0.5469 0.6719 +vt 0.5469 0.7344 +vt 0.6406 0.7344 +vt 0.6406 0.6719 +vt 0.5469 0.6719 +vt 0.7031 0.7656 +vt 0.7031 0.8281 +vt 0.6875 0.8281 +vt 0.6875 0.7656 +vt 0.7031 0.8281 +vt 0.6563 0.8281 +vt 0.6563 0.7656 +vt 0.7031 0.7656 +vt 0.0938 0.625 +vt 0.1406 0.625 +vt 0.1406 0.5625 +vt 0.0938 0.5625 +vt 0.7031 0.75 +vt 0.7031 0.8438 +vt 0.6875 0.8438 +vt 0.6875 0.75 +vt 0.7813 0.75 +vt 0.7813 0.8438 +vt 0.7656 0.8438 +vt 0.7656 0.75 +vt 0.9688 0.625 +vt 0.9688 0.7188 +vt 0.875 0.7188 +vt 0.875 0.625 +vt 0.7813 0.8281 +vt 0.7813 0.8438 +vt 0.6875 0.8438 +vt 0.6875 0.8281 +vt 0.375 0.7813 +vt 0.375 0.9063 +vt 0.4375 0.9063 +vt 0.4375 0.7813 +vt 0.4375 0.7813 +vt 0.4375 0.9063 +vt 0.375 0.9063 +vt 0.375 0.7813 +vt 0.4375 0.9063 +vt 0.375 0.9063 +vt 0.375 0.7813 +vt 0.4375 0.7813 +vt 0.375 0.7813 +vt 0.4375 0.7813 +vt 0.4375 0.9063 +vt 0.375 0.9063 +vt 0.4375 0.7813 +vt 0.4375 0.9063 +vt 0.5625 0.9063 +vt 0.5625 0.7813 +vt 0.25 0.7813 +vt 0.25 0.9063 +vt 0.375 0.9063 +vt 0.375 0.7813 +vt 0.6875 0.75 +vt 0.6875 0.8438 +vt 0.7813 0.8438 +vt 0.7813 0.75 +vt 0.0938 0.5625 +vt 0 0.5625 +vt 0 0.625 +vt 0.0938 0.625 +vt 0.6406 0.7188 +vt 0.6406 0.6563 +vt 0.625 0.6563 +vt 0.625 0.7188 +vt 0.0938 0.5625 +vt 0 0.5625 +vt 0 0.625 +vt 0.0938 0.625 +vt 0.7031 0.7656 +vt 0.7031 0.8281 +vt 0.6875 0.8281 +vt 0.6875 0.7656 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 1 0 +vn -1 0 0 +vn 0 -1 0 +vn 1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 1 0 0 +vn 0 1 0 +vn -1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 -1 +vn -1 0 0 +vn 0 0 1 +vn 1 0 0 +vn 0 0 1 +usemtl field_howitzer +f 262/669/168 269/670/168 272/671/168 264/672/168 +f 268/673/169 271/674/169 270/675/169 266/676/169 +f 266/677/170 270/678/170 269/679/170 262/680/170 +f 264/681/171 272/682/171 271/683/171 268/684/171 +f 263/685/172 261/686/172 265/687/172 267/688/172 +f 268/689/173 266/690/173 262/691/173 264/692/173 +f 261/693/174 269/694/174 270/695/174 265/696/174 +f 265/697/175 270/698/175 271/699/175 267/700/175 +f 267/701/176 271/702/176 272/703/176 263/704/176 +f 263/705/177 272/706/177 269/707/177 261/708/177 +f 275/709/178 282/710/178 281/711/178 273/712/178 +f 280/713/179 278/714/179 274/715/179 276/716/179 +f 274/717/180 281/718/180 282/719/180 276/720/180 +f 280/721/181 283/722/181 284/723/181 278/724/181 +f 286/725/182 293/726/182 296/727/182 288/728/182 +f 292/729/183 295/730/183 294/731/183 290/732/183 +f 290/733/184 294/734/184 293/735/184 286/736/184 +f 288/737/185 296/738/185 295/739/185 292/740/185 +f 287/741/186 285/742/186 289/743/186 291/744/186 +f 292/745/187 290/746/187 286/747/187 288/748/187 +f 285/749/188 293/750/188 294/751/188 289/752/188 +f 289/753/189 294/754/189 295/755/189 291/756/189 +f 291/757/190 295/758/190 296/759/190 287/760/190 +f 287/761/191 296/762/191 293/763/191 285/764/191 +f 299/765/192 306/766/192 305/767/192 297/768/192 +f 304/769/193 302/770/193 298/771/193 300/772/193 +f 298/773/194 305/774/194 306/775/194 300/776/194 +f 304/777/195 307/778/195 308/779/195 302/780/195 +f 312/781/196 310/782/196 309/783/196 311/784/196 +f 315/785/197 313/786/197 314/787/197 316/788/197 +f 311/789/198 309/790/198 313/791/198 315/792/198 +f 309/793/199 310/794/199 314/795/199 313/796/199 +f 320/797/200 318/798/200 317/799/200 319/800/200 +f 323/801/201 321/802/201 322/803/201 324/804/201 +f 317/805/202 318/806/202 322/807/202 321/808/202 +f 320/809/203 319/810/203 323/811/203 324/812/203 +f 319/813/204 317/814/204 321/815/204 323/816/204 +f 324/817/205 322/818/205 318/819/205 320/820/205 +f 327/821/206 325/822/206 326/823/206 328/824/206 +f 277/825/207 284/826/207 283/827/207 279/828/207 +f 275/829/208 273/830/208 277/831/208 279/832/208 +f 301/833/209 308/834/209 307/835/209 303/836/209 +f 299/837/210 297/838/210 301/839/210 303/840/210 +o bolt +v -0.125 1.0007 -0.0657 +v -0.125 1.0007 -0.1907 +v -0.125 1.2507 -0.0657 +v -0.125 1.2507 -0.1907 +v -0.0625 1.0007 -0.0657 +v -0.0625 1.0007 -0.1907 +v -0.0625 1.2507 -0.0657 +v -0.0625 1.2507 -0.1907 +v -0.125 0.9382 -0.0657 +v -0.125 0.9382 -0.1907 +v -0.125 1.0007 -0.0657 +v -0.125 1.0007 -0.1907 +v 0.25 0.9382 -0.0657 +v 0.25 0.9382 -0.1907 +v 0.25 1.0007 -0.0657 +v 0.25 1.0007 -0.1907 +v 0.25 1.3132 -0.0657 +v 0.25 1.3132 -0.1907 +v 0.25 1.2507 -0.0657 +v 0.25 1.2507 -0.1907 +v -0.125 1.3132 -0.0657 +v -0.125 1.3132 -0.1907 +v -0.125 1.2507 -0.0657 +v -0.125 1.2507 -0.1907 +v 0.25 1.2507 -0.0657 +v 0.25 1.2507 -0.1907 +v 0.25 1.0007 -0.0657 +v 0.25 1.0007 -0.1907 +v 0.1875 1.2507 -0.0657 +v 0.1875 1.2507 -0.1907 +v 0.1875 1.0007 -0.0657 +v 0.1875 1.0007 -0.1907 +vt 0.8125 0.4063 +vt 0.8125 0.3438 +vt 0.7813 0.3438 +vt 0.7813 0.4063 +vt 0.8125 0.4063 +vt 0.8125 0.3438 +vt 0.7813 0.3438 +vt 0.7813 0.4063 +vt 0.8281 0.4063 +vt 0.8281 0.3438 +vt 0.8125 0.3438 +vt 0.8125 0.4063 +vt 0.8125 0.4063 +vt 0.8125 0.3438 +vt 0.7969 0.3438 +vt 0.7969 0.4063 +vt 0.9063 0.5469 +vt 0.9063 0.5625 +vt 0.875 0.5625 +vt 0.875 0.5469 +vt 0.8281 0.5469 +vt 0.8281 0.5625 +vt 0.7969 0.5625 +vt 0.7969 0.5469 +vt 0.8906 0.5313 +vt 0.8906 0.5625 +vt 0.7969 0.5625 +vt 0.7969 0.5313 +vt 0.8906 0.5313 +vt 0.8906 0.5625 +vt 0.7969 0.5625 +vt 0.7969 0.5313 +vt 0.8906 0.5469 +vt 0.8906 0.5625 +vt 0.7969 0.5625 +vt 0.7969 0.5469 +vt 0.7969 0.5469 +vt 0.7969 0.5625 +vt 0.8906 0.5625 +vt 0.8906 0.5469 +vt 0.9063 0.5469 +vt 0.9063 0.5625 +vt 0.875 0.5625 +vt 0.875 0.5469 +vt 0.8281 0.5469 +vt 0.8281 0.5625 +vt 0.7969 0.5625 +vt 0.7969 0.5469 +vt 0.8906 0.5313 +vt 0.8906 0.5625 +vt 0.7969 0.5625 +vt 0.7969 0.5313 +vt 0.8906 0.5313 +vt 0.8906 0.5625 +vt 0.7969 0.5625 +vt 0.7969 0.5313 +vt 0.8906 0.5469 +vt 0.8906 0.5625 +vt 0.7969 0.5625 +vt 0.7969 0.5469 +vt 0.7969 0.5469 +vt 0.7969 0.5625 +vt 0.8906 0.5625 +vt 0.8906 0.5469 +vt 0.8125 0.4063 +vt 0.8125 0.3438 +vt 0.7813 0.3438 +vt 0.7813 0.4063 +vt 0.8125 0.4063 +vt 0.8125 0.3438 +vt 0.7813 0.3438 +vt 0.7813 0.4063 +vt 0.8281 0.4063 +vt 0.8281 0.3438 +vt 0.8125 0.3438 +vt 0.8125 0.4063 +vt 0.8125 0.4063 +vt 0.8125 0.3438 +vt 0.7969 0.3438 +vt 0.7969 0.4063 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +usemtl field_howitzer +f 332/841/211 330/842/211 329/843/211 331/844/211 +f 335/845/212 333/846/212 334/847/212 336/848/212 +f 331/849/213 329/850/213 333/851/213 335/852/213 +f 336/853/214 334/854/214 330/855/214 332/856/214 +f 340/857/215 338/858/215 337/859/215 339/860/215 +f 343/861/216 341/862/216 342/863/216 344/864/216 +f 337/865/217 338/866/217 342/867/217 341/868/217 +f 340/869/218 339/870/218 343/871/218 344/872/218 +f 339/873/219 337/874/219 341/875/219 343/876/219 +f 344/877/220 342/878/220 338/879/220 340/880/220 +f 348/881/221 346/882/221 345/883/221 347/884/221 +f 351/885/222 349/886/222 350/887/222 352/888/222 +f 345/889/223 346/890/223 350/891/223 349/892/223 +f 348/893/224 347/894/224 351/895/224 352/896/224 +f 347/897/225 345/898/225 349/899/225 351/900/225 +f 352/901/226 350/902/226 346/903/226 348/904/226 +f 356/905/227 354/906/227 353/907/227 355/908/227 +f 359/909/228 357/910/228 358/911/228 360/912/228 +f 355/913/229 353/914/229 357/915/229 359/916/229 +f 360/917/230 358/918/230 354/919/230 356/920/230 +o vertical_drive_guida_mechanismnce +v -0.2812 0.625 0.4063 +v -0.2812 0.625 0.3438 +v -0.2812 0.5625 0.4063 +v -0.2812 0.5625 0.3438 +v -0.3437 0.625 0.4063 +v -0.3437 0.625 0.3438 +v -0.3437 0.5625 0.4063 +v -0.3437 0.5625 0.3438 +v -0.2187 0.6875 0.4688 +v -0.2187 0.6875 0.2813 +v -0.2187 0.625 0.4688 +v -0.2187 0.625 0.2813 +v -0.4062 0.6875 0.4688 +v -0.4062 0.6875 0.2813 +v -0.4062 0.625 0.4688 +v -0.4062 0.625 0.2813 +vt 0.0625 0.9844 +vt 0.0625 1 +vt 0.0781 1 +vt 0.0781 0.9844 +vt 0.0469 0.9844 +vt 0.0469 1 +vt 0.0625 1 +vt 0.0625 0.9844 +vt 0.0625 1 +vt 0.0625 0.9844 +vt 0.0469 0.9844 +vt 0.0469 1 +vt 0.0625 0.9844 +vt 0.0625 1 +vt 0.0469 1 +vt 0.0469 0.9844 +vt 0.0625 0.9844 +vt 0.0625 1 +vt 0.0781 1 +vt 0.0781 0.9844 +vt 0.0625 0.9844 +vt 0.0625 1 +vt 0.0781 1 +vt 0.0781 0.9844 +vt 0.0469 0.9375 +vt 0.0469 0.9531 +vt 0 0.9531 +vt 0 0.9375 +vt 0.0469 0.9375 +vt 0.0469 0.9531 +vt 0 0.9531 +vt 0 0.9375 +vt 0.0469 0.9844 +vt 0.0469 0.9375 +vt 0 0.9375 +vt 0 0.9844 +vt 0.0469 0.9375 +vt 0.0469 0.9844 +vt 0 0.9844 +vt 0 0.9375 +vt 0.0469 0.9688 +vt 0.0469 0.9844 +vt 0 0.9844 +vt 0 0.9688 +vt 0 0.9375 +vt 0 0.9531 +vt 0.0469 0.9531 +vt 0.0469 0.9375 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +usemtl field_howitzer +f 364/921/231 362/922/231 361/923/231 363/924/231 +f 367/925/232 365/926/232 366/927/232 368/928/232 +f 361/929/233 362/930/233 366/931/233 365/932/233 +f 364/933/234 363/934/234 367/935/234 368/936/234 +f 363/937/235 361/938/235 365/939/235 367/940/235 +f 368/941/236 366/942/236 362/943/236 364/944/236 +f 372/945/237 370/946/237 369/947/237 371/948/237 +f 375/949/238 373/950/238 374/951/238 376/952/238 +f 369/953/239 370/954/239 374/955/239 373/956/239 +f 372/957/240 371/958/240 375/959/240 376/960/240 +f 371/961/241 369/962/241 373/963/241 375/964/241 +f 376/965/242 374/966/242 370/967/242 372/968/242 +o lever +v -0.5 1.1813 -0.0563 +v -0.5 1.1813 -0.1813 +v -0.5 1.0563 -0.0563 +v -0.5 1.0563 -0.1813 +v -0.5625 1.1813 -0.0563 +v -0.5625 1.1813 -0.1813 +v -0.5625 1.0563 -0.0563 +v -0.5625 1.0563 -0.1813 +v -0.375 1.1813 -0.3062 +v -0.375 1.1813 -0.4312 +v -0.375 1.0563 -0.3062 +v -0.375 1.0563 -0.4312 +v -0.4375 1.1813 -0.3062 +v -0.4375 1.1813 -0.4312 +v -0.4375 1.0563 -0.3062 +v -0.4375 1.0563 -0.4312 +v -0.4375 1.1813 -0.0563 +v -0.4375 1.1813 -0.4312 +v -0.4375 1.0563 -0.0563 +v -0.4375 1.0563 -0.4312 +v -0.5 1.1813 -0.0563 +v -0.5 1.1813 -0.4312 +v -0.5 1.0563 -0.0563 +v -0.5 1.0563 -0.4312 +vt 0.0469 0.9219 +vt 0.0469 0.9531 +vt 0.0781 0.9531 +vt 0.0781 0.9219 +vt 0.0781 0.9219 +vt 0.0781 0.9531 +vt 0.0625 0.9531 +vt 0.0625 0.9219 +vt 0.0469 0.9531 +vt 0.0469 0.9219 +vt 0.0625 0.9219 +vt 0.0625 0.9531 +vt 0.0469 0.9219 +vt 0.0469 0.9531 +vt 0.0625 0.9531 +vt 0.0625 0.9219 +vt 0.0625 0.9219 +vt 0.0625 0.9531 +vt 0.0781 0.9531 +vt 0.0781 0.9219 +vt 0.0625 0.9844 +vt 0.0625 0.9531 +vt 0.0469 0.9531 +vt 0.0469 0.9844 +vt 0.0625 0.9531 +vt 0.0625 0.9844 +vt 0.0469 0.9844 +vt 0.0469 0.9531 +vt 0.0625 0.9531 +vt 0.0625 0.9844 +vt 0.0781 0.9844 +vt 0.0781 0.9531 +vt 0.0625 0.9531 +vt 0.0625 0.9844 +vt 0.0781 0.9844 +vt 0.0781 0.9531 +vt 0.0781 0.9688 +vt 0.0781 1 +vt 0.1719 1 +vt 0.1719 0.9688 +vt 0.0781 0.9688 +vt 0.0781 1 +vt 0.1719 1 +vt 0.1719 0.9688 +vt 0.1719 1 +vt 0.0781 1 +vt 0.0781 0.9844 +vt 0.1719 0.9844 +vt 0.1719 0.9844 +vt 0.0781 0.9844 +vt 0.0781 0.9688 +vt 0.1719 0.9688 +vt 0.1719 0.9688 +vt 0.1719 1 +vt 0.1875 1 +vt 0.1875 0.9688 +vt 0.1719 0.9688 +vt 0.1719 1 +vt 0.1875 1 +vt 0.1875 0.9688 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +usemtl field_howitzer +f 383/969/243 381/970/243 382/971/243 384/972/243 +f 377/973/244 378/974/244 382/975/244 381/976/244 +f 380/977/245 379/978/245 383/979/245 384/980/245 +f 379/981/246 377/982/246 381/983/246 383/984/246 +f 384/985/247 382/986/247 378/987/247 380/988/247 +f 385/989/248 386/990/248 390/991/248 389/992/248 +f 388/993/249 387/994/249 391/995/249 392/996/249 +f 387/997/250 385/998/250 389/999/250 391/1000/250 +f 392/1001/251 390/1002/251 386/1003/251 388/1004/251 +f 396/1005/252 394/1006/252 393/1007/252 395/1008/252 +f 399/1009/253 397/1010/253 398/1011/253 400/1012/253 +f 393/1013/254 394/1014/254 398/1015/254 397/1016/254 +f 396/1017/255 395/1018/255 399/1019/255 400/1020/255 +f 395/1021/256 393/1022/256 397/1023/256 399/1024/256 +f 400/1025/257 398/1026/257 394/1027/257 396/1028/257 +o scope +v -0.625 1.6185 -0.522 +v -0.625 1.5893 -0.6436 +v -0.625 1.497 -0.4928 +v -0.625 1.4678 -0.6144 +v -0.75 1.6185 -0.522 +v -0.75 1.5893 -0.6436 +v -0.75 1.497 -0.4928 +v -0.75 1.4678 -0.6144 +v -0.6312 1.6474 -0.5354 +v -0.6312 1.6212 -0.6448 +v -0.6312 1.5867 -0.5208 +v -0.6312 1.5604 -0.6302 +v -0.7437 1.6474 -0.5354 +v -0.7437 1.6212 -0.6448 +v -0.7437 1.5867 -0.5208 +v -0.7437 1.5604 -0.6302 +v -0.5937 1.8385 -0.5427 +v -0.5937 1.7947 -0.725 +v -0.5937 1.6562 -0.4989 +v -0.5937 1.6124 -0.6812 +v -0.7812 1.8385 -0.5427 +v -0.7812 1.7947 -0.725 +v -0.7812 1.6562 -0.4989 +v -0.7812 1.6124 -0.6812 +v -0.875 1.7935 -0.5962 +v -0.75 1.7935 -0.5962 +v -0.875 1.672 -0.567 +v -0.75 1.672 -0.567 +v -0.875 1.779 -0.6569 +v -0.75 1.779 -0.6569 +v -0.875 1.6574 -0.6278 +v -0.75 1.6574 -0.6278 +v -0.6437 1.5874 -0.5487 +v -0.7312 1.5874 -0.5487 +v -0.6437 1.5144 -0.5004 +v -0.7312 1.5144 -0.5004 +v -0.625 1.7065 -0.4027 +v -0.75 1.7065 -0.4027 +v -0.625 1.6023 -0.3337 +v -0.75 1.6023 -0.3337 +v -0.65 1.6632 -0.4228 +v -0.725 1.6632 -0.4228 +v -0.65 1.6007 -0.3814 +v -0.725 1.6007 -0.3814 +v -0.65 1.6908 -0.3811 +v -0.725 1.6908 -0.3811 +v -0.65 1.6283 -0.3397 +v -0.725 1.6283 -0.3397 +v -0.5312 1.8008 -0.5658 +v -0.5312 1.7717 -0.6873 +v -0.5312 1.6793 -0.5366 +v -0.5312 1.6501 -0.6582 +v -0.5937 1.8008 -0.5658 +v -0.5937 1.7717 -0.6873 +v -0.5937 1.6793 -0.5366 +v -0.5937 1.6501 -0.6582 +v -0.5937 1.9905 -0.5792 +v -0.5937 2.022 -0.7153 +v -0.5937 1.8689 -0.55 +v -0.5937 1.8397 -0.6715 +v -0.7812 1.9905 -0.5792 +v -0.7812 2.022 -0.7153 +v -0.7812 1.8689 -0.55 +v -0.7812 1.8397 -0.6715 +v -0.5937 2.0075 -0.7761 +v -0.5937 1.8251 -0.7323 +v -0.7812 2.0075 -0.7761 +v -0.7812 1.8251 -0.7323 +v -0.625 1.999 -0.6776 +v -0.625 1.9698 -0.7992 +v -0.625 1.8774 -0.6484 +v -0.625 1.8482 -0.77 +v -0.75 1.999 -0.6776 +v -0.75 1.9698 -0.7992 +v -0.75 1.8774 -0.6484 +v -0.75 1.8482 -0.77 +v -0.6312 1.8905 -0.5938 +v -0.6312 1.8643 -0.7031 +v -0.6312 1.8298 -0.5792 +v -0.6312 1.8035 -0.6886 +v -0.7437 1.8905 -0.5938 +v -0.7437 1.8643 -0.7031 +v -0.7437 1.8298 -0.5792 +v -0.7437 1.8035 -0.6886 +v -0.5312 1.6246 -0.3628 +v -0.5312 1.5662 -0.6059 +v -0.5312 1.5638 -0.3482 +v -0.5312 1.5055 -0.5913 +v -0.5937 1.6246 -0.3628 +v -0.5937 1.5662 -0.6059 +v -0.5937 1.5638 -0.3482 +v -0.5937 1.5055 -0.5913 +v -0.5937 1.5808 -0.5451 +v -0.5937 1.5201 -0.5305 +v -0.625 1.5808 -0.5451 +v -0.625 1.5662 -0.6059 +v -0.625 1.5201 -0.5305 +v -0.625 1.5055 -0.5913 +vt 0.125 0.75 +vt 0.125 0.875 +vt 0 0.875 +vt 0 0.75 +vt 0.125 0.75 +vt 0.125 0.875 +vt 0 0.875 +vt 0 0.75 +vt 0.125 0.75 +vt 0.125 0.875 +vt 0.25 0.875 +vt 0.25 0.75 +vt 0.25 0.75 +vt 0.25 0.875 +vt 0.125 0.875 +vt 0.125 0.75 +vt 0 0.75 +vt 0 0.875 +vt 0.125 0.875 +vt 0.125 0.75 +vt 0 0.75 +vt 0 0.875 +vt 0.125 0.875 +vt 0.125 0.75 +vt 0.5625 0.9375 +vt 0.5625 1 +vt 0.675 1 +vt 0.675 0.9375 +vt 0.5625 0.9375 +vt 0.5625 1 +vt 0.675 1 +vt 0.675 0.9375 +vt 0.675 0.9375 +vt 0.675 1 +vt 0.5625 1 +vt 0.5625 0.9375 +vt 0.675 0.9375 +vt 0.675 1 +vt 0.5625 1 +vt 0.5625 0.9375 +vt 0.1875 0.5625 +vt 0.1875 0.75 +vt 0 0.75 +vt 0 0.5625 +vt 0.1875 0.5625 +vt 0.1875 0.75 +vt 0 0.75 +vt 0 0.5625 +vt 0 0.375 +vt 0 0.5625 +vt 0.1875 0.5625 +vt 0.1875 0.375 +vt 0.1875 0.375 +vt 0.1875 0.5625 +vt 0 0.5625 +vt 0 0.375 +vt 0 0.5625 +vt 0 0.75 +vt 0.1875 0.75 +vt 0.1875 0.5625 +vt 0 0.5625 +vt 0 0.75 +vt 0.1875 0.75 +vt 0.1875 0.5625 +vt 0.25 0.75 +vt 0.25 0.875 +vt 0.125 0.875 +vt 0.125 0.75 +vt 0.125 0.75 +vt 0.125 0.875 +vt 0.25 0.875 +vt 0.25 0.75 +vt 0.125 0.8125 +vt 0.25 0.8125 +vt 0.25 0.875 +vt 0.125 0.875 +vt 0.1875 0.8125 +vt 0.0625 0.8125 +vt 0.0625 0.75 +vt 0.1875 0.75 +vt 0.1875 0.75 +vt 0.1875 0.875 +vt 0.125 0.875 +vt 0.125 0.75 +vt 0.5625 0.875 +vt 0.5625 1 +vt 0.4375 1 +vt 0.4375 0.875 +vt 0.4375 0.875 +vt 0.2495 0.8933 +vt 0.2495 0.9808 +vt 0.4375 1 +vt 0.2495 0.8935 +vt 0.2495 0.981 +vt 0.438 0.9998 +vt 0.4375 0.8743 +vt 0.25 0.9813 +vt 0.25 0.8938 +vt 0.4384 0.875 +vt 0.4384 1 +vt 0.4384 1 +vt 0.25 0.9813 +vt 0.25 0.8938 +vt 0.4384 0.875 +vt 0 0.875 +vt 0 1 +vt 0.125 1 +vt 0.125 0.875 +vt 0.0625 1 +vt 0.0625 0.875 +vt 0 0.875 +vt 0 1 +vt 0.0625 0.875 +vt 0.0625 1 +vt 0.0625 1 +vt 0.0625 0.875 +vt 0.0625 0.875 +vt 0.0625 1 +vt 0 1 +vt 0 0.875 +vt 0.125 0.875 +vt 0.125 1 +vt 0.0625 1 +vt 0.0625 0.875 +vt 0.3125 0.625 +vt 0.3125 0.75 +vt 0.1875 0.75 +vt 0.1875 0.625 +vt 0.1875 0.75 +vt 0.3125 0.75 +vt 0.3125 0.6875 +vt 0.1875 0.6875 +vt 0.3125 0.625 +vt 0.1875 0.625 +vt 0.1875 0.6875 +vt 0.3125 0.6875 +vt 0.25 0.625 +vt 0.25 0.75 +vt 0.1875 0.75 +vt 0.1875 0.625 +vt 0.3125 0.625 +vt 0.3125 0.75 +vt 0.25 0.75 +vt 0.25 0.625 +vt 0.5625 0.6875 +vt 0.5625 0.875 +vt 0.4375 0.8125 +vt 0.4375 0.6875 +vt 0.4375 0.6875 +vt 0.4375 0.8125 +vt 0.5625 0.875 +vt 0.5625 0.6875 +vt 0.8125 0.5 +vt 0.8125 0.625 +vt 0.625 0.625 +vt 0.625 0.5 +vt 0.625 0.625 +vt 0.625 0.5 +vt 0.8125 0.5 +vt 0.8125 0.625 +vt 0.625 0.6875 +vt 0.625 0.5625 +vt 0.8125 0.5625 +vt 0.8125 0.6875 +vt 0.6875 0.6875 +vt 0.6875 0.875 +vt 0.625 0.875 +vt 0.625 0.6875 +vt 0.8125 0.6875 +vt 0.8125 0.875 +vt 0.75 0.875 +vt 0.75 0.6875 +vt 0.625 0.8125 +vt 0.625 0.875 +vt 0.8125 0.875 +vt 0.8125 0.8125 +vt 0.625 0.6875 +vt 0.625 0.75 +vt 0.8125 0.75 +vt 0.8125 0.6875 +vt 0.8125 0.6875 +vt 0.8125 0.875 +vt 0.625 0.875 +vt 0.625 0.6875 +vt 0 0.875 +vt 0 1 +vt 0.125 1 +vt 0.125 0.875 +vt 0 0.875 +vt 0 1 +vt 0.125 1 +vt 0.125 0.875 +vt 0.125 1 +vt 0 1 +vt 0 0.875 +vt 0.125 0.875 +vt 0 1 +vt 0 0.875 +vt 0.125 0.875 +vt 0.125 1 +vt 0.125 0.875 +vt 0.125 1 +vt 0 1 +vt 0 0.875 +vt 0.5625 0.9375 +vt 0.5625 1 +vt 0.675 1 +vt 0.675 0.9375 +vt 0.5625 0.9375 +vt 0.5625 1 +vt 0.675 1 +vt 0.675 0.9375 +vt 0.675 0.9375 +vt 0.675 1 +vt 0.5625 1 +vt 0.5625 0.9375 +vt 0.675 0.9375 +vt 0.675 1 +vt 0.5625 1 +vt 0.5625 0.9375 +vt 0 0.3125 +vt 0 0.375 +vt 0.25 0.375 +vt 0.25 0.3125 +vt 0.25 0.3125 +vt 0.25 0.375 +vt 0 0.375 +vt 0 0.3125 +vt 0.25 0.3125 +vt 0 0.3125 +vt 0 0.375 +vt 0.25 0.375 +vt 0 0.375 +vt 0.25 0.375 +vt 0.25 0.3125 +vt 0 0.3125 +vt 0.1875 0.3125 +vt 0.1875 0.375 +vt 0.25 0.375 +vt 0.25 0.3125 +vt 0 0.3125 +vt 0 0.375 +vt 0.0625 0.375 +vt 0.0625 0.3125 +vt 0.25 0.4375 +vt 0.25 0.375 +vt 0.1875 0.375 +vt 0.1875 0.4375 +vt 0.25 0.375 +vt 0.25 0.4375 +vt 0.1875 0.4375 +vt 0.1875 0.375 +vt 0.1875 0.375 +vt 0.1875 0.4375 +vt 0.25 0.4375 +vt 0.25 0.375 +vt 0.25 0.375 +vt 0.25 0.4375 +vt 0.1875 0.4375 +vt 0.1875 0.375 +vn 1 0 0 +vn -1 0 0 +vn 0 0.97 -0.23 +vn 0 -0.97 0.23 +vn 0 0.23 0.97 +vn 0 -0.23 -0.97 +vn 1 0 0 +vn -1 0 0 +vn 0 0.23 0.97 +vn 0 -0.23 -0.97 +vn 1 0 0 +vn -1 0 0 +vn 0 0.97 -0.23 +vn 0 -0.97 0.23 +vn 0 0.23 0.97 +vn 0 -0.23 -0.97 +vn 0 0.23 0.97 +vn 0 -0.23 -0.97 +vn 0 0.97 -0.23 +vn 0 -0.97 0.23 +vn -1 0 0 +vn 0 0.55 0.83 +vn 0 0.77 -0.63 +vn 0 -0.88 0.47 +vn 1 -0.05 -0.08 +vn -1 -0.05 -0.08 +vn 0 0.55 0.83 +vn 0 0.83 -0.55 +vn 0 -0.83 0.55 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0.97 -0.23 +vn 0 -0.97 0.23 +vn 0 0.23 0.97 +vn 0 -0.23 -0.97 +vn 1 0 0 +vn -1 0 0 +vn 0 0.97 0.23 +vn 0 -0.97 0.23 +vn 0 0.23 0.97 +vn 1 0 0 +vn -1 0 0 +vn 0 0.97 -0.23 +vn 0 -0.97 0.23 +vn 0 -0.23 -0.97 +vn 1 0 0 +vn -1 0 0 +vn 0 0.97 -0.23 +vn 0 -0.97 0.23 +vn 0 -0.23 -0.97 +vn 1 0 0 +vn -1 0 0 +vn 0 0.23 0.97 +vn 0 -0.23 -0.97 +vn 1 0 0 +vn -1 0 0 +vn 0 0.97 -0.23 +vn 0 -0.97 0.23 +vn 0 0.23 0.97 +vn 0 -0.23 -0.97 +vn 0 0.97 -0.23 +vn 0 -0.97 0.23 +vn 0 0.23 0.97 +vn 0 -0.23 -0.97 +usemtl artillery_scope +f 404/1029/258 402/1030/258 401/1031/258 403/1032/258 +f 407/1033/259 405/1034/259 406/1035/259 408/1036/259 +f 401/1037/260 402/1038/260 406/1039/260 405/1040/260 +f 404/1041/261 403/1042/261 407/1043/261 408/1044/261 +f 403/1045/262 401/1046/262 405/1047/262 407/1048/262 +f 408/1049/263 406/1050/263 402/1051/263 404/1052/263 +f 412/1053/264 410/1054/264 409/1055/264 411/1056/264 +f 415/1057/265 413/1058/265 414/1059/265 416/1060/265 +f 411/1061/266 409/1062/266 413/1063/266 415/1064/266 +f 416/1065/267 414/1066/267 410/1067/267 412/1068/267 +f 420/1069/268 418/1070/268 417/1071/268 419/1072/268 +f 423/1073/269 421/1074/269 422/1075/269 424/1076/269 +f 417/1077/270 418/1078/270 422/1079/270 421/1080/270 +f 420/1081/271 419/1082/271 423/1083/271 424/1084/271 +f 419/1085/272 417/1086/272 421/1087/272 423/1088/272 +f 424/1089/273 422/1090/273 418/1091/273 420/1092/273 +f 428/1093/274 426/1094/274 425/1095/274 427/1096/274 +f 431/1097/275 429/1098/275 430/1099/275 432/1100/275 +f 425/1101/276 426/1102/276 430/1103/276 429/1104/276 +f 428/1105/277 427/1106/277 431/1107/277 432/1108/277 +f 427/1109/278 425/1110/278 429/1111/278 431/1112/278 +f 439/1113/279 437/1114/279 438/1115/279 440/1116/279 +f 437/1117/280 433/1118/280 434/1119/280 438/1120/280 +f 436/1121/281 435/1122/281 439/1123/281 440/1124/281 +f 435/1125/282 433/1126/282 437/1127/282 439/1128/282 +f 438/1129/283 434/1130/283 436/1131/283 440/1132/283 +f 447/1133/284 445/1134/284 446/1135/284 448/1136/284 +f 441/1137/285 442/1138/285 446/1139/285 445/1140/285 +f 444/1141/286 443/1142/286 447/1143/286 448/1144/286 +f 443/1145/287 441/1146/287 445/1147/287 447/1148/287 +f 448/1149/288 446/1150/288 442/1151/288 444/1152/288 +f 452/1153/289 450/1154/289 449/1155/289 451/1156/289 +f 449/1157/290 450/1158/290 454/1159/290 453/1160/290 +f 452/1161/291 451/1162/291 455/1163/291 456/1164/291 +f 451/1165/292 449/1166/292 453/1167/292 455/1168/292 +f 456/1169/293 454/1170/293 450/1171/293 452/1172/293 +f 460/1173/294 458/1174/294 457/1175/294 459/1176/294 +f 463/1177/295 461/1178/295 462/1179/295 464/1180/295 +f 457/1181/296 458/1182/296 462/1183/296 461/1184/296 +f 460/1185/297 459/1186/297 463/1187/297 464/1188/297 +f 459/1189/298 457/1190/298 461/1191/298 463/1192/298 +f 466/1193/299 465/1194/299 458/1195/299 460/1196/299 +f 464/1197/300 462/1198/300 467/1199/300 468/1200/300 +f 458/1201/301 465/1202/301 467/1203/301 462/1204/301 +f 466/1205/302 460/1206/302 464/1207/302 468/1208/302 +f 468/1209/303 467/1210/303 465/1211/303 466/1212/303 +f 472/1213/304 470/1214/304 469/1215/304 471/1216/304 +f 475/1217/305 473/1218/305 474/1219/305 476/1220/305 +f 469/1221/306 470/1222/306 474/1223/306 473/1224/306 +f 472/1225/307 471/1226/307 475/1227/307 476/1228/307 +f 476/1229/308 474/1230/308 470/1231/308 472/1232/308 +f 480/1233/309 478/1234/309 477/1235/309 479/1236/309 +f 483/1237/310 481/1238/310 482/1239/310 484/1240/310 +f 479/1241/311 477/1242/311 481/1243/311 483/1244/311 +f 484/1245/312 482/1246/312 478/1247/312 480/1248/312 +f 488/1249/313 486/1250/313 485/1251/313 487/1252/313 +f 491/1253/314 489/1254/314 490/1255/314 492/1256/314 +f 485/1257/315 486/1258/315 490/1259/315 489/1260/315 +f 488/1261/316 487/1262/316 491/1263/316 492/1264/316 +f 487/1265/317 485/1266/317 489/1267/317 491/1268/317 +f 492/1269/318 490/1270/318 486/1271/318 488/1272/318 +f 493/1273/319 490/1274/319 496/1275/319 495/1276/319 +f 492/1277/320 494/1278/320 497/1279/320 498/1280/320 +f 494/1281/321 493/1282/321 495/1283/321 497/1284/321 +f 498/1285/322 496/1286/322 490/1287/322 492/1288/322 +o range +v -0.8437 1.7777 -0.5281 +v -0.7812 1.7777 -0.5281 +v -0.8437 1.717 -0.5135 +v -0.7812 1.717 -0.5135 +v -0.8437 1.734 -0.7104 +v -0.7812 1.734 -0.7104 +v -0.8437 1.6732 -0.6958 +v -0.7812 1.6732 -0.6958 +v -0.875 1.8227 -0.4746 +v -0.75 1.8227 -0.4746 +v -0.875 1.7012 -0.4454 +v -0.75 1.7012 -0.4454 +v -0.875 1.8081 -0.5354 +v -0.75 1.8081 -0.5354 +v -0.875 1.6866 -0.5062 +v -0.75 1.6866 -0.5062 +vt 0.25 0.8125 +vt 0.25 0.875 +vt 0.1875 0.875 +vt 0.1875 0.8125 +vt 0.375 0.8125 +vt 0.375 0.875 +vt 0.1875 0.875 +vt 0.1875 0.8125 +vt 0.375 0.8125 +vt 0.375 0.875 +vt 0.1875 0.875 +vt 0.1875 0.8125 +vt 0.375 0.8125 +vt 0.375 0.875 +vt 0.1875 0.875 +vt 0.1875 0.8125 +vt 0.1875 0.8125 +vt 0.1875 0.875 +vt 0.375 0.875 +vt 0.375 0.8125 +vt 0.3125 0.625 +vt 0.3125 0.75 +vt 0.1875 0.75 +vt 0.1875 0.625 +vt 0.1875 0.625 +vt 0.1875 0.75 +vt 0.3125 0.75 +vt 0.3125 0.625 +vt 0.1875 0.75 +vt 0.3125 0.75 +vt 0.3125 0.6875 +vt 0.1875 0.6875 +vt 0.3125 0.625 +vt 0.1875 0.625 +vt 0.1875 0.6875 +vt 0.3125 0.6875 +vt 0.25 0.625 +vt 0.25 0.75 +vt 0.1875 0.75 +vt 0.1875 0.625 +vt 0.3125 0.625 +vt 0.3125 0.75 +vt 0.25 0.75 +vt 0.25 0.625 +vn 0 -0.23 -0.97 +vn 0 0.97 -0.23 +vn 0 -0.97 0.23 +vn -1 0 0 +vn 1 0 0 +vn 0 0.23 0.97 +vn 0 -0.23 -0.97 +vn 0 0.97 -0.23 +vn 0 -0.97 0.23 +vn -1 0 0 +vn 1 0 0 +usemtl artillery_scope +f 505/1289/323 503/1290/323 504/1291/323 506/1292/323 +f 499/1293/324 500/1294/324 504/1295/324 503/1296/324 +f 502/1297/325 501/1298/325 505/1299/325 506/1300/325 +f 501/1301/326 499/1302/326 503/1303/326 505/1304/326 +f 506/1305/327 504/1306/327 500/1307/327 502/1308/327 +f 510/1309/328 508/1310/328 507/1311/328 509/1312/328 +f 513/1313/329 511/1314/329 512/1315/329 514/1316/329 +f 507/1317/330 508/1318/330 512/1319/330 511/1320/330 +f 510/1321/331 509/1322/331 513/1323/331 514/1324/331 +f 509/1325/332 507/1326/332 511/1327/332 513/1328/332 +f 514/1329/333 512/1330/333 508/1331/333 510/1332/333 +o wheel2 +v -0.8125 0.8717 0 +v -0.5625 0.8717 0 +v -0.8125 0.6217 0.25 +v -0.5625 0.6217 0.25 +v -0.8125 0.8717 -0.375 +v -0.5625 0.8717 -0.375 +v -0.8125 0.6217 -0.625 +v -0.5625 0.6217 -0.625 +v -0.8125 -0.0033 0 +v -0.5625 -0.0033 0 +v -0.8125 0.2467 0.25 +v -0.5625 0.2467 0.25 +v -0.8125 -0.0033 -0.375 +v -0.5625 -0.0033 -0.375 +v -0.8125 0.2467 -0.625 +v -0.5625 0.2467 -0.625 +v -0.8125 0.6217 0.25 +v -0.5625 0.6217 0.25 +v -0.8125 0.2467 0.25 +v -0.5625 0.2467 0.25 +v -0.8125 0.6217 -0.625 +v -0.5625 0.6217 -0.625 +v -0.8125 0.2467 -0.625 +v -0.5625 0.2467 -0.625 +v -0.8125 0.625 0 +v -0.8125 0.625 -0.375 +v -0.8125 0.25 0 +v -0.8125 0.25 -0.375 +v -0.875 0.625 0 +v -0.875 0.625 -0.375 +v -0.875 0.25 0 +v -0.875 0.25 -0.375 +vt 0.8438 0.5625 +vt 0.8438 0.7188 +vt 0.7188 0.7188 +vt 0.7188 0.5625 +vt 0.2813 0.5625 +vt 0.2813 0.7188 +vt 0.1563 0.7188 +vt 0.1563 0.5625 +vt 0.4063 0.7188 +vt 0.4063 0.8438 +vt 0.5938 0.8438 +vt 0.5938 0.7188 +vt 0.7188 0.5938 +vt 0.5938 0.7188 +vt 0.4063 0.7188 +vt 0.2813 0.5938 +vt 0.2813 0.5938 +vt 0.4063 0.7188 +vt 0.5938 0.7188 +vt 0.7188 0.5938 +vt 0.7188 0.2813 +vt 0.8438 0.2813 +vt 0.8438 0.4375 +vt 0.7188 0.4375 +vt 0.1563 0.2813 +vt 0.2813 0.2813 +vt 0.2813 0.4375 +vt 0.1563 0.4375 +vt 0.4063 0.1563 +vt 0.5938 0.1563 +vt 0.5938 0.2813 +vt 0.4063 0.2813 +vt 0.4063 0.2813 +vt 0.5938 0.2813 +vt 0.7188 0.4063 +vt 0.2813 0.4063 +vt 0.5938 0.2813 +vt 0.4063 0.2813 +vt 0.2813 0.4063 +vt 0.7188 0.4063 +vt 0.8438 0.4063 +vt 0.8438 0.5938 +vt 0.7188 0.5938 +vt 0.7188 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.5938 +vt 0.1563 0.5938 +vt 0.1563 0.4063 +vt 0.7188 0.4063 +vt 0.7188 0.5938 +vt 0.2813 0.5938 +vt 0.2813 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.5938 +vt 0.7188 0.5938 +vt 0.7188 0.4063 +vt 0.5938 0.4063 +vt 0.5938 0.5938 +vt 0.4063 0.5938 +vt 0.4063 0.4063 +vt 0.5938 0.5938 +vt 0.4063 0.5938 +vt 0.4063 0.5625 +vt 0.5938 0.5625 +vt 0.4063 0.4063 +vt 0.5938 0.4063 +vt 0.5938 0.4375 +vt 0.4063 0.4375 +vt 0.5938 0.4063 +vt 0.5938 0.5938 +vt 0.5625 0.5938 +vt 0.5625 0.4063 +vt 0.4375 0.4063 +vt 0.4375 0.5938 +vt 0.4063 0.5938 +vt 0.4063 0.4063 +vn 0 0.71 0.71 +vn 0 0.71 -0.71 +vn 0 1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 -0.71 0.71 +vn 0 -0.71 -0.71 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +usemtl wheel_12_terrain +f 518/1333/334 516/1334/334 515/1335/334 517/1336/334 +f 521/1337/335 519/1338/335 520/1339/335 522/1340/335 +f 515/1341/336 516/1342/336 520/1343/336 519/1344/336 +f 517/1345/337 515/1346/337 519/1347/337 521/1348/337 +f 522/1349/338 520/1350/338 516/1351/338 518/1352/338 +f 523/1353/339 524/1354/339 526/1355/339 525/1356/339 +f 528/1357/340 527/1358/340 529/1359/340 530/1360/340 +f 528/1361/341 524/1362/341 523/1363/341 527/1364/341 +f 527/1365/342 523/1366/342 525/1367/342 529/1368/342 +f 524/1369/343 528/1370/343 530/1371/343 526/1372/343 +f 534/1373/344 532/1374/344 531/1375/344 533/1376/344 +f 537/1377/345 535/1378/345 536/1379/345 538/1380/345 +f 533/1381/346 531/1382/346 535/1383/346 537/1384/346 +f 538/1385/347 536/1386/347 532/1387/347 534/1388/347 +f 545/1389/348 543/1390/348 544/1391/348 546/1392/348 +f 539/1393/349 540/1394/349 544/1395/349 543/1396/349 +f 542/1397/350 541/1398/350 545/1399/350 546/1400/350 +f 541/1401/351 539/1402/351 543/1403/351 545/1404/351 +f 546/1405/352 544/1406/352 540/1407/352 542/1408/352 +o wheel1 +v 0.9375 0.8717 0 +v 0.6875 0.8717 0 +v 0.9375 0.6217 0.25 +v 0.6875 0.6217 0.25 +v 0.9375 0.8717 -0.375 +v 0.6875 0.8717 -0.375 +v 0.9375 0.6217 -0.625 +v 0.6875 0.6217 -0.625 +v 0.9375 -0.0033 0 +v 0.6875 -0.0033 0 +v 0.9375 0.2467 0.25 +v 0.6875 0.2467 0.25 +v 0.9375 -0.0033 -0.375 +v 0.6875 -0.0033 -0.375 +v 0.9375 0.2467 -0.625 +v 0.6875 0.2467 -0.625 +v 0.9375 0.6217 0.25 +v 0.6875 0.6217 0.25 +v 0.9375 0.2467 0.25 +v 0.6875 0.2467 0.25 +v 0.9375 0.6217 -0.625 +v 0.6875 0.6217 -0.625 +v 0.9375 0.2467 -0.625 +v 0.6875 0.2467 -0.625 +v 0.9375 0.625 0 +v 0.9375 0.625 -0.375 +v 0.9375 0.25 0 +v 0.9375 0.25 -0.375 +v 1 0.625 0 +v 1 0.625 -0.375 +v 1 0.25 0 +v 1 0.25 -0.375 +vt 0.7188 0.7188 +vt 0.8438 0.7188 +vt 0.8438 0.5625 +vt 0.7188 0.5625 +vt 0.1563 0.7188 +vt 0.2813 0.7188 +vt 0.2813 0.5625 +vt 0.1563 0.5625 +vt 0.5938 0.8438 +vt 0.4063 0.8438 +vt 0.4063 0.7188 +vt 0.5938 0.7188 +vt 0.4063 0.7188 +vt 0.5938 0.7188 +vt 0.7188 0.5938 +vt 0.2813 0.5938 +vt 0.5938 0.7188 +vt 0.4063 0.7188 +vt 0.2813 0.5938 +vt 0.7188 0.5938 +vt 0.8438 0.4375 +vt 0.8438 0.2813 +vt 0.7188 0.2813 +vt 0.7188 0.4375 +vt 0.2813 0.4375 +vt 0.2813 0.2813 +vt 0.1563 0.2813 +vt 0.1563 0.4375 +vt 0.5938 0.2813 +vt 0.5938 0.1563 +vt 0.4063 0.1563 +vt 0.4063 0.2813 +vt 0.7188 0.4063 +vt 0.5938 0.2813 +vt 0.4063 0.2813 +vt 0.2813 0.4063 +vt 0.2813 0.4063 +vt 0.4063 0.2813 +vt 0.5938 0.2813 +vt 0.7188 0.4063 +vt 0.7188 0.5938 +vt 0.8438 0.5938 +vt 0.8438 0.4063 +vt 0.7188 0.4063 +vt 0.1563 0.5938 +vt 0.2813 0.5938 +vt 0.2813 0.4063 +vt 0.1563 0.4063 +vt 0.2813 0.5938 +vt 0.7188 0.5938 +vt 0.7188 0.4063 +vt 0.2813 0.4063 +vt 0.7188 0.5938 +vt 0.2813 0.5938 +vt 0.2813 0.4063 +vt 0.7188 0.4063 +vt 0.4063 0.5938 +vt 0.5938 0.5938 +vt 0.5938 0.4063 +vt 0.4063 0.4063 +vt 0.4063 0.5625 +vt 0.4063 0.5938 +vt 0.5938 0.5938 +vt 0.5938 0.5625 +vt 0.5938 0.4375 +vt 0.5938 0.4063 +vt 0.4063 0.4063 +vt 0.4063 0.4375 +vt 0.5625 0.5938 +vt 0.5938 0.5938 +vt 0.5938 0.4063 +vt 0.5625 0.4063 +vt 0.4063 0.5938 +vt 0.4375 0.5938 +vt 0.4375 0.4063 +vt 0.4063 0.4063 +vn 0 0.71 0.71 +vn 0 0.71 -0.71 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.71 0.71 +vn 0 -0.71 -0.71 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +usemtl wheel_12_terrain +f 547/1409/353 548/1410/353 550/1411/353 549/1412/353 +f 552/1413/354 551/1414/354 553/1415/354 554/1416/354 +f 552/1417/355 548/1418/355 547/1419/355 551/1420/355 +f 551/1421/356 547/1422/356 549/1423/356 553/1424/356 +f 548/1425/357 552/1426/357 554/1427/357 550/1428/357 +f 558/1429/358 556/1430/358 555/1431/358 557/1432/358 +f 561/1433/359 559/1434/359 560/1435/359 562/1436/359 +f 555/1437/360 556/1438/360 560/1439/360 559/1440/360 +f 557/1441/361 555/1442/361 559/1443/361 561/1444/361 +f 562/1445/362 560/1446/362 556/1447/362 558/1448/362 +f 563/1449/363 564/1450/363 566/1451/363 565/1452/363 +f 568/1453/364 567/1454/364 569/1455/364 570/1456/364 +f 567/1457/365 563/1458/365 565/1459/365 569/1460/365 +f 564/1461/366 568/1462/366 570/1463/366 566/1464/366 +f 576/1465/367 575/1466/367 577/1467/367 578/1468/367 +f 576/1469/368 572/1470/368 571/1471/368 575/1472/368 +f 577/1473/369 573/1474/369 574/1475/369 578/1476/369 +f 575/1477/370 571/1478/370 573/1479/370 577/1480/370 +f 572/1481/371 576/1482/371 578/1483/371 574/1484/371 \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_howitzer/field_howitzer.obj.amt b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_howitzer/field_howitzer.obj.amt new file mode 100644 index 000000000..85cdca0c1 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/field_howitzer/field_howitzer.obj.amt @@ -0,0 +1,77 @@ +{ + "origins": { + "hans_gunner": [-9, 15.66667, 12], + "hans_gunner_body": [-9, 12, 12], + "hans_gunner_head": [-9, 24, 12], + "hans_gunner_left_arm": [-15, 22, 12], + "hans_gunner_right_arm": [-3, 21.97429, 12.21228], + "hans_gunner_right_leg": [-7, 11, 12], + "hans_gunner_left_leg": [-11, 11, 12], + "hans_commander": [11, 15.66667, 12], + "hans_commander_body": [11, 12, 12], + "hans_commander_head": [11, 24, 12], + "hans_commander_left_arm": [5, 22, 12], + "hans_commander_right_arm": [17, 21.97429, 12.21228], + "hans_commander_right_leg": [13, 11, 12], + "hans_commander_left_leg": [9, 11, 12], + "weapon": [-11, 7, -3], + "howi": [5, 18, -6], + "breech": [4, 22, -12], + "gun": [1, 18.01143, -15.1696], + "bolt": [1, 18.01143, -2.05195], + "6bcal_light_artillery": [1, 18.01143, -8.95195], + "6bcal_light_artillery_case": [1, 18.01143, -8.95195], + "net_gun": [0.5, 20.1, -18], + "vertical_drive_guida_mechanismnce": [-5, 10, 6], + "lever": [-6, 17.9, -6], + "scope": [-7.5, 21.77647, -8.48073], + "range": [-13, 27.84104, -8.81916], + "net_armor": [-6, 7.1, 4.9], + "radio": [-12.07672, 20.09639, -8.09004], + "wheel2": [-11, 6.94652, -3], + "wheel1": [13, 6.94652, -3], + "particle_vehicle_wheel1": [13, 6.9, -3], + "particle_vehicle_wheel2": [-11, 6.9, -3], + "particle_vehicle_howitzer": [0, 0, 0], + "particle_vehicle_howi": [1, 20.06, -16], + "particle_vehicle_gun": [0, 0, 0], + "fire": [1, 18, -22] + }, + "hierarchy": { + "hans_gunner_body": "hans_gunner", + "hans_gunner_head": "hans_gunner_body", + "hans_gunner_left_arm": "hans_gunner_body", + "hans_gunner_right_arm": "hans_gunner_body", + "hans_gunner_right_leg": "hans_gunner", + "hans_gunner_left_leg": "hans_gunner", + "hans_commander_body": "hans_commander", + "hans_commander_head": "hans_commander_body", + "hans_commander_left_arm": "hans_commander_body", + "hans_commander_right_arm": "hans_commander_body", + "hans_commander_right_leg": "hans_commander", + "hans_commander_left_leg": "hans_commander", + "howi": "weapon", + "breech": "howi", + "gun": "howi", + "bolt": "gun", + "6bcal_light_artillery": "gun", + "6bcal_light_artillery_case": "gun", + "net_gun": "howi", + "vertical_drive_guida_mechanismnce": "weapon", + "lever": "weapon", + "scope": "weapon", + "range": "scope", + "net_armor": "weapon", + "radio": "weapon", + "particle_vehicle_wheel1": "wheel1", + "particle_vehicle_wheel2": "wheel2", + "particle_vehicle_howitzer": "weapon", + "particle_vehicle_howi": "howi", + "particle_vehicle_gun": "gun", + "fire": "gun" + }, + "properties": { + "fire": { + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/tracked_motorbike/tracked_motorbike.mtl b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/tracked_motorbike/tracked_motorbike.mtl index f3bdf3cbf..1d49f4f57 100644 --- a/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/tracked_motorbike/tracked_motorbike.mtl +++ b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/tracked_motorbike/tracked_motorbike.mtl @@ -44,8 +44,8 @@ newmtl v4_diesel2 map_Kd immersiveintelligence:entity/vehicle/engine/v4_diesel2 newmtl engine_4 map_Kd immersiveintelligence:entity/vehicle/engine/engine_4 -newmtl pipe34 -map_Kd immersiveintelligence:blocks/common/structural/pipe34 +newmtl common_cable_and_pipe +map_Kd immersiveintelligence:blocks/common/common_cable_and_pipe newmtl wheel_12_terrain map_Kd immersiveintelligence:entity/vehicle/suspension/wheel_12_terrain newmtl snow diff --git a/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/tracked_motorbike/tracked_motorbike.obj b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/tracked_motorbike/tracked_motorbike.obj index db49d07d0..5056b9a02 100644 --- a/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/tracked_motorbike/tracked_motorbike.obj +++ b/src/main/resources/assets/immersiveintelligence/models/entity/vehicle/tracked_motorbike/tracked_motorbike.obj @@ -1,554 +1,1319 @@ # Made by Pabilo8 with Blockbench -# Exported with IIToolkit Plugin +# Exported with IIToolkit Plugin on 18/05/2026 mtllib tracked_motorbike.mtl - +o wing +v 0.125 0.8688 -0.75 +v 0.1313 0.8687 -0.875 +v 0.125 0.6188 -0.6875 +v 0.1313 0.6187 -0.8125 +v -0.125 0.8688 -0.75 +v -0.1312 0.8687 -0.875 +v -0.125 0.6188 -0.6875 +v -0.1312 0.6187 -0.8125 +v 0 0.8688 -0.75 +v 0 0.6188 -0.6875 +v 0 0.6187 -0.8125 +v 0 0.8687 -0.875 +v 0.125 0.8688 -0.75 +v 0.125 1.0562 -0.9375 +v 0.1313 0.8687 -0.875 +v 0.1313 0.9313 -0.9375 +v -0.125 0.8688 -0.75 +v -0.125 1.0562 -0.9375 +v -0.1312 0.8687 -0.875 +v -0.1312 0.9313 -0.9375 +v 0 1.0562 -0.9375 +v 0 0.8688 -0.75 +v 0 0.8687 -0.875 +v 0 0.9313 -0.9375 +v 0.125 1.0562 -0.9375 +v 0.125 1.0563 -1.4375 +v 0.1313 0.9313 -0.9375 +v 0.1313 0.9312 -1.4375 +v -0.125 1.0562 -0.9375 +v -0.125 1.0563 -1.4375 +v -0.1312 0.9313 -0.9375 +v -0.1312 0.9312 -1.4375 +v 0 1.0563 -1.4375 +v 0 1.0562 -0.9375 +v 0 0.9313 -0.9375 +v 0 0.9312 -1.4375 +v 0.125 1.0563 -1.4375 +v 0.125 0.8063 -1.8125 +v 0.1313 0.9312 -1.4375 +v 0.1313 0.6812 -1.8125 +v -0.125 1.0563 -1.4375 +v -0.125 0.8063 -1.8125 +v -0.1312 0.9312 -1.4375 +v -0.1312 0.6812 -1.8125 +v 0 0.8063 -1.8125 +v 0 1.0563 -1.4375 +v 0 0.9312 -1.4375 +v 0 0.6812 -1.8125 +vt 0.7188 0.6406 +vt 0.7188 0.7031 +vt 0.75 0.7031 +vt 0.75 0.6406 +vt 0.7496 0.6146 +vt 0.7496 0.5501 +vt 0.7193 0.5426 +vt 0.7193 0.607 +vt 0.125 0.9688 +vt 0.1563 0.9688 +vt 0.1563 1 +vt 0.125 1 +vt 0.75 0.25 +vt 0.7813 0.25 +vt 0.7813 0.3125 +vt 0.75 0.3125 +vt 0.75 0.3125 +vt 0.7188 0.3125 +vt 0.7188 0.25 +vt 0.75 0.25 +vt 0.75 0.3125 +vt 0.7188 0.3125 +vt 0.7188 0.25 +vt 0.75 0.25 +vt 0.1875 1 +vt 0.1563 1 +vt 0.1563 0.9688 +vt 0.1875 0.9688 +vt 0.75 0.25 +vt 0.7813 0.25 +vt 0.7813 0.3125 +vt 0.75 0.3125 +vt 0.556 0.2767 +vt 0.5781 0.2546 +vt 0.5118 0.2546 +vt 0.5339 0.2767 +vt 0.3502 0.2766 +vt 0.3281 0.2544 +vt 0.3944 0.2544 +vt 0.3723 0.2766 +vt 0.75 0.7969 +vt 0.7813 0.7969 +vt 0.7813 0.8594 +vt 0.75 0.8594 +vt 1 0.5938 +vt 0.9688 0.5938 +vt 0.9688 0.5781 +vt 1 0.5781 +vt 1 0.9063 +vt 0.9688 0.9063 +vt 0.9688 0.8438 +vt 1 0.8438 +vt 0.75 0.7344 +vt 0.7813 0.7344 +vt 0.7813 0.75 +vt 0.75 0.75 +vt 0.5137 0.2813 +vt 0.5137 0.25 +vt 0.3887 0.25 +vt 0.3887 0.2813 +vt 0.4688 0.2813 +vt 0.4688 0.25 +vt 0.3438 0.25 +vt 0.3438 0.2813 +vt 1 0.5625 +vt 0.9688 0.5625 +vt 0.9688 0.6875 +vt 1 0.6875 +vt 0.75 0.7344 +vt 0.7813 0.7344 +vt 0.7813 0.8594 +vt 0.75 0.8594 +vt 1 0.875 +vt 0.9688 0.875 +vt 0.9688 0.75 +vt 1 0.75 +vt 1 0.875 +vt 0.9688 0.875 +vt 0.9688 0.75 +vt 1 0.75 +vt 0.2681 0.2786 +vt 0.2508 0.2526 +vt 0.1381 0.2526 +vt 0.1554 0.2786 +vt 0.3091 0.2793 +vt 0.2918 0.2532 +vt 0.4044 0.2532 +vt 0.4218 0.2793 +vt 0.75 0.3594 +vt 0.7188 0.3594 +vt 0.7188 0.25 +vt 0.75 0.25 +vt 0 0.25 +vt 0.0313 0.25 +vt 0.0313 0.3594 +vt 0 0.3594 +vt 0.3281 1 +vt 0.2969 1 +vt 0.2969 0.9688 +vt 0.3281 0.9688 +vt 0.75 0.25 +vt 0.7813 0.25 +vt 0.7813 0.3594 +vt 0.75 0.3594 +vt 1 0.3594 +vt 0.9688 0.3594 +vt 0.9688 0.25 +vt 1 0.25 +vt 0.2656 0.9688 +vt 0.2969 0.9688 +vt 0.2969 1 +vt 0.2656 1 +vn 1 0.01 0.05 +vn -1 0.01 0.05 +vn 0 -1 0 +vn 0 0.24 0.97 +vn 0 -0.24 -0.97 +vn 0 0.24 0.97 +vn 0 -1 0 +vn 0 -0.24 -0.97 +vn 1 0.05 0.05 +vn -1 0.05 0.05 +vn 0 0.71 0.71 +vn 0 -0.71 -0.71 +vn 0 0.71 0.71 +vn 0 -0.71 -0.71 +vn 1 0.05 0 +vn -1 0.05 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 -1 0 +vn 1 0.05 -0.03 +vn -1 0.05 -0.03 +vn 0 0.83 -0.55 +vn 0 -0.83 0.55 +vn 0 0 -1 +vn 0 0.83 -0.55 +vn 0 -0.83 0.55 +vn 0 0 -1 +usemtl common_steel_painted_norivets +f 4/1/1 2/2/1 1/3/1 3/4/1 +f 7/5/2 5/6/2 6/7/2 8/8/2 +f 8/9/3 11/10/3 10/11/3 7/12/3 +f 7/13/4 10/14/4 9/15/4 5/16/4 +usemtl common_steel_norivets +f 6/17/5 12/18/5 11/19/5 8/20/5 +usemtl common_steel_painted_norivets +f 1/21/6 9/22/6 10/23/6 3/24/6 +f 3/25/7 10/26/7 11/27/7 4/28/7 +usemtl common_steel_norivets +f 4/29/8 11/30/8 12/31/8 2/32/8 +usemtl common_steel_painted_norivets +f 16/33/9 14/34/9 13/35/9 15/36/9 +f 19/37/10 17/38/10 18/39/10 20/40/10 +f 17/41/11 22/42/11 21/43/11 18/44/11 +usemtl common_steel_norivets +f 20/45/12 24/46/12 23/47/12 19/48/12 +usemtl common_steel_painted_norivets +f 14/49/13 21/50/13 22/51/13 13/52/13 +usemtl common_steel_norivets +f 15/53/14 23/54/14 24/55/14 16/56/14 +usemtl common_steel_painted_norivets +f 28/57/15 26/58/15 25/59/15 27/60/15 +f 31/61/16 29/62/16 30/63/16 32/64/16 +f 29/65/17 34/66/17 33/67/17 30/68/17 +usemtl common_steel_norivets +f 32/69/18 36/70/18 35/71/18 31/72/18 +usemtl common_steel_painted_norivets +f 26/73/19 33/74/19 34/75/19 25/76/19 +usemtl common_steel_norivets +f 27/77/20 35/78/20 36/79/20 28/80/20 +usemtl common_steel_painted_norivets +f 40/81/21 38/82/21 37/83/21 39/84/21 +f 43/85/22 41/86/22 42/87/22 44/88/22 +f 41/89/23 46/90/23 45/91/23 42/92/23 +usemtl common_steel_norivets +f 44/93/24 48/94/24 47/95/24 43/96/24 +usemtl common_steel_painted_norivets +f 42/97/25 45/98/25 48/99/25 44/100/25 +f 38/101/26 45/102/26 46/103/26 37/104/26 +usemtl common_steel_norivets +f 39/105/27 47/106/27 48/107/27 40/108/27 +usemtl common_steel_painted_norivets +f 40/109/28 48/110/28 45/111/28 38/112/28 +o wheel +v -0.125 0.8717 -1.0938 +v 0.125 0.8717 -1.0938 +v -0.125 0.6217 -0.8438 +v 0.125 0.6217 -0.8438 +v -0.125 0.8717 -1.4688 +v 0.125 0.8717 -1.4688 +v -0.125 0.6217 -1.7188 +v 0.125 0.6217 -1.7188 +v -0.125 -0.0033 -1.0938 +v 0.125 -0.0033 -1.0938 +v -0.125 0.2467 -0.8438 +v 0.125 0.2467 -0.8438 +v -0.125 -0.0033 -1.4688 +v 0.125 -0.0033 -1.4688 +v -0.125 0.2467 -1.7188 +v 0.125 0.2467 -1.7188 +v -0.125 0.6217 -0.8438 +v 0.125 0.6217 -0.8438 +v -0.125 0.2467 -0.8438 +v 0.125 0.2467 -0.8438 +v -0.125 0.6217 -1.7188 +v 0.125 0.6217 -1.7188 +v -0.125 0.2467 -1.7188 +v 0.125 0.2467 -1.7188 +vt 0.8438 0.5625 +vt 0.8438 0.7188 +vt 0.7188 0.7188 +vt 0.7188 0.5625 +vt 0.2813 0.5625 +vt 0.2813 0.7188 +vt 0.1563 0.7188 +vt 0.1563 0.5625 +vt 0.4063 0.7188 +vt 0.4063 0.8438 +vt 0.5938 0.8438 +vt 0.5938 0.7188 +vt 0.7188 0.5938 +vt 0.5938 0.7188 +vt 0.4063 0.7188 +vt 0.2813 0.5938 +vt 0.2813 0.5938 +vt 0.4063 0.7188 +vt 0.5938 0.7188 +vt 0.7188 0.5938 +vt 0.7188 0.2813 +vt 0.8438 0.2813 +vt 0.8438 0.4375 +vt 0.7188 0.4375 +vt 0.1563 0.2813 +vt 0.2813 0.2813 +vt 0.2813 0.4375 +vt 0.1563 0.4375 +vt 0.4063 0.1563 +vt 0.5938 0.1563 +vt 0.5938 0.2813 +vt 0.4063 0.2813 +vt 0.4063 0.2813 +vt 0.5938 0.2813 +vt 0.7188 0.4063 +vt 0.2813 0.4063 +vt 0.5938 0.2813 +vt 0.4063 0.2813 +vt 0.2813 0.4063 +vt 0.7188 0.4063 +vt 0.8438 0.4063 +vt 0.8438 0.5938 +vt 0.7188 0.5938 +vt 0.7188 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.5938 +vt 0.1563 0.5938 +vt 0.1563 0.4063 +vt 0.7188 0.4063 +vt 0.7188 0.5938 +vt 0.2813 0.5938 +vt 0.2813 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.5938 +vt 0.7188 0.5938 +vt 0.7188 0.4063 +vn 0 0.71 0.71 +vn 0 0.71 -0.71 +vn 0 1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 -0.71 0.71 +vn 0 -0.71 -0.71 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +usemtl wheel_12_terrain +f 52/113/29 50/114/29 49/115/29 51/116/29 +f 55/117/30 53/118/30 54/119/30 56/120/30 +f 49/121/31 50/122/31 54/123/31 53/124/31 +f 51/125/32 49/126/32 53/127/32 55/128/32 +f 56/129/33 54/130/33 50/131/33 52/132/33 +f 57/133/34 58/134/34 60/135/34 59/136/34 +f 62/137/35 61/138/35 63/139/35 64/140/35 +f 62/141/36 58/142/36 57/143/36 61/144/36 +f 61/145/37 57/146/37 59/147/37 63/148/37 +f 58/149/38 62/150/38 64/151/38 60/152/38 +f 68/153/39 66/154/39 65/155/39 67/156/39 +f 71/157/40 69/158/40 70/159/40 72/160/40 +f 67/161/41 65/162/41 69/163/41 71/164/41 +f 72/165/42 70/166/42 66/167/42 68/168/42 +o suspension_wheel +v 0.3125 0.5 -1.225 +v 0.3125 0.5 -1.35 +v 0.3125 0.375 -1.225 +v 0.3125 0.375 -1.35 +v -0.3125 0.5 -1.225 +v -0.3125 0.5 -1.35 +v -0.3125 0.375 -1.225 +v -0.3125 0.375 -1.35 +v -0.1375 0.8593 -1.0228 +v -0.1375 0.9016 -1.1135 +v -0.1375 0.6328 -1.1285 +v -0.1375 0.675 -1.2191 +v -0.2375 0.8593 -1.0228 +v -0.2375 0.9016 -1.1135 +v -0.2375 0.6328 -1.1285 +v -0.2375 0.675 -1.2191 +v 0.2375 0.8593 -1.0228 +v 0.2375 0.9016 -1.1135 +v 0.2375 0.6328 -1.1285 +v 0.2375 0.675 -1.2191 +v 0.1375 0.8593 -1.0228 +v 0.1375 0.9016 -1.1135 +v 0.1375 0.6328 -1.1285 +v 0.1375 0.675 -1.2191 +v 0.25 0.6598 -1.1045 +v 0.25 0.7136 -1.2173 +v 0.25 0.4341 -1.2121 +v 0.25 0.4879 -1.325 +v 0.125 0.6598 -1.1045 +v 0.125 0.7136 -1.2173 +v 0.125 0.4341 -1.2121 +v 0.125 0.4879 -1.325 +v -0.125 0.6598 -1.1045 +v -0.125 0.7136 -1.2173 +v -0.125 0.4341 -1.2121 +v -0.125 0.4879 -1.325 +v -0.25 0.6598 -1.1045 +v -0.25 0.7136 -1.2173 +v -0.25 0.4341 -1.2121 +v -0.25 0.4879 -1.325 +vt 0.875 0.0938 +vt 0.875 0.125 +vt 0.9063 0.125 +vt 0.9063 0.0938 +vt 0.9063 0.0938 +vt 0.875 0.0938 +vt 0.875 0.125 +vt 0.9063 0.125 +vt 0.7969 0.1094 +vt 0.7969 0.1406 +vt 0.9531 0.1406 +vt 0.9531 0.1094 +vt 0.9531 0.1094 +vt 0.9531 0.1406 +vt 0.7969 0.1406 +vt 0.7969 0.1094 +vt 0.9531 0.1406 +vt 0.9531 0.1094 +vt 0.7969 0.1094 +vt 0.7969 0.1406 +vt 0.9531 0.1094 +vt 0.9531 0.1406 +vt 0.7969 0.1406 +vt 0.7969 0.1094 +vt 0.9688 0.0938 +vt 0.9688 0.1563 +vt 0.9375 0.1563 +vt 0.9375 0.0938 +vt 0.9688 0.0938 +vt 0.9688 0.1563 +vt 0.9375 0.1563 +vt 0.9375 0.0938 +vt 0.9375 0.0938 +vt 0.9375 0.1563 +vt 0.9688 0.1563 +vt 0.9688 0.0938 +vt 0.9375 0.0938 +vt 0.9375 0.1563 +vt 0.9688 0.1563 +vt 0.9688 0.0938 +vt 0.9688 0.0938 +vt 0.9688 0.1563 +vt 0.9375 0.1563 +vt 0.9375 0.0938 +vt 0.9688 0.0938 +vt 0.9688 0.1563 +vt 0.9375 0.1563 +vt 0.9375 0.0938 +vt 0.9375 0.0938 +vt 0.9375 0.1563 +vt 0.9688 0.1563 +vt 0.9688 0.0938 +vt 0.9375 0.0938 +vt 0.9375 0.1563 +vt 0.9688 0.1563 +vt 0.9688 0.0938 +vt 0.9688 0.625 +vt 0.9688 0.6875 +vt 1 0.6875 +vt 1 0.625 +vt 0.9531 0.625 +vt 0.9531 0.6875 +vt 0.9844 0.6875 +vt 0.9844 0.625 +vt 0.8125 0.2813 +vt 0.8125 0.3125 +vt 0.8438 0.3125 +vt 0.8438 0.2813 +vt 0.9688 0.6406 +vt 0.9688 0.6719 +vt 0.9375 0.6719 +vt 0.9375 0.6406 +vt 1 0.6406 +vt 1 0.7031 +vt 0.9688 0.7031 +vt 0.9688 0.6406 +vt 0.9844 0.625 +vt 0.9844 0.6875 +vt 0.9531 0.6875 +vt 0.9531 0.625 +vt 0.9688 0.625 +vt 0.9688 0.6875 +vt 1 0.6875 +vt 1 0.625 +vt 0.9531 0.625 +vt 0.9531 0.6875 +vt 0.9844 0.6875 +vt 0.9844 0.625 +vt 0.8125 0.2813 +vt 0.8125 0.3125 +vt 0.8438 0.3125 +vt 0.8438 0.2813 +vt 0.9688 0.6406 +vt 0.9688 0.6719 +vt 0.9375 0.6719 +vt 0.9375 0.6406 +vt 1 0.6406 +vt 1 0.7031 +vt 0.9688 0.7031 +vt 0.9688 0.6406 +vt 0.9844 0.625 +vt 0.9844 0.6875 +vt 0.9531 0.6875 +vt 0.9531 0.625 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.42 0.91 +vn 0 0.42 -0.91 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.42 0.91 +vn 0 0.42 -0.91 +vn 1 0 0 +vn -1 0 0 +vn 0 0.9 0.43 +vn 0 -0.9 -0.43 +vn 0 -0.43 0.9 +vn 0 0.43 -0.9 +vn 1 0 0 +vn -1 0 0 +vn 0 0.9 0.43 +vn 0 -0.9 -0.43 +vn 0 -0.43 0.9 +vn 0 0.43 -0.9 +usemtl common_steel_norivets +f 76/169/43 74/170/43 73/171/43 75/172/43 +f 79/173/44 77/174/44 78/175/44 80/176/44 +f 73/177/45 74/178/45 78/179/45 77/180/45 +f 76/181/46 75/182/46 79/183/46 80/184/46 +f 75/185/47 73/186/47 77/187/47 79/188/47 +f 80/189/48 78/190/48 74/191/48 76/192/48 +f 84/193/49 82/194/49 81/195/49 83/196/49 +f 87/197/50 85/198/50 86/199/50 88/200/50 +f 83/201/51 81/202/51 85/203/51 87/204/51 +f 88/205/52 86/206/52 82/207/52 84/208/52 +f 92/209/53 90/210/53 89/211/53 91/212/53 +f 95/213/54 93/214/54 94/215/54 96/216/54 +f 91/217/55 89/218/55 93/219/55 95/220/55 +f 96/221/56 94/222/56 90/223/56 92/224/56 +usemtl common_steel_painted_norivets +f 100/225/57 98/226/57 97/227/57 99/228/57 +f 103/229/58 101/230/58 102/231/58 104/232/58 +f 97/233/59 98/234/59 102/235/59 101/236/59 +f 100/237/60 99/238/60 103/239/60 104/240/60 +f 99/241/61 97/242/61 101/243/61 103/244/61 +f 104/245/62 102/246/62 98/247/62 100/248/62 +f 108/249/63 106/250/63 105/251/63 107/252/63 +f 111/253/64 109/254/64 110/255/64 112/256/64 +f 105/257/65 106/258/65 110/259/65 109/260/65 +f 108/261/66 107/262/66 111/263/66 112/264/66 +f 107/265/67 105/266/67 109/267/67 111/268/67 +f 112/269/68 110/270/68 106/271/68 108/272/68 +o gas +v 0.6602 1.5529 -0.2551 +v 0.7735 1.5529 -0.3079 +v 0.6602 1.4279 -0.2551 +v 0.7735 1.4279 -0.3079 +v 0.581 1.5529 -0.425 +v 0.6943 1.5529 -0.4779 +v 0.581 1.4279 -0.425 +v 0.6943 1.4279 -0.4779 +vt 0.375 0.75 +vt 0.375 0.8125 +vt 0.3125 0.8125 +vt 0.3125 0.75 +vt 0.375 0.75 +vt 0.375 0.8125 +vt 0.3125 0.8125 +vt 0.3125 0.75 +vt 0.375 0.75 +vt 0.375 0.8125 +vt 0.2813 0.8125 +vt 0.2813 0.75 +vt 0.375 0.75 +vt 0.375 0.8125 +vt 0.2813 0.8125 +vt 0.2813 0.75 +vt 0.375 0.75 +vt 0.375 0.8125 +vt 0.2813 0.8125 +vt 0.2813 0.75 +vt 0.375 0.75 +vt 0.375 0.8125 +vt 0.2813 0.8125 +vt 0.2813 0.75 +vn 0.42 0 0.91 +vn -0.42 0 -0.91 +vn 0 1 0 +vn 0 -1 0 +vn -0.91 0 0.42 +vn 0.91 0 -0.42 +usemtl tracked_motorbike +f 116/273/69 114/274/69 113/275/69 115/276/69 +f 119/277/70 117/278/70 118/279/70 120/280/70 +f 113/281/71 114/282/71 118/283/71 117/284/71 +f 116/285/72 115/286/72 119/287/72 120/288/72 +f 115/289/73 113/290/73 117/291/73 119/292/73 +f 120/293/74 118/294/74 114/295/74 116/296/74 +o cluch +v -0.8271 1.5313 -0.3846 +v -0.5711 1.5313 -0.5639 +v -0.8271 1.4688 -0.3846 +v -0.5711 1.4688 -0.5639 +v -0.8629 1.5313 -0.4358 +v -0.6069 1.5313 -0.6151 +v -0.8629 1.4688 -0.4358 +v -0.6069 1.4688 -0.6151 +vt 0.8438 0.125 +vt 0.8438 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.125 +vt 0.8438 0.125 +vt 0.8438 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.125 +vt 0.8438 0.0625 +vt 0.8438 0.1406 +vt 0.8594 0.1406 +vt 0.8594 0.0625 +vt 0.8438 0.0625 +vt 0.8438 0.1406 +vt 0.8594 0.1406 +vt 0.8594 0.0625 +vt 0.8438 0.125 +vt 0.8438 0.1406 +vt 0.8594 0.1406 +vt 0.8594 0.125 +vt 0.8438 0.125 +vt 0.8438 0.1406 +vt 0.8594 0.1406 +vt 0.8594 0.125 +vn 0.57 0 0.82 +vn -0.57 0 -0.82 +vn 0 1 0 +vn 0 -1 0 +vn -0.82 0 0.57 +vn 0.82 0 -0.57 +usemtl common_steel +f 124/297/75 122/298/75 121/299/75 123/300/75 +f 127/301/76 125/302/76 126/303/76 128/304/76 +f 121/305/77 122/306/77 126/307/77 125/308/77 +f 124/309/78 123/310/78 127/311/78 128/312/78 +f 123/313/79 121/314/79 125/315/79 127/316/79 +f 128/317/80 126/318/80 122/319/80 124/320/80 +o brake +v 0.8544 1.5313 -0.4724 +v 0.5984 1.5313 -0.6517 +v 0.8544 1.4688 -0.4724 +v 0.5984 1.4688 -0.6517 +v 0.8185 1.5313 -0.4213 +v 0.5625 1.5313 -0.6005 +v 0.8185 1.4688 -0.4213 +v 0.5625 1.4688 -0.6005 +vt 0.9063 0.1406 +vt 0.9063 0.1563 +vt 0.8281 0.1563 +vt 0.8281 0.1406 +vt 0.9063 0.1406 +vt 0.9063 0.1563 +vt 0.8281 0.1563 +vt 0.8281 0.1406 +vt 0.8438 0.0781 +vt 0.8438 0.1563 +vt 0.8281 0.1563 +vt 0.8281 0.0781 +vt 0.8438 0.0781 +vt 0.8438 0.1563 +vt 0.8281 0.1563 +vt 0.8281 0.0781 +vt 0.8438 0.1406 +vt 0.8438 0.1563 +vt 0.8281 0.1563 +vt 0.8281 0.1406 +vt 0.8438 0.1406 +vt 0.8438 0.1563 +vt 0.8281 0.1563 +vt 0.8281 0.1406 +vn 0.57 0 -0.82 +vn -0.57 0 0.82 +vn 0 1 0 +vn 0 -1 0 +vn 0.82 0 0.57 +vn -0.82 0 -0.57 +usemtl common_steel +f 132/321/81 130/322/81 129/323/81 131/324/81 +f 135/325/82 133/326/82 134/327/82 136/328/82 +f 129/329/83 130/330/83 134/331/83 133/332/83 +f 132/333/84 131/334/84 135/335/84 136/336/84 +f 131/337/85 129/338/85 133/339/85 135/340/85 +f 136/341/86 134/342/86 130/343/86 132/344/86 +o key +v 0.2188 1.5071 -0.6554 +v 0.2188 1.5383 -0.7096 +v 0.2188 1.453 -0.6867 +v 0.2188 1.4842 -0.7408 +v 0.0938 1.5071 -0.6554 +v 0.0938 1.5383 -0.7096 +v 0.0938 1.453 -0.6867 +v 0.0938 1.4842 -0.7408 +v 0.1875 1.5242 -0.7122 +v 0.1875 1.4919 -0.833 +v 0.1875 1.4639 -0.6961 +v 0.1875 1.4315 -0.8168 +v 0.125 1.5242 -0.7122 +v 0.125 1.4919 -0.833 +v 0.125 1.4639 -0.6961 +v 0.125 1.4315 -0.8168 +vt 0.0625 0.9688 +vt 0.0625 1 +vt 0.0313 1 +vt 0.0313 0.9688 +vt 0.0313 0.9688 +vt 0.0313 1 +vt 0 1 +vt 0 0.9688 +vt 0.0625 0.9688 +vt 0.0625 1 +vt 0 1 +vt 0 0.9688 +vt 0.0625 0.9688 +vt 0.0625 1 +vt 0 1 +vt 0 0.9688 +vt 0.0625 0.9688 +vt 0.0625 1 +vt 0 1 +vt 0 0.9688 +vt 0 0.9688 +vt 0 1 +vt 0.0625 1 +vt 0.0625 0.9688 +vt 0.8594 0.1094 +vt 0.8594 0.125 +vt 0.8281 0.125 +vt 0.8281 0.1094 +vt 0.8594 0.1094 +vt 0.8594 0.125 +vt 0.8281 0.125 +vt 0.8281 0.1094 +vt 0.8438 0.0938 +vt 0.8438 0.125 +vt 0.8281 0.125 +vt 0.8281 0.0938 +vt 0.8438 0.0938 +vt 0.8438 0.125 +vt 0.8281 0.125 +vt 0.8281 0.0938 +vt 0.8438 0.1094 +vt 0.8438 0.125 +vt 0.8281 0.125 +vt 0.8281 0.1094 +vn 1 0 0 +vn -1 0 0 +vn 0 0.87 0.5 +vn 0 -0.87 -0.5 +vn 0 -0.5 0.87 +vn 0 0.5 -0.87 +vn 1 0 0 +vn -1 0 0 +vn 0 0.97 -0.26 +vn 0 -0.97 0.26 +vn 0 -0.26 -0.97 +usemtl tracked_motorbike +f 140/345/87 138/346/87 137/347/87 139/348/87 +f 143/349/88 141/350/88 142/351/88 144/352/88 +f 137/353/89 138/354/89 142/355/89 141/356/89 +f 140/357/90 139/358/90 143/359/90 144/360/90 +f 139/361/91 137/362/91 141/363/91 143/364/91 +f 144/365/92 142/366/92 138/367/92 140/368/92 +usemtl common_steel_norivets +f 148/369/93 146/370/93 145/371/93 147/372/93 +f 151/373/94 149/374/94 150/375/94 152/376/94 +f 145/377/95 146/378/95 150/379/95 149/380/95 +f 148/381/96 147/382/96 151/383/96 152/384/96 +f 152/385/97 150/386/97 146/387/97 148/388/97 o steering_wheel -v 0.1875 1.554196367034754 -0.8609108517670448 -v 0.1875 1.5516875913161952 -1.1483996837774764 -v 0.1875 1.6161483595877764 -0.9239539689843581 -v 0.1875 1.6141847841838846 -1.1489454995969892 -v 0.25 1.554196367034754 -0.8609108517670448 -v 0.25 1.5522327916308623 -1.0859023823796758 -v 0.25 1.6161483595877764 -0.9239539689843581 -v 0.25 1.6147300930286628 -1.0864475826943432 -v -0.1875 1.6161483595877764 -0.9239539689843581 -v -0.1875 1.6141847841838846 -1.1489454995969892 -v -0.1875 1.554196367034754 -0.8609108517670448 -v -0.1875 1.5516875913161952 -1.1483996837774764 -v -0.25 1.6161483595877764 -0.9239539689843581 -v -0.25 1.6147300930286628 -1.0864475826943432 -v -0.25 1.554196367034754 -0.8609108517670448 -v -0.25 1.5522327916308623 -1.0859023823796758 -v 0.598644375 1.5391747280752814 -0.43356502823587495 -v 0.67794625 1.5388524737678837 -0.47054271856720153 -v 0.598644375 1.4516780137144845 -0.43280166097125206 -v 0.67794625 1.4513557594070865 -0.46977935130257875 -v 0.577513125 1.5387793777922547 -0.4788791750907476 -v 0.656815 1.5384565079800114 -0.5158567568919632 -v 0.577513125 1.4512827719615686 -0.4781151923212791 -v 0.656815 1.4509599021493251 -0.5150927741224947 -v 0.56052 1.5575979091762269 -0.47111845093374494 -v 0.67380875 1.5571365890657998 -0.5239440074389428 -v 0.56052 1.4326026908757803 -0.4700279417742995 -v 0.67380875 1.4321414792954643 -0.5228528827746516 -v 0.38354875 1.554285845337533 -0.850620683737005 -v 0.49513125 1.5538398939925464 -0.9017538223699932 -v 0.38354875 1.4292907355671973 -0.8495295590727138 -v 0.49513125 1.428844784222211 -0.9006626977057022 -v -0.38354875 1.554285845337533 -0.850620683737005 -v -0.49417625 1.553839357352588 -0.9018000565850568 -v -0.38354875 1.4292907355671973 -0.8495295590727138 -v -0.49417625 1.4288442475822525 -0.9007089319207658 -v -0.374045 1.5542500643798618 -0.8547071784763038 -v -0.374045 1.5531595552204163 -0.9797023967767504 -v -0.374045 1.4292549546095261 -0.8536160538120128 -v -0.374045 1.4281643369199697 -0.9786118876173049 -v 0.38354875 1.554285845337533 -0.850620683737005 -v 0.49513125 1.5538398939925464 -0.9017538223699932 -v 0.38354875 1.4292907355671973 -0.8495295590727138 -v 0.49513125 1.428844784222211 -0.9006626977057022 -v 0.375 1.5542506010198203 -0.8546609442612402 -v 0.375 1.5531600918603747 -0.9796561625616867 -v 0.375 1.4292553827193737 -0.8535704351017948 -v 0.375 1.4281648735599282 -0.9785656534022413 -v 0.375 1.5542506010198203 -0.8546609442612402 -v 0.375 1.5531600918603747 -0.9796561625616867 -v 0.375 1.4292553827193737 -0.8535704351017948 -v 0.375 1.4281648735599282 -0.9785656534022413 -v -0.375 1.5542506010198203 -0.8546609442612402 -v -0.375 1.5531600918603747 -0.9796561625616867 -v -0.375 1.4292553827193737 -0.8535704351017948 -v -0.375 1.4281648735599282 -0.9785656534022413 -v -0.56052 1.5575979091762269 -0.47111845093374494 -v -0.67380875 1.5571365890657998 -0.5239440074389428 -v -0.56052 1.4326026908757803 -0.4700279417742995 -v -0.67380875 1.4321414792954643 -0.5228528827746516 -v -0.38354875 1.554285845337533 -0.850620683737005 -v -0.49417625 1.553839357352588 -0.9018000565850568 -v -0.38354875 1.4292907355671973 -0.8495295590727138 -v -0.49417625 1.4288442475822525 -0.9007089319207658 -v -0.598644375 1.5391747280752814 -0.43356502823587495 -v -0.67794625 1.5388524737678837 -0.47054271856720153 -v -0.598644375 1.4516780137144845 -0.43280166097125206 -v -0.67794625 1.4513557594070865 -0.46977935130257875 -v -0.577513125 1.5387793777922547 -0.4788791750907476 -v -0.656815 1.5384565079800114 -0.5158567568919632 -v -0.577513125 1.4512827719615686 -0.4781151923212791 -v -0.656815 1.4509599021493251 -0.5150927741224947 -v -0.125 0.9434493762165953 -0.9734206514614141 -v -0.125 0.9972629107182049 -1.086243684038254 -v -0.125 0.8306262351096443 -1.0272348014678692 -v -0.125 0.8844397696112538 -1.1400578340447092 -v -0.25 0.9434493762165953 -0.9734206514614141 -v -0.25 0.9972629107182049 -1.086243684038254 -v -0.25 0.8306262351096443 -1.0272348014678692 -v -0.25 0.8844397696112538 -1.1400578340447092 -v 0.25 0.9434493762165953 -0.9734206514614141 -v 0.25 0.9972629107182049 -1.086243684038254 -v 0.25 0.8306262351096443 -1.0272348014678692 -v 0.25 0.8844397696112538 -1.1400578340447092 -v 0.125 0.9434493762165953 -0.9734206514614141 -v 0.125 0.9972629107182049 -1.086243684038254 -v 0.125 0.8306262351096443 -1.0272348014678692 -v 0.125 0.8844397696112538 -1.1400578340447092 -v 0.25 1.0562724087934354 -0.9196071169598045 -v 0.25 1.1100865587998907 -1.0324302580667555 -v 0.25 0.9434493762165953 -0.9734206514614141 -v 0.25 0.9972629107182049 -1.086243684038254 -v -0.25 1.0562724087934354 -0.9196071169598045 -v -0.25 1.1100865587998907 -1.0324302580667555 -v -0.25 0.9434493762165953 -0.9734206514614141 -v -0.25 0.9972629107182049 -1.086243684038254 -v 0 1.1100865587998907 -1.0324302580667555 -v 0 0.9972629107182049 -1.086243684038254 -v 0 0.9434493762165953 -0.9734206514614141 -v 0 1.0562724087934354 -0.9196071169598045 -v 0.0625 1.4282777030533893 -0.8538854485718967 -v 0.0625 1.4293684532956745 -0.9788806889275408 -v 0.0625 1.0538448622869883 -0.921291797008148 -v 0.0625 1.0549356125292735 -1.046287037363792 -v -0.0625 1.4282777030533893 -0.8538854485718967 -v -0.0625 1.4293684532956745 -0.9788806889275408 -v -0.0625 1.0538448622869883 -0.921291797008148 -v -0.0625 1.0549356125292735 -1.046287037363792 -v -0.03125 1.6433702376730395 -0.8906671722694095 -v -0.03125 1.3356178148567246 -0.8364021167484939 -v -0.03125 1.652052646556386 -0.841426784618799 -v -0.03125 1.344300223740071 -0.7871617290978834 -v -0.34375 1.6433702376730395 -0.8906671722694095 -v -0.34375 1.3356178148567246 -0.8364021167484939 -v -0.34375 1.652052646556386 -0.841426784618799 -v -0.34375 1.344300223740071 -0.7871617290978834 -v -0.663231875 1.5571370734250607 -0.2557661167957289 -v -0.776055 1.557136784136433 -0.30957986836648865 -v -0.663231875 1.4321367572630839 -0.255766292353529 -v -0.776055 1.432137083479302 -0.3095801524543996 -v -0.58251125 1.5571366392912245 -0.4250008472328932 -v -0.695334375 1.5571369655074425 -0.47881470733376397 -v -0.58251125 1.4321369386340932 -0.4250011313208043 -v -0.695334375 1.4321366493454657 -0.47881488289156393 -v 0.28125 1.5818197531097766 -0.8798141611652264 -v 0.28125 1.3356178148567246 -0.8364021167484939 -v 0.28125 1.590502161993123 -0.8305737735146159 -v 0.28125 1.344300223740071 -0.7871617290978834 -v 0.03125 1.5818197531097766 -0.8798141611652264 -v 0.03125 1.3356178148567246 -0.8364021167484939 -v 0.03125 1.590502161993123 -0.8305737735146159 -v 0.03125 1.344300223740071 -0.7871617290978834 -v 0.591491875 1.6995006872985623 -0.8136820454982124 -v 0.595114375 1.6988877322512121 -0.8760741075886033 -v 0.621048125 1.6444772203812588 -0.8114255393402244 -v 0.624670625 1.6438642653339088 -0.8738176014306153 -v 0.461493125 1.5545558410151095 -0.812499674202116 -v 0.461493125 1.5545553132891639 -0.8749997237529934 -v 0.507573125 1.5123311818578908 -0.8124999431731318 -v 0.507573125 1.5123312696367908 -0.8750001012541202 -v 0.76863375 1.9066068067551591 -0.8124995560538204 -v 0.76863375 1.9066068945340593 -0.8749997141348088 -v 0.884070625 1.68485403942177 -0.8125001003833675 -v 0.884070625 1.6848542357307812 -0.8749996429595104 -v 0.54688125 1.791169282112213 -0.8124996669499529 -v 0.54688125 1.7911693698911129 -0.8749998250309413 -v 0.662318125 1.5694166233089348 -0.8124995957746544 -v 0.662318125 1.5694167110878348 -0.8749997538556428 -v -0.591491875 1.6995006872985623 -0.8136820454982124 -v -0.595114375 1.6988877322512121 -0.8760741075886033 -v -0.621048125 1.6444772203812588 -0.8114255393402244 -v -0.624670625 1.6438642653339088 -0.8738176014306153 -v -0.461493125 1.5545558410151095 -0.812499674202116 -v -0.461493125 1.5545553132891639 -0.8749997237529934 -v -0.507573125 1.5123311818578908 -0.8124999431731318 -v -0.507573125 1.5123312696367908 -0.8750001012541202 -v -0.76863375 1.9066068067551591 -0.8124995560538204 -v -0.76863375 1.9066068945340593 -0.8749997141348088 -v -0.884070625 1.68485403942177 -0.8125001003833675 -v -0.884070625 1.6848542357307812 -0.8749996429595104 -v -0.54688125 1.791169282112213 -0.8124996669499529 -v -0.54688125 1.7911693698911129 -0.8749998250309413 -v -0.662318125 1.5694166233089348 -0.8124995957746544 -v -0.662318125 1.5694167110878348 -0.8749997538556428 -v 0.09375 1.70790541301535 -1.1604382669637814 -v 0.09375 1.7002883159236861 -1.222471749929429 -v 0.09375 1.521803009073759 -1.1375872656033026 -v 0.09375 1.5141856949218733 -1.1996219795786414 -v -0.09375 1.70790541301535 -1.1604382669637814 -v -0.09375 1.7002883159236861 -1.222471749929429 -v -0.09375 1.521803009073759 -1.1375872656033026 -v -0.09375 1.5141856949218733 -1.1996219795786414 -v 0.125 1.8009556917288767 -1.1718636048488544 -v 0.125 1.7857226200251293 -1.2959314033452172 -v 0.125 1.7389215932583835 -1.1642463992270795 -v 0.125 1.7236884130245251 -1.288314813228288 -v -0.125 1.8009556917288767 -1.1718636048488544 -v -0.125 1.7857226200251293 -1.2959314033452172 -v -0.125 1.7389215932583835 -1.1642463992270795 -v -0.125 1.7236884130245251 -1.288314813228288 -v 0.125 1.7541560045019333 -1.040178202286093 -v 0.1875 1.808572390375917 -1.1098287823434045 -v 0.125 1.5060187780548926 -1.0097105022785737 -v 0.1875 1.4363684879120937 -1.0641288431972056 -v -0.125 1.7541560045019333 -1.040178202286093 -v -0.1875 1.808572390375917 -1.1098287823434045 -v -0.125 1.5060187780548926 -1.0097105022785737 -v -0.1875 1.4363684879120937 -1.0641288431972056 -v 0.125 1.6300876990308357 -1.024944406547389 -v -0.125 1.6300876990308357 -1.024944406547389 -v -0.1875 1.6224711089139066 -1.086978613547993 -v 0.1875 1.6224711089139066 -1.086978613547993 -v 0 1.6300876990308357 -1.024944406547389 -v 0 1.5060187780548926 -1.0097105022785737 -v 0 1.4363684879120937 -1.0641288431972056 -v 0 1.808572390375917 -1.1098287823434045 -v 0 1.7541560045019333 -1.040178202286093 -v 0.1875 1.8009556917288767 -1.1718636048488544 -v 0.1875 1.7857226200251293 -1.2959314033452172 -v 0.1875 1.4287514993505408 -1.1261617106580075 -v 0.1875 1.4135175950817258 -1.2502306316339507 -v 0.125 1.8009556917288767 -1.1718636048488544 -v 0.125 1.7857226200251293 -1.2959314033452172 -v 0.125 1.4287514993505408 -1.1261617106580075 -v 0.125 1.4135175950817258 -1.2502306316339507 -v -0.125 1.8009556917288767 -1.1718636048488544 -v -0.125 1.7857226200251293 -1.2959314033452172 -v -0.125 1.4287514993505408 -1.1261617106580075 -v -0.125 1.4135175950817258 -1.2502306316339507 -v -0.1875 1.8009556917288767 -1.1718636048488544 -v -0.1875 1.7857226200251293 -1.2959314033452172 -v -0.1875 1.4287514993505408 -1.1261617106580075 -v -0.1875 1.4135175950817258 -1.2502306316339507 -v 0.125 1.490785597821034 -1.1337789162797824 -v 0.125 1.4755518020823302 -1.2578472217508798 -v 0.125 1.4287514993505408 -1.1261617106580075 -v 0.125 1.4135175950817258 -1.2502306316339507 -v -0.125 1.490785597821034 -1.1337789162797824 -v -0.125 1.4755518020823302 -1.2578472217508798 -v -0.125 1.4287514993505408 -1.1261617106580075 -v -0.125 1.4135175950817258 -1.2502306316339507 -v 0.1875 1.808572390375917 -1.1098287823434045 -v 0.1875 1.8009556917288767 -1.1718636048488544 -v 0.1875 1.4363684879120937 -1.0641288431972056 -v 0.1875 1.4287514993505408 -1.1261617106580075 -v -0.1875 1.808572390375917 -1.1098287823434045 -v -0.1875 1.8009556917288767 -1.1718636048488544 -v -0.1875 1.4363684879120937 -1.0641288431972056 -v -0.1875 1.4287514993505408 -1.1261617106580075 -v -0.125 1.7277437787227952 -1.255129866179727 -v -0.125 1.4791135334757237 -1.2289986858337931 -v 0.125 1.7277437787227952 -1.255129866179727 -v 0.125 1.4791135334757237 -1.2289986858337931 -vt 0.9 0.609375 +v 0.1875 1.5542 -0.8609 +v 0.1875 1.5517 -1.1484 +v 0.1875 1.6161 -0.924 +v 0.1875 1.6142 -1.1489 +v 0.25 1.5542 -0.8609 +v 0.25 1.5522 -1.0859 +v 0.25 1.6161 -0.924 +v 0.25 1.6147 -1.0864 +v -0.1875 1.6161 -0.924 +v -0.1875 1.6142 -1.1489 +v -0.1875 1.5542 -0.8609 +v -0.1875 1.5517 -1.1484 +v -0.25 1.6161 -0.924 +v -0.25 1.6147 -1.0864 +v -0.25 1.5542 -0.8609 +v -0.25 1.5522 -1.0859 +v 0.5986 1.5392 -0.4336 +v 0.6779 1.5389 -0.4705 +v 0.5986 1.4517 -0.4328 +v 0.6779 1.4514 -0.4698 +v 0.5775 1.5388 -0.4789 +v 0.6568 1.5385 -0.5159 +v 0.5775 1.4513 -0.4781 +v 0.6568 1.451 -0.5151 +v 0.5605 1.5576 -0.4711 +v 0.6738 1.5571 -0.5239 +v 0.5605 1.4326 -0.47 +v 0.6738 1.4321 -0.5229 +v 0.3835 1.5543 -0.8506 +v 0.4951 1.5538 -0.9018 +v 0.3835 1.4293 -0.8495 +v 0.4951 1.4288 -0.9007 +v -0.3835 1.5543 -0.8506 +v -0.4942 1.5538 -0.9018 +v -0.3835 1.4293 -0.8495 +v -0.4942 1.4288 -0.9007 +v -0.374 1.5543 -0.8547 +v -0.374 1.5532 -0.9797 +v -0.374 1.4293 -0.8536 +v -0.374 1.4282 -0.9786 +v 0.3835 1.5543 -0.8506 +v 0.4951 1.5538 -0.9018 +v 0.3835 1.4293 -0.8495 +v 0.4951 1.4288 -0.9007 +v 0.375 1.5543 -0.8547 +v 0.375 1.5532 -0.9797 +v 0.375 1.4293 -0.8536 +v 0.375 1.4282 -0.9786 +v 0.375 1.5543 -0.8547 +v 0.375 1.5532 -0.9797 +v 0.375 1.4293 -0.8536 +v 0.375 1.4282 -0.9786 +v -0.375 1.5543 -0.8547 +v -0.375 1.5532 -0.9797 +v -0.375 1.4293 -0.8536 +v -0.375 1.4282 -0.9786 +v -0.5605 1.5576 -0.4711 +v -0.6738 1.5571 -0.5239 +v -0.5605 1.4326 -0.47 +v -0.6738 1.4321 -0.5229 +v -0.3835 1.5543 -0.8506 +v -0.4942 1.5538 -0.9018 +v -0.3835 1.4293 -0.8495 +v -0.4942 1.4288 -0.9007 +v -0.5986 1.5392 -0.4336 +v -0.6779 1.5389 -0.4705 +v -0.5986 1.4517 -0.4328 +v -0.6779 1.4514 -0.4698 +v -0.5775 1.5388 -0.4789 +v -0.6568 1.5385 -0.5159 +v -0.5775 1.4513 -0.4781 +v -0.6568 1.451 -0.5151 +v -0.125 0.9434 -0.9734 +v -0.125 0.9973 -1.0862 +v -0.125 0.8306 -1.0272 +v -0.125 0.8844 -1.1401 +v -0.25 0.9434 -0.9734 +v -0.25 0.9973 -1.0862 +v -0.25 0.8306 -1.0272 +v -0.25 0.8844 -1.1401 +v 0.25 0.9434 -0.9734 +v 0.25 0.9973 -1.0862 +v 0.25 0.8306 -1.0272 +v 0.25 0.8844 -1.1401 +v 0.125 0.9434 -0.9734 +v 0.125 0.9973 -1.0862 +v 0.125 0.8306 -1.0272 +v 0.125 0.8844 -1.1401 +v 0.25 1.0563 -0.9196 +v 0.25 1.1101 -1.0324 +v 0.25 0.9434 -0.9734 +v 0.25 0.9973 -1.0862 +v -0.25 1.0563 -0.9196 +v -0.25 1.1101 -1.0324 +v -0.25 0.9434 -0.9734 +v -0.25 0.9973 -1.0862 +v 0 1.1101 -1.0324 +v 0 0.9973 -1.0862 +v 0 0.9434 -0.9734 +v 0 1.0563 -0.9196 +v 0.0625 1.4283 -0.8539 +v 0.0625 1.4294 -0.9789 +v 0.0625 1.0538 -0.9213 +v 0.0625 1.0549 -1.0463 +v -0.0625 1.4283 -0.8539 +v -0.0625 1.4294 -0.9789 +v -0.0625 1.0538 -0.9213 +v -0.0625 1.0549 -1.0463 +v -0.0312 1.6434 -0.8907 +v -0.0312 1.3356 -0.8364 +v -0.0312 1.6521 -0.8414 +v -0.0312 1.3443 -0.7872 +v -0.3437 1.6434 -0.8907 +v -0.3437 1.3356 -0.8364 +v -0.3437 1.6521 -0.8414 +v -0.3437 1.3443 -0.7872 +v -0.6632 1.5571 -0.2558 +v -0.7761 1.5571 -0.3096 +v -0.6632 1.4321 -0.2558 +v -0.7761 1.4321 -0.3096 +v -0.5825 1.5571 -0.425 +v -0.6953 1.5571 -0.4788 +v -0.5825 1.4321 -0.425 +v -0.6953 1.4321 -0.4788 +v 0.2813 1.5818 -0.8798 +v 0.2813 1.3356 -0.8364 +v 0.2813 1.5905 -0.8306 +v 0.2813 1.3443 -0.7872 +v 0.0313 1.5818 -0.8798 +v 0.0313 1.3356 -0.8364 +v 0.0313 1.5905 -0.8306 +v 0.0313 1.3443 -0.7872 +v 0.5915 1.6995 -0.8137 +v 0.5951 1.6989 -0.8761 +v 0.621 1.6445 -0.8114 +v 0.6247 1.6439 -0.8738 +v 0.4615 1.5546 -0.8125 +v 0.4615 1.5546 -0.875 +v 0.5076 1.5123 -0.8125 +v 0.5076 1.5123 -0.875 +v 0.7686 1.9066 -0.8125 +v 0.7686 1.9066 -0.875 +v 0.8841 1.6849 -0.8125 +v 0.8841 1.6849 -0.875 +v 0.5469 1.7912 -0.8125 +v 0.5469 1.7912 -0.875 +v 0.6623 1.5694 -0.8125 +v 0.6623 1.5694 -0.875 +v -0.5915 1.6995 -0.8137 +v -0.5951 1.6989 -0.8761 +v -0.621 1.6445 -0.8114 +v -0.6247 1.6439 -0.8738 +v -0.4615 1.5546 -0.8125 +v -0.4615 1.5546 -0.875 +v -0.5076 1.5123 -0.8125 +v -0.5076 1.5123 -0.875 +v -0.7686 1.9066 -0.8125 +v -0.7686 1.9066 -0.875 +v -0.8841 1.6849 -0.8125 +v -0.8841 1.6849 -0.875 +v -0.5469 1.7912 -0.8125 +v -0.5469 1.7912 -0.875 +v -0.6623 1.5694 -0.8125 +v -0.6623 1.5694 -0.875 +v 0.0938 1.7079 -1.1604 +v 0.0938 1.7003 -1.2225 +v 0.0938 1.5218 -1.1376 +v 0.0938 1.5142 -1.1996 +v -0.0937 1.7079 -1.1604 +v -0.0937 1.7003 -1.2225 +v -0.0937 1.5218 -1.1376 +v -0.0937 1.5142 -1.1996 +v 0.125 1.801 -1.1719 +v 0.125 1.7857 -1.2959 +v 0.125 1.7389 -1.1642 +v 0.125 1.7237 -1.2883 +v -0.125 1.801 -1.1719 +v -0.125 1.7857 -1.2959 +v -0.125 1.7389 -1.1642 +v -0.125 1.7237 -1.2883 +v 0.125 1.7542 -1.0402 +v 0.1875 1.8086 -1.1098 +v 0.125 1.506 -1.0097 +v 0.1875 1.4364 -1.0641 +v -0.125 1.7542 -1.0402 +v -0.1875 1.8086 -1.1098 +v -0.125 1.506 -1.0097 +v -0.1875 1.4364 -1.0641 +v 0.125 1.6301 -1.0249 +v -0.125 1.6301 -1.0249 +v -0.1875 1.6225 -1.087 +v 0.1875 1.6225 -1.087 +v 0 1.6301 -1.0249 +v 0 1.506 -1.0097 +v 0 1.4364 -1.0641 +v 0 1.8086 -1.1098 +v 0 1.7542 -1.0402 +v 0.1875 1.801 -1.1719 +v 0.1875 1.7857 -1.2959 +v 0.1875 1.4288 -1.1262 +v 0.1875 1.4135 -1.2502 +v 0.125 1.801 -1.1719 +v 0.125 1.7857 -1.2959 +v 0.125 1.4288 -1.1262 +v 0.125 1.4135 -1.2502 +v -0.125 1.801 -1.1719 +v -0.125 1.7857 -1.2959 +v -0.125 1.4288 -1.1262 +v -0.125 1.4135 -1.2502 +v -0.1875 1.801 -1.1719 +v -0.1875 1.7857 -1.2959 +v -0.1875 1.4288 -1.1262 +v -0.1875 1.4135 -1.2502 +v 0.125 1.4908 -1.1338 +v 0.125 1.4756 -1.2578 +v 0.125 1.4288 -1.1262 +v 0.125 1.4135 -1.2502 +v -0.125 1.4908 -1.1338 +v -0.125 1.4756 -1.2578 +v -0.125 1.4288 -1.1262 +v -0.125 1.4135 -1.2502 +v 0.1875 1.8086 -1.1098 +v 0.1875 1.801 -1.1719 +v 0.1875 1.4364 -1.0641 +v 0.1875 1.4288 -1.1262 +v -0.1875 1.8086 -1.1098 +v -0.1875 1.801 -1.1719 +v -0.1875 1.4364 -1.0641 +v -0.1875 1.4288 -1.1262 +v -0.125 1.7277 -1.2551 +v -0.125 1.4791 -1.229 +v 0.125 1.7277 -1.2551 +v 0.125 1.4791 -1.229 +vt 0.9 0.6094 vt 0.9 0.625 -vt 0.828125 0.625 -vt 0.84375 0.609375 -vt 0.9 0.609375 -vt 0.915625 0.625 -vt 0.859375 0.625 -vt 0.859375 0.609375 -vt 0.84375 0.6 -vt 0.84375 0.671875 -vt 0.828125 0.65625 -vt 0.828125 0.6 -vt 0.859375 0.615625 -vt 0.859375 0.671875 -vt 0.84375 0.671875 -vt 0.84375 0.63125 -vt 0.921875 0.602903125 -vt 0.921875 0.625 -vt 0.90625 0.625 -vt 0.90625 0.602903125 -vt 0.850221875 0.609375 -vt 0.850221875 0.625 -vt 0.828125 0.625 -vt 0.828125 0.609375 -vt 0.9 0.609375 +vt 0.8281 0.625 +vt 0.8438 0.6094 +vt 0.9 0.6094 +vt 0.9156 0.625 +vt 0.8594 0.625 +vt 0.8594 0.6094 +vt 0.8438 0.6 +vt 0.8438 0.6719 +vt 0.8281 0.6563 +vt 0.8281 0.6 +vt 0.8594 0.6156 +vt 0.8594 0.6719 +vt 0.8438 0.6719 +vt 0.8438 0.6313 +vt 0.9219 0.6029 +vt 0.9219 0.625 +vt 0.9063 0.625 +vt 0.9063 0.6029 +vt 0.8502 0.6094 +vt 0.8502 0.625 +vt 0.8281 0.625 +vt 0.8281 0.6094 +vt 0.9 0.6094 vt 0.9 0.625 -vt 0.84375 0.625 -vt 0.828125 0.609375 -vt 0.915625 0.625 -vt 0.9 0.640625 -vt 0.859375 0.640625 -vt 0.859375 0.625 -vt 0.828125 0.615625 -vt 0.828125 0.671875 -vt 0.8125 0.65625 -vt 0.8125 0.615625 -vt 0.84375 0.615625 -vt 0.84375 0.6875 -vt 0.828125 0.6875 -vt 0.828125 0.63125 -vt 0.921875 0.602903125 -vt 0.921875 0.625 -vt 0.90625 0.625 -vt 0.90625 0.602903125 -vt 0.850221875 0.609375 -vt 0.850221875 0.625 -vt 0.828125 0.625 -vt 0.828125 0.609375 -vt 0.709375 0.525 -vt 0.709375 0.546875 -vt 0.6875 0.546875 +vt 0.8438 0.625 +vt 0.8281 0.6094 +vt 0.9156 0.625 +vt 0.9 0.6406 +vt 0.8594 0.6406 +vt 0.8594 0.625 +vt 0.8281 0.6156 +vt 0.8281 0.6719 +vt 0.8125 0.6563 +vt 0.8125 0.6156 +vt 0.8438 0.6156 +vt 0.8438 0.6875 +vt 0.8281 0.6875 +vt 0.8281 0.6313 +vt 0.9219 0.6029 +vt 0.9219 0.625 +vt 0.9063 0.625 +vt 0.9063 0.6029 +vt 0.8502 0.6094 +vt 0.8502 0.625 +vt 0.8281 0.625 +vt 0.8281 0.6094 +vt 0.7094 0.525 +vt 0.7094 0.5469 +vt 0.6875 0.5469 vt 0.6875 0.525 -vt 0.865625 0.571875 -vt 0.865625 0.59375 -vt 0.84375 0.59375 -vt 0.84375 0.571875 -vt 0.85625 0.609375 -vt 0.85625 0.625 -vt 0.84375 0.625 -vt 0.84375 0.609375 -vt 0.6375 0.578125 -vt 0.6375 0.59375 -vt 0.625 0.59375 -vt 0.625 0.578125 -vt 0.66875 0.546875 -vt 0.66875 0.5625 -vt 0.65625 0.5625 -vt 0.65625 0.546875 -vt 0.85625 0.59375 -vt 0.85625 0.609375 -vt 0.84375 0.609375 -vt 0.84375 0.59375 -vt 0.8125 0.28125 +vt 0.8656 0.5719 +vt 0.8656 0.5938 +vt 0.8438 0.5938 +vt 0.8438 0.5719 +vt 0.8563 0.6094 +vt 0.8563 0.625 +vt 0.8438 0.625 +vt 0.8438 0.6094 +vt 0.6375 0.5781 +vt 0.6375 0.5938 +vt 0.625 0.5938 +vt 0.625 0.5781 +vt 0.6688 0.5469 +vt 0.6688 0.5625 +vt 0.6563 0.5625 +vt 0.6563 0.5469 +vt 0.8563 0.5938 +vt 0.8563 0.6094 +vt 0.8438 0.6094 +vt 0.8438 0.5938 +vt 0.8125 0.2813 vt 0.8125 0.3125 -vt 0.84375 0.3125 -vt 0.84375 0.28125 -vt 0.4640625 0.25 -vt 0.4640625 0.28125 -vt 0.359375 0.28125 -vt 0.359375 0.25 -vt 0.2296875 0.25 -vt 0.2296875 0.28125 -vt 0.125 0.28125 +vt 0.8438 0.3125 +vt 0.8438 0.2813 +vt 0.4641 0.25 +vt 0.4641 0.2813 +vt 0.3594 0.2813 +vt 0.3594 0.25 +vt 0.2297 0.25 +vt 0.2297 0.2813 +vt 0.125 0.2813 vt 0.125 0.25 -vt 0.3859375 0.96875 -vt 0.3859375 1 -vt 0.28125 1 -vt 0.28125 0.96875 -vt 0.3390625 0.25 -vt 0.3390625 0.28125 -vt 0.234375 0.28125 -vt 0.234375 0.25 -vt 0.13973359375 0.97194640625 -vt 0.1755284375 0.97194640625 -vt 0.15895171875 0.9984375 -vt 0.15673625 0.99816640625 -vt 0.88984390625 0.96906984375 -vt 0.89177796875 0.96875 -vt 0.90625 1 +vt 0.3859 0.9688 +vt 0.3859 1 +vt 0.2813 1 +vt 0.2813 0.9688 +vt 0.3391 0.25 +vt 0.3391 0.2813 +vt 0.2344 0.2813 +vt 0.2344 0.25 +vt 0.1397 0.9719 +vt 0.1755 0.9719 +vt 0.159 0.9984 +vt 0.1567 0.9982 +vt 0.8898 0.9691 +vt 0.8918 0.9688 +vt 0.9063 1 vt 0.875 1 -vt 0.59598125 1 -vt 0.59375 1 -vt 0.59375 0.96875 -vt 0.59598125 0.96875 -vt 0.21875 0.96875 -vt 0.1875 0.96875 +vt 0.596 1 +vt 0.5938 1 +vt 0.5938 0.9688 +vt 0.596 0.9688 +vt 0.2188 0.9688 +vt 0.1875 0.9688 vt 0.1875 1 -vt 0.21875 1 -vt 0.14706640625 1 -vt 0.1636434375 0.96882125 -vt 0.127848125 0.96882125 -vt 0.14485109375 0.99967953125 -vt 0.890625 1 -vt 0.9050971875 0.96875 -vt 0.90703109375 0.96907109375 -vt 0.921875 1 -vt 0.65848125 0.96875 -vt 0.65848125 1 -vt 0.65625 1 -vt 0.65625 0.96875 -vt 0.28125 1 -vt 0.28125 0.96875 -vt 0.25 0.96875 +vt 0.2188 1 +vt 0.1471 1 +vt 0.1636 0.9688 +vt 0.1278 0.9688 +vt 0.1449 0.9997 +vt 0.8906 1 +vt 0.9051 0.9688 +vt 0.907 0.9691 +vt 0.9219 1 +vt 0.6585 0.9688 +vt 0.6585 1 +vt 0.6563 1 +vt 0.6563 0.9688 +vt 0.2813 1 +vt 0.2813 0.9688 +vt 0.25 0.9688 vt 0.25 1 -vt 0.40625 1 -vt 0.40625 0.96875 -vt 0.21875 0.96875 -vt 0.21875 1 -vt 0.59375 1 -vt 0.59375 0.96875 -vt 0.40625 0.96875 -vt 0.40625 1 -vt 0.375 0.96875 +vt 0.4063 1 +vt 0.4063 0.9688 +vt 0.2188 0.9688 +vt 0.2188 1 +vt 0.5938 1 +vt 0.5938 0.9688 +vt 0.4063 0.9688 +vt 0.4063 1 +vt 0.375 0.9688 vt 0.375 1 vt 0.5625 1 -vt 0.5625 0.96875 -vt 0.171875 1 -vt 0.171875 0.96875 -vt 0.359375 0.96875 -vt 0.359375 1 -vt 0.84375 0.3125 +vt 0.5625 0.9688 +vt 0.1719 1 +vt 0.1719 0.9688 +vt 0.3594 0.9688 +vt 0.3594 1 +vt 0.8438 0.3125 vt 0.8125 0.3125 -vt 0.8125 0.28125 -vt 0.84375 0.28125 -vt 0.3078125 0.96875 -vt 0.203125 0.96875 -vt 0.203125 1 -vt 0.3078125 1 -vt 0.3859375 0.96875 -vt 0.28125 0.96875 -vt 0.28125 1 -vt 0.3859375 1 -vt 0.4171875 1 +vt 0.8125 0.2813 +vt 0.8438 0.2813 +vt 0.3078 0.9688 +vt 0.2031 0.9688 +vt 0.2031 1 +vt 0.3078 1 +vt 0.3859 0.9688 +vt 0.2813 0.9688 +vt 0.2813 1 +vt 0.3859 1 +vt 0.4172 1 vt 0.3125 1 -vt 0.3125 0.96875 -vt 0.4171875 0.96875 -vt 0.4796875 0.96875 -vt 0.375 0.96875 +vt 0.3125 0.9688 +vt 0.4172 0.9688 +vt 0.4797 0.9688 +vt 0.375 0.9688 vt 0.375 1 -vt 0.4796875 1 -vt 0.6625 0.546875 -vt 0.640625 0.546875 -vt 0.640625 0.525 +vt 0.4797 1 +vt 0.6625 0.5469 +vt 0.6406 0.5469 +vt 0.6406 0.525 vt 0.6625 0.525 -vt 0.803125 0.578125 -vt 0.78125 0.578125 -vt 0.78125 0.55625 -vt 0.803125 0.55625 -vt 0.809375 0.59375 -vt 0.796875 0.59375 -vt 0.796875 0.578125 -vt 0.809375 0.578125 -vt 0.79375 0.609375 -vt 0.78125 0.609375 -vt 0.796875 0.59375 -vt 0.79375 0.59375 -vt 0.825 0.578125 -vt 0.8125 0.578125 +vt 0.8031 0.5781 +vt 0.7813 0.5781 +vt 0.7813 0.5563 +vt 0.8031 0.5563 +vt 0.8094 0.5938 +vt 0.7969 0.5938 +vt 0.7969 0.5781 +vt 0.8094 0.5781 +vt 0.7938 0.6094 +vt 0.7813 0.6094 +vt 0.7969 0.5938 +vt 0.7938 0.5938 +vt 0.825 0.5781 +vt 0.8125 0.5781 vt 0.8125 0.5625 vt 0.825 0.5625 -vt 0.809183125 0.59385734375 -vt 0.796685 0.593703125 -vt 0.797066875 0.57823234375 -vt 0.82519 0.57838671875 -vt 0.78125 0.65625 -vt 0.78125 0.6875 +vt 0.8092 0.5939 +vt 0.7967 0.5937 +vt 0.7971 0.5782 +vt 0.8252 0.5784 +vt 0.7813 0.6563 +vt 0.7813 0.6875 vt 0.75 0.6875 -vt 0.75 0.65625 -vt 0.71875 0.65625 -vt 0.71875 0.6875 +vt 0.75 0.6563 +vt 0.7188 0.6563 +vt 0.7188 0.6875 vt 0.75 0.6875 -vt 0.75 0.65625 -vt 0.84375 0.28125 -vt 0.84375 0.3125 +vt 0.75 0.6563 +vt 0.8438 0.2813 +vt 0.8438 0.3125 vt 0.8125 0.3125 -vt 0.8125 0.28125 -vt 0.765625 0.671875 -vt 0.765625 0.703125 -vt 0.734375 0.703125 -vt 0.734375 0.671875 -vt 0.75 0.65625 +vt 0.8125 0.2813 +vt 0.7656 0.6719 +vt 0.7656 0.7031 +vt 0.7344 0.7031 +vt 0.7344 0.6719 +vt 0.75 0.6563 vt 0.75 0.6875 -vt 0.71875 0.6875 -vt 0.71875 0.65625 -vt 0.75 0.65625 +vt 0.7188 0.6875 +vt 0.7188 0.6563 +vt 0.75 0.6563 vt 0.75 0.6875 -vt 0.78125 0.6875 -vt 0.78125 0.65625 -vt 0.75 0.65625 +vt 0.7813 0.6875 +vt 0.7813 0.6563 +vt 0.75 0.6563 vt 0.75 0.6875 -vt 0.71875 0.6875 -vt 0.71875 0.65625 -vt 0.8125 0.28125 +vt 0.7188 0.6875 +vt 0.7188 0.6563 +vt 0.8125 0.2813 vt 0.8125 0.3125 -vt 0.84375 0.3125 -vt 0.84375 0.28125 -vt 0.765625 0.671875 -vt 0.765625 0.703125 -vt 0.734375 0.703125 -vt 0.734375 0.671875 -vt 0.71875 0.65625 -vt 0.71875 0.6875 +vt 0.8438 0.3125 +vt 0.8438 0.2813 +vt 0.7656 0.6719 +vt 0.7656 0.7031 +vt 0.7344 0.7031 +vt 0.7344 0.6719 +vt 0.7188 0.6563 +vt 0.7188 0.6875 vt 0.75 0.6875 -vt 0.75 0.65625 -vt 0 0.671875 -vt 0 0.703125 -vt 0.03125 0.703125 -vt 0.03125 0.671875 -vt 0.03125 0.65625 -vt 0.03125 0.6875 +vt 0.75 0.6563 +vt 0 0.6719 +vt 0 0.7031 +vt 0.0313 0.7031 +vt 0.0313 0.6719 +vt 0.0313 0.6563 +vt 0.0313 0.6875 vt 0 0.6875 -vt 0 0.65625 -vt 0.234375 1 -vt 0.296875 1 -vt 0.296875 0.96875 -vt 0.234375 0.96875 -vt 0.859375 0.09375 -vt 0.796875 0.09375 -vt 0.796875 0.0625 -vt 0.859375 0.0625 +vt 0 0.6563 +vt 0.2344 1 +vt 0.2969 1 +vt 0.2969 0.9688 +vt 0.2344 0.9688 +vt 0.8594 0.0938 +vt 0.7969 0.0938 +vt 0.7969 0.0625 +vt 0.8594 0.0625 vt 0.9375 0.9375 vt 0.875 0.9375 -vt 0.875 0.96875 -vt 0.9375 0.96875 -vt 1 0.96875 -vt 0.9375 0.96875 +vt 0.875 0.9688 +vt 0.9375 0.9688 +vt 1 0.9688 +vt 0.9375 0.9688 vt 0.9375 1 vt 1 1 vt 0 1 vt 0.0625 1 -vt 0.0625 0.96875 -vt 0 0.96875 -vt 0.734375 0.0625 -vt 0.796875 0.0625 -vt 0.796875 0.09375 -vt 0.734375 0.09375 -vt 0.875 0.96875 -vt 0.9375 0.96875 +vt 0.0625 0.9688 +vt 0 0.9688 +vt 0.7344 0.0625 +vt 0.7969 0.0625 +vt 0.7969 0.0938 +vt 0.7344 0.0938 +vt 0.875 0.9688 +vt 0.9375 0.9688 vt 0.9375 0.9375 vt 0.875 0.9375 -vt 0.515625 0.96875 -vt 0.453125 0.96875 -vt 0.453125 1 -vt 0.515625 1 -vt 0.96875 0.65625 -vt 0.84375 0.65625 -vt 0.84375 0.625 -vt 0.96875 0.625 -vt 0.96875 0.65625 -vt 0.84375 0.65625 -vt 0.84375 0.625 -vt 0.96875 0.625 -vt 0.84375 0.65625 -vt 0.8125 0.65625 +vt 0.5156 0.9688 +vt 0.4531 0.9688 +vt 0.4531 1 +vt 0.5156 1 +vt 0.9688 0.6563 +vt 0.8438 0.6563 +vt 0.8438 0.625 +vt 0.9688 0.625 +vt 0.9688 0.6563 +vt 0.8438 0.6563 +vt 0.8438 0.625 +vt 0.9688 0.625 +vt 0.8438 0.6563 +vt 0.8125 0.6563 vt 0.8125 0.625 -vt 0.84375 0.625 -vt 0.859375 0.65625 -vt 0.828125 0.65625 -vt 0.828125 0.625 -vt 0.859375 0.625 -vt 0.84375 0.625 -vt 0.96875 0.625 -vt 0.96875 0.65625 -vt 0.84375 0.65625 -vt 0.84375 0.625 -vt 0.96875 0.625 -vt 0.96875 0.65625 -vt 0.84375 0.65625 -vt 0.309375 0.8125 -vt 0.296875 0.8125 -vt 0.296875 0.734375 -vt 0.309375 0.734375 +vt 0.8438 0.625 +vt 0.8594 0.6563 +vt 0.8281 0.6563 +vt 0.8281 0.625 +vt 0.8594 0.625 +vt 0.8438 0.625 +vt 0.9688 0.625 +vt 0.9688 0.6563 +vt 0.8438 0.6563 +vt 0.8438 0.625 +vt 0.9688 0.625 +vt 0.9688 0.6563 +vt 0.8438 0.6563 +vt 0.3094 0.8125 +vt 0.2969 0.8125 +vt 0.2969 0.7344 +vt 0.3094 0.7344 vt 0.3125 0.8 vt 0.3125 0.8125 -vt 0.234375 0.8125 -vt 0.234375 0.8 +vt 0.2344 0.8125 +vt 0.2344 0.8 vt 0.625 0 -vt 0.625 0.078125 -vt 0.546875 0.078125 -vt 0.546875 0 -vt 0.234375 0.734375 -vt 0.234375 0.8125 +vt 0.625 0.0781 +vt 0.5469 0.0781 +vt 0.5469 0 +vt 0.2344 0.7344 +vt 0.2344 0.8125 vt 0.3125 0.8125 -vt 0.3125 0.734375 -vt 0.3125 0.796875 +vt 0.3125 0.7344 +vt 0.3125 0.7969 vt 0.3125 0.8125 -vt 0.234375 0.8125 -vt 0.234375 0.796875 +vt 0.2344 0.8125 +vt 0.2344 0.7969 vt 0.3125 0.75 -vt 0.3125 0.734375 -vt 0.234375 0.734375 -vt 0.234375 0.75 +vt 0.3125 0.7344 +vt 0.2344 0.7344 +vt 0.2344 0.75 vt 0.25 0.8125 vt 0.1875 0.8125 vt 0.1875 0.75 @@ -558,141 +1323,141 @@ vt 0.1875 0.8125 vt 0.1875 0.75 vt 0.25 0.75 vt 0.25 0.8125 -vt 0.15625 0.8125 -vt 0.15625 0.75 +vt 0.1563 0.8125 +vt 0.1563 0.75 vt 0.25 0.75 vt 0.25 0.8125 -vt 0.15625 0.8125 -vt 0.15625 0.75 +vt 0.1563 0.8125 +vt 0.1563 0.75 vt 0.25 0.75 vt 0.25 0.8125 -vt 0.15625 0.8125 -vt 0.15625 0.75 +vt 0.1563 0.8125 +vt 0.1563 0.75 vt 0.25 0.75 vt 0.25 0.8125 -vt 0.15625 0.8125 -vt 0.15625 0.75 +vt 0.1563 0.8125 +vt 0.1563 0.75 vt 0.25 0.75 -vt 0.40625 0.1875 +vt 0.4063 0.1875 vt 0.375 0.1875 vt 0.375 0.3125 -vt 0.40625 0.3125 +vt 0.4063 0.3125 vt 0.3125 0.3125 -vt 0.28125 0.3125 -vt 0.28125 0.1875 +vt 0.2813 0.3125 +vt 0.2813 0.1875 vt 0.3125 0.1875 -vt 0.40625 0.3125 -vt 0.40625 0.1875 -vt 0.28125 0.1875 -vt 0.28125 0.3125 -vt 0.40625 0.1875 -vt 0.40625 0.3125 -vt 0.28125 0.3125 -vt 0.28125 0.1875 -vt 0.40625 0.28125 -vt 0.40625 0.3125 -vt 0.28125 0.3125 -vt 0.28125 0.28125 -vt 0.40625 0.1875 -vt 0.40625 0.21875 -vt 0.28125 0.21875 -vt 0.28125 0.1875 -vt 0.28125 0.609375 -vt 0.28125 0.625 -vt 0.265625 0.625 -vt 0.265625 0.609375 -vt 0.015625 0.984375 -vt 0.015625 1 +vt 0.4063 0.3125 +vt 0.4063 0.1875 +vt 0.2813 0.1875 +vt 0.2813 0.3125 +vt 0.4063 0.1875 +vt 0.4063 0.3125 +vt 0.2813 0.3125 +vt 0.2813 0.1875 +vt 0.4063 0.2813 +vt 0.4063 0.3125 +vt 0.2813 0.3125 +vt 0.2813 0.2813 +vt 0.4063 0.1875 +vt 0.4063 0.2188 +vt 0.2813 0.2188 +vt 0.2813 0.1875 +vt 0.2813 0.6094 +vt 0.2813 0.625 +vt 0.2656 0.625 +vt 0.2656 0.6094 +vt 0.0156 0.9844 +vt 0.0156 1 vt 0 1 -vt 0 0.984375 -vt 0.546875 0.328125 -vt 0.546875 0.34375 -vt 0.5 0.34375 -vt 0.5 0.328125 -vt 0.546875 0.328125 -vt 0.546875 0.34375 -vt 0.5 0.34375 -vt 0.5 0.328125 -vt 0.546875 0.296875 -vt 0.546875 0.3125 +vt 0 0.9844 +vt 0.5469 0.3281 +vt 0.5469 0.3438 +vt 0.5 0.3438 +vt 0.5 0.3281 +vt 0.5469 0.3281 +vt 0.5469 0.3438 +vt 0.5 0.3438 +vt 0.5 0.3281 +vt 0.5469 0.2969 +vt 0.5469 0.3125 vt 0.5 0.3125 -vt 0.5 0.296875 -vt 0.546875 0.328125 -vt 0.546875 0.34375 -vt 0.5 0.34375 -vt 0.5 0.328125 -vt 0.90625 0.421875 -vt 0.90625 0.484375 -vt 0.890625 0.484375 -vt 0.890625 0.421875 -vt 0.859375 0.421875 -vt 0.859375 0.484375 -vt 0.84375 0.484375 -vt 0.84375 0.421875 -vt 0.90625 0.46875 -vt 0.90625 0.484375 -vt 0.84375 0.484375 -vt 0.84375 0.46875 -vt 0.90625 0.421875 -vt 0.90625 0.4375 -vt 0.84375 0.4375 -vt 0.84375 0.421875 -vt 0.90625 0.421875 -vt 0.90625 0.484375 -vt 0.84375 0.484375 -vt 0.84375 0.421875 -vt 0.9375 0.71875 -vt 0.9375 0.78125 -vt 1 0.78125 -vt 1 0.71875 -vt 0.265625 0.625 -vt 0.28125 0.625 -vt 0.28125 0.609375 -vt 0.265625 0.609375 +vt 0.5 0.2969 +vt 0.5469 0.3281 +vt 0.5469 0.3438 +vt 0.5 0.3438 +vt 0.5 0.3281 +vt 0.9063 0.4219 +vt 0.9063 0.4844 +vt 0.8906 0.4844 +vt 0.8906 0.4219 +vt 0.8594 0.4219 +vt 0.8594 0.4844 +vt 0.8438 0.4844 +vt 0.8438 0.4219 +vt 0.9063 0.4688 +vt 0.9063 0.4844 +vt 0.8438 0.4844 +vt 0.8438 0.4688 +vt 0.9063 0.4219 +vt 0.9063 0.4375 +vt 0.8438 0.4375 +vt 0.8438 0.4219 +vt 0.9063 0.4219 +vt 0.9063 0.4844 +vt 0.8438 0.4844 +vt 0.8438 0.4219 +vt 0.9375 0.7188 +vt 0.9375 0.7813 +vt 1 0.7813 +vt 1 0.7188 +vt 0.2656 0.625 +vt 0.2813 0.625 +vt 0.2813 0.6094 +vt 0.2656 0.6094 vt 0 1 -vt 0.015625 1 -vt 0.015625 0.984375 -vt 0 0.984375 -vt 0.5 0.34375 -vt 0.546875 0.34375 -vt 0.546875 0.328125 -vt 0.5 0.328125 -vt 0.5 0.34375 -vt 0.546875 0.34375 -vt 0.546875 0.328125 -vt 0.5 0.328125 +vt 0.0156 1 +vt 0.0156 0.9844 +vt 0 0.9844 +vt 0.5 0.3438 +vt 0.5469 0.3438 +vt 0.5469 0.3281 +vt 0.5 0.3281 +vt 0.5 0.3438 +vt 0.5469 0.3438 +vt 0.5469 0.3281 +vt 0.5 0.3281 vt 0.5 0.3125 -vt 0.546875 0.3125 -vt 0.546875 0.296875 -vt 0.5 0.296875 -vt 0.5 0.34375 -vt 0.546875 0.34375 -vt 0.546875 0.328125 -vt 0.5 0.328125 -vt 0.890625 0.484375 -vt 0.90625 0.484375 -vt 0.90625 0.421875 -vt 0.890625 0.421875 -vt 0.84375 0.484375 -vt 0.859375 0.484375 -vt 0.859375 0.421875 -vt 0.84375 0.421875 -vt 0.84375 0.484375 -vt 0.90625 0.484375 -vt 0.90625 0.46875 -vt 0.84375 0.46875 -vt 0.84375 0.4375 -vt 0.90625 0.4375 -vt 0.90625 0.421875 -vt 0.84375 0.421875 -vt 0.84375 0.484375 -vt 0.90625 0.484375 -vt 0.90625 0.421875 -vt 0.84375 0.421875 -vt 1 0.78125 -vt 0.9375 0.78125 -vt 0.9375 0.71875 -vt 1 0.71875 +vt 0.5469 0.3125 +vt 0.5469 0.2969 +vt 0.5 0.2969 +vt 0.5 0.3438 +vt 0.5469 0.3438 +vt 0.5469 0.3281 +vt 0.5 0.3281 +vt 0.8906 0.4844 +vt 0.9063 0.4844 +vt 0.9063 0.4219 +vt 0.8906 0.4219 +vt 0.8438 0.4844 +vt 0.8594 0.4844 +vt 0.8594 0.4219 +vt 0.8438 0.4219 +vt 0.8438 0.4844 +vt 0.9063 0.4844 +vt 0.9063 0.4688 +vt 0.8438 0.4688 +vt 0.8438 0.4375 +vt 0.9063 0.4375 +vt 0.9063 0.4219 +vt 0.8438 0.4219 +vt 0.8438 0.4844 +vt 0.9063 0.4844 +vt 0.9063 0.4219 +vt 0.8438 0.4219 +vt 1 0.7813 +vt 0.9375 0.7813 +vt 0.9375 0.7188 +vt 1 0.7188 vt 0.0625 0.5625 vt 0.0625 0.75 vt 0 0.75 @@ -713,7990 +1478,3268 @@ vt 0.1875 0.5625 vt 0.1875 0.75 vt 0 0.75 vt 0 0.5625 -vt 0.921875 0.28125 -vt 0.921875 0.25 -vt 0.859375 0.25 -vt 0.859375 0.28125 -vt 0.859375 0.234375 -vt 0.859375 0.25 -vt 0.921875 0.25 -vt 0.921875 0.234375 -vt 0.90625 0.96875 -vt 0.90625 1 -vt 0.84375 1 -vt 0.84375 0.96875 -vt 0 0.609375 -vt 0 0.578125 -vt 0.015625 0.578125 -vt 0.015625 0.625 -vt 0.71875 0.71875 -vt 0.71875 0.671875 -vt 0.734375 0.671875 -vt 0.734375 0.703125 -vt 0.84375 0.984375 -vt 0.875 0.984375 +vt 0.9219 0.2813 +vt 0.9219 0.25 +vt 0.8594 0.25 +vt 0.8594 0.2813 +vt 0.8594 0.2344 +vt 0.8594 0.25 +vt 0.9219 0.25 +vt 0.9219 0.2344 +vt 0.9063 0.9688 +vt 0.9063 1 +vt 0.8438 1 +vt 0.8438 0.9688 +vt 0 0.6094 +vt 0 0.5781 +vt 0.0156 0.5781 +vt 0.0156 0.625 +vt 0.7188 0.7188 +vt 0.7188 0.6719 +vt 0.7344 0.6719 +vt 0.7344 0.7031 +vt 0.8438 0.9844 +vt 0.875 0.9844 vt 0.875 1 -vt 0.828125 1 -vt 0.4375 0.984375 -vt 0.484375 0.984375 -vt 0.484375 1 -vt 0.453125 1 -vt 0 0.96875 -vt 0.03125 0.96875 -vt 0.03125 1 +vt 0.8281 1 +vt 0.4375 0.9844 +vt 0.4844 0.9844 +vt 0.4844 1 +vt 0.4531 1 +vt 0 0.9688 +vt 0.0313 0.9688 +vt 0.0313 1 vt 0 1 vt 0 0 -vt 0.03125 0 -vt 0.03125 0.03125 -vt 0 0.03125 -vt 0.734375 0.640625 -vt 0.734375 0.671875 -vt 0.71875 0.671875 -vt 0.71875 0.625 -vt 0.015625 0.53125 -vt 0.015625 0.578125 -vt 0 0.578125 -vt 0 0.546875 -vt 0.75 0.03125 -vt 0.71875 0.03125 -vt 0.71875 0 +vt 0.0313 0 +vt 0.0313 0.0313 +vt 0 0.0313 +vt 0.7344 0.6406 +vt 0.7344 0.6719 +vt 0.7188 0.6719 +vt 0.7188 0.625 +vt 0.0156 0.5313 +vt 0.0156 0.5781 +vt 0 0.5781 +vt 0 0.5469 +vt 0.75 0.0313 +vt 0.7188 0.0313 +vt 0.7188 0 vt 0.75 0 -vt 0.515625 1 -vt 0.484375 1 -vt 0.484375 0.984375 -vt 0.53125 0.984375 -vt 0.921875 1 +vt 0.5156 1 +vt 0.4844 1 +vt 0.4844 0.9844 +vt 0.5313 0.9844 +vt 0.9219 1 vt 0.875 1 -vt 0.875 0.984375 -vt 0.90625 0.984375 +vt 0.875 0.9844 +vt 0.9063 0.9844 vt 0.75 1 -vt 0.71875 1 -vt 0.71875 0.96875 -vt 0.75 0.96875 +vt 0.7188 1 +vt 0.7188 0.9688 +vt 0.75 0.9688 vt 1 0.625 -vt 1 0.71875 -vt 0.96875 0.71875 -vt 0.96875 0.625 -vt 0.78125 0.484375 -vt 0.78125 0.578125 -vt 0.75 0.578125 -vt 0.75 0.484375 -vt 0.859375 0.96875 -vt 0.859375 1 -vt 0.84375 1 -vt 0.84375 0.96875 -vt 0.890625 0.25 -vt 0.890625 0.28125 -vt 0.875 0.28125 +vt 1 0.7188 +vt 0.9688 0.7188 +vt 0.9688 0.625 +vt 0.7813 0.4844 +vt 0.7813 0.5781 +vt 0.75 0.5781 +vt 0.75 0.4844 +vt 0.8594 0.9688 +vt 0.8594 1 +vt 0.8438 1 +vt 0.8438 0.9688 +vt 0.8906 0.25 +vt 0.8906 0.2813 +vt 0.875 0.2813 vt 0.875 0.25 vt 1 0.5 -vt 1 0.59375 -vt 0.984375 0.59375 -vt 0.984375 0.5 +vt 1 0.5938 +vt 0.9844 0.5938 +vt 0.9844 0.5 vt 1 0.625 -vt 1 0.71875 -vt 0.96875 0.71875 -vt 0.96875 0.625 -vt 0.78125 0.484375 -vt 0.78125 0.578125 -vt 0.75 0.578125 -vt 0.75 0.484375 -vt 0.859375 0.96875 -vt 0.859375 1 -vt 0.84375 1 -vt 0.84375 0.96875 -vt 0.890625 0.25 -vt 0.890625 0.28125 -vt 0.875 0.28125 +vt 1 0.7188 +vt 0.9688 0.7188 +vt 0.9688 0.625 +vt 0.7813 0.4844 +vt 0.7813 0.5781 +vt 0.75 0.5781 +vt 0.75 0.4844 +vt 0.8594 0.9688 +vt 0.8594 1 +vt 0.8438 1 +vt 0.8438 0.9688 +vt 0.8906 0.25 +vt 0.8906 0.2813 +vt 0.875 0.2813 vt 0.875 0.25 vt 1 0.5 -vt 1 0.59375 -vt 0.984375 0.59375 -vt 0.984375 0.5 -vt 0.921875 0.28125 -vt 0.921875 0.25 -vt 0.859375 0.25 -vt 0.859375 0.28125 -vt 0.90625 1 -vt 0.90625 0.96875 -vt 0.84375 0.96875 -vt 0.84375 1 -vt 0.859375 0.234375 -vt 0.859375 0.25 -vt 0.921875 0.25 -vt 0.921875 0.234375 -vt 0.78125 0.421875 -vt 0.78125 0.515625 -vt 0.765625 0.515625 -vt 0.765625 0.421875 -vt 0.984375 0.625 -vt 0.984375 0.53125 -vt 0.96875 0.53125 -vt 0.96875 0.625 -vt 0.890625 0.265625 -vt 0.890625 0.28125 -vt 0.796875 0.28125 -vt 0.796875 0.265625 -vt 0.90625 0.265625 -vt 0.90625 0.28125 -vt 0.8125 0.28125 -vt 0.8125 0.265625 -vt 0.828125 0.0625 -vt 0.921875 0.0625 -vt 0.921875 0.15625 -vt 0.828125 0.15625 +vt 1 0.5938 +vt 0.9844 0.5938 +vt 0.9844 0.5 +vt 0.9219 0.2813 +vt 0.9219 0.25 +vt 0.8594 0.25 +vt 0.8594 0.2813 +vt 0.9063 1 +vt 0.9063 0.9688 +vt 0.8438 0.9688 +vt 0.8438 1 +vt 0.8594 0.2344 +vt 0.8594 0.25 +vt 0.9219 0.25 +vt 0.9219 0.2344 +vt 0.7813 0.4219 +vt 0.7813 0.5156 +vt 0.7656 0.5156 +vt 0.7656 0.4219 +vt 0.9844 0.625 +vt 0.9844 0.5313 +vt 0.9688 0.5313 +vt 0.9688 0.625 +vt 0.8906 0.2656 +vt 0.8906 0.2813 +vt 0.7969 0.2813 +vt 0.7969 0.2656 +vt 0.9063 0.2656 +vt 0.9063 0.2813 +vt 0.8125 0.2813 +vt 0.8125 0.2656 +vt 0.8281 0.0625 +vt 0.9219 0.0625 +vt 0.9219 0.1563 +vt 0.8281 0.1563 vt 0.25 0.75 vt 0.25 1 vt 0 1 vt 0 0.75 vn -1 0 0 vn 1 0 0 -vn -0.0000029334587844594713 -0.9999619261347629 0.008726183143278972 -vn 0 0.9999619190282091 -0.00872699796159357 -vn 0 0.7132521809888339 0.7009075019677503 -vn 0.7071049676051244 -0.006168284894508382 -0.7070816905065611 -vn 1 0 0 -vn -1 0 0 -vn -0.0000020978324118310634 0.9999619190260086 -0.008726997961574392 -vn 0 -0.9999619261390653 0.0087261831433165 -vn 0 0.7132521809888339 0.7009075019677503 -vn -0.7071084546504284 -0.006168254476147231 -0.707078203594624 -vn 0.4226184765257081 0.00790680308027006 0.9062731959868059 -vn -0.4226175081689291 -0.007913191625929879 -0.9062735917963056 -vn -0.000008972775341338396 0.999961860115445 -0.008733741119862417 -vn 0.0000028906255409270947 -0.9999619739824311 0.008720698412631013 -vn -0.9063069283253697 0.0036870193009698876 0.4226040198082684 -vn 0.9063065598503196 -0.003690003402925607 -0.42260478398518575 -vn 0.42261930713512713 0.007911162079910133 0.9062727706111281 -vn 0.0000027087933019168407 0.9999619211484322 -0.008726754597171956 -vn -0.0000014652536416600657 -0.9999619149188801 0.008727468683382367 -vn -0.9063080493500458 0.0036869485059578136 0.4226016162936788 -vn 0.9040078221067215 -0.0037317890928032366 -0.4274996272747252 -vn 6.357368067885776e-7 0.9999619362426467 -0.00872502524081323 -vn -0.000007113582510285717 -0.9999618139539357 0.008739026453318368 -vn 0.3950309226513587 0.008019057171619605 0.9186328237502156 -vn -0.544104255047455 -0.007319652610111612 -0.8389856866031278 -vn -0.0000013321353867009384 0.9999619456108226 -0.008723951423734196 -vn 0.000006382493003784669 -0.9999618493887663 0.008734971451714231 -vn -0.4273093361208747 0.007891942442577488 0.9040710417375508 -vn 0.5441042550474547 -0.007319652610111584 -0.8389856866031278 -vn 0 0.9999619445335519 -0.008724075004129974 -vn 0 -0.9999619445335519 0.008724075004129863 -vn 0 0.008724075004130085 0.9999619445335519 -vn 0 -0.008724075004130085 -0.9999619445335519 -vn -0.42261930713512713 0.007911162079910161 0.9062727706111281 -vn -0.0000025716871529953373 0.999961918582874 -0.008727048610178508 -vn 0.0000014652536416932065 -0.9999619149188801 0.008727468683382367 -vn 0.9063080493500456 0.00368694850595766 0.42260161629367876 -vn -0.90314403375872 -0.0037476914009301615 -0.42932133547634393 -vn -0.4226184765257081 0.007906803080270032 0.906273195986806 -vn 0.4226175081689292 -0.007913191625929851 -0.9062735917963055 -vn 0.000008972775341338394 0.999961860115445 -0.008733741119862444 -vn -0.0000028906255409270947 -0.9999619739824311 0.008720698412631013 -vn 0.9063069283253697 0.0036870193009699015 0.4226040198082685 -vn -0.9063065598503196 -0.003690003402925579 -0.42260478398518575 -vn 1 0 0 -vn -1 0 0 -vn 0 -0.9025861906958118 -0.4305091966093455 -vn 0 -0.43051287065560717 0.9025844382659545 -vn 0 0.43051287065560717 -0.9025844382659545 -vn 1 0 0 -vn -1 0 0 -vn 0 -0.9025861906958118 -0.4305091966093455 -vn 0 -0.43051287065560717 0.9025844382659545 -vn 0 0.43051287065560717 -0.9025844382659545 -vn 1 0 0 -vn -1 0 0 -vn 0 0.9025844382659544 0.4305128706556072 -vn 0 -0.9025861906958118 -0.4305091966093455 -vn 0 -0.43050919660934517 0.9025861906958119 -vn 0 0.4305065759479856 -0.9025874406757173 -vn 0 0.4305065759479856 -0.9025874406757173 -vn 0 -0.9025861906958118 -0.4305091966093455 -vn 0 -0.43050919660934517 0.9025861906958119 -vn 0 0.9025844382659544 0.4305128706556072 -vn 1 0 0 -vn -1 0 0 -vn 0 0.9999619277199663 0.008726001980821326 -vn 0 -0.9999619277199662 -0.008726001980821798 -vn 0 -0.17717447882697723 0.9841794572395773 -vn 0 0.17717447882697718 -0.9841794572395773 -vn 1 0 0 -vn -1 0 0 -vn 0 -0.1736481776669303 -0.9848077530122081 -vn 0 0.1736481776669303 0.9848077530122081 -vn 0 0.9848077530122081 -0.1736481776669303 -vn 0 -0.9848077530122081 0.1736481776669303 -vn -0.4305103240040838 -0.0000020513142935385535 0.902585652955824 -vn 0.43051103133518565 0.0000020513135276512 -0.902585315576598 -vn -0.000002505301811856958 0.9999999999968543 -1.232519188654191e-7 -vn -0.0000019390673440426235 -0.9999999999961269 -0.000001996596796560724 -vn 0.9025857002800932 -6.046338944382113e-7 0.43051022479091966 -vn -0.9025858075602159 6.046335782466939e-7 -0.430509999872834 -vn 1 0 0 -vn -1 0 0 -vn 0 -0.1736481776669303 -0.9848077530122081 -vn 0 0.1736481776669303 0.9848077530122081 -vn 0 0.9848077530122081 -0.1736481776669303 -vn 0 -0.9848077530122081 0.1736481776669303 -vn 0.8792076452472914 0.47417508626964266 0.046388620370625654 -vn -0.6755912395792244 -0.7372763911621294 0.000006225273155913147 -vn -0.7331040009137605 0.6783325850907347 -0.049228323639531044 -vn 0.7575034614421308 -0.6508846551277842 0.0503753076653246 -vn -0.022893597209255993 0.02868479884771053 0.9993263058290255 -vn -0.0036947147243208173 -0.004023180735606314 -0.9999850814386555 -vn 0.8870112469237625 0.4617478184359204 6.485058090810459e-7 -vn -0.8870112469237624 -0.4617478184359204 -6.48505809067168e-7 -vn -0.4617501231298548 0.88701004717422 0.000001245769109231576 -vn 0.4617497815625764 -0.8870102249800456 -0.0000027860699916837377 -vn 6.119127189140642e-7 -0.000002136127818325174 0.9999999999975314 -vn 5.249253899474288e-7 -4.770879394322415e-8 -0.9999999999998611 -vn -0.8792076452472913 0.4741750862696426 0.04638862037062576 -vn 0.6755912395792244 -0.7372763911621293 0.00000622527315582988 -vn 0.7331040009137606 0.6783325850907346 -0.04922832363953099 -vn -0.7575034614421308 -0.6508846551277842 0.05037530766532479 -vn 0.022893597209256007 0.02868479884771053 0.9993263058290255 -vn 0.003694714724320871 -0.004023180735606286 -0.9999850814386555 -vn -0.8870112469237625 0.4617478184359204 6.485058092614572e-7 -vn 0.8870112469237624 -0.4617478184359204 -6.485058090394125e-7 -vn 0.4617501231298547 0.88701004717422 0.0000012457691093148426 -vn -0.46174978156257646 -0.8870102249800456 -0.0000027860699916282265 -vn -6.119127189140642e-7 -0.000002136127818325174 0.9999999999975314 -vn -5.249253899613066e-7 -4.770879394322415e-8 -0.9999999999998611 -vn 1 0 0 -vn -1 0 0 -vn 0 0.9925454875455191 -0.12187475190960517 -vn 0 -0.9925453599908991 0.12187579070732812 -vn 0 -0.12186535945944617 -0.9925466408002296 -vn 0 0.9925466726924764 -0.12186509970904041 -vn 0 -0.12186535945944618 -0.9925466408002297 -vn 0 -0.9925466408002298 0.12186535945944613 -vn 0.7071070202724187 0.08617529729785552 0.7018357927728447 -vn -0.7071070202752563 0.08617388429491826 0.7018359662648918 -vn 0 0.7880141084102544 0.6156571813488347 -vn 0 -0.6156725075299098 0.7880021341797453 -vn 0 0.12187031538678078 0.9925460322965011 -vn 0 0.12187057510974719 0.992546000406238 -vn -0.7071070202719447 0.08617548094972202 0.7018357702235017 -vn 0.7071070202768261 0.08617179292867806 0.7018362230454377 -vn 0 0.12187057510974719 0.992546000406238 -vn 0 -0.6156725075299098 0.7880021341797453 -vn 0 0.7880141084102544 0.6156571813488347 -vn 0 0.12187031538678078 0.9925460322965011 -vn 1 0 0 -vn -1 0 0 -vn 0 0.9925466726924764 -0.12186509970904041 -vn 0 -0.9925460004062379 0.12187057510974719 -vn 0 -0.12186866341105185 -0.9925462351338622 -vn 1 0 0 -vn -1 0 0 -vn 0 0.9925466726924764 -0.12186509970904041 -vn 0 -0.9925460004062379 0.12187057510974719 -vn 0 -0.12186866341105185 -0.9925462351338622 -vn 0 0.992546032296501 -0.12187031538678052 -vn 0 -0.9925460004062379 0.12187057510974719 -vn 0 -0.12186535945944624 -0.9925466408002297 -vn 1 0 0 -vn -1 0 0 -vn 0 0.9925465770164879 -0.12186587895245127 -vn 0 -0.9925455513243322 0.12187423249513274 -vn 0 -0.12187188079031909 -0.9925458400863056 -vn 0 -0.10452485731807423 -0.994522274362237 +vn 0 -1 0.01 +vn 0 1 -0.01 +vn 0 0.71 0.7 +vn 0.71 -0.01 -0.71 +vn 1 0 0 +vn -1 0 0 +vn 0 1 -0.01 +vn 0 -1 0.01 +vn 0 0.71 0.7 +vn -0.71 -0.01 -0.71 +vn 0.42 0.01 0.91 +vn -0.42 -0.01 -0.91 +vn 0 1 -0.01 +vn 0 -1 0.01 +vn -0.91 0 0.42 +vn 0.91 0 -0.42 +vn 0.42 0.01 0.91 +vn 0 1 -0.01 +vn 0 -1 0.01 +vn -0.91 0 0.42 +vn 0.9 0 -0.43 +vn 0 1 -0.01 +vn 0 -1 0.01 +vn 0.4 0.01 0.92 +vn -0.54 -0.01 -0.84 +vn 0 1 -0.01 +vn 0 -1 0.01 +vn -0.43 0.01 0.9 +vn 0.54 -0.01 -0.84 +vn 0 1 -0.01 +vn 0 -1 0.01 +vn 0 0.01 1 +vn 0 -0.01 -1 +vn -0.42 0.01 0.91 +vn 0 1 -0.01 +vn 0 -1 0.01 +vn 0.91 0 0.42 +vn -0.9 0 -0.43 +vn -0.42 0.01 0.91 +vn 0.42 -0.01 -0.91 +vn 0 1 -0.01 +vn 0 -1 0.01 +vn 0.91 0 0.42 +vn -0.91 0 -0.42 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.9 -0.43 +vn 0 -0.43 0.9 +vn 0 0.43 -0.9 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.9 -0.43 +vn 0 -0.43 0.9 +vn 0 0.43 -0.9 +vn 1 0 0 +vn -1 0 0 +vn 0 0.9 0.43 +vn 0 -0.9 -0.43 +vn 0 -0.43 0.9 +vn 0 0.43 -0.9 +vn 0 0.43 -0.9 +vn 0 -0.9 -0.43 +vn 0 -0.43 0.9 +vn 0 0.9 0.43 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0.01 +vn 0 -1 -0.01 +vn 0 -0.18 0.98 +vn 0 0.18 -0.98 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.17 -0.98 +vn 0 0.17 0.98 +vn 0 0.98 -0.17 +vn 0 -0.98 0.17 +vn -0.43 0 0.9 +vn 0.43 0 -0.9 +vn 0 1 0 +vn 0 -1 0 +vn 0.9 0 0.43 +vn -0.9 0 -0.43 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.17 -0.98 +vn 0 0.17 0.98 +vn 0 0.98 -0.17 +vn 0 -0.98 0.17 +vn 0.88 0.47 0.05 +vn -0.68 -0.74 0 +vn -0.73 0.68 -0.05 +vn 0.76 -0.65 0.05 +vn -0.02 0.03 1 +vn 0 0 -1 +vn 0.89 0.46 0 +vn -0.89 -0.46 0 +vn -0.46 0.89 0 +vn 0.46 -0.89 0 +vn 0 0 1 +vn 0 0 -1 +vn -0.88 0.47 0.05 +vn 0.68 -0.74 0 +vn 0.73 0.68 -0.05 +vn -0.76 -0.65 0.05 +vn 0.02 0.03 1 +vn 0 0 -1 +vn -0.89 0.46 0 +vn 0.89 -0.46 0 +vn 0.46 0.89 0 +vn -0.46 -0.89 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0.99 -0.12 +vn 0 -0.99 0.12 +vn 0 -0.12 -0.99 +vn 0 0.99 -0.12 +vn 0 -0.12 -0.99 +vn 0 -0.99 0.12 +vn 0.71 0.09 0.7 +vn -0.71 0.09 0.7 +vn 0 0.79 0.62 +vn 0 -0.62 0.79 +vn 0 0.12 0.99 +vn 0 0.12 0.99 +vn -0.71 0.09 0.7 +vn 0.71 0.09 0.7 +vn 0 0.12 0.99 +vn 0 -0.62 0.79 +vn 0 0.79 0.62 +vn 0 0.12 0.99 +vn 1 0 0 +vn -1 0 0 +vn 0 0.99 -0.12 +vn 0 -0.99 0.12 +vn 0 -0.12 -0.99 +vn 1 0 0 +vn -1 0 0 +vn 0 0.99 -0.12 +vn 0 -0.99 0.12 +vn 0 -0.12 -0.99 +vn 0 0.99 -0.12 +vn 0 -0.99 0.12 +vn 0 -0.12 -0.99 +vn 1 0 0 +vn -1 0 0 +vn 0 0.99 -0.12 +vn 0 -0.99 0.12 +vn 0 -0.12 -0.99 +vn 0 -0.1 -0.99 usemtl common_steel_norivets -f 4/1/1 2/2/1 1/3/1 -f 4/1/1 1/3/1 3/4/1 -f 7/5/2 5/6/2 6/7/2 -f 7/5/2 6/7/2 8/8/2 -f 1/9/3 2/10/3 6/11/3 -f 1/9/3 6/11/3 5/12/3 -f 4/13/4 3/14/4 7/15/4 -f 4/13/4 7/15/4 8/16/4 -f 3/17/5 1/18/5 5/19/5 -f 3/17/5 5/19/5 7/20/5 -f 8/21/6 6/22/6 2/23/6 -f 8/21/6 2/23/6 4/24/6 -f 12/25/7 10/26/7 9/27/7 -f 12/25/7 9/27/7 11/28/7 -f 15/29/8 13/30/8 14/31/8 -f 15/29/8 14/31/8 16/32/8 -f 9/33/9 10/34/9 14/35/9 -f 9/33/9 14/35/9 13/36/9 -f 12/37/10 11/38/10 15/39/10 -f 12/37/10 15/39/10 16/40/10 -f 11/41/11 9/42/11 13/43/11 -f 11/41/11 13/43/11 15/44/11 -f 16/45/12 14/46/12 10/47/12 -f 16/45/12 10/47/12 12/48/12 -f 20/49/13 18/50/13 17/51/13 -f 20/49/13 17/51/13 19/52/13 -f 23/53/14 21/54/14 22/55/14 -f 23/53/14 22/55/14 24/56/14 -f 17/57/15 18/58/15 22/59/15 -f 17/57/15 22/59/15 21/60/15 -f 20/61/16 19/62/16 23/63/16 -f 20/61/16 23/63/16 24/64/16 -f 19/65/17 17/66/17 21/67/17 -f 19/65/17 21/67/17 23/68/17 -f 24/69/18 22/70/18 18/71/18 -f 24/69/18 18/71/18 20/72/18 +f 156/389/98 154/390/98 153/391/98 155/392/98 +f 159/393/99 157/394/99 158/395/99 160/396/99 +f 153/397/100 154/398/100 158/399/100 157/400/100 +f 156/401/101 155/402/101 159/403/101 160/404/101 +f 155/405/102 153/406/102 157/407/102 159/408/102 +f 160/409/103 158/410/103 154/411/103 156/412/103 +f 164/413/104 162/414/104 161/415/104 163/416/104 +f 167/417/105 165/418/105 166/419/105 168/420/105 +f 161/421/106 162/422/106 166/423/106 165/424/106 +f 164/425/107 163/426/107 167/427/107 168/428/107 +f 163/429/108 161/430/108 165/431/108 167/432/108 +f 168/433/109 166/434/109 162/435/109 164/436/109 +f 172/437/110 170/438/110 169/439/110 171/440/110 +f 175/441/111 173/442/111 174/443/111 176/444/111 +f 169/445/112 170/446/112 174/447/112 173/448/112 +f 172/449/113 171/450/113 175/451/113 176/452/113 +f 171/453/114 169/454/114 173/455/114 175/456/114 +f 176/457/115 174/458/115 170/459/115 172/460/115 usemtl common_steel_painted_norivets -f 28/73/19 26/74/19 25/75/19 -f 28/73/19 25/75/19 27/76/19 -f 25/77/20 26/78/20 30/79/20 -f 25/77/20 30/79/20 29/80/20 -f 28/81/21 27/82/21 31/83/21 -f 28/81/21 31/83/21 32/84/21 -f 27/85/22 25/86/22 29/87/22 -f 27/85/22 29/87/22 31/88/22 -f 32/89/23 30/90/23 26/91/23 -f 32/89/23 26/91/23 28/92/23 -f 38/93/24 34/94/24 33/95/24 -f 38/93/24 33/95/24 37/96/24 -f 39/97/25 35/98/25 36/99/25 -f 39/97/25 36/99/25 40/100/25 -f 37/101/26 33/102/26 35/103/26 -f 37/101/26 35/103/26 39/104/26 -f 34/105/27 38/106/27 40/107/27 -f 34/105/27 40/107/27 36/108/27 -f 41/109/28 42/110/28 46/111/28 -f 41/109/28 46/111/28 45/112/28 -f 44/113/29 43/114/29 47/115/29 -f 44/113/29 47/115/29 48/116/29 -f 43/117/30 41/118/30 45/119/30 -f 43/117/30 45/119/30 47/120/30 -f 48/121/31 46/122/31 42/123/31 -f 48/121/31 42/123/31 44/124/31 -f 49/125/32 50/126/32 54/127/32 -f 49/125/32 54/127/32 53/128/32 -f 52/129/33 51/130/33 55/131/33 -f 52/129/33 55/131/33 56/132/33 -f 51/133/34 49/134/34 53/135/34 -f 51/133/34 53/135/34 55/136/34 -f 56/137/35 54/138/35 50/139/35 -f 56/137/35 50/139/35 52/140/35 -f 57/141/36 58/142/36 60/143/36 -f 57/141/36 60/143/36 59/144/36 -f 62/145/37 58/146/37 57/147/37 -f 62/145/37 57/147/37 61/148/37 -f 63/149/38 59/150/38 60/151/38 -f 63/149/38 60/151/38 64/152/38 -f 61/153/39 57/154/39 59/155/39 -f 61/153/39 59/155/39 63/156/39 -f 58/157/40 62/158/40 64/159/40 -f 58/157/40 64/159/40 60/160/40 +f 180/461/116 178/462/116 177/463/116 179/464/116 +f 177/465/117 178/466/117 182/467/117 181/468/117 +f 180/469/118 179/470/118 183/471/118 184/472/118 +f 179/473/119 177/474/119 181/475/119 183/476/119 +f 184/477/120 182/478/120 178/479/120 180/480/120 +f 190/481/121 186/482/121 185/483/121 189/484/121 +f 191/485/122 187/486/122 188/487/122 192/488/122 +f 189/489/123 185/490/123 187/491/123 191/492/123 +f 186/493/124 190/494/124 192/495/124 188/496/124 +f 193/497/125 194/498/125 198/499/125 197/500/125 +f 196/501/126 195/502/126 199/503/126 200/504/126 +f 195/505/127 193/506/127 197/507/127 199/508/127 +f 200/509/128 198/510/128 194/511/128 196/512/128 +f 201/513/129 202/514/129 206/515/129 205/516/129 +f 204/517/130 203/518/130 207/519/130 208/520/130 +f 203/521/131 201/522/131 205/523/131 207/524/131 +f 208/525/132 206/526/132 202/527/132 204/528/132 +f 209/529/133 210/530/133 212/531/133 211/532/133 +f 214/533/134 210/534/134 209/535/134 213/536/134 +f 215/537/135 211/538/135 212/539/135 216/540/135 +f 213/541/136 209/542/136 211/543/136 215/544/136 +f 210/545/137 214/546/137 216/547/137 212/548/137 usemtl common_steel_norivets -f 65/161/41 66/162/41 68/163/41 -f 65/161/41 68/163/41 67/164/41 -f 70/165/42 69/166/42 71/167/42 -f 70/165/42 71/167/42 72/168/42 -f 70/169/43 66/170/43 65/171/43 -f 70/169/43 65/171/43 69/172/43 -f 71/173/44 67/174/44 68/175/44 -f 71/173/44 68/175/44 72/176/44 -f 69/177/45 65/178/45 67/179/45 -f 69/177/45 67/179/45 71/180/45 -f 66/181/46 70/182/46 72/183/46 -f 66/181/46 72/183/46 68/184/46 +f 217/549/138 218/550/138 220/551/138 219/552/138 +f 222/553/139 221/554/139 223/555/139 224/556/139 +f 222/557/140 218/558/140 217/559/140 221/560/140 +f 223/561/141 219/562/141 220/563/141 224/564/141 +f 221/565/142 217/566/142 219/567/142 223/568/142 +f 218/569/143 222/570/143 224/571/143 220/572/143 usemtl common_steel_painted_norivets -f 76/185/47 74/186/47 73/187/47 -f 76/185/47 73/187/47 75/188/47 -f 79/189/48 77/190/48 78/191/48 -f 79/189/48 78/191/48 80/192/48 -f 76/193/49 75/194/49 79/195/49 -f 76/193/49 79/195/49 80/196/49 -f 75/197/50 73/198/50 77/199/50 -f 75/197/50 77/199/50 79/200/50 -f 80/201/51 78/202/51 74/203/51 -f 80/201/51 74/203/51 76/204/51 -f 84/205/52 82/206/52 81/207/52 -f 84/205/52 81/207/52 83/208/52 -f 87/209/53 85/210/53 86/211/53 -f 87/209/53 86/211/53 88/212/53 -f 84/213/54 83/214/54 87/215/54 -f 84/213/54 87/215/54 88/216/54 -f 83/217/55 81/218/55 85/219/55 -f 83/217/55 85/219/55 87/220/55 -f 88/221/56 86/222/56 82/223/56 -f 88/221/56 82/223/56 84/224/56 -f 92/225/57 90/226/57 89/227/57 -f 92/225/57 89/227/57 91/228/57 -f 95/229/58 93/230/58 94/231/58 -f 95/229/58 94/231/58 96/232/58 -f 90/233/59 97/234/59 100/235/59 -f 90/233/59 100/235/59 89/236/59 -f 91/237/60 99/238/60 98/239/60 -f 91/237/60 98/239/60 92/240/60 -f 89/241/61 100/242/61 99/243/61 -f 89/241/61 99/243/61 91/244/61 -f 92/245/62 98/246/62 97/247/62 -f 92/245/62 97/247/62 90/248/62 -f 94/249/63 97/250/63 98/251/63 -f 94/249/63 98/251/63 96/252/63 -f 96/253/64 98/254/64 99/255/64 -f 96/253/64 99/255/64 95/256/64 -f 95/257/65 99/258/65 100/259/65 -f 95/257/65 100/259/65 93/260/65 -f 93/261/66 100/262/66 97/263/66 -f 93/261/66 97/263/66 94/264/66 +f 228/573/144 226/574/144 225/575/144 227/576/144 +f 231/577/145 229/578/145 230/579/145 232/580/145 +f 228/581/146 227/582/146 231/583/146 232/584/146 +f 227/585/147 225/586/147 229/587/147 231/588/147 +f 232/589/148 230/590/148 226/591/148 228/592/148 +f 236/593/149 234/594/149 233/595/149 235/596/149 +f 239/597/150 237/598/150 238/599/150 240/600/150 +f 236/601/151 235/602/151 239/603/151 240/604/151 +f 235/605/152 233/606/152 237/607/152 239/608/152 +f 240/609/153 238/610/153 234/611/153 236/612/153 +f 244/613/154 242/614/154 241/615/154 243/616/154 +f 247/617/155 245/618/155 246/619/155 248/620/155 +f 242/621/156 249/622/156 252/623/156 241/624/156 +f 243/625/157 251/626/157 250/627/157 244/628/157 +f 241/629/158 252/630/158 251/631/158 243/632/158 +f 244/633/159 250/634/159 249/635/159 242/636/159 +f 246/637/160 249/638/160 250/639/160 248/640/160 +f 248/641/161 250/642/161 251/643/161 247/644/161 +f 247/645/162 251/646/162 252/647/162 245/648/162 +f 245/649/163 252/650/163 249/651/163 246/652/163 usemtl common_steel_norivets -f 104/265/67 102/266/67 101/267/67 -f 104/265/67 101/267/67 103/268/67 -f 107/269/68 105/270/68 106/271/68 -f 107/269/68 106/271/68 108/272/68 -f 101/273/69 102/274/69 106/275/69 -f 101/273/69 106/275/69 105/276/69 -f 104/277/70 103/278/70 107/279/70 -f 104/277/70 107/279/70 108/280/70 -f 103/281/71 101/282/71 105/283/71 -f 103/281/71 105/283/71 107/284/71 -f 108/285/72 106/286/72 102/287/72 -f 108/285/72 102/287/72 104/288/72 +f 256/653/164 254/654/164 253/655/164 255/656/164 +f 259/657/165 257/658/165 258/659/165 260/660/165 +f 253/661/166 254/662/166 258/663/166 257/664/166 +f 256/665/167 255/666/167 259/667/167 260/668/167 +f 255/669/168 253/670/168 257/671/168 259/672/168 +f 260/673/169 258/674/169 254/675/169 256/676/169 usemtl common_thingies -f 112/289/73 110/290/73 109/291/73 -f 112/289/73 109/291/73 111/292/73 -f 115/293/74 113/294/74 114/295/74 -f 115/293/74 114/295/74 116/296/74 -f 109/297/75 110/298/75 114/299/75 -f 109/297/75 114/299/75 113/300/75 -f 112/301/76 111/302/76 115/303/76 -f 112/301/76 115/303/76 116/304/76 -f 111/305/77 109/306/77 113/307/77 -f 111/305/77 113/307/77 115/308/77 -f 116/309/78 114/310/78 110/311/78 -f 116/309/78 110/311/78 112/312/78 +f 264/677/170 262/678/170 261/679/170 263/680/170 +f 267/681/171 265/682/171 266/683/171 268/684/171 +f 261/685/172 262/686/172 266/687/172 265/688/172 +f 264/689/173 263/690/173 267/691/173 268/692/173 +f 263/693/174 261/694/174 265/695/174 267/696/174 +f 268/697/175 266/698/175 262/699/175 264/700/175 usemtl tracked_motorbike -f 117/313/79 118/314/79 120/315/79 -f 117/313/79 120/315/79 119/316/79 -f 122/317/80 121/318/80 123/319/80 -f 122/317/80 123/319/80 124/320/80 -f 122/321/81 118/322/81 117/323/81 -f 122/321/81 117/323/81 121/324/81 -f 123/325/82 119/326/82 120/327/82 -f 123/325/82 120/327/82 124/328/82 -f 121/329/83 117/330/83 119/331/83 -f 121/329/83 119/331/83 123/332/83 -f 118/333/84 122/334/84 124/335/84 -f 118/333/84 124/335/84 120/336/84 -f 128/337/85 126/338/85 125/339/85 -f 128/337/85 125/339/85 127/340/85 -f 131/341/86 129/342/86 130/343/86 -f 131/341/86 130/343/86 132/344/86 -f 125/345/87 126/346/87 130/347/87 -f 125/345/87 130/347/87 129/348/87 -f 128/349/88 127/350/88 131/351/88 -f 128/349/88 131/351/88 132/352/88 -f 127/353/89 125/354/89 129/355/89 -f 127/353/89 129/355/89 131/356/89 -f 132/357/90 130/358/90 126/359/90 -f 132/357/90 126/359/90 128/360/90 +f 269/701/176 270/702/176 272/703/176 271/704/176 +f 274/705/177 273/706/177 275/707/177 276/708/177 +f 274/709/178 270/710/178 269/711/178 273/712/178 +f 275/713/179 271/714/179 272/715/179 276/716/179 +f 273/717/180 269/718/180 271/719/180 275/720/180 +f 270/721/181 274/722/181 276/723/181 272/724/181 +f 280/725/182 278/726/182 277/727/182 279/728/182 +f 283/729/183 281/730/183 282/731/183 284/732/183 +f 277/733/184 278/734/184 282/735/184 281/736/184 +f 280/737/185 279/738/185 283/739/185 284/740/185 +f 279/741/186 277/742/186 281/743/186 283/744/186 +f 284/745/187 282/746/187 278/747/187 280/748/187 usemtl common_steel_norivets -f 136/361/91 134/362/91 133/363/91 -f 136/361/91 133/363/91 135/364/91 -f 139/365/92 137/366/92 138/367/92 -f 139/365/92 138/367/92 140/368/92 -f 133/369/93 134/370/93 138/371/93 -f 133/369/93 138/371/93 137/372/93 -f 136/373/94 135/374/94 139/375/94 -f 136/373/94 139/375/94 140/376/94 -f 135/377/95 133/378/95 137/379/95 -f 135/377/95 137/379/95 139/380/95 -f 140/381/96 138/382/96 134/383/96 -f 140/381/96 134/383/96 136/384/96 +f 288/749/188 286/750/188 285/751/188 287/752/188 +f 291/753/189 289/754/189 290/755/189 292/756/189 +f 285/757/190 286/758/190 290/759/190 289/760/190 +f 288/761/191 287/762/191 291/763/191 292/764/191 +f 287/765/192 285/766/192 289/767/192 291/768/192 +f 292/769/193 290/770/193 286/771/193 288/772/193 usemtl common_thingies -f 144/385/97 142/386/97 141/387/97 -f 144/385/97 141/387/97 143/388/97 -f 147/389/98 145/390/98 146/391/98 -f 147/389/98 146/391/98 148/392/98 -f 141/393/99 142/394/99 146/395/99 -f 141/393/99 146/395/99 145/396/99 -f 144/397/100 143/398/100 147/399/100 -f 144/397/100 147/399/100 148/400/100 -f 143/401/101 141/402/101 145/403/101 -f 143/401/101 145/403/101 147/404/101 -f 148/405/102 146/406/102 142/407/102 -f 148/405/102 142/407/102 144/408/102 +f 296/773/194 294/774/194 293/775/194 295/776/194 +f 299/777/195 297/778/195 298/779/195 300/780/195 +f 293/781/196 294/782/196 298/783/196 297/784/196 +f 296/785/197 295/786/197 299/787/197 300/788/197 +f 295/789/198 293/790/198 297/791/198 299/792/198 +f 300/793/199 298/794/199 294/795/199 296/796/199 usemtl common_steel_norivets -f 149/409/103 150/410/103 152/411/103 -f 149/409/103 152/411/103 151/412/103 -f 154/413/104 153/414/104 155/415/104 -f 154/413/104 155/415/104 156/416/104 -f 154/417/105 150/418/105 149/419/105 -f 154/417/105 149/419/105 153/420/105 -f 155/421/106 151/422/106 152/423/106 -f 155/421/106 152/423/106 156/424/106 -f 153/425/107 149/426/107 151/427/107 -f 153/425/107 151/427/107 155/428/107 -f 150/429/108 154/430/108 156/431/108 -f 150/429/108 156/431/108 152/432/108 +f 301/797/200 302/798/200 304/799/200 303/800/200 +f 306/801/201 305/802/201 307/803/201 308/804/201 +f 306/805/202 302/806/202 301/807/202 305/808/202 +f 307/809/203 303/810/203 304/811/203 308/812/203 +f 305/813/204 301/814/204 303/815/204 307/816/204 +f 302/817/205 306/818/205 308/819/205 304/820/205 usemtl common_thingies -f 157/433/109 158/434/109 160/435/109 -f 157/433/109 160/435/109 159/436/109 -f 162/437/110 161/438/110 163/439/110 -f 162/437/110 163/439/110 164/440/110 -f 162/441/111 158/442/111 157/443/111 -f 162/441/111 157/443/111 161/444/111 -f 163/445/112 159/446/112 160/447/112 -f 163/445/112 160/447/112 164/448/112 -f 161/449/113 157/450/113 159/451/113 -f 161/449/113 159/451/113 163/452/113 -f 158/453/114 162/454/114 164/455/114 -f 158/453/114 164/455/114 160/456/114 +f 309/821/206 310/822/206 312/823/206 311/824/206 +f 314/825/207 313/826/207 315/827/207 316/828/207 +f 314/829/208 310/830/208 309/831/208 313/832/208 +f 315/833/209 311/834/209 312/835/209 316/836/209 +f 313/837/210 309/838/210 311/839/210 315/840/210 +f 310/841/211 314/842/211 316/843/211 312/844/211 usemtl vehicle_lights -f 168/457/115 166/458/115 165/459/115 -f 168/457/115 165/459/115 167/460/115 -f 171/461/116 169/462/116 170/463/116 -f 171/461/116 170/463/116 172/464/116 -f 165/465/117 166/466/117 170/467/117 -f 165/465/117 170/467/117 169/468/117 -f 168/469/118 167/470/118 171/471/118 -f 168/469/118 171/471/118 172/472/118 -f 172/473/119 170/474/119 166/475/119 -f 172/473/119 166/475/119 168/476/119 +f 320/845/212 318/846/212 317/847/212 319/848/212 +f 323/849/213 321/850/213 322/851/213 324/852/213 +f 317/853/214 318/854/214 322/855/214 321/856/214 +f 320/857/215 319/858/215 323/859/215 324/860/215 +f 324/861/216 322/862/216 318/863/216 320/864/216 usemtl common_steel_painted_norivets -f 173/477/120 174/478/120 178/479/120 -f 173/477/120 178/479/120 177/480/120 -f 180/481/121 178/482/121 174/483/121 -f 180/481/121 174/483/121 176/484/121 -f 176/485/122 175/486/122 179/487/122 -f 176/485/122 179/487/122 180/488/122 -f 181/489/123 189/490/123 192/491/123 -f 181/489/123 192/491/123 182/492/123 -f 186/493/124 191/494/124 190/495/124 -f 186/493/124 190/495/124 185/496/124 -f 185/497/125 197/498/125 196/499/125 -f 185/497/125 196/499/125 186/500/125 -f 188/501/126 195/502/126 194/503/126 -f 188/501/126 194/503/126 187/504/126 -f 190/505/127 193/506/127 197/507/127 -f 190/505/127 197/507/127 185/508/127 -f 187/509/128 194/510/128 193/511/128 -f 187/509/128 193/511/128 190/512/128 -f 187/513/129 190/514/129 191/515/129 -f 187/513/129 191/515/129 188/516/129 -f 184/517/130 192/518/130 189/519/130 -f 184/517/130 189/519/130 183/520/130 -f 189/521/131 193/522/131 194/523/131 -f 189/521/131 194/523/131 183/524/131 -f 183/525/132 194/526/132 195/527/132 -f 183/525/132 195/527/132 184/528/132 -f 182/529/133 196/530/133 197/531/133 -f 182/529/133 197/531/133 181/532/133 -f 181/533/134 197/534/134 193/535/134 -f 181/533/134 193/535/134 189/536/134 -f 201/537/135 199/538/135 198/539/135 -f 201/537/135 198/539/135 200/540/135 -f 204/541/136 202/542/136 203/543/136 -f 204/541/136 203/543/136 205/544/136 -f 198/545/137 199/546/137 203/547/137 -f 198/545/137 203/547/137 202/548/137 -f 201/549/138 200/550/138 204/551/138 -f 201/549/138 204/551/138 205/552/138 -f 205/553/139 203/554/139 199/555/139 -f 205/553/139 199/555/139 201/556/139 -f 209/557/140 207/558/140 206/559/140 -f 209/557/140 206/559/140 208/560/140 -f 212/561/141 210/562/141 211/563/141 -f 212/561/141 211/563/141 213/564/141 -f 206/565/142 207/566/142 211/567/142 -f 206/565/142 211/567/142 210/568/142 -f 209/569/143 208/570/143 212/571/143 -f 209/569/143 212/571/143 213/572/143 -f 213/573/144 211/574/144 207/575/144 -f 213/573/144 207/575/144 209/576/144 -f 214/577/145 215/578/145 219/579/145 -f 214/577/145 219/579/145 218/580/145 -f 217/581/146 216/582/146 220/583/146 -f 217/581/146 220/583/146 221/584/146 -f 221/585/147 219/586/147 215/587/147 -f 221/585/147 215/587/147 217/588/147 -f 225/589/148 223/590/148 222/591/148 -f 225/589/148 222/591/148 224/592/148 -f 228/593/149 226/594/149 227/595/149 -f 228/593/149 227/595/149 229/596/149 -f 222/597/150 223/598/150 227/599/150 -f 222/597/150 227/599/150 226/600/150 -f 225/601/151 224/602/151 228/603/151 -f 225/601/151 228/603/151 229/604/151 -f 227/605/152 223/606/152 225/607/152 -f 227/605/152 225/607/152 229/608/152 +f 325/865/217 326/866/217 330/867/217 329/868/217 +f 332/869/218 330/870/218 326/871/218 328/872/218 +f 328/873/219 327/874/219 331/875/219 332/876/219 +f 333/877/220 341/878/220 344/879/220 334/880/220 +f 338/881/221 343/882/221 342/883/221 337/884/221 +f 337/885/222 349/886/222 348/887/222 338/888/222 +f 340/889/223 347/890/223 346/891/223 339/892/223 +f 342/893/224 345/894/224 349/895/224 337/896/224 +f 339/897/225 346/898/225 345/899/225 342/900/225 +f 339/901/226 342/902/226 343/903/226 340/904/226 +f 336/905/227 344/906/227 341/907/227 335/908/227 +f 341/909/228 345/910/228 346/911/228 335/912/228 +f 335/913/229 346/914/229 347/915/229 336/916/229 +f 334/917/230 348/918/230 349/919/230 333/920/230 +f 333/921/231 349/922/231 345/923/231 341/924/231 +f 353/925/232 351/926/232 350/927/232 352/928/232 +f 356/929/233 354/930/233 355/931/233 357/932/233 +f 350/933/234 351/934/234 355/935/234 354/936/234 +f 353/937/235 352/938/235 356/939/235 357/940/235 +f 357/941/236 355/942/236 351/943/236 353/944/236 +f 361/945/237 359/946/237 358/947/237 360/948/237 +f 364/949/238 362/950/238 363/951/238 365/952/238 +f 358/953/239 359/954/239 363/955/239 362/956/239 +f 361/957/240 360/958/240 364/959/240 365/960/240 +f 365/961/241 363/962/241 359/963/241 361/964/241 +f 366/965/242 367/966/242 371/967/242 370/968/242 +f 369/969/243 368/970/243 372/971/243 373/972/243 +f 373/973/244 371/974/244 367/975/244 369/976/244 +f 377/977/245 375/978/245 374/979/245 376/980/245 +f 380/981/246 378/982/246 379/983/246 381/984/246 +f 374/985/247 375/986/247 379/987/247 378/988/247 +f 377/989/248 376/990/248 380/991/248 381/992/248 +f 379/993/249 375/994/249 377/995/249 381/996/249 usemtl vehicle_lights -f 231/609/153 230/610/153 232/611/153 -f 231/609/153 232/611/153 233/612/153 -o wing -v 0.125 0.86875037714277 -0.7499996542708769 -v 0.13125 0.8687499371957245 -0.8749998619027427 -v 0.125 0.6187502725447619 -0.6874999558355995 -v 0.13125 0.6187499411278273 -0.8124995479626198 -v -0.125 0.86875037714277 -0.7499996542708769 -v -0.13125 0.8687499371957245 -0.8749998619027427 -v -0.125 0.6187502725447619 -0.6874999558355995 -v -0.13125 0.6187499411278273 -0.8124995479626198 -v 0 0.86875037714277 -0.7499996542708769 -v 0 0.6187502725447619 -0.6874999558355995 -v 0 0.6187499411278273 -0.8124995479626198 -v 0 0.8687499371957245 -0.8749998619027427 -v 0.125 0.86875037714277 -0.7499996542708769 -v 0.125 1.056249883712744 -0.93749964811692 -v 0.13125 0.8687499371957245 -0.8749998619027427 -v 0.13125 0.9312501830556129 -0.9374999322048312 -v -0.125 0.86875037714277 -0.7499996542708769 -v -0.125 1.056249883712744 -0.93749964811692 -v -0.13125 0.8687499371957245 -0.8749998619027427 -v -0.13125 0.9312501830556129 -0.9374999322048312 -v 0 1.056249883712744 -0.93749964811692 -v 0 0.86875037714277 -0.7499996542708769 -v 0 0.8687499371957245 -0.8749998619027427 -v 0 0.9312501830556129 -0.9374999322048312 -v 0.125 1.056249883712744 -0.93749964811692 -v 0.125 1.0562501874993209 -1.4374995732250253 -v 0.13125 0.9312501830556129 -0.9374999322048312 -v 0.13125 0.9312498713373439 -1.4374997487828254 -v -0.125 1.056249883712744 -0.93749964811692 -v -0.125 1.0562501874993209 -1.4374995732250253 -v -0.13125 0.9312501830556129 -0.9374999322048312 -v -0.13125 0.9312498713373439 -1.4374997487828254 -v 0 1.0562501874993209 -1.4374995732250253 -v 0 1.056249883712744 -0.93749964811692 -v 0 0.9312501830556129 -0.9374999322048312 -v 0 0.9312498713373439 -1.4374997487828254 -v 0.125 1.0562501874993209 -1.4374995732250253 -v 0.125 0.8062502989089892 -1.8124996418168648 -v 0.13125 0.9312498713373439 -1.4374997487828254 -v 0.13125 0.6812499827470123 -1.8124998173746647 -v -0.125 1.0562501874993209 -1.4374995732250253 -v -0.125 0.8062502989089892 -1.8124996418168648 -v -0.13125 0.9312498713373439 -1.4374997487828254 -v -0.13125 0.6812499827470123 -1.8124998173746647 -v 0 0.8062502989089892 -1.8124996418168648 -v 0 1.0562501874993209 -1.4374995732250253 -v 0 0.9312498713373439 -1.4374997487828254 -v 0 0.6812499827470123 -1.8124998173746647 -vt 0.71875 0.640625 -vt 0.71875 0.703125 -vt 0.75 0.703125 -vt 0.75 0.640625 -vt 0.7496175 0.61457296875 -vt 0.7496175 0.55014875 -vt 0.71926046875 0.54257 -vt 0.71926046875 0.6069942187499999 -vt 0.125 0.96875 -vt 0.15625 0.96875 -vt 0.15625 1 -vt 0.125 1 -vt 0.75 0.25 -vt 0.78125 0.25 -vt 0.78125 0.3125 -vt 0.75 0.3125 -vt 0.75 0.3125 -vt 0.71875 0.3125 -vt 0.71875 0.25 -vt 0.75 0.25 -vt 0.75 0.3125 -vt 0.71875 0.3125 -vt 0.71875 0.25 -vt 0.75 0.25 -vt 0.1875 1 -vt 0.15625 1 -vt 0.15625 0.96875 -vt 0.1875 0.96875 -vt 0.75 0.25 -vt 0.78125 0.25 -vt 0.78125 0.3125 -vt 0.75 0.3125 -vt 0.556026875 0.27671953125000004 -vt 0.578125 0.25456765625 -vt 0.5118334375 0.25456765625 -vt 0.53393 0.27671999999999997 -vt 0.35022140625 0.27656250000000004 -vt 0.328125 0.25441015624999996 -vt 0.3944165625 0.25441015624999996 -vt 0.3723184375 0.27656203125 -vt 0.75 0.796875 -vt 0.78125 0.796875 -vt 0.78125 0.859375 -vt 0.75 0.859375 -vt 1 0.59375 -vt 0.96875 0.59375 -vt 0.96875 0.578125 -vt 1 0.578125 -vt 1 0.90625 -vt 0.96875 0.90625 -vt 0.96875 0.84375 -vt 1 0.84375 -vt 0.75 0.734375 -vt 0.78125 0.734375 -vt 0.78125 0.75 -vt 0.75 0.75 -vt 0.51372875 0.28125 -vt 0.51372875 0.25 -vt 0.38872875 0.25 -vt 0.38872875 0.28125 -vt 0.46875 0.28125 -vt 0.46875 0.25 -vt 0.34375 0.25 -vt 0.34375 0.28125 -vt 1 0.5625 -vt 0.96875 0.5625 -vt 0.96875 0.6875 -vt 1 0.6875 -vt 0.75 0.734375 -vt 0.78125 0.734375 -vt 0.78125 0.859375 -vt 0.75 0.859375 -vt 1 0.875 -vt 0.96875 0.875 -vt 0.96875 0.75 -vt 1 0.75 -vt 1 0.875 -vt 0.96875 0.875 -vt 0.96875 0.75 -vt 1 0.75 -vt 0.26810921875 0.27862296875000003 -vt 0.2507746875 0.25257343750000005 -vt 0.13810109375 0.25257343750000005 -vt 0.155435 0.27862156250000003 -vt 0.30910515625 0.27926937500000004 -vt 0.29177125 0.25322124999999995 -vt 0.40444484375 0.25322124999999995 -vt 0.421779375 0.2792709375 -vt 0.75 0.359375 -vt 0.71875 0.359375 -vt 0.71875 0.25 -vt 0.75 0.25 -vt 0 0.25 -vt 0.03125 0.25 -vt 0.03125 0.359375 -vt 0 0.359375 -vt 0.328125 1 -vt 0.296875 1 -vt 0.296875 0.96875 -vt 0.328125 0.96875 -vt 0.75 0.25 -vt 0.78125 0.25 -vt 0.78125 0.359375 -vt 0.75 0.359375 -vt 1 0.359375 -vt 0.96875 0.359375 -vt 0.96875 0.25 -vt 1 0.25 -vt 0.265625 0.96875 -vt 0.296875 0.96875 -vt 0.296875 1 -vt 0.265625 1 -vn 0.9986745209692505 0.01248346269336394 0.04993359916951139 -vn -0.9986745225694315 0.012483334356717316 0.049933599249972004 -vn 0 -0.9999999999964853 0.0000026513441276077025 -vn 0 0.24253442812523116 0.9701427993723228 -vn 0 -0.24253677523002634 -0.9701422125961843 -vn 0 0.24253442812523116 0.9701427993723228 -vn 0 -0.9999999999964854 0.0000026513441276077025 -vn 0 -0.24253677523002634 -0.9701422125961843 -vn 0.9975093419505361 0.04987547318460728 0.049875343567938935 -vn -0.9975093553690212 0.04987533899924412 0.04987520938292449 -vn 0 0.707107700003742 0.7071058623681591 -vn 0 -0.7071057880834749 -0.7071077742882254 -vn 0 0.707107700003742 0.7071058623681591 -vn 0 -0.7071057880834749 -0.7071077742882254 -vn 0.9987523451774238 0.04993749095214172 3.034068338583773e-8 -vn -0.9987523329133497 0.049937736233640354 3.0340832412462104e-8 -vn 0 0.9999999999998156 6.075732441879201e-7 -vn 0 -0.9999999999998057 6.234367667945496e-7 -vn 0 0.9999999999998156 6.075732441879201e-7 -vn 0 -0.9999999999998057 6.234367667945496e-7 -vn 0.9981993262377148 0.04990988680602817 -0.03327323695677488 -vn -0.998199326237715 0.0499098868060282 -0.033273236956774886 -vn 0 0.8320504552564002 -0.5546999548473186 -vn 0 -0.8320504552564002 0.5546999548473185 -vn 0 0.0000014044588474149135 -0.9999999999990139 -vn 0 0.8320504552564002 -0.5546999548473186 -vn 0 -0.8320504552564002 0.5546999548473185 -vn 0 0.0000014044588474426691 -0.9999999999990138 -usemtl common_steel_painted_norivets -f 237/613/154 235/614/154 234/615/154 -f 237/613/154 234/615/154 236/616/154 -f 240/617/155 238/618/155 239/619/155 -f 240/617/155 239/619/155 241/620/155 -f 241/621/156 244/622/156 243/623/156 -f 241/621/156 243/623/156 240/624/156 -f 240/625/157 243/626/157 242/627/157 -f 240/625/157 242/627/157 238/628/157 -usemtl common_steel_norivets -f 239/629/158 245/630/158 244/631/158 -f 239/629/158 244/631/158 241/632/158 -usemtl common_steel_painted_norivets -f 234/633/159 242/634/159 243/635/159 -f 234/633/159 243/635/159 236/636/159 -f 236/637/160 243/638/160 244/639/160 -f 236/637/160 244/639/160 237/640/160 -usemtl common_steel_norivets -f 237/641/161 244/642/161 245/643/161 -f 237/641/161 245/643/161 235/644/161 -usemtl common_steel_painted_norivets -f 249/645/162 247/646/162 246/647/162 -f 249/645/162 246/647/162 248/648/162 -f 252/649/163 250/650/163 251/651/163 -f 252/649/163 251/651/163 253/652/163 -f 250/653/164 255/654/164 254/655/164 -f 250/653/164 254/655/164 251/656/164 -usemtl common_steel_norivets -f 253/657/165 257/658/165 256/659/165 -f 253/657/165 256/659/165 252/660/165 -usemtl common_steel_painted_norivets -f 247/661/166 254/662/166 255/663/166 -f 247/661/166 255/663/166 246/664/166 -usemtl common_steel_norivets -f 248/665/167 256/666/167 257/667/167 -f 248/665/167 257/667/167 249/668/167 -usemtl common_steel_painted_norivets -f 261/669/168 259/670/168 258/671/168 -f 261/669/168 258/671/168 260/672/168 -f 264/673/169 262/674/169 263/675/169 -f 264/673/169 263/675/169 265/676/169 -f 262/677/170 267/678/170 266/679/170 -f 262/677/170 266/679/170 263/680/170 -usemtl common_steel_norivets -f 265/681/171 269/682/171 268/683/171 -f 265/681/171 268/683/171 264/684/171 -usemtl common_steel_painted_norivets -f 259/685/172 266/686/172 267/687/172 -f 259/685/172 267/687/172 258/688/172 -usemtl common_steel_norivets -f 260/689/173 268/690/173 269/691/173 -f 260/689/173 269/691/173 261/692/173 -usemtl common_steel_painted_norivets -f 273/693/174 271/694/174 270/695/174 -f 273/693/174 270/695/174 272/696/174 -f 276/697/175 274/698/175 275/699/175 -f 276/697/175 275/699/175 277/700/175 -f 274/701/176 279/702/176 278/703/176 -f 274/701/176 278/703/176 275/704/176 -usemtl common_steel_norivets -f 277/705/177 281/706/177 280/707/177 -f 277/705/177 280/707/177 276/708/177 -usemtl common_steel_painted_norivets -f 275/709/178 278/710/178 281/711/178 -f 275/709/178 281/711/178 277/712/178 -f 271/713/179 278/714/179 279/715/179 -f 271/713/179 279/715/179 270/716/179 -usemtl common_steel_norivets -f 272/717/180 280/718/180 281/719/180 -f 272/717/180 281/719/180 273/720/180 -usemtl common_steel_painted_norivets -f 273/721/181 281/722/181 278/723/181 -f 273/721/181 278/723/181 271/724/181 -o suspension_wheel -v 0.3125 0.5000004943447922 -1.2249998647816938 -v 0.3125 0.5000001629278576 -1.349999456908714 -v 0.3125 0.3750002867129263 -1.224999424834648 -v 0.3125 0.37500046227072636 -1.349999740996625 -v -0.3125 0.5000004943447922 -1.2249998647816938 -v -0.3125 0.5000001629278576 -1.349999456908714 -v -0.3125 0.3750002867129263 -1.224999424834648 -v -0.3125 0.37500046227072636 -1.349999740996625 -v -0.1375 0.85934585712926 -1.0228318964747392 -v -0.1375 0.901607577349071 -1.113462448913265 -v -0.1375 0.6327688605280993 -1.1284860884941559 -v -0.1375 0.6750304722177994 -1.2191172564375274 -v -0.2375 0.85934585712926 -1.0228318964747392 -v -0.2375 0.901607577349071 -1.113462448913265 -v -0.2375 0.6327688605280993 -1.1284860884941559 -v -0.2375 0.6750304722177994 -1.2191172564375274 -v 0.2375 0.85934585712926 -1.0228318964747392 -v 0.2375 0.901607577349071 -1.113462448913265 -v 0.2375 0.6327688605280993 -1.1284860884941559 -v 0.2375 0.6750304722177994 -1.2191172564375274 -v 0.1375 0.85934585712926 -1.0228318964747392 -v 0.1375 0.901607577349071 -1.113462448913265 -v 0.1375 0.6327688605280993 -1.1284860884941559 -v 0.1375 0.6750304722177994 -1.2191172564375274 -v 0.25 0.6597624566001373 -1.104502233613679 -v 0.25 0.7135766066065925 -1.21732537472063 -v 0.25 0.4341162829163463 -1.2121299181217435 -v 0.25 0.48793032439269046 -1.3249536747335404 -v 0.125 0.6597624566001373 -1.104502233613679 -v 0.125 0.7135766066065925 -1.21732537472063 -v 0.125 0.4341162829163463 -1.2121299181217435 -v 0.125 0.48793032439269046 -1.3249536747335404 -v -0.125 0.6597624566001373 -1.104502233613679 -v -0.125 0.7135766066065925 -1.21732537472063 -v -0.125 0.4341162829163463 -1.2121299181217435 -v -0.125 0.48793032439269046 -1.3249536747335404 -v -0.25 0.6597624566001373 -1.104502233613679 -v -0.25 0.7135766066065925 -1.21732537472063 -v -0.25 0.4341162829163463 -1.2121299181217435 -v -0.25 0.48793032439269046 -1.3249536747335404 -vt 0.875 0.09375 -vt 0.875 0.125 -vt 0.90625 0.125 -vt 0.90625 0.09375 -vt 0.90625 0.09375 -vt 0.875 0.09375 -vt 0.875 0.125 -vt 0.90625 0.125 -vt 0.796875 0.109375 -vt 0.796875 0.140625 -vt 0.953125 0.140625 -vt 0.953125 0.109375 -vt 0.953125 0.109375 -vt 0.953125 0.140625 -vt 0.796875 0.140625 -vt 0.796875 0.109375 -vt 0.953125 0.140625 -vt 0.953125 0.109375 -vt 0.796875 0.109375 -vt 0.796875 0.140625 -vt 0.953125 0.109375 -vt 0.953125 0.140625 -vt 0.796875 0.140625 -vt 0.796875 0.109375 -vt 0.96875 0.09375 -vt 0.96875 0.15625 -vt 0.9375 0.15625 -vt 0.9375 0.09375 -vt 0.96875 0.09375 -vt 0.96875 0.15625 -vt 0.9375 0.15625 -vt 0.9375 0.09375 -vt 0.9375 0.09375 -vt 0.9375 0.15625 -vt 0.96875 0.15625 -vt 0.96875 0.09375 -vt 0.9375 0.09375 -vt 0.9375 0.15625 -vt 0.96875 0.15625 -vt 0.96875 0.09375 -vt 0.96875 0.09375 -vt 0.96875 0.15625 -vt 0.9375 0.15625 -vt 0.9375 0.09375 -vt 0.96875 0.09375 -vt 0.96875 0.15625 -vt 0.9375 0.15625 -vt 0.9375 0.09375 -vt 0.9375 0.09375 -vt 0.9375 0.15625 -vt 0.96875 0.15625 -vt 0.96875 0.09375 -vt 0.9375 0.09375 -vt 0.9375 0.15625 -vt 0.96875 0.15625 -vt 0.96875 0.09375 -vt 0.96875 0.625 -vt 0.96875 0.6875 -vt 1 0.6875 -vt 1 0.625 -vt 0.953125 0.625 -vt 0.953125 0.6875 -vt 0.984375 0.6875 -vt 0.984375 0.625 -vt 0.8125 0.28125 -vt 0.8125 0.3125 -vt 0.84375 0.3125 -vt 0.84375 0.28125 -vt 0.96875 0.640625 -vt 0.96875 0.671875 -vt 0.9375 0.671875 -vt 0.9375 0.640625 -vt 1 0.640625 -vt 1 0.703125 -vt 0.96875 0.703125 -vt 0.96875 0.640625 -vt 0.984375 0.625 -vt 0.984375 0.6875 -vt 0.953125 0.6875 -vt 0.953125 0.625 -vt 0.96875 0.625 -vt 0.96875 0.6875 -vt 1 0.6875 -vt 1 0.625 -vt 0.953125 0.625 -vt 0.953125 0.6875 -vt 0.984375 0.6875 -vt 0.984375 0.625 -vt 0.8125 0.28125 -vt 0.8125 0.3125 -vt 0.84375 0.3125 -vt 0.84375 0.28125 -vt 0.96875 0.640625 -vt 0.96875 0.671875 -vt 0.9375 0.671875 -vt 0.9375 0.640625 -vt 1 0.640625 -vt 1 0.703125 -vt 0.96875 0.703125 -vt 0.96875 0.640625 -vt 0.984375 0.625 -vt 0.984375 0.6875 -vt 0.953125 0.6875 -vt 0.953125 0.625 +f 383/997/250 382/998/250 384/999/250 385/1000/250 +o shaft +v 0.4375 0.625 1.6875 +v 0.4375 0.625 0.75 +v 0.4375 0.5 1.6875 +v 0.4375 0.5 0.75 +v 0.3125 0.625 1.6875 +v 0.3125 0.625 0.75 +v 0.3125 0.5 1.6875 +v 0.3125 0.5 0.75 +vt 0.7656 0.2344 +vt 0.7969 0.2344 +vt 0.7969 0 +vt 0.7656 0 +vt 0.7969 0 +vt 0.7656 0 +vt 0.7656 0.2344 +vt 0.7969 0.2344 +vt 0.7969 0 +vt 0.7969 0.2344 +vt 0.7656 0.2344 +vt 0.7656 0 +vt 0.7656 0.2344 +vt 0.7656 0 +vt 0.7969 0 +vt 0.7969 0.2344 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl common_cable_and_pipe +f 389/1001/251 387/1002/251 386/1003/251 388/1004/251 +f 392/1005/252 390/1006/252 391/1007/252 393/1008/252 +f 386/1009/253 387/1010/253 391/1011/253 390/1012/253 +f 389/1013/254 388/1014/254 392/1015/254 393/1016/254 +o crip +v 0.0938 1.3525 -0.8338 +v 0.0938 1.3947 -1.0165 +v 0.0938 1.1089 -0.8901 +v 0.0938 1.1511 -1.0728 +v -0.0937 1.3525 -0.8338 +v -0.0937 1.3947 -1.0165 +v -0.0937 1.1089 -0.8901 +v -0.0937 1.1511 -1.0728 +v -0.0937 1.2729 -1.0446 +v 0.0938 1.2729 -1.0446 +v 0.0938 1.2307 -0.8619 +v -0.0937 1.2307 -0.8619 +v 0.2188 1.3125 -0.875 +v 0.1813 1.3125 -0.9625 +v 0.2188 1.1875 -0.875 +v 0.1813 1.1875 -0.9625 +v 0.0938 1.3125 -0.875 +v 0.0938 1.3125 -1 +v 0.0938 1.1875 -0.875 +v 0.0938 1.1875 -1 +v 0.2188 1.3125 -0.5625 +v 0.2188 1.1875 -0.5625 +v 0.0938 1.3125 -0.5625 +v 0.0938 1.1875 -0.5625 +v -0.2187 1.1875 -0.875 +v -0.1813 1.1875 -0.9625 +v -0.2187 1.3125 -0.875 +v -0.1813 1.3125 -0.9625 +v -0.0937 1.1875 -0.875 +v -0.0937 1.1875 -1 +v -0.0937 1.3125 -0.875 +v -0.0937 1.3125 -1 +v -0.2187 1.1875 -0.5625 +v -0.2187 1.3125 -0.5625 +v -0.0937 1.1875 -0.5625 +v -0.0937 1.3125 -0.5625 +v 0.1375 1.4129 -1.1383 +v 0.1375 1.0805 -1.1969 +v 0.1375 1.402 -1.0768 +v 0.1375 1.0697 -1.1354 +v -0.1375 1.4129 -1.1383 +v -0.1375 1.0805 -1.1969 +v -0.1375 1.402 -1.0768 +v -0.1375 1.0697 -1.1354 +v 0.0828 1.3466 -1.0865 +v 0.0828 1.1004 -1.13 +v 0.0828 1.3358 -1.025 +v 0.0828 1.0896 -1.0684 +v -0.0828 1.3466 -1.0865 +v -0.0828 1.1004 -1.13 +v -0.0828 1.3358 -1.025 +v -0.0828 1.0896 -1.0684 +vt 0.9063 1 +vt 0.9063 0.9688 +vt 0.9531 0.9688 +vt 0.9531 1 +vt 0.875 1 +vt 0.875 0.9688 +vt 0.9219 0.9688 +vt 0.9219 1 +vt 0.9063 0.2344 +vt 0.9063 0.2813 +vt 0.8594 0.2813 +vt 0.8594 0.2344 +vt 0.9063 0.2344 +vt 0.9063 0.2813 +vt 0.8594 0.2813 +vt 0.8594 0.2344 +vt 0.875 1 +vt 0.875 0.9688 +vt 0.9219 0.9688 +vt 0.9219 1 +vt 0.875 1 +vt 0.875 0.9688 +vt 0.9219 0.9688 +vt 0.9219 1 +vt 0.8906 0.25 +vt 0.8906 0.2813 +vt 0.8438 0.2813 +vt 0.8438 0.25 +vt 0.9219 0.25 +vt 0.9219 0.2813 +vt 0.875 0.2813 +vt 0.875 0.25 +vt 0.8906 0.25 +vt 0.8906 0.2813 +vt 0.8438 0.2813 +vt 0.8438 0.25 +vt 0.8906 0.25 +vt 0.8906 0.2813 +vt 0.8438 0.2813 +vt 0.8438 0.25 +vt 0.1176 0.2813 +vt 0.1176 0.25 +vt 0.0938 0.25 +vt 0.0938 0.2813 +vt 0.375 0.2188 +vt 0.375 0.25 +vt 0.4063 0.25 +vt 0.4063 0.2188 +vt 0.9688 1 +vt 1 1 +vt 1 0.9688 +vt 0.9688 0.9688 +vt 1 1 +vt 1 0.9688 +vt 0.9688 0.9688 +vt 0.9688 1 +vt 0.0938 0.2813 +vt 0.0938 0.25 +vt 0.125 0.25 +vt 0.125 0.2813 +vt 0.0781 0.2813 +vt 0.0781 0.25 +vt 0.1563 0.25 +vt 0.1563 0.2813 +vt 0.8906 0.4531 +vt 0.8906 0.4844 +vt 0.9688 0.4844 +vt 0.9688 0.4531 +vt 0.875 1 +vt 0.9531 1 +vt 0.9531 0.9688 +vt 0.875 0.9688 +vt 1 0.8594 +vt 1 0.9375 +vt 0.9688 0.9375 +vt 0.9688 0.8594 +vt 0.1176 0.25 +vt 0.1176 0.2813 +vt 0.0938 0.2813 +vt 0.0938 0.25 +vt 0.375 0.2188 +vt 0.375 0.25 +vt 0.4063 0.25 +vt 0.4063 0.2188 +vt 0.9688 1 +vt 1 1 +vt 1 0.9688 +vt 0.9688 0.9688 +vt 1 1 +vt 1 0.9688 +vt 0.9688 0.9688 +vt 0.9688 1 +vt 0.0938 0.25 +vt 0.0938 0.2813 +vt 0.125 0.2813 +vt 0.125 0.25 +vt 0.0781 0.25 +vt 0.0781 0.2813 +vt 0.1563 0.2813 +vt 0.1563 0.25 +vt 0.8906 0.4531 +vt 0.8906 0.4844 +vt 0.9688 0.4844 +vt 0.9688 0.4531 +vt 0.875 1 +vt 0.9531 1 +vt 0.9531 0.9688 +vt 0.875 0.9688 +vt 1 0.8594 +vt 1 0.9375 +vt 0.9688 0.9375 +vt 0.9688 0.8594 +vt 0.7813 0.5156 +vt 0.7656 0.5156 +vt 0.7656 0.4219 +vt 0.7813 0.4219 +vt 0.7813 0.5156 +vt 0.7656 0.5156 +vt 0.7656 0.4219 +vt 0.7813 0.4219 +vt 0.8438 0.5156 +vt 0.8438 0.4219 +vt 0.7656 0.4219 +vt 0.7656 0.5156 +vt 0.8438 0.4219 +vt 0.8438 0.5156 +vt 0.7656 0.5156 +vt 0.7656 0.4219 +vt 0.8438 0.5 +vt 0.8438 0.5156 +vt 0.7656 0.5156 +vt 0.7656 0.5 +vt 0.8438 0.5 +vt 0.8438 0.5156 +vt 0.7656 0.5156 +vt 0.7656 0.5 +vt 0.2656 0.2656 +vt 0.2813 0.2656 +vt 0.2813 0.3281 +vt 0.2656 0.3281 +vt 0.25 0.2656 +vt 0.2656 0.2656 +vt 0.2656 0.3281 +vt 0.25 0.3281 +vt 0.2813 0.2656 +vt 0.2813 0.3281 +vt 0.25 0.3281 +vt 0.25 0.2656 +vt 0.2813 0.3125 +vt 0.2813 0.3281 +vt 0.25 0.3281 +vt 0.25 0.3125 vn 1 0 0 vn -1 0 0 -vn 0 0.9999999999964853 -0.0000026513441289954813 -vn 0 -0.9999999999990139 -0.0000014044588483308475 -vn 0 0.0000035195705187229817 0.9999999999938064 -vn 0 0.0000022727087310714378 -0.9999999999974174 +vn 0 0.97 0.22 +vn 0 -0.97 -0.22 +vn 0 -0.22 0.97 +vn 0 0.22 -0.97 +vn 0 0.22 -0.97 +vn 1 0 0 +vn 0 -0.22 0.97 +vn -1 0 0 +vn 0.92 0 -0.39 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0.39 0 -0.92 vn 1 0 0 vn -1 0 0 -vn 0 -0.42261695849174274 0.9063083947504782 -vn 0 0.42261881450183586 -0.9063075292796937 +vn 0 1 0 +vn 0 -1 0 +vn -0.92 0 -0.39 vn 1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn -0.39 0 -0.92 vn -1 0 0 -vn 0 -0.42261695849174274 0.9063083947504782 -vn 0 0.42261881450183586 -0.9063075292796937 +vn 1 0 0 +vn 0 -1 0 +vn 0 1 0 vn 1 0 0 vn -1 0 0 -vn 0 0.9025844382659545 0.43051287065560717 -vn 0 -0.9025856882600316 -0.4305102499919893 -vn 0 -0.4305110336360348 0.9025853144814806 -vn 0 0.43051287065560717 -0.9025844382659545 +vn 0 0.17 -0.98 +vn 0 -0.17 0.98 +vn 0 0.98 0.17 +vn 0 -0.98 -0.17 vn 1 0 0 vn -1 0 0 -vn 0 0.9025844382659545 0.43051287065560717 -vn 0 -0.9025856882600316 -0.4305102499919893 -vn 0 -0.4305110336360348 0.9025853144814806 -vn 0 0.43051287065560717 -0.9025844382659545 -usemtl common_steel_norivets -f 285/725/182 283/726/182 282/727/182 -f 285/725/182 282/727/182 284/728/182 -f 288/729/183 286/730/183 287/731/183 -f 288/729/183 287/731/183 289/732/183 -f 282/733/184 283/734/184 287/735/184 -f 282/733/184 287/735/184 286/736/184 -f 285/737/185 284/738/185 288/739/185 -f 285/737/185 288/739/185 289/740/185 -f 284/741/186 282/742/186 286/743/186 -f 284/741/186 286/743/186 288/744/186 -f 289/745/187 287/746/187 283/747/187 -f 289/745/187 283/747/187 285/748/187 -f 293/749/188 291/750/188 290/751/188 -f 293/749/188 290/751/188 292/752/188 -f 296/753/189 294/754/189 295/755/189 -f 296/753/189 295/755/189 297/756/189 -f 292/757/190 290/758/190 294/759/190 -f 292/757/190 294/759/190 296/760/190 -f 297/761/191 295/762/191 291/763/191 -f 297/761/191 291/763/191 293/764/191 -f 301/765/192 299/766/192 298/767/192 -f 301/765/192 298/767/192 300/768/192 -f 304/769/193 302/770/193 303/771/193 -f 304/769/193 303/771/193 305/772/193 -f 300/773/194 298/774/194 302/775/194 -f 300/773/194 302/775/194 304/776/194 -f 305/777/195 303/778/195 299/779/195 -f 305/777/195 299/779/195 301/780/195 +vn 0 -0.17 0.98 +vn 0 0.98 0.17 usemtl common_steel_painted_norivets -f 309/781/196 307/782/196 306/783/196 -f 309/781/196 306/783/196 308/784/196 -f 312/785/197 310/786/197 311/787/197 -f 312/785/197 311/787/197 313/788/197 -f 306/789/198 307/790/198 311/791/198 -f 306/789/198 311/791/198 310/792/198 -f 309/793/199 308/794/199 312/795/199 -f 309/793/199 312/795/199 313/796/199 -f 308/797/200 306/798/200 310/799/200 -f 308/797/200 310/799/200 312/800/200 -f 313/801/201 311/802/201 307/803/201 -f 313/801/201 307/803/201 309/804/201 -f 317/805/202 315/806/202 314/807/202 -f 317/805/202 314/807/202 316/808/202 -f 320/809/203 318/810/203 319/811/203 -f 320/809/203 319/811/203 321/812/203 -f 314/813/204 315/814/204 319/815/204 -f 314/813/204 319/815/204 318/816/204 -f 317/817/205 316/818/205 320/819/205 -f 317/817/205 320/819/205 321/820/205 -f 316/821/206 314/822/206 318/823/206 -f 316/821/206 318/823/206 320/824/206 -f 321/825/207 319/826/207 315/827/207 -f 321/825/207 315/827/207 317/828/207 -o wheel -v -0.12499999999999956 0.8716575 -1.0937500000000004 -v 0.12500000000000044 0.8716575 -1.0937500000000004 -v -0.12499999999999956 0.6216575 -0.8437500000000004 -v 0.12500000000000044 0.6216575 -0.8437500000000004 -v -0.12499999999999956 0.8716575 -1.4687500000000004 -v 0.12500000000000044 0.8716575 -1.4687500000000004 -v -0.12499999999999956 0.6216575 -1.7187500000000004 -v 0.12500000000000044 0.6216575 -1.7187500000000004 -v -0.12499999999999956 -0.003342500000000026 -1.0937500000000004 -v 0.12500000000000044 -0.003342500000000026 -1.0937500000000004 -v -0.12499999999999956 0.24665749999999997 -0.8437500000000004 -v 0.12500000000000044 0.24665749999999997 -0.8437500000000004 -v -0.12499999999999956 -0.003342500000000026 -1.4687500000000004 -v 0.12500000000000044 -0.003342500000000026 -1.4687500000000004 -v -0.12499999999999956 0.24665749999999997 -1.7187500000000004 -v 0.12500000000000044 0.24665749999999997 -1.7187500000000004 -v -0.12499999999999956 0.6216575 -0.8437500000000004 -v 0.12500000000000044 0.6216575 -0.8437500000000004 -v -0.12499999999999956 0.24665749999999997 -0.8437500000000004 -v 0.12500000000000044 0.24665749999999997 -0.8437500000000004 -v -0.12499999999999956 0.6216575 -1.7187500000000004 -v 0.12500000000000044 0.6216575 -1.7187500000000004 -v -0.12499999999999956 0.24665749999999997 -1.7187500000000004 -v 0.12500000000000044 0.24665749999999997 -1.7187500000000004 -vt 0.84375 0.5625 -vt 0.84375 0.71875 -vt 0.71875 0.71875 -vt 0.71875 0.5625 -vt 0.28125 0.5625 -vt 0.28125 0.71875 -vt 0.15625 0.71875 -vt 0.15625 0.5625 -vt 0.40625 0.71875 -vt 0.40625 0.84375 -vt 0.59375 0.84375 -vt 0.59375 0.71875 -vt 0.71875 0.59375 -vt 0.59375 0.71875 -vt 0.40625 0.71875 -vt 0.28125 0.59375 -vt 0.28125 0.59375 -vt 0.40625 0.71875 -vt 0.59375 0.71875 -vt 0.71875 0.59375 -vt 0.71875 0.28125 -vt 0.84375 0.28125 -vt 0.84375 0.4375 -vt 0.71875 0.4375 -vt 0.15625 0.28125 -vt 0.28125 0.28125 -vt 0.28125 0.4375 -vt 0.15625 0.4375 -vt 0.40625 0.15625 -vt 0.59375 0.15625 -vt 0.59375 0.28125 -vt 0.40625 0.28125 -vt 0.40625 0.28125 -vt 0.59375 0.28125 -vt 0.71875 0.40625 -vt 0.28125 0.40625 -vt 0.59375 0.28125 -vt 0.40625 0.28125 -vt 0.28125 0.40625 -vt 0.71875 0.40625 -vt 0.84375 0.40625 -vt 0.84375 0.59375 -vt 0.71875 0.59375 -vt 0.71875 0.40625 -vt 0.28125 0.40625 -vt 0.28125 0.59375 -vt 0.15625 0.59375 -vt 0.15625 0.40625 -vt 0.71875 0.40625 -vt 0.71875 0.59375 -vt 0.28125 0.59375 -vt 0.28125 0.40625 -vt 0.28125 0.40625 -vt 0.28125 0.59375 -vt 0.71875 0.59375 -vt 0.71875 0.40625 -vn 1.5700924586837752e-16 0.7071067811865476 0.7071067811865476 -vn -1.5700924586837752e-16 0.7071067811865476 -0.7071067811865476 -vn 0 1 0 -vn -1 0 2.220446049250313e-16 -vn 1 0 -2.220446049250313e-16 -vn 1.5700924586837752e-16 -0.7071067811865476 0.7071067811865476 -vn -1.5700924586837752e-16 -0.7071067811865476 -0.7071067811865476 -vn 0 -1 0 -vn -1 0 2.220446049250313e-16 -vn 1 0 -2.220446049250313e-16 -vn 2.220446049250313e-16 0 1 -vn -2.220446049250313e-16 0 -1 -vn -1 0 2.220446049250313e-16 -vn 1 0 -2.220446049250313e-16 -usemtl wheel_12_terrain -f 325/829/208 323/830/208 322/831/208 -f 325/829/208 322/831/208 324/832/208 -f 328/833/209 326/834/209 327/835/209 -f 328/833/209 327/835/209 329/836/209 -f 322/837/210 323/838/210 327/839/210 -f 322/837/210 327/839/210 326/840/210 -f 324/841/211 322/842/211 326/843/211 -f 324/841/211 326/843/211 328/844/211 -f 329/845/212 327/846/212 323/847/212 -f 329/845/212 323/847/212 325/848/212 -f 330/849/213 331/850/213 333/851/213 -f 330/849/213 333/851/213 332/852/213 -f 335/853/214 334/854/214 336/855/214 -f 335/853/214 336/855/214 337/856/214 -f 335/857/215 331/858/215 330/859/215 -f 335/857/215 330/859/215 334/860/215 -f 334/861/216 330/862/216 332/863/216 -f 334/861/216 332/863/216 336/864/216 -f 331/865/217 335/866/217 337/867/217 -f 331/865/217 337/867/217 333/868/217 -f 341/869/218 339/870/218 338/871/218 -f 341/869/218 338/871/218 340/872/218 -f 344/873/219 342/874/219 343/875/219 -f 344/873/219 343/875/219 345/876/219 -f 340/877/220 338/878/220 342/879/220 -f 340/877/220 342/879/220 344/880/220 -f 345/881/221 343/882/221 339/883/221 -f 345/881/221 339/883/221 341/884/221 -o gas -v 0.6602274753483999 1.552933125 -0.2551081286065204 -v 0.7735159487279812 1.552933125 -0.3079354113241078 -v 0.6602274753483999 1.427933125 -0.2551081286065204 -v 0.7735159487279812 1.427933125 -0.3079354113241078 -v 0.5809865512720188 1.552933125 -0.42504083867589226 -v 0.6942750246516001 1.552933125 -0.4778681213934797 -v 0.5809865512720188 1.427933125 -0.42504083867589226 -v 0.6942750246516001 1.427933125 -0.4778681213934797 -vt 0.375 0.75 -vt 0.375 0.8125 -vt 0.3125 0.8125 -vt 0.3125 0.75 -vt 0.375 0.75 -vt 0.375 0.8125 -vt 0.3125 0.8125 -vt 0.3125 0.75 -vt 0.375 0.75 -vt 0.375 0.8125 -vt 0.28125 0.8125 -vt 0.28125 0.75 -vt 0.375 0.75 -vt 0.375 0.8125 -vt 0.28125 0.8125 -vt 0.28125 0.75 -vt 0.375 0.75 -vt 0.375 0.8125 -vt 0.28125 0.8125 -vt 0.28125 0.75 -vt 0.375 0.75 -vt 0.375 0.8125 -vt 0.28125 0.8125 -vt 0.28125 0.75 -vn 0.4226182617406993 0 0.90630778703665 -vn -0.4226182617406993 0 -0.90630778703665 -vn 0 1 0 +f 394/1017/255 404/1018/255 403/1019/255 395/1020/255 +f 399/1021/256 402/1022/256 405/1023/256 398/1024/256 +f 394/1025/257 395/1026/257 399/1027/257 398/1028/257 +f 397/1029/258 396/1030/258 400/1031/258 401/1032/258 +f 398/1033/259 405/1034/259 404/1035/259 394/1036/259 +f 395/1037/260 403/1038/260 402/1039/260 399/1040/260 +f 401/1041/261 402/1042/261 403/1043/261 397/1044/261 +f 397/1045/262 403/1046/262 404/1047/262 396/1048/262 +f 396/1049/263 404/1050/263 405/1051/263 400/1052/263 +f 400/1053/264 405/1054/264 402/1055/264 401/1056/264 +f 409/1057/265 407/1058/265 406/1059/265 408/1060/265 +f 412/1061/266 410/1062/266 411/1063/266 413/1064/266 +f 406/1065/267 407/1066/267 411/1067/267 410/1068/267 +f 409/1069/268 408/1070/268 412/1071/268 413/1072/268 +f 413/1073/269 411/1074/269 407/1075/269 409/1076/269 +f 408/1077/270 406/1078/270 414/1079/270 415/1080/270 +f 417/1081/271 416/1082/271 410/1083/271 412/1084/271 +f 414/1085/272 406/1086/272 410/1087/272 416/1088/272 +f 408/1089/273 415/1090/273 417/1091/273 412/1092/273 +f 421/1093/274 419/1094/274 418/1095/274 420/1096/274 +f 424/1097/275 422/1098/275 423/1099/275 425/1100/275 +f 418/1101/276 419/1102/276 423/1103/276 422/1104/276 +f 421/1105/277 420/1106/277 424/1107/277 425/1108/277 +f 425/1109/278 423/1110/278 419/1111/278 421/1112/278 +f 420/1113/279 418/1114/279 426/1115/279 427/1116/279 +f 429/1117/280 428/1118/280 422/1119/280 424/1120/280 +f 426/1121/281 418/1122/281 422/1123/281 428/1124/281 +f 420/1125/282 427/1126/282 429/1127/282 424/1128/282 +usemtl tracked_motorbike2_paint +f 433/1129/283 431/1130/283 430/1131/283 432/1132/283 +f 436/1133/284 434/1134/284 435/1135/284 437/1136/284 +f 430/1137/285 431/1138/285 435/1139/285 434/1140/285 +f 433/1141/286 432/1142/286 436/1143/286 437/1144/286 +f 432/1145/287 430/1146/287 434/1147/287 436/1148/287 +f 437/1149/288 435/1150/288 431/1151/288 433/1152/288 +usemtl tracked_motorbike2 +f 441/1153/289 439/1154/289 438/1155/289 440/1156/289 +f 444/1157/290 442/1158/290 443/1159/290 445/1160/290 +f 441/1161/291 440/1162/291 444/1163/291 445/1164/291 +f 440/1165/292 438/1166/292 442/1167/292 444/1168/292 +o rod +v 0.4375 1.3125 1.6875 +v 0.4375 1.3125 1.625 +v -0.25 1.3125 1.6875 +v -0.25 1.3125 1.625 +v 0.4375 1.375 1.6875 +v 0.4375 1.375 1.625 +v -0.25 1.375 1.6875 +v -0.25 1.375 1.625 +vt 0.0313 0.7813 +vt 0.0313 0.9531 +vt 0.0156 0.9531 +vt 0.0156 0.7813 +vt 0.0313 0.7813 +vt 0.0313 0.9531 +vt 0.0156 0.9531 +vt 0.0156 0.7813 +vt 0.0313 0.9375 +vt 0.0313 0.9531 +vt 0.0156 0.9531 +vt 0.0156 0.9375 +vt 0.0313 0.9375 +vt 0.0313 0.9531 +vt 0.0156 0.9531 +vt 0.0156 0.9375 +vt 0.0313 0.7813 +vt 0.0313 0.9531 +vt 0.0156 0.9531 +vt 0.0156 0.7813 +vt 0.0313 0.7813 +vt 0.0313 0.9531 +vt 0.0156 0.9531 +vt 0.0156 0.7813 vn 0 -1 0 -vn -0.90630778703665 0 0.4226182617406993 -vn 0.90630778703665 0 -0.4226182617406993 -usemtl tracked_motorbike -f 349/885/222 347/886/222 346/887/222 -f 349/885/222 346/887/222 348/888/222 -f 352/889/223 350/890/223 351/891/223 -f 352/889/223 351/891/223 353/892/223 -f 346/893/224 347/894/224 351/895/224 -f 346/893/224 351/895/224 350/896/224 -f 349/897/225 348/898/225 352/899/225 -f 349/897/225 352/899/225 353/900/225 -f 348/901/226 346/902/226 350/903/226 -f 348/901/226 350/903/226 352/904/226 -f 353/905/227 351/906/227 347/907/227 -f 353/905/227 347/907/227 349/908/227 -o cluch -v -0.8270722796006491 1.53125 -0.3846144652265723 -v -0.5710872657603392 1.53125 -0.5638571015862742 -v -0.8270722796006491 1.46875 -0.3846144652265723 -v -0.5710872657603392 1.46875 -0.5638571015862742 -v -0.8629208068725894 1.53125 -0.43581146799463427 -v -0.6069357930322796 1.53125 -0.6150541043543362 -v -0.8629208068725894 1.46875 -0.43581146799463427 -v -0.6069357930322796 1.46875 -0.6150541043543362 -vt 0.84375 0.125 -vt 0.84375 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.125 -vt 0.84375 0.125 -vt 0.84375 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.125 -vt 0.84375 0.0625 -vt 0.84375 0.140625 -vt 0.859375 0.140625 -vt 0.859375 0.0625 -vt 0.84375 0.0625 -vt 0.84375 0.140625 -vt 0.859375 0.140625 -vt 0.859375 0.0625 -vt 0.84375 0.125 -vt 0.84375 0.140625 -vt 0.859375 0.140625 -vt 0.859375 0.125 -vt 0.84375 0.125 -vt 0.84375 0.140625 -vt 0.859375 0.140625 -vt 0.859375 0.125 -vn 0.5735764363510462 0 0.8191520442889917 -vn -0.5735764363510462 0 -0.8191520442889917 -vn 0 1 0 -vn 0 -1 0 -vn -0.8191520442889917 0 0.5735764363510462 -vn 0.8191520442889917 0 -0.5735764363510462 -usemtl common_steel -f 357/909/228 355/910/228 354/911/228 -f 357/909/228 354/911/228 356/912/228 -f 360/913/229 358/914/229 359/915/229 -f 360/913/229 359/915/229 361/916/229 -f 354/917/230 355/918/230 359/919/230 -f 354/917/230 359/919/230 358/920/230 -f 357/921/231 356/922/231 360/923/231 -f 357/921/231 360/923/231 361/924/231 -f 356/925/232 354/926/232 358/927/232 -f 356/925/232 358/927/232 360/928/232 -f 361/929/233 359/930/233 355/931/233 -f 361/929/233 355/931/233 357/932/233 -o brake -v 0.8543747848067921 1.53125 -0.4724471102082974 -v 0.5983897709664823 1.53125 -0.6516897465679993 -v 0.8543747848067921 1.46875 -0.4724471102082974 -v 0.5983897709664823 1.46875 -0.6516897465679993 -v 0.8185262575348518 1.53125 -0.4212501074402354 -v 0.5625412436945418 1.53125 -0.6004927437999373 -v 0.8185262575348518 1.46875 -0.4212501074402354 -v 0.5625412436945418 1.46875 -0.6004927437999373 -vt 0.90625 0.140625 -vt 0.90625 0.15625 -vt 0.828125 0.15625 -vt 0.828125 0.140625 -vt 0.90625 0.140625 -vt 0.90625 0.15625 -vt 0.828125 0.15625 -vt 0.828125 0.140625 -vt 0.84375 0.078125 -vt 0.84375 0.15625 -vt 0.828125 0.15625 -vt 0.828125 0.078125 -vt 0.84375 0.078125 -vt 0.84375 0.15625 -vt 0.828125 0.15625 -vt 0.828125 0.078125 -vt 0.84375 0.140625 -vt 0.84375 0.15625 -vt 0.828125 0.15625 -vt 0.828125 0.140625 -vt 0.84375 0.140625 -vt 0.84375 0.15625 -vt 0.828125 0.15625 -vt 0.828125 0.140625 -vn 0.5735764363510462 0 -0.8191520442889917 -vn -0.5735764363510462 0 0.8191520442889917 -vn 0 1 0 -vn 0 -1 0 -vn 0.8191520442889917 0 0.5735764363510462 -vn -0.8191520442889917 0 -0.5735764363510462 -usemtl common_steel -f 365/933/234 363/934/234 362/935/234 -f 365/933/234 362/935/234 364/936/234 -f 368/937/235 366/938/235 367/939/235 -f 368/937/235 367/939/235 369/940/235 -f 362/941/236 363/942/236 367/943/236 -f 362/941/236 367/943/236 366/944/236 -f 365/945/237 364/946/237 368/947/237 -f 365/945/237 368/947/237 369/948/237 -f 364/949/238 362/950/238 366/951/238 -f 364/949/238 366/951/238 368/952/238 -f 369/953/239 367/954/239 363/955/239 -f 369/953/239 363/955/239 365/956/239 -o key -v 0.21875 1.5070994840220242 -0.6554274596384494 -v 0.21875 1.5383494840220242 -0.7095540473749767 -v 0.21875 1.4529728962854966 -0.6866774596384494 -v 0.21875 1.4842228962854966 -0.7408040473749767 -v 0.09375 1.5070994840220242 -0.6554274596384494 -v 0.09375 1.5383494840220242 -0.7095540473749767 -v 0.09375 1.4529728962854966 -0.6866774596384494 -v 0.09375 1.4842228962854966 -0.7408040473749767 -v 0.1875 1.5242284792291598 -0.7122407496198122 -v 0.1875 1.4918764925862855 -0.832981715028564 -v 0.1875 1.4638586940406613 -0.6960647144313137 -v 0.1875 1.4315058536319096 -0.8168054510741881 -v 0.125 1.5242284792291598 -0.7122407496198122 -v 0.125 1.4918764925862855 -0.832981715028564 -v 0.125 1.4638586940406613 -0.6960647144313137 -v 0.125 1.4315058536319096 -0.8168054510741881 -vt 0.0625 0.96875 -vt 0.0625 1 -vt 0.03125 1 -vt 0.03125 0.96875 -vt 0.03125 0.96875 -vt 0.03125 1 -vt 0 1 -vt 0 0.96875 -vt 0.0625 0.96875 -vt 0.0625 1 -vt 0 1 -vt 0 0.96875 -vt 0.0625 0.96875 -vt 0.0625 1 -vt 0 1 -vt 0 0.96875 -vt 0.0625 0.96875 -vt 0.0625 1 -vt 0 1 -vt 0 0.96875 -vt 0 0.96875 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.96875 -vt 0.859375 0.109375 -vt 0.859375 0.125 -vt 0.828125 0.125 -vt 0.828125 0.109375 -vt 0.859375 0.109375 -vt 0.859375 0.125 -vt 0.828125 0.125 -vt 0.828125 0.109375 -vt 0.84375 0.09375 -vt 0.84375 0.125 -vt 0.828125 0.125 -vt 0.828125 0.09375 -vt 0.84375 0.09375 -vt 0.84375 0.125 -vt 0.828125 0.125 -vt 0.828125 0.09375 -vt 0.84375 0.109375 -vt 0.84375 0.125 -vt 0.828125 0.125 -vt 0.828125 0.109375 -vn 1 0 0 -vn -1 0 0 -vn 0 0.8660254037844386 0.5000000000000001 -vn 0 -0.8660254037844386 -0.5000000000000001 -vn 0 -0.5000000000000001 0.8660254037844386 -vn 0 0.5000000000000001 -0.8660254037844386 -vn 1 0 0 -vn -1 0 0 -vn 0 0.9659267413456105 -0.2588156300408653 -vn 0 -0.9659249112204522 0.2588224601609409 -vn 0 -0.25881904510252074 -0.9659258262890684 -usemtl tracked_motorbike -f 373/957/240 371/958/240 370/959/240 -f 373/957/240 370/959/240 372/960/240 -f 376/961/241 374/962/241 375/963/241 -f 376/961/241 375/963/241 377/964/241 -f 370/965/242 371/966/242 375/967/242 -f 370/965/242 375/967/242 374/968/242 -f 373/969/243 372/970/243 376/971/243 -f 373/969/243 376/971/243 377/972/243 -f 372/973/244 370/974/244 374/975/244 -f 372/973/244 374/975/244 376/976/244 -f 377/977/245 375/978/245 371/979/245 -f 377/977/245 371/979/245 373/980/245 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 usemtl common_steel_norivets -f 381/981/246 379/982/246 378/983/246 -f 381/981/246 378/983/246 380/984/246 -f 384/985/247 382/986/247 383/987/247 -f 384/985/247 383/987/247 385/988/247 -f 378/989/248 379/990/248 383/991/248 -f 378/989/248 383/991/248 382/992/248 -f 381/993/249 380/994/249 384/995/249 -f 381/993/249 384/995/249 385/996/249 -f 385/997/250 383/998/250 379/999/250 -f 385/997/250 379/999/250 381/1000/250 -o hull -v 0.625 1.0625 2.25 -v 0.625 1.0625 1.875 -v 0.625 0.6875 2.25 -v 0.625 0.6875 1.875 -v 0.5625 1.0625 2.25 -v 0.5625 1.0625 1.875 -v 0.5625 0.6875 2.25 -v 0.5625 0.6875 1.875 -v -0.5625 1.0625 2.25 -v -0.5625 1.0625 1.875 -v -0.5625 0.6875 2.25 -v -0.5625 0.6875 1.875 -v -0.625 1.0625 2.25 -v -0.625 1.0625 1.875 -v -0.625 0.6875 2.25 -v -0.625 0.6875 1.875 -v 0.625 1.0625 -0.125 -v 0.625 1.0625 -0.5 -v 0.625 0.6875 -0.125 -v 0.625 0.6875 -0.5 -v 0.5625 1.0625 -0.125 -v 0.5625 1.0625 -0.5 -v 0.5625 0.6875 -0.125 -v 0.5625 0.6875 -0.5 -v 0.5625 0.8687499999999999 1.5625 -v 0.5625 0.8687499999999999 0.1875 -v 0.5625 1.05625 1.5625 -v 0.5625 1.05625 0.1875 -v 1 0.8687499999999999 1.5625 -v 1 0.8687499999999999 0.1875 -v 1 1.05625 1.5625 -v 1 1.05625 0.1875 -v 1 0.9937499999999999 1.5625 -v 1 0.9937499999999999 0.1875 -v 0.5625 0.9937499999999999 0.1875 -v 0.5625 0.9937499999999999 1.5625 -v 1 0.9937499999999999 0.875 -v 1 1.05625 0.875 -v 0.5625 1.05625 0.875 -v 0.5625 0.8687499999999999 0.875 -v 1 0.8687499999999999 0.875 -v 0.75 0.8687499999999999 0.875 -v 0.75 0.8687499999999999 1.5625 -v 0.75 0.9937499999999999 1.5625 -v 0.75 1.05625 1.5625 -v 0.75 1.05625 0.875 -v 0.75 1.05625 0.1875 -v 0.75 0.9937499999999999 0.1875 -v 0.75 0.8687499999999999 0.1875 -v 0.5625 1.11875 1.125 -v 0.5625 1.11875 1.1875 -v 0.5625 1.05625 1.125 -v 0.5625 1.05625 1.1875 -v 1 1.11875 1.125 -v 1 1.11875 1.1875 -v 1 1.05625 1.125 -v 1 1.05625 1.1875 -v 0.5625 1.11875 0.5625 -v 0.5625 1.11875 0.625 -v 0.5625 1.05625 0.5625 -v 0.5625 1.05625 0.625 -v 1 1.11875 0.5625 -v 1 1.11875 0.625 -v 1 1.05625 0.5625 -v 1 1.05625 0.625 -v 0.5625 1.4375 1.8125 -v 0.5625 1.4375 0.625 -v 0.5625 1.375 1.8125 -v 0.5625 1.375 0.625 -v 1.0625 1.375 1.8125 -v 1.0625 1.375 0.625 -v 1.0625 1.3125 1.8125 -v 1.0625 1.3125 0.625 -v 0.5625 1.4375 1.25 -v 1.0625 1.375 1.25 -v 1.0625 1.3125 1.25 -v 0.5625 1.375 1.25 -v 0.6875 1.4375 1.25 -v 0.6875 1.4375 1.8125 -v 0.6875 1.375 1.8125 -v 0.6875 1.375 1.25 -v 0.6875 1.375 0.625 -v 0.6875 1.4375 0.625 -v 0.9375 1.5 0.0625 -v 0.9375 1.5 0 -v 1 1.4375 0.0625 -v 1 1.4375 0 -v 0.6875 1.5 0.0625 -v 0.6875 1.5 0 -v 0.625 1.4375 0.0625 -v 0.625 1.4375 0 -v 1 1.375 0.0625 -v 1 1.375 0 -v 0.9375 1.4375 0.0625 -v 0.9375 1.4375 0 -v 0.9375 1.375 0.0625 -v 0.9375 1.375 0 -v 0.6875 1.4375 0.0625 -v 0.6875 1.4375 0 -v 0.6875 1.375 0.0625 -v 0.6875 1.375 0 -v 0.625 1.375 0.0625 -v 0.625 1.375 0 -v 0.9375 1.48125 2.1875 -v 0.9375 1.48125 2.125 -v 1 1.41875 2.1875 -v 1 1.41875 2.125 -v 0.6875 1.48125 2.1875 -v 0.6875 1.48125 2.125 -v 0.625 1.41875 2.1875 -v 0.625 1.41875 2.125 -v 1 1.35625 2.1875 -v 1 1.35625 2.125 -v 0.9375 1.41875 2.1875 -v 0.9375 1.41875 2.125 -v 0.9375 1.35625 2.1875 -v 0.9375 1.35625 2.125 -v 0.6875 1.41875 2.1875 -v 0.6875 1.41875 2.125 -v 0.6875 1.35625 2.1875 -v 0.6875 1.35625 2.125 -v 0.625 1.35625 2.1875 -v 0.625 1.35625 2.125 -v -0.5625 1.05625 1.5625 -v -0.5625 1.05625 0.1875 -v -0.5625 0.8687499999999999 1.5625 -v -0.5625 0.8687499999999999 0.1875 -v -1 1.05625 1.5625 -v -1 1.05625 0.1875 -v -1 0.8687499999999999 1.5625 -v -1 0.8687499999999999 0.1875 -v -1 0.9312499999999999 1.5625 -v -1 0.9312499999999999 0.1875 -v -0.5625 0.9312499999999999 0.1875 -v -0.5625 0.9312499999999999 1.5625 -v -1 0.9312499999999999 0.875 -v -1 0.8687499999999999 0.875 -v -0.5625 0.8687499999999999 0.875 -v -0.5625 1.05625 0.875 -v -1 1.05625 0.875 -v -0.75 1.05625 0.875 -v -0.75 1.05625 1.5625 -v -0.75 0.9312499999999999 1.5625 -v -0.75 0.8687499999999999 1.5625 -v -0.75 0.8687499999999999 0.875 -v -0.75 0.8687499999999999 0.1875 -v -0.75 0.9312499999999999 0.1875 -v -0.75 1.05625 0.1875 -v -0.5625 1.11875 0.625 -v -0.5625 1.11875 0.5625 -v -0.5625 1.05625 0.625 -v -0.5625 1.05625 0.5625 -v -1 1.11875 0.625 -v -1 1.11875 0.5625 -v -1 1.05625 0.625 -v -1 1.05625 0.5625 -v -0.5625 1.0625 -0.125 -v -0.5625 1.0625 -0.5 -v -0.5625 0.6875 -0.125 -v -0.5625 0.6875 -0.5 -v -0.625 1.0625 -0.125 -v -0.625 1.0625 -0.5 -v -0.625 0.6875 -0.125 -v -0.625 0.6875 -0.5 -v -0.5625 1.4375 1.8125 -v -0.5625 1.4375 0.625 -v -0.5625 1.375 1.8125 -v -0.5625 1.375 0.625 -v -1.0625 1.375 1.8125 -v -1.0625 1.375 0.625 -v -1.0625 1.3125 1.8125 -v -1.0625 1.3125 0.625 -v -0.5625 1.4375 1.25 -v -1.0625 1.375 1.25 -v -1.0625 1.3125 1.25 -v -0.5625 1.375 1.25 -v -0.6875 1.4375 1.25 -v -0.6875 1.4375 1.8125 -v -0.6875 1.375 1.8125 -v -0.6875 1.375 1.25 -v -0.6875 1.375 0.625 -v -0.6875 1.4375 0.625 -v -0.6875 1.5 0.0625 -v -0.6875 1.5 0 -v -0.625 1.4375 0.0625 -v -0.625 1.4375 0 -v -0.9375 1.5 0.0625 -v -0.9375 1.5 0 -v -1 1.4375 0.0625 -v -1 1.4375 0 -v -0.625 1.375 0.0625 -v -0.625 1.375 0 -v -0.6875 1.4375 0.0625 -v -0.6875 1.4375 0 -v -0.6875 1.375 0.0625 -v -0.6875 1.375 0 -v -0.9375 1.4375 0.0625 -v -0.9375 1.4375 0 -v -0.9375 1.375 0.0625 -v -0.9375 1.375 0 -v -1 1.375 0.0625 -v -1 1.375 0 -v -0.6875 1.48125 2.1875 -v -0.6875 1.48125 2.125 -v -0.625 1.41875 2.1875 -v -0.625 1.41875 2.125 -v -0.9375 1.48125 2.1875 -v -0.9375 1.48125 2.125 -v -1 1.41875 2.1875 -v -1 1.41875 2.125 -v -0.625 1.35625 2.1875 -v -0.625 1.35625 2.125 -v -0.6875 1.41875 2.1875 -v -0.6875 1.41875 2.125 -v -0.6875 1.35625 2.1875 -v -0.6875 1.35625 2.125 -v -0.9375 1.41875 2.1875 -v -0.9375 1.41875 2.125 -v -0.9375 1.35625 2.1875 -v -0.9375 1.35625 2.125 -v -1 1.35625 2.1875 -v -1 1.35625 2.125 -v -0.5625 1.11875 1.1875 -v -0.5625 1.11875 1.125 -v -0.5625 1.05625 1.1875 -v -0.5625 1.05625 1.125 -v -1 1.11875 1.1875 -v -1 1.11875 1.125 -v -1 1.05625 1.1875 -v -1 1.05625 1.125 -v 0.25 1.3125 1.75 -v 0.25 1.3125 1.5 -v 0.25 0.4375 1.5 -v -0.5 1.3125 1.75 -v -0.5 1.3125 1.5 -v -0.5 0.4375 1.5 -v 0.25 0.4375 1.75 -v 0.5 1.25 1.125 -v 0.3125 1.25 1.125 -v 0.5 0.8125 1.125 -v 0.3125 0.8125 1.125 -v 0.5 1.25 1.625 -v 0.3125 1.25 1.625 -v 0.5 0.8125 1.625 -v 0.3125 0.8125 1.625 -v 0.4375 1.25 1.125 -v 0.4375 0.8125 1.125 -v 0.4375 0.8125 1.625 -v 0.4375 1.25 1.625 -v 0.3125 1.15625 1.25 -v 0.25 1.15625 1.25 -v 0.3125 0.90625 1.25 -v 0.25 0.90625 1.25 -v 0.3125 1.15625 1.5 -v 0.25 1.15625 1.5 -v 0.3125 0.90625 1.5 -v 0.25 0.90625 1.5 -v 0.25 1.09375 1.4375 -v 0.25 1.09375 1.3125 -v 0.25 0.96875 1.4375 -v 0.25 0.96875 1.3125 -v 0.1875 1.09375 1.4375 -v 0.1875 1.09375 1.3125 -v 0.125 0.96875 1.4375 -v 0.125 0.96875 1.3125 -v 0.4579575 0.9428124999999999 1.125 -v 0.4579575 0.9428124999999999 0.9375 -v 0.299475625 0.602946875 1.125 -v 0.299475625 0.602946875 0.9375 -v 0.288024375 1.022053125 1.125 -v 0.288024375 1.022053125 0.9375 -v 0.1295425 0.6821875 1.125 -v 0.1295425 0.6821875 0.9375 -v -0.40625 0.78125 1.53125 -v -0.40625 0.78125 1.09375 -v -0.40625 0.65625 1.53125 -v -0.40625 0.65625 1.09375 -v -0.53125 0.78125 1.53125 -v -0.53125 0.78125 1.09375 -v -0.53125 0.65625 1.53125 -v -0.53125 0.65625 1.09375 -v -0.40625 0.78125 0.96875 -v -0.40625 0.65625 0.96875 -v -0.46875 0.78125 0.96875 -v -0.46875 0.65625 0.96875 -v 0.5 1.3125 -0.4375 -v 0.5 1.3125 0.5625 -v 0.5 0.4375 -0.4375 -v 0.5 0.4375 0.5625 -v 0.5625 1.3125 -0.4375 -v 0.5625 1.3125 0.5625 -v 0.5625 0.4375 -0.4375 -v 0.5625 0.4375 0.5625 -v 0.0625 0.84375 2.6875 -v 0.0625 0.84375 2.5625 -v 0.0625 0.40625 2.6875 -v 0.0625 0.40625 2.5625 -v -0.0625 0.84375 2.6875 -v -0.0625 0.84375 2.5625 -v -0.0625 0.40625 2.6875 -v -0.0625 0.40625 2.5625 -v 0.0625 0.40625 2.375 -v 0.0625 0.28125 2.625 -v 0.0625 0.28125 2.375 -v -0.0625 0.40625 2.375 -v -0.0625 0.28125 2.625 -v -0.0625 0.28125 2.375 -v 0.5625 0.4375 2.4375 -v 0.5625 0.3125 2.4375 -v 0.5625 0.3125 -0.4375 -v -0.5625 0.4375 2.4375 -v -0.5625 0.4375 -0.4375 -v -0.5625 0.3125 2.4375 -v -0.5625 0.3125 -0.4375 -v 0.5625 0.3125 1 -v -0.5625 0.3125 1 -v -0.5625 0.4375 1 -v 0.5625 0.4375 1 -v 0 0.3125 1 -v 0 0.3125 -0.4375 -v 0 0.4375 -0.4375 -v 0 0.4375 1 -v 0 0.4375 2.4375 -v 0 0.3125 2.4375 -v 0.5 1.25 0.6875 -v 0.5 0.4375 0.6875 -v -0.5 1.25 0.6875 -v -0.5 0.4375 0.6875 -v -0.4375 1.5 1.75 -v -0.4375 1.5 1.625 -v -0.4375 1.4375 1.75 -v -0.4375 1.4375 1.625 -v -0.5625 1.5 1.75 -v -0.5625 1.5 1.625 -v -0.5625 1.4375 1.75 -v -0.5625 1.4375 1.625 -v -0.4375 1.5 0.8125 -v -0.4375 1.5 0.6875 -v -0.4375 1.4375 0.8125 -v -0.4375 1.4375 0.6875 -v -0.5625 1.5 0.8125 -v -0.5625 1.5 0.6875 -v -0.5625 1.4375 0.8125 -v -0.5625 1.4375 0.6875 -v 0.1875 0.61875 0.125 -v 0.1875 0.61875 -0.4375 -v 0.1875 0.43125 0.125 -v 0.1875 0.43125 -0.4375 -v -0.0625 0.61875 0.125 -v -0.0625 0.61875 -0.4375 -v -0.0625 0.43125 0.125 -v -0.0625 0.43125 -0.4375 -v -0.4375 1.125 2.25 -v -0.4375 1.125 1.875 -v -0.4375 0.4375 2.25 -v -0.4375 0.4375 1.875 -v -0.5 1.125 2.25 -v -0.5 1.125 1.875 -v -0.5 0.4375 2.25 -v -0.5 0.4375 1.875 -v -0.4375 0.75 1.875 -v -0.4375 0.75 2.25 -v -0.5 0.75 2.25 -v -0.5 0.75 1.875 -v -0.4375 0.75 2.0625 -v -0.4375 1.125 2.0625 -v -0.5 1.125 2.0625 -v -0.4375 0.4375 2.0625 -v 0.4375 1.125 2.25 -v 0.4375 1.125 1.875 -v 0.4375 0.4375 2.25 -v 0.4375 0.4375 1.875 -v 0.5 1.125 2.25 -v 0.5 1.125 1.875 -v 0.5 0.4375 2.25 -v 0.5 0.4375 1.875 -v 0.4375 0.75 1.875 -v 0.4375 0.75 2.25 -v 0.5 0.75 2.25 -v 0.5 0.75 1.875 -v 0.4375 0.75 2.0625 -v 0.4375 1.125 2.0625 -v 0.5 1.125 2.0625 -v 0.4375 0.4375 2.0625 -v 0.25 0.6875 2.15625 -v 0.25 0.6875 1.90625 -v 0.25 0.4375 2.15625 -v 0.25 0.4375 1.90625 -v -0.25 0.6875 2.15625 -v -0.25 0.6875 1.90625 -v -0.25 0.4375 2.15625 -v -0.25 0.4375 1.90625 -v 0.25 0.5625 2.15625 -v -0.25 0.5625 2.15625 -v -0.25 0.5625 1.90625 -v 0.25 0.5625 1.90625 -v 0 0.5625 2.15625 -v 0 0.4375 2.15625 -v 0 0.6875 2.15625 -v -0.3125 1.375 1.8125 -v -0.5 1.375 1.8125 -v -0.3125 1.1875 1.8125 -v -0.5 1.1875 1.8125 -v -0.3125 1.375 1.875 -v -0.5 1.375 1.875 -v -0.3125 1.1875 1.875 -v -0.5 1.1875 1.875 -v 0.375 0.625 0.5625 -v 0.375 0.625 0.125 -v 0.375 0.4375 0.5625 -v 0.375 0.4375 0.125 -v -0.375 0.625 0.5625 -v -0.375 0.625 0.125 -v -0.375 0.4375 0.5625 -v -0.375 0.4375 0.125 -v 0 0.625 0.125 -v 0 0.4375 0.125 -v 0.375 0.625 0.375 -v 0.375 0.4375 0.375 -v -0.375 0.4375 0.375 -v -0.375 0.625 0.375 -v 0 0.5 0.125 -v 0.375 0.5 0.125 -v 0.375 0.5 0.375 -v 0.375 0.5 0.5625 -v -0.375 0.5 0.5625 -v -0.375 0.5 0.375 -v -0.375 0.5 0.125 -v -0.0625 0.5625 -0.1875 -v -0.0625 0.5625 -0.3125 -v -0.0625 0.4375 -0.1875 -v -0.0625 0.4375 -0.3125 -v -0.125 0.5625 -0.1875 -v -0.125 0.5625 -0.3125 -v -0.125 0.4375 -0.1875 -v -0.125 0.4375 -0.3125 -v -0.1875 0.5625 -0.1875 -v -0.1875 0.5625 -0.3125 -v -0.1875 0.4375 -0.1875 -v -0.1875 0.4375 -0.3125 -v -0.25 0.5625 -0.1875 -v -0.25 0.5625 -0.3125 -v -0.25 0.4375 -0.1875 -v -0.25 0.4375 -0.3125 -v -0.3125 0.5625 0.125 -v -0.3125 0.5625 0 -v -0.3125 0.4375 0.125 -v -0.3125 0.4375 0 -v -0.375 0.5625 0.125 -v -0.375 0.5625 0 -v -0.375 0.4375 0 -v -0.4375 0.5625 0.125 -v -0.4375 0.5625 0 -v -0.4375 0.4375 0.125 -v -0.4375 0.4375 0 -v -0.5 0.5625 0.125 -v -0.5 0.5625 0 -v -0.5 0.4375 0.125 -v -0.5 0.4375 0 -v -0.375 0.53125 0.09375 -v -0.375 0.53125 -0.09375 -v -0.375 0.46875 0.09375 -v -0.375 0.46875 -0.09375 -v -0.4375 0.53125 0.09375 -v -0.4375 0.53125 -0.09375 -v -0.4375 0.46875 0.09375 -v -0.4375 0.46875 -0.09375 -v -0.35624999999999996 0.5499999999999999 -0.09375 -v -0.35624999999999996 0.5499999999999999 -0.28125 -v -0.35624999999999996 0.44999999999999996 -0.09375 -v -0.35624999999999996 0.44999999999999996 -0.28125 -v -0.45625000000000004 0.5499999999999999 -0.09375 -v -0.45625000000000004 0.5499999999999999 -0.28125 -v -0.45625000000000004 0.44999999999999996 -0.09375 -v -0.45625000000000004 0.44999999999999996 -0.28125 -v 0.5625 1.4375 1.75 -v 0.5625 0.4375 1.8125 -v 0.5625 0.4375 1.75 -v -0.5625 0.4375 1.8125 -v -0.5625 0.4375 1.75 -v 0.5625 1.1875 1.8125 -v -0.5625 1.1875 1.8125 -v -0.5625 1.1875 1.75 -v 0.5625 1.1875 1.75 -v 0 1.1875 1.8125 -v 0 0.4375 1.8125 -v 0 0.4375 1.75 -v 0 1.1875 1.75 -v 0 1.4375 1.75 -v 0 1.4375 1.8125 -v 0.5625 1.25 0.5625 -v 0.5625 1.25 0.6875 -v 0.5625 0.4375 0.6875 -v 0.5625 1.1875 0.5625 -v 0.5625 1.1875 0.6875 -v -0.5 0.4375 0.5625 -v 0.5625 1.4375 0.6875 -v -0.5625 1.3125 0.5625 -v -0.5625 1.25 0.6875 -v -0.5625 1.25 0.5625 -v 0 1.3125 0.5625 -v 0 1.4375 0.6875 -v 0 1.25 0.6875 -v 0 1.25 0.5625 -v 0.5 1.4375 0.6875 -v 0.5 1.4375 1.75 -v 0.5 0.4375 1.75 -v 0.5 0.9375 1.75 -v 0.5 0.9375 0.6875 -v 0.5625 0.9375 0.6875 -v 0.5625 0.9375 1.75 -v 0.5 0.9375 1.25 -v 0.5 0.4375 1.25 -v 0.5625 0.4375 1.25 -v 0.5625 0.9375 1.25 -v 0.5 1.4375 1.25 -v 0.5 1.25 0.5625 -v -0.5 1.25 0.5625 -v 0.5625 1.25 2.3125 -v 0.5625 1.25 1.8125 -v 0.5 1.25 2.3125 -v 0.5 1.25 1.8125 -v 0.5 0.4375 2.4375 -v 0.5 0.4375 1.8125 -v -0.5 1.3125 0.5625 -v -0.5 1.3125 -0.4375 -v -0.5 0.4375 -0.4375 -v -0.5625 1.3125 -0.4375 -v -0.5625 0.4375 0.5625 -v -0.5625 0.4375 0.6875 -v -0.5625 1.1875 0.6875 -v -0.5625 1.1875 0.5625 -v -0.5 1.4375 1.75 -v -0.5 1.4375 0.6875 -v -0.5 0.4375 1.75 -v -0.5 0.9375 0.6875 -v -0.5 0.9375 1.75 -v -0.5625 0.9375 1.75 -v -0.5625 0.9375 0.6875 -v -0.5 0.9375 1.1875 -v -0.5 0.4375 1.1875 -v -0.5625 0.4375 1.1875 -v -0.5625 0.9375 1.1875 -v -0.5625 1.4375 1.1875 -v -0.5 1.4375 1.1875 -v -0.5 1.25 2.3125 -v -0.5 1.25 1.8125 -v -0.5 0.4375 2.4375 -v -0.5 0.4375 1.8125 -v -0.5625 1.25 2.3125 -v -0.5625 1.25 1.8125 -v 0.5 0.6875 0.75 -v 0.5 0.6875 0.6875 -v 0.5 0.4375 0.75 -v 0.25 0.6875 0.75 -v 0.25 0.6875 0.6875 -v 0.25 0.4375 0.75 -v 0.25 0.4375 0.6875 -v 0.5 0.6875 1.6875 -v 0.5 0.6875 1.75 -v 0.5 0.4375 1.6875 -v 0.25 0.6875 1.6875 -v 0.25 0.6875 1.75 -v 0.25 0.4375 1.6875 -v 0.5 0.875 0.5625 -v 0.5 0.875 -0.4375 -v -0.5 0.875 -0.4375 -v -0.5 0.875 0.5625 -v 0.5 0.75 0.5625 -v 0.5 0.75 0.125 -v 0.5 0.625 0.5625 -v 0.5 0.625 0.125 -v -0.5 0.75 0.5625 -v -0.5 0.75 0.125 -v -0.5 0.625 0.5625 -v -0.5 0.625 0.125 -v 0.5625 1.3125 -0.5625 -v 0.5625 0.3125 -0.5625 -v -0.5625 1.3125 -0.5625 -v -0.5625 0.3125 -0.5625 -v -0.5625 0.8125 -0.5625 -v 0.5625 0.8125 -0.5625 -v 0.5625 0.8125 -0.4375 -v -0.5625 0.8125 -0.4375 -v 0 0.8125 -0.5625 -v 0 0.3125 -0.5625 -v 0 0.8125 -0.4375 -v 0 1.3125 -0.4375 -v 0 1.3125 -0.5625 -v -0.8125 1.125 -0.75 -v -1.0625 1.375 -0.5 -v -1.0625 1.1875 -0.75 -v -1.0625 1.3125 -0.5 -v -1.0625 1.125 -0.75 -v -0.5625 1.375 -0.5 -v -0.5625 1.1875 -0.75 -v -0.5625 1.3125 -0.5 -v -0.5625 1.125 -0.75 -v -0.8125 1.1875 -0.75 -v -0.8125 1.375 -0.5 -v -0.8125 1.3125 -0.5 -v -0.5625 1.3125 0.625 -v -0.8125 1.375 0.625 -v -0.8125 1.3125 0.625 -v -0.5625 1.35311625 2.302931875 -v -0.5625 1.154889375 2.544515 -v -0.5625 1.290675625 2.3002056250000003 -v -0.5625 1.09244875 2.541789375 -v -1.0625 1.35311625 2.302931875 -v -1.0625 1.154889375 2.544515 -v -1.0625 1.290675625 2.3002056250000003 -v -1.0625 1.09244875 2.541789375 -v -0.8125 1.154889375 2.544515 -v -0.8125 1.35311625 2.302931875 -v -0.8125 1.290675625 2.3002056250000003 -v -0.8125 1.09244875 2.541789375 -v -1.0625 1.312485 1.80068125 -v -1.0625 1.374925625 1.8034075 -v -0.5625 1.312485 1.80068125 -v -0.5625 1.374925625 1.8034075 -v -0.8125 1.312485 1.80068125 -v -0.8125 1.374925625 1.8034075 -v 0.8125 1.125 -0.75 -v 1.0625 1.375 -0.5 -v 1.0625 1.1875 -0.75 -v 1.0625 1.3125 -0.5 -v 1.0625 1.125 -0.75 -v 0.5625 1.375 -0.5 -v 0.5625 1.1875 -0.75 -v 0.5625 1.3125 -0.5 -v 0.5625 1.125 -0.75 -v 0.8125 1.1875 -0.75 -v 0.8125 1.375 -0.5 -v 0.8125 1.3125 -0.5 -v 0.5625 1.3125 0.625 -v 0.8125 1.375 0.625 -v 0.8125 1.3125 0.625 -v 0.5625 1.35311625 2.302931875 -v 0.5625 1.154889375 2.544515 -v 0.5625 1.290675625 2.3002056250000003 -v 0.5625 1.09244875 2.541789375 -v 1.0625 1.35311625 2.302931875 -v 1.0625 1.154889375 2.544515 -v 1.0625 1.290675625 2.3002056250000003 -v 1.0625 1.09244875 2.541789375 -v 0.8125 1.154889375 2.544515 -v 0.8125 1.35311625 2.302931875 -v 0.8125 1.290675625 2.3002056250000003 -v 0.8125 1.09244875 2.541789375 -v 1.0625 1.312485 1.80068125 -v 1.0625 1.374925625 1.8034075 -v 0.5625 1.312485 1.80068125 -v 0.5625 1.374925625 1.8034075 -v 0.8125 1.312485 1.80068125 -v 0.8125 1.374925625 1.8034075 -v 1.0635181249999999 1.424135 0.875 -v 1.0635181249999999 1.424135 0.75 -v 1.052665 1.362584375 0.875 -v 1.052665 1.362584375 0.75 -v 0.6326643750000001 1.50010625 0.875 -v 0.6326643750000001 1.50010625 0.75 -v 0.62181125 1.438555625 0.875 -v 0.62181125 1.438555625 0.75 -v 1.0635181249999999 1.424135 1.6875 -v 1.0635181249999999 1.424135 1.5625 -v 1.052665 1.362584375 1.6875 -v 1.052665 1.362584375 1.5625 -v 0.6326643750000001 1.50010625 1.6875 -v 0.6326643750000001 1.50010625 1.5625 -v 0.62181125 1.438555625 1.6875 -v 0.62181125 1.438555625 1.5625 -v 1.13592125 1.474831875 1.8125 -v 1.13592125 1.474831875 0.625 -v 1.1250681249999999 1.413281875 1.8125 -v 1.1250681249999999 1.413281875 0.625 -v 0.581966875 1.572509375 1.8125 -v 0.581966875 1.572509375 0.625 -v 0.57111375 1.51095875 1.8125 -v 0.57111375 1.51095875 0.625 -v 0.5 0.75 1.8125 -v 0.5 0.75 2.1875 -v 0.5 0.625 1.8125 -v 0.5 0.625 2.1875 -v -0.5 0.75 1.8125 -v -0.5 0.75 2.1875 -v -0.5 0.625 1.8125 -v -0.5 0.625 2.1875 -v 0.275 1.246025 -0.43169187500000006 -v 0.275 0.9382725 -0.37742687500000005 -v 0.275 1.2547074999999999 -0.3824518749999999 -v 0.275 0.946955 -0.3281868749999999 -v -0.03749999999999998 1.246025 -0.43169187500000006 -v -0.03749999999999998 0.9382725 -0.37742687500000005 -v -0.03749999999999998 1.2547074999999999 -0.3824518749999999 -v -0.03749999999999998 0.946955 -0.3281868749999999 -v -0.09999999999999998 1.246025 -0.43169187500000006 -v -0.09999999999999998 0.9382725 -0.37742687500000005 -v -0.09999999999999998 1.2547074999999999 -0.3824518749999999 -v -0.09999999999999998 0.946955 -0.3281868749999999 -v -0.4125000000000001 1.246025 -0.43169187500000006 -v -0.4125000000000001 0.9382725 -0.37742687500000005 -v -0.4125000000000001 1.2547074999999999 -0.3824518749999999 -v -0.4125000000000001 0.946955 -0.3281868749999999 -vt 0.1875 0.390625 -vt 0.1875 0.484375 -vt 0.09375 0.484375 -vt 0.09375 0.390625 -vt 0.109375 0.484375 -vt 0.109375 0.390625 -vt 0.09375 0.390625 -vt 0.09375 0.484375 -vt 0.1875 0.390625 -vt 0.1875 0.484375 -vt 0.171875 0.484375 -vt 0.171875 0.390625 -vt 0.109375 0.390625 -vt 0.109375 0.484375 -vt 0.09375 0.484375 -vt 0.09375 0.390625 -vt 0.1875 0.390625 -vt 0.1875 0.484375 -vt 0.171875 0.484375 -vt 0.171875 0.390625 -vt 0.09375 0.390625 -vt 0.09375 0.484375 -vt 0.1875 0.484375 -vt 0.1875 0.390625 -vt 0.109375 0.484375 -vt 0.109375 0.390625 -vt 0.09375 0.390625 -vt 0.09375 0.484375 -vt 0.1875 0.390625 -vt 0.1875 0.484375 -vt 0.171875 0.484375 -vt 0.171875 0.390625 -vt 0.109375 0.390625 -vt 0.109375 0.484375 -vt 0.09375 0.484375 -vt 0.09375 0.390625 -vt 0.1875 0.390625 -vt 0.1875 0.484375 -vt 0.171875 0.484375 -vt 0.171875 0.390625 -vt 0.1875 0.390625 -vt 0.1875 0.484375 -vt 0.09375 0.484375 -vt 0.09375 0.390625 -vt 0.109375 0.484375 -vt 0.109375 0.390625 -vt 0.09375 0.390625 -vt 0.09375 0.484375 -vt 0.1875 0.390625 -vt 0.1875 0.484375 -vt 0.171875 0.484375 -vt 0.171875 0.390625 -vt 0.109375 0.390625 -vt 0.109375 0.484375 -vt 0.09375 0.484375 -vt 0.09375 0.390625 -vt 0.1875 0.390625 -vt 0.1875 0.484375 -vt 0.171875 0.484375 -vt 0.171875 0.390625 -vt 0.75 0.96875 -vt 0.921875 0.96875 -vt 0.921875 1 -vt 0.75 1 -vt 0.75 0.828125 -vt 0.8125 0.828125 -vt 0.8125 1 -vt 0.75 1 -vt 0.75 0.25 -vt 0.8125 0.25 -vt 0.8125 0.421875 -vt 0.75 0.421875 -vt 0.75 0.96875 -vt 0.8125 0.96875 -vt 0.8125 1 -vt 0.75 1 -vt 1 1 -vt 0.9375 1 -vt 0.9375 0.96875 -vt 1 0.96875 -vt 0.75 0.25 -vt 0.921875 0.25 -vt 0.921875 0.265625 -vt 0.75 0.265625 -vt 0.953125 0.265625 -vt 0.890625 0.265625 -vt 0.890625 0.25 -vt 0.953125 0.25 -vt 0.765625 0.25 -vt 0.828125 0.25 -vt 0.828125 0.265625 -vt 0.765625 0.265625 -vt 1 0.265625 -vt 0.828125 0.265625 -vt 0.828125 0.25 -vt 1 0.25 -vt 0.75 0.828125 -vt 0.8125 0.828125 -vt 0.8125 1 -vt 0.75 1 -vt 0.75 0.25 -vt 0.8125 0.25 -vt 0.8125 0.421875 -vt 0.75 0.421875 -vt 1 1 -vt 0.828125 1 -vt 0.828125 0.96875 -vt 1 0.96875 -vt 1 0.421875 -vt 0.953125 0.421875 -vt 0.953125 0.25 -vt 1 0.25 -vt 1 1 -vt 0.953125 1 -vt 0.953125 0.96875 -vt 1 0.96875 -vt 1 0.265625 -vt 0.953125 0.265625 -vt 0.953125 0.25 -vt 1 0.25 +f 449/1169/293 447/1170/293 446/1171/293 448/1172/293 +f 452/1173/294 450/1174/294 451/1175/294 453/1176/294 +f 446/1177/295 447/1178/295 451/1179/295 450/1180/295 +f 449/1181/296 448/1182/296 452/1183/296 453/1184/296 +f 448/1185/297 446/1186/297 450/1187/297 452/1188/297 +f 453/1189/298 451/1190/298 447/1191/298 449/1192/298 +o radio +v 0.3156 1.4375 0.9344 +v 0.3156 1.6875 0.9344 +v 0.0031 1.4375 0.9357 +v 0.0031 1.6875 0.9357 +v 0.3178 1.4375 1.4344 +v 0.3178 1.6875 1.4344 +v 0.0053 1.4375 1.4357 +v 0.0053 1.6875 1.4357 +v 0.1607 1.6875 1.2476 +v 0.1607 1.75 1.2476 +v -0.0268 1.6875 1.2484 +v -0.0268 1.75 1.2484 +v 0.1613 1.6875 1.3726 +v 0.1613 1.75 1.3726 +v -0.0262 1.6875 1.3734 +v -0.0262 1.75 1.3734 +v 0.0032 1.4375 0.9514 +v 0.0032 1.6719 0.9514 +v -0.0593 1.4375 0.9516 +v -0.0593 1.6719 0.9516 +v 0.0052 1.4375 1.4201 +v 0.0052 1.6719 1.4201 +v -0.0573 1.4375 1.4204 +v -0.0573 1.6719 1.4204 +v -0.0594 1.4375 0.936 +v -0.0594 1.6875 0.936 +v -0.3094 1.4375 0.9371 +v -0.3094 1.6875 0.9371 +v -0.0572 1.4375 1.436 +v -0.0572 1.6875 1.436 +v -0.3072 1.4375 1.4371 +v -0.3072 1.6875 1.4371 +v 0.1596 1.6875 0.9976 +v 0.1596 1.75 0.9976 +v -0.0278 1.6875 0.9984 +v -0.0278 1.75 0.9984 +v 0.1602 1.6875 1.1226 +v 0.1602 1.75 1.1226 +v -0.0273 1.6875 1.1234 +v -0.0273 1.75 1.1234 +v 0.2484 1.6552 1.4327 +v 0.0609 1.6552 1.4327 +v 0.2484 1.4677 1.4311 +v 0.0609 1.4677 1.4311 +v 0.2484 1.6546 1.4952 +v 0.0609 1.6546 1.4952 +v 0.2484 1.4672 1.4936 +v 0.0609 1.4672 1.4936 +v 0.2172 1.7174 1.4645 +v 0.0922 1.7174 1.4645 +v 0.2172 1.4049 1.4618 +v 0.0922 1.4049 1.4618 +v 0.2172 1.7163 1.5895 +v 0.0922 1.7163 1.5895 +v 0.2172 1.4038 1.5868 +v 0.0922 1.4038 1.5868 +v 0.1859 2.7171 1.5045 +v 0.1234 2.7171 1.5045 +v 0.1859 1.7171 1.4958 +v 0.1234 1.7171 1.4958 +v 0.1859 2.7166 1.567 +v 0.1234 2.7166 1.567 +v 0.1859 1.7166 1.5583 +v 0.1234 1.7166 1.5583 +vt 0.375 0.1875 +vt 0.375 0.5 +vt 0.125 0.5 +vt 0.125 0.1875 +vt 0.375 0.1875 +vt 0.375 0.5 +vt 0.125 0.5 +vt 0.125 0.1875 +vt 1 0.5 +vt 0.75 0.5 +vt 0.75 0 +vt 1 0 +vt 1 0.5 +vt 0.75 0.5 +vt 0.75 0 +vt 1 0 vt 1 1 -vt 0.953125 1 -vt 0.953125 0.828125 -vt 1 0.828125 -vt 1 0.421875 -vt 0.953125 0.421875 -vt 0.953125 0.25 -vt 1 0.25 -vt 0.828125 0.25 -vt 0.875 0.25 -vt 0.875 0.265625 -vt 0.828125 0.265625 -vt 0.75 0.96875 -vt 0.796875 0.96875 -vt 0.796875 1 -vt 0.75 1 +vt 0.6875 1 +vt 0.6875 0.5 +vt 1 0.5 vt 1 1 -vt 0.953125 1 -vt 0.953125 0.828125 -vt 1 0.828125 -vt 0.828125 0.140625 -vt 0.828125 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.828125 0.140625 -vt 0.828125 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.109375 1 -vt 0.109375 0.84375 -vt 0.015625 0.84375 -vt 0.015625 1 -vt 0.109375 0.40625 -vt 0.109375 0.25 -vt 0.015625 0.25 -vt 0.015625 0.40625 -vt 0.09375 1 -vt 0.09375 0.984375 -vt 0 0.984375 -vt 0 1 -vt 0.03125 0.984375 -vt 0.03125 1 -vt 0.125 1 -vt 0.125 0.984375 -vt 0.109375 0.390625 -vt 0.109375 0.25 -vt 0.015625 0.25 -vt 0.015625 0.390625 -vt 0.109375 1 -vt 0.109375 0.859375 -vt 0.015625 0.859375 -vt 0.015625 1 -vt 0.703125 0.25 -vt 0.703125 0.390625 -vt 0.734375 0.390625 -vt 0.734375 0.25 -vt 0.078125 0.984375 -vt 0.078125 1 -vt 0.109375 1 -vt 0.109375 0.984375 -vt 0.71875 0.859375 -vt 0.71875 1 -vt 0.75 1 -vt 0.75 0.859375 -vt 0.71875 0.25 -vt 0.71875 0.40625 -vt 0.75 0.40625 -vt 0.75 0.25 -vt 0.03125 1 -vt 0.03125 0.984375 -vt 0 0.984375 -vt 0 1 -vt 0.703125 0.84375 -vt 0.703125 1 -vt 0.734375 1 -vt 0.734375 0.84375 -vt 0.03125 0.75 +vt 0.6875 1 +vt 0.6875 0.5 +vt 1 0.5 +vt 0.8125 0.3125 +vt 0.8125 0.5 +vt 0.75 0.5 +vt 0.75 0.3125 +vt 0.875 0.3125 +vt 0.875 0.5 +vt 0.8125 0.5 +vt 0.8125 0.3125 +vt 0.75 0.4375 +vt 0.75 0.5 +vt 0.875 0.5 +vt 0.875 0.4375 +vt 0.75 0.3125 +vt 0.75 0.375 +vt 0.875 0.375 +vt 0.875 0.3125 +vt 0.875 0.3125 +vt 0.875 0.5 +vt 0.75 0.5 +vt 0.75 0.3125 +vt 0.1875 0.625 +vt 0.1875 0.6875 +vt 0 0.6875 +vt 0 0.625 +vt 0.375 0.625 +vt 0.375 0.6875 +vt 0.1875 0.6875 +vt 0.1875 0.625 +vt 0.4375 0.6875 +vt 0.4375 0.75 vt 0 0.75 -vt 0 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.59375 -vt 0 0.59375 -vt 0 0.5625 -vt 0.03125 0.5625 -vt 0.03125 0.71875 -vt 0 0.71875 -vt 0 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.75 -vt 0 0.75 -vt 0 0.5625 -vt 0.03125 0.5625 -vt 0.03125 0.75 -vt 0 0.71875 -vt 0 0.59375 -vt 0.03125 0.5625 -vt 0 0.5625 -vt 0.03125 0.59375 -vt 0.03125 0.71875 -vt 0 0.75 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.03125 0.75 -vt 0 0.75 -vt 0 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.59375 -vt 0 0.59375 -vt 0 0.5625 -vt 0.03125 0.5625 -vt 0.03125 0.71875 -vt 0 0.71875 -vt 0 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.75 -vt 0 0.75 -vt 0 0.5625 -vt 0.03125 0.5625 -vt 0.03125 0.75 -vt 0 0.71875 -vt 0 0.59375 -vt 0.03125 0.5625 +vt 0 0.6875 +vt 0.4375 0.5625 +vt 0.4375 0.625 +vt 0 0.625 vt 0 0.5625 -vt 0.03125 0.59375 -vt 0.03125 0.71875 +vt 0.25 0.75 +vt 0.25 1 +vt 0 1 vt 0 0.75 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.75 0.96875 -vt 0.921875 0.96875 -vt 0.921875 1 -vt 0.75 1 -vt 0.75 0.828125 -vt 0.8125 0.828125 -vt 0.8125 1 -vt 0.75 1 -vt 0.75 0.25 -vt 0.8125 0.25 -vt 0.8125 0.421875 -vt 0.75 0.421875 -vt 0.75 0.96875 -vt 0.8125 0.96875 -vt 0.8125 1 -vt 0.75 1 +vt 1 0.75 vt 1 1 -vt 0.9375 1 -vt 0.9375 0.96875 -vt 1 0.96875 -vt 0.75 0.25 -vt 0.921875 0.25 -vt 0.921875 0.265625 -vt 0.75 0.265625 -vt 0.953125 0.265625 -vt 0.890625 0.265625 -vt 0.890625 0.25 -vt 0.953125 0.25 -vt 0.765625 0.25 -vt 0.828125 0.25 -vt 0.828125 0.265625 -vt 0.765625 0.265625 -vt 1 0.265625 -vt 0.828125 0.265625 -vt 0.828125 0.25 -vt 1 0.25 -vt 0.75 0.828125 -vt 0.8125 0.828125 -vt 0.8125 1 vt 0.75 1 -vt 0.75 0.25 -vt 0.8125 0.25 -vt 0.8125 0.421875 -vt 0.75 0.421875 -vt 1 1 -vt 0.828125 1 -vt 0.828125 0.96875 -vt 1 0.96875 -vt 1 0.421875 -vt 0.953125 0.421875 -vt 0.953125 0.25 -vt 1 0.25 -vt 1 1 -vt 0.953125 1 -vt 0.953125 0.96875 -vt 1 0.96875 -vt 1 0.265625 -vt 0.953125 0.265625 -vt 0.953125 0.25 -vt 1 0.25 -vt 1 1 -vt 0.953125 1 -vt 0.953125 0.828125 -vt 1 0.828125 -vt 1 0.421875 -vt 0.953125 0.421875 -vt 0.953125 0.25 -vt 1 0.25 -vt 0.828125 0.25 -vt 0.875 0.25 -vt 0.875 0.265625 -vt 0.828125 0.265625 -vt 0.75 0.96875 -vt 0.796875 0.96875 -vt 0.796875 1 +vt 0.75 0.75 +vt 0.75 0.75 vt 0.75 1 -vt 1 1 -vt 0.953125 1 -vt 0.953125 0.828125 -vt 1 0.828125 -vt 0.828125 0.140625 -vt 0.828125 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.09375 0.390625 -vt 0.09375 0.484375 -vt 0.1875 0.484375 -vt 0.1875 0.390625 -vt 0.109375 0.484375 -vt 0.109375 0.390625 -vt 0.09375 0.390625 -vt 0.09375 0.484375 -vt 0.1875 0.390625 -vt 0.1875 0.484375 -vt 0.171875 0.484375 -vt 0.171875 0.390625 -vt 0.109375 0.390625 -vt 0.109375 0.484375 -vt 0.09375 0.484375 -vt 0.09375 0.390625 -vt 0.1875 0.390625 -vt 0.1875 0.484375 -vt 0.171875 0.484375 -vt 0.171875 0.390625 -vt 0.015625 0.84375 -vt 0.109375 0.84375 -vt 0.109375 1 -vt 0.015625 1 -vt 0.015625 0.25 -vt 0.109375 0.25 -vt 0.109375 0.40625 -vt 0.015625 0.40625 -vt 0 0.984375 -vt 0.09375 0.984375 -vt 0.09375 1 -vt 0 1 -vt 0.125 1 -vt 0.03125 1 -vt 0.03125 0.984375 -vt 0.125 0.984375 -vt 0.015625 0.25 -vt 0.109375 0.25 -vt 0.109375 0.390625 -vt 0.015625 0.390625 -vt 0.015625 0.859375 -vt 0.109375 0.859375 -vt 0.109375 1 -vt 0.015625 1 -vt 0.734375 0.390625 -vt 0.703125 0.390625 -vt 0.703125 0.25 -vt 0.734375 0.25 -vt 0.109375 1 -vt 0.078125 1 -vt 0.078125 0.984375 -vt 0.109375 0.984375 +vt 0.25 1 +vt 0.25 0.75 +vt 1 0.5 +vt 1 0.75 +vt 0.5 0.75 +vt 0.5 0.5 +vt 0.75 0.75 vt 0.75 1 -vt 0.71875 1 -vt 0.71875 0.859375 -vt 0.75 0.859375 -vt 0.75 0.40625 -vt 0.71875 0.40625 -vt 0.71875 0.25 -vt 0.75 0.25 -vt 0 0.984375 -vt 0.03125 0.984375 -vt 0.03125 1 -vt 0 1 -vt 0.734375 1 -vt 0.703125 1 -vt 0.703125 0.84375 -vt 0.734375 0.84375 -vt 0.03125 0.75 -vt 0 0.75 -vt 0 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.59375 -vt 0 0.59375 -vt 0 0.5625 -vt 0.03125 0.5625 -vt 0.03125 0.71875 -vt 0 0.71875 -vt 0 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.75 -vt 0 0.75 -vt 0 0.5625 -vt 0.03125 0.5625 -vt 0.03125 0.75 -vt 0 0.71875 -vt 0 0.59375 -vt 0.03125 0.5625 -vt 0 0.5625 -vt 0.03125 0.59375 -vt 0.03125 0.71875 -vt 0 0.75 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.03125 0.75 -vt 0 0.75 -vt 0 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.59375 -vt 0 0.59375 -vt 0 0.5625 -vt 0.03125 0.5625 -vt 0.03125 0.71875 -vt 0 0.71875 -vt 0 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.75 -vt 0 0.75 -vt 0 0.5625 -vt 0.03125 0.5625 -vt 0.03125 0.75 -vt 0 0.71875 -vt 0 0.59375 -vt 0.03125 0.5625 -vt 0 0.5625 -vt 0.03125 0.59375 -vt 0.03125 0.71875 -vt 0 0.75 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.71875 -vt 0.03125 0.71875 -vt 0.03125 0.6875 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.59375 -vt 0.03125 0.59375 -vt 0.03125 0.5625 -vt 0.828125 0.140625 -vt 0.828125 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 0.921875 0.140625 -vt 0.921875 0.15625 -vt 0.8125 0.15625 -vt 0.8125 0.140625 -vt 1 0.53125 -vt 1 0.65625 -vt 0.625 0.65625 -vt 0.625 0.53125 -vt 1 0.5625 -vt 1 1 -vt 0.625 1 -vt 0.625 0.5625 -vt 0.65625 0.5625 -vt 0.65625 1 -vt 0.53125 1 -vt 0.53125 0.5625 -vt 0.96875 0.0625 -vt 0.96875 0.09375 -vt 0.71875 0.09375 -vt 0.71875 0.0625 -vt 0.71875 0.09375 -vt 0.71875 0.0625 -vt 0.96875 0.0625 -vt 0.96875 0.09375 -vt 0.96875 0.0625 -vt 0.96875 0.28125 -vt 0.71875 0.28125 -vt 0.71875 0.0625 -vt 0.96875 0.0625 -vt 0.96875 0.125 -vt 0.71875 0.125 -vt 0.71875 0.0625 -vt 0.71875 0.28125 -vt 0.71875 0.21875 -vt 0.96875 0.21875 -vt 0.96875 0.28125 -vt 0.046875 0.515625 -vt 0.046875 0.578125 -vt 0.03125 0.578125 -vt 0.03125 0.515625 -vt 0.09375 0.515625 -vt 0.09375 0.578125 -vt 0.078125 0.578125 -vt 0.078125 0.515625 -vt 0.03125 0.5625 -vt 0.03125 0.578125 -vt 0.09375 0.578125 -vt 0.09375 0.5625 -vt 0.03125 0.515625 -vt 0.03125 0.53125 -vt 0.09375 0.53125 -vt 0.09375 0.515625 -vt 0.09375 0.515625 -vt 0.09375 0.578125 -vt 0.03125 0.578125 -vt 0.03125 0.515625 -vt 0.78125 0.0625 -vt 0.875 0.0625 -vt 0.875 0.28125 -vt 0.78125 0.28125 -vt 0.8125 0.0625 -vt 0.90625 0.0625 -vt 0.90625 0.28125 -vt 0.8125 0.28125 -vt 0.65625 0.25 -vt 0.65625 0.3125 -vt 0.59375 0.3125 -vt 0.59375 0.25 -vt 0.65625 0.28125 -vt 0.59375 0.28125 -vt 0.59375 0.3125 -vt 0.65625 0.3125 -vt 0.90625 0.4375 -vt 0.90625 0.5 -vt 0.96875 0.5 -vt 0.96875 0.4375 -vt 0.59375 0.28125 -vt 0.59375 0.34375 -vt 0.65625 0.34375 -vt 0.65625 0.28125 -vt 0.4375 0.5 -vt 0.4375 0.6875 -vt 0.34375 0.6875 -vt 0.34375 0.5 -vt 0.4375 0.5 -vt 0.4375 0.6875 -vt 0.34375 0.6875 -vt 0.34375 0.5 -vt 0.34375 0.65625 -vt 0.34375 0.75 -vt 0.4375 0.75 -vt 0.4375 0.65625 -vt 0.34375 0.65625 -vt 0.34375 0.75 +vt 0.25 1 vt 0.25 0.75 -vt 0.25 0.65625 -vt 0.34375 0.5 -vt 0.34375 0.6875 -vt 0.4375 0.6875 -vt 0.4375 0.5 -vt 0.34375 0.5 -vt 0.34375 0.6875 -vt 0.4375 0.6875 -vt 0.4375 0.5 -vt 0.15625 0.875 -vt 0.09375 0.875 -vt 0.09375 0.65625 -vt 0.15625 0.65625 -vt 0.09375 0.65625 -vt 0.15625 0.65625 -vt 0.15625 0.875 -vt 0.09375 0.875 -vt 0.09375 0.65625 -vt 0.09375 0.875 -vt 0.15625 0.875 -vt 0.15625 0.65625 -vt 0.15625 0.875 -vt 0.15625 0.65625 -vt 0.09375 0.65625 -vt 0.09375 0.875 -vt 0.09375 0.875 -vt 0.15625 0.875 -vt 0.15625 0.9375 -vt 0.09375 0.9375 -vt 0.1875 0.8125 -vt 0.1875 0.875 -vt 0.25 0.875 -vt 0.25 0.8125 -vt 0.21875 0.90625 -vt 0.21875 0.84375 -vt 0.28125 0.84375 -vt 0.28125 0.90625 -vt 0 0.90625 -vt 0.0625 0.90625 -vt 0.0625 0.9375 -vt 0 0.9375 -vt 0.015625 1 -vt 0.015625 0.890625 -vt 0.265625 0.890625 -vt 0.265625 1 -vt 0.28125 0.03125 -vt 0.28125 0.25 -vt 0.53125 0.25 -vt 0.53125 0.03125 -vt 0 1 -vt 0 0.75 -vt 0.015625 0.75 -vt 0.015625 1 -vt 0.53125 0.3125 -vt 0.53125 0.53125 -vt 0.59375 0.53125 -vt 0.59375 0.3125 -vt 0.53125 0.3125 -vt 0.53125 0.53125 -vt 0.59375 0.53125 -vt 0.59375 0.3125 -vt 0.65625 0.34375 -vt 0.65625 0.40625 -vt 0.59375 0.40625 -vt 0.59375 0.34375 -vt 0.59375 0.3125 -vt 0.59375 0.53125 -vt 0.53125 0.53125 -vt 0.53125 0.3125 -vt 0.59375 0.3125 -vt 0.59375 0.53125 -vt 0.53125 0.53125 -vt 0.53125 0.3125 -vt 0.59375 0.46875 -vt 0.59375 0.40625 -vt 0.75 0.40625 -vt 0.71875 0.46875 -vt 0.71875 0.46875 -vt 0.75 0.53125 -vt 0.59375 0.53125 -vt 0.59375 0.46875 -vt 0.53125 0.34375 -vt 0.53125 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.34375 -vt 0.59375 0.1875 -vt 0.59375 0.3125 -vt 0.53125 0.3125 -vt 0.53125 0.1875 -vt 0.59375 0.34375 -vt 0.59375 0.40625 -vt 0.53125 0.40625 -vt 0.53125 0.34375 -vt 1 0 -vt 0.640625 0 -vt 0.640625 0.03125 -vt 1 0.03125 -vt 1 0.03125 -vt 0.640625 0.03125 -vt 0.640625 0 -vt 1 0 -vt 0.75 0.25 -vt 0.890625 0.25 -vt 0.890625 0.609375 -vt 0.75 0.609375 -vt 0.75 0.640625 -vt 0.890625 0.640625 -vt 0.890625 1 +vt 0.75 0.75 vt 0.75 1 -vt 0 0.75 -vt 0.140625 0.75 -vt 0.140625 0.78125 -vt 0 0.78125 -vt 0.75 0.328125 -vt 0.890625 0.328125 -vt 0.890625 0.6875 -vt 0.75 0.6875 -vt 0.28125 0 -vt 0.640625 0 -vt 0.640625 0.03125 -vt 0.28125 0.03125 -vt 0.75 0.609375 -vt 0.890625 0.609375 -vt 0.890625 0.96875 -vt 0.75 0.96875 -vt 0.28125 0.03125 -vt 0.640625 0.03125 -vt 0.640625 0 -vt 0.28125 0 -vt 1 0.6875 -vt 0.859375 0.6875 -vt 0.859375 0.328125 -vt 1 0.328125 -vt 1 0.984375 -vt 0.859375 0.984375 -vt 0.859375 0.625 -vt 1 0.625 -vt 1 0.609375 -vt 0.859375 0.609375 -vt 0.859375 0.25 -vt 1 0.25 -vt 0.28125 0.78125 -vt 0.140625 0.78125 -vt 0.140625 0.75 -vt 0.28125 0.75 -vt 1 1 -vt 0.859375 1 -vt 0.859375 0.640625 -vt 1 0.640625 +vt 0.25 1 +vt 0.25 0.75 +vt 0.9375 0.3125 +vt 0.9375 0.5 +vt 0.875 0.5 +vt 0.875 0.3125 +vt 1 0.3125 +vt 1 0.5 +vt 0.9375 0.5 +vt 0.9375 0.3125 +vt 0.875 0.4375 +vt 0.875 0.5 +vt 1 0.5 +vt 1 0.4375 +vt 0.875 0.3125 +vt 0.875 0.375 +vt 1 0.375 +vt 1 0.3125 +vt 1 0.3125 +vt 1 0.5 +vt 0.875 0.5 +vt 0.875 0.3125 vt 0.75 0 -vt 0.75 0.203125 -vt 0.5 0.203125 -vt 0.5 0 -vt 0.625 0.09375 -vt 0.625 0.125 -vt 0.6875 0.125 -vt 0.6875 0.09375 -vt 0.6875 0.125 -vt 0.6875 0.15625 -vt 0.625 0.15625 -vt 0.625 0.125 -vt 0.6875 0.09375 -vt 0.6875 0.15625 -vt 0.625 0.15625 -vt 0.625 0.09375 -vt 0.6875 0.15625 -vt 0.6875 0.09375 -vt 0.625 0.09375 -vt 0.625 0.15625 -vt 0.6875 0.09375 -vt 0.6875 0.125 -vt 0.625 0.125 -vt 0.625 0.09375 -vt 0.625 0.125 -vt 0.625 0.15625 -vt 0.6875 0.15625 -vt 0.6875 0.125 -vt 0.625 0.09375 -vt 0.625 0.125 -vt 0.6875 0.125 -vt 0.6875 0.09375 -vt 0.6875 0.125 -vt 0.6875 0.15625 -vt 0.625 0.15625 -vt 0.625 0.125 -vt 0.6875 0.09375 -vt 0.6875 0.15625 -vt 0.625 0.15625 -vt 0.625 0.09375 -vt 0.6875 0.15625 -vt 0.6875 0.09375 -vt 0.625 0.09375 -vt 0.625 0.15625 -vt 0.6875 0.09375 -vt 0.6875 0.125 -vt 0.625 0.125 -vt 0.625 0.09375 -vt 0.625 0.125 -vt 0.625 0.15625 -vt 0.6875 0.15625 -vt 0.6875 0.125 -vt 0.40625 1 -vt 0.40625 0.953125 -vt 0.265625 0.953125 -vt 0.265625 1 -vt 0.40625 1 -vt 0.40625 0.953125 -vt 0.265625 0.953125 -vt 0.265625 1 -vt 0.53125 0.1875 -vt 0.53125 0.46875 -vt 0.40625 0.46875 -vt 0.40625 0.1875 -vt 1 1 -vt 0.953125 1 -vt 0.953125 0.90625 -vt 1 0.90625 -vt 0.984375 1 -vt 0.984375 0.953125 -vt 1 0.953125 -vt 1 1 -vt 0.984375 1 -vt 0.984375 0.90625 -vt 1 0.90625 -vt 1 1 -vt 0.984375 1 -vt 0.984375 0.90625 -vt 1 0.90625 -vt 1 1 -vt 1 0.328125 -vt 0.953125 0.328125 -vt 0.953125 0.25 -vt 1 0.25 -vt 1 0.828125 -vt 1 0.90625 -vt 0.984375 0.90625 -vt 0.984375 0.828125 -vt 1 0.828125 -vt 1 0.90625 -vt 0.984375 0.90625 -vt 0.984375 0.828125 -vt 0.75 0.90625 -vt 0.796875 0.90625 -vt 0.796875 1 -vt 0.75 1 -vt 1 0.90625 -vt 1 0.953125 -vt 0.984375 0.953125 -vt 0.984375 0.90625 -vt 0.75 0.25 -vt 0.796875 0.25 -vt 0.796875 0.328125 -vt 0.75 0.328125 -vt 0.953125 0.90625 -vt 0.953125 1 -vt 1 1 -vt 1 0.90625 -vt 1 0.953125 -vt 0.984375 0.953125 -vt 0.984375 1 -vt 1 1 -vt 1 0.90625 -vt 0.984375 0.90625 -vt 0.984375 1 -vt 1 1 -vt 1 0.90625 -vt 0.984375 0.90625 -vt 0.984375 1 -vt 1 1 -vt 0.953125 0.25 -vt 0.953125 0.328125 -vt 1 0.328125 -vt 1 0.25 -vt 0.984375 0.90625 -vt 1 0.90625 -vt 1 0.828125 -vt 0.984375 0.828125 -vt 0.984375 0.90625 -vt 1 0.90625 -vt 1 0.828125 -vt 0.984375 0.828125 -vt 0.796875 1 -vt 0.796875 0.90625 -vt 0.75 0.90625 -vt 0.75 1 -vt 0.984375 0.953125 -vt 1 0.953125 -vt 1 0.90625 -vt 0.984375 0.90625 -vt 0.796875 0.328125 -vt 0.796875 0.25 -vt 0.75 0.25 -vt 0.75 0.328125 -vt 0.28125 0.1875 -vt 0.34375 0.1875 -vt 0.34375 0.3125 -vt 0.28125 0.3125 -vt 0.28125 0.1875 -vt 0.34375 0.1875 -vt 0.34375 0.3125 -vt 0.28125 0.3125 -vt 0.0625 0.1875 -vt 0.0625 0.3125 -vt 0 0.3125 -vt 0 0.1875 -vt 0.1875 0.1875 -vt 0.1875 0.3125 -vt 0.125 0.3125 -vt 0.125 0.1875 -vt 0.40625 0.3125 -vt 0.34375 0.3125 -vt 0.34375 0.1875 -vt 0.40625 0.1875 -vt 0.40625 0.3125 -vt 0.34375 0.3125 -vt 0.34375 0.1875 -vt 0.40625 0.1875 -vt 0.125 0.5625 +vt 0.75 0.1875 +vt 0.5625 0.1875 +vt 0.5625 0 +vt 0.75 0.1875 +vt 0.5625 0.1875 +vt 0.5625 0.125 +vt 0.75 0.125 +vt 0.5625 0.0625 +vt 0.75 0.0625 +vt 0.75 0 +vt 0.5625 0 +vt 0.75 0 +vt 0.75 0.1875 +vt 0.6875 0.1875 +vt 0.6875 0 +vt 0.625 0 +vt 0.625 0.1875 +vt 0.5625 0.1875 +vt 0.5625 0 +vt 0 0.125 +vt 0 0.4375 vt 0.125 0.4375 -vt 0.1875 0.4375 -vt 0.1875 0.5625 +vt 0.125 0.125 +vt 0 0.125 +vt 0 0.4375 +vt 0.125 0.4375 +vt 0.125 0.125 +vt 0.125 0.4375 +vt 0.125 0.5625 vt 0 0.5625 vt 0 0.4375 -vt 0.0625 0.4375 -vt 0.0625 0.5625 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.734375 0.21875 -vt 0.734375 0.265625 -vt 0.71875 0.265625 -vt 0.71875 0.21875 -vt 0.703125 0.21875 -vt 0.703125 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.21875 -vt 0 1 -vt 0 0.96875 -vt 0.046875 0.96875 -vt 0.046875 1 -vt 0.953125 1 -vt 0.953125 0.96875 -vt 1 0.96875 -vt 1 1 -vt 0 1 -vt 0 0.96875 -vt 0.0859375 0.96875 -vt 0.0859375 1 -vt 0.9140625 1 -vt 0.9140625 0.96875 -vt 1 0.96875 -vt 1 1 -vt 0.9375 1 -vt 0.9375 0.96875 -vt 1 0.96875 -vt 1 1 -vt 0 1 -vt 0 0.96875 -vt 0.0625 0.96875 -vt 0.0625 1 -vt 0.0859375 0 -vt 0.0859375 0.015625 -vt 0 0.015625 -vt 0 0 -vt 1 0 -vt 1 0.015625 -vt 0.9375 0.015625 -vt 0.9375 0 -vt 0.046875 0 -vt 0.046875 0.015625 -vt 0 0.015625 -vt 0 0 -vt 1 0 -vt 1 0.015625 -vt 0.953125 0.015625 -vt 0.953125 0 -vt 0.0625 0 -vt 0.0625 0.015625 -vt 0 0.015625 +vt 0.125 0 +vt 0.125 0.125 +vt 0 0.125 vt 0 0 -vt 1 0 -vt 1 0.015625 -vt 0.9140625 0.015625 -vt 0.9140625 0 -vt 0.125 0.5 -vt 0.125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.5 -vt 0.09375 0.5 -vt 0.09375 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.5 -vt 0.09375 0.5625 -vt 0.09375 0.5 -vt 0.0625 0.5 -vt 0.0625 0.5625 -vt 0.09375 0.5 -vt 0.09375 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.5 -vt 0.0625 0.5 -vt 0.0625 0.5625 -vt 0.125 0.5625 -vt 0.125 0.5 -vt 0.125 0.5 -vt 0.125 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.5 -vt 0.09375 0.5 -vt 0.09375 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.5 -vt 0.09375 0.5625 -vt 0.09375 0.5 -vt 0.0625 0.5 -vt 0.0625 0.5625 -vt 0.09375 0.5 -vt 0.09375 0.5625 -vt 0.0625 0.5625 -vt 0.0625 0.5 -vt 0.25 0.3125 -vt 0.25 0.375 -vt 0.3125 0.375 -vt 0.3125 0.3125 -vt 0.3125 0.3125 -vt 0.3125 0.375 -vt 0.25 0.375 -vt 0.25 0.3125 -vt 0.28125 0.3125 -vt 0.28125 0.375 -vt 0.25 0.375 -vt 0.25 0.3125 -vt 0.28125 0.375 -vt 0.28125 0.3125 -vt 0.25 0.3125 -vt 0.25 0.375 -vt 0.28125 0.3125 -vt 0.28125 0.375 -vt 0.25 0.375 -vt 0.25 0.3125 -vt 0.25 0.3125 -vt 0.25 0.375 -vt 0.3125 0.375 -vt 0.3125 0.3125 -vt 0.3125 0.3125 -vt 0.3125 0.375 -vt 0.25 0.375 -vt 0.25 0.3125 -vt 0.28125 0.3125 -vt 0.28125 0.375 -vt 0.25 0.375 -vt 0.25 0.3125 -vt 0.28125 0.375 -vt 0.28125 0.3125 -vt 0.25 0.3125 -vt 0.25 0.375 -vt 0.28125 0.3125 -vt 0.28125 0.375 -vt 0.25 0.375 -vt 0.25 0.3125 -vt 0.046875 0.984375 -vt 0.046875 1 -vt 0 1 -vt 0 0.984375 -vt 0.046875 0.984375 -vt 0.046875 1 -vt 0 1 -vt 0 0.984375 -vt 0.015625 0.953125 -vt 0.015625 1 -vt 0 1 -vt 0 0.953125 -vt 0.015625 0.953125 -vt 0.015625 1 -vt 0 1 -vt 0 0.953125 -vt 0.546875 0.046875 -vt 0.578125 0.046875 -vt 0.578125 0 -vt 0.546875 0 -vt 0.578125 0 -vt 0.546875 0 -vt 0.546875 0.046875 -vt 0.578125 0.046875 -vt 0.578125 0 -vt 0.578125 0.046875 -vt 0.546875 0.046875 -vt 0.546875 0 -vt 0.546875 0.046875 -vt 0.546875 0 -vt 0.578125 0 -vt 0.578125 0.046875 -vt 0.59375 0.015625 -vt 0.59375 0.046875 -vt 0.5625 0.046875 -vt 0.5625 0.015625 -vt 0.59375 0.015625 -vt 0.59375 0.046875 -vt 0.5625 0.046875 -vt 0.5625 0.015625 -vt 0.828125 0.28125 -vt 0.828125 0.21875 -vt 0.84375 0.21875 -vt 0.84375 0.28125 -vt 0.828125 0.28125 -vt 0.828125 0.21875 -vt 0.84375 0.21875 -vt 0.84375 0.28125 -vt 0.125 0.984375 -vt 0.265625 0.984375 -vt 0.265625 1 -vt 0.125 1 -vt 0.28125 0.9375 -vt 0.421875 0.9375 -vt 0.421875 1 -vt 0.28125 1 -vt 0.5 0.25 -vt 0.359375 0.25 -vt 0.359375 0.1875 -vt 0.5 0.1875 -vt 0.28125 0.75 -vt 0.421875 0.75 -vt 0.421875 0.9375 -vt 0.28125 0.9375 -vt 0.84375 0.03125 -vt 0.84375 0.21875 -vt 0.828125 0.21875 -vt 0.828125 0.03125 -vt 0.5 0.1875 -vt 0.359375 0.1875 -vt 0.359375 0 -vt 0.5 0 -vt 0.84375 0.03125 -vt 0.84375 0.21875 -vt 0.828125 0.21875 -vt 0.828125 0.03125 -vt 0.5625 0.9375 -vt 0.421875 0.9375 -vt 0.421875 0.75 -vt 0.5625 0.75 -vt 0 0 -vt 0.140625 0 -vt 0.140625 0.1875 -vt 0 0.1875 -vt 0 0.1875 -vt 0.140625 0.1875 -vt 0.140625 0.25 -vt 0 0.25 -vt 0.40625 1 -vt 0.265625 1 -vt 0.265625 0.984375 -vt 0.40625 0.984375 -vt 0.5625 1 -vt 0.421875 1 -vt 0.421875 0.9375 -vt 0.5625 0.9375 -vt 0.5625 0.234375 -vt 0.5625 0.21875 -vt 0.53125 0.21875 -vt 0.53125 0.234375 -vt 0.53125 0.03125 -vt 0.53125 0.21875 -vt 0.5625 0.21875 -vt 0.5625 0.03125 -vt 0.53125 0.234375 -vt 0.53125 0.25 -vt 0.5625 0.28125 -vt 0.5625 0.234375 -vt 0.5625 0.234375 -vt 0.5625 0.28125 -vt 0.53125 0.25 -vt 0.53125 0.234375 -vt 0.5625 1 -vt 0.421875 1 -vt 0.421875 0.953125 -vt 0.5625 0.953125 -vt 0 0.1875 -vt 0.140625 0.1875 -vt 0.140625 0.234375 -vt 0 0.234375 -vt 0.5625 0.953125 -vt 0.421875 0.953125 -vt 0.421875 0.9375 -vt 0.5625 0.9375 -vt 0.28125 0.953125 -vt 0.421875 0.953125 -vt 0.421875 1 -vt 0.28125 1 -vt 0.28125 0.9375 -vt 0.421875 0.9375 -vt 0.421875 0.953125 -vt 0.28125 0.953125 -vt 0.515625 0.234375 -vt 0.375 0.234375 -vt 0.375 0.1875 -vt 0.515625 0.1875 +vt 0.125 0.125 +vt 0.125 0.4375 +vt 0 0.4375 vt 0 0.125 -vt 0.140625 0.125 -vt 0.140625 0.25 -vt 0 0.25 -vt 0.5625 0.28125 -vt 0.703125 0.28125 -vt 0.703125 0.15625 -vt 0.5625 0.15625 -vt 0.015625 0.734375 -vt 0.015625 0.875 -vt 0 0.875 -vt 0 0.734375 -vt 0 0 -vt 0.140625 0 -vt 0.140625 0.125 +vt 0.125 0.125 +vt 0.125 0.4375 +vt 0 0.4375 vt 0 0.125 -vt 0.5625 0.15625 -vt 0.703125 0.15625 -vt 0.703125 0.03125 -vt 0.5625 0.03125 -vt 0.5 0.125 -vt 0.375 0.125 -vt 0.375 0 -vt 0.5 0 -vt 0.828125 0.03125 -vt 0.703125 0.03125 -vt 0.703125 0.15625 -vt 0.828125 0.15625 -vt 0.828125 0.15625 -vt 0.703125 0.15625 -vt 0.703125 0.28125 -vt 0.828125 0.28125 -vt 0 1 -vt 0 0.875 -vt 0.015625 0.875 -vt 0.015625 1 -vt 0.5 0.25 -vt 0.375 0.25 -vt 0.375 0.125 -vt 0.5 0.125 -vt 0.546875 0.734375 -vt 0.546875 0.9375 -vt 0.296875 0.9375 -vt 0.296875 0.734375 -vt 0.84375 0.03125 -vt 0.84375 0.234375 -vt 0.96875 0.234375 -vt 1 0.03125 -vt 1 0.03125 -vt 0.96875 0.234375 -vt 0.84375 0.234375 -vt 0.84375 0.03125 -vt 0.015625 0.875 -vt 0.015625 1 -vt 0 1 -vt 0 0.875 -vt 0.015625 0.794484375 -vt 0.015625 1 -vt 0 1 -vt 0 0.794484375 +vt 0.5625 0 +vt 0.5625 1 vt 0.5 1 -vt 0.5 0.890625 -vt 0.75 0.890625 -vt 0.75 1 -vt 0.53125 0.03125 -vt 0.53125 0.25 -vt 0.28125 0.25 -vt 0.28125 0.03125 -vt 0.015625 0.75 -vt 0.015625 1 -vt 0 1 -vt 0 0.75 -vt 0.53125 0.234375 -vt 0.53125 0.21875 -vt 0.5625 0.21875 -vt 0.5625 0.234375 -vt 0.5625 0.03125 -vt 0.5625 0.21875 -vt 0.53125 0.21875 -vt 0.53125 0.03125 -vt 0 0.125 -vt 0.140625 0.125 -vt 0.140625 0.25 -vt 0 0.25 -vt 0.828125 0.28125 -vt 0.6875 0.28125 -vt 0.6875 0.15625 -vt 0.828125 0.15625 -vt 0.015625 0.734375 -vt 0.015625 0.875 -vt 0 0.875 -vt 0 0.734375 -vt 0 0 -vt 0.140625 0 -vt 0.140625 0.125 -vt 0 0.125 -vt 0.828125 0.15625 -vt 0.6875 0.15625 -vt 0.6875 0.03125 -vt 0.828125 0.03125 -vt 0.5 0.125 -vt 0.375 0.125 -vt 0.375 0 vt 0.5 0 -vt 0.5625 0.03125 -vt 0.6875 0.03125 -vt 0.6875 0.15625 -vt 0.5625 0.15625 -vt 0.5625 0.15625 -vt 0.6875 0.15625 -vt 0.6875 0.28125 -vt 0.5625 0.28125 -vt 0 1 -vt 0 0.875 -vt 0.015625 0.875 -vt 0.015625 1 -vt 0.5 0.25 -vt 0.375 0.25 -vt 0.375 0.125 -vt 0.5 0.125 -vt 0.84375 0.03125 -vt 0.84375 0.234375 -vt 0.96875 0.234375 -vt 1 0.03125 -vt 0.015625 0.875 -vt 0.015625 1 -vt 0 1 -vt 0 0.875 -vt 0.015625 0.794484375 -vt 0.015625 1 -vt 0 1 -vt 0 0.794484375 -vt 1 0.03125 -vt 0.96875 0.234375 -vt 0.84375 0.234375 -vt 0.84375 0.03125 -vt 0.640625 0.203125 -vt 0.640625 0.265625 -vt 0.625 0.265625 -vt 0.625 0.203125 -vt 0.6875 0.25 -vt 0.6875 0.265625 -vt 0.625 0.265625 -vt 0.625 0.25 -vt 0.6875 0.203125 -vt 0.6875 0.265625 -vt 0.625 0.265625 -vt 0.625 0.203125 -vt 0.625 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.25 -vt 0.625 0.25 -vt 0.625 0.265625 -vt 0.6875 0.265625 -vt 0.6875 0.203125 -vt 0.625 0.203125 -vt 0.265625 0.265625 -vt 0.265625 0.375 -vt 0.015625 0.375 -vt 0.015625 0.265625 -vt 0.734375 0.265625 -vt 0.734375 0.375 -vt 0.484375 0.375 -vt 0.484375 0.265625 +vt 0.5625 0 +vt 0.5625 1 vt 0.5 1 -vt 0.5 0.78125 -vt 0 0.78125 -vt 0 1 -vt 0.5 0.78125 +vt 0.5 0 +vt 0.5625 0.9375 +vt 0.5625 1 vt 0.5 1 -vt 0 1 -vt 0 0.78125 -vt 0.5 0.75 -vt 0.5 0.8125 -vt 0 0.8125 -vt 0 0.75 -vt 0.25 0.25 -vt 0.25 0.125 -vt 0.28125 0.125 -vt 0.28125 0.25 -vt 0 1 -vt 0.140625 1 -vt 0.140625 0.96875 -vt 0 0.96875 -vt 1 0.96875 -vt 0.859375 0.96875 -vt 0.859375 1 -vt 1 1 -vt 0.75 1 -vt 0.609375 1 -vt 0.609375 0.875 -vt 0.75 0.875 -vt 0 0.875 -vt 0.140625 0.875 -vt 0.140625 1 -vt 0 1 -vt 0 0.75 -vt 0.140625 0.75 -vt 0.140625 0.875 -vt 0 0.875 -vt 0.75 0.359375 -vt 0.609375 0.359375 -vt 0.609375 0.234375 -vt 0.75 0.234375 -vt 0.28125 0 -vt 0.28125 0.125 -vt 0.25 0.125 -vt 0.25 0 -vt 0.28125 0.875 -vt 0.140625 0.875 -vt 0.140625 0.75 -vt 0.28125 0.75 -vt 0.75 1 -vt 0.890625 1 -vt 0.890625 0.96875 -vt 0.75 0.96875 -vt 0 0.234375 -vt 0.140625 0.234375 -vt 0.140625 0.359375 -vt 0 0.359375 -vt 0 0.875 -vt 0.140625 0.875 -vt 0.140625 1 -vt 0 1 -vt 0 0.96875 -vt 0.140625 0.96875 -vt 0.140625 1 -vt 0 1 -vt 0.28125 1 -vt 0.140625 1 -vt 0.140625 0.875 -vt 0.28125 0.875 -vt 0.25 0 -vt 0.25 0.125 -vt 0.28125 0.125 -vt 0.28125 0 -vt 0.28125 0.25 -vt 0.28125 0.125 -vt 0.25 0.125 -vt 0.25 0.25 -vt 0.109375 1 -vt 0.171875 1 -vt 0.171875 0.984375 -vt 0.109375 0.984375 -vt 0.171875 1 -vt 0.109375 1 -vt 0.109375 0.984375 -vt 0.171875 0.984375 -vt 0.421875 0.234375 -vt 0.421875 0.15625 -vt 0.484375 0.15625 -vt 0.484375 0.234375 -vt 0.0625 0.328125 -vt 0.0625 0.25 -vt 0 0.25 -vt 0 0.328125 -vt 0.078125 0.984375 -vt 0.078125 1 -vt 0.140625 1 -vt 0.140625 0.984375 -vt 0.0625 0.34375 -vt 0.0625 0.265625 -vt 0 0.265625 -vt 0 0.34375 -vt 0.6875 0.25 -vt 0.6875 0.328125 -vt 0.75 0.328125 -vt 0.75 0.25 -vt 0.078125 1 -vt 0.078125 0.984375 -vt 0.015625 0.984375 -vt 0.015625 1 -vt 0 1 -vt 0.3125 1 -vt 0.3125 0.984375 -vt 0 0.984375 -vt 0 1 -vt 0.3125 1 -vt 0.3125 0.984375 -vt 0 0.984375 -vt 0.109375 0.171875 -vt 0.390625 0.171875 -vt 0.390625 0.234375 -vt 0.109375 0.234375 -vt 0 0.0625 -vt 0.28125 0.0625 -vt 0.28125 0 -vt 0 0 -vt 0.734375 0.3125 -vt 0.453125 0.3125 -vt 0.453125 0.25 -vt 0.734375 0.25 -vt 0.28125 0.9375 -vt 0 0.9375 -vt 0 1 -vt 0.28125 1 -vt 0.109375 1 -vt 0.171875 1 -vt 0.171875 0.984375 -vt 0.109375 0.984375 -vt 0.171875 1 -vt 0.109375 1 -vt 0.109375 0.984375 -vt 0.171875 0.984375 -vt 0.6875 0.25 -vt 0.6875 0.328125 -vt 0.75 0.328125 -vt 0.75 0.25 -vt 0.0625 0.328125 -vt 0.0625 0.25 -vt 0 0.25 -vt 0 0.328125 -vt 0.078125 0.984375 -vt 0.078125 1 -vt 0.140625 1 -vt 0.140625 0.984375 -vt 0.078125 0.078125 -vt 0.078125 0 -vt 0.015625 0 -vt 0.015625 0.078125 -vt 0.6875 0.25 -vt 0.6875 0.328125 -vt 0.75 0.328125 -vt 0.75 0.25 -vt 0.078125 1 -vt 0.078125 0.984375 -vt 0.015625 0.984375 -vt 0.015625 1 -vt 0 0.90624984375 -vt 0 0.78124953125 -vt 0.01562421875 0.7812496875 -vt 0.01562578125 0.90625 -vt 0.09375 0.98437421875 -vt 0.21875015625 0.98437421875 -vt 0.21875046875 1 -vt 0.09375015625 0.9999984375 -vt 0.390625 0.1875 -vt 0.5 0.1875 -vt 0.5 0.25 -vt 0.390625 0.25 -vt 0.015625 0.078125 -vt 0.125 0.078125 -vt 0.125 0.015625 -vt 0.015625 0.015625 -vt 0.75 0.3125 -vt 0.640625 0.3125 -vt 0.640625 0.25 -vt 0.75 0.25 -vt 0.125 0.9375 -vt 0.015625 0.9375 -vt 0.015625 1 -vt 0.125 1 -vt 0.171875 0.984375 -vt 0.171875 1 -vt 0.109375 1 -vt 0.109375 0.984375 -vt 0.109375 0.984375 -vt 0.109375 1 -vt 0.171875 1 -vt 0.171875 0.984375 -vt 0.484375 0.15625 -vt 0.421875 0.15625 -vt 0.421875 0.234375 -vt 0.484375 0.234375 -vt 0 0.25 -vt 0.0625 0.25 -vt 0.0625 0.328125 -vt 0 0.328125 -vt 0.140625 1 -vt 0.078125 1 -vt 0.078125 0.984375 -vt 0.140625 0.984375 -vt 0 0.265625 -vt 0.0625 0.265625 -vt 0.0625 0.34375 -vt 0 0.34375 -vt 0.75 0.328125 -vt 0.6875 0.328125 -vt 0.6875 0.25 -vt 0.75 0.25 -vt 0.015625 0.984375 -vt 0.078125 0.984375 -vt 0.078125 1 -vt 0.015625 1 -vt 0.3125 0.984375 -vt 0.3125 1 -vt 0 1 -vt 0 0.984375 -vt 0.3125 0.984375 -vt 0.3125 1 -vt 0 1 -vt 0 0.984375 -vt 0.390625 0.234375 -vt 0.390625 0.171875 -vt 0.109375 0.171875 -vt 0.109375 0.234375 -vt 0.28125 0 -vt 0.28125 0.0625 -vt 0 0.0625 -vt 0 0 -vt 0.453125 0.25 -vt 0.453125 0.3125 -vt 0.734375 0.3125 -vt 0.734375 0.25 -vt 0 1 -vt 0 0.9375 -vt 0.28125 0.9375 -vt 0.28125 1 -vt 0.171875 0.984375 -vt 0.171875 1 -vt 0.109375 1 -vt 0.109375 0.984375 -vt 0.109375 0.984375 -vt 0.109375 1 -vt 0.171875 1 -vt 0.171875 0.984375 -vt 0.75 0.328125 -vt 0.6875 0.328125 -vt 0.6875 0.25 -vt 0.75 0.25 -vt 0 0.25 -vt 0.0625 0.25 -vt 0.0625 0.328125 -vt 0 0.328125 -vt 0.140625 1 -vt 0.078125 1 -vt 0.078125 0.984375 -vt 0.140625 0.984375 -vt 0.015625 0 -vt 0.078125 0 -vt 0.078125 0.078125 -vt 0.015625 0.078125 -vt 0.75 0.328125 -vt 0.6875 0.328125 -vt 0.6875 0.25 -vt 0.75 0.25 -vt 0.015625 0.984375 -vt 0.078125 0.984375 -vt 0.078125 1 -vt 0.015625 1 -vt 0.09375 0.9999971875 -vt 0.09375 0.98437296875 -vt 0.21875015625 0.98437421875 -vt 0.2187503125 1 -vt 0.0156259375 0.8125 -vt 0 0.8125 -vt 0.000010625 0.68749984375 -vt 0.01563484375 0.68750125 -vt 0.5 0.25 -vt 0.5 0.1875 -vt 0.390625 0.1875 -vt 0.390625 0.25 -vt 0.125 0.015625 -vt 0.125 0.078125 -vt 0.015625 0.078125 -vt 0.015625 0.015625 -vt 0.640625 0.25 -vt 0.640625 0.3125 -vt 0.75 0.3125 -vt 0.75 0.25 -vt 0.015625 1 -vt 0.015625 0.9375 -vt 0.125 0.9375 -vt 0.125 1 -vt 0.265625 0.328125 -vt 0.28125 0.328125 -vt 0.28125 0.359375 -vt 0.265625 0.359375 -vt 0.265625 0.328125 -vt 0.28125 0.328125 -vt 0.28125 0.359375 -vt 0.265625 0.359375 -vt 0.265625 0.25 -vt 0.28125 0.25 -vt 0.28125 0.359375 -vt 0.265625 0.359375 -vt 0.25 0.25 -vt 0.265625 0.25 -vt 0.265625 0.359375 -vt 0.25 0.359375 -vt 0.265625 0.328125 -vt 0.28125 0.328125 -vt 0.28125 0.359375 -vt 0.265625 0.359375 -vt 0.265625 0.328125 -vt 0.28125 0.328125 -vt 0.28125 0.359375 -vt 0.265625 0.359375 -vt 0.265625 0.25 -vt 0.28125 0.25 -vt 0.28125 0.359375 -vt 0.265625 0.359375 -vt 0.25 0.25 -vt 0.265625 0.25 -vt 0.265625 0.359375 -vt 0.25 0.359375 -vt 0.8125 0.40625 -vt 0.8125 0.421875 -vt 0.515625 0.421875 -vt 0.515625 0.40625 -vt 0.8125 0.40625 -vt 0.8125 0.421875 -vt 0.515625 0.421875 -vt 0.515625 0.40625 -vt 0.515625 0.28125 -vt 0.8125 0.28125 -vt 0.8125 0.421875 -vt 0.515625 0.421875 -vt 0.8125 0.421875 -vt 0.515625 0.421875 -vt 0.515625 0.28125 -vt 0.8125 0.28125 -vt 0.796875 0.28125 -vt 0.8125 0.28125 -vt 0.8125 0.421875 -vt 0.796875 0.421875 -vt 0.796875 0.28125 -vt 0.8125 0.28125 -vt 0.8125 0.421875 -vt 0.796875 0.421875 -vt 0 0.75 -vt 0.5 0.75 -vt 0.5 0.9375 -vt 0 0.9375 -vt 0 0.9375 vt 0.5 0.9375 -vt 0.5 0.75 -vt 0 0.75 -vt 0 0.8125 -vt 0.5 0.8125 -vt 0.5 0.75 -vt 0 0.75 -vt 0.078125 0.8 -vt 0.078125 0.8125 -vt 0 0.8125 -vt 0 0.8 -vt 0.078125 0.7375 -vt 0.078125 0.75 -vt 0 0.75 -vt 0 0.7375 -vt 0 0.734375 -vt 0 0.8125 -vt 0.078125 0.8125 -vt 0.078125 0.734375 -vt 0.078125 0.796875 -vt 0.078125 0.8125 -vt 0 0.8125 -vt 0 0.796875 -vt 0.078125 0.75 -vt 0.078125 0.734375 -vt 0 0.734375 -vt 0 0.75 -vt 0.078125 0.8 -vt 0.078125 0.8125 -vt 0 0.8125 -vt 0 0.8 -vt 0.078125 0.7375 -vt 0.078125 0.75 -vt 0 0.75 -vt 0 0.7375 -vt 0 0.734375 -vt 0 0.8125 -vt 0.078125 0.8125 -vt 0.078125 0.734375 -vt 0.078125 0.796875 -vt 0.078125 0.8125 -vt 0 0.8125 -vt 0 0.796875 -vt 0.078125 0.75 -vt 0.078125 0.734375 -vt 0 0.734375 -vt 0 0.75 -vn 1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 +vt 0.5625 0 +vt 0.5625 1 +vt 0.5 1 +vt 0.5 0 +vt 0.5625 0 +vt 0.5625 1 +vt 0.5 1 +vt 0.5 0 vn 0 0 -1 -vn 1 0 0 -vn 0 1 0 -vn 0 -1 0 vn 0 0 1 -vn 0 0 -1 vn 1 0 0 +vn -1 0 0 vn 0 -1 0 vn 0 1 0 -vn 0 0 1 -vn 0 0 -1 -vn 1 0 0 vn 0 0 -1 vn 0 0 1 vn 1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 1 0 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 1 -vn 0 1 0 +vn -1 0 0 vn 0 1 0 vn 0 0 -1 -vn 0 0 -1 +vn 0 0 1 vn 0 -1 0 -vn 1 0 0 vn 0 1 0 vn 0 0 -1 vn 0 0 1 vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 vn 0 1 0 vn 0 0 -1 vn 0 0 1 -vn 0.1643989873053573 0.9863939238321437 0 -vn -0.1643989873053573 -0.9863939238321437 0 -vn 0 0 1 -vn 0 0 -1 -vn 0.16439898730535732 0.9863939238321439 0 -vn -0.16439898730535732 -0.9863939238321439 0 -vn 0 1 0 -vn 0 0 1 -vn 0 -1 0 -vn 0 -1 0 -vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 vn 0 1 0 -vn 0.7071067811865476 0.7071067811865476 0 -vn -0.7071067811865476 0.7071067811865476 0 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 +vn 0 -0.01 1 +vn 0 1 0.01 +vn 0 -1 -0.01 vn 1 0 0 vn -1 0 0 -vn 0 0 1 -vn 0 0 -1 +vn 0 0.01 -1 +vn 0 -0.01 1 +vn 0 1 0.01 +vn 0 -1 -0.01 +vn 1 0 0 +vn -1 0 0 +vn 0 0.01 -1 +vn 0 -0.01 1 +vn 0 1 0.01 vn 1 0 0 vn -1 0 0 +usemtl radio_backpack +f 457/1193/299 455/1194/299 454/1195/299 456/1196/299 +f 460/1197/300 458/1198/300 459/1199/300 461/1200/300 +f 454/1201/301 455/1202/301 459/1203/301 458/1204/301 +f 457/1205/302 456/1206/302 460/1207/302 461/1208/302 +f 456/1209/303 454/1210/303 458/1211/303 460/1212/303 +f 461/1213/304 459/1214/304 455/1215/304 457/1216/304 +usemtl radio_backpack2 +f 465/1217/305 463/1218/305 462/1219/305 464/1220/305 +f 468/1221/306 466/1222/306 467/1223/306 469/1224/306 +f 462/1225/307 463/1226/307 467/1227/307 466/1228/307 +f 465/1229/308 464/1230/308 468/1231/308 469/1232/308 +f 469/1233/309 467/1234/309 463/1235/309 465/1236/309 +f 473/1237/310 471/1238/310 470/1239/310 472/1240/310 +f 476/1241/311 474/1242/311 475/1243/311 477/1244/311 +f 472/1245/312 470/1246/312 474/1247/312 476/1248/312 +f 477/1249/313 475/1250/313 471/1251/313 473/1252/313 +f 481/1253/314 479/1254/314 478/1255/314 480/1256/314 +f 484/1257/315 482/1258/315 483/1259/315 485/1260/315 +f 478/1261/316 479/1262/316 483/1263/316 482/1264/316 +f 481/1265/317 480/1266/317 484/1267/317 485/1268/317 +f 480/1269/318 478/1270/318 482/1271/318 484/1272/318 +f 485/1273/319 483/1274/319 479/1275/319 481/1276/319 +f 489/1277/320 487/1278/320 486/1279/320 488/1280/320 +f 492/1281/321 490/1282/321 491/1283/321 493/1284/321 +f 486/1285/322 487/1286/322 491/1287/322 490/1288/322 +f 489/1289/323 488/1290/323 492/1291/323 493/1292/323 +f 493/1293/324 491/1294/324 487/1295/324 489/1296/324 +usemtl radio_backpack +f 500/1297/325 498/1298/325 499/1299/325 501/1300/325 +f 494/1301/326 495/1302/326 499/1303/326 498/1304/326 +f 497/1305/327 496/1306/327 500/1307/327 501/1308/327 +f 496/1309/328 494/1310/328 498/1311/328 500/1312/328 +f 501/1313/329 499/1314/329 495/1315/329 497/1316/329 +f 505/1317/330 503/1318/330 502/1319/330 504/1320/330 +f 508/1321/331 506/1322/331 507/1323/331 509/1324/331 +f 502/1325/332 503/1326/332 507/1327/332 506/1328/332 +f 505/1329/333 504/1330/333 508/1331/333 509/1332/333 +f 504/1333/334 502/1334/334 506/1335/334 508/1336/334 +f 509/1337/335 507/1338/335 503/1339/335 505/1340/335 +f 513/1341/336 511/1342/336 510/1343/336 512/1344/336 +f 516/1345/337 514/1346/337 515/1347/337 517/1348/337 +f 510/1349/338 511/1350/338 515/1351/338 514/1352/338 +f 512/1353/339 510/1354/339 514/1355/339 516/1356/339 +f 517/1357/340 515/1358/340 511/1359/340 513/1360/340 +o hood +v -0.3719 1.625 1.7156 +v -0.3094 1.625 1.7156 +v -0.3719 1.5625 1.7156 +v -0.3094 1.5625 1.7156 +v -0.3719 1.625 0.7156 +v -0.3094 1.625 0.7156 +v -0.3719 1.5625 0.7156 +v -0.3094 1.5625 0.7156 +v 0.3156 1.625 1.7156 +v 0.3781 1.625 1.7156 +v 0.3156 1.5625 1.7156 +v 0.3781 1.5625 1.7156 +v 0.3156 1.625 0.7156 +v 0.3781 1.625 0.7156 +v 0.3156 1.5625 0.7156 +v 0.3781 1.5625 0.7156 +v 0.5 1.4375 1.75 +v 0.5 1.4375 0.6875 +v 0.5 1.375 1.75 +v 0.5 1.375 0.6875 +v -0.5 1.4375 1.75 +v -0.5 1.4375 0.6875 +v -0.5 1.375 1.75 +v -0.5 1.375 0.6875 +v 0.5 1.4375 1.25 +v -0.5 1.4375 1.25 +v -0.5 1.375 1.25 +v 0.5 1.375 1.25 +v 0 1.4375 1.25 +v 0 1.4375 1.75 +v 0 1.375 1.75 +v 0 1.375 1.25 +v 0 1.375 0.6875 +v 0 1.4375 0.6875 +v -0.3719 1.5625 0.7781 +v -0.3094 1.5625 0.7781 +v -0.3719 1.4375 0.7781 +v -0.3094 1.4375 0.7781 +v -0.3719 1.4375 0.7156 +v -0.3094 1.4375 0.7156 +v 0.3156 1.4375 1.7156 +v 0.3781 1.4375 1.7156 +v 0.3156 1.5625 1.6531 +v 0.3781 1.5625 1.6531 +v 0.3156 1.4375 1.6531 +v 0.3781 1.4375 1.6531 +v -0.3719 1.4375 1.7156 +v -0.3094 1.4375 1.7156 +v -0.3719 1.5625 1.6531 +v -0.3094 1.5625 1.6531 +v -0.3719 1.4375 1.6531 +v -0.3094 1.4375 1.6531 +v 0.3156 1.5625 0.7781 +v 0.3781 1.5625 0.7781 +v 0.3156 1.4375 0.7781 +v 0.3781 1.4375 0.7781 +v 0.3156 1.4375 0.7156 +v 0.3781 1.4375 0.7156 +v 0 1.4375 0.875 +v -0.5 1.4375 0.875 +v -0.5 1.375 0.875 +v 0 1.375 0.875 +v 0.5 1.375 0.875 +v 0.5 1.4375 0.875 +v 0 1.4375 1.5625 +v -0.5 1.4375 1.5625 +v -0.5 1.375 1.5625 +v 0 1.375 1.5625 +v 0.5 1.375 1.5625 +v 0.5 1.4375 1.5625 +v -0.3125 1.4375 1.5625 +v -0.3125 1.4375 1.25 +v -0.3125 1.4375 0.875 +v -0.3125 1.4375 0.6875 +v -0.3125 1.375 0.6875 +v -0.3125 1.375 0.875 +v -0.3125 1.375 1.25 +v -0.3125 1.375 1.5625 +v -0.3125 1.375 1.75 +v -0.3125 1.4375 1.75 +v 0 1.4031 1.5625 +v 0 1.4031 0.875 +v -0.3125 1.4031 1.5625 +v -0.3125 1.4031 0.875 +v 0 1.4031 1.1875 +v -0.3125 1.4031 1.1875 +v -0.1875 1.4031 1.1875 +v -0.1875 1.4031 1.5625 +v -0.1875 1.4031 0.875 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 0.5313 +vt 0.5 0.5313 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 0.5313 +vt 0.5 0.5313 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 1 +vt 0.5 1 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 1 +vt 0.5 1 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 1 +vt 0.5 1 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 1 +vt 0.5 1 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 0.5313 +vt 0.5 0.5313 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 0.5313 +vt 0.5 0.5313 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 1 +vt 0.5 1 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 1 +vt 0.5 1 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 1 +vt 0.5 1 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 1 +vt 0.5 1 +vt 0.4063 0.2656 +vt 0.3594 0.2656 +vt 0.3594 0.25 +vt 0.4063 0.25 +vt 0.3281 0.25 +vt 0.375 0.25 +vt 0.375 0.2656 +vt 0.3281 0.2656 +vt 0.625 0.25 +vt 0.5469 0.25 +vt 0.5469 0.2031 +vt 0.625 0.2031 +vt 0.625 0.0469 +vt 0.5469 0.0469 +vt 0.5469 0 +vt 0.625 0 +vt 0.1719 0.2656 +vt 0.0938 0.2656 +vt 0.0938 0.25 +vt 0.1719 0.25 +vt 0.375 0.25 +vt 0.4531 0.25 +vt 0.4531 0.2656 +vt 0.375 0.2656 +vt 0.5156 0.25 +vt 0.5938 0.25 +vt 0.5938 0.2656 +vt 0.5156 0.2656 +vt 0.25 0.2656 +vt 0.1719 0.2656 +vt 0.1719 0.25 +vt 0.25 0.25 +vt 0.625 0.125 +vt 0.625 0.0469 +vt 0.75 0.0469 +vt 0.75 0.125 +vt 0.5469 0.2656 +vt 0.4219 0.2656 +vt 0.4219 0.25 +vt 0.5469 0.25 +vt 0.75 0.125 +vt 0.75 0.2031 +vt 0.625 0.2031 +vt 0.625 0.125 +vt 0.75 0 +vt 0.75 0.0469 +vt 0.625 0.0469 +vt 0.625 0 +vt 0.25 0.25 +vt 0.375 0.25 +vt 0.375 0.2656 +vt 0.25 0.2656 +vt 0.625 0.25 +vt 0.625 0.2031 +vt 0.75 0.2031 +vt 0.75 0.25 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.5 0.5313 +vt 0.4375 0.5313 +vt 0.4375 0.5 +vt 0.5 0.5 +vt 0.4688 0.2656 +vt 0.375 0.2656 +vt 0.375 0.25 +vt 0.4688 0.25 +vt 0.625 0.1406 +vt 0.625 0.0469 +vt 0.75 0.0469 +vt 0.75 0.1406 +vt 0.2656 0.25 +vt 0.3594 0.25 +vt 0.3594 0.2656 +vt 0.2656 0.2656 +vt 0.75 0.1094 +vt 0.75 0.2031 +vt 0.625 0.2031 +vt 0.625 0.1094 +vt 0.625 0.0469 +vt 0.5469 0.0469 +vt 0.5469 0 +vt 0.625 0 +vt 0.6406 0.2656 +vt 0.5938 0.2656 +vt 0.5938 0.25 +vt 0.6406 0.25 +vt 0.625 0.25 +vt 0.5469 0.25 +vt 0.5469 0.2031 +vt 0.625 0.2031 +vt 0.625 0.25 +vt 0.625 0.2031 +vt 0.75 0.2031 +vt 0.75 0.25 +vt 0.125 0.25 +vt 0.1719 0.25 +vt 0.1719 0.2656 +vt 0.125 0.2656 +vt 0.75 0 +vt 0.75 0.0469 +vt 0.625 0.0469 +vt 0.625 0 +vt 0.5 0.0469 +vt 0.5469 0.0469 +vt 0.5469 0.125 +vt 0.5 0.125 +vt 0.5 0.1094 +vt 0.5469 0.1094 +vt 0.5469 0.2031 +vt 0.5 0.2031 +vt 0.5 0.2031 +vt 0.5469 0.2031 +vt 0.5469 0.25 +vt 0.5 0.25 +vt 0.5 0.2656 +vt 0.4531 0.2656 +vt 0.4531 0.25 +vt 0.5 0.25 +vt 0.5 0 +vt 0.5469 0 +vt 0.5469 0.0469 +vt 0.5 0.0469 +vt 0.5 0.0469 +vt 0.5469 0.0469 +vt 0.5469 0.1406 +vt 0.5 0.1406 +vt 0.5 0.125 +vt 0.5469 0.125 +vt 0.5469 0.2031 +vt 0.5 0.2031 +vt 0.5 0.2031 +vt 0.5469 0.2031 +vt 0.5469 0.25 +vt 0.5 0.25 +vt 0.0469 0.25 +vt 0.0938 0.25 +vt 0.0938 0.2656 +vt 0.0469 0.2656 +vt 0.5 0 +vt 0.5469 0 +vt 0.5469 0.0469 +vt 0.5 0.0469 +vt 0.375 0.2031 +vt 0.375 0.2188 +vt 0.2813 0.2188 +vt 0.2031 0.2188 +vt 0.2031 0.2188 +vt 0.2031 0.2031 +vt 0.2813 0.2031 +vt 0.375 0.2031 +vt 0.2031 0.2188 +vt 0.2031 0.2031 +vt 0.2969 0.2031 +vt 0.375 0.2031 +vt 0.375 0.2031 +vt 0.375 0.2188 +vt 0.2969 0.2188 +vt 0.2031 0.2188 +vt 0.3438 0.2188 +vt 0.3438 0.2031 +vt 0.4219 0.2031 +vt 0.4219 0.2188 +vt 0.3594 0.2188 +vt 0.2813 0.2188 +vt 0.2813 0.2031 +vt 0.3594 0.2031 +vt 0.1875 0.5938 +vt 0.125 0.5938 +vt 0.125 0.75 +vt 0.1875 0.75 +vt 0.1875 0.75 +vt 0.125 0.75 +vt 0.125 0.5625 +vt 0.1875 0.5625 +vt 0.1875 0.5625 +vt 0.0938 0.5625 +vt 0.0938 0.75 +vt 0.1875 0.75 +vt 0.1875 0.75 +vt 0.0938 0.75 +vt 0.0938 0.5938 +vt 0.1875 0.5938 vn 0 0 1 vn 0 0 -1 -vn 0.7071067811865476 0.7071067811865476 0 -vn -0.7071067811865476 0.7071067811865476 0 vn 0 1 0 vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -vn 1 0 0 vn -1 0 0 -vn 0 0 1 -vn 0 0 -1 vn 1 0 0 -vn -1 0 0 vn 0 0 1 vn 0 0 -1 -vn -1 0 0 vn 0 1 0 vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -vn -1 0 0 -vn 0 0 -1 -vn 0 0 1 vn -1 0 0 -vn 0 -1 0 -vn 0 1 0 +vn 1 0 0 +vn 1 0 0 vn -1 0 0 vn 0 1 0 -vn 0 0 1 -vn 0 0 1 vn 0 -1 0 -vn 0 -1 0 -vn 0 0 -1 -vn 0 0 -1 -vn 0 1 0 -vn -1 0 0 -vn 0 1 0 vn 0 0 1 vn 0 0 -1 vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -vn -0.1643989873053573 0.9863939238321437 0 -vn 0.1643989873053573 -0.9863939238321437 0 -vn 0 0 1 -vn 0 0 -1 -vn -0.16439898730535732 0.9863939238321439 0 -vn 0.16439898730535732 -0.9863939238321439 0 +vn 1 0 0 vn 0 1 0 vn 0 0 1 vn 0 -1 0 vn 0 -1 0 vn 0 0 -1 vn 0 1 0 -vn 0.7071067811865476 0.7071067811865476 0 -vn -0.7071067811865476 0.7071067811865476 0 -vn 0 1 0 -vn 0 -1 0 vn 0 0 1 vn 0 0 -1 -vn 1 0 0 vn -1 0 0 -vn 0 0 1 -vn 0 0 -1 vn 1 0 0 -vn -1 0 0 -vn 0 0 1 -vn 0 0 -1 -vn 0.7071067811865476 0.7071067811865476 0 -vn -0.7071067811865476 0.7071067811865476 0 -vn 0 1 0 -vn 0 -1 0 vn 0 0 1 vn 0 0 -1 -vn 1 0 0 vn -1 0 0 -vn 0 0 1 -vn 0 0 -1 vn 1 0 0 -vn -1 0 0 vn 0 0 1 vn 0 0 -1 vn -1 0 0 -vn 0 1 0 +vn 1 0 0 vn 0 0 1 vn 0 0 -1 -vn 0 1 0 -vn 0 0 -1 +vn -1 0 0 vn 1 0 0 -vn 0 1 0 -vn 0 -1 0 vn -1 0 0 vn 0 -1 0 +vn 1 0 0 vn 0 1 0 -vn 0 0 -1 -vn 0 0 1 -vn 0 1 0 -vn 0 -1 0 -vn -1 0 0 -vn 0 0 -1 -vn 0 0 1 -vn -0.8944271909999161 0.4472135954999579 0 vn 0 1 0 -vn 0 0 1 -vn 0 0 -1 -vn 0.906307857187003 -0.42261811130274934 0 -vn -0.906307857187003 0.42261811130274934 0 -vn 0.42261610394430743 0.9063087932305051 0 -vn -0.42261610394430726 -0.9063087932305053 0 -vn 0 0 1 -vn 0 0 -1 -vn 1 0 0 vn -1 0 0 -vn 0 1 0 vn 0 -1 0 -vn -0.8944271909999161 0 -0.44721359549995804 -vn 0 1 0 vn 0 -1 0 -vn 0 0 -1 -vn -1 0 0 vn 1 0 0 vn 0 1 0 -vn 1 0 0 -vn -1 0 0 vn 0 1 0 -vn 0 0 1 -vn 0 0 -1 -vn 1 0 0 -vn -1 0 0 vn 0 1 0 -vn 0 -1 0 -vn 0 -0.44721359549995804 0.8944271909999161 -vn 1 0 0 -vn -1 0 0 vn 0 1 0 +vn 0 0 -1 vn 0 -1 0 -vn 0 0 1 vn 0 -1 0 -vn -1 0 0 -vn 0 1 0 -vn 1 0 0 vn 0 -1 0 -vn 0 1 0 -vn 0 1 0 -vn 0 0 1 vn 0 -1 0 vn 0 0 1 -vn 1 0 0 -vn -1 0 0 vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 +vn 1 0 0 vn 1 0 0 vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 +vn -1 0 0 vn 0 0 1 vn 0 0 -1 -vn 1 0 0 -vn -1 0 0 vn 0 1 0 +vn 0 1 0 +vn 0 1 0 +vn 0 1 0 +usemtl tracked_motorbike +f 521/1361/341 519/1362/341 518/1363/341 520/1364/341 +f 524/1365/342 522/1366/342 523/1367/342 525/1368/342 +f 518/1369/343 519/1370/343 523/1371/343 522/1372/343 +f 521/1373/344 520/1374/344 524/1375/344 525/1376/344 +f 520/1377/345 518/1378/345 522/1379/345 524/1380/345 +f 525/1381/346 523/1382/346 519/1383/346 521/1384/346 +f 529/1385/347 527/1386/347 526/1387/347 528/1388/347 +f 532/1389/348 530/1390/348 531/1391/348 533/1392/348 +f 526/1393/349 527/1394/349 531/1395/349 530/1396/349 +f 529/1397/350 528/1398/350 532/1399/350 533/1400/350 +f 528/1401/351 526/1402/351 530/1403/351 532/1404/351 +f 533/1405/352 531/1406/352 527/1407/352 529/1408/352 +usemtl common_bottom +f 535/1409/353 581/1410/353 580/1411/353 537/1412/353 +f 541/1413/354 578/1414/354 577/1415/354 539/1416/354 +usemtl common_bottom_painted +f 551/1417/355 591/1418/355 590/1419/355 576/1420/355 +usemtl common_bottom +f 579/1421/356 593/1422/356 592/1423/356 550/1424/356 +f 547/1425/357 597/1426/357 596/1427/357 548/1428/357 +f 550/1429/358 592/1430/358 591/1431/358 551/1432/358 +f 544/1433/359 584/1434/359 583/1435/359 543/1436/359 +f 542/1437/360 587/1438/360 586/1439/360 545/1440/360 +usemtl common_bottom_painted +f 546/1441/361 582/1442/361 587/1443/361 542/1444/361 +usemtl common_bottom +f 534/1445/362 547/1446/362 548/1447/362 536/1448/362 +f 545/1449/363 586/1450/363 585/1451/363 549/1452/363 +f 537/1453/364 580/1454/364 579/1455/364 550/1456/364 +f 537/1457/365 550/1458/365 551/1459/365 535/1460/365 +usemtl common_bottom_painted +f 551/1461/366 576/1462/366 581/1463/366 535/1464/366 +usemtl tracked_motorbike +f 555/1465/367 553/1466/367 552/1467/367 554/1468/367 +f 556/1469/368 524/1470/368 525/1471/368 557/1472/368 +f 554/1473/369 552/1474/369 524/1475/369 556/1476/369 +f 557/1477/370 525/1478/370 553/1479/370 555/1480/370 +f 559/1481/371 529/1482/371 528/1483/371 558/1484/371 +f 562/1485/372 560/1486/372 561/1487/372 563/1488/372 +f 558/1489/373 528/1490/373 560/1491/373 562/1492/373 +f 563/1493/374 561/1494/374 529/1495/374 559/1496/374 +f 565/1497/375 521/1498/375 520/1499/375 564/1500/375 +f 568/1501/376 566/1502/376 567/1503/376 569/1504/376 +f 564/1505/377 520/1506/377 566/1507/377 568/1508/377 +f 569/1509/378 567/1510/378 521/1511/378 565/1512/378 +f 573/1513/379 571/1514/379 570/1515/379 572/1516/379 +f 574/1517/380 532/1518/380 533/1519/380 575/1520/380 +f 572/1521/381 570/1522/381 532/1523/381 574/1524/381 +f 575/1525/382 533/1526/382 571/1527/382 573/1528/382 +usemtl common_bottom +f 543/1529/383 577/1530/383 578/1531/383 544/1532/383 +f 549/1533/384 579/1534/384 580/1535/384 545/1536/384 +f 545/1537/385 580/1538/385 581/1539/385 542/1540/385 +usemtl common_bottom_painted +f 542/1541/386 581/1542/386 576/1543/386 546/1544/386 +f 582/1545/387 588/1546/387 597/1547/387 547/1548/387 +usemtl common_bottom +f 538/1549/388 583/1550/388 584/1551/388 540/1552/388 +f 548/1553/389 596/1554/389 595/1555/389 585/1556/389 +f 548/1557/390 585/1558/390 586/1559/390 536/1560/390 +f 536/1561/391 586/1562/391 587/1563/391 534/1564/391 +usemtl common_bottom_painted +f 534/1565/392 587/1566/392 582/1567/392 547/1568/392 +f 583/1569/393 588/1570/393 589/1571/393 543/1572/393 +f 543/1573/394 589/1574/394 590/1575/394 577/1576/394 +f 577/1577/395 590/1578/395 591/1579/395 539/1580/395 +usemtl common_bottom +f 539/1581/396 591/1582/396 592/1583/396 541/1584/396 +f 541/1585/397 592/1586/397 593/1587/397 578/1588/397 +f 578/1589/398 593/1590/398 594/1591/398 544/1592/398 +f 544/1593/399 594/1594/399 595/1595/399 584/1596/399 +f 584/1597/400 595/1598/400 596/1599/400 540/1600/400 +f 540/1601/401 596/1602/401 597/1603/401 538/1604/401 +usemtl common_bottom_painted +f 538/1605/402 597/1606/402 588/1607/402 583/1608/402 +f 593/1609/403 590/1610/403 589/1611/403 588/1612/403 +f 588/1613/404 595/1614/404 594/1615/404 593/1616/404 +f 576/1617/405 579/1618/405 549/1619/405 585/1620/405 +f 585/1621/406 582/1622/406 546/1623/406 576/1624/406 +f 590/1625/407 593/1626/407 579/1627/407 576/1628/407 +f 588/1629/408 582/1630/408 585/1631/408 595/1632/408 +usemtl tracked_motorbike +f 603/1633/409 604/1634/409 606/1635/409 601/1636/409 +f 600/1637/410 605/1638/410 604/1639/410 603/1640/410 +f 602/1641/411 604/1642/411 605/1643/411 598/1644/411 +f 599/1645/412 606/1646/412 604/1647/412 602/1648/412 +o gear_change +v 0.125 1.2438 -0.0625 +v 0.125 1.2438 -0.125 +v 0.125 0.9313 -0.0625 +v 0.125 0.9313 -0.125 +v 0.0625 1.2438 -0.0625 +v 0.0625 1.2438 -0.125 +v 0.0625 0.9313 -0.0625 +v 0.0625 0.9313 -0.125 +v 0.125 0.6188 -0.0625 +v 0.125 0.6188 -0.125 +v 0.0625 0.6188 -0.0625 +v 0.0625 0.6188 -0.125 +v 0.1563 1.3688 -0.0312 +v 0.1563 1.3688 -0.1562 +v 0.1563 1.2438 -0.0312 +v 0.1563 1.2438 -0.1562 +v 0.0313 1.3688 -0.0312 +v 0.0313 1.3688 -0.1562 +v 0.0313 1.2438 -0.0312 +v 0.0313 1.2438 -0.1562 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.1563 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.1563 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.1563 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.1563 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.7188 0.1563 +vt 0.6563 0.1563 +vt 0.6563 0.0938 +vt 0.7188 0.0938 +vt 0.5938 0.0938 +vt 0.6563 0.0938 +vt 0.6563 0.1563 +vt 0.5938 0.1563 +vt 0.6875 0.0938 +vt 0.6875 0.1563 +vt 0.625 0.1563 +vt 0.625 0.0938 +vt 0.6563 0.0625 +vt 0.5938 0.0625 +vt 0.5938 0 +vt 0.6563 0 +vt 0.6875 0.0625 +vt 0.6875 0.125 +vt 0.625 0.125 +vt 0.625 0.0625 +vt 0.625 0.1875 +vt 0.625 0.125 +vt 0.6875 0.125 +vt 0.6875 0.1875 vn 1 0 0 +vn -1 0 0 vn 0 1 0 vn 0 0 1 vn 0 0 -1 vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 vn 0 0 1 vn 0 0 -1 vn 1 0 0 -vn 0 1 0 -vn 1 0 0 -vn -1 0 0 -vn 0 1 0 -vn 0 0 1 -vn 0 0 -1 -vn -1 0 0 -vn 0 0 1 -vn 0 0 -1 -vn -1 0 0 -vn 0 1 0 -vn -1 0 0 -vn 1 0 0 -vn -1 0 0 -vn 0 0 1 -vn 0 0 1 -vn -1 0 0 -vn 1 0 0 -vn 0 0 1 -vn 0 0 1 -vn 0 0 1 -vn 0 1 0 -vn 0 -1 0 -vn 1 0 0 -vn -1 0 0 -vn 1 0 0 -vn -1 0 0 -vn 0 0 -1 -vn 0 0 -1 -vn 1 0 0 -vn -1 0 0 -vn 0 0 -1 -vn 1 0 0 -vn 1 0 0 -vn -1 0 0 -vn -1 0 0 -vn 0 0 -1 vn -1 0 0 vn 0 1 0 +vn 0 -1 0 vn 0 0 1 vn 0 0 -1 +usemtl tracked_motorbike +f 610/1649/413 608/1650/413 607/1651/413 609/1652/413 +f 613/1653/414 611/1654/414 612/1655/414 614/1656/414 +f 607/1657/415 608/1658/415 612/1659/415 611/1660/415 +f 609/1661/416 607/1662/416 611/1663/416 613/1664/416 +f 614/1665/417 612/1666/417 608/1667/417 610/1668/417 +f 616/1669/418 610/1670/418 609/1671/418 615/1672/418 +f 617/1673/419 613/1674/419 614/1675/419 618/1676/419 +f 616/1677/420 615/1678/420 617/1679/420 618/1680/420 +f 615/1681/421 609/1682/421 613/1683/421 617/1684/421 +f 618/1685/422 614/1686/422 610/1687/422 616/1688/422 +f 622/1689/423 620/1690/423 619/1691/423 621/1692/423 +f 625/1693/424 623/1694/424 624/1695/424 626/1696/424 +f 619/1697/425 620/1698/425 624/1699/425 623/1700/425 +f 622/1701/426 621/1702/426 625/1703/426 626/1704/426 +f 621/1705/427 619/1706/427 623/1707/427 625/1708/427 +f 626/1709/428 624/1710/428 620/1711/428 622/1712/428 +o lever +v -0.125 1.1188 -0.2187 +v -0.125 1.1188 -0.2812 +v -0.125 0.8063 -0.2187 +v -0.125 0.8063 -0.2812 +v -0.1875 1.1188 -0.2187 +v -0.1875 1.1188 -0.2812 +v -0.1875 0.8063 -0.2187 +v -0.1875 0.8063 -0.2812 +v -0.125 0.4938 -0.2187 +v -0.125 0.4938 -0.2812 +v -0.1875 0.4938 -0.2187 +v -0.1875 0.4938 -0.2812 +v -0.0937 1.2438 -0.1875 +v -0.0937 1.2438 -0.3125 +v -0.0937 1.1188 -0.1875 +v -0.0937 1.1188 -0.3125 +v -0.2187 1.2438 -0.1875 +v -0.2187 1.2438 -0.3125 +v -0.2187 1.1188 -0.1875 +v -0.2187 1.1188 -0.3125 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.1563 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.1563 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.625 0.0313 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.0313 +vt 0.7188 0.1563 +vt 0.6563 0.1563 +vt 0.6563 0.0938 +vt 0.7188 0.0938 +vt 0.5938 0.0938 +vt 0.6563 0.0938 +vt 0.6563 0.1563 +vt 0.5938 0.1563 +vt 0.6875 0.0938 +vt 0.6875 0.1563 +vt 0.625 0.1563 +vt 0.625 0.0938 +vt 0.6563 0.0625 +vt 0.5938 0.0625 +vt 0.5938 0 +vt 0.6563 0 +vt 0.6875 0.0625 +vt 0.6875 0.125 +vt 0.625 0.125 +vt 0.625 0.0625 +vt 0.625 0.1875 +vt 0.625 0.125 +vt 0.6875 0.125 +vt 0.6875 0.1875 +vt 0.625 0.1563 +vt 0.625 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.1563 vn 1 0 0 vn -1 0 0 -vn 0 1 0 vn 0 0 1 vn 0 0 -1 vn 1 0 0 vn -1 0 0 -vn 0 1 0 +vn 0 -1 0 vn 0 0 1 vn 0 0 -1 vn 1 0 0 vn -1 0 0 vn 0 1 0 +vn 0 -1 0 vn 0 0 1 vn 0 0 -1 -vn 1 0 0 -vn -1 0 0 vn 0 1 0 -vn 0 -1 0 +usemtl tracked_motorbike +f 630/1713/429 628/1714/429 627/1715/429 629/1716/429 +f 633/1717/430 631/1718/430 632/1719/430 634/1720/430 +f 629/1721/431 627/1722/431 631/1723/431 633/1724/431 +f 634/1725/432 632/1726/432 628/1727/432 630/1728/432 +f 636/1729/433 630/1730/433 629/1731/433 635/1732/433 +f 637/1733/434 633/1734/434 634/1735/434 638/1736/434 +f 636/1737/435 635/1738/435 637/1739/435 638/1740/435 +f 635/1741/436 629/1742/436 633/1743/436 637/1744/436 +f 638/1745/437 634/1746/437 630/1747/437 636/1748/437 +f 642/1749/438 640/1750/438 639/1751/438 641/1752/438 +f 645/1753/439 643/1754/439 644/1755/439 646/1756/439 +f 639/1757/440 640/1758/440 644/1759/440 643/1760/440 +f 642/1761/441 641/1762/441 645/1763/441 646/1764/441 +f 641/1765/442 639/1766/442 643/1767/442 645/1768/442 +f 646/1769/443 644/1770/443 640/1771/443 642/1772/443 +f 627/1773/444 628/1774/444 632/1775/444 631/1776/444 +o cane +v -0.125 0.5313 0.25 +v -0.125 0.5313 -0.25 +v -0.125 0.4688 0.25 +v -0.125 0.4688 -0.25 +v -0.1875 0.5313 0.25 +v -0.1875 0.5313 -0.25 +v -0.1875 0.4688 0.25 +v -0.1875 0.4688 -0.25 +vt 0.1406 0.9688 +vt 0.1406 0.9844 +vt 0.0156 0.9844 +vt 0.0156 0.9688 +vt 0.1406 0.9688 +vt 0.1406 0.9844 +vt 0.0156 0.9844 +vt 0.0156 0.9688 +vt 0.0313 0.8594 +vt 0.0313 0.9844 +vt 0.0156 0.9844 +vt 0.0156 0.8594 +vt 0.0313 0.8594 +vt 0.0313 0.9844 +vt 0.0156 0.9844 +vt 0.0156 0.8594 +vt 0.0156 0.9844 +vt 0.0156 1 +vt 0 1 +vt 0 0.9844 +vt 0.0156 0.9844 +vt 0.0156 1 +vt 0 1 +vt 0 0.9844 vn 1 0 0 vn -1 0 0 vn 0 1 0 vn 0 -1 0 vn 0 0 1 vn 0 0 -1 -vn 1 0 0 -vn -1 0 0 +usemtl common_steel_norivets +f 650/1777/445 648/1778/445 647/1779/445 649/1780/445 +f 653/1781/446 651/1782/446 652/1783/446 654/1784/446 +f 647/1785/447 648/1786/447 652/1787/447 651/1788/447 +f 650/1789/448 649/1790/448 653/1791/448 654/1792/448 +f 649/1793/449 647/1794/449 651/1795/449 653/1796/449 +f 654/1797/450 652/1798/450 648/1799/450 650/1800/450 +o transmission +v -0.25 0.6563 2.125 +v -0.25 0.6563 1.9375 +v -0.25 0.4688 2.125 +v -0.25 0.4688 1.9375 +v -0.4375 0.6563 2.125 +v -0.4375 0.6563 1.9375 +v -0.4375 0.4688 2.125 +v -0.4375 0.4688 1.9375 +v 0.4375 0.6563 2.125 +v 0.4375 0.6563 1.9375 +v 0.4375 0.4688 2.125 +v 0.4375 0.4688 1.9375 +v 0.25 0.6563 2.125 +v 0.25 0.6563 1.9375 +v 0.25 0.4688 2.125 +v 0.25 0.4688 1.9375 +vt 0.5938 0.5 +vt 0.5469 0.5 +vt 0.5469 0.4531 +vt 0.5938 0.4531 +vt 0.5938 0.5 +vt 0.5469 0.5 +vt 0.5469 0.4531 +vt 0.5938 0.4531 +vt 0.5938 0.5 +vt 0.5469 0.5 +vt 0.5469 0.4531 +vt 0.5938 0.4531 +vt 0.5938 0.5 +vt 0.5469 0.5 +vt 0.5469 0.4531 +vt 0.5938 0.4531 +vt 0.5938 0.5 +vt 0.5469 0.5 +vt 0.5469 0.4531 +vt 0.5938 0.4531 +vt 0.5938 0.5 +vt 0.5469 0.5 +vt 0.5469 0.4531 +vt 0.5938 0.4531 +vt 0.5938 0.5 +vt 0.5469 0.5 +vt 0.5469 0.4531 +vt 0.5938 0.4531 +vt 0.5938 0.5 +vt 0.5469 0.5 +vt 0.5469 0.4531 +vt 0.5938 0.4531 vn 0 1 0 +vn 0 -1 0 vn 0 0 1 vn 0 0 -1 -vn 0 0 1 -vn -1 0 0 -vn 0 0 -1 -vn 1 0 0 -vn 0 0 1 -vn 0 0 -1 -vn 0 0 -1 vn 0 1 0 +vn 0 -1 0 vn 0 0 1 -vn 1 0 0 -vn 1 0 0 -vn 1 0 0 -vn -1 0 0 -vn 0 0.7071067811865476 -0.7071067811865476 -vn 0 0 1 -vn 0 0 -1 -vn 0 0.7071067811865476 -0.7071067811865476 -vn 0 0 -1 -vn 0 0 1 -vn -1 0 0 -vn 1 0 0 -vn 0 1 0 -vn -1 0 0 -vn 1 0 0 -vn -1 0 0 -vn 1 0 0 -vn 1 0 0 -vn 0 1 0 -vn -1 0 0 vn 0 0 -1 +usemtl common_cable_and_pipe +f 655/1801/451 656/1802/451 660/1803/451 659/1804/451 +f 658/1805/452 657/1806/452 661/1807/452 662/1808/452 +f 657/1809/453 655/1810/453 659/1811/453 661/1812/453 +f 662/1813/454 660/1814/454 656/1815/454 658/1816/454 +f 663/1817/455 664/1818/455 668/1819/455 667/1820/455 +f 666/1821/456 665/1822/456 669/1823/456 670/1824/456 +f 665/1825/457 663/1826/457 667/1827/457 669/1828/457 +f 670/1829/458 668/1830/458 664/1831/458 666/1832/458 +o armor_right +v 1.125 1.375 1.8125 +v 1.125 1.375 0.625 +v 1.0625 1.375 1.8125 +v 1.0625 1.375 0.625 +v 1.125 0.875 1.8125 +v 1.125 0.875 0.625 +v 1.0625 0.875 1.8125 +v 1.0625 0.875 0.625 +v 1.125 1.375 1.25 +v 1.125 0.875 1.25 +v 1.0625 0.875 1.25 +v 1.0625 1.375 1.25 +v 1.125 1.25 1.25 +v 1.125 1.25 1.8125 +v 1.0625 1.25 1.8125 +v 1.0625 1.25 1.25 +v 1.0625 1.25 0.625 +v 1.125 1.25 0.625 +vt 0.1563 1 +vt 0.1563 0.9844 +vt 0 0.9844 +vt 0 1 +vt 0.0938 1 +vt 0.0938 0.8438 +vt 0 0.8438 +vt 0 1 +vt 0.0938 0.4063 +vt 0.0938 0.25 +vt 0 0.25 +vt 0 0.4063 +vt 0.0938 1 +vt 0.0938 0.9844 +vt 0 0.9844 +vt 0 1 +vt 0.0313 0.9844 +vt 0.0313 1 +vt 0.125 1 +vt 0.125 0.9844 +vt 0.0938 0.3906 +vt 0.0938 0.25 +vt 0 0.25 +vt 0 0.3906 +vt 0.1563 0.9844 +vt 0.1563 1 +vt 0.2969 1 +vt 0.2969 0.9844 +vt 0.0938 1 +vt 0.0938 0.8594 +vt 0 0.8594 +vt 0 1 +vt 0.7188 0.25 +vt 0.7188 0.3906 +vt 0.75 0.3906 +vt 0.75 0.25 +vt 0.0781 0.9844 +vt 0.0781 1 +vt 0.1094 1 +vt 0.1094 0.9844 +vt 0.7188 0.8594 +vt 0.7188 1 +vt 0.75 1 +vt 0.75 0.8594 +vt 0.7188 0.25 +vt 0.7188 0.4063 +vt 0.75 0.4063 +vt 0.75 0.25 +vt 0.0313 1 +vt 0.0313 0.9844 +vt 0 0.9844 +vt 0 1 +vt 0.7188 0.8438 +vt 0.7188 1 +vt 0.75 1 +vt 0.75 0.8438 +vt 0.2969 1 +vt 0.2969 0.9844 +vt 0 0.9844 +vt 0 1 +vn 0 -1 0 vn 1 0 0 vn -1 0 0 -vn 0 1 0 -vn 0 0.1520571842539411 0.9883716976506172 -vn 1 0 0 -vn -1 0 0 -vn 0 1 0 -vn -1 0 0 -vn -1 0 0 -vn 1 0 0 -vn -1 0 0 -vn 0 1 0 -vn 1 0 0 -vn -1 0 0 -vn 1 0 0 -vn -1 0 0 -vn -1 0 0 -vn 0 1 0 -vn 1 0 0 -vn 1 0 0 -vn 0 1 0 -vn 0 0.1520571842539411 0.9883716976506172 -vn -1 0 0 -vn -1 0 0 -vn 0 1 0 vn 0 0 1 -vn 0 1 0 vn 0 0 -1 -vn -1 0 0 vn 1 0 0 -vn 0 1 0 vn 0 -1 0 -vn 0 0 -1 vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -vn 0 0 -1 +vn 1 0 0 vn 0 0 1 vn -1 0 0 -vn 0 0 -1 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 1 -vn 0 1 0 -vn 0 0 -1 -vn 1 0 0 -vn 1 0 0 vn -1 0 0 -vn 1 0 0 -vn 0 0.8 -0.6 -vn 0 -0.8 0.6 -vn 0 0 -1 -vn 0 0.8 -0.6 -vn 0 -0.8 0.6 vn 0 0 -1 -vn -1 0 0 vn 1 0 0 vn 0 1 0 +usemtl common_bottom_painted +f 680/1833/459 681/1834/459 678/1835/459 676/1836/459 +f 688/1837/460 683/1838/460 680/1839/460 676/1840/460 +usemtl common_bottom +f 686/1841/461 687/1842/461 678/1843/461 681/1844/461 +usemtl common_bottom_painted +f 684/1845/462 685/1846/462 677/1847/462 675/1848/462 +f 687/1849/463 688/1850/463 676/1851/463 678/1852/463 +f 683/1853/464 684/1854/464 675/1855/464 680/1856/464 +f 681/1857/465 680/1858/465 675/1859/465 677/1860/465 +usemtl common_bottom +f 685/1861/466 686/1862/466 681/1863/466 677/1864/466 +usemtl common_bottom_painted +f 684/1865/467 683/1866/467 679/1867/467 671/1868/467 +f 685/1869/468 684/1870/468 671/1871/468 673/1872/468 +usemtl common_bottom +f 686/1873/469 685/1874/469 673/1875/469 682/1876/469 +f 687/1877/470 686/1878/470 682/1879/470 674/1880/470 +usemtl common_bottom_painted +f 688/1881/471 687/1882/471 674/1883/471 672/1884/471 +f 683/1885/472 688/1886/472 672/1887/472 679/1888/472 +f 672/1889/473 674/1890/473 673/1891/473 671/1892/473 +o armor_left +v -1.125 1.375 1.8125 +v -1.125 1.375 0.625 +v -1.0625 1.375 1.8125 +v -1.0625 1.375 0.625 +v -1.125 0.875 1.8125 +v -1.125 0.875 0.625 +v -1.0625 0.875 1.8125 +v -1.0625 0.875 0.625 +v -1.125 1.375 1.25 +v -1.125 0.875 1.25 +v -1.0625 0.875 1.25 +v -1.0625 1.375 1.25 +v -1.125 1.25 1.25 +v -1.125 1.25 1.8125 +v -1.0625 1.25 1.8125 +v -1.0625 1.25 1.25 +v -1.0625 1.25 0.625 +v -1.125 1.25 0.625 +vt 0 0.9844 +vt 0.1563 0.9844 +vt 0.1563 1 +vt 0 1 +vt 0 0.8438 +vt 0.0938 0.8438 +vt 0.0938 1 +vt 0 1 +vt 0 0.25 +vt 0.0938 0.25 +vt 0.0938 0.4063 +vt 0 0.4063 +vt 0 0.9844 +vt 0.0938 0.9844 +vt 0.0938 1 +vt 0 1 +vt 0.125 1 +vt 0.0313 1 +vt 0.0313 0.9844 +vt 0.125 0.9844 +vt 0 0.25 +vt 0.0938 0.25 +vt 0.0938 0.3906 +vt 0 0.3906 +vt 0.2969 1 +vt 0.1563 1 +vt 0.1563 0.9844 +vt 0.2969 0.9844 +vt 0 0.8594 +vt 0.0938 0.8594 +vt 0.0938 1 +vt 0 1 +vt 0.75 0.3906 +vt 0.7188 0.3906 +vt 0.7188 0.25 +vt 0.75 0.25 +vt 0.1094 1 +vt 0.0781 1 +vt 0.0781 0.9844 +vt 0.1094 0.9844 +vt 0.75 1 +vt 0.7188 1 +vt 0.7188 0.8594 +vt 0.75 0.8594 +vt 0.75 0.4063 +vt 0.7188 0.4063 +vt 0.7188 0.25 +vt 0.75 0.25 +vt 0 0.9844 +vt 0.0313 0.9844 +vt 0.0313 1 +vt 0 1 +vt 0.75 1 +vt 0.7188 1 +vt 0.7188 0.8438 +vt 0.75 0.8438 +vt 0 0.9844 +vt 0.2969 0.9844 +vt 0.2969 1 +vt 0 1 vn 0 -1 0 -vn 0 1 0 -vn 0 -1 0 -vn 1 0 0 vn -1 0 0 -vn 0 0.773065801077826 0.6343258367778339 -vn 0 -0.7730666058142871 -0.63432485602787 -vn 0 -0.043609940372170336 0.9990486340017367 -vn 0 0.773065801077826 0.6343258367778339 -vn 0 -0.7730666058142871 -0.63432485602787 -vn 0 -0.043609940372170336 0.9990486340017367 -vn -1 0 0 -vn 1 0 0 -vn 0 -0.9990482503620459 -0.0436187281856661 -vn 0 0.9990482503620459 0.04361872818566612 -vn 0 -0.9990482503620459 -0.0436187281856661 -vn 0 0.9990482503620459 0.04361872818566612 vn 1 0 0 -vn -1 0 0 -vn 0 0.8 -0.6 -vn 0 -0.8 0.6 -vn 0 0 -1 -vn 0 0.8 -0.6 -vn 0 -0.8 0.6 +vn 0 0 1 vn 0 0 -1 -vn 1 0 0 vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 0 1 0 vn 0 -1 0 -vn -1 0 0 -vn 1 0 0 -vn 0 0.773065801077826 0.6343258367778339 -vn 0 -0.7730666058142871 -0.63432485602787 -vn 0 -0.043609940372170336 0.9990486340017367 -vn 0 0.773065801077826 0.6343258367778339 -vn 0 -0.7730666058142871 -0.63432485602787 -vn 0 -0.043609940372170336 0.9990486340017367 vn 1 0 0 vn -1 0 0 -vn 0 -0.9990482503620459 -0.0436187281856661 -vn 0 0.9990482503620459 0.04361872818566612 -vn 0 -0.9990482503620459 -0.0436187281856661 -vn 0 0.9990482503620459 0.04361872818566612 -vn 0.9848075091295173 -0.17364956078872126 0 -vn -0.9848075091295173 0.1736495607887212 0 -vn 0 0 1 -vn 0 0 -1 -vn 0.9848075091295174 -0.17364956078872126 0 -vn -0.9848075091295174 0.17364956078872124 0 -vn 0 0 1 -vn 0 0 -1 -vn 0.9848072075841259 -0.1736512709148901 0 -vn -0.9848075091295173 0.17364956078872112 0 -vn 0.17364886320761747 0.9848076321326427 0 -vn -0.1736477856007179 -0.9848078221439791 0 -vn 0 0 1 -vn 0 0 -1 -vn 0 1 0 -vn 0 -1 0 vn 0 0 1 vn 1 0 0 -vn -1 0 0 -vn 0 0.17364796311995498 0.9848077908426045 -vn 0 0.984807207584126 -0.17365127091488924 -vn 0 -0.9848072075841259 0.1736512709148899 vn 1 0 0 +vn 0 0 -1 vn -1 0 0 -vn 0 0.17364796311995498 0.9848077908426045 -vn 0 0.984807207584126 -0.17365127091488924 -vn 0 -0.9848072075841259 0.1736512709148899 -usemtl common_thingies -f 389/1001/251 387/1002/251 386/1003/251 -f 389/1001/251 386/1003/251 388/1004/251 -f 386/1005/252 387/1006/252 391/1007/252 -f 386/1005/252 391/1007/252 390/1008/252 -f 389/1009/253 388/1010/253 392/1011/253 -f 389/1009/253 392/1011/253 393/1012/253 -f 388/1013/254 386/1014/254 390/1015/254 -f 388/1013/254 390/1015/254 392/1016/254 -f 393/1017/255 391/1018/255 387/1019/255 -f 393/1017/255 387/1019/255 389/1020/255 -f 400/1021/256 398/1022/256 399/1023/256 -f 400/1021/256 399/1023/256 401/1024/256 -f 394/1025/257 395/1026/257 399/1027/257 -f 394/1025/257 399/1027/257 398/1028/257 -f 397/1029/258 396/1030/258 400/1031/258 -f 397/1029/258 400/1031/258 401/1032/258 -f 396/1033/259 394/1034/259 398/1035/259 -f 396/1033/259 398/1035/259 400/1036/259 -f 401/1037/260 399/1038/260 395/1039/260 -f 401/1037/260 395/1039/260 397/1040/260 -f 405/1041/261 403/1042/261 402/1043/261 -f 405/1041/261 402/1043/261 404/1044/261 -f 402/1045/262 403/1046/262 407/1047/262 -f 402/1045/262 407/1047/262 406/1048/262 -f 405/1049/263 404/1050/263 408/1051/263 -f 405/1049/263 408/1051/263 409/1052/263 -f 404/1053/264 402/1054/264 406/1055/264 -f 404/1053/264 406/1055/264 408/1056/264 -f 409/1057/265 407/1058/265 403/1059/265 -f 409/1057/265 403/1059/265 405/1060/265 -usemtl common_rough_steel_painted -f 419/1061/266 422/1062/266 426/1063/266 -f 419/1061/266 426/1063/266 415/1064/266 -usemtl common_rough_steel -f 426/1065/267 427/1066/267 434/1067/267 -f 426/1065/267 434/1067/267 415/1068/267 -usemtl common_rough_steel_painted -f 417/1069/268 432/1070/268 431/1071/268 -f 417/1069/268 431/1071/268 423/1072/268 -f 418/1073/269 429/1074/269 428/1075/269 -f 418/1073/269 428/1075/269 414/1076/269 -f 415/1077/270 434/1078/270 433/1079/270 -f 415/1077/270 433/1079/270 419/1080/270 -f 417/1081/271 423/1082/271 422/1083/271 -f 417/1081/271 422/1083/271 419/1084/271 -f 419/1085/272 433/1086/272 432/1087/272 -f 419/1085/272 432/1087/272 417/1088/272 -f 416/1089/273 430/1090/273 429/1091/273 -f 416/1089/273 429/1091/273 418/1092/273 -f 418/1093/274 422/1094/274 423/1095/274 -f 418/1093/274 423/1095/274 416/1096/274 -f 423/1097/275 431/1098/275 430/1099/275 -f 423/1097/275 430/1099/275 416/1100/275 -usemtl common_rough_steel -f 414/1101/276 428/1102/276 427/1103/276 -f 414/1101/276 427/1103/276 426/1104/276 -usemtl common_rough_steel_painted -f 414/1105/277 426/1106/277 422/1107/277 -f 414/1105/277 422/1107/277 418/1108/277 -usemtl common_rough_steel -f 425/1109/278 427/1110/278 428/1111/278 -f 425/1109/278 428/1111/278 410/1112/278 -usemtl common_rough_steel_painted -f 410/1113/279 428/1114/279 429/1115/279 -f 410/1113/279 429/1115/279 421/1116/279 -f 421/1117/280 429/1118/280 430/1119/280 -f 421/1117/280 430/1119/280 412/1120/280 -f 412/1121/281 430/1122/281 431/1123/281 -f 412/1121/281 431/1123/281 424/1124/281 -f 424/1125/282 431/1126/282 432/1127/282 -f 424/1125/282 432/1127/282 413/1128/282 -f 413/1129/283 432/1130/283 433/1131/283 -f 413/1129/283 433/1131/283 420/1132/283 -f 420/1133/284 433/1134/284 434/1135/284 -f 420/1133/284 434/1135/284 411/1136/284 -usemtl common_rough_steel -f 411/1137/285 434/1138/285 427/1139/285 -f 411/1137/285 427/1139/285 425/1140/285 -usemtl common_steel_norivets -f 441/1141/286 439/1142/286 440/1143/286 -f 441/1141/286 440/1143/286 442/1144/286 -f 435/1145/287 436/1146/287 440/1147/287 -f 435/1145/287 440/1147/287 439/1148/287 -f 437/1149/288 435/1150/288 439/1151/288 -f 437/1149/288 439/1151/288 441/1152/288 -f 442/1153/289 440/1154/289 436/1155/289 -f 442/1153/289 436/1155/289 438/1156/289 -f 449/1157/290 447/1158/290 448/1159/290 -f 449/1157/290 448/1159/290 450/1160/290 -f 443/1161/291 444/1162/291 448/1163/291 -f 443/1161/291 448/1163/291 447/1164/291 -f 445/1165/292 443/1166/292 447/1167/292 -f 445/1165/292 447/1167/292 449/1168/292 -f 450/1169/293 448/1170/293 444/1171/293 -f 450/1169/293 444/1171/293 446/1172/293 -usemtl common_rough_steel_painted -f 468/1173/294 463/1174/294 460/1175/294 -f 468/1173/294 460/1175/294 456/1176/294 -usemtl common_rough_steel -f 466/1177/295 467/1178/295 458/1179/295 -f 466/1177/295 458/1179/295 461/1180/295 -usemtl common_steel_painted_norivets -f 464/1181/296 465/1182/296 457/1183/296 -f 464/1181/296 457/1183/296 455/1184/296 -f 467/1185/297 468/1186/297 456/1187/297 -f 467/1185/297 456/1187/297 458/1188/297 -usemtl common_rough_steel_painted -f 463/1189/298 464/1190/298 455/1191/298 -f 463/1189/298 455/1191/298 460/1192/298 -usemtl common_rough_steel -f 465/1193/299 466/1194/299 461/1195/299 -f 465/1193/299 461/1195/299 457/1196/299 -usemtl common_steel_painted_norivets -f 464/1197/300 463/1198/300 459/1199/300 -f 464/1197/300 459/1199/300 451/1200/300 -f 465/1201/301 464/1202/301 451/1203/301 -f 465/1201/301 451/1203/301 453/1204/301 -usemtl common_rough_steel -f 466/1205/302 465/1206/302 453/1207/302 -f 466/1205/302 453/1207/302 462/1208/302 -f 467/1209/303 466/1210/303 462/1211/303 -f 467/1209/303 462/1211/303 454/1212/303 -usemtl common_steel_painted_norivets -f 468/1213/304 467/1214/304 454/1215/304 -f 468/1213/304 454/1215/304 452/1216/304 -f 463/1217/305 468/1218/305 452/1219/305 -f 463/1217/305 452/1219/305 459/1220/305 -usemtl tracked_motorbike -f 472/1221/306 470/1222/306 469/1223/306 -f 472/1221/306 469/1223/306 471/1224/306 -f 475/1225/307 473/1226/307 474/1227/307 -f 475/1225/307 474/1227/307 476/1228/307 -f 469/1229/308 470/1230/308 474/1231/308 -f 469/1229/308 474/1231/308 473/1232/308 -f 472/1233/309 471/1234/309 475/1235/309 -f 472/1233/309 475/1235/309 476/1236/309 -f 471/1237/310 469/1238/310 473/1239/310 -f 471/1237/310 473/1239/310 475/1240/310 -f 476/1241/311 474/1242/311 470/1243/311 -f 476/1241/311 470/1243/311 472/1244/311 -f 478/1245/312 472/1246/312 471/1247/312 -f 478/1245/312 471/1247/312 477/1248/312 -f 481/1249/313 479/1250/313 480/1251/313 -f 481/1249/313 480/1251/313 482/1252/313 -f 477/1253/314 471/1254/314 479/1255/314 -f 477/1253/314 479/1255/314 481/1256/314 -f 482/1257/315 480/1258/315 472/1259/315 -f 482/1257/315 472/1259/315 478/1260/315 -f 486/1261/316 484/1262/316 483/1263/316 -f 486/1261/316 483/1263/316 485/1264/316 -f 487/1265/317 475/1266/317 476/1267/317 -f 487/1265/317 476/1267/317 488/1268/317 -f 485/1269/318 483/1270/318 475/1271/318 -f 485/1269/318 475/1271/318 487/1272/318 -f 488/1273/319 476/1274/319 484/1275/319 -f 488/1273/319 484/1275/319 486/1276/319 -f 492/1277/320 490/1278/320 489/1279/320 -f 492/1277/320 489/1279/320 491/1280/320 -f 495/1281/321 493/1282/321 494/1283/321 -f 495/1281/321 494/1283/321 496/1284/321 -f 489/1285/322 490/1286/322 494/1287/322 -f 489/1285/322 494/1287/322 493/1288/322 -f 492/1289/323 491/1290/323 495/1291/323 -f 492/1289/323 495/1291/323 496/1292/323 -f 491/1293/324 489/1294/324 493/1295/324 -f 491/1293/324 493/1295/324 495/1296/324 -f 496/1297/325 494/1298/325 490/1299/325 -f 496/1297/325 490/1299/325 492/1300/325 -f 498/1301/326 492/1302/326 491/1303/326 -f 498/1301/326 491/1303/326 497/1304/326 -f 501/1305/327 499/1306/327 500/1307/327 -f 501/1305/327 500/1307/327 502/1308/327 -f 497/1309/328 491/1310/328 499/1311/328 -f 497/1309/328 499/1311/328 501/1312/328 -f 502/1313/329 500/1314/329 492/1315/329 -f 502/1313/329 492/1315/329 498/1316/329 -f 506/1317/330 504/1318/330 503/1319/330 -f 506/1317/330 503/1319/330 505/1320/330 -f 507/1321/331 495/1322/331 496/1323/331 -f 507/1321/331 496/1323/331 508/1324/331 -f 505/1325/332 503/1326/332 495/1327/332 -f 505/1325/332 495/1327/332 507/1328/332 -f 508/1329/333 496/1330/333 504/1331/333 -f 508/1329/333 504/1331/333 506/1332/333 -usemtl common_rough_steel_painted -f 518/1333/334 521/1334/334 525/1335/334 -f 518/1333/334 525/1335/334 514/1336/334 -f 525/1337/335 526/1338/335 533/1339/335 -f 525/1337/335 533/1339/335 514/1340/335 -usemtl common_rough_steel -f 516/1341/336 531/1342/336 530/1343/336 -f 516/1341/336 530/1343/336 522/1344/336 -usemtl common_rough_steel_painted -f 517/1345/337 528/1346/337 527/1347/337 -f 517/1345/337 527/1347/337 513/1348/337 -f 514/1349/338 533/1350/338 532/1351/338 -f 514/1349/338 532/1351/338 518/1352/338 -f 516/1353/339 522/1354/339 521/1355/339 -f 516/1353/339 521/1355/339 518/1356/339 -f 518/1357/340 532/1358/340 531/1359/340 -f 518/1357/340 531/1359/340 516/1360/340 -f 515/1361/341 529/1362/341 528/1363/341 -f 515/1361/341 528/1363/341 517/1364/341 -f 517/1365/342 521/1366/342 522/1367/342 -f 517/1365/342 522/1367/342 515/1368/342 -usemtl common_rough_steel -f 522/1369/343 530/1370/343 529/1371/343 -f 522/1369/343 529/1371/343 515/1372/343 -usemtl common_rough_steel_painted -f 513/1373/344 527/1374/344 526/1375/344 -f 513/1373/344 526/1375/344 525/1376/344 -f 513/1377/345 525/1378/345 521/1379/345 -f 513/1377/345 521/1379/345 517/1380/345 -f 524/1381/346 526/1382/346 527/1383/346 -f 524/1381/346 527/1383/346 509/1384/346 -f 509/1385/347 527/1386/347 528/1387/347 -f 509/1385/347 528/1387/347 520/1388/347 -f 520/1389/348 528/1390/348 529/1391/348 -f 520/1389/348 529/1391/348 511/1392/348 -usemtl common_rough_steel -f 511/1393/349 529/1394/349 530/1395/349 -f 511/1393/349 530/1395/349 523/1396/349 -f 523/1397/350 530/1398/350 531/1399/350 -f 523/1397/350 531/1399/350 512/1400/350 -usemtl common_rough_steel_painted -f 512/1401/351 531/1402/351 532/1403/351 -f 512/1401/351 532/1403/351 519/1404/351 -f 519/1405/352 532/1406/352 533/1407/352 -f 519/1405/352 533/1407/352 510/1408/352 -f 510/1409/353 533/1410/353 526/1411/353 -f 510/1409/353 526/1411/353 524/1412/353 -usemtl common_steel_norivets -f 540/1413/354 538/1414/354 539/1415/354 -f 540/1413/354 539/1415/354 541/1416/354 -f 534/1417/355 535/1418/355 539/1419/355 -f 534/1417/355 539/1419/355 538/1420/355 -f 536/1421/356 534/1422/356 538/1423/356 -f 536/1421/356 538/1423/356 540/1424/356 -f 541/1425/357 539/1426/357 535/1427/357 -f 541/1425/357 535/1427/357 537/1428/357 -usemtl common_thingies -f 548/1429/358 546/1430/358 547/1431/358 -f 548/1429/358 547/1431/358 549/1432/358 -f 542/1433/359 543/1434/359 547/1435/359 -f 542/1433/359 547/1435/359 546/1436/359 -f 545/1437/360 544/1438/360 548/1439/360 -f 545/1437/360 548/1439/360 549/1440/360 -f 544/1441/361 542/1442/361 546/1443/361 -f 544/1441/361 546/1443/361 548/1444/361 -f 549/1445/362 547/1446/362 543/1447/362 -f 549/1445/362 543/1447/362 545/1448/362 -usemtl common_rough_steel_painted -f 559/1449/363 562/1450/363 567/1451/363 -f 559/1449/363 567/1451/363 555/1452/363 -usemtl common_rough_steel -f 557/1453/364 566/1454/364 565/1455/364 -f 557/1453/364 565/1455/364 560/1456/364 -usemtl common_steel_painted_norivets -f 556/1457/365 564/1458/365 563/1459/365 -f 556/1457/365 563/1459/365 554/1460/365 -f 555/1461/366 567/1462/366 566/1463/366 -f 555/1461/366 566/1463/366 557/1464/366 -usemtl common_rough_steel_painted -f 554/1465/367 563/1466/367 562/1467/367 -f 554/1465/367 562/1467/367 559/1468/367 -usemtl common_rough_steel -f 560/1469/368 565/1470/368 564/1471/368 -f 560/1469/368 564/1471/368 556/1472/368 -usemtl common_steel_painted_norivets -f 558/1473/369 562/1474/369 563/1475/369 -f 558/1473/369 563/1475/369 550/1476/369 -f 550/1477/370 563/1478/370 564/1479/370 -f 550/1477/370 564/1479/370 552/1480/370 -usemtl common_rough_steel -f 552/1481/371 564/1482/371 565/1483/371 -f 552/1481/371 565/1483/371 561/1484/371 -f 561/1485/372 565/1486/372 566/1487/372 -f 561/1485/372 566/1487/372 553/1488/372 -usemtl common_steel_painted_norivets -f 553/1489/373 566/1490/373 567/1491/373 -f 553/1489/373 567/1491/373 551/1492/373 -f 551/1493/374 567/1494/374 562/1495/374 -f 551/1493/374 562/1495/374 558/1496/374 -usemtl tracked_motorbike -f 571/1497/375 569/1498/375 568/1499/375 -f 571/1497/375 568/1499/375 570/1500/375 -f 574/1501/376 572/1502/376 573/1503/376 -f 574/1501/376 573/1503/376 575/1504/376 -f 568/1505/377 569/1506/377 573/1507/377 -f 568/1505/377 573/1507/377 572/1508/377 -f 571/1509/378 570/1510/378 574/1511/378 -f 571/1509/378 574/1511/378 575/1512/378 -f 570/1513/379 568/1514/379 572/1515/379 -f 570/1513/379 572/1515/379 574/1516/379 -f 575/1517/380 573/1518/380 569/1519/380 -f 575/1517/380 569/1519/380 571/1520/380 -f 577/1521/381 571/1522/381 570/1523/381 -f 577/1521/381 570/1523/381 576/1524/381 -f 580/1525/382 578/1526/382 579/1527/382 -f 580/1525/382 579/1527/382 581/1528/382 -f 576/1529/383 570/1530/383 578/1531/383 -f 576/1529/383 578/1531/383 580/1532/383 -f 581/1533/384 579/1534/384 571/1535/384 -f 581/1533/384 571/1535/384 577/1536/384 -f 585/1537/385 583/1538/385 582/1539/385 -f 585/1537/385 582/1539/385 584/1540/385 -f 586/1541/386 574/1542/386 575/1543/386 -f 586/1541/386 575/1543/386 587/1544/386 -f 584/1545/387 582/1546/387 574/1547/387 -f 584/1545/387 574/1547/387 586/1548/387 -f 587/1549/388 575/1550/388 583/1551/388 -f 587/1549/388 583/1551/388 585/1552/388 -f 591/1553/389 589/1554/389 588/1555/389 -f 591/1553/389 588/1555/389 590/1556/389 -f 594/1557/390 592/1558/390 593/1559/390 -f 594/1557/390 593/1559/390 595/1560/390 -f 588/1561/391 589/1562/391 593/1563/391 -f 588/1561/391 593/1563/391 592/1564/391 -f 591/1565/392 590/1566/392 594/1567/392 -f 591/1565/392 594/1567/392 595/1568/392 -f 590/1569/393 588/1570/393 592/1571/393 -f 590/1569/393 592/1571/393 594/1572/393 -f 595/1573/394 593/1574/394 589/1575/394 -f 595/1573/394 589/1575/394 591/1576/394 -f 597/1577/395 591/1578/395 590/1579/395 -f 597/1577/395 590/1579/395 596/1580/395 -f 600/1581/396 598/1582/396 599/1583/396 -f 600/1581/396 599/1583/396 601/1584/396 -f 596/1585/397 590/1586/397 598/1587/397 -f 596/1585/397 598/1587/397 600/1588/397 -f 601/1589/398 599/1590/398 591/1591/398 -f 601/1589/398 591/1591/398 597/1592/398 -f 605/1593/399 603/1594/399 602/1595/399 -f 605/1593/399 602/1595/399 604/1596/399 -f 606/1597/400 594/1598/400 595/1599/400 -f 606/1597/400 595/1599/400 607/1600/400 -f 604/1601/401 602/1602/401 594/1603/401 -f 604/1601/401 594/1603/401 606/1604/401 -f 607/1605/402 595/1606/402 603/1607/402 -f 607/1605/402 603/1607/402 605/1608/402 -usemtl common_steel_norivets -f 614/1609/403 612/1610/403 613/1611/403 -f 614/1609/403 613/1611/403 615/1612/403 -f 608/1613/404 609/1614/404 613/1615/404 -f 608/1613/404 613/1615/404 612/1616/404 -f 610/1617/405 608/1618/405 612/1619/405 -f 610/1617/405 612/1619/405 614/1620/405 -f 615/1621/406 613/1622/406 609/1623/406 -f 615/1621/406 609/1623/406 611/1624/406 -usemtl tracked_motorbike -f 616/1625/407 617/1626/407 620/1627/407 -f 616/1625/407 620/1627/407 619/1628/407 -f 621/1629/408 620/1630/408 617/1631/408 -f 621/1629/408 617/1631/408 618/1632/408 -f 618/1633/409 617/1634/409 616/1635/409 -f 618/1633/409 616/1635/409 622/1636/409 -f 623/1637/410 631/1638/410 634/1639/410 -f 623/1637/410 634/1639/410 627/1640/410 -f 629/1641/411 633/1642/411 632/1643/411 -f 629/1641/411 632/1643/411 625/1644/411 -f 630/1645/412 628/1646/412 624/1647/412 -f 630/1645/412 624/1647/412 626/1648/412 -f 626/1649/413 632/1650/413 633/1651/413 -f 626/1649/413 633/1651/413 630/1652/413 -f 628/1653/414 634/1654/414 631/1655/414 -f 628/1653/414 631/1655/414 624/1656/414 -usemtl common_thingies -f 638/1657/415 636/1658/415 635/1659/415 -f 638/1657/415 635/1659/415 637/1660/415 -f 641/1661/416 639/1662/416 640/1663/416 -f 641/1661/416 640/1663/416 642/1664/416 -f 635/1665/417 636/1666/417 640/1667/417 -f 635/1665/417 640/1667/417 639/1668/417 -f 638/1669/418 637/1670/418 641/1671/418 -f 638/1669/418 641/1671/418 642/1672/418 -f 642/1673/419 640/1674/419 636/1675/419 -f 642/1673/419 636/1675/419 638/1676/419 -usemtl tracked_motorbike -f 625/1677/420 626/1678/420 624/1679/420 -f 625/1677/420 624/1679/420 623/1680/420 -f 630/1681/421 629/1682/421 627/1683/421 -f 630/1681/421 627/1683/421 628/1684/421 -f 649/1685/422 647/1686/422 648/1687/422 -f 649/1685/422 648/1687/422 650/1688/422 -f 643/1689/423 644/1690/423 648/1691/423 -f 643/1689/423 648/1691/423 647/1692/423 -f 645/1693/424 643/1694/424 647/1695/424 -f 645/1693/424 647/1695/424 649/1696/424 -f 650/1697/425 648/1698/425 644/1699/425 -f 650/1697/425 644/1699/425 646/1700/425 -f 654/1701/426 652/1702/426 651/1703/426 -f 654/1701/426 651/1703/426 653/1704/426 -f 657/1705/427 655/1706/427 656/1707/427 -f 657/1705/427 656/1707/427 658/1708/427 -f 651/1709/428 652/1710/428 656/1711/428 -f 651/1709/428 656/1711/428 655/1712/428 -f 654/1713/429 653/1714/429 657/1715/429 -f 654/1713/429 657/1715/429 658/1716/429 -f 653/1717/430 651/1718/430 655/1719/430 -f 653/1717/430 655/1719/430 657/1720/430 -f 658/1721/431 656/1722/431 652/1723/431 -f 658/1721/431 652/1723/431 654/1724/431 -usemtl pipe34 -f 662/1725/432 660/1726/432 659/1727/432 -f 662/1725/432 659/1727/432 661/1728/432 -f 665/1729/433 663/1730/433 664/1731/433 -f 665/1729/433 664/1731/433 666/1732/433 -f 659/1733/434 660/1734/434 664/1735/434 -f 659/1733/434 664/1735/434 663/1736/434 -f 662/1737/435 661/1738/435 665/1739/435 -f 662/1737/435 665/1739/435 666/1740/435 -f 666/1741/436 664/1742/436 669/1743/436 -f 666/1741/436 669/1743/436 670/1744/436 -f 660/1745/437 667/1746/437 669/1747/437 -f 660/1745/437 669/1747/437 664/1748/437 -f 668/1749/438 662/1750/438 666/1751/438 -f 668/1749/438 666/1751/438 670/1752/438 -f 670/1753/439 669/1754/439 667/1755/439 -f 670/1753/439 667/1755/439 668/1756/439 -usemtl common_rough_steel -f 671/1757/440 951/1758/440 950/1759/440 -f 671/1757/440 950/1759/440 672/1760/440 -usemtl tracked_motorbike2_paint -f 677/1761/441 675/1762/441 676/1763/441 -f 677/1761/441 676/1763/441 678/1764/441 -usemtl common_steel_painted_norivets -f 671/1765/442 672/1766/442 676/1767/442 -f 671/1765/442 676/1767/442 675/1768/442 -usemtl tracked_motorbike -f 682/1769/443 680/1770/443 679/1771/443 -f 682/1769/443 679/1771/443 681/1772/443 -f 685/1773/444 683/1774/444 684/1775/444 -f 685/1773/444 684/1775/444 686/1776/444 -f 679/1777/445 680/1778/445 684/1779/445 -f 679/1777/445 684/1779/445 683/1780/445 -f 681/1781/446 679/1782/446 683/1783/446 -f 681/1781/446 683/1783/446 685/1784/446 -f 686/1785/447 684/1786/447 680/1787/447 -f 686/1785/447 680/1787/447 682/1788/447 -f 689/1789/448 687/1790/448 681/1791/448 -f 689/1789/448 681/1791/448 688/1792/448 -f 691/1793/449 685/1794/449 690/1795/449 -f 691/1793/449 690/1795/449 692/1796/449 -f 681/1797/450 687/1798/450 690/1799/450 -f 681/1797/450 690/1799/450 685/1800/450 -f 689/1801/451 688/1802/451 691/1803/451 -f 689/1801/451 691/1803/451 692/1804/451 -f 688/1805/452 681/1806/452 685/1807/452 -f 688/1805/452 685/1807/452 691/1808/452 -usemtl tracked_motorbike2_paint -f 694/1809/453 700/1810/453 703/1811/453 -f 694/1809/453 703/1811/453 693/1812/453 -f 696/1813/454 702/1814/454 701/1815/454 -f 696/1813/454 701/1815/454 698/1816/454 -usemtl common_rough_steel -f 696/1817/455 708/1818/455 707/1819/455 -f 696/1817/455 707/1819/455 702/1820/455 -f 701/1821/456 704/1822/456 709/1823/456 -f 701/1821/456 709/1823/456 698/1824/456 -usemtl tracked_motorbike2_paint -f 698/1825/457 709/1826/457 708/1827/457 -f 698/1825/457 708/1827/457 696/1828/457 -usemtl common_rough_steel -f 699/1829/458 705/1830/458 704/1831/458 -f 699/1829/458 704/1831/458 701/1832/458 -usemtl tracked_motorbike2_paint -f 699/1833/459 701/1834/459 702/1835/459 -f 699/1833/459 702/1835/459 697/1836/459 -usemtl common_rough_steel -f 702/1837/460 707/1838/460 706/1839/460 -f 702/1837/460 706/1839/460 697/1840/460 -usemtl tracked_motorbike2_paint -f 677/1841/461 703/1842/461 700/1843/461 -f 677/1841/461 700/1843/461 695/1844/461 -usemtl common_rough_steel -f 700/1845/462 704/1846/462 705/1847/462 -f 700/1845/462 705/1847/462 695/1848/462 -f 677/1849/463 706/1850/463 707/1851/463 -f 677/1849/463 707/1851/463 703/1852/463 -f 703/1853/464 707/1854/464 708/1855/464 -f 703/1853/464 708/1855/464 693/1856/464 -usemtl tracked_motorbike2_paint -f 693/1857/465 708/1858/465 709/1859/465 -f 693/1857/465 709/1859/465 694/1860/465 -usemtl common_rough_steel -f 694/1861/466 709/1862/466 704/1863/466 -f 694/1861/466 704/1863/466 700/1864/466 -usemtl common_bottom -f 711/1865/467 710/1866/467 712/1867/467 -f 711/1865/467 712/1867/467 713/1868/467 -usemtl tracked_motorbike -f 717/1869/468 715/1870/468 714/1871/468 -f 717/1869/468 714/1871/468 716/1872/468 -f 720/1873/469 718/1874/469 719/1875/469 -f 720/1873/469 719/1875/469 721/1876/469 -f 714/1877/470 715/1878/470 719/1879/470 -f 714/1877/470 719/1879/470 718/1880/470 -f 717/1881/471 716/1882/471 720/1883/471 -f 717/1881/471 720/1883/471 721/1884/471 -f 716/1885/472 714/1886/472 718/1887/472 -f 716/1885/472 718/1887/472 720/1888/472 -f 721/1889/473 719/1890/473 715/1891/473 -f 721/1889/473 715/1891/473 717/1892/473 -f 725/1893/474 723/1894/474 722/1895/474 -f 725/1893/474 722/1895/474 724/1896/474 -f 728/1897/475 726/1898/475 727/1899/475 -f 728/1897/475 727/1899/475 729/1900/475 -f 722/1901/476 723/1902/476 727/1903/476 -f 722/1901/476 727/1903/476 726/1904/476 -f 725/1905/477 724/1906/477 728/1907/477 -f 725/1905/477 728/1907/477 729/1908/477 -f 724/1909/478 722/1910/478 726/1911/478 -f 724/1909/478 726/1911/478 728/1912/478 -f 729/1913/479 727/1914/479 723/1915/479 -f 729/1913/479 723/1915/479 725/1916/479 -usemtl common_steel_norivets -f 733/1917/480 731/1918/480 730/1919/480 -f 733/1917/480 730/1919/480 732/1920/480 -f 736/1921/481 734/1922/481 735/1923/481 -f 736/1921/481 735/1923/481 737/1924/481 -usemtl tracked_motorbike -f 730/1925/482 731/1926/482 735/1927/482 -f 730/1925/482 735/1927/482 734/1928/482 -usemtl common_rough_steel -f 739/1929/483 751/1930/483 750/1931/483 -f 739/1929/483 750/1931/483 746/1932/483 -f 743/1933/484 752/1934/484 751/1935/484 -f 743/1933/484 751/1935/484 739/1936/484 -f 742/1937/485 748/1938/485 747/1939/485 -f 742/1937/485 747/1939/485 738/1940/485 -f 739/1941/486 746/1942/486 749/1943/486 -f 739/1941/486 749/1943/486 743/1944/486 -f 746/1945/487 750/1946/487 753/1947/487 -f 746/1945/487 753/1947/487 741/1948/487 -f 740/1949/488 747/1950/488 748/1951/488 -f 740/1949/488 748/1951/488 744/1952/488 -f 745/1953/489 749/1954/489 746/1955/489 -f 745/1953/489 746/1955/489 741/1956/489 -f 747/1957/490 750/1958/490 751/1959/490 -f 747/1957/490 751/1959/490 738/1960/490 -f 738/1961/491 751/1962/491 752/1963/491 -f 738/1961/491 752/1963/491 742/1964/491 -f 740/1965/492 753/1966/492 750/1967/492 -f 740/1965/492 750/1967/492 747/1968/492 -f 766/1969/493 767/1970/493 755/1971/493 -f 766/1969/493 755/1971/493 762/1972/493 -f 767/1973/494 768/1974/494 759/1975/494 -f 767/1973/494 759/1975/494 755/1976/494 -f 763/1977/495 764/1978/495 758/1979/495 -f 763/1977/495 758/1979/495 754/1980/495 -f 765/1981/496 762/1982/496 755/1983/496 -f 765/1981/496 755/1983/496 759/1984/496 -f 769/1985/497 766/1986/497 762/1987/497 -f 769/1985/497 762/1987/497 757/1988/497 -f 764/1989/498 763/1990/498 756/1991/498 -f 764/1989/498 756/1991/498 760/1992/498 -f 762/1993/499 765/1994/499 761/1995/499 -f 762/1993/499 761/1995/499 757/1996/499 -f 767/1997/500 766/1998/500 763/1999/500 -f 767/1997/500 763/1999/500 754/2000/500 -f 768/2001/501 767/2002/501 754/2003/501 -f 768/2001/501 754/2003/501 758/2004/501 -f 766/2005/502 769/2006/502 756/2007/502 -f 766/2005/502 756/2007/502 763/2008/502 -usemtl tracked_motorbike -f 770/2009/503 778/2010/503 781/2011/503 -f 770/2009/503 781/2011/503 771/2012/503 -f 775/2013/504 780/2014/504 779/2015/504 -f 775/2013/504 779/2015/504 774/2016/504 -f 779/2017/505 782/2018/505 784/2019/505 -f 779/2017/505 784/2019/505 774/2020/505 -f 776/2021/506 783/2022/506 782/2023/506 -f 776/2021/506 782/2023/506 779/2024/506 -f 776/2025/507 779/2026/507 780/2027/507 -f 776/2025/507 780/2027/507 777/2028/507 -f 773/2029/508 781/2030/508 778/2031/508 -f 773/2029/508 778/2031/508 772/2032/508 -f 778/2033/509 782/2034/509 783/2035/509 -f 778/2033/509 783/2035/509 772/2036/509 -f 770/2037/510 784/2038/510 782/2039/510 -f 770/2037/510 782/2039/510 778/2040/510 -usemtl common_thingies -f 791/2041/511 789/2042/511 790/2043/511 -f 791/2041/511 790/2043/511 792/2044/511 -f 785/2045/512 786/2046/512 790/2047/512 -f 785/2045/512 790/2047/512 789/2048/512 -f 788/2049/513 787/2050/513 791/2051/513 -f 788/2049/513 791/2051/513 792/2052/513 -f 787/2053/514 785/2054/514 789/2055/514 -f 787/2053/514 789/2055/514 791/2056/514 -f 792/2057/515 790/2058/515 786/2059/515 -f 792/2057/515 786/2059/515 788/2060/515 -usemtl common_steel_norivets -f 793/2061/516 810/2062/516 809/2063/516 -f 793/2061/516 809/2063/516 803/2064/516 -f 806/2065/517 812/2066/517 811/2067/517 -f 806/2065/517 811/2067/517 797/2068/517 -f 794/2069/518 808/2070/518 807/2071/518 -f 794/2069/518 807/2071/518 801/2072/518 -f 801/2073/519 807/2074/519 813/2075/519 -f 801/2073/519 813/2075/519 798/2076/519 -f 803/2077/520 809/2078/520 808/2079/520 -f 803/2077/520 808/2079/520 794/2080/520 -f 798/2081/521 813/2082/521 812/2083/521 -f 798/2081/521 812/2083/521 806/2084/521 -f 802/2085/522 807/2086/522 808/2087/522 -f 802/2085/522 808/2087/522 796/2088/522 -f 796/2089/523 808/2090/523 809/2091/523 -f 796/2089/523 809/2091/523 804/2092/523 -f 804/2093/524 809/2094/524 810/2095/524 -f 804/2093/524 810/2095/524 795/2096/524 -f 799/2097/525 811/2098/525 812/2099/525 -f 799/2097/525 812/2099/525 805/2100/525 -f 805/2101/526 812/2102/526 813/2103/526 -f 805/2101/526 813/2103/526 800/2104/526 -f 800/2105/527 813/2106/527 807/2107/527 -f 800/2105/527 807/2107/527 802/2108/527 -usemtl tracked_motorbike -f 820/2109/528 818/2110/528 819/2111/528 -f 820/2109/528 819/2111/528 821/2112/528 -f 814/2113/529 815/2114/529 819/2115/529 -f 814/2113/529 819/2115/529 818/2116/529 -f 816/2117/530 814/2118/530 818/2119/530 -f 816/2117/530 818/2119/530 820/2120/530 -f 821/2121/531 819/2122/531 815/2123/531 -f 821/2121/531 815/2123/531 817/2124/531 -f 825/2125/532 823/2126/532 822/2127/532 -f 825/2125/532 822/2127/532 824/2128/532 -f 828/2129/533 826/2130/533 827/2131/533 -f 828/2129/533 827/2131/533 829/2132/533 -f 822/2133/534 823/2134/534 827/2135/534 -f 822/2133/534 827/2135/534 826/2136/534 -f 824/2137/535 822/2138/535 826/2139/535 -f 824/2137/535 826/2139/535 828/2140/535 -f 829/2141/536 827/2142/536 823/2143/536 -f 829/2141/536 823/2143/536 825/2144/536 -f 833/2145/537 831/2146/537 830/2147/537 -f 833/2145/537 830/2147/537 832/2148/537 -f 800/2149/538 834/2150/538 835/2151/538 -f 800/2149/538 835/2151/538 836/2152/538 -f 830/2153/539 831/2154/539 835/2155/539 -f 830/2153/539 835/2155/539 834/2156/539 -f 832/2157/540 830/2158/540 834/2159/540 -f 832/2157/540 834/2159/540 800/2160/540 -f 836/2161/541 835/2162/541 831/2163/541 -f 836/2161/541 831/2163/541 833/2164/541 -f 840/2165/542 838/2166/542 837/2167/542 -f 840/2165/542 837/2167/542 839/2168/542 -f 843/2169/543 841/2170/543 842/2171/543 -f 843/2169/543 842/2171/543 844/2172/543 -f 837/2173/544 838/2174/544 842/2175/544 -f 837/2173/544 842/2175/544 841/2176/544 -f 839/2177/545 837/2178/545 841/2179/545 -f 839/2177/545 841/2179/545 843/2180/545 -f 844/2181/546 842/2182/546 838/2183/546 -f 844/2181/546 838/2183/546 840/2184/546 -usemtl common_steel_norivets -f 848/2185/547 846/2186/547 845/2187/547 -f 848/2185/547 845/2187/547 847/2188/547 -f 851/2189/548 849/2190/548 850/2191/548 -f 851/2189/548 850/2191/548 852/2192/548 -f 845/2193/549 846/2194/549 850/2195/549 -f 845/2193/549 850/2195/549 849/2196/549 -f 848/2197/550 847/2198/550 851/2199/550 -f 848/2197/550 851/2199/550 852/2200/550 -usemtl common_thingies -f 856/2201/551 854/2202/551 853/2203/551 -f 856/2201/551 853/2203/551 855/2204/551 -f 859/2205/552 857/2206/552 858/2207/552 -f 859/2205/552 858/2207/552 860/2208/552 -f 853/2209/553 854/2210/553 858/2211/553 -f 853/2209/553 858/2211/553 857/2212/553 -f 856/2213/554 855/2214/554 859/2215/554 -f 856/2213/554 859/2215/554 860/2216/554 -f 855/2217/555 853/2218/555 857/2219/555 -f 855/2217/555 857/2219/555 859/2220/555 -f 860/2221/556 858/2222/556 854/2223/556 -f 860/2221/556 854/2223/556 856/2224/556 -usemtl tracked_motorbike2_paint -f 451/2225/557 866/2226/557 869/2227/557 -f 451/2225/557 869/2227/557 861/2228/557 -f 720/2229/558 868/2230/558 867/2231/558 -f 720/2229/558 867/2231/558 550/2232/558 -usemtl common_steel_painted_norivets -f 550/2233/559 875/2234/559 874/2235/559 -f 550/2233/559 874/2235/559 720/2236/559 -usemtl tracked_motorbike2_paint -f 867/2237/560 870/2238/560 875/2239/560 -f 867/2237/560 875/2239/560 550/2240/560 -usemtl common_bottom -f 720/2241/561 874/2242/561 873/2243/561 -f 720/2241/561 873/2243/561 868/2244/561 -usemtl tracked_motorbike2_paint -f 864/2245/562 871/2246/562 870/2247/562 -f 864/2245/562 870/2247/562 867/2248/562 -f 864/2249/563 867/2250/563 868/2251/563 -f 864/2249/563 868/2251/563 865/2252/563 -usemtl common_bottom -f 868/2253/564 873/2254/564 872/2255/564 -f 868/2253/564 872/2255/564 865/2256/564 -usemtl tracked_motorbike2_paint -f 863/2257/565 869/2258/565 866/2259/565 -f 863/2257/565 866/2259/565 862/2260/565 -f 866/2261/566 870/2262/566 871/2263/566 -f 866/2261/566 871/2263/566 862/2264/566 -usemtl common_bottom -f 863/2265/567 872/2266/567 873/2267/567 -f 863/2265/567 873/2267/567 869/2268/567 -f 869/2269/568 873/2270/568 874/2271/568 -f 869/2269/568 874/2271/568 861/2272/568 -usemtl common_steel_painted_norivets -f 861/2273/569 874/2274/569 875/2275/569 -f 861/2273/569 875/2275/569 451/2276/569 -usemtl tracked_motorbike2_paint -f 451/2277/570 875/2278/570 870/2279/570 -f 451/2277/570 870/2279/570 866/2280/570 -f 877/2281/571 880/2282/571 879/2283/571 -f 877/2281/571 879/2283/571 876/2284/571 -f 678/2285/572 879/2286/572 880/2287/572 -f 678/2285/572 880/2287/572 878/2288/572 -f 876/2289/573 676/2290/573 882/2291/573 -f 876/2289/573 882/2291/573 877/2292/573 -f 884/2293/574 729/2294/574 883/2295/574 -f 884/2293/574 883/2295/574 885/2296/574 -f 729/2297/575 887/2298/575 886/2299/575 -f 729/2297/575 886/2299/575 883/2300/575 -usemtl common_bottom -f 884/2301/576 888/2302/576 887/2303/576 -f 884/2301/576 887/2303/576 729/2304/576 -usemtl tracked_motorbike2_paint -f 883/2305/577 886/2306/577 889/2307/577 -f 883/2305/577 889/2307/577 885/2308/577 -f 676/2309/578 886/2310/578 887/2311/578 -f 676/2309/578 887/2311/578 882/2312/578 -f 876/2313/579 889/2314/579 886/2315/579 -f 876/2313/579 886/2315/579 676/2316/579 -usemtl common_bottom -f 882/2317/580 887/2318/580 888/2319/580 -f 882/2317/580 888/2319/580 877/2320/580 -f 894/2321/581 897/2322/581 901/2323/581 -f 894/2321/581 901/2323/581 890/2324/581 -usemtl tracked_motorbike2_paint -f 882/2325/582 459/2326/582 900/2327/582 -f 882/2325/582 900/2327/582 895/2328/582 -usemtl common_steel_painted_norivets -f 890/2329/583 901/2330/583 459/2331/583 -f 890/2329/583 459/2331/583 882/2332/583 -usemtl common_bottom -f 711/2333/584 898/2334/584 897/2335/584 -f 711/2333/584 897/2335/584 894/2336/584 -usemtl tracked_motorbike2_paint -f 895/2337/585 900/2338/585 899/2339/585 -f 895/2337/585 899/2339/585 878/2340/585 -usemtl common_bottom -f 893/2341/586 897/2342/586 898/2343/586 -f 893/2341/586 898/2343/586 892/2344/586 -usemtl tracked_motorbike2_paint -f 863/2345/587 899/2346/587 900/2347/587 -f 863/2345/587 900/2347/587 896/2348/587 -f 896/2349/588 900/2350/588 459/2351/588 -f 896/2349/588 459/2351/588 861/2352/588 -usemtl common_steel_painted_norivets -f 861/2353/589 459/2354/589 901/2355/589 -f 861/2353/589 901/2355/589 891/2356/589 -usemtl common_bottom -f 891/2357/590 901/2358/590 897/2359/590 -f 891/2357/590 897/2359/590 893/2360/590 -usemtl tracked_motorbike2_paint -f 881/2361/591 903/2362/591 902/2363/591 -f 881/2361/591 902/2363/591 674/2364/591 -f 862/2365/592 905/2366/592 904/2367/592 -f 862/2365/592 904/2367/592 693/2368/592 -f 908/2369/593 906/2370/593 907/2371/593 -f 908/2369/593 907/2371/593 909/2372/593 -usemtl common_steel_painted_norivets -f 904/2373/594 905/2374/594 907/2375/594 -f 904/2373/594 907/2375/594 906/2376/594 -usemtl tracked_motorbike2_paint -f 693/2377/595 904/2378/595 906/2379/595 -f 693/2377/595 906/2379/595 908/2380/595 -usemtl common_rough_steel -f 910/2381/596 953/2382/596 952/2383/596 -f 910/2381/596 952/2383/596 911/2384/596 -usemtl tracked_motorbike2_paint -f 914/2385/597 883/2386/597 913/2387/597 -f 914/2385/597 913/2387/597 697/2388/597 -usemtl common_steel_painted_norivets -f 910/2389/598 911/2390/598 913/2391/598 -f 910/2389/598 913/2391/598 883/2392/598 -usemtl tracked_motorbike2_paint -f 885/2393/599 917/2394/599 916/2395/599 -f 885/2393/599 916/2395/599 884/2396/599 -f 915/2397/600 916/2398/600 917/2399/600 -f 915/2397/600 917/2399/600 914/2400/600 -usemtl common_bottom -f 922/2401/601 925/2402/601 930/2403/601 -f 922/2401/601 930/2403/601 918/2404/601 -usemtl tracked_motorbike2_paint -f 720/2405/602 929/2406/602 928/2407/602 -f 720/2405/602 928/2407/602 923/2408/602 -usemtl common_steel_painted_norivets -f 918/2409/603 930/2410/603 929/2411/603 -f 918/2409/603 929/2411/603 720/2412/603 +vn 0 1 0 +usemtl common_bottom_painted +f 696/1893/474 699/1894/474 698/1895/474 694/1896/474 +f 698/1897/475 701/1898/475 706/1899/475 694/1900/475 usemtl common_bottom -f 920/2413/604 926/2414/604 925/2415/604 -f 920/2413/604 925/2415/604 922/2416/604 -usemtl tracked_motorbike2_paint -f 923/2417/605 928/2418/605 927/2419/605 -f 923/2417/605 927/2419/605 865/2420/605 +f 696/1901/476 705/1902/476 704/1903/476 699/1904/476 +usemtl common_bottom_painted +f 695/1905/477 703/1906/477 702/1907/477 693/1908/477 +f 694/1909/478 706/1910/478 705/1911/478 696/1912/478 +f 693/1913/479 702/1914/479 701/1915/479 698/1916/479 +f 693/1917/480 698/1918/480 699/1919/480 695/1920/480 usemtl common_bottom -f 921/2421/606 925/2422/606 926/2423/606 -f 921/2421/606 926/2423/606 713/2424/606 -usemtl tracked_motorbike2_paint -f 915/2425/607 927/2426/607 928/2427/607 -f 915/2425/607 928/2427/607 924/2428/607 -f 924/2429/608 928/2430/608 929/2431/608 -f 924/2429/608 929/2431/608 729/2432/608 -usemtl common_steel_painted_norivets -f 729/2433/609 929/2434/609 930/2435/609 -f 729/2433/609 930/2435/609 919/2436/609 +f 699/1921/481 704/1922/481 703/1923/481 695/1924/481 +usemtl common_bottom_painted +f 697/1925/482 701/1926/482 702/1927/482 689/1928/482 +f 689/1929/483 702/1930/483 703/1931/483 691/1932/483 usemtl common_bottom -f 919/2437/610 930/2438/610 925/2439/610 -f 919/2437/610 925/2439/610 921/2440/610 -usemtl tracked_motorbike2_paint -f 934/2441/611 932/2442/611 931/2443/611 -f 934/2441/611 931/2443/611 933/2444/611 -usemtl common_steel_painted_norivets -f 931/2445/612 932/2446/612 936/2447/612 -f 931/2445/612 936/2447/612 935/2448/612 -usemtl tracked_motorbike2_paint -f 933/2449/613 931/2450/613 935/2451/613 -f 933/2449/613 935/2451/613 696/2452/613 -f 696/2453/614 935/2454/614 936/2455/614 -f 696/2453/614 936/2455/614 864/2456/614 -usemtl common_thingies -f 942/2457/615 940/2458/615 941/2459/615 -f 942/2457/615 941/2459/615 943/2460/615 -f 937/2461/616 938/2462/616 941/2463/616 -f 937/2461/616 941/2463/616 940/2464/616 -f 939/2465/617 937/2466/617 940/2467/617 -f 939/2465/617 940/2467/617 942/2468/617 -f 948/2469/618 945/2470/618 944/2471/618 -f 948/2469/618 944/2471/618 947/2472/618 -f 947/2473/619 944/2474/619 946/2475/619 -f 947/2473/619 946/2475/619 949/2476/619 -usemtl common_rough_steel -f 674/2477/620 950/2478/620 951/2479/620 -f 674/2477/620 951/2479/620 673/2480/620 -f 912/2481/621 952/2482/621 953/2483/621 -f 912/2481/621 953/2483/621 881/2484/621 -usemtl tracked_motorbike -f 954/2485/622 955/2486/622 959/2487/622 -f 954/2485/622 959/2487/622 958/2488/622 -f 957/2489/623 956/2490/623 960/2491/623 -f 957/2489/623 960/2491/623 961/2492/623 -f 961/2493/624 959/2494/624 955/2495/624 -f 961/2493/624 955/2495/624 957/2496/624 -usemtl tracked_motorbike2_paint -f 964/2497/625 966/2498/625 969/2499/625 -f 964/2497/625 969/2499/625 913/2500/625 -usemtl common_steel_painted_norivets -f 962/2501/626 974/2502/626 973/2503/626 -f 962/2501/626 973/2503/626 675/2504/626 -usemtl common_rough_steel -f 695/2505/627 705/2506/627 971/2507/627 -f 695/2505/627 971/2507/627 963/2508/627 -f 675/2509/628 973/2510/628 972/2511/628 -f 675/2509/628 972/2511/628 968/2512/628 -usemtl tracked_motorbike2_paint -f 967/2513/629 970/2514/629 974/2515/629 -f 967/2513/629 974/2515/629 962/2516/629 -f 963/2517/630 971/2518/630 970/2519/630 -f 963/2517/630 970/2519/630 967/2520/630 -usemtl common_rough_steel -f 968/2521/631 972/2522/631 705/2523/631 -f 968/2521/631 705/2523/631 695/2524/631 -usemtl tracked_motorbike2_paint -f 699/2525/632 969/2526/632 966/2527/632 -f 699/2525/632 966/2527/632 965/2528/632 -f 966/2529/633 970/2530/633 971/2531/633 -f 966/2529/633 971/2531/633 965/2532/633 -usemtl common_rough_steel -f 965/2533/634 971/2534/634 705/2535/634 -f 965/2533/634 705/2535/634 699/2536/634 -f 699/2537/635 705/2538/635 972/2539/635 -f 699/2537/635 972/2539/635 969/2540/635 -f 969/2541/636 972/2542/636 973/2543/636 -f 969/2541/636 973/2543/636 913/2544/636 -usemtl common_steel_painted_norivets -f 913/2545/637 973/2546/637 974/2547/637 -f 913/2545/637 974/2547/637 964/2548/637 -usemtl tracked_motorbike2_paint -f 964/2549/638 974/2550/638 970/2551/638 -f 964/2549/638 970/2551/638 966/2552/638 -f 963/2553/639 967/2554/639 968/2555/639 -f 963/2553/639 968/2555/639 695/2556/639 -f 675/2557/640 968/2558/640 967/2559/640 -f 675/2557/640 967/2559/640 962/2560/640 -usemtl common_steel_painted_norivets -f 976/2561/641 977/2562/641 979/2563/641 -f 976/2561/641 979/2563/641 978/2564/641 -f 981/2565/642 980/2566/642 982/2567/642 -f 981/2565/642 982/2567/642 983/2568/642 -usemtl common_steel_painted -f 984/2569/643 985/2570/643 980/2571/643 -f 984/2569/643 980/2571/643 981/2572/643 -usemtl common_steel_norivets -f 986/2573/644 975/2574/644 983/2575/644 -f 986/2573/644 983/2575/644 982/2576/644 -usemtl common_steel_painted_norivets -f 975/2577/645 984/2578/645 981/2579/645 -f 975/2577/645 981/2579/645 983/2580/645 -f 985/2581/646 984/2582/646 977/2583/646 -f 985/2581/646 977/2583/646 976/2584/646 -usemtl common_steel_norivets -f 975/2585/647 986/2586/647 978/2587/647 -f 975/2585/647 978/2587/647 979/2588/647 -usemtl common_steel_painted_norivets -f 984/2589/648 975/2590/648 979/2591/648 -f 984/2589/648 979/2591/648 977/2592/648 -f 555/2593/649 976/2594/649 978/2595/649 -f 555/2593/649 978/2595/649 557/2596/649 -f 980/2597/650 553/2598/650 987/2599/650 -f 980/2597/650 987/2599/650 982/2600/650 -usemtl common_steel_painted -f 985/2601/651 988/2602/651 553/2603/651 -f 985/2601/651 553/2603/651 980/2604/651 -usemtl common_steel_norivets -f 989/2605/652 986/2606/652 982/2607/652 -f 989/2605/652 982/2607/652 987/2608/652 -usemtl common_steel_painted_norivets -f 988/2609/653 985/2610/653 976/2611/653 -f 988/2609/653 976/2611/653 555/2612/653 -usemtl common_rough_steel -f 986/2613/654 989/2614/654 557/2615/654 -f 986/2613/654 557/2615/654 978/2616/654 -usemtl common_steel_painted_norivets -f 990/2617/655 991/2618/655 993/2619/655 -f 990/2617/655 993/2619/655 992/2620/655 -usemtl common_steel_painted -f 995/2621/656 994/2622/656 996/2623/656 -f 995/2621/656 996/2623/656 997/2624/656 -usemtl common_steel_painted_norivets -f 998/2625/657 999/2626/657 994/2627/657 -f 998/2625/657 994/2627/657 995/2628/657 -usemtl common_steel_norivets -f 1000/2629/658 1001/2630/658 997/2631/658 -f 1000/2629/658 997/2631/658 996/2632/658 -usemtl common_steel_painted_norivets -f 1001/2633/659 998/2634/659 995/2635/659 -f 1001/2633/659 995/2635/659 997/2636/659 -usemtl common_steel_painted -f 999/2637/660 998/2638/660 991/2639/660 -f 999/2637/660 991/2639/660 990/2640/660 -usemtl common_steel_norivets -f 1001/2641/661 1000/2642/661 992/2643/661 -f 1001/2641/661 992/2643/661 993/2644/661 -usemtl common_steel_painted_norivets -f 998/2645/662 1001/2646/662 993/2647/662 -f 998/2645/662 993/2647/662 991/2648/662 -usemtl common_steel_painted -f 1002/2649/663 996/2650/663 994/2651/663 -f 1002/2649/663 994/2651/663 1003/2652/663 -usemtl common_steel_painted_norivets -f 992/2653/664 1004/2654/664 1005/2655/664 -f 992/2653/664 1005/2655/664 990/2656/664 -usemtl common_steel_norivets -f 1000/2657/665 1006/2658/665 1004/2659/665 -f 1000/2657/665 1004/2659/665 992/2660/665 -usemtl common_steel_painted -f 1007/2661/666 999/2662/666 990/2663/666 -f 1007/2661/666 990/2663/666 1005/2664/666 -usemtl common_rough_steel -f 1006/2665/667 1000/2666/667 996/2667/667 -f 1006/2665/667 996/2667/667 1002/2668/667 -usemtl common_steel_painted_norivets -f 999/2669/668 1007/2670/668 1003/2671/668 -f 999/2669/668 1003/2671/668 994/2672/668 -f 1012/2673/669 1010/2674/669 1009/2675/669 -f 1012/2673/669 1009/2675/669 1011/2676/669 -f 1015/2677/670 1013/2678/670 1014/2679/670 -f 1015/2677/670 1014/2679/670 1016/2680/670 -usemtl common_steel_painted -f 1013/2681/671 1018/2682/671 1017/2683/671 -f 1013/2681/671 1017/2683/671 1014/2684/671 -usemtl common_steel_norivets -f 1016/2685/672 1008/2686/672 1019/2687/672 -f 1016/2685/672 1019/2687/672 1015/2688/672 -usemtl common_steel_painted_norivets -f 1014/2689/673 1017/2690/673 1008/2691/673 -f 1014/2689/673 1008/2691/673 1016/2692/673 -f 1010/2693/674 1017/2694/674 1018/2695/674 -f 1010/2693/674 1018/2695/674 1009/2696/674 -usemtl common_steel_norivets -f 1011/2697/675 1019/2698/675 1008/2699/675 -f 1011/2697/675 1008/2699/675 1012/2700/675 -usemtl common_steel_painted_norivets -f 1012/2701/676 1008/2702/676 1017/2703/676 -f 1012/2701/676 1017/2703/676 1010/2704/676 -f 1011/2705/677 1009/2706/677 456/2707/677 -f 1011/2705/677 456/2707/677 458/2708/677 -f 1020/2709/678 454/2710/678 1013/2711/678 -f 1020/2709/678 1013/2711/678 1015/2712/678 -usemtl common_steel_painted -f 454/2713/679 1021/2714/679 1018/2715/679 -f 454/2713/679 1018/2715/679 1013/2716/679 -usemtl common_steel_norivets -f 1015/2717/680 1019/2718/680 1022/2719/680 -f 1015/2717/680 1022/2719/680 1020/2720/680 -usemtl common_steel_painted_norivets -f 1009/2721/681 1018/2722/681 1021/2723/681 -f 1009/2721/681 1021/2723/681 456/2724/681 -usemtl common_rough_steel -f 458/2725/682 1022/2726/682 1019/2727/682 -f 458/2725/682 1019/2727/682 1011/2728/682 -usemtl common_steel_painted_norivets -f 1026/2729/683 1024/2730/683 1023/2731/683 -f 1026/2729/683 1023/2731/683 1025/2732/683 -f 1029/2733/684 1027/2734/684 1028/2735/684 -f 1029/2733/684 1028/2735/684 1030/2736/684 -f 1027/2737/685 1032/2738/685 1031/2739/685 -f 1027/2737/685 1031/2739/685 1028/2740/685 -usemtl common_steel_norivets -f 1030/2741/686 1034/2742/686 1033/2743/686 -f 1030/2741/686 1033/2743/686 1029/2744/686 -usemtl common_steel_painted_norivets -f 1028/2745/687 1031/2746/687 1034/2747/687 -f 1028/2745/687 1034/2747/687 1030/2748/687 -usemtl common_steel_painted -f 1024/2749/688 1031/2750/688 1032/2751/688 -f 1024/2749/688 1032/2751/688 1023/2752/688 -usemtl common_steel_norivets -f 1025/2753/689 1033/2754/689 1034/2755/689 -f 1025/2753/689 1034/2755/689 1026/2756/689 -usemtl common_steel_painted_norivets -f 1026/2757/690 1034/2758/690 1031/2759/690 -f 1026/2757/690 1031/2759/690 1024/2760/690 -f 1027/2761/691 1029/2762/691 1035/2763/691 -f 1027/2761/691 1035/2763/691 1036/2764/691 -f 1038/2765/692 1037/2766/692 1025/2767/692 -f 1038/2765/692 1025/2767/692 1023/2768/692 -usemtl common_steel_norivets -f 1037/2769/693 1039/2770/693 1033/2771/693 -f 1037/2769/693 1033/2771/693 1025/2772/693 -usemtl common_steel_painted -f 1023/2773/694 1032/2774/694 1040/2775/694 -f 1023/2773/694 1040/2775/694 1038/2776/694 -usemtl common_rough_steel -f 1029/2777/695 1033/2778/695 1039/2779/695 -f 1029/2777/695 1039/2779/695 1035/2780/695 -usemtl common_steel_painted_norivets -f 1036/2781/696 1040/2782/696 1032/2783/696 -f 1036/2781/696 1032/2783/696 1027/2784/696 -usemtl tracked_motorbike2 -f 1044/2785/697 1042/2786/697 1041/2787/697 -f 1044/2785/697 1041/2787/697 1043/2788/697 -f 1047/2789/698 1045/2790/698 1046/2791/698 -f 1047/2789/698 1046/2791/698 1048/2792/698 -f 1043/2793/699 1041/2794/699 1045/2795/699 -f 1043/2793/699 1045/2795/699 1047/2796/699 -f 1048/2797/700 1046/2798/700 1042/2799/700 -f 1048/2797/700 1042/2799/700 1044/2800/700 -f 1052/2801/701 1050/2802/701 1049/2803/701 -f 1052/2801/701 1049/2803/701 1051/2804/701 -f 1055/2805/702 1053/2806/702 1054/2807/702 -f 1055/2805/702 1054/2807/702 1056/2808/702 -f 1051/2809/703 1049/2810/703 1053/2811/703 -f 1051/2809/703 1053/2811/703 1055/2812/703 -f 1056/2813/704 1054/2814/704 1050/2815/704 -f 1056/2813/704 1050/2815/704 1052/2816/704 -usemtl tracked_motorbike2_paint -f 1060/2817/705 1058/2818/705 1057/2819/705 -f 1060/2817/705 1057/2819/705 1059/2820/705 -f 1063/2821/706 1061/2822/706 1062/2823/706 -f 1063/2821/706 1062/2823/706 1064/2824/706 -f 1057/2825/707 1058/2826/707 1062/2827/707 -f 1057/2825/707 1062/2827/707 1061/2828/707 -usemtl tracked_motorbike2 -f 1060/2829/708 1059/2830/708 1063/2831/708 -f 1060/2829/708 1063/2831/708 1064/2832/708 -usemtl tracked_motorbike2_paint -f 1059/2833/709 1057/2834/709 1061/2835/709 -f 1059/2833/709 1061/2835/709 1063/2836/709 -f 1064/2837/710 1062/2838/710 1058/2839/710 -f 1064/2837/710 1058/2839/710 1060/2840/710 -usemtl tracked_motorbike -f 1070/2841/711 1066/2842/711 1065/2843/711 -f 1070/2841/711 1065/2843/711 1069/2844/711 -f 1071/2845/712 1067/2846/712 1068/2847/712 -f 1071/2845/712 1068/2847/712 1072/2848/712 -f 1066/2849/713 1070/2850/713 1072/2851/713 -f 1066/2849/713 1072/2851/713 1068/2852/713 -usemtl common_thingies -f 1076/2853/714 1074/2854/714 1073/2855/714 -f 1076/2853/714 1073/2855/714 1075/2856/714 -f 1079/2857/715 1077/2858/715 1078/2859/715 -f 1079/2857/715 1078/2859/715 1080/2860/715 -f 1076/2861/716 1075/2862/716 1079/2863/716 -f 1076/2861/716 1079/2863/716 1080/2864/716 -f 1075/2865/717 1073/2866/717 1077/2867/717 -f 1075/2865/717 1077/2867/717 1079/2868/717 -f 1080/2869/718 1078/2870/718 1074/2871/718 -f 1080/2869/718 1074/2871/718 1076/2872/718 -f 1084/2873/719 1082/2874/719 1081/2875/719 -f 1084/2873/719 1081/2875/719 1083/2876/719 -f 1087/2877/720 1085/2878/720 1086/2879/720 -f 1087/2877/720 1086/2879/720 1088/2880/720 -f 1084/2881/721 1083/2882/721 1087/2883/721 -f 1084/2881/721 1087/2883/721 1088/2884/721 -f 1083/2885/722 1081/2886/722 1085/2887/722 -f 1083/2885/722 1085/2887/722 1087/2888/722 -f 1088/2889/723 1086/2890/723 1082/2891/723 -f 1088/2889/723 1082/2891/723 1084/2892/723 -o shaft -v 0.4375 0.625 1.6875 -v 0.4375 0.625 0.75 -v 0.4375 0.5 1.6875 -v 0.4375 0.5 0.75 -v 0.3125 0.625 1.6875 -v 0.3125 0.625 0.75 -v 0.3125 0.5 1.6875 -v 0.3125 0.5 0.75 -vt 0.65625 0.5 -vt 0.71875 0.5 -vt 0.71875 0.03125 -vt 0.65625 0.03125 -vt 0.71875 0.03125 -vt 0.65625 0.03125 -vt 0.65625 0.5 -vt 0.71875 0.5 -vt 0.71875 0.03125 -vt 0.71875 0.5 -vt 0.65625 0.5 -vt 0.65625 0.03125 -vt 0.65625 0.5 -vt 0.65625 0.03125 -vt 0.71875 0.03125 -vt 0.71875 0.5 -vn 1 0 0 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -usemtl pipe34 -f 1092/2893/724 1090/2894/724 1089/2895/724 -f 1092/2893/724 1089/2895/724 1091/2896/724 -f 1095/2897/725 1093/2898/725 1094/2899/725 -f 1095/2897/725 1094/2899/725 1096/2900/725 -f 1089/2901/726 1090/2902/726 1094/2903/726 -f 1089/2901/726 1094/2903/726 1093/2904/726 -f 1092/2905/727 1091/2906/727 1095/2907/727 -f 1092/2905/727 1095/2907/727 1096/2908/727 -o crip -v 0.09375 1.352523125 -0.833825 -v 0.09375 1.39470125 -1.016519375 -v 0.09375 1.108930625 -0.890063125 -v 0.09375 1.1511087500000001 -1.0727575 -v -0.09375 1.352523125 -0.833825 -v -0.09375 1.39470125 -1.016519375 -v -0.09375 1.108930625 -0.890063125 -v -0.09375 1.1511087500000001 -1.0727575 -v -0.09375 1.272905 -1.044638125 -v 0.09375 1.272905 -1.044638125 -v 0.09375 1.230726875 -0.86194375 -v -0.09375 1.230726875 -0.86194375 -v 0.21875 1.3125 -0.875 -v 0.18125000000000002 1.3125 -0.9624999999999999 -v 0.21875 1.1875 -0.875 -v 0.18125000000000002 1.1875 -0.9624999999999999 -v 0.09375 1.3125 -0.875 -v 0.09375 1.3125 -1 -v 0.09375 1.1875 -0.875 -v 0.09375 1.1875 -1 -v 0.21875 1.3125 -0.5625 -v 0.21875 1.1875 -0.5625 -v 0.09375 1.3125 -0.5625 -v 0.09375 1.1875 -0.5625 -v -0.21875 1.1875 -0.875 -v -0.18125000000000002 1.1875 -0.9624999999999999 -v -0.21875 1.3125 -0.875 -v -0.18125000000000002 1.3125 -0.9624999999999999 -v -0.09375 1.1875 -0.875 -v -0.09375 1.1875 -1 -v -0.09375 1.3125 -0.875 -v -0.09375 1.3125 -1 -v -0.21875 1.1875 -0.5625 -v -0.21875 1.3125 -0.5625 -v -0.09375 1.1875 -0.5625 -v -0.09375 1.3125 -0.5625 -v 0.13749999999999996 1.412884375 -1.138330625 -v 0.13749999999999996 1.080511875 -1.196936875 -v 0.13749999999999996 1.4020312499999998 -1.07678 -v 0.13749999999999996 1.0696587499999999 -1.13538625 -v -0.1375 1.412884375 -1.138330625 -v -0.1375 1.080511875 -1.196936875 -v -0.1375 1.4020312499999998 -1.07678 -v -0.1375 1.0696587499999999 -1.13538625 -v 0.08281249999999996 1.346635625 -1.0865475 -v 0.08281249999999996 1.10043375 -1.12996 -v 0.08281249999999996 1.3357831249999998 -1.0249975 -v 0.08281249999999996 1.089580625 -1.068409375 -v -0.08281250000000001 1.346635625 -1.0865475 -v -0.08281250000000001 1.10043375 -1.12996 -v -0.08281250000000001 1.3357831249999998 -1.0249975 -v -0.08281250000000001 1.089580625 -1.068409375 -vt 0.90625 1 -vt 0.90625 0.96875 -vt 0.953125 0.96875 -vt 0.953125 1 -vt 0.875 1 -vt 0.875 0.96875 -vt 0.921875 0.96875 -vt 0.921875 1 -vt 0.90625 0.234375 -vt 0.90625 0.28125 -vt 0.859375 0.28125 -vt 0.859375 0.234375 -vt 0.90625 0.234375 -vt 0.90625 0.28125 -vt 0.859375 0.28125 -vt 0.859375 0.234375 -vt 0.875 1 -vt 0.875 0.96875 -vt 0.921875 0.96875 -vt 0.921875 1 -vt 0.875 1 -vt 0.875 0.96875 -vt 0.921875 0.96875 -vt 0.921875 1 -vt 0.890625 0.25 -vt 0.890625 0.28125 -vt 0.84375 0.28125 -vt 0.84375 0.25 -vt 0.921875 0.25 -vt 0.921875 0.28125 -vt 0.875 0.28125 -vt 0.875 0.25 -vt 0.890625 0.25 -vt 0.890625 0.28125 -vt 0.84375 0.28125 -vt 0.84375 0.25 -vt 0.890625 0.25 -vt 0.890625 0.28125 -vt 0.84375 0.28125 -vt 0.84375 0.25 -vt 0.11755 0.28125 -vt 0.11755 0.25 -vt 0.09375 0.25 -vt 0.09375 0.28125 -vt 0.375 0.21875 -vt 0.375 0.25 -vt 0.40625 0.25 -vt 0.40625 0.21875 -vt 0.96875 1 -vt 1 1 -vt 1 0.96875 -vt 0.96875 0.96875 -vt 1 1 -vt 1 0.96875 -vt 0.96875 0.96875 -vt 0.96875 1 -vt 0.09375 0.28125 -vt 0.09375 0.25 -vt 0.125 0.25 -vt 0.125 0.28125 -vt 0.078125 0.28125 -vt 0.078125 0.25 -vt 0.15625 0.25 -vt 0.15625 0.28125 -vt 0.890625 0.453125 -vt 0.890625 0.484375 -vt 0.96875 0.484375 -vt 0.96875 0.453125 -vt 0.875 1 -vt 0.953125 1 -vt 0.953125 0.96875 -vt 0.875 0.96875 -vt 1 0.859375 -vt 1 0.9375 -vt 0.96875 0.9375 -vt 0.96875 0.859375 -vt 0.11755 0.25 -vt 0.11755 0.28125 -vt 0.09375 0.28125 -vt 0.09375 0.25 -vt 0.375 0.21875 -vt 0.375 0.25 -vt 0.40625 0.25 -vt 0.40625 0.21875 -vt 0.96875 1 -vt 1 1 -vt 1 0.96875 -vt 0.96875 0.96875 -vt 1 1 -vt 1 0.96875 -vt 0.96875 0.96875 -vt 0.96875 1 -vt 0.09375 0.25 -vt 0.09375 0.28125 -vt 0.125 0.28125 -vt 0.125 0.25 -vt 0.078125 0.25 -vt 0.078125 0.28125 -vt 0.15625 0.28125 -vt 0.15625 0.25 -vt 0.890625 0.453125 -vt 0.890625 0.484375 -vt 0.96875 0.484375 -vt 0.96875 0.453125 -vt 0.875 1 -vt 0.953125 1 -vt 0.953125 0.96875 -vt 0.875 0.96875 -vt 1 0.859375 -vt 1 0.9375 -vt 0.96875 0.9375 -vt 0.96875 0.859375 -vt 0.78125 0.515625 -vt 0.765625 0.515625 -vt 0.765625 0.421875 -vt 0.78125 0.421875 -vt 0.78125 0.515625 -vt 0.765625 0.515625 -vt 0.765625 0.421875 -vt 0.78125 0.421875 -vt 0.84375 0.515625 -vt 0.84375 0.421875 -vt 0.765625 0.421875 -vt 0.765625 0.515625 -vt 0.84375 0.421875 -vt 0.84375 0.515625 -vt 0.765625 0.515625 -vt 0.765625 0.421875 -vt 0.84375 0.5 -vt 0.84375 0.515625 -vt 0.765625 0.515625 -vt 0.765625 0.5 -vt 0.84375 0.5 -vt 0.84375 0.515625 -vt 0.765625 0.515625 -vt 0.765625 0.5 -vt 0.265625 0.265625 -vt 0.28125 0.265625 -vt 0.28125 0.328125 -vt 0.265625 0.328125 -vt 0.25 0.265625 -vt 0.265625 0.265625 -vt 0.265625 0.328125 -vt 0.25 0.328125 -vt 0.28125 0.265625 -vt 0.28125 0.328125 -vt 0.25 0.328125 -vt 0.25 0.265625 -vt 0.28125 0.3125 -vt 0.28125 0.328125 -vt 0.25 0.328125 -vt 0.25 0.3125 -vn 1 0 0 -vn -1 0 0 -vn 0 0.9743702926034429 0.2249500675525154 -vn 0 -0.9743702926034428 -0.22495006755251568 -vn 0 -0.22495006755251512 0.974370292603443 -vn 0 0.2249500675525168 -0.9743702926034425 -vn 0 0.22495481453326738 -0.9743691966694674 -vn 1 0 0 -vn 0 -0.2249548145332672 0.9743691966694675 -vn -1 0 0 -vn 0.919145030018058 0 -0.3939192985791679 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 0.39391929857916846 0 -0.9191450300180577 -vn 1 0 0 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn -0.919145030018058 0 -0.3939192985791679 -vn 1 0 0 -vn 0 -1 0 -vn 0 1 0 -vn -0.39391929857916846 0 -0.9191450300180577 -vn -1 0 0 -vn 1 0 0 -vn 0 -1 0 -vn 0 1 0 -vn 1 0 0 -vn -1 0 0 -vn 0 0.1736482081401605 -0.9848077476389551 -vn 0 -0.1736482081401605 0.9848077476389551 -vn 0 0.9848075091295172 0.17364956078872174 -vn 0 -0.9848075091295172 -0.17364956078872174 -vn 1 0 0 -vn -1 0 0 -vn 0 -0.17364713617870034 0.9848079366541154 -vn 0 0.9848089176820872 0.17364157236628583 -usemtl common_steel_painted_norivets -f 1097/2909/728 1107/2910/728 1106/2911/728 -f 1097/2909/728 1106/2911/728 1098/2912/728 -f 1102/2913/729 1105/2914/729 1108/2915/729 -f 1102/2913/729 1108/2915/729 1101/2916/729 -f 1097/2917/730 1098/2918/730 1102/2919/730 -f 1097/2917/730 1102/2919/730 1101/2920/730 -f 1100/2921/731 1099/2922/731 1103/2923/731 -f 1100/2921/731 1103/2923/731 1104/2924/731 -f 1101/2925/732 1108/2926/732 1107/2927/732 -f 1101/2925/732 1107/2927/732 1097/2928/732 -f 1098/2929/733 1106/2930/733 1105/2931/733 -f 1098/2929/733 1105/2931/733 1102/2932/733 -f 1104/2933/734 1105/2934/734 1106/2935/734 -f 1104/2933/734 1106/2935/734 1100/2936/734 -f 1100/2937/735 1106/2938/735 1107/2939/735 -f 1100/2937/735 1107/2939/735 1099/2940/735 -f 1099/2941/736 1107/2942/736 1108/2943/736 -f 1099/2941/736 1108/2943/736 1103/2944/736 -f 1103/2945/737 1108/2946/737 1105/2947/737 -f 1103/2945/737 1105/2947/737 1104/2948/737 -f 1112/2949/738 1110/2950/738 1109/2951/738 -f 1112/2949/738 1109/2951/738 1111/2952/738 -f 1115/2953/739 1113/2954/739 1114/2955/739 -f 1115/2953/739 1114/2955/739 1116/2956/739 -f 1109/2957/740 1110/2958/740 1114/2959/740 -f 1109/2957/740 1114/2959/740 1113/2960/740 -f 1112/2961/741 1111/2962/741 1115/2963/741 -f 1112/2961/741 1115/2963/741 1116/2964/741 -f 1116/2965/742 1114/2966/742 1110/2967/742 -f 1116/2965/742 1110/2967/742 1112/2968/742 -f 1111/2969/743 1109/2970/743 1117/2971/743 -f 1111/2969/743 1117/2971/743 1118/2972/743 -f 1120/2973/744 1119/2974/744 1113/2975/744 -f 1120/2973/744 1113/2975/744 1115/2976/744 -f 1117/2977/745 1109/2978/745 1113/2979/745 -f 1117/2977/745 1113/2979/745 1119/2980/745 -f 1111/2981/746 1118/2982/746 1120/2983/746 -f 1111/2981/746 1120/2983/746 1115/2984/746 -f 1124/2985/747 1122/2986/747 1121/2987/747 -f 1124/2985/747 1121/2987/747 1123/2988/747 -f 1127/2989/748 1125/2990/748 1126/2991/748 -f 1127/2989/748 1126/2991/748 1128/2992/748 -f 1121/2993/749 1122/2994/749 1126/2995/749 -f 1121/2993/749 1126/2995/749 1125/2996/749 -f 1124/2997/750 1123/2998/750 1127/2999/750 -f 1124/2997/750 1127/2999/750 1128/3000/750 -f 1128/3001/751 1126/3002/751 1122/3003/751 -f 1128/3001/751 1122/3003/751 1124/3004/751 -f 1123/3005/752 1121/3006/752 1129/3007/752 -f 1123/3005/752 1129/3007/752 1130/3008/752 -f 1132/3009/753 1131/3010/753 1125/3011/753 -f 1132/3009/753 1125/3011/753 1127/3012/753 -f 1129/3013/754 1121/3014/754 1125/3015/754 -f 1129/3013/754 1125/3015/754 1131/3016/754 -f 1123/3017/755 1130/3018/755 1132/3019/755 -f 1123/3017/755 1132/3019/755 1127/3020/755 -usemtl tracked_motorbike2_paint -f 1136/3021/756 1134/3022/756 1133/3023/756 -f 1136/3021/756 1133/3023/756 1135/3024/756 -f 1139/3025/757 1137/3026/757 1138/3027/757 -f 1139/3025/757 1138/3027/757 1140/3028/757 -f 1133/3029/758 1134/3030/758 1138/3031/758 -f 1133/3029/758 1138/3031/758 1137/3032/758 -f 1136/3033/759 1135/3034/759 1139/3035/759 -f 1136/3033/759 1139/3035/759 1140/3036/759 -f 1135/3037/760 1133/3038/760 1137/3039/760 -f 1135/3037/760 1137/3039/760 1139/3040/760 -f 1140/3041/761 1138/3042/761 1134/3043/761 -f 1140/3041/761 1134/3043/761 1136/3044/761 -usemtl tracked_motorbike2 -f 1144/3045/762 1142/3046/762 1141/3047/762 -f 1144/3045/762 1141/3047/762 1143/3048/762 -f 1147/3049/763 1145/3050/763 1146/3051/763 -f 1147/3049/763 1146/3051/763 1148/3052/763 -f 1144/3053/764 1143/3054/764 1147/3055/764 -f 1144/3053/764 1147/3055/764 1148/3056/764 -f 1143/3057/765 1141/3058/765 1145/3059/765 -f 1143/3057/765 1145/3059/765 1147/3060/765 -o hood -v -0.37187499999999984 1.625 1.715625 -v -0.30937499999999984 1.625 1.715625 -v -0.37187499999999984 1.5625 1.715625 -v -0.30937499999999984 1.5625 1.715625 -v -0.37187500000000007 1.625 0.7156250000000001 -v -0.30937500000000007 1.625 0.7156250000000001 -v -0.37187500000000007 1.5625 0.7156250000000001 -v -0.30937500000000007 1.5625 0.7156250000000001 -v 0.31562500000000016 1.625 1.7156249999999997 -v 0.37812500000000016 1.625 1.7156249999999997 -v 0.31562500000000016 1.5625 1.7156249999999997 -v 0.37812500000000016 1.5625 1.7156249999999997 -v 0.31562499999999993 1.625 0.7156249999999998 -v 0.37812499999999993 1.625 0.7156249999999998 -v 0.31562499999999993 1.5625 0.7156249999999998 -v 0.37812499999999993 1.5625 0.7156249999999998 -v 0.5000000000000001 1.4375 1.7499999999999998 -v 0.4999999999999999 1.4375 0.6874999999999998 -v 0.5000000000000001 1.375 1.7499999999999998 -v 0.4999999999999999 1.375 0.6874999999999998 -v -0.4999999999999999 1.4375 1.75 -v -0.5000000000000001 1.4375 0.6875 -v -0.4999999999999999 1.375 1.75 -v -0.5000000000000001 1.375 0.6875 -v 0.5 1.4375 1.2499999999999998 -v -0.5 1.4375 1.25 -v -0.5 1.375 1.25 -v 0.5 1.375 1.2499999999999998 -v 0 1.4375 1.25 -v 1.1102230246251565e-16 1.4375 1.75 -v 1.1102230246251565e-16 1.375 1.75 -v 0 1.375 1.25 -v -1.1102230246251565e-16 1.375 0.6874999999999999 -v -1.1102230246251565e-16 1.4375 0.6874999999999999 -v -0.37187500000000007 1.5625 0.778125 -v -0.30937500000000007 1.5625 0.778125 -v -0.37187500000000007 1.4375 0.778125 -v -0.30937500000000007 1.4375 0.778125 -v -0.37187500000000007 1.4375 0.7156250000000001 -v -0.30937500000000007 1.4375 0.7156250000000001 -v 0.31562500000000016 1.4375 1.7156249999999997 -v 0.37812500000000016 1.4375 1.7156249999999997 -v 0.31562500000000016 1.5625 1.6531249999999997 -v 0.37812500000000016 1.5625 1.6531249999999997 -v 0.31562500000000016 1.4375 1.6531249999999997 -v 0.37812500000000016 1.4375 1.6531249999999997 -v -0.37187499999999984 1.4375 1.715625 -v -0.30937499999999984 1.4375 1.715625 -v -0.3718749999999999 1.5625 1.653125 -v -0.3093749999999999 1.5625 1.653125 -v -0.3718749999999999 1.4375 1.653125 -v -0.3093749999999999 1.4375 1.653125 -v 0.31562499999999993 1.5625 0.7781249999999998 -v 0.37812499999999993 1.5625 0.7781249999999997 -v 0.31562499999999993 1.4375 0.7781249999999998 -v 0.37812499999999993 1.4375 0.7781249999999997 -v 0.31562499999999993 1.4375 0.7156249999999998 -v 0.37812499999999993 1.4375 0.7156249999999998 -v -5.551115123125783e-17 1.4375 0.875 -v -0.5000000000000001 1.4375 0.875 -v -0.5000000000000001 1.375 0.875 -v -5.551115123125783e-17 1.375 0.875 -v 0.4999999999999999 1.375 0.8749999999999998 -v 0.4999999999999999 1.4375 0.8749999999999998 -v 5.551115123125783e-17 1.4375 1.5625 -v -0.4999999999999999 1.4375 1.5625 -v -0.4999999999999999 1.375 1.5625 -v 5.551115123125783e-17 1.375 1.5625 -v 0.5000000000000001 1.375 1.5624999999999998 -v 0.5000000000000001 1.4375 1.5624999999999998 -v -0.3124999999999999 1.4375 1.5625 -v -0.3125 1.4375 1.25 -v -0.3125000000000001 1.4375 0.875 -v -0.3125000000000001 1.4375 0.6875 -v -0.3125000000000001 1.375 0.6875 -v -0.3125000000000001 1.375 0.875 -v -0.3125 1.375 1.25 -v -0.3124999999999999 1.375 1.5625 -v -0.3124999999999999 1.375 1.75 -v -0.3124999999999999 1.4375 1.75 -v 5.551115123125783e-17 1.4031250000000002 1.5625 -v -5.551115123125783e-17 1.4031250000000002 0.875 -v -0.3124999999999999 1.4031250000000002 1.5625 -v -0.3125000000000001 1.4031250000000002 0.875 -v 0 1.4031250000000002 1.1875 -v -0.3125 1.4031250000000002 1.1875 -v -0.1875 1.4031250000000002 1.1875 -v -0.18749999999999994 1.4031250000000002 1.5625 -v -0.18750000000000006 1.4031250000000002 0.875 -vt 0.5 0.5 -vt 0.53125 0.5 -vt 0.53125 0.53125 -vt 0.5 0.53125 -vt 0.5 0.5 -vt 0.53125 0.5 -vt 0.53125 0.53125 -vt 0.5 0.53125 -vt 0.5 0.5 -vt 0.53125 0.5 -vt 0.53125 1 -vt 0.5 1 -vt 0.5 0.5 -vt 0.53125 0.5 -vt 0.53125 1 -vt 0.5 1 -vt 0.5 0.5 -vt 0.53125 0.5 -vt 0.53125 1 -vt 0.5 1 -vt 0.5 0.5 -vt 0.53125 0.5 -vt 0.53125 1 -vt 0.5 1 -vt 0.5 0.5 -vt 0.53125 0.5 -vt 0.53125 0.53125 -vt 0.5 0.53125 -vt 0.5 0.5 -vt 0.53125 0.5 -vt 0.53125 0.53125 -vt 0.5 0.53125 -vt 0.5 0.5 -vt 0.53125 0.5 -vt 0.53125 1 -vt 0.5 1 -vt 0.5 0.5 -vt 0.53125 0.5 -vt 0.53125 1 -vt 0.5 1 -vt 0.5 0.5 -vt 0.53125 0.5 -vt 0.53125 1 -vt 0.5 1 -vt 0.5 0.5 -vt 0.53125 0.5 -vt 0.53125 1 -vt 0.5 1 -vt 0.40625 0.265625 -vt 0.359375 0.265625 -vt 0.359375 0.25 -vt 0.40625 0.25 -vt 0.328125 0.25 -vt 0.375 0.25 -vt 0.375 0.265625 -vt 0.328125 0.265625 -vt 0.625 0.25 -vt 0.546875 0.25 -vt 0.546875 0.203125 -vt 0.625 0.203125 -vt 0.625 0.046875 -vt 0.546875 0.046875 -vt 0.546875 0 -vt 0.625 0 -vt 0.171875 0.265625 -vt 0.09375 0.265625 -vt 0.09375 0.25 -vt 0.171875 0.25 -vt 0.375 0.25 -vt 0.453125 0.25 -vt 0.453125 0.265625 -vt 0.375 0.265625 -vt 0.515625 0.25 -vt 0.59375 0.25 -vt 0.59375 0.265625 -vt 0.515625 0.265625 -vt 0.25 0.265625 -vt 0.171875 0.265625 -vt 0.171875 0.25 -vt 0.25 0.25 -vt 0.625 0.125 -vt 0.625 0.046875 -vt 0.75 0.046875 -vt 0.75 0.125 -vt 0.546875 0.265625 -vt 0.421875 0.265625 -vt 0.421875 0.25 -vt 0.546875 0.25 -vt 0.75 0.125 -vt 0.75 0.203125 -vt 0.625 0.203125 -vt 0.625 0.125 -vt 0.75 0 -vt 0.75 0.046875 -vt 0.625 0.046875 -vt 0.625 0 -vt 0.25 0.25 -vt 0.375 0.25 -vt 0.375 0.265625 -vt 0.25 0.265625 -vt 0.625 0.25 -vt 0.625 0.203125 -vt 0.75 0.203125 -vt 0.75 0.25 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.5 0.53125 -vt 0.4375 0.53125 -vt 0.4375 0.5 -vt 0.5 0.5 -vt 0.46875 0.265625 -vt 0.375 0.265625 -vt 0.375 0.25 -vt 0.46875 0.25 -vt 0.625 0.140625 -vt 0.625 0.046875 -vt 0.75 0.046875 -vt 0.75 0.140625 -vt 0.265625 0.25 -vt 0.359375 0.25 -vt 0.359375 0.265625 -vt 0.265625 0.265625 -vt 0.75 0.109375 -vt 0.75 0.203125 -vt 0.625 0.203125 -vt 0.625 0.109375 -vt 0.625 0.046875 -vt 0.546875 0.046875 -vt 0.546875 0 -vt 0.625 0 -vt 0.640625 0.265625 -vt 0.59375 0.265625 -vt 0.59375 0.25 -vt 0.640625 0.25 -vt 0.625 0.25 -vt 0.546875 0.25 -vt 0.546875 0.203125 -vt 0.625 0.203125 -vt 0.625 0.25 -vt 0.625 0.203125 -vt 0.75 0.203125 -vt 0.75 0.25 -vt 0.125 0.25 -vt 0.171875 0.25 -vt 0.171875 0.265625 -vt 0.125 0.265625 -vt 0.75 0 -vt 0.75 0.046875 -vt 0.625 0.046875 -vt 0.625 0 -vt 0.5 0.046875 -vt 0.546875 0.046875 -vt 0.546875 0.125 -vt 0.5 0.125 -vt 0.5 0.109375 -vt 0.546875 0.109375 -vt 0.546875 0.203125 -vt 0.5 0.203125 -vt 0.5 0.203125 -vt 0.546875 0.203125 -vt 0.546875 0.25 -vt 0.5 0.25 -vt 0.5 0.265625 -vt 0.453125 0.265625 -vt 0.453125 0.25 -vt 0.5 0.25 -vt 0.5 0 -vt 0.546875 0 -vt 0.546875 0.046875 -vt 0.5 0.046875 -vt 0.5 0.046875 -vt 0.546875 0.046875 -vt 0.546875 0.140625 -vt 0.5 0.140625 -vt 0.5 0.125 -vt 0.546875 0.125 -vt 0.546875 0.203125 -vt 0.5 0.203125 -vt 0.5 0.203125 -vt 0.546875 0.203125 -vt 0.546875 0.25 -vt 0.5 0.25 -vt 0.046875 0.25 -vt 0.09375 0.25 -vt 0.09375 0.265625 -vt 0.046875 0.265625 -vt 0.5 0 -vt 0.546875 0 -vt 0.546875 0.046875 -vt 0.5 0.046875 -vt 0.375 0.203125 -vt 0.375 0.21875 -vt 0.28125 0.21875 -vt 0.203125 0.21875 -vt 0.203125 0.21875 -vt 0.203125 0.203125 -vt 0.28125 0.203125 -vt 0.375 0.203125 -vt 0.203125 0.21875 -vt 0.203125 0.203125 -vt 0.296875 0.203125 -vt 0.375 0.203125 -vt 0.375 0.203125 -vt 0.375 0.21875 -vt 0.296875 0.21875 -vt 0.203125 0.21875 -vt 0.34375 0.21875 -vt 0.34375 0.203125 -vt 0.421875 0.203125 -vt 0.421875 0.21875 -vt 0.359375 0.21875 -vt 0.28125 0.21875 -vt 0.28125 0.203125 -vt 0.359375 0.203125 -vt 0.1875 0.59375 -vt 0.125 0.59375 -vt 0.125 0.75 -vt 0.1875 0.75 -vt 0.1875 0.75 -vt 0.125 0.75 -vt 0.125 0.5625 -vt 0.1875 0.5625 -vt 0.1875 0.5625 -vt 0.09375 0.5625 -vt 0.09375 0.75 -vt 0.1875 0.75 -vt 0.1875 0.75 -vt 0.09375 0.75 -vt 0.09375 0.59375 -vt 0.1875 0.59375 -vn 2.220446049250313e-16 0 1 -vn -2.220446049250313e-16 0 -1 -vn 0 1 0 -vn 0 -1 0 -vn -1 0 2.220446049250313e-16 -vn 1 0 -2.220446049250313e-16 -vn 2.220446049250313e-16 0 1 -vn -2.220446049250313e-16 0 -1 -vn 0 1 0 -vn 0 -1 0 -vn -1 0 2.220446049250313e-16 -vn 1 0 -2.220446049250313e-16 -vn 1 0 -2.220446049250313e-16 -vn -1 0 2.220446049250313e-16 -vn 0 1 0 -vn 0 -1 0 -vn 2.220446049250313e-16 0 1 -vn -2.220446049250313e-16 0 -1 -vn -1 0 2.220446049250313e-16 -vn 1 0 -2.220446049250313e-16 -vn 0 1 0 -vn 2.220446049250313e-16 0 1 -vn 0 -1 0 -vn 0 -1 0 -vn -2.220446049250313e-16 0 -1 -vn 0 1 0 -vn 2.220446049250313e-16 0 1 -vn -2.220446049250313e-16 0 -1 -vn -1 0 2.220446049250313e-16 -vn 1 0 -2.220446049250313e-16 -vn 2.220446049250313e-16 0 1 -vn -2.220446049250313e-16 0 -1 -vn -1 0 2.220446049250313e-16 -vn 1 0 -2.220446049250313e-16 -vn 2.220446049250313e-16 0 1 -vn -2.220446049250313e-16 0 -1 -vn -1 0 2.220446049250313e-16 -vn 1 0 -2.220446049250313e-16 -vn 2.220446049250313e-16 0 1 -vn -2.220446049250313e-16 0 -1 -vn -1 0 2.220446049250313e-16 -vn 1 0 -2.220446049250313e-16 -vn -1 0 2.220446049250313e-16 -vn 0 -1 0 -vn 1 0 -2.220446049250313e-16 -vn 0 1 0 -vn 0 1 0 -vn -1 0 2.220446049250313e-16 -vn 0 -1 0 -vn 0 -1 0 -vn 1 0 -2.220446049250313e-16 -vn 0 1 0 -vn 0 1 0 -vn 0 1 0 -vn 0 1 0 -vn -2.220446049250313e-16 0 -1 -vn 0 -1 0 -vn 0 -1 0 -vn 0 -1 0 -vn 0 -1 0 -vn 2.220446049250313e-16 0 1 -vn 0 1 0 -vn 1 0 -2.220446049250313e-16 -vn 1 0 -2.220446049250313e-16 -vn -1 0 2.220446049250313e-16 -vn -1 0 2.220446049250313e-16 -vn 2.220446049250313e-16 0 1 -vn -2.220446049250313e-16 0 -1 -vn 0 1 0 -vn 0 1 0 -vn 0 1 0 -vn 0 1 0 -usemtl tracked_motorbike -f 1152/3061/766 1150/3062/766 1149/3063/766 -f 1152/3061/766 1149/3063/766 1151/3064/766 -f 1155/3065/767 1153/3066/767 1154/3067/767 -f 1155/3065/767 1154/3067/767 1156/3068/767 -f 1149/3069/768 1150/3070/768 1154/3071/768 -f 1149/3069/768 1154/3071/768 1153/3072/768 -f 1152/3073/769 1151/3074/769 1155/3075/769 -f 1152/3073/769 1155/3075/769 1156/3076/769 -f 1151/3077/770 1149/3078/770 1153/3079/770 -f 1151/3077/770 1153/3079/770 1155/3080/770 -f 1156/3081/771 1154/3082/771 1150/3083/771 -f 1156/3081/771 1150/3083/771 1152/3084/771 -f 1160/3085/772 1158/3086/772 1157/3087/772 -f 1160/3085/772 1157/3087/772 1159/3088/772 -f 1163/3089/773 1161/3090/773 1162/3091/773 -f 1163/3089/773 1162/3091/773 1164/3092/773 -f 1157/3093/774 1158/3094/774 1162/3095/774 -f 1157/3093/774 1162/3095/774 1161/3096/774 -f 1160/3097/775 1159/3098/775 1163/3099/775 -f 1160/3097/775 1163/3099/775 1164/3100/775 -f 1159/3101/776 1157/3102/776 1161/3103/776 -f 1159/3101/776 1161/3103/776 1163/3104/776 -f 1164/3105/777 1162/3106/777 1158/3107/777 -f 1164/3105/777 1158/3107/777 1160/3108/777 -usemtl common_bottom -f 1166/3109/778 1212/3110/778 1211/3111/778 -f 1166/3109/778 1211/3111/778 1168/3112/778 -f 1172/3113/779 1209/3114/779 1208/3115/779 -f 1172/3113/779 1208/3115/779 1170/3116/779 -usemtl common_bottom_painted -f 1182/3117/780 1222/3118/780 1221/3119/780 -f 1182/3117/780 1221/3119/780 1207/3120/780 -usemtl common_bottom -f 1210/3121/781 1224/3122/781 1223/3123/781 -f 1210/3121/781 1223/3123/781 1181/3124/781 -f 1178/3125/782 1228/3126/782 1227/3127/782 -f 1178/3125/782 1227/3127/782 1179/3128/782 -f 1181/3129/783 1223/3130/783 1222/3131/783 -f 1181/3129/783 1222/3131/783 1182/3132/783 -f 1175/3133/784 1215/3134/784 1214/3135/784 -f 1175/3133/784 1214/3135/784 1174/3136/784 -f 1173/3137/785 1218/3138/785 1217/3139/785 -f 1173/3137/785 1217/3139/785 1176/3140/785 -usemtl common_bottom_painted -f 1177/3141/786 1213/3142/786 1218/3143/786 -f 1177/3141/786 1218/3143/786 1173/3144/786 -usemtl common_bottom -f 1165/3145/787 1178/3146/787 1179/3147/787 -f 1165/3145/787 1179/3147/787 1167/3148/787 -f 1176/3149/788 1217/3150/788 1216/3151/788 -f 1176/3149/788 1216/3151/788 1180/3152/788 -f 1168/3153/789 1211/3154/789 1210/3155/789 -f 1168/3153/789 1210/3155/789 1181/3156/789 -f 1168/3157/790 1181/3158/790 1182/3159/790 -f 1168/3157/790 1182/3159/790 1166/3160/790 -usemtl common_bottom_painted -f 1182/3161/791 1207/3162/791 1212/3163/791 -f 1182/3161/791 1212/3163/791 1166/3164/791 -usemtl tracked_motorbike -f 1186/3165/792 1184/3166/792 1183/3167/792 -f 1186/3165/792 1183/3167/792 1185/3168/792 -f 1187/3169/793 1155/3170/793 1156/3171/793 -f 1187/3169/793 1156/3171/793 1188/3172/793 -f 1185/3173/794 1183/3174/794 1155/3175/794 -f 1185/3173/794 1155/3175/794 1187/3176/794 -f 1188/3177/795 1156/3178/795 1184/3179/795 -f 1188/3177/795 1184/3179/795 1186/3180/795 -f 1190/3181/796 1160/3182/796 1159/3183/796 -f 1190/3181/796 1159/3183/796 1189/3184/796 -f 1193/3185/797 1191/3186/797 1192/3187/797 -f 1193/3185/797 1192/3187/797 1194/3188/797 -f 1189/3189/798 1159/3190/798 1191/3191/798 -f 1189/3189/798 1191/3191/798 1193/3192/798 -f 1194/3193/799 1192/3194/799 1160/3195/799 -f 1194/3193/799 1160/3195/799 1190/3196/799 -f 1196/3197/800 1152/3198/800 1151/3199/800 -f 1196/3197/800 1151/3199/800 1195/3200/800 -f 1199/3201/801 1197/3202/801 1198/3203/801 -f 1199/3201/801 1198/3203/801 1200/3204/801 -f 1195/3205/802 1151/3206/802 1197/3207/802 -f 1195/3205/802 1197/3207/802 1199/3208/802 -f 1200/3209/803 1198/3210/803 1152/3211/803 -f 1200/3209/803 1152/3211/803 1196/3212/803 -f 1204/3213/804 1202/3214/804 1201/3215/804 -f 1204/3213/804 1201/3215/804 1203/3216/804 -f 1205/3217/805 1163/3218/805 1164/3219/805 -f 1205/3217/805 1164/3219/805 1206/3220/805 -f 1203/3221/806 1201/3222/806 1163/3223/806 -f 1203/3221/806 1163/3223/806 1205/3224/806 -f 1206/3225/807 1164/3226/807 1202/3227/807 -f 1206/3225/807 1202/3227/807 1204/3228/807 -usemtl common_bottom -f 1174/3229/808 1208/3230/808 1209/3231/808 -f 1174/3229/808 1209/3231/808 1175/3232/808 -f 1180/3233/809 1210/3234/809 1211/3235/809 -f 1180/3233/809 1211/3235/809 1176/3236/809 -f 1176/3237/810 1211/3238/810 1212/3239/810 -f 1176/3237/810 1212/3239/810 1173/3240/810 -usemtl common_bottom_painted -f 1173/3241/811 1212/3242/811 1207/3243/811 -f 1173/3241/811 1207/3243/811 1177/3244/811 -f 1213/3245/812 1219/3246/812 1228/3247/812 -f 1213/3245/812 1228/3247/812 1178/3248/812 -usemtl common_bottom -f 1169/3249/813 1214/3250/813 1215/3251/813 -f 1169/3249/813 1215/3251/813 1171/3252/813 -f 1179/3253/814 1227/3254/814 1226/3255/814 -f 1179/3253/814 1226/3255/814 1216/3256/814 -f 1179/3257/815 1216/3258/815 1217/3259/815 -f 1179/3257/815 1217/3259/815 1167/3260/815 -f 1167/3261/816 1217/3262/816 1218/3263/816 -f 1167/3261/816 1218/3263/816 1165/3264/816 +f 691/1933/484 703/1934/484 704/1935/484 700/1936/484 +f 700/1937/485 704/1938/485 705/1939/485 692/1940/485 usemtl common_bottom_painted -f 1165/3265/817 1218/3266/817 1213/3267/817 -f 1165/3265/817 1213/3267/817 1178/3268/817 -f 1214/3269/818 1219/3270/818 1220/3271/818 -f 1214/3269/818 1220/3271/818 1174/3272/818 -f 1174/3273/819 1220/3274/819 1221/3275/819 -f 1174/3273/819 1221/3275/819 1208/3276/819 -f 1208/3277/820 1221/3278/820 1222/3279/820 -f 1208/3277/820 1222/3279/820 1170/3280/820 -usemtl common_bottom -f 1170/3281/821 1222/3282/821 1223/3283/821 -f 1170/3281/821 1223/3283/821 1172/3284/821 -f 1172/3285/822 1223/3286/822 1224/3287/822 -f 1172/3285/822 1224/3287/822 1209/3288/822 -f 1209/3289/823 1224/3290/823 1225/3291/823 -f 1209/3289/823 1225/3291/823 1175/3292/823 -f 1175/3293/824 1225/3294/824 1226/3295/824 -f 1175/3293/824 1226/3295/824 1215/3296/824 -f 1215/3297/825 1226/3298/825 1227/3299/825 -f 1215/3297/825 1227/3299/825 1171/3300/825 -f 1171/3301/826 1227/3302/826 1228/3303/826 -f 1171/3301/826 1228/3303/826 1169/3304/826 -usemtl common_bottom_painted -f 1169/3305/827 1228/3306/827 1219/3307/827 -f 1169/3305/827 1219/3307/827 1214/3308/827 -f 1224/3309/828 1221/3310/828 1220/3311/828 -f 1224/3309/828 1220/3311/828 1219/3312/828 -f 1219/3313/829 1226/3314/829 1225/3315/829 -f 1219/3313/829 1225/3315/829 1224/3316/829 -f 1207/3317/830 1210/3318/830 1180/3319/830 -f 1207/3317/830 1180/3319/830 1216/3320/830 -f 1216/3321/831 1213/3322/831 1177/3323/831 -f 1216/3321/831 1177/3323/831 1207/3324/831 -f 1221/3325/832 1224/3326/832 1210/3327/832 -f 1221/3325/832 1210/3327/832 1207/3328/832 -f 1219/3329/833 1213/3330/833 1216/3331/833 -f 1219/3329/833 1216/3331/833 1226/3332/833 -usemtl tracked_motorbike -f 1234/3333/834 1235/3334/834 1237/3335/834 -f 1234/3333/834 1237/3335/834 1232/3336/834 -f 1231/3337/835 1236/3338/835 1235/3339/835 -f 1231/3337/835 1235/3339/835 1234/3340/835 -f 1233/3341/836 1235/3342/836 1236/3343/836 -f 1233/3341/836 1236/3343/836 1229/3344/836 -f 1230/3345/837 1237/3346/837 1235/3347/837 -f 1230/3345/837 1235/3347/837 1233/3348/837 -o rod -v 0.4375 1.3125 1.6875 -v 0.4375 1.3125 1.625 -v -0.25 1.3125 1.6875 -v -0.25 1.3125 1.625 -v 0.4375 1.375 1.6875 -v 0.4375 1.375 1.625 -v -0.25 1.375 1.6875 -v -0.25 1.375 1.625 -vt 0.03125 0.78125 -vt 0.03125 0.953125 -vt 0.015625 0.953125 -vt 0.015625 0.78125 -vt 0.03125 0.78125 -vt 0.03125 0.953125 -vt 0.015625 0.953125 -vt 0.015625 0.78125 -vt 0.03125 0.9375 -vt 0.03125 0.953125 -vt 0.015625 0.953125 -vt 0.015625 0.9375 -vt 0.03125 0.9375 -vt 0.03125 0.953125 -vt 0.015625 0.953125 -vt 0.015625 0.9375 -vt 0.03125 0.78125 -vt 0.03125 0.953125 -vt 0.015625 0.953125 -vt 0.015625 0.78125 -vt 0.03125 0.78125 -vt 0.03125 0.953125 -vt 0.015625 0.953125 -vt 0.015625 0.78125 -vn 2.220446049250313e-16 -1 0 -vn -2.220446049250313e-16 1 0 -vn 1 2.220446049250313e-16 0 -vn -1 -2.220446049250313e-16 0 -vn 0 0 1 -vn 0 0 -1 -usemtl common_steel_norivets -f 1241/3349/838 1239/3350/838 1238/3351/838 -f 1241/3349/838 1238/3351/838 1240/3352/838 -f 1244/3353/839 1242/3354/839 1243/3355/839 -f 1244/3353/839 1243/3355/839 1245/3356/839 -f 1238/3357/840 1239/3358/840 1243/3359/840 -f 1238/3357/840 1243/3359/840 1242/3360/840 -f 1241/3361/841 1240/3362/841 1244/3363/841 -f 1241/3361/841 1244/3363/841 1245/3364/841 -f 1240/3365/842 1238/3366/842 1242/3367/842 -f 1240/3365/842 1242/3367/842 1244/3368/842 -f 1245/3369/843 1243/3370/843 1239/3371/843 -f 1245/3369/843 1239/3371/843 1241/3372/843 -o radio -v 0.3156251349401148 1.4374993750000002 0.9343746516223459 -v 0.31562513494011474 1.6874993750000002 0.9343746516223459 -v 0.0031280878649539434 1.4374993750000002 0.9357383534174403 -v 0.003128087864953888 1.6874993750000002 0.9357383534174403 -v 0.3178069360953737 1.4374993750000002 1.4343701785573846 -v 0.3178069360953737 1.6874993750000002 1.4343701785573846 -v 0.005309889020212871 1.4374993750000002 1.435733880352479 -v 0.005309889020212816 1.6874993750000002 1.435733880352479 -v 0.16074062976135467 1.6874993750000002 1.2475538579777827 -v 0.16074062976135467 1.7499993750000002 1.2475538579777827 -v -0.02675785009852319 1.6874993750000002 1.2483719573379473 -v -0.02675785009852319 1.7499993750000002 1.2483719573379473 -v 0.16128560724982974 1.6874993750000002 1.3725524333740629 -v 0.1612856072498297 1.7499993750000002 1.3725524333740629 -v -0.026212247663593397 1.6874993750000002 1.3733705245532302 -v -0.026212247663593397 1.7499993750000002 1.3733705245532302 -v 0.0031963662876270393 1.4374993750000002 0.9513631732967259 -v 0.003196366287626984 1.6718743750000002 0.9513631732967259 -v -0.059302921410513076 1.4374993750000002 0.9516356620409635 -v -0.05930292141051313 1.6718743750000002 0.9516356620409635 -v 0.005241602416542562 1.4374993750000002 1.4201084355267386 -v 0.005241602416542507 1.6718743750000002 1.4201084355267386 -v -0.05725767710060031 1.4374993750000002 1.4203815492174308 -v -0.05725767710060037 1.6718743750000002 1.4203815492174308 -v -0.05937119983318617 1.4374993750000002 0.9360108421616777 -v -0.05937119983318623 1.6874993750000002 0.9360108421616777 -v -0.30936895921020685 1.437499375 0.9371020552125346 -v -0.3093689592102069 1.687499375 0.9371020552125346 -v -0.057189398677927245 1.4374993750000002 1.4360063690967164 -v -0.0571893986779273 1.6874993750000002 1.4360063690967164 -v -0.3071871662359452 1.437499375 1.4370969572011185 -v -0.3071871662359452 1.687499375 1.4370969572011185 -v 0.15964941671049784 1.6874993750000002 0.9975560986007619 -v 0.15964941671049784 1.7499993750000002 0.9975560986007619 -v -0.027848438202925263 1.6874993750000002 0.9983741897799293 -v -0.027848438202925263 1.7499993750000002 0.9983741897799293 -v 0.16019501914542764 1.6874993750000002 1.122554665816045 -v 0.16019501914542764 1.7499993750000002 1.122554665816045 -v -0.027303460714450223 1.6874993750000002 1.1233727651762095 -v -0.027303460714450223 1.7499993750000002 1.1233727651762095 -v 0.2484485091949628 1.6551937500000002 1.4327479133315781 -v 0.06094806966007442 1.6551937500000002 1.432747843248535 -v 0.24844833952367018 1.4677012500000002 1.4311115253591793 -v 0.060948524935236545 1.4677012500000002 1.431111447095139 -v 0.24844845583695857 1.6546487500000002 1.4952457683728735 -v 0.06094864124852492 1.6546487500000002 1.4952456901088331 -v 0.24844828616566594 1.4671556250000002 1.4936093804004749 -v 0.060948471577232294 1.4671556250000002 1.4936093021364343 -v 0.21719825613825905 1.7174187500000002 1.4645421903984417 -v 0.09219817143048503 1.7174187500000002 1.4645421409494137 -v 0.21719818439525534 1.4049306250000002 1.461815082699596 -v 0.09219809968748133 1.4049306250000002 1.4618150332505682 -v 0.21719814124125333 1.7163281250000002 1.5895372755345778 -v 0.09219805653347932 1.7163281250000002 1.5895372260855498 -v 0.2171980694982496 1.4038400000000002 1.5868101678357323 -v 0.09219860973693034 1.4038400000000002 1.586810110205707 -v 0.18594821831056643 2.717108125 1.5045177905618419 -v 0.1234484884299068 2.717108125 1.5045177617468293 -v 0.1859483604284285 1.7171462500000003 1.4957907910383557 -v 0.12344863054776886 1.71714625 1.495790762223343 -v 0.18594815677156495 2.7165625 1.5670150206566826 -v 0.12344842689090534 2.7165625 1.56701499184167 -v 0.18594830707042426 1.716600625 1.5582886460796512 -v 0.12344857718976461 1.716600625 1.5582886172646386 -vt 0.375 0.1875 -vt 0.375 0.5 -vt 0.125 0.5 -vt 0.125 0.1875 -vt 0.375 0.1875 -vt 0.375 0.5 -vt 0.125 0.5 -vt 0.125 0.1875 -vt 1 0.5 -vt 0.75 0.5 -vt 0.75 0 -vt 1 0 -vt 1 0.5 -vt 0.75 0.5 -vt 0.75 0 -vt 1 0 -vt 1 1 -vt 0.6875 1 -vt 0.6875 0.5 -vt 1 0.5 -vt 1 1 -vt 0.6875 1 -vt 0.6875 0.5 -vt 1 0.5 +f 692/1941/486 705/1942/486 706/1943/486 690/1944/486 +f 690/1945/487 706/1946/487 701/1947/487 697/1948/487 +f 691/1949/488 692/1950/488 690/1951/488 689/1952/488 +o filter +v -0.1562 0.7607 1.4842 +v -0.1562 0.8855 1.4777 +v -0.1562 0.7542 1.3594 +v -0.1562 0.879 1.3529 +v -0.0312 0.7574 1.4218 +v -0.0312 0.8823 1.4153 +v -0.0312 0.7542 1.3594 +v -0.0312 0.879 1.3529 +v -0.375 1.1993 1.4926 +v -0.375 1.1894 1.3053 +v -0.3687 0.9493 1.4994 +v -0.3687 0.9401 1.3246 +v -0.1875 1.1993 1.4926 +v -0.1875 1.1894 1.3053 +v -0.1937 0.9493 1.4994 +v -0.1937 0.9401 1.3246 +v -0.3437 0.9414 1.3496 +v -0.3437 0.948 1.4744 +v -0.3437 0.879 1.3529 +v -0.3437 0.8855 1.4777 +v -0.2187 0.9414 1.3496 +v -0.2187 0.948 1.4744 +v -0.2187 0.879 1.3529 +v -0.2187 0.8855 1.4777 +v -0.2812 0.7607 1.4842 +v -0.2812 0.7542 1.3594 +v -0.2187 0.7607 1.4842 +v -0.2187 0.7542 1.3594 +v -0.0312 0.7476 1.2346 +v -0.1562 0.7476 1.2346 +v -0.0312 0.8725 1.228 +v -0.1562 0.8725 1.228 +v -0.3812 1.2058 1.4985 +v -0.3812 1.1954 1.2987 +v -0.3812 1.1434 1.5017 +v -0.3812 1.1329 1.302 +v -0.1812 1.2058 1.4985 +v -0.1812 1.1954 1.2987 +v -0.1812 1.1434 1.5017 +v -0.1812 1.1329 1.302 +vt 0.75 0.9375 +vt 0.625 0.9375 +vt 0.625 0.875 +vt 0.75 0.875 +vt 0.75 0.8125 +vt 0.75 0.9375 +vt 0.625 0.9375 +vt 0.625 0.8125 +vt 0.625 1 +vt 0.75 1 +vt 0.75 0.875 +vt 0.625 0.875 +vt 0.8125 0.9375 +vt 0.6875 0.9375 +vt 0.6875 0.8125 +vt 0.8125 0.8125 +vt 0.8125 0.5625 +vt 1 0.5625 +vt 1 0.3125 vt 0.8125 0.3125 -vt 0.8125 0.5 -vt 0.75 0.5 -vt 0.75 0.3125 -vt 0.875 0.3125 -vt 0.875 0.5 -vt 0.8125 0.5 +vt 0.8125 0.5625 +vt 1 0.5625 +vt 1 0.3125 vt 0.8125 0.3125 -vt 0.75 0.4375 -vt 0.75 0.5 -vt 0.875 0.5 -vt 0.875 0.4375 +vt 0.8125 0.5625 +vt 1 0.5625 +vt 1 0.375 +vt 0.8125 0.375 +vt 0.8125 0.375 +vt 1 0.375 +vt 1 0.1875 +vt 0.8125 0.1875 +vt 0.8125 0.5625 +vt 1 0.5625 +vt 1 0.3125 +vt 0.8125 0.3125 +vt 0.8125 0.5625 +vt 1 0.5625 +vt 1 0.3125 +vt 0.8125 0.3125 +vt 0.625 0.3125 +vt 0.625 0.375 +vt 0.75 0.375 vt 0.75 0.3125 +vt 0.625 0.3125 +vt 0.625 0.375 vt 0.75 0.375 -vt 0.875 0.375 -vt 0.875 0.3125 -vt 0.875 0.3125 -vt 0.875 0.5 -vt 0.75 0.5 vt 0.75 0.3125 -vt 0.1875 0.625 -vt 0.1875 0.6875 -vt 0 0.6875 -vt 0 0.625 -vt 0.375 0.625 -vt 0.375 0.6875 -vt 0.1875 0.6875 -vt 0.1875 0.625 -vt 0.4375 0.6875 -vt 0.4375 0.75 -vt 0 0.75 -vt 0 0.6875 -vt 0.4375 0.5625 -vt 0.4375 0.625 -vt 0 0.625 -vt 0 0.5625 -vt 0.25 0.75 -vt 0.25 1 -vt 0 1 -vt 0 0.75 -vt 1 0.75 -vt 1 1 +vt 0.75 0.3125 +vt 0.75 0.375 +vt 0.625 0.375 +vt 0.625 0.3125 +vt 0.75 0.3125 +vt 0.75 0.375 +vt 0.625 0.375 +vt 0.625 0.3125 +vt 0.625 0.875 +vt 0.625 0.9375 +vt 0.75 0.9375 +vt 0.75 0.875 +vt 0.625 0.9375 +vt 0.75 0.9375 +vt 0.75 0.8125 +vt 0.625 0.8125 +vt 0.75 0.875 vt 0.75 1 +vt 0.625 1 +vt 0.625 0.875 +vt 0.6875 0.8125 +vt 0.6875 0.9375 +vt 0.8125 0.9375 +vt 0.8125 0.8125 +vt 0.625 0.75 +vt 0.625 0.8125 +vt 0.75 0.8125 vt 0.75 0.75 +vt 0.625 0.75 +vt 0.625 0.8125 +vt 0.75 0.8125 vt 0.75 0.75 -vt 0.75 1 -vt 0.25 1 -vt 0.25 0.75 -vt 1 0.5 -vt 1 0.75 -vt 0.5 0.75 -vt 0.5 0.5 vt 0.75 0.75 -vt 0.75 1 -vt 0.25 1 -vt 0.25 0.75 +vt 0.75 0.8125 +vt 0.625 0.8125 +vt 0.625 0.75 vt 0.75 0.75 -vt 0.75 1 -vt 0.25 1 -vt 0.25 0.75 -vt 0.9375 0.3125 -vt 0.9375 0.5 -vt 0.875 0.5 -vt 0.875 0.3125 -vt 1 0.3125 -vt 1 0.5 -vt 0.9375 0.5 -vt 0.9375 0.3125 -vt 0.875 0.4375 -vt 0.875 0.5 -vt 1 0.5 -vt 1 0.4375 -vt 0.875 0.3125 -vt 0.875 0.375 -vt 1 0.375 -vt 1 0.3125 -vt 1 0.3125 -vt 1 0.5 -vt 0.875 0.5 -vt 0.875 0.3125 -vt 0.75 0 -vt 0.75 0.1875 -vt 0.5625 0.1875 -vt 0.5625 0 -vt 0.75 0.1875 -vt 0.5625 0.1875 -vt 0.5625 0.125 -vt 0.75 0.125 -vt 0.5625 0.0625 -vt 0.75 0.0625 -vt 0.75 0 -vt 0.5625 0 -vt 0.75 0 -vt 0.75 0.1875 -vt 0.6875 0.1875 -vt 0.6875 0 -vt 0.625 0 -vt 0.625 0.1875 -vt 0.5625 0.1875 -vt 0.5625 0 -vt 0 0.125 -vt 0 0.4375 -vt 0.125 0.4375 -vt 0.125 0.125 -vt 0 0.125 -vt 0 0.4375 -vt 0.125 0.4375 -vt 0.125 0.125 -vt 0.125 0.4375 -vt 0.125 0.5625 -vt 0 0.5625 -vt 0 0.4375 -vt 0.125 0 -vt 0.125 0.125 -vt 0 0.125 -vt 0 0 -vt 0.125 0.125 -vt 0.125 0.4375 -vt 0 0.4375 -vt 0 0.125 -vt 0.125 0.125 -vt 0.125 0.4375 -vt 0 0.4375 -vt 0 0.125 -vt 0.5625 0 -vt 0.5625 1 -vt 0.5 1 -vt 0.5 0 -vt 0.5625 0 -vt 0.5625 1 -vt 0.5 1 -vt 0.5 0 -vt 0.5625 0.9375 -vt 0.5625 1 -vt 0.5 1 -vt 0.5 0.9375 -vt 0.5625 0 -vt 0.5625 1 -vt 0.5 1 -vt 0.5 0 -vt 0.5625 0 -vt 0.5625 1 -vt 0.5 1 -vt 0.5 0 -vn -0.004363845428970429 -9.689683342296428e-19 -0.9999904783812054 -vn 0.004363845428970429 9.689683342296428e-19 0.9999904783812054 -vn 0.999990479453055 2.2204249093894623e-16 -0.0043635998039679765 -vn -0.999990479453055 -2.2204249093894623e-16 0.004363599803967921 -vn 2.220446049250313e-16 -1 0 -vn -2.220446049250313e-16 1 0 -vn -0.004363190429511382 -9.688228951335324e-19 -0.9999904812393345 -vn 0.004363161340884496 9.688164361608678e-19 0.9999904813662546 -vn 0.9999904959040442 2.2204249459179963e-16 -0.004359828159873063 -vn -0.9999904740931931 -2.2204248974881781e-16 0.004364827931444711 -vn -2.220446049250313e-16 1 0 -vn -0.004359828159873162 -9.680763213000625e-19 -0.9999904959040442 -vn 0.004369827703343824 9.702966659794363e-19 0.999990452257342 -vn 2.220446049250313e-16 -1 0 -vn -2.220446049250313e-16 1 0 -vn -0.00436484974376687 -9.691913369118387e-19 -0.9999904739979848 -vn 0.004362349864189418 9.686362521387032e-19 0.9999904849065627 -vn 0.999990479453055 2.2204249093894623e-16 -0.0043635998039679765 -vn -0.9999904795006522 -2.2204249094951494e-16 0.004363588896258164 -vn 2.220446049250313e-16 -1 0 -vn -2.220446049250313e-16 1 0 -vn -0.004363161340884496 -9.688164361608678e-19 -0.9999904813662546 -vn 0.0043631904295113435 9.68822895133524e-19 0.9999904812393345 -vn 0.9999904740931931 2.2204248974881781e-16 -0.004364827931444796 -vn -0.9999904959040442 -2.2204249459179963e-16 0.004359828159873162 -vn -2.220446049250313e-16 1 0 -vn -4.173927313950998e-7 -0.00872739014554607 0.9999619156053261 -vn -3.259309675572435e-9 0.9999619803486746 0.008719968873649196 -vn 3.6439637448568203e-9 -0.9999618931126021 -0.008729966933566844 -vn 0.9999999999992263 -9.123317046120878e-7 8.458015628067664e-7 -vn -0.9999999999577717 8.250625515639224e-7 0.000009152925073375659 -vn 3.9557689096927917e-7 0.008726743948913835 -0.9999619212449511 -vn -3.955768911930584e-7 -0.008726743948913837 0.9999619212449511 -vn -3.451544358890014e-9 0.9999619363675173 0.008725010952731748 -vn 3.451544360868683e-9 -0.9999619363675173 -0.008725010952731637 -vn 0.9999999999995512 -2.3759027932750214e-7 9.171391314958392e-7 -vn -0.9999999999980108 -0.0000017621620731271005 -9.345876567749822e-7 -vn 4.6102463642505576e-7 0.008726999907651321 -0.9999619190111187 -vn -4.6102463894213963e-7 -0.008726375008764019 0.9999619244646238 -vn -4.0249235691580416e-9 0.9999618923505356 0.008730054222971845 -vn 0.9999999999995053 1.3351958539827775e-7 9.858333402390507e-7 -vn -0.9999999999995041 -1.4170088734629298e-7 -9.859047661181508e-7 -usemtl radio_backpack -f 1249/3373/844 1247/3374/844 1246/3375/844 -f 1249/3373/844 1246/3375/844 1248/3376/844 -f 1252/3377/845 1250/3378/845 1251/3379/845 -f 1252/3377/845 1251/3379/845 1253/3380/845 -f 1246/3381/846 1247/3382/846 1251/3383/846 -f 1246/3381/846 1251/3383/846 1250/3384/846 -f 1249/3385/847 1248/3386/847 1252/3387/847 -f 1249/3385/847 1252/3387/847 1253/3388/847 -f 1248/3389/848 1246/3390/848 1250/3391/848 -f 1248/3389/848 1250/3391/848 1252/3392/848 -f 1253/3393/849 1251/3394/849 1247/3395/849 -f 1253/3393/849 1247/3395/849 1249/3396/849 -usemtl radio_backpack2 -f 1257/3397/850 1255/3398/850 1254/3399/850 -f 1257/3397/850 1254/3399/850 1256/3400/850 -f 1260/3401/851 1258/3402/851 1259/3403/851 -f 1260/3401/851 1259/3403/851 1261/3404/851 -f 1254/3405/852 1255/3406/852 1259/3407/852 -f 1254/3405/852 1259/3407/852 1258/3408/852 -f 1257/3409/853 1256/3410/853 1260/3411/853 -f 1257/3409/853 1260/3411/853 1261/3412/853 -f 1261/3413/854 1259/3414/854 1255/3415/854 -f 1261/3413/854 1255/3415/854 1257/3416/854 -f 1265/3417/855 1263/3418/855 1262/3419/855 -f 1265/3417/855 1262/3419/855 1264/3420/855 -f 1268/3421/856 1266/3422/856 1267/3423/856 -f 1268/3421/856 1267/3423/856 1269/3424/856 -f 1264/3425/857 1262/3426/857 1266/3427/857 -f 1264/3425/857 1266/3427/857 1268/3428/857 -f 1269/3429/858 1267/3430/858 1263/3431/858 -f 1269/3429/858 1263/3431/858 1265/3432/858 -f 1273/3433/859 1271/3434/859 1270/3435/859 -f 1273/3433/859 1270/3435/859 1272/3436/859 -f 1276/3437/860 1274/3438/860 1275/3439/860 -f 1276/3437/860 1275/3439/860 1277/3440/860 -f 1270/3441/861 1271/3442/861 1275/3443/861 -f 1270/3441/861 1275/3443/861 1274/3444/861 -f 1273/3445/862 1272/3446/862 1276/3447/862 -f 1273/3445/862 1276/3447/862 1277/3448/862 -f 1272/3449/863 1270/3450/863 1274/3451/863 -f 1272/3449/863 1274/3451/863 1276/3452/863 -f 1277/3453/864 1275/3454/864 1271/3455/864 -f 1277/3453/864 1271/3455/864 1273/3456/864 -f 1281/3457/865 1279/3458/865 1278/3459/865 -f 1281/3457/865 1278/3459/865 1280/3460/865 -f 1284/3461/866 1282/3462/866 1283/3463/866 -f 1284/3461/866 1283/3463/866 1285/3464/866 -f 1278/3465/867 1279/3466/867 1283/3467/867 -f 1278/3465/867 1283/3467/867 1282/3468/867 -f 1281/3469/868 1280/3470/868 1284/3471/868 -f 1281/3469/868 1284/3471/868 1285/3472/868 -f 1285/3473/869 1283/3474/869 1279/3475/869 -f 1285/3473/869 1279/3475/869 1281/3476/869 -usemtl radio_backpack -f 1292/3477/870 1290/3478/870 1291/3479/870 -f 1292/3477/870 1291/3479/870 1293/3480/870 -f 1286/3481/871 1287/3482/871 1291/3483/871 -f 1286/3481/871 1291/3483/871 1290/3484/871 -f 1289/3485/872 1288/3486/872 1292/3487/872 -f 1289/3485/872 1292/3487/872 1293/3488/872 -f 1288/3489/873 1286/3490/873 1290/3491/873 -f 1288/3489/873 1290/3491/873 1292/3492/873 -f 1293/3493/874 1291/3494/874 1287/3495/874 -f 1293/3493/874 1287/3495/874 1289/3496/874 -f 1297/3497/875 1295/3498/875 1294/3499/875 -f 1297/3497/875 1294/3499/875 1296/3500/875 -f 1300/3501/876 1298/3502/876 1299/3503/876 -f 1300/3501/876 1299/3503/876 1301/3504/876 -f 1294/3505/877 1295/3506/877 1299/3507/877 -f 1294/3505/877 1299/3507/877 1298/3508/877 -f 1297/3509/878 1296/3510/878 1300/3511/878 -f 1297/3509/878 1300/3511/878 1301/3512/878 -f 1296/3513/879 1294/3514/879 1298/3515/879 -f 1296/3513/879 1298/3515/879 1300/3516/879 -f 1301/3517/880 1299/3518/880 1295/3519/880 -f 1301/3517/880 1295/3519/880 1297/3520/880 -f 1305/3521/881 1303/3522/881 1302/3523/881 -f 1305/3521/881 1302/3523/881 1304/3524/881 -f 1308/3525/882 1306/3526/882 1307/3527/882 -f 1308/3525/882 1307/3527/882 1309/3528/882 -f 1302/3529/883 1303/3530/883 1307/3531/883 -f 1302/3529/883 1307/3531/883 1306/3532/883 -f 1304/3533/884 1302/3534/884 1306/3535/884 -f 1304/3533/884 1306/3535/884 1308/3536/884 -f 1309/3537/885 1307/3538/885 1303/3539/885 -f 1309/3537/885 1303/3539/885 1305/3540/885 -o gear_change -v 0.125 1.24375 -0.0625 -v 0.125 1.24375 -0.125 -v 0.125 0.93125 -0.0625 -v 0.125 0.93125 -0.125 -v 0.0625 1.24375 -0.0625 -v 0.0625 1.24375 -0.125 -v 0.0625 0.93125 -0.0625 -v 0.0625 0.93125 -0.125 -v 0.125 0.61875 -0.0625 -v 0.125 0.61875 -0.125 -v 0.0625 0.61875 -0.0625 -v 0.0625 0.61875 -0.125 -v 0.15625 1.36875 -0.03125 -v 0.15625 1.36875 -0.15625 -v 0.15625 1.24375 -0.03125 -v 0.15625 1.24375 -0.15625 -v 0.03125 1.36875 -0.03125 -v 0.03125 1.36875 -0.15625 -v 0.03125 1.24375 -0.03125 -v 0.03125 1.24375 -0.15625 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.15625 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.15625 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.15625 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.15625 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.71875 0.15625 -vt 0.65625 0.15625 -vt 0.65625 0.09375 -vt 0.71875 0.09375 -vt 0.59375 0.09375 -vt 0.65625 0.09375 -vt 0.65625 0.15625 -vt 0.59375 0.15625 -vt 0.6875 0.09375 -vt 0.6875 0.15625 -vt 0.625 0.15625 -vt 0.625 0.09375 -vt 0.65625 0.0625 -vt 0.59375 0.0625 -vt 0.59375 0 -vt 0.65625 0 -vt 0.6875 0.0625 -vt 0.6875 0.125 -vt 0.625 0.125 -vt 0.625 0.0625 -vt 0.625 0.1875 -vt 0.625 0.125 -vt 0.6875 0.125 -vt 0.6875 0.1875 -vn 1 0 0 -vn -1 0 0 -vn 0 1 0 -vn 0 0 1 -vn 0 0 -1 -vn 1 0 0 -vn -1 0 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 +vt 0.75 0.8125 +vt 0.625 0.8125 +vt 0.625 0.75 +vt 0.625 0.375 +vt 0.625 0.5 +vt 0.75 0.5 +vt 0.75 0.375 +vt 0.75 0.375 +vt 0.75 0.5 +vt 0.625 0.5 +vt 0.625 0.375 +vt 0.75 0.375 +vt 0.75 0.5 +vt 0.625 0.5 +vt 0.625 0.375 +vt 0.75 0.375 +vt 0.75 0.5 +vt 0.625 0.5 +vt 0.625 0.375 +vt 0.9375 0.5625 +vt 0.9375 0.75 +vt 1 0.75 +vt 1 0.5625 +vt 0.8125 0.75 +vt 1 0.75 +vt 1 0.6875 +vt 0.8125 0.6875 +vt 0.8125 0.75 +vt 1 0.75 +vt 1 0.5625 +vt 0.8125 0.5625 +vt 0.8125 0.75 +vt 1 0.75 +vt 1 0.6875 +vt 0.8125 0.6875 +vt 0.8125 0.75 +vt 1 0.75 +vt 1 0.6875 +vt 0.8125 0.6875 vn 1 0 0 +vn 0.45 0.05 0.89 +vn 0 -1 0.05 +vn 0 1 -0.05 +vn -1 -0.02 0 +vn 1 -0.02 0 +vn 0 1 -0.05 +vn 0 -1 0.05 +vn 0 0.03 1 +vn 0 -0.08 -1 vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -usemtl tracked_motorbike -f 1313/3541/886 1311/3542/886 1310/3543/886 -f 1313/3541/886 1310/3543/886 1312/3544/886 -f 1316/3545/887 1314/3546/887 1315/3547/887 -f 1316/3545/887 1315/3547/887 1317/3548/887 -f 1310/3549/888 1311/3550/888 1315/3551/888 -f 1310/3549/888 1315/3551/888 1314/3552/888 -f 1312/3553/889 1310/3554/889 1314/3555/889 -f 1312/3553/889 1314/3555/889 1316/3556/889 -f 1317/3557/890 1315/3558/890 1311/3559/890 -f 1317/3557/890 1311/3559/890 1313/3560/890 -f 1319/3561/891 1313/3562/891 1312/3563/891 -f 1319/3561/891 1312/3563/891 1318/3564/891 -f 1320/3565/892 1316/3566/892 1317/3567/892 -f 1320/3565/892 1317/3567/892 1321/3568/892 -f 1319/3569/893 1318/3570/893 1320/3571/893 -f 1319/3569/893 1320/3571/893 1321/3572/893 -f 1318/3573/894 1312/3574/894 1316/3575/894 -f 1318/3573/894 1316/3575/894 1320/3576/894 -f 1321/3577/895 1317/3578/895 1313/3579/895 -f 1321/3577/895 1313/3579/895 1319/3580/895 -f 1325/3581/896 1323/3582/896 1322/3583/896 -f 1325/3581/896 1322/3583/896 1324/3584/896 -f 1328/3585/897 1326/3586/897 1327/3587/897 -f 1328/3585/897 1327/3587/897 1329/3588/897 -f 1322/3589/898 1323/3590/898 1327/3591/898 -f 1322/3589/898 1327/3591/898 1326/3592/898 -f 1325/3593/899 1324/3594/899 1328/3595/899 -f 1325/3593/899 1328/3595/899 1329/3596/899 -f 1324/3597/900 1322/3598/900 1326/3599/900 -f 1324/3597/900 1326/3599/900 1328/3600/900 -f 1329/3601/901 1327/3602/901 1323/3603/901 -f 1329/3601/901 1323/3603/901 1325/3604/901 -o lever -v -0.125 1.11875 -0.21875 -v -0.125 1.11875 -0.28125 -v -0.125 0.80625 -0.21875 -v -0.125 0.80625 -0.28125 -v -0.1875 1.11875 -0.21875 -v -0.1875 1.11875 -0.28125 -v -0.1875 0.80625 -0.21875 -v -0.1875 0.80625 -0.28125 -v -0.125 0.49375 -0.21875 -v -0.125 0.49375 -0.28125 -v -0.1875 0.49375 -0.21875 -v -0.1875 0.49375 -0.28125 -v -0.09375 1.24375 -0.1875 -v -0.09375 1.24375 -0.3125 -v -0.09375 1.11875 -0.1875 -v -0.09375 1.11875 -0.3125 -v -0.21875 1.24375 -0.1875 -v -0.21875 1.24375 -0.3125 -v -0.21875 1.11875 -0.1875 -v -0.21875 1.11875 -0.3125 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.15625 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.15625 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.625 0.03125 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.03125 -vt 0.71875 0.15625 -vt 0.65625 0.15625 -vt 0.65625 0.09375 -vt 0.71875 0.09375 -vt 0.59375 0.09375 -vt 0.65625 0.09375 -vt 0.65625 0.15625 -vt 0.59375 0.15625 -vt 0.6875 0.09375 -vt 0.6875 0.15625 -vt 0.625 0.15625 -vt 0.625 0.09375 -vt 0.65625 0.0625 -vt 0.59375 0.0625 -vt 0.59375 0 -vt 0.65625 0 -vt 0.6875 0.0625 -vt 0.6875 0.125 -vt 0.625 0.125 -vt 0.625 0.0625 -vt 0.625 0.1875 -vt 0.625 0.125 -vt 0.6875 0.125 -vt 0.6875 0.1875 -vt 0.625 0.15625 -vt 0.625 0.1875 -vt 0.59375 0.1875 -vt 0.59375 0.15625 vn 1 0 0 -vn -1 0 0 -vn 0 0 1 -vn 0 0 -1 +vn 0 -0.05 -1 +vn 0 0.05 1 +vn 0 -1 0.05 +vn -0.89 -0.45 0.02 +vn 0 0.05 1 +vn 0 -0.05 -1 +vn 0 -1 0.05 +vn 0 1 -0.05 +vn 0 -0.05 -1 +vn 0 0.05 1 +vn 0 -1 0.05 +vn 0 1 -0.05 vn 1 0 0 vn -1 0 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -vn 1 0 0 vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -vn 0 1 0 -usemtl tracked_motorbike -f 1333/3605/902 1331/3606/902 1330/3607/902 -f 1333/3605/902 1330/3607/902 1332/3608/902 -f 1336/3609/903 1334/3610/903 1335/3611/903 -f 1336/3609/903 1335/3611/903 1337/3612/903 -f 1332/3613/904 1330/3614/904 1334/3615/904 -f 1332/3613/904 1334/3615/904 1336/3616/904 -f 1337/3617/905 1335/3618/905 1331/3619/905 -f 1337/3617/905 1331/3619/905 1333/3620/905 -f 1339/3621/906 1333/3622/906 1332/3623/906 -f 1339/3621/906 1332/3623/906 1338/3624/906 -f 1340/3625/907 1336/3626/907 1337/3627/907 -f 1340/3625/907 1337/3627/907 1341/3628/907 -f 1339/3629/908 1338/3630/908 1340/3631/908 -f 1339/3629/908 1340/3631/908 1341/3632/908 -f 1338/3633/909 1332/3634/909 1336/3635/909 -f 1338/3633/909 1336/3635/909 1340/3636/909 -f 1341/3637/910 1337/3638/910 1333/3639/910 -f 1341/3637/910 1333/3639/910 1339/3640/910 -f 1345/3641/911 1343/3642/911 1342/3643/911 -f 1345/3641/911 1342/3643/911 1344/3644/911 -f 1348/3645/912 1346/3646/912 1347/3647/912 -f 1348/3645/912 1347/3647/912 1349/3648/912 -f 1342/3649/913 1343/3650/913 1347/3651/913 -f 1342/3649/913 1347/3651/913 1346/3652/913 -f 1345/3653/914 1344/3654/914 1348/3655/914 -f 1345/3653/914 1348/3655/914 1349/3656/914 -f 1344/3657/915 1342/3658/915 1346/3659/915 -f 1344/3657/915 1346/3659/915 1348/3660/915 -f 1349/3661/916 1347/3662/916 1343/3663/916 -f 1349/3661/916 1343/3663/916 1345/3664/916 -f 1330/3665/917 1331/3666/917 1335/3667/917 -f 1330/3665/917 1335/3667/917 1334/3668/917 -o cane -v -0.125 0.53125 0.25 -v -0.125 0.53125 -0.25 -v -0.125 0.46875 0.25 -v -0.125 0.46875 -0.25 -v -0.1875 0.53125 0.25 -v -0.1875 0.53125 -0.25 -v -0.1875 0.46875 0.25 -v -0.1875 0.46875 -0.25 -vt 0.140625 0.96875 -vt 0.140625 0.984375 -vt 0.015625 0.984375 -vt 0.015625 0.96875 -vt 0.140625 0.96875 -vt 0.140625 0.984375 -vt 0.015625 0.984375 -vt 0.015625 0.96875 -vt 0.03125 0.859375 -vt 0.03125 0.984375 -vt 0.015625 0.984375 -vt 0.015625 0.859375 -vt 0.03125 0.859375 -vt 0.03125 0.984375 -vt 0.015625 0.984375 -vt 0.015625 0.859375 -vt 0.015625 0.984375 -vt 0.015625 1 -vt 0 1 -vt 0 0.984375 -vt 0.015625 0.984375 -vt 0.015625 1 -vt 0 1 -vt 0 0.984375 vn 1 0 0 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -usemtl common_steel_norivets -f 1353/3669/918 1351/3670/918 1350/3671/918 -f 1353/3669/918 1350/3671/918 1352/3672/918 -f 1356/3673/919 1354/3674/919 1355/3675/919 -f 1356/3673/919 1355/3675/919 1357/3676/919 -f 1350/3677/920 1351/3678/920 1355/3679/920 -f 1350/3677/920 1355/3679/920 1354/3680/920 -f 1353/3681/921 1352/3682/921 1356/3683/921 -f 1353/3681/921 1356/3683/921 1357/3684/921 -f 1352/3685/922 1350/3686/922 1354/3687/922 -f 1352/3685/922 1354/3687/922 1356/3688/922 -f 1357/3689/923 1355/3690/923 1351/3691/923 -f 1357/3689/923 1351/3691/923 1353/3692/923 -o transmission -v -0.25 0.65625 2.125 -v -0.25 0.65625 1.9375 -v -0.25 0.46875 2.125 -v -0.25 0.46875 1.9375 -v -0.4375 0.65625 2.125 -v -0.4375 0.65625 1.9375 -v -0.4375 0.46875 2.125 -v -0.4375 0.46875 1.9375 -v 0.4375 0.65625 2.125 -v 0.4375 0.65625 1.9375 -v 0.4375 0.46875 2.125 -v 0.4375 0.46875 1.9375 -v 0.25 0.65625 2.125 -v 0.25 0.65625 1.9375 -v 0.25 0.46875 2.125 -v 0.25 0.46875 1.9375 -vt 0.65625 1 -vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.65625 0.90625 -vt 0.65625 1 -vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.65625 0.90625 -vt 0.65625 1 -vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.65625 0.90625 -vt 0.65625 1 -vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.65625 0.90625 -vt 0.65625 1 -vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.65625 0.90625 -vt 0.65625 1 -vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.65625 0.90625 -vt 0.65625 1 +vn 0 1 -0.05 +vn 0 0.05 1 +vn 0 -0.05 -1 +usemtl v4_diesel2 +f 712/1953/489 711/1954/489 713/1955/489 714/1956/489 +f 712/1957/490 708/1958/490 707/1959/490 711/1960/490 +f 711/1961/491 707/1962/491 709/1963/491 713/1964/491 +f 708/1965/492 712/1966/492 714/1967/492 710/1968/492 +usemtl v4_diesel +f 715/1969/493 716/1970/493 718/1971/493 717/1972/493 +f 720/1973/494 719/1974/494 721/1975/494 722/1976/494 +f 720/1977/495 716/1978/495 715/1979/495 719/1980/495 +f 721/1981/496 717/1982/496 718/1983/496 722/1984/496 +f 719/1985/497 715/1986/497 717/1987/497 721/1988/497 +f 716/1989/498 720/1990/498 722/1991/498 718/1992/498 +usemtl v4_diesel2 +f 726/1993/499 724/1994/499 723/1995/499 725/1996/499 +f 729/1997/500 727/1998/500 728/1999/500 730/2000/500 +f 725/2001/501 723/2002/501 727/2003/501 729/2004/501 +f 730/2005/502 728/2006/502 724/2007/502 726/2008/502 +f 733/2009/503 731/2010/503 732/2011/503 734/2012/503 +f 726/2013/504 725/2014/504 732/2015/504 731/2016/504 +f 730/2017/505 726/2018/505 731/2019/505 733/2020/505 +f 734/2021/506 732/2022/506 725/2023/506 729/2024/506 +f 707/2025/507 733/2026/507 734/2027/507 709/2028/507 +f 710/2029/508 729/2030/508 730/2031/508 708/2032/508 +f 709/2033/509 734/2034/509 729/2035/509 710/2036/509 +f 708/2037/510 730/2038/510 733/2039/510 707/2040/510 +f 709/2041/511 736/2042/511 735/2043/511 713/2044/511 +f 714/2045/512 737/2046/512 738/2047/512 710/2048/512 +f 713/2049/513 735/2050/513 737/2051/513 714/2052/513 +f 710/2053/514 738/2054/514 736/2055/514 709/2056/514 +usemtl v4_diesel +f 739/2057/515 740/2058/515 742/2059/515 741/2060/515 +f 744/2061/516 743/2062/516 745/2063/516 746/2064/516 +f 744/2065/517 740/2066/517 739/2067/517 743/2068/517 +f 743/2069/518 739/2070/518 741/2071/518 745/2072/518 +f 740/2073/519 744/2074/519 746/2075/519 742/2076/519 +o engine_cylinder1 +v 0.0252 1.0764 1.05 +v 0.0252 1.0764 1.3 +v -0.1069 0.7932 1.05 +v -0.1069 0.7932 1.3 +v 0.2517 0.9707 1.05 +v 0.2517 0.9707 1.3 +v 0.1197 0.6875 1.05 +v 0.1197 0.6875 1.3 +v 0.0799 1.1198 1.0812 +v 0.0799 1.1198 1.2687 +v 0.0535 1.0632 1.0812 +v 0.0535 1.0632 1.2687 +v 0.2498 1.0406 1.0812 +v 0.2498 1.0406 1.2687 +v 0.2234 0.9839 1.0812 +v 0.2234 0.9839 1.2687 +v 0.078 1.1897 1.05 +v 0.078 1.1897 1.3 +v 0.0516 1.133 1.05 +v 0.0516 1.133 1.3 +v 0.3046 1.084 1.05 +v 0.3046 1.084 1.3 +v 0.2782 1.0274 1.05 +v 0.2782 1.0274 1.3 +v -0.1502 1.0764 0.7687 +v -0.1502 1.0764 1.0187 +v -0.0181 0.7932 0.7687 +v -0.0181 0.7932 1.0187 +v -0.3767 0.9707 0.7687 +v -0.3767 0.9707 1.0187 +v -0.2447 0.6875 0.7687 +v -0.2447 0.6875 1.0187 +v -0.2049 1.1198 0.8 +v -0.2049 1.1198 0.9875 +v -0.1785 1.0632 0.8 +v -0.1785 1.0632 0.9875 +v -0.3748 1.0406 0.8 +v -0.3748 1.0406 0.9875 +v -0.3484 0.9839 0.8 +v -0.3484 0.9839 0.9875 +v -0.203 1.1897 0.7687 +v -0.203 1.1897 1.0187 +v -0.1766 1.133 0.7687 +v -0.1766 1.133 1.0187 +v -0.4296 1.084 0.7687 +v -0.4296 1.084 1.0187 +v -0.4032 1.0274 0.7687 +v -0.4032 1.0274 1.0187 +vt 0.3125 0.4375 +vt 0.3125 0.75 +vt 0.5625 0.75 +vt 0.5625 0.4375 +vt 0.3125 0.4375 +vt 0.3125 0.75 +vt 0.5625 0.75 +vt 0.5625 0.4375 vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.65625 0.90625 -vt 0.65625 1 +vt 0.5625 0.75 +vt 0.3125 0.75 +vt 0.3125 1 +vt 0.3125 1 +vt 0.3125 0.75 +vt 0.5625 0.75 vt 0.5625 1 -vt 0.5625 0.90625 -vt 0.65625 0.90625 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -usemtl pipe34 -f 1358/3693/924 1359/3694/924 1363/3695/924 -f 1358/3693/924 1363/3695/924 1362/3696/924 -f 1361/3697/925 1360/3698/925 1364/3699/925 -f 1361/3697/925 1364/3699/925 1365/3700/925 -f 1360/3701/926 1358/3702/926 1362/3703/926 -f 1360/3701/926 1362/3703/926 1364/3704/926 -f 1365/3705/927 1363/3706/927 1359/3707/927 -f 1365/3705/927 1359/3707/927 1361/3708/927 -f 1366/3709/928 1367/3710/928 1371/3711/928 -f 1366/3709/928 1371/3711/928 1370/3712/928 -f 1369/3713/929 1368/3714/929 1372/3715/929 -f 1369/3713/929 1372/3715/929 1373/3716/929 -f 1368/3717/930 1366/3718/930 1370/3719/930 -f 1368/3717/930 1370/3719/930 1372/3720/930 -f 1373/3721/931 1371/3722/931 1367/3723/931 -f 1373/3721/931 1367/3723/931 1369/3724/931 -o armor_right -v 1.125 1.375 1.8125 -v 1.125 1.375 0.625 -v 1.0625 1.375 1.8125 -v 1.0625 1.375 0.625 -v 1.125 0.8750000000000001 1.8125 -v 1.125 0.8750000000000001 0.625 -v 1.0625000000000002 0.8750000000000001 1.8125 -v 1.0625000000000002 0.8750000000000001 0.625 -v 1.125 1.375 1.25 -v 1.125 0.8750000000000001 1.25 -v 1.0625000000000002 0.8750000000000001 1.25 -v 1.0625 1.375 1.25 -v 1.125 1.25 1.25 -v 1.125 1.25 1.8125 -v 1.0625 1.25 1.8125 -v 1.0625 1.25 1.25 -v 1.0625 1.25 0.625 -v 1.125 1.25 0.625 -vt 0.15625 1 -vt 0.15625 0.984375 -vt 0 0.984375 -vt 0 1 -vt 0.09375 1 -vt 0.09375 0.84375 -vt 0 0.84375 -vt 0 1 -vt 0.09375 0.40625 -vt 0.09375 0.25 -vt 0 0.25 -vt 0 0.40625 -vt 0.09375 1 -vt 0.09375 0.984375 -vt 0 0.984375 -vt 0 1 -vt 0.03125 0.984375 -vt 0.03125 1 -vt 0.125 1 -vt 0.125 0.984375 -vt 0.09375 0.390625 -vt 0.09375 0.25 -vt 0 0.25 -vt 0 0.390625 -vt 0.15625 0.984375 -vt 0.15625 1 -vt 0.296875 1 -vt 0.296875 0.984375 -vt 0.09375 1 -vt 0.09375 0.859375 -vt 0 0.859375 -vt 0 1 -vt 0.71875 0.25 -vt 0.71875 0.390625 -vt 0.75 0.390625 -vt 0.75 0.25 -vt 0.078125 0.984375 -vt 0.078125 1 -vt 0.109375 1 -vt 0.109375 0.984375 -vt 0.71875 0.859375 -vt 0.71875 1 -vt 0.75 1 -vt 0.75 0.859375 -vt 0.71875 0.25 -vt 0.71875 0.40625 -vt 0.75 0.40625 -vt 0.75 0.25 -vt 0.03125 1 -vt 0.03125 0.984375 -vt 0 0.984375 -vt 0 1 -vt 0.71875 0.84375 -vt 0.71875 1 -vt 0.75 1 -vt 0.75 0.84375 -vt 0.296875 1 -vt 0.296875 0.984375 -vt 0 0.984375 -vt 0 1 -vn 2.220446049250313e-16 -1 0 -vn 1 2.220446049250313e-16 0 -vn -1 -2.220446049250313e-16 0 -vn 0 0 1 -vn 0 0 -1 -vn 1 2.220446049250313e-16 0 -vn 2.220446049250313e-16 -1 0 -vn -1 -2.220446049250313e-16 0 -vn 1 2.220446049250313e-16 0 -vn 0 0 1 -vn -1 -2.220446049250313e-16 0 -vn -1 -2.220446049250313e-16 0 -vn 0 0 -1 -vn 1 2.220446049250313e-16 0 -vn -2.220446049250313e-16 1 0 -usemtl common_bottom_painted -f 1383/3725/932 1384/3726/932 1381/3727/932 -f 1383/3725/932 1381/3727/932 1379/3728/932 -f 1391/3729/933 1386/3730/933 1383/3731/933 -f 1391/3729/933 1383/3731/933 1379/3732/933 -usemtl common_bottom -f 1389/3733/934 1390/3734/934 1381/3735/934 -f 1389/3733/934 1381/3735/934 1384/3736/934 -usemtl common_bottom_painted -f 1387/3737/935 1388/3738/935 1380/3739/935 -f 1387/3737/935 1380/3739/935 1378/3740/935 -f 1390/3741/936 1391/3742/936 1379/3743/936 -f 1390/3741/936 1379/3743/936 1381/3744/936 -f 1386/3745/937 1387/3746/937 1378/3747/937 -f 1386/3745/937 1378/3747/937 1383/3748/937 -f 1384/3749/938 1383/3750/938 1378/3751/938 -f 1384/3749/938 1378/3751/938 1380/3752/938 -usemtl common_bottom -f 1388/3753/939 1389/3754/939 1384/3755/939 -f 1388/3753/939 1384/3755/939 1380/3756/939 -usemtl common_bottom_painted -f 1387/3757/940 1386/3758/940 1382/3759/940 -f 1387/3757/940 1382/3759/940 1374/3760/940 -f 1388/3761/941 1387/3762/941 1374/3763/941 -f 1388/3761/941 1374/3763/941 1376/3764/941 -usemtl common_bottom -f 1389/3765/942 1388/3766/942 1376/3767/942 -f 1389/3765/942 1376/3767/942 1385/3768/942 -f 1390/3769/943 1389/3770/943 1385/3771/943 -f 1390/3769/943 1385/3771/943 1377/3772/943 -usemtl common_bottom_painted -f 1391/3773/944 1390/3774/944 1377/3775/944 -f 1391/3773/944 1377/3775/944 1375/3776/944 -f 1386/3777/945 1391/3778/945 1375/3779/945 -f 1386/3777/945 1375/3779/945 1382/3780/945 -f 1375/3781/946 1377/3782/946 1376/3783/946 -f 1375/3781/946 1376/3783/946 1374/3784/946 -o armor_left -v -1.125 1.375 1.8125 -v -1.125 1.375 0.625 -v -1.0625 1.375 1.8125 -v -1.0625 1.375 0.625 -v -1.125 0.8750000000000001 1.8125 -v -1.125 0.8750000000000001 0.625 -v -1.0625000000000002 0.8750000000000001 1.8125 -v -1.0625000000000002 0.8750000000000001 0.625 -v -1.125 1.375 1.25 -v -1.125 0.8750000000000001 1.25 -v -1.0625000000000002 0.8750000000000001 1.25 -v -1.0625 1.375 1.25 -v -1.125 1.25 1.25 -v -1.125 1.25 1.8125 -v -1.0625 1.25 1.8125 -v -1.0625 1.25 1.25 -v -1.0625 1.25 0.625 -v -1.125 1.25 0.625 -vt 0 0.984375 -vt 0.15625 0.984375 -vt 0.15625 1 +vt 0.5625 0.4375 +vt 0.5625 0.75 +vt 0.3125 0.75 +vt 0.3125 0.4375 +vt 0.5625 0.4375 +vt 0.5625 0.75 +vt 0.3125 0.75 +vt 0.3125 0.4375 +vt 0.25 0.75 +vt 0.25 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.75 +vt 0.25 0.75 +vt 0.25 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.75 +vt 0.0625 0.75 +vt 0.0625 0.6875 +vt 0.25 0.6875 +vt 0.25 0.75 +vt 0.0625 0.6875 +vt 0.0625 0.75 +vt 0.25 0.75 +vt 0.25 0.6875 +vt 0.25 0.8125 +vt 0.25 0.75 +vt 0 0.75 +vt 0 0.8125 vt 0 1 -vt 0 0.84375 -vt 0.09375 0.84375 -vt 0.09375 1 +vt 0.0625 1 +vt 0.0625 0.75 +vt 0 0.75 +vt 0.25 1 +vt 0.25 0.75 +vt 0 0.75 vt 0 1 -vt 0 0.25 -vt 0.09375 0.25 -vt 0.09375 0.40625 -vt 0 0.40625 -vt 0 0.984375 -vt 0.09375 0.984375 -vt 0.09375 1 +vt 0.25 0.75 +vt 0.25 1 vt 0 1 -vt 0.125 1 -vt 0.03125 1 -vt 0.03125 0.984375 -vt 0.125 0.984375 -vt 0 0.25 -vt 0.09375 0.25 -vt 0.09375 0.390625 -vt 0 0.390625 -vt 0.296875 1 -vt 0.15625 1 -vt 0.15625 0.984375 -vt 0.296875 0.984375 -vt 0 0.859375 -vt 0.09375 0.859375 -vt 0.09375 1 +vt 0 0.75 +vt 0.25 1 +vt 0.25 0.9375 +vt 0 0.9375 vt 0 1 -vt 0.75 0.390625 -vt 0.71875 0.390625 -vt 0.71875 0.25 -vt 0.75 0.25 -vt 0.109375 1 -vt 0.078125 1 -vt 0.078125 0.984375 -vt 0.109375 0.984375 -vt 0.75 1 -vt 0.71875 1 -vt 0.71875 0.859375 -vt 0.75 0.859375 -vt 0.75 0.40625 -vt 0.71875 0.40625 -vt 0.71875 0.25 -vt 0.75 0.25 -vt 0 0.984375 -vt 0.03125 0.984375 -vt 0.03125 1 +vt 0 0.8125 +vt 0 0.75 +vt 0.25 0.75 +vt 0.25 0.8125 +vt 0.5625 0.75 +vt 0.3125 0.75 +vt 0.3125 0.4375 +vt 0.5625 0.4375 +vt 0.5625 0.75 +vt 0.3125 0.75 +vt 0.3125 0.4375 +vt 0.5625 0.4375 +vt 0.3125 0.75 +vt 0.5625 0.75 +vt 0.5625 1 +vt 0.3125 1 +vt 0.5625 0.75 +vt 0.3125 0.75 +vt 0.3125 1 +vt 0.5625 1 +vt 0.3125 0.75 +vt 0.5625 0.75 +vt 0.5625 0.4375 +vt 0.3125 0.4375 +vt 0.3125 0.75 +vt 0.5625 0.75 +vt 0.5625 0.4375 +vt 0.3125 0.4375 +vt 0.0625 0.6875 +vt 0.25 0.6875 +vt 0.25 0.75 +vt 0.0625 0.75 +vt 0.0625 0.6875 +vt 0.25 0.6875 +vt 0.25 0.75 +vt 0.0625 0.75 +vt 0.25 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.75 +vt 0.25 0.75 +vt 0.25 0.75 +vt 0.0625 0.75 +vt 0.0625 0.6875 +vt 0.25 0.6875 +vt 0 0.75 +vt 0.25 0.75 +vt 0.25 0.8125 +vt 0 0.8125 +vt 0.0625 0.75 +vt 0.0625 1 vt 0 1 -vt 0.75 1 -vt 0.71875 1 -vt 0.71875 0.84375 -vt 0.75 0.84375 -vt 0 0.984375 -vt 0.296875 0.984375 -vt 0.296875 1 +vt 0 0.75 +vt 0 0.75 +vt 0.25 0.75 +vt 0.25 1 +vt 0 1 +vt 0 1 +vt 0.25 1 +vt 0.25 0.75 +vt 0 0.75 +vt 0 0.9375 +vt 0.25 0.9375 +vt 0.25 1 vt 0 1 -vn -2.220446049250313e-16 -1 0 -vn -1 2.220446049250313e-16 0 -vn 1 -2.220446049250313e-16 0 +vt 0.25 0.75 +vt 0 0.75 +vt 0 0.8125 +vt 0.25 0.8125 +vn -0.91 0.42 0 +vn 0.91 -0.42 0 +vn 0.42 0.91 0 +vn -0.42 -0.91 0 +vn 0 0 -1 vn 0 0 1 +vn -0.91 0.42 0 +vn 0.91 -0.42 0 vn 0 0 -1 -vn -1 2.220446049250313e-16 0 -vn -2.220446049250313e-16 -1 0 -vn 1 -2.220446049250313e-16 0 -vn -1 2.220446049250313e-16 0 vn 0 0 1 -vn 1 -2.220446049250313e-16 0 -vn 1 -2.220446049250313e-16 0 +vn -0.91 0.42 0 +vn 0.91 -0.42 0 +vn 0.42 0.91 0 +vn -0.42 -0.91 0 vn 0 0 -1 -vn -1 2.220446049250313e-16 0 -vn 2.220446049250313e-16 1 0 -usemtl common_bottom_painted -f 1399/3785/947 1402/3786/947 1401/3787/947 -f 1399/3785/947 1401/3787/947 1397/3788/947 -f 1401/3789/948 1404/3790/948 1409/3791/948 -f 1401/3789/948 1409/3791/948 1397/3792/948 -usemtl common_bottom -f 1399/3793/949 1408/3794/949 1407/3795/949 -f 1399/3793/949 1407/3795/949 1402/3796/949 -usemtl common_bottom_painted -f 1398/3797/950 1406/3798/950 1405/3799/950 -f 1398/3797/950 1405/3799/950 1396/3800/950 -f 1397/3801/951 1409/3802/951 1408/3803/951 -f 1397/3801/951 1408/3803/951 1399/3804/951 -f 1396/3805/952 1405/3806/952 1404/3807/952 -f 1396/3805/952 1404/3807/952 1401/3808/952 -f 1396/3809/953 1401/3810/953 1402/3811/953 -f 1396/3809/953 1402/3811/953 1398/3812/953 -usemtl common_bottom -f 1402/3813/954 1407/3814/954 1406/3815/954 -f 1402/3813/954 1406/3815/954 1398/3816/954 -usemtl common_bottom_painted -f 1400/3817/955 1404/3818/955 1405/3819/955 -f 1400/3817/955 1405/3819/955 1392/3820/955 -f 1392/3821/956 1405/3822/956 1406/3823/956 -f 1392/3821/956 1406/3823/956 1394/3824/956 -usemtl common_bottom -f 1394/3825/957 1406/3826/957 1407/3827/957 -f 1394/3825/957 1407/3827/957 1403/3828/957 -f 1403/3829/958 1407/3830/958 1408/3831/958 -f 1403/3829/958 1408/3831/958 1395/3832/958 -usemtl common_bottom_painted -f 1395/3833/959 1408/3834/959 1409/3835/959 -f 1395/3833/959 1409/3835/959 1393/3836/959 -f 1393/3837/960 1409/3838/960 1404/3839/960 -f 1393/3837/960 1404/3839/960 1400/3840/960 -f 1394/3841/961 1395/3842/961 1393/3843/961 -f 1394/3841/961 1393/3843/961 1392/3844/961 -o engine -v -0.25533125 0.8125 0.874965625 -v -0.25533125 0.8125 0.812465625 -v -0.25533125 0.4375 0.874965625 -v -0.25533125 0.4375 0.812465625 -v 0.11966874999999999 0.8125 0.874965625 -v 0.11966874999999999 0.8125 0.812465625 -v 0.11966874999999999 0.4375 0.874965625 -v 0.11966874999999999 0.4375 0.812465625 -v -0.22408125 0.78125 0.812465625 -v -0.22408125 0.78125 0.749965625 -v -0.22408125 0.46875 0.812465625 -v -0.22408125 0.46875 0.749965625 -v 0.08841874999999999 0.78125 0.812465625 -v 0.08841874999999999 0.78125 0.749965625 -v 0.08841874999999999 0.46875 0.812465625 -v 0.08841874999999999 0.46875 0.749965625 -v -0.25533125 0.8125 0.749965625 -v -0.25533125 0.8125 0.687465625 -v -0.25533125 0.4375 0.749965625 -v -0.25533125 0.4375 0.687465625 -v 0.11966874999999999 0.8125 0.749965625 -v 0.11966874999999999 0.8125 0.687465625 -v 0.11966874999999999 0.4375 0.749965625 -v 0.11966874999999999 0.4375 0.687465625 -v 0.15625 0.9375 0.9375 -v 0.15625 0.9375 0.8125 -v 0.15625 0.8125 0.9375 -v 0.15625 0.8125 0.8125 -v 0.28125 0.875 0.9375 -v 0.28125 0.875 0.8125 -v 0.28125 0.8125 0.9375 -v 0.28125 0.8125 0.8125 -v 0.15625 0.6875 0.875 -v 0.15625 0.6875 0.75 -v 0.28125 0.6875 0.875 -v 0.28125 0.6875 0.75 -v 0.15625 0.5625 0.875 -v 0.28125 0.5625 0.875 -v 0.15625 0.625 0.75 -v 0.28125 0.625 0.75 -v 0.15625 0.6875 1.25 -v 0.15625 0.5625 1.25 -v 0.28125 0.6875 1.25 -v 0.28125 0.5625 1.25 -v 0.15625 0.8125 1.25 -v 0.15625 0.8125 1.125 -v 0.15625 0.6875 1.125 -v 0.28125 0.8125 1.25 -v 0.28125 0.8125 1.125 -v 0.28125 0.6875 1.125 -v 0.15625 0.9375 1.25 -v 0.15625 0.9375 1.125 -v 0.28125 0.875 1.25 -v 0.28125 0.875 1.125 -v 0.28125 0.625 1.375 -v 0.15625 0.625 1.375 -v 0.28125 0.5625 1.375 -v 0.15625 0.5625 1.375 -v 0.15625 0.4375 1.375 -v 0.28125 0.4375 1.375 -v 0.15625 0.5 1.25 -v 0.28125 0.5 1.25 -v 0.15625 0.5625 1.5 -v 0.15625 0.4375 1.5 -v 0.28125 0.5625 1.4375 -v 0.28125 0.4375 1.4375 -v -0.28125 0.625 1.5 -v -0.28125 0.625 1.375 -v -0.28125 0.5 1.5 -v -0.28125 0.5 1.375 -v -0.40625 0.625 1.4375 -v -0.40625 0.5 1.4375 -v -0.40625 0.625 1.375 -v -0.40625 0.5 1.375 -v -0.28125 0.625 0.9375 -v -0.28125 0.5 0.9375 -v -0.40625 0.625 0.9375 -v -0.40625 0.5 0.9375 -v -0.40625 0.6875 1.25 -v -0.40625 0.6875 1.375 -v -0.40625 0.625 1.25 -v -0.28125 0.6875 1.25 -v -0.28125 0.6875 1.375 -v -0.28125 0.625 1.25 -v -0.40625 0.8125 1.25 -v -0.28125 0.8125 1.25 -v -0.40625 0.75 1.375 -v -0.28125 0.75 1.375 -v -0.28125 0.9375 1.25 -v -0.28125 0.9375 1.125 -v -0.28125 0.8125 1.125 -v -0.40625 0.875 1.25 -v -0.40625 0.875 1.125 -v -0.40625 0.8125 1.125 -v -0.28125 0.75 1.125 -v -0.40625 0.75 1.125 -v -0.406249375 0.75 0.96875 -v -0.406249375 0.75 1.09375 -v -0.40625 0.625 0.96875 -v -0.40625 0.625 1.09375 -v -0.28125 0.6875 0.96875 -v -0.28125 0.6875 1.09375 -v -0.28125 0.625 0.96875 -v -0.28125 0.625 1.09375 -v -0.40625 0.8125 0.9375 -v -0.40625 0.625 1.125 -v -0.34375 0.8125 1.125 -v -0.34375 0.8125 0.9375 -v -0.34375 0.625 1.125 -v -0.34375 0.625 0.9375 -v -0.28125 0.9375 0.9375 -v -0.28125 0.9375 0.8125 -v -0.28125 0.8125 0.9375 -v -0.28125 0.8125 0.8125 -v -0.40625 0.875 0.9375 -v -0.40625 0.875 0.8125 -v -0.40625 0.8125 0.8125 -v -0.40625 0.625 0.8125 -v -0.28125 0.625 0.8125 -v -0.28125 0.5625 0.8125 -v -0.40625 0.5625 0.8125 -v -0.03125 0.96875 1.4875 -v -0.03125 0.96875 1.3 -v -0.03125 0.65625 1.4875 -v -0.03125 0.65625 1.3 -v 0.28125 0.96875 1.4875 -v 0.28125 0.96875 1.3 -v 0.28125 0.65625 1.4875 -v 0.28125 0.65625 1.3 -v -0.2134175 0.59994875 1.4375 -v -0.2134175 0.59994875 1.375 -v -0.07517812500000001 0.473275625 1.4375 -v -0.07517812500000001 0.473275625 1.375 -v -0.0022956250000000233 0.830348125 1.4375 -v -0.0022956250000000233 0.830348125 1.375 -v 0.13594374999999997 0.7036743750000001 1.4375 -v 0.13594374999999997 0.7036743750000001 1.375 -v 0.03125 1.1875 1.15 -v 0.03125 1.1875 0.9624999999999999 -v -0.15625 1.1875 1.15 -v -0.15625 1.1875 0.9624999999999999 -v 0.03125 1.125 1.15 -v 0.03125 1.125 0.9624999999999999 -v -0.15625 1.125 1.15 -v -0.15625 1.125 0.9624999999999999 -v -0.125 1.125 1.1125 -v -0.125 1.125 0.9875 -v -0.125 1.0625 1.1125 -v -0.125 1.0625 0.9875 -v 0 1.125 1.1125 -v 0 1.125 0.9875 -v 0 1.0625 1.1125 -v 0 1.0625 0.9875 -v -0.125 0.9375 0.9875 -v 0 0.9375 0.9875 -v -0.125 1 0.8625 -v 0 1 0.8625 -v -0.125 0.9375 0.8625 -v 0 0.9375 0.8625 -v -0.125 0.875 0.9875 -v -0.125 0.875 0.8625 -v 0 0.875 0.9875 -v 0 0.875 0.8625 -v -0.125 1.0625 1.175 -v -0.125 0.9375 1.175 -v 0 1.0625 1.175 -v 0 0.9375 1.175 -v -0.125 1 1.3 -v 0 1 1.3 -v -0.125 0.9375 1.3 -v 0 0.9375 1.3 -v -0.125 0.875 1.175 -v -0.125 0.875 1.3 -v 0 0.875 1.175 -v 0 0.875 1.3 -v -0.25533125 0.8125 1.374965625 -v -0.25533125 0.4375 1.374965625 -v 0.11966874999999999 0.8125 1.374965625 -v 0.11966874999999999 0.4375 1.374965625 -v -0.125 1.1875 1.125 -v 0 1.1875 1.125 -v -0.125 1.1875 1 -v 0 1.1875 1 -v -0.125 1.3125 1.125 -v 0 1.25 1.125 -v -0.125 1.3125 1 -v 0 1.25 1 -v -0.3125 1.1875 1 -v -0.3125 1.3125 1 -v -0.3125 1.1875 1.125 -v -0.3125 1.3125 1.125 -v -0.4375 1.3125 1 -v -0.4375 1.1875 1 -v -0.4375 1.3125 1.0625 -v -0.4375 1.1875 1.0625 -v -0.3125 1.1875 0.6875 -v -0.3125 1.3125 0.6875 -v -0.4375 1.1875 0.6875 -v -0.4375 1.3125 0.6875 -vt 0.375 0.75 -vt 0.4375 0.75 -vt 0.4375 0.375 -vt 0.375 0.375 -vt 0.6875 0.75 -vt 0.75 0.75 -vt 0.75 0.375 -vt 0.6875 0.375 -vt 0.75 0.75 -vt 0.375 0.75 -vt 0.375 0.6875 -vt 0.75 0.6875 -vt 0.75 0.4375 -vt 0.375 0.4375 -vt 0.375 0.375 -vt 0.75 0.375 -vt 0.375 0.75 -vt 0.75 0.75 -vt 0.75 0.375 -vt 0.375 0.375 -vt 0.75 0.6875 -vt 0.8125 0.6875 -vt 0.8125 0.375 -vt 0.75 0.375 -vt 0.75 0.6875 -vt 0.8125 0.6875 -vt 0.8125 0.375 -vt 0.75 0.375 -vt 0.75 0.375 -vt 0.75 0.6875 -vt 0.8125 0.6875 -vt 0.8125 0.375 -vt 0.75 0.375 -vt 0.75 0.6875 -vt 0.8125 0.6875 -vt 0.8125 0.375 -vt 0.375 0.75 -vt 0.4375 0.75 -vt 0.4375 0.375 -vt 0.375 0.375 -vt 0.6875 0.75 -vt 0.75 0.75 -vt 0.75 0.375 -vt 0.6875 0.375 -vt 0.75 0.75 -vt 0.375 0.75 -vt 0.375 0.6875 -vt 0.75 0.6875 -vt 0.75 0.4375 -vt 0.375 0.4375 -vt 0.375 0.375 -vt 0.75 0.375 -vt 0.75 0.75 -vt 0.375 0.75 -vt 0.375 0.375 -vt 0.75 0.375 -vt 0.75 0.9375 -vt 0.625 0.9375 -vt 0.625 0.875 -vt 0.75 0.875 -vt 0.75 0.8125 -vt 0.75 0.9375 -vt 0.625 0.9375 -vt 0.625 0.8125 -vt 0.625 1 -vt 0.75 1 -vt 0.75 0.875 -vt 0.625 0.875 -vt 0.8125 0.9375 -vt 0.6875 0.9375 -vt 0.6875 0.8125 -vt 0.8125 0.8125 -vt 0.75 0.875 -vt 0.625 0.875 -vt 0.625 0.75 +vn 0 0 1 +vn 0.91 0.42 0 +vn -0.91 -0.42 0 +vn -0.42 0.91 0 +vn 0.42 -0.91 0 +vn 0 0 -1 +vn 0 0 1 +vn 0.91 0.42 0 +vn -0.91 -0.42 0 +vn 0 0 -1 +vn 0 0 1 +vn 0.91 0.42 0 +vn -0.91 -0.42 0 +vn -0.42 0.91 0 +vn 0.42 -0.91 0 +vn 0 0 -1 +vn 0 0 1 +usemtl engine_4 +f 750/2077/520 748/2078/520 747/2079/520 749/2080/520 +f 753/2081/521 751/2082/521 752/2083/521 754/2084/521 +f 747/2085/522 748/2086/522 752/2087/522 751/2088/522 +f 750/2089/523 749/2090/523 753/2091/523 754/2092/523 +f 749/2093/524 747/2094/524 751/2095/524 753/2096/524 +f 754/2097/525 752/2098/525 748/2099/525 750/2100/525 +f 758/2101/526 756/2102/526 755/2103/526 757/2104/526 +f 761/2105/527 759/2106/527 760/2107/527 762/2108/527 +f 757/2109/528 755/2110/528 759/2111/528 761/2112/528 +f 762/2113/529 760/2114/529 756/2115/529 758/2116/529 +f 766/2117/530 764/2118/530 763/2119/530 765/2120/530 +f 769/2121/531 767/2122/531 768/2123/531 770/2124/531 +f 763/2125/532 764/2126/532 768/2127/532 767/2128/532 +f 766/2129/533 765/2130/533 769/2131/533 770/2132/533 +f 765/2133/534 763/2134/534 767/2135/534 769/2136/534 +f 770/2137/535 768/2138/535 764/2139/535 766/2140/535 +f 771/2141/536 772/2142/536 774/2143/536 773/2144/536 +f 776/2145/537 775/2146/537 777/2147/537 778/2148/537 +f 776/2149/538 772/2150/538 771/2151/538 775/2152/538 +f 777/2153/539 773/2154/539 774/2155/539 778/2156/539 +f 775/2157/540 771/2158/540 773/2159/540 777/2160/540 +f 772/2161/541 776/2162/541 778/2163/541 774/2164/541 +f 779/2165/542 780/2166/542 782/2167/542 781/2168/542 +f 784/2169/543 783/2170/543 785/2171/543 786/2172/543 +f 783/2173/544 779/2174/544 781/2175/544 785/2176/544 +f 780/2177/545 784/2178/545 786/2179/545 782/2180/545 +f 787/2181/546 788/2182/546 790/2183/546 789/2184/546 +f 792/2185/547 791/2186/547 793/2187/547 794/2188/547 +f 792/2189/548 788/2190/548 787/2191/548 791/2192/548 +f 793/2193/549 789/2194/549 790/2195/549 794/2196/549 +f 791/2197/550 787/2198/550 789/2199/550 793/2200/550 +f 788/2201/551 792/2202/551 794/2203/551 790/2204/551 +o engine_cylinder2 +v -0.1502 1.0764 1.05 +v -0.1502 1.0764 1.3 +v -0.0181 0.7932 1.05 +v -0.0181 0.7932 1.3 +v -0.3767 0.9707 1.05 +v -0.3767 0.9707 1.3 +v -0.2447 0.6875 1.05 +v -0.2447 0.6875 1.3 +v -0.2049 1.1198 1.0812 +v -0.2049 1.1198 1.2687 +v -0.1785 1.0632 1.0812 +v -0.1785 1.0632 1.2687 +v -0.3748 1.0406 1.0812 +v -0.3748 1.0406 1.2687 +v -0.3484 0.9839 1.0812 +v -0.3484 0.9839 1.2687 +v -0.203 1.1897 1.05 +v -0.203 1.1897 1.3 +v -0.1766 1.133 1.05 +v -0.1766 1.133 1.3 +v -0.4296 1.084 1.05 +v -0.4296 1.084 1.3 +v -0.4032 1.0274 1.05 +v -0.4032 1.0274 1.3 +v 0.0252 1.0764 0.7687 +v 0.0252 1.0764 1.0187 +v -0.1069 0.7932 0.7687 +v -0.1069 0.7932 1.0187 +v 0.2517 0.9707 0.7687 +v 0.2517 0.9707 1.0187 +v 0.1197 0.6875 0.7687 +v 0.1197 0.6875 1.0187 +v 0.0799 1.1198 0.8 +v 0.0799 1.1198 0.9875 +v 0.0535 1.0632 0.8 +v 0.0535 1.0632 0.9875 +v 0.2498 1.0406 0.8 +v 0.2498 1.0406 0.9875 +v 0.2234 0.9839 0.8 +v 0.2234 0.9839 0.9875 +v 0.078 1.1897 0.7687 +v 0.078 1.1897 1.0187 +v 0.0516 1.133 0.7687 +v 0.0516 1.133 1.0187 +v 0.3046 1.084 0.7687 +v 0.3046 1.084 1.0187 +v 0.2782 1.0274 0.7687 +v 0.2782 1.0274 1.0187 +vt 0.5625 0.75 +vt 0.3125 0.75 +vt 0.3125 0.4375 +vt 0.5625 0.4375 +vt 0.5625 0.75 +vt 0.3125 0.75 +vt 0.3125 0.4375 +vt 0.5625 0.4375 +vt 0.3125 0.75 +vt 0.5625 0.75 +vt 0.5625 1 +vt 0.3125 1 +vt 0.5625 0.75 +vt 0.3125 0.75 +vt 0.3125 1 +vt 0.5625 1 +vt 0.3125 0.75 +vt 0.5625 0.75 +vt 0.5625 0.4375 +vt 0.3125 0.4375 +vt 0.3125 0.75 +vt 0.5625 0.75 +vt 0.5625 0.4375 +vt 0.3125 0.4375 +vt 0.0625 0.6875 +vt 0.25 0.6875 +vt 0.25 0.75 +vt 0.0625 0.75 +vt 0.0625 0.6875 +vt 0.25 0.6875 +vt 0.25 0.75 +vt 0.0625 0.75 +vt 0.25 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.75 +vt 0.25 0.75 +vt 0.25 0.75 +vt 0.0625 0.75 +vt 0.0625 0.6875 +vt 0.25 0.6875 +vt 0 0.75 +vt 0.25 0.75 +vt 0.25 0.8125 +vt 0 0.8125 +vt 0.0625 0.75 +vt 0.0625 1 +vt 0 1 +vt 0 0.75 +vt 0 0.75 +vt 0.25 0.75 +vt 0.25 1 +vt 0 1 +vt 0 1 +vt 0.25 1 +vt 0.25 0.75 +vt 0 0.75 +vt 0 0.9375 +vt 0.25 0.9375 +vt 0.25 1 +vt 0 1 +vt 0.25 0.75 +vt 0 0.75 +vt 0 0.8125 +vt 0.25 0.8125 +vt 0.3125 0.4375 +vt 0.3125 0.75 +vt 0.5625 0.75 +vt 0.5625 0.4375 +vt 0.3125 0.4375 +vt 0.3125 0.75 +vt 0.5625 0.75 +vt 0.5625 0.4375 +vt 0.5625 1 +vt 0.5625 0.75 +vt 0.3125 0.75 +vt 0.3125 1 +vt 0.3125 1 +vt 0.3125 0.75 +vt 0.5625 0.75 +vt 0.5625 1 +vt 0.5625 0.4375 +vt 0.5625 0.75 +vt 0.3125 0.75 +vt 0.3125 0.4375 +vt 0.5625 0.4375 +vt 0.5625 0.75 +vt 0.3125 0.75 +vt 0.3125 0.4375 +vt 0.25 0.75 +vt 0.25 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.75 +vt 0.25 0.75 +vt 0.25 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.75 +vt 0.0625 0.75 +vt 0.0625 0.6875 +vt 0.25 0.6875 +vt 0.25 0.75 +vt 0.0625 0.6875 +vt 0.0625 0.75 +vt 0.25 0.75 +vt 0.25 0.6875 +vt 0.25 0.8125 +vt 0.25 0.75 +vt 0 0.75 +vt 0 0.8125 +vt 0 1 +vt 0.0625 1 +vt 0.0625 0.75 +vt 0 0.75 +vt 0.25 1 +vt 0.25 0.75 +vt 0 0.75 +vt 0 1 +vt 0.25 0.75 +vt 0.25 1 +vt 0 1 +vt 0 0.75 +vt 0.25 1 +vt 0.25 0.9375 +vt 0 0.9375 +vt 0 1 +vt 0 0.8125 +vt 0 0.75 +vt 0.25 0.75 +vt 0.25 0.8125 +vn 0.91 0.42 0 +vn -0.91 -0.42 0 +vn -0.42 0.91 0 +vn 0.42 -0.91 0 +vn 0 0 -1 +vn 0 0 1 +vn 0.91 0.42 0 +vn -0.91 -0.42 0 +vn 0 0 -1 +vn 0 0 1 +vn 0.91 0.42 0 +vn -0.91 -0.42 0 +vn -0.42 0.91 0 +vn 0.42 -0.91 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.91 0.42 0 +vn 0.91 -0.42 0 +vn 0.42 0.91 0 +vn -0.42 -0.91 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.91 0.42 0 +vn 0.91 -0.42 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.91 0.42 0 +vn 0.91 -0.42 0 +vn 0.42 0.91 0 +vn -0.42 -0.91 0 +vn 0 0 -1 +vn 0 0 1 +usemtl engine_4 +f 795/2205/552 796/2206/552 798/2207/552 797/2208/552 +f 800/2209/553 799/2210/553 801/2211/553 802/2212/553 +f 800/2213/554 796/2214/554 795/2215/554 799/2216/554 +f 801/2217/555 797/2218/555 798/2219/555 802/2220/555 +f 799/2221/556 795/2222/556 797/2223/556 801/2224/556 +f 796/2225/557 800/2226/557 802/2227/557 798/2228/557 +f 803/2229/558 804/2230/558 806/2231/558 805/2232/558 +f 808/2233/559 807/2234/559 809/2235/559 810/2236/559 +f 807/2237/560 803/2238/560 805/2239/560 809/2240/560 +f 804/2241/561 808/2242/561 810/2243/561 806/2244/561 +f 811/2245/562 812/2246/562 814/2247/562 813/2248/562 +f 816/2249/563 815/2250/563 817/2251/563 818/2252/563 +f 816/2253/564 812/2254/564 811/2255/564 815/2256/564 +f 817/2257/565 813/2258/565 814/2259/565 818/2260/565 +f 815/2261/566 811/2262/566 813/2263/566 817/2264/566 +f 812/2265/567 816/2266/567 818/2267/567 814/2268/567 +f 822/2269/568 820/2270/568 819/2271/568 821/2272/568 +f 825/2273/569 823/2274/569 824/2275/569 826/2276/569 +f 819/2277/570 820/2278/570 824/2279/570 823/2280/570 +f 822/2281/571 821/2282/571 825/2283/571 826/2284/571 +f 821/2285/572 819/2286/572 823/2287/572 825/2288/572 +f 826/2289/573 824/2290/573 820/2291/573 822/2292/573 +f 830/2293/574 828/2294/574 827/2295/574 829/2296/574 +f 833/2297/575 831/2298/575 832/2299/575 834/2300/575 +f 829/2301/576 827/2302/576 831/2303/576 833/2304/576 +f 834/2305/577 832/2306/577 828/2307/577 830/2308/577 +f 838/2309/578 836/2310/578 835/2311/578 837/2312/578 +f 841/2313/579 839/2314/579 840/2315/579 842/2316/579 +f 835/2317/580 836/2318/580 840/2319/580 839/2320/580 +f 838/2321/581 837/2322/581 841/2323/581 842/2324/581 +f 837/2325/582 835/2326/582 839/2327/582 841/2328/582 +f 842/2329/583 840/2330/583 836/2331/583 838/2332/583 +o engine +v -0.2553 0.8125 0.875 +v -0.2553 0.8125 0.8125 +v -0.2553 0.4375 0.875 +v -0.2553 0.4375 0.8125 +v 0.1197 0.8125 0.875 +v 0.1197 0.8125 0.8125 +v 0.1197 0.4375 0.875 +v 0.1197 0.4375 0.8125 +v -0.2241 0.7813 0.8125 +v -0.2241 0.7813 0.75 +v -0.2241 0.4688 0.8125 +v -0.2241 0.4688 0.75 +v 0.0884 0.7813 0.8125 +v 0.0884 0.7813 0.75 +v 0.0884 0.4688 0.8125 +v 0.0884 0.4688 0.75 +v -0.2553 0.8125 0.75 +v -0.2553 0.8125 0.6875 +v -0.2553 0.4375 0.75 +v -0.2553 0.4375 0.6875 +v 0.1197 0.8125 0.75 +v 0.1197 0.8125 0.6875 +v 0.1197 0.4375 0.75 +v 0.1197 0.4375 0.6875 +v 0.1563 0.9375 0.9375 +v 0.1563 0.9375 0.8125 +v 0.1563 0.8125 0.9375 +v 0.1563 0.8125 0.8125 +v 0.2813 0.875 0.9375 +v 0.2813 0.875 0.8125 +v 0.2813 0.8125 0.9375 +v 0.2813 0.8125 0.8125 +v 0.1563 0.6875 0.875 +v 0.1563 0.6875 0.75 +v 0.2813 0.6875 0.875 +v 0.2813 0.6875 0.75 +v 0.1563 0.5625 0.875 +v 0.2813 0.5625 0.875 +v 0.1563 0.625 0.75 +v 0.2813 0.625 0.75 +v 0.1563 0.6875 1.25 +v 0.1563 0.5625 1.25 +v 0.2813 0.6875 1.25 +v 0.2813 0.5625 1.25 +v 0.1563 0.8125 1.25 +v 0.1563 0.8125 1.125 +v 0.1563 0.6875 1.125 +v 0.2813 0.8125 1.25 +v 0.2813 0.8125 1.125 +v 0.2813 0.6875 1.125 +v 0.1563 0.9375 1.25 +v 0.1563 0.9375 1.125 +v 0.2813 0.875 1.25 +v 0.2813 0.875 1.125 +v 0.2813 0.625 1.375 +v 0.1563 0.625 1.375 +v 0.2813 0.5625 1.375 +v 0.1563 0.5625 1.375 +v 0.1563 0.4375 1.375 +v 0.2813 0.4375 1.375 +v 0.1563 0.5 1.25 +v 0.2813 0.5 1.25 +v 0.1563 0.5625 1.5 +v 0.1563 0.4375 1.5 +v 0.2813 0.5625 1.4375 +v 0.2813 0.4375 1.4375 +v -0.2812 0.625 1.5 +v -0.2812 0.625 1.375 +v -0.2812 0.5 1.5 +v -0.2812 0.5 1.375 +v -0.4062 0.625 1.4375 +v -0.4062 0.5 1.4375 +v -0.4062 0.625 1.375 +v -0.4062 0.5 1.375 +v -0.2812 0.625 0.9375 +v -0.2812 0.5 0.9375 +v -0.4062 0.625 0.9375 +v -0.4062 0.5 0.9375 +v -0.4062 0.6875 1.25 +v -0.4062 0.6875 1.375 +v -0.4062 0.625 1.25 +v -0.2812 0.6875 1.25 +v -0.2812 0.6875 1.375 +v -0.2812 0.625 1.25 +v -0.4062 0.8125 1.25 +v -0.2812 0.8125 1.25 +v -0.4062 0.75 1.375 +v -0.2812 0.75 1.375 +v -0.2812 0.9375 1.25 +v -0.2812 0.9375 1.125 +v -0.2812 0.8125 1.125 +v -0.4062 0.875 1.25 +v -0.4062 0.875 1.125 +v -0.4062 0.8125 1.125 +v -0.2812 0.75 1.125 +v -0.4062 0.75 1.125 +v -0.4062 0.75 0.9688 +v -0.4062 0.75 1.0938 +v -0.4062 0.625 0.9688 +v -0.4062 0.625 1.0938 +v -0.2812 0.6875 0.9688 +v -0.2812 0.6875 1.0938 +v -0.2812 0.625 0.9688 +v -0.2812 0.625 1.0938 +v -0.4062 0.8125 0.9375 +v -0.4062 0.625 1.125 +v -0.3437 0.8125 1.125 +v -0.3437 0.8125 0.9375 +v -0.3437 0.625 1.125 +v -0.3437 0.625 0.9375 +v -0.2812 0.9375 0.9375 +v -0.2812 0.9375 0.8125 +v -0.2812 0.8125 0.9375 +v -0.2812 0.8125 0.8125 +v -0.4062 0.875 0.9375 +v -0.4062 0.875 0.8125 +v -0.4062 0.8125 0.8125 +v -0.4062 0.625 0.8125 +v -0.2812 0.625 0.8125 +v -0.2812 0.5625 0.8125 +v -0.4062 0.5625 0.8125 +v -0.0312 0.9688 1.4875 +v -0.0312 0.9688 1.3 +v -0.0312 0.6563 1.4875 +v -0.0312 0.6563 1.3 +v 0.2813 0.9688 1.4875 +v 0.2813 0.9688 1.3 +v 0.2813 0.6563 1.4875 +v 0.2813 0.6563 1.3 +v -0.2134 0.5999 1.4375 +v -0.2134 0.5999 1.375 +v -0.0752 0.4733 1.4375 +v -0.0752 0.4733 1.375 +v -0.0023 0.8303 1.4375 +v -0.0023 0.8303 1.375 +v 0.1359 0.7037 1.4375 +v 0.1359 0.7037 1.375 +v 0.0313 1.1875 1.15 +v 0.0313 1.1875 0.9625 +v -0.1562 1.1875 1.15 +v -0.1562 1.1875 0.9625 +v 0.0313 1.125 1.15 +v 0.0313 1.125 0.9625 +v -0.1562 1.125 1.15 +v -0.1562 1.125 0.9625 +v -0.125 1.125 1.1125 +v -0.125 1.125 0.9875 +v -0.125 1.0625 1.1125 +v -0.125 1.0625 0.9875 +v 0 1.125 1.1125 +v 0 1.125 0.9875 +v 0 1.0625 1.1125 +v 0 1.0625 0.9875 +v -0.125 0.9375 0.9875 +v 0 0.9375 0.9875 +v -0.125 1 0.8625 +v 0 1 0.8625 +v -0.125 0.9375 0.8625 +v 0 0.9375 0.8625 +v -0.125 0.875 0.9875 +v -0.125 0.875 0.8625 +v 0 0.875 0.9875 +v 0 0.875 0.8625 +v -0.125 1.0625 1.175 +v -0.125 0.9375 1.175 +v 0 1.0625 1.175 +v 0 0.9375 1.175 +v -0.125 1 1.3 +v 0 1 1.3 +v -0.125 0.9375 1.3 +v 0 0.9375 1.3 +v -0.125 0.875 1.175 +v -0.125 0.875 1.3 +v 0 0.875 1.175 +v 0 0.875 1.3 +v -0.2553 0.8125 1.375 +v -0.2553 0.4375 1.375 +v 0.1197 0.8125 1.375 +v 0.1197 0.4375 1.375 +v -0.125 1.1875 1.125 +v 0 1.1875 1.125 +v -0.125 1.1875 1 +v 0 1.1875 1 +v -0.125 1.3125 1.125 +v 0 1.25 1.125 +v -0.125 1.3125 1 +v 0 1.25 1 +v -0.3125 1.1875 1 +v -0.3125 1.3125 1 +v -0.3125 1.1875 1.125 +v -0.3125 1.3125 1.125 +v -0.4375 1.3125 1 +v -0.4375 1.1875 1 +v -0.4375 1.3125 1.0625 +v -0.4375 1.1875 1.0625 +v -0.3125 1.1875 0.6875 +v -0.3125 1.3125 0.6875 +v -0.4375 1.1875 0.6875 +v -0.4375 1.3125 0.6875 +vt 0.375 0.75 +vt 0.4375 0.75 +vt 0.4375 0.375 +vt 0.375 0.375 +vt 0.6875 0.75 vt 0.75 0.75 -vt 0.75 0.875 -vt 0.625 0.875 -vt 0.625 0.75 +vt 0.75 0.375 +vt 0.6875 0.375 vt 0.75 0.75 -vt 0.625 0.875 -vt 0.75 0.875 +vt 0.375 0.75 +vt 0.375 0.6875 +vt 0.75 0.6875 +vt 0.75 0.4375 +vt 0.375 0.4375 +vt 0.375 0.375 +vt 0.75 0.375 +vt 0.375 0.75 vt 0.75 0.75 -vt 0.625 0.75 -vt 0.625 0.875 -vt 0.75 0.875 +vt 0.75 0.375 +vt 0.375 0.375 +vt 0.75 0.6875 +vt 0.8125 0.6875 +vt 0.8125 0.375 +vt 0.75 0.375 +vt 0.75 0.6875 +vt 0.8125 0.6875 +vt 0.8125 0.375 +vt 0.75 0.375 +vt 0.75 0.375 +vt 0.75 0.6875 +vt 0.8125 0.6875 +vt 0.8125 0.375 +vt 0.75 0.375 +vt 0.75 0.6875 +vt 0.8125 0.6875 +vt 0.8125 0.375 +vt 0.375 0.75 +vt 0.4375 0.75 +vt 0.4375 0.375 +vt 0.375 0.375 +vt 0.6875 0.75 vt 0.75 0.75 -vt 0.625 0.75 -vt 0.75 0.9375 -vt 0.625 0.9375 +vt 0.75 0.375 +vt 0.6875 0.375 +vt 0.75 0.75 +vt 0.375 0.75 +vt 0.375 0.6875 +vt 0.75 0.6875 +vt 0.75 0.4375 +vt 0.375 0.4375 +vt 0.375 0.375 +vt 0.75 0.375 +vt 0.75 0.75 +vt 0.375 0.75 +vt 0.375 0.375 +vt 0.75 0.375 +vt 0.75 0.9375 +vt 0.625 0.9375 +vt 0.625 0.875 +vt 0.75 0.875 +vt 0.75 0.8125 +vt 0.75 0.9375 +vt 0.625 0.9375 +vt 0.625 0.8125 +vt 0.625 1 +vt 0.75 1 +vt 0.75 0.875 +vt 0.625 0.875 +vt 0.8125 0.9375 +vt 0.6875 0.9375 +vt 0.6875 0.8125 +vt 0.8125 0.8125 +vt 0.75 0.875 +vt 0.625 0.875 +vt 0.625 0.75 +vt 0.75 0.75 +vt 0.75 0.875 +vt 0.625 0.875 +vt 0.625 0.75 +vt 0.75 0.75 +vt 0.625 0.875 +vt 0.75 0.875 +vt 0.75 0.75 +vt 0.625 0.75 +vt 0.625 0.875 +vt 0.75 0.875 +vt 0.75 0.75 +vt 0.625 0.75 +vt 0.75 0.9375 +vt 0.625 0.9375 vt 0.625 0.875 vt 0.75 0.875 vt 0.75 0.8125 @@ -9195,70 +5238,70 @@ vt 0.4375 0.375 vt 0.8125 0.375 vt 0.8125 0 vt 0.4375 0 -vt 0.09375 0.875 -vt 0.15625 0.875 -vt 0.15625 0.9375 -vt 0.09375 0.9375 -vt 0.1875 0.8125 -vt 0.1875 0.875 -vt 0.25 0.875 -vt 0.25 0.8125 -vt 0.21875 0.90625 -vt 0.21875 0.84375 -vt 0.28125 0.84375 -vt 0.28125 0.90625 -vt 0 0.90625 -vt 0.0625 0.90625 -vt 0.0625 0.9375 -vt 0 0.9375 -vt 0 0.90625 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.90625 -vt 0 0.90625 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.90625 -vt 0.0625 0.90625 -vt 0.0625 1 -vt 0 1 -vt 0 0.90625 -vt 0.0625 0.90625 -vt 0.0625 1 -vt 0 1 -vt 0 0.90625 -vt 0.09375 0.875 -vt 0.15625 0.875 -vt 0.15625 0.9375 -vt 0.09375 0.9375 -vt 0.1875 0.8125 -vt 0.1875 0.875 -vt 0.25 0.875 -vt 0.25 0.8125 -vt 0.21875 0.90625 -vt 0.21875 0.84375 -vt 0.28125 0.84375 -vt 0.28125 0.90625 -vt 0 0.90625 -vt 0.0625 0.90625 -vt 0.0625 0.9375 -vt 0 0.9375 -vt 0 0.84375 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.84375 -vt 0 0.84375 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.84375 -vt 0.0625 0.84375 -vt 0.0625 1 -vt 0 1 -vt 0 0.84375 -vt 0.0625 0.84375 -vt 0.0625 1 -vt 0 1 -vt 0 0.84375 +vt 0.5469 0.4375 +vt 0.5781 0.4375 +vt 0.5781 0.4688 +vt 0.5469 0.4688 +vt 0.5938 0.4063 +vt 0.5938 0.4375 +vt 0.625 0.4375 +vt 0.625 0.4063 +vt 0.6094 0.4531 +vt 0.6094 0.4219 +vt 0.6406 0.4219 +vt 0.6406 0.4531 +vt 0.5 0.4531 +vt 0.5313 0.4531 +vt 0.5313 0.4688 +vt 0.5 0.4688 +vt 0.5 0.4531 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 0.4531 +vt 0.5 0.4531 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 0.4531 +vt 0.5313 0.4531 +vt 0.5313 0.5 +vt 0.5 0.5 +vt 0.5 0.4531 +vt 0.5313 0.4531 +vt 0.5313 0.5 +vt 0.5 0.5 +vt 0.5 0.4531 +vt 0.5469 0.4375 +vt 0.5781 0.4375 +vt 0.5781 0.4688 +vt 0.5469 0.4688 +vt 0.5938 0.4063 +vt 0.5938 0.4375 +vt 0.625 0.4375 +vt 0.625 0.4063 +vt 0.6094 0.4531 +vt 0.6094 0.4219 +vt 0.6406 0.4219 +vt 0.6406 0.4531 +vt 0.5 0.4531 +vt 0.5313 0.4531 +vt 0.5313 0.4688 +vt 0.5 0.4688 +vt 0.5 0.4219 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 0.4219 +vt 0.5 0.4219 +vt 0.5 0.5 +vt 0.5313 0.5 +vt 0.5313 0.4219 +vt 0.5313 0.4219 +vt 0.5313 0.5 +vt 0.5 0.5 +vt 0.5 0.4219 +vt 0.5313 0.4219 +vt 0.5313 0.5 +vt 0.5 0.5 +vt 0.5 0.4219 vn -1 0 0 vn 1 0 0 vn 0 1 0 @@ -9274,15 +5317,15 @@ vn 0 1 0 vn 0 -1 0 vn 0 0 1 vn 1 0 0 -vn 0.44721359549995804 0.8944271909999161 0 +vn 0.45 0.89 0 vn 0 0 1 vn 0 0 -1 vn -1 0 0 vn 1 0 0 -vn 0 -0.44721359549995804 0.8944271909999161 -vn 0 0.4472135954999577 -0.8944271909999162 +vn 0 -0.45 0.89 +vn 0 0.45 -0.89 vn 0 0 -1 -vn 0 -0.894427190999916 -0.4472135954999582 +vn 0 -0.89 -0.45 vn -1 0 0 vn 1 0 0 vn -1 0 0 @@ -9294,27 +5337,27 @@ vn 1 0 0 vn 0 0 1 vn 0 0 -1 vn 1 0 0 -vn 0.44721359549995804 0.8944271909999161 0 +vn 0.45 0.89 0 vn 0 0 1 vn 0 0 -1 vn 0 0 1 -vn 0 0.8944271909999161 0.44721359549995804 +vn 0 0.89 0.45 vn 1 0 0 vn -1 0 0 vn 0 0 -1 -vn 0 -0.8944271909999161 -0.44721359549995804 +vn 0 -0.89 -0.45 vn -1 0 0 vn 1 0 0 vn 1 0 0 -vn 0.44721359549995804 0 0.8944271909999161 +vn 0.45 0 0.89 vn 0 1 0 vn 0 -1 0 -vn 0.14142135623730953 0.9899494936611667 0 -vn -0.14142135623730953 -0.9899494936611667 0 +vn 0.14 0.99 0 +vn -0.14 -0.99 0 vn 0 0 1 vn 0 0 -1 vn -1 0 0 -vn -0.447213595499958 0 0.894427190999916 +vn -0.45 0 0.89 vn 0 1 0 vn 0 -1 0 vn 1 0 0 @@ -9326,19 +5369,19 @@ vn 1 0 0 vn 0 0 -1 vn 0 0 1 vn 0 0 1 -vn 0 0.894427190999916 0.447213595499958 +vn 0 0.89 0.45 vn -1 0 0 vn 1 0 0 vn -1 0 0 -vn -0.447213595499958 0.894427190999916 0 +vn -0.45 0.89 0 vn 0 0 1 vn 0 0 -1 vn 0 0 -1 -vn 0 -0.894427190999916 -0.447213595499958 +vn 0 -0.89 -0.45 vn 1 0 0 vn -1 0 0 vn 1 0 0 -vn 0.44721538436060104 0.8944262965673583 0 +vn 0.45 0.89 0 vn 0 0 -1 vn 0 0 1 vn -1 0 0 @@ -9348,7 +5391,7 @@ vn 0 -1 0 vn 0 0 1 vn 0 0 -1 vn -1 0 0 -vn -0.447213595499958 0.894427190999916 0 +vn -0.45 0.89 0 vn 0 0 1 vn 0 0 -1 vn -1 0 0 @@ -9356,7 +5399,7 @@ vn 1 0 0 vn 0 0 -1 vn 0 0 1 vn 0 0 -1 -vn 0 -0.894427190999916 -0.447213595499958 +vn 0 -0.89 -0.45 vn 1 0 0 vn -1 0 0 vn -1 0 0 @@ -9365,10 +5408,10 @@ vn 0 1 0 vn 0 -1 0 vn 0 0 1 vn 0 0 -1 -vn -0.675590428557171 -0.7372771343544692 0 -vn 0.6755922404774425 0.7372754740303447 0 -vn -0.7372777429171942 0.675589764427295 0 -vn 0.7372768300724338 -0.6755907606223931 0 +vn -0.68 -0.74 0 +vn 0.68 0.74 0 +vn -0.74 0.68 0 +vn 0.74 -0.68 0 vn 0 0 1 vn 0 1 0 vn 0 -1 0 @@ -9381,7 +5424,7 @@ vn 1 0 0 vn 0 0 1 vn 0 0 -1 vn 0 0 -1 -vn 0 0.8944271909999161 -0.44721359549995804 +vn 0 0.89 -0.45 vn -1 0 0 vn 1 0 0 vn -1 0 0 @@ -9393,7 +5436,7 @@ vn 1 0 0 vn 0 1 0 vn 0 -1 0 vn 0 0 1 -vn 0 0.8944271909999161 0.44721359549995804 +vn 0 0.89 0.45 vn -1 0 0 vn 1 0 0 vn -1 0 0 @@ -9406,7 +5449,7 @@ vn 0 1 0 vn 0 -1 0 vn 0 0 1 vn 0 0 -1 -vn 0.44721359549995804 0.8944271909999161 0 +vn 0.45 0.89 0 vn 0 0 1 vn 0 0 -1 vn 1 0 0 @@ -9414,7 +5457,7 @@ vn 0 0 -1 vn 0 0 1 vn 0 -1 0 vn 0 1 0 -vn -0.447213595499958 0 0.894427190999916 +vn -0.45 0 0.89 vn 0 1 0 vn 0 -1 0 vn -1 0 0 @@ -9423,1159 +5466,186 @@ vn -1 0 0 vn 0 -1 0 vn 0 1 0 usemtl v4_diesel -f 1410/3845/962 1411/3846/962 1413/3847/962 -f 1410/3845/962 1413/3847/962 1412/3848/962 -f 1415/3849/963 1414/3850/963 1416/3851/963 -f 1415/3849/963 1416/3851/963 1417/3852/963 -f 1415/3853/964 1411/3854/964 1410/3855/964 -f 1415/3853/964 1410/3855/964 1414/3856/964 -f 1416/3857/965 1412/3858/965 1413/3859/965 -f 1416/3857/965 1413/3859/965 1417/3860/965 -f 1411/3861/966 1415/3862/966 1417/3863/966 -f 1411/3861/966 1417/3863/966 1413/3864/966 -f 1418/3865/967 1419/3866/967 1421/3867/967 -f 1418/3865/967 1421/3867/967 1420/3868/967 -f 1423/3869/968 1422/3870/968 1424/3871/968 -f 1423/3869/968 1424/3871/968 1425/3872/968 -f 1423/3873/969 1419/3874/969 1418/3875/969 -f 1423/3873/969 1418/3875/969 1422/3876/969 -f 1424/3877/970 1420/3878/970 1421/3879/970 -f 1424/3877/970 1421/3879/970 1425/3880/970 -f 1426/3881/971 1427/3882/971 1429/3883/971 -f 1426/3881/971 1429/3883/971 1428/3884/971 -f 1431/3885/972 1430/3886/972 1432/3887/972 -f 1431/3885/972 1432/3887/972 1433/3888/972 -f 1431/3889/973 1427/3890/973 1426/3891/973 -f 1431/3889/973 1426/3891/973 1430/3892/973 -f 1432/3893/974 1428/3894/974 1429/3895/974 -f 1432/3893/974 1429/3895/974 1433/3896/974 -f 1430/3897/975 1426/3898/975 1428/3899/975 -f 1430/3897/975 1428/3899/975 1432/3900/975 +f 843/2333/584 844/2334/584 846/2335/584 845/2336/584 +f 848/2337/585 847/2338/585 849/2339/585 850/2340/585 +f 848/2341/586 844/2342/586 843/2343/586 847/2344/586 +f 849/2345/587 845/2346/587 846/2347/587 850/2348/587 +f 844/2349/588 848/2350/588 850/2351/588 846/2352/588 +f 851/2353/589 852/2354/589 854/2355/589 853/2356/589 +f 856/2357/590 855/2358/590 857/2359/590 858/2360/590 +f 856/2361/591 852/2362/591 851/2363/591 855/2364/591 +f 857/2365/592 853/2366/592 854/2367/592 858/2368/592 +f 859/2369/593 860/2370/593 862/2371/593 861/2372/593 +f 864/2373/594 863/2374/594 865/2375/594 866/2376/594 +f 864/2377/595 860/2378/595 859/2379/595 863/2380/595 +f 865/2381/596 861/2382/596 862/2383/596 866/2384/596 +f 863/2385/597 859/2386/597 861/2387/597 865/2388/597 usemtl v4_diesel2 -f 1439/3901/976 1438/3902/976 1440/3903/976 -f 1439/3901/976 1440/3903/976 1441/3904/976 -f 1439/3905/977 1435/3906/977 1434/3907/977 -f 1439/3905/977 1434/3907/977 1438/3908/977 -f 1438/3909/978 1434/3910/978 1436/3911/978 -f 1438/3909/978 1436/3911/978 1440/3912/978 -f 1435/3913/979 1439/3914/979 1441/3915/979 -f 1435/3913/979 1441/3915/979 1437/3916/979 -f 1436/3917/980 1437/3918/980 1443/3919/980 -f 1436/3917/980 1443/3919/980 1442/3920/980 -f 1441/3921/981 1440/3922/981 1444/3923/981 -f 1441/3921/981 1444/3923/981 1445/3924/981 -f 1440/3925/982 1436/3926/982 1442/3927/982 -f 1440/3925/982 1442/3927/982 1444/3928/982 -f 1437/3929/983 1441/3930/983 1445/3931/983 -f 1437/3929/983 1445/3931/983 1443/3932/983 -f 1449/3933/984 1448/3934/984 1443/3935/984 -f 1449/3933/984 1443/3935/984 1445/3936/984 -f 1449/3937/985 1447/3938/985 1446/3939/985 -f 1449/3937/985 1446/3939/985 1448/3940/985 -f 1448/3941/986 1446/3942/986 1442/3943/986 -f 1448/3941/986 1442/3943/986 1443/3944/986 -f 1447/3945/987 1449/3946/987 1445/3947/987 -f 1447/3945/987 1445/3947/987 1444/3948/987 -f 1450/3949/988 1442/3950/988 1446/3951/988 -f 1450/3949/988 1446/3951/988 1451/3952/988 -f 1444/3953/989 1452/3954/989 1453/3955/989 -f 1444/3953/989 1453/3955/989 1447/3956/989 -f 1444/3957/990 1442/3958/990 1450/3959/990 -f 1444/3957/990 1450/3959/990 1452/3960/990 -f 1453/3961/991 1451/3962/991 1446/3963/991 -f 1453/3961/991 1446/3963/991 1447/3964/991 -f 1454/3965/992 1455/3966/992 1456/3967/992 -f 1454/3965/992 1456/3967/992 1450/3968/992 -f 1458/3969/993 1457/3970/993 1452/3971/993 -f 1458/3969/993 1452/3971/993 1459/3972/993 -f 1457/3973/994 1454/3974/994 1450/3975/994 -f 1457/3973/994 1450/3975/994 1452/3976/994 -f 1455/3977/995 1458/3978/995 1459/3979/995 -f 1455/3977/995 1459/3979/995 1456/3980/995 -f 1463/3981/996 1462/3982/996 1457/3983/996 -f 1463/3981/996 1457/3983/996 1458/3984/996 -f 1463/3985/997 1461/3986/997 1460/3987/997 -f 1463/3985/997 1460/3987/997 1462/3988/997 -f 1462/3989/998 1460/3990/998 1454/3991/998 -f 1462/3989/998 1454/3991/998 1457/3992/998 -f 1461/3993/999 1463/3994/999 1458/3995/999 -f 1461/3993/999 1458/3995/999 1455/3996/999 -f 1466/3997/1000 1464/3998/1000 1465/3999/1000 -f 1466/3997/1000 1465/3999/1000 1467/4000/1000 -f 1452/4001/1001 1450/4002/1001 1465/4003/1001 -f 1452/4001/1001 1465/4003/1001 1464/4004/1001 -f 1453/4005/1002 1452/4006/1002 1464/4007/1002 -f 1453/4005/1002 1464/4007/1002 1466/4008/1002 -f 1467/4009/1003 1465/4010/1003 1450/4011/1003 -f 1467/4009/1003 1450/4011/1003 1451/4012/1003 -f 1471/4013/1004 1470/4014/1004 1451/4015/1004 -f 1471/4013/1004 1451/4015/1004 1453/4016/1004 -f 1471/4017/1005 1469/4018/1005 1468/4019/1005 -f 1471/4017/1005 1468/4019/1005 1470/4020/1005 -f 1470/4021/1006 1468/4022/1006 1467/4023/1006 -f 1470/4021/1006 1467/4023/1006 1451/4024/1006 -f 1469/4025/1007 1471/4026/1007 1453/4027/1007 -f 1469/4025/1007 1453/4027/1007 1466/4028/1007 -f 1466/4029/1008 1474/4030/1008 1475/4031/1008 -f 1466/4029/1008 1475/4031/1008 1469/4032/1008 -f 1472/4033/1009 1473/4034/1009 1475/4035/1009 -f 1472/4033/1009 1475/4035/1009 1474/4036/1009 -f 1467/4037/1010 1472/4038/1010 1474/4039/1010 -f 1467/4037/1010 1474/4039/1010 1466/4040/1010 -f 1469/4041/1011 1475/4042/1011 1473/4043/1011 -f 1469/4041/1011 1473/4043/1011 1468/4044/1011 -f 1472/4045/1012 1467/4046/1012 1477/4047/1012 -f 1472/4045/1012 1477/4047/1012 1476/4048/1012 -f 1468/4049/1013 1473/4050/1013 1478/4051/1013 -f 1468/4049/1013 1478/4051/1013 1479/4052/1013 -f 1473/4053/1014 1472/4054/1014 1476/4055/1014 -f 1473/4053/1014 1476/4055/1014 1478/4056/1014 -f 1479/4057/1015 1477/4058/1015 1467/4059/1015 -f 1479/4057/1015 1467/4059/1015 1468/4060/1015 -f 1481/4061/1016 1480/4062/1016 1482/4063/1016 -f 1481/4061/1016 1482/4063/1016 1483/4064/1016 -f 1481/4065/1017 1478/4066/1017 1476/4067/1017 -f 1481/4065/1017 1476/4067/1017 1480/4068/1017 -f 1480/4069/1018 1476/4070/1018 1477/4071/1018 -f 1480/4069/1018 1477/4071/1018 1482/4072/1018 -f 1478/4073/1019 1481/4074/1019 1483/4075/1019 -f 1478/4073/1019 1483/4075/1019 1479/4076/1019 -f 1485/4077/1020 1484/4078/1020 1477/4079/1020 -f 1485/4077/1020 1477/4079/1020 1479/4080/1020 -f 1483/4081/1021 1482/4082/1021 1486/4083/1021 -f 1483/4081/1021 1486/4083/1021 1487/4084/1021 -f 1477/4085/1022 1484/4086/1022 1486/4087/1022 -f 1477/4085/1022 1486/4087/1022 1482/4088/1022 -f 1485/4089/1023 1479/4090/1023 1483/4091/1023 -f 1485/4089/1023 1483/4091/1023 1487/4092/1023 -f 1482/4093/1024 1489/4094/1024 1488/4095/1024 -f 1482/4093/1024 1488/4095/1024 1490/4096/1024 -f 1493/4097/1025 1491/4098/1025 1492/4099/1025 -f 1493/4097/1025 1492/4099/1025 1477/4100/1025 -f 1490/4101/1026 1488/4102/1026 1491/4103/1026 -f 1490/4101/1026 1491/4103/1026 1493/4104/1026 -f 1477/4105/1027 1492/4106/1027 1489/4107/1027 -f 1477/4105/1027 1489/4107/1027 1482/4108/1027 -f 1497/4109/1028 1496/4110/1028 1489/4111/1028 -f 1497/4109/1028 1489/4111/1028 1492/4112/1028 -f 1497/4113/1029 1495/4114/1029 1494/4115/1029 -f 1497/4113/1029 1494/4115/1029 1496/4116/1029 -f 1496/4117/1030 1494/4118/1030 1488/4119/1030 -f 1496/4117/1030 1488/4119/1030 1489/4120/1030 -f 1495/4121/1031 1497/4122/1031 1492/4123/1031 -f 1495/4121/1031 1492/4123/1031 1491/4124/1031 -f 1494/4125/1032 1501/4126/1032 1502/4127/1032 -f 1494/4125/1032 1502/4127/1032 1503/4128/1032 -f 1498/4129/1033 1499/4130/1033 1502/4131/1033 -f 1498/4129/1033 1502/4131/1033 1501/4132/1033 -f 1495/4133/1034 1498/4134/1034 1501/4135/1034 -f 1495/4133/1034 1501/4135/1034 1494/4136/1034 -f 1503/4137/1035 1502/4138/1035 1499/4139/1035 -f 1503/4137/1035 1499/4139/1035 1500/4140/1035 -f 1500/4141/1036 1504/4142/1036 1505/4143/1036 -f 1500/4141/1036 1505/4143/1036 1503/4144/1036 -f 1491/4145/1037 1488/4146/1037 1505/4147/1037 -f 1491/4145/1037 1505/4147/1037 1504/4148/1037 -f 1495/4149/1038 1491/4150/1038 1504/4151/1038 -f 1495/4149/1038 1504/4151/1038 1500/4152/1038 -f 1503/4153/1039 1505/4154/1039 1488/4155/1039 -f 1503/4153/1039 1488/4155/1039 1494/4156/1039 -f 1512/4157/1040 1510/4158/1040 1511/4159/1040 -f 1512/4157/1040 1511/4159/1040 1513/4160/1040 -f 1506/4161/1041 1507/4162/1041 1511/4163/1041 -f 1506/4161/1041 1511/4163/1041 1510/4164/1041 -f 1508/4165/1042 1506/4166/1042 1510/4167/1042 -f 1508/4165/1042 1510/4167/1042 1512/4168/1042 -f 1513/4169/1043 1511/4170/1043 1507/4171/1043 -f 1513/4169/1043 1507/4171/1043 1509/4172/1043 +f 872/2389/598 871/2390/598 873/2391/598 874/2392/598 +f 872/2393/599 868/2394/599 867/2395/599 871/2396/599 +f 871/2397/600 867/2398/600 869/2399/600 873/2400/600 +f 868/2401/601 872/2402/601 874/2403/601 870/2404/601 +f 869/2405/602 870/2406/602 876/2407/602 875/2408/602 +f 874/2409/603 873/2410/603 877/2411/603 878/2412/603 +f 873/2413/604 869/2414/604 875/2415/604 877/2416/604 +f 870/2417/605 874/2418/605 878/2419/605 876/2420/605 +f 882/2421/606 881/2422/606 876/2423/606 878/2424/606 +f 882/2425/607 880/2426/607 879/2427/607 881/2428/607 +f 881/2429/608 879/2430/608 875/2431/608 876/2432/608 +f 880/2433/609 882/2434/609 878/2435/609 877/2436/609 +f 883/2437/610 875/2438/610 879/2439/610 884/2440/610 +f 877/2441/611 885/2442/611 886/2443/611 880/2444/611 +f 877/2445/612 875/2446/612 883/2447/612 885/2448/612 +f 886/2449/613 884/2450/613 879/2451/613 880/2452/613 +f 887/2453/614 888/2454/614 889/2455/614 883/2456/614 +f 891/2457/615 890/2458/615 885/2459/615 892/2460/615 +f 890/2461/616 887/2462/616 883/2463/616 885/2464/616 +f 888/2465/617 891/2466/617 892/2467/617 889/2468/617 +f 896/2469/618 895/2470/618 890/2471/618 891/2472/618 +f 896/2473/619 894/2474/619 893/2475/619 895/2476/619 +f 895/2477/620 893/2478/620 887/2479/620 890/2480/620 +f 894/2481/621 896/2482/621 891/2483/621 888/2484/621 +f 899/2485/622 897/2486/622 898/2487/622 900/2488/622 +f 885/2489/623 883/2490/623 898/2491/623 897/2492/623 +f 886/2493/624 885/2494/624 897/2495/624 899/2496/624 +f 900/2497/625 898/2498/625 883/2499/625 884/2500/625 +f 904/2501/626 903/2502/626 884/2503/626 886/2504/626 +f 904/2505/627 902/2506/627 901/2507/627 903/2508/627 +f 903/2509/628 901/2510/628 900/2511/628 884/2512/628 +f 902/2513/629 904/2514/629 886/2515/629 899/2516/629 +f 899/2517/630 907/2518/630 908/2519/630 902/2520/630 +f 905/2521/631 906/2522/631 908/2523/631 907/2524/631 +f 900/2525/632 905/2526/632 907/2527/632 899/2528/632 +f 902/2529/633 908/2530/633 906/2531/633 901/2532/633 +f 905/2533/634 900/2534/634 910/2535/634 909/2536/634 +f 901/2537/635 906/2538/635 911/2539/635 912/2540/635 +f 906/2541/636 905/2542/636 909/2543/636 911/2544/636 +f 912/2545/637 910/2546/637 900/2547/637 901/2548/637 +f 914/2549/638 913/2550/638 915/2551/638 916/2552/638 +f 914/2553/639 911/2554/639 909/2555/639 913/2556/639 +f 913/2557/640 909/2558/640 910/2559/640 915/2560/640 +f 911/2561/641 914/2562/641 916/2563/641 912/2564/641 +f 918/2565/642 917/2566/642 910/2567/642 912/2568/642 +f 916/2569/643 915/2570/643 919/2571/643 920/2572/643 +f 910/2573/644 917/2574/644 919/2575/644 915/2576/644 +f 918/2577/645 912/2578/645 916/2579/645 920/2580/645 +f 915/2581/646 922/2582/646 921/2583/646 923/2584/646 +f 926/2585/647 924/2586/647 925/2587/647 910/2588/647 +f 923/2589/648 921/2590/648 924/2591/648 926/2592/648 +f 910/2593/649 925/2594/649 922/2595/649 915/2596/649 +f 930/2597/650 929/2598/650 922/2599/650 925/2600/650 +f 930/2601/651 928/2602/651 927/2603/651 929/2604/651 +f 929/2605/652 927/2606/652 921/2607/652 922/2608/652 +f 928/2609/653 930/2610/653 925/2611/653 924/2612/653 +f 927/2613/654 934/2614/654 935/2615/654 936/2616/654 +f 931/2617/655 932/2618/655 935/2619/655 934/2620/655 +f 928/2621/656 931/2622/656 934/2623/656 927/2624/656 +f 936/2625/657 935/2626/657 932/2627/657 933/2628/657 +f 933/2629/658 937/2630/658 938/2631/658 936/2632/658 +f 924/2633/659 921/2634/659 938/2635/659 937/2636/659 +f 928/2637/660 924/2638/660 937/2639/660 933/2640/660 +f 936/2641/661 938/2642/661 921/2643/661 927/2644/661 +f 945/2645/662 943/2646/662 944/2647/662 946/2648/662 +f 939/2649/663 940/2650/663 944/2651/663 943/2652/663 +f 941/2653/664 939/2654/664 943/2655/664 945/2656/664 +f 946/2657/665 944/2658/665 940/2659/665 942/2660/665 usemtl v4_diesel -f 1503/4173/1044 1514/4174/1044 1486/4175/1044 -f 1503/4173/1044 1486/4175/1044 1515/4176/1044 -f 1517/4177/1045 1516/4178/1045 1518/4179/1045 -f 1517/4177/1045 1518/4179/1045 1519/4180/1045 -f 1517/4181/1046 1514/4182/1046 1503/4183/1046 -f 1517/4181/1046 1503/4183/1046 1516/4184/1046 -f 1518/4185/1047 1515/4186/1047 1486/4187/1047 -f 1518/4185/1047 1486/4187/1047 1519/4188/1047 -f 1516/4189/1048 1503/4190/1048 1515/4191/1048 -f 1516/4189/1048 1515/4191/1048 1518/4192/1048 -f 1514/4193/1049 1517/4194/1049 1519/4195/1049 -f 1514/4193/1049 1519/4195/1049 1486/4196/1049 +f 936/2661/666 947/2662/666 919/2663/666 948/2664/666 +f 950/2665/667 949/2666/667 951/2667/667 952/2668/667 +f 950/2669/668 947/2670/668 936/2671/668 949/2672/668 +f 951/2673/669 948/2674/669 919/2675/669 952/2676/669 +f 949/2677/670 936/2678/670 948/2679/670 951/2680/670 +f 947/2681/671 950/2682/671 952/2683/671 919/2684/671 usemtl v4_diesel2 -f 1514/4197/1050 1524/4198/1050 1525/4199/1050 -f 1514/4197/1050 1525/4199/1050 1526/4200/1050 -f 1520/4201/1051 1521/4202/1051 1525/4203/1051 -f 1520/4201/1051 1525/4203/1051 1524/4204/1051 -f 1522/4205/1052 1520/4206/1052 1524/4207/1052 -f 1522/4205/1052 1524/4207/1052 1514/4208/1052 -f 1526/4209/1053 1525/4210/1053 1521/4211/1053 -f 1526/4209/1053 1521/4211/1053 1523/4212/1053 -f 1486/4213/1054 1514/4214/1054 1526/4215/1054 -f 1486/4213/1054 1526/4215/1054 1527/4216/1054 -f 1528/4217/1055 1523/4218/1055 1522/4219/1055 -f 1528/4217/1055 1522/4219/1055 1484/4220/1055 -f 1527/4221/1056 1526/4222/1056 1523/4223/1056 -f 1527/4221/1056 1523/4223/1056 1528/4224/1056 -f 1484/4225/1057 1522/4226/1057 1514/4227/1057 -f 1484/4225/1057 1514/4227/1057 1486/4228/1057 -f 1528/4229/1058 1529/4230/1058 1530/4231/1058 -f 1528/4229/1058 1530/4231/1058 1527/4232/1058 -f 1485/4233/1059 1487/4234/1059 1530/4235/1059 -f 1485/4233/1059 1530/4235/1059 1529/4236/1059 -f 1484/4237/1060 1485/4238/1060 1529/4239/1060 -f 1484/4237/1060 1529/4239/1060 1528/4240/1060 -f 1527/4241/1061 1530/4242/1061 1487/4243/1061 -f 1527/4241/1061 1487/4243/1061 1486/4244/1061 +f 947/2685/672 957/2686/672 958/2687/672 959/2688/672 +f 953/2689/673 954/2690/673 958/2691/673 957/2692/673 +f 955/2693/674 953/2694/674 957/2695/674 947/2696/674 +f 959/2697/675 958/2698/675 954/2699/675 956/2700/675 +f 919/2701/676 947/2702/676 959/2703/676 960/2704/676 +f 961/2705/677 956/2706/677 955/2707/677 917/2708/677 +f 960/2709/678 959/2710/678 956/2711/678 961/2712/678 +f 917/2713/679 955/2714/679 947/2715/679 919/2716/679 +f 961/2717/680 962/2718/680 963/2719/680 960/2720/680 +f 918/2721/681 920/2722/681 963/2723/681 962/2724/681 +f 917/2725/682 918/2726/682 962/2727/682 961/2728/682 +f 960/2729/683 963/2730/683 920/2731/683 919/2732/683 usemtl engine_4 -f 1531/4245/1062 1532/4246/1062 1534/4247/1062 -f 1531/4245/1062 1534/4247/1062 1533/4248/1062 -f 1536/4249/1063 1535/4250/1063 1537/4251/1063 -f 1536/4249/1063 1537/4251/1063 1538/4252/1063 -f 1536/4253/1064 1532/4254/1064 1531/4255/1064 -f 1536/4253/1064 1531/4255/1064 1535/4256/1064 -f 1537/4257/1065 1533/4258/1065 1534/4259/1065 -f 1537/4257/1065 1534/4259/1065 1538/4260/1065 -f 1535/4261/1066 1531/4262/1066 1533/4263/1066 -f 1535/4261/1066 1533/4263/1066 1537/4264/1066 -f 1532/4265/1067 1536/4266/1067 1538/4267/1067 -f 1532/4265/1067 1538/4267/1067 1534/4268/1067 -usemtl v4_diesel -f 1539/4269/1068 1540/4270/1068 1542/4271/1068 -f 1539/4269/1068 1542/4271/1068 1541/4272/1068 -f 1544/4273/1069 1543/4274/1069 1545/4275/1069 -f 1544/4273/1069 1545/4275/1069 1546/4276/1069 -f 1544/4277/1070 1540/4278/1070 1539/4279/1070 -f 1544/4277/1070 1539/4279/1070 1543/4280/1070 -f 1545/4281/1071 1541/4282/1071 1542/4283/1071 -f 1545/4281/1071 1542/4283/1071 1546/4284/1071 -f 1543/4285/1072 1539/4286/1072 1541/4287/1072 -f 1543/4285/1072 1541/4287/1072 1545/4288/1072 -f 1547/4289/1073 1548/4290/1073 1550/4291/1073 -f 1547/4289/1073 1550/4291/1073 1549/4292/1073 -f 1552/4293/1074 1551/4294/1074 1553/4295/1074 -f 1552/4293/1074 1553/4295/1074 1554/4296/1074 -f 1552/4297/1075 1548/4298/1075 1547/4299/1075 -f 1552/4297/1075 1547/4299/1075 1551/4300/1075 -f 1553/4301/1076 1549/4302/1076 1550/4303/1076 -f 1553/4301/1076 1550/4303/1076 1554/4304/1076 -f 1551/4305/1077 1547/4306/1077 1549/4307/1077 -f 1551/4305/1077 1549/4307/1077 1553/4308/1077 -f 1548/4309/1078 1552/4310/1078 1554/4311/1078 -f 1548/4309/1078 1554/4311/1078 1550/4312/1078 -usemtl v4_diesel2 -f 1555/4313/1079 1556/4314/1079 1558/4315/1079 -f 1555/4313/1079 1558/4315/1079 1557/4316/1079 -f 1560/4317/1080 1559/4318/1080 1561/4319/1080 -f 1560/4317/1080 1561/4319/1080 1562/4320/1080 -f 1559/4321/1081 1555/4322/1081 1557/4323/1081 -f 1559/4321/1081 1557/4323/1081 1561/4324/1081 -f 1556/4325/1082 1560/4326/1082 1562/4327/1082 -f 1556/4325/1082 1562/4327/1082 1558/4328/1082 -f 1567/4329/1083 1565/4330/1083 1566/4331/1083 -f 1567/4329/1083 1566/4331/1083 1568/4332/1083 -f 1558/4333/1084 1562/4334/1084 1566/4335/1084 -f 1558/4333/1084 1566/4335/1084 1565/4336/1084 -f 1563/4337/1085 1558/4338/1085 1565/4339/1085 -f 1563/4337/1085 1565/4339/1085 1567/4340/1085 -f 1568/4341/1086 1566/4342/1086 1562/4343/1086 -f 1568/4341/1086 1562/4343/1086 1564/4344/1086 -f 1563/4345/1087 1567/4346/1087 1570/4347/1087 -f 1563/4345/1087 1570/4347/1087 1569/4348/1087 -f 1568/4349/1088 1564/4350/1088 1571/4351/1088 -f 1568/4349/1088 1571/4351/1088 1572/4352/1088 -f 1564/4353/1089 1563/4354/1089 1569/4355/1089 -f 1564/4353/1089 1569/4355/1089 1571/4356/1089 -f 1567/4357/1090 1568/4358/1090 1572/4359/1090 -f 1567/4357/1090 1572/4359/1090 1570/4360/1090 -f 1573/4361/1091 1558/4362/1091 1563/4363/1091 -f 1573/4361/1091 1563/4363/1091 1574/4364/1091 -f 1562/4365/1092 1575/4366/1092 1576/4367/1092 -f 1562/4365/1092 1576/4367/1092 1564/4368/1092 -f 1562/4369/1093 1558/4370/1093 1573/4371/1093 -f 1562/4369/1093 1573/4371/1093 1575/4372/1093 -f 1576/4373/1094 1574/4374/1094 1563/4375/1094 -f 1576/4373/1094 1563/4375/1094 1564/4376/1094 -f 1578/4377/1095 1577/4378/1095 1579/4379/1095 -f 1578/4377/1095 1579/4379/1095 1580/4380/1095 -f 1578/4381/1096 1575/4382/1096 1573/4383/1096 -f 1578/4381/1096 1573/4383/1096 1577/4384/1096 -f 1577/4385/1097 1573/4386/1097 1574/4387/1097 -f 1577/4385/1097 1574/4387/1097 1579/4388/1097 -f 1575/4389/1098 1578/4390/1098 1580/4391/1098 -f 1575/4389/1098 1580/4391/1098 1576/4392/1098 -f 1582/4393/1099 1579/4394/1099 1574/4395/1099 -f 1582/4393/1099 1574/4395/1099 1581/4396/1099 -f 1583/4397/1100 1576/4398/1100 1580/4399/1100 -f 1583/4397/1100 1580/4399/1100 1584/4400/1100 -f 1581/4401/1101 1574/4402/1101 1576/4403/1101 -f 1581/4401/1101 1576/4403/1101 1583/4404/1101 -f 1584/4405/1102 1580/4406/1102 1579/4407/1102 -f 1584/4405/1102 1579/4407/1102 1582/4408/1102 -usemtl v4_diesel -f 1585/4409/1103 1410/4410/1103 1412/4411/1103 -f 1585/4409/1103 1412/4411/1103 1586/4412/1103 -f 1414/4413/1104 1587/4414/1104 1588/4415/1104 -f 1414/4413/1104 1588/4415/1104 1416/4416/1104 -f 1414/4417/1105 1410/4418/1105 1585/4419/1105 -f 1414/4417/1105 1585/4419/1105 1587/4420/1105 -f 1588/4421/1106 1586/4422/1106 1412/4423/1106 -f 1588/4421/1106 1412/4423/1106 1416/4424/1106 -f 1587/4425/1107 1585/4426/1107 1586/4427/1107 -f 1587/4425/1107 1586/4427/1107 1588/4428/1107 -f 1410/4429/1108 1414/4430/1108 1416/4431/1108 -f 1410/4429/1108 1416/4431/1108 1412/4432/1108 -usemtl pipe34 -f 1595/4433/1109 1593/4434/1109 1594/4435/1109 -f 1595/4433/1109 1594/4435/1109 1596/4436/1109 -f 1589/4437/1110 1590/4438/1110 1594/4439/1110 -f 1589/4437/1110 1594/4439/1110 1593/4440/1110 -f 1592/4441/1111 1591/4442/1111 1595/4443/1111 -f 1592/4441/1111 1595/4443/1111 1596/4444/1111 -f 1596/4445/1112 1594/4446/1112 1590/4447/1112 -f 1596/4445/1112 1590/4447/1112 1592/4448/1112 -f 1598/4449/1113 1595/4450/1113 1591/4451/1113 -f 1598/4449/1113 1591/4451/1113 1597/4452/1113 -f 1599/4453/1114 1589/4454/1114 1593/4455/1114 -f 1599/4453/1114 1593/4455/1114 1600/4456/1114 -f 1597/4457/1115 1591/4458/1115 1589/4459/1115 -f 1597/4457/1115 1589/4459/1115 1599/4460/1115 -f 1600/4461/1116 1593/4462/1116 1595/4463/1116 -f 1600/4461/1116 1595/4463/1116 1598/4464/1116 -f 1599/4465/1117 1600/4466/1117 1603/4467/1117 -f 1599/4465/1117 1603/4467/1117 1604/4468/1117 -f 1598/4469/1118 1601/4470/1118 1603/4471/1118 -f 1598/4469/1118 1603/4471/1118 1600/4472/1118 -f 1602/4473/1119 1597/4474/1119 1599/4475/1119 -f 1602/4473/1119 1599/4475/1119 1604/4476/1119 -f 1604/4477/1120 1603/4478/1120 1601/4479/1120 -f 1604/4477/1120 1601/4479/1120 1602/4480/1120 -f 1606/4481/1121 1598/4482/1121 1597/4483/1121 -f 1606/4481/1121 1597/4483/1121 1605/4484/1121 -f 1607/4485/1122 1602/4486/1122 1601/4487/1122 -f 1607/4485/1122 1601/4487/1122 1608/4488/1122 -f 1605/4489/1123 1597/4490/1123 1602/4491/1123 -f 1605/4489/1123 1602/4491/1123 1607/4492/1123 -f 1608/4493/1124 1601/4494/1124 1598/4495/1124 -f 1608/4493/1124 1598/4495/1124 1606/4496/1124 -o filter -v -0.15625 0.7607163951896871 1.4842426215122069 -v -0.15625 0.8855450870340088 1.477700626981839 -v -0.15625 0.7541744006593191 1.359413929667885 -v -0.15625 0.8790030925036408 1.3528719351375171 -v -0.03125 0.757445397924503 1.421828275590046 -v -0.03125 0.8822740897688248 1.415286281059678 -v -0.03125 0.7541744006593191 1.359413929667885 -v -0.03125 0.8790030925036408 1.3528719351375171 -v -0.375 1.199252315277405 1.4925528136169992 -v -0.375 1.1894393234818532 1.3053097758505166 -v -0.36875 0.9492678318622433 1.4993953680855192 -v -0.36875 0.9401090395197281 1.3246351995034686 -v -0.1875 1.199252315277405 1.4925528136169992 -v -0.1875 1.1894393234818532 1.3053097758505166 -v -0.19375 0.9492678318622433 1.4993953680855192 -v -0.19375 0.9401090395197281 1.3246351995034686 -v -0.34375 0.9414174384258017 1.349600937872333 -v -0.34375 0.9479594329561697 1.4744296297166548 -v -0.34375 0.8790030925036408 1.3528719351375171 -v -0.34375 0.8855450870340088 1.477700626981839 -v -0.21875 0.9414174384258017 1.349600937872333 -v -0.21875 0.9479594329561697 1.4744296297166548 -v -0.21875 0.8790030925036408 1.3528719351375171 -v -0.21875 0.8855450870340088 1.477700626981839 -v -0.28125 0.7607163951896871 1.4842426215122069 -v -0.28125 0.7541744006593191 1.359413929667885 -v -0.21875 0.7607163951896871 1.4842426215122069 -v -0.21875 0.7541744006593191 1.359413929667885 -v -0.03125 0.7476324061289511 1.2345852378235633 -v -0.15625 0.7476324061289511 1.2345852378235633 -v -0.03125 0.8724610979732729 1.2280432432931954 -v -0.15625 0.8724610979732729 1.2280432432931954 -v -0.38125 1.2058208495961396 1.498467148482697 -v -0.38125 1.1953536583475508 1.298741241531782 -v -0.38125 1.1434065036739787 1.501738145747881 -v -0.38125 1.13293931242539 1.3020122387969661 -v -0.18125 1.2058208495961396 1.498467148482697 -v -0.18125 1.1953536583475508 1.298741241531782 -v -0.18125 1.1434065036739787 1.501738145747881 -v -0.18125 1.13293931242539 1.3020122387969661 -vt 0.75 0.9375 -vt 0.625 0.9375 -vt 0.625 0.875 -vt 0.75 0.875 -vt 0.75 0.8125 -vt 0.75 0.9375 -vt 0.625 0.9375 -vt 0.625 0.8125 -vt 0.625 1 -vt 0.75 1 -vt 0.75 0.875 -vt 0.625 0.875 -vt 0.8125 0.9375 -vt 0.6875 0.9375 -vt 0.6875 0.8125 -vt 0.8125 0.8125 -vt 0.8125 0.5625 -vt 1 0.5625 -vt 1 0.3125 -vt 0.8125 0.3125 -vt 0.8125 0.5625 -vt 1 0.5625 -vt 1 0.3125 -vt 0.8125 0.3125 -vt 0.8125 0.5625 -vt 1 0.5625 -vt 1 0.375 -vt 0.8125 0.375 -vt 0.8125 0.375 -vt 1 0.375 -vt 1 0.1875 -vt 0.8125 0.1875 -vt 0.8125 0.5625 -vt 1 0.5625 -vt 1 0.3125 -vt 0.8125 0.3125 -vt 0.8125 0.5625 -vt 1 0.5625 -vt 1 0.3125 -vt 0.8125 0.3125 -vt 0.625 0.3125 -vt 0.625 0.375 -vt 0.75 0.375 -vt 0.75 0.3125 -vt 0.625 0.3125 -vt 0.625 0.375 -vt 0.75 0.375 -vt 0.75 0.3125 -vt 0.75 0.3125 -vt 0.75 0.375 -vt 0.625 0.375 -vt 0.625 0.3125 -vt 0.75 0.3125 -vt 0.75 0.375 -vt 0.625 0.375 -vt 0.625 0.3125 -vt 0.625 0.875 -vt 0.625 0.9375 -vt 0.75 0.9375 -vt 0.75 0.875 -vt 0.625 0.9375 -vt 0.75 0.9375 -vt 0.75 0.8125 -vt 0.625 0.8125 -vt 0.75 0.875 -vt 0.75 1 -vt 0.625 1 -vt 0.625 0.875 -vt 0.6875 0.8125 -vt 0.6875 0.9375 -vt 0.8125 0.9375 -vt 0.8125 0.8125 -vt 0.625 0.75 -vt 0.625 0.8125 -vt 0.75 0.8125 -vt 0.75 0.75 -vt 0.625 0.75 -vt 0.625 0.8125 -vt 0.75 0.8125 -vt 0.75 0.75 -vt 0.75 0.75 -vt 0.75 0.8125 -vt 0.625 0.8125 -vt 0.625 0.75 -vt 0.75 0.75 -vt 0.75 0.8125 -vt 0.625 0.8125 -vt 0.625 0.75 -vt 0.625 0.375 -vt 0.625 0.5 -vt 0.75 0.5 -vt 0.75 0.375 -vt 0.75 0.375 -vt 0.75 0.5 -vt 0.625 0.5 -vt 0.625 0.375 -vt 0.75 0.375 -vt 0.75 0.5 -vt 0.625 0.5 -vt 0.625 0.375 -vt 0.75 0.375 -vt 0.75 0.5 -vt 0.625 0.5 -vt 0.625 0.375 -vt 0.9375 0.5625 -vt 0.9375 0.75 -vt 1 0.75 -vt 1 0.5625 -vt 0.8125 0.75 -vt 1 0.75 -vt 1 0.6875 -vt 0.8125 0.6875 -vt 0.8125 0.75 -vt 1 0.75 -vt 1 0.5625 -vt 0.8125 0.5625 -vt 0.8125 0.75 -vt 1 0.75 -vt 1 0.6875 -vt 0.8125 0.6875 -vt 0.8125 0.75 -vt 1 0.75 -vt 1 0.6875 -vt 0.8125 0.6875 -vn 1 0 0 -vn 0.4472135954999578 0.04681070233067096 0.8932014096200863 -vn 0 -0.9986295347545738 0.05233595624294405 -vn 0 0.9986295347545738 -0.05233595624294405 -vn -0.9996876464081229 -0.024957940230810886 0.0013079902229756767 -vn 0.9996876464081229 -0.024957940230810997 0.0013079902229756826 -vn 0 0.9986295347545738 -0.05233595624294405 -vn 0 -0.9986295347545738 0.05233595624294405 -vn 0 0.027361668688216257 0.9996255994554144 -vn 0 -0.07727754914983823 -0.9970096190094628 -vn -1 0 0 -vn 1 0 0 -vn 0 -0.05233595624294405 -0.9986295347545738 -vn 0 0.05233595624294405 0.9986295347545738 -vn 0 -0.9986295347545738 0.05233595624294405 -vn -0.8944271909999159 -0.44660070481004327 0.023405351165335483 -vn 0 0.05233595624294405 0.9986295347545738 -vn 0 -0.05233595624294405 -0.9986295347545738 -vn 0 -0.9986295347545738 0.05233595624294405 -vn 0 0.9986295347545738 -0.05233595624294405 -vn 0 -0.05233595624294405 -0.9986295347545738 -vn 0 0.05233595624294405 0.9986295347545738 -vn 0 -0.9986295347545738 0.05233595624294405 -vn 0 0.9986295347545738 -0.05233595624294405 -vn 1 0 0 -vn -1 0 0 -vn -1 0 0 -vn 1 0 0 -vn 0 0.9986295347545738 -0.05233595624294405 -vn 0 0.05233595624294405 0.9986295347545738 -vn 0 -0.05233595624294405 -0.9986295347545738 -usemtl v4_diesel2 -f 1614/4497/1125 1613/4498/1125 1615/4499/1125 -f 1614/4497/1125 1615/4499/1125 1616/4500/1125 -f 1614/4501/1126 1610/4502/1126 1609/4503/1126 -f 1614/4501/1126 1609/4503/1126 1613/4504/1126 -f 1613/4505/1127 1609/4506/1127 1611/4507/1127 -f 1613/4505/1127 1611/4507/1127 1615/4508/1127 -f 1610/4509/1128 1614/4510/1128 1616/4511/1128 -f 1610/4509/1128 1616/4511/1128 1612/4512/1128 +f 964/2733/684 965/2734/684 967/2735/684 966/2736/684 +f 969/2737/685 968/2738/685 970/2739/685 971/2740/685 +f 969/2741/686 965/2742/686 964/2743/686 968/2744/686 +f 970/2745/687 966/2746/687 967/2747/687 971/2748/687 +f 968/2749/688 964/2750/688 966/2751/688 970/2752/688 +f 965/2753/689 969/2754/689 971/2755/689 967/2756/689 usemtl v4_diesel -f 1617/4513/1129 1618/4514/1129 1620/4515/1129 -f 1617/4513/1129 1620/4515/1129 1619/4516/1129 -f 1622/4517/1130 1621/4518/1130 1623/4519/1130 -f 1622/4517/1130 1623/4519/1130 1624/4520/1130 -f 1622/4521/1131 1618/4522/1131 1617/4523/1131 -f 1622/4521/1131 1617/4523/1131 1621/4524/1131 -f 1623/4525/1132 1619/4526/1132 1620/4527/1132 -f 1623/4525/1132 1620/4527/1132 1624/4528/1132 -f 1621/4529/1133 1617/4530/1133 1619/4531/1133 -f 1621/4529/1133 1619/4531/1133 1623/4532/1133 -f 1618/4533/1134 1622/4534/1134 1624/4535/1134 -f 1618/4533/1134 1624/4535/1134 1620/4536/1134 +f 972/2757/690 973/2758/690 975/2759/690 974/2760/690 +f 977/2761/691 976/2762/691 978/2763/691 979/2764/691 +f 977/2765/692 973/2766/692 972/2767/692 976/2768/692 +f 978/2769/693 974/2770/693 975/2771/693 979/2772/693 +f 976/2773/694 972/2774/694 974/2775/694 978/2776/694 +f 980/2777/695 981/2778/695 983/2779/695 982/2780/695 +f 985/2781/696 984/2782/696 986/2783/696 987/2784/696 +f 985/2785/697 981/2786/697 980/2787/697 984/2788/697 +f 986/2789/698 982/2790/698 983/2791/698 987/2792/698 +f 984/2793/699 980/2794/699 982/2795/699 986/2796/699 +f 981/2797/700 985/2798/700 987/2799/700 983/2800/700 usemtl v4_diesel2 -f 1628/4537/1135 1626/4538/1135 1625/4539/1135 -f 1628/4537/1135 1625/4539/1135 1627/4540/1135 -f 1631/4541/1136 1629/4542/1136 1630/4543/1136 -f 1631/4541/1136 1630/4543/1136 1632/4544/1136 -f 1627/4545/1137 1625/4546/1137 1629/4547/1137 -f 1627/4545/1137 1629/4547/1137 1631/4548/1137 -f 1632/4549/1138 1630/4550/1138 1626/4551/1138 -f 1632/4549/1138 1626/4551/1138 1628/4552/1138 -f 1635/4553/1139 1633/4554/1139 1634/4555/1139 -f 1635/4553/1139 1634/4555/1139 1636/4556/1139 -f 1628/4557/1140 1627/4558/1140 1634/4559/1140 -f 1628/4557/1140 1634/4559/1140 1633/4560/1140 -f 1632/4561/1141 1628/4562/1141 1633/4563/1141 -f 1632/4561/1141 1633/4563/1141 1635/4564/1141 -f 1636/4565/1142 1634/4566/1142 1627/4567/1142 -f 1636/4565/1142 1627/4567/1142 1631/4568/1142 -f 1609/4569/1143 1635/4570/1143 1636/4571/1143 -f 1609/4569/1143 1636/4571/1143 1611/4572/1143 -f 1612/4573/1144 1631/4574/1144 1632/4575/1144 -f 1612/4573/1144 1632/4575/1144 1610/4576/1144 -f 1611/4577/1145 1636/4578/1145 1631/4579/1145 -f 1611/4577/1145 1631/4579/1145 1612/4580/1145 -f 1610/4581/1146 1632/4582/1146 1635/4583/1146 -f 1610/4581/1146 1635/4583/1146 1609/4584/1146 -f 1611/4585/1147 1638/4586/1147 1637/4587/1147 -f 1611/4585/1147 1637/4587/1147 1615/4588/1147 -f 1616/4589/1148 1639/4590/1148 1640/4591/1148 -f 1616/4589/1148 1640/4591/1148 1612/4592/1148 -f 1615/4593/1149 1637/4594/1149 1639/4595/1149 -f 1615/4593/1149 1639/4595/1149 1616/4596/1149 -f 1612/4597/1150 1640/4598/1150 1638/4599/1150 -f 1612/4597/1150 1638/4599/1150 1611/4600/1150 +f 988/2801/701 989/2802/701 991/2803/701 990/2804/701 +f 993/2805/702 992/2806/702 994/2807/702 995/2808/702 +f 992/2809/703 988/2810/703 990/2811/703 994/2812/703 +f 989/2813/704 993/2814/704 995/2815/704 991/2816/704 +f 1000/2817/705 998/2818/705 999/2819/705 1001/2820/705 +f 991/2821/706 995/2822/706 999/2823/706 998/2824/706 +f 996/2825/707 991/2826/707 998/2827/707 1000/2828/707 +f 1001/2829/708 999/2830/708 995/2831/708 997/2832/708 +f 996/2833/709 1000/2834/709 1003/2835/709 1002/2836/709 +f 1001/2837/710 997/2838/710 1004/2839/710 1005/2840/710 +f 997/2841/711 996/2842/711 1002/2843/711 1004/2844/711 +f 1000/2845/712 1001/2846/712 1005/2847/712 1003/2848/712 +f 1006/2849/713 991/2850/713 996/2851/713 1007/2852/713 +f 995/2853/714 1008/2854/714 1009/2855/714 997/2856/714 +f 995/2857/715 991/2858/715 1006/2859/715 1008/2860/715 +f 1009/2861/716 1007/2862/716 996/2863/716 997/2864/716 +f 1011/2865/717 1010/2866/717 1012/2867/717 1013/2868/717 +f 1011/2869/718 1008/2870/718 1006/2871/718 1010/2872/718 +f 1010/2873/719 1006/2874/719 1007/2875/719 1012/2876/719 +f 1008/2877/720 1011/2878/720 1013/2879/720 1009/2880/720 +f 1015/2881/721 1012/2882/721 1007/2883/721 1014/2884/721 +f 1016/2885/722 1009/2886/722 1013/2887/722 1017/2888/722 +f 1014/2889/723 1007/2890/723 1009/2891/723 1016/2892/723 +f 1017/2893/724 1013/2894/724 1012/2895/724 1015/2896/724 usemtl v4_diesel -f 1641/4601/1151 1642/4602/1151 1644/4603/1151 -f 1641/4601/1151 1644/4603/1151 1643/4604/1151 -f 1646/4605/1152 1645/4606/1152 1647/4607/1152 -f 1646/4605/1152 1647/4607/1152 1648/4608/1152 -f 1646/4609/1153 1642/4610/1153 1641/4611/1153 -f 1646/4609/1153 1641/4611/1153 1645/4612/1153 -f 1645/4613/1154 1641/4614/1154 1643/4615/1154 -f 1645/4613/1154 1643/4615/1154 1647/4616/1154 -f 1642/4617/1155 1646/4618/1155 1648/4619/1155 -f 1642/4617/1155 1648/4619/1155 1644/4620/1155 -o engine_cylinder1 -v 0.025159513225688906 1.0763756776466749 1.049965625 -v 0.025159513225688906 1.0763756776466749 1.299965625 -v -0.10690869356827964 0.7931544941977217 1.049965625 -v -0.10690869356827964 0.7931544941977215 1.299965625 -v 0.2517364599848514 0.9707211122114999 1.049965625 -v 0.2517364599848514 0.9707211122114999 1.299965625 -v 0.11966825319088283 0.6874999287625467 1.049965625 -v 0.11966825319088283 0.6874999287625467 1.299965625 -v 0.07989527292937794 1.1198130936570685 1.081215625 -v 0.07989527292937794 1.1198130936570685 1.268715625 -v 0.05348163157058422 1.063168856967278 1.081215625 -v 0.05348163157058422 1.063168856967278 1.268715625 -v 0.2498279829987498 1.0405721695806873 1.081215625 -v 0.2498279829987498 1.0405721695806873 1.268715625 -v 0.22341434163995608 0.9839279328908968 1.081215625 -v 0.22341434163995608 0.9839279328908968 1.268715625 -v 0.07798679594327634 1.189664151026256 1.049965625 -v 0.07798679594327634 1.189664151026256 1.299965625 -v 0.051573154584482625 1.1330199143364654 1.049965625 -v 0.051573154584482625 1.1330199143364654 1.299965625 -v 0.3045637427024388 1.0840095855910812 1.049965625 -v 0.3045637427024388 1.0840095855910812 1.299965625 -v 0.2781501013436451 1.0273653489012906 1.049965625 -v 0.2781501013436451 1.0273653489012906 1.299965625 -v -0.15015967096283528 1.0763756377833427 0.768715625 -v -0.15015967096283528 1.0763756377833427 1.018715625 -v -0.01809164121754689 0.7931544023112781 0.768715625 -v -0.01809164121754689 0.793154402311278 1.018715625 -v -0.37673665170657894 0.9707209345828823 0.768715625 -v -0.37673665170657894 0.9707209345828823 1.018715625 -v -0.24466862196129058 0.6874996991108179 0.768715625 -v -0.24466862196129058 0.6874996991108178 1.018715625 -v -0.20489567222942096 1.1198127948650893 0.799965625 -v -0.20489567222942096 1.1198127948650893 0.987465625 -v -0.1784823456845927 1.0631685401367683 0.799965625 -v -0.1784823456845927 1.0631685401367683 0.987465625 -v -0.37482870055079703 1.0405722487882378 0.799965625 -v -0.37482870055079703 1.0405722487882376 0.987465625 -v -0.34841480756360194 0.9839277299235033 0.799965625 -v -0.34841480756360194 0.9839277299235033 0.987465625 -v -0.2029871546312721 1.189663844934031 0.768715625 -v -0.2029871546312721 1.1896638449340309 1.018715625 -v -0.17657382808644395 1.13301959020571 0.768715625 -v -0.17657382808644395 1.13301959020571 1.018715625 -v -0.42956413537501587 1.0840091417335709 0.768715625 -v -0.42956413537501587 1.0840091417335709 1.018715625 -v -0.40315054469377404 1.0273654534476169 0.768715625 -v -0.40315054469377404 1.0273654534476169 1.018715625 -vt 0.3125 0.4375 -vt 0.3125 0.75 -vt 0.5625 0.75 -vt 0.5625 0.4375 -vt 0.3125 0.4375 -vt 0.3125 0.75 -vt 0.5625 0.75 -vt 0.5625 0.4375 -vt 0.5625 1 -vt 0.5625 0.75 -vt 0.3125 0.75 -vt 0.3125 1 -vt 0.3125 1 -vt 0.3125 0.75 -vt 0.5625 0.75 -vt 0.5625 1 -vt 0.5625 0.4375 -vt 0.5625 0.75 -vt 0.3125 0.75 -vt 0.3125 0.4375 -vt 0.5625 0.4375 -vt 0.5625 0.75 -vt 0.3125 0.75 -vt 0.3125 0.4375 -vt 0.25 0.75 -vt 0.25 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.75 -vt 0.25 0.75 -vt 0.25 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.75 -vt 0.0625 0.75 -vt 0.0625 0.6875 -vt 0.25 0.6875 -vt 0.25 0.75 -vt 0.0625 0.6875 -vt 0.0625 0.75 -vt 0.25 0.75 -vt 0.25 0.6875 -vt 0.25 0.8125 -vt 0.25 0.75 -vt 0 0.75 -vt 0 0.8125 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.75 -vt 0 0.75 -vt 0.25 1 -vt 0.25 0.75 -vt 0 0.75 -vt 0 1 -vt 0.25 0.75 -vt 0.25 1 -vt 0 1 -vt 0 0.75 -vt 0.25 1 -vt 0.25 0.9375 -vt 0 0.9375 -vt 0 1 -vt 0 0.8125 -vt 0 0.75 -vt 0.25 0.75 -vt 0.25 0.8125 -vt 0.5625 0.75 -vt 0.3125 0.75 -vt 0.3125 0.4375 -vt 0.5625 0.4375 -vt 0.5625 0.75 -vt 0.3125 0.75 -vt 0.3125 0.4375 -vt 0.5625 0.4375 -vt 0.3125 0.75 -vt 0.5625 0.75 -vt 0.5625 1 -vt 0.3125 1 -vt 0.5625 0.75 -vt 0.3125 0.75 -vt 0.3125 1 -vt 0.5625 1 -vt 0.3125 0.75 -vt 0.5625 0.75 -vt 0.5625 0.4375 -vt 0.3125 0.4375 -vt 0.3125 0.75 -vt 0.5625 0.75 -vt 0.5625 0.4375 -vt 0.3125 0.4375 -vt 0.0625 0.6875 -vt 0.25 0.6875 -vt 0.25 0.75 -vt 0.0625 0.75 -vt 0.0625 0.6875 -vt 0.25 0.6875 -vt 0.25 0.75 -vt 0.0625 0.75 -vt 0.25 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.75 -vt 0.25 0.75 -vt 0.25 0.75 -vt 0.0625 0.75 -vt 0.0625 0.6875 -vt 0.25 0.6875 -vt 0 0.75 -vt 0.25 0.75 -vt 0.25 0.8125 -vt 0 0.8125 -vt 0.0625 0.75 -vt 0.0625 1 -vt 0 1 -vt 0 0.75 -vt 0 0.75 -vt 0.25 0.75 -vt 0.25 1 -vt 0 1 -vt 0 1 -vt 0.25 1 -vt 0.25 0.75 -vt 0 0.75 -vt 0 0.9375 -vt 0.25 0.9375 -vt 0.25 1 -vt 0 1 -vt 0.25 0.75 -vt 0 0.75 -vt 0 0.8125 -vt 0.25 0.8125 -vn -0.90630778703665 0.42261826174069944 5.175581015019659e-17 -vn 0.90630778703665 -0.42261826174069944 -5.175581015019659e-17 -vn 0.42261826174069944 0.9063077870366499 1.1099069304367545e-16 -vn -0.42261826174069944 -0.9063077870366499 -1.1099069304367545e-16 -vn 0 1.2246467991473532e-16 -1 -vn 0 -1.2246467991473532e-16 1 -vn -0.90630778703665 0.42261826174069944 5.175581015019659e-17 -vn 0.90630778703665 -0.42261826174069944 -5.175581015019659e-17 -vn 0 1.2246467991473532e-16 -1 -vn 0 -1.2246467991473532e-16 1 -vn -0.90630778703665 0.42261826174069944 5.175581015019659e-17 -vn 0.90630778703665 -0.42261826174069944 -5.175581015019659e-17 -vn 0.42261826174069944 0.9063077870366499 1.1099069304367545e-16 -vn -0.42261826174069944 -0.9063077870366499 -1.1099069304367545e-16 -vn 0 1.2246467991473532e-16 -1 -vn 0 -1.2246467991473532e-16 1 -vn 0.9063080337732496 0.422617732611951 5.175574535061379e-17 -vn -0.9063080337732496 -0.42261773261195085 -5.175574535061377e-17 -vn -0.42261866231132417 0.9063076002473924 1.1099067016858882e-16 -vn 0.42261866231132406 -0.9063076002473925 -1.1099067016858883e-16 -vn 0 1.2246467991473532e-16 -1 -vn 0 -1.2246467991473532e-16 1 -vn 0.9063097678709966 0.4226140138017439 5.17552899277121e-17 -vn -0.9063070513423195 -0.4226198394386975 -5.175600336247693e-17 -vn 0 1.2246467991473532e-16 -1 -vn 0 -1.2246467991473532e-16 1 -vn 0.9063097678709966 0.4226140138017433 5.175528992771202e-17 -vn -0.9063065304191132 -0.4226209565552435 -5.175614016979716e-17 -vn -0.4226186623113238 0.9063076002473925 1.1099067016858883e-16 -vn 0.4226172059010351 -0.9063082793820227 -1.1099075333859393e-16 -vn 0 1.2246467991473532e-16 -1 -vn 0 -1.2246467991473532e-16 1 -usemtl engine_4 -f 1652/4621/1156 1650/4622/1156 1649/4623/1156 -f 1652/4621/1156 1649/4623/1156 1651/4624/1156 -f 1655/4625/1157 1653/4626/1157 1654/4627/1157 -f 1655/4625/1157 1654/4627/1157 1656/4628/1157 -f 1649/4629/1158 1650/4630/1158 1654/4631/1158 -f 1649/4629/1158 1654/4631/1158 1653/4632/1158 -f 1652/4633/1159 1651/4634/1159 1655/4635/1159 -f 1652/4633/1159 1655/4635/1159 1656/4636/1159 -f 1651/4637/1160 1649/4638/1160 1653/4639/1160 -f 1651/4637/1160 1653/4639/1160 1655/4640/1160 -f 1656/4641/1161 1654/4642/1161 1650/4643/1161 -f 1656/4641/1161 1650/4643/1161 1652/4644/1161 -f 1660/4645/1162 1658/4646/1162 1657/4647/1162 -f 1660/4645/1162 1657/4647/1162 1659/4648/1162 -f 1663/4649/1163 1661/4650/1163 1662/4651/1163 -f 1663/4649/1163 1662/4651/1163 1664/4652/1163 -f 1659/4653/1164 1657/4654/1164 1661/4655/1164 -f 1659/4653/1164 1661/4655/1164 1663/4656/1164 -f 1664/4657/1165 1662/4658/1165 1658/4659/1165 -f 1664/4657/1165 1658/4659/1165 1660/4660/1165 -f 1668/4661/1166 1666/4662/1166 1665/4663/1166 -f 1668/4661/1166 1665/4663/1166 1667/4664/1166 -f 1671/4665/1167 1669/4666/1167 1670/4667/1167 -f 1671/4665/1167 1670/4667/1167 1672/4668/1167 -f 1665/4669/1168 1666/4670/1168 1670/4671/1168 -f 1665/4669/1168 1670/4671/1168 1669/4672/1168 -f 1668/4673/1169 1667/4674/1169 1671/4675/1169 -f 1668/4673/1169 1671/4675/1169 1672/4676/1169 -f 1667/4677/1170 1665/4678/1170 1669/4679/1170 -f 1667/4677/1170 1669/4679/1170 1671/4680/1170 -f 1672/4681/1171 1670/4682/1171 1666/4683/1171 -f 1672/4681/1171 1666/4683/1171 1668/4684/1171 -f 1673/4685/1172 1674/4686/1172 1676/4687/1172 -f 1673/4685/1172 1676/4687/1172 1675/4688/1172 -f 1678/4689/1173 1677/4690/1173 1679/4691/1173 -f 1678/4689/1173 1679/4691/1173 1680/4692/1173 -f 1678/4693/1174 1674/4694/1174 1673/4695/1174 -f 1678/4693/1174 1673/4695/1174 1677/4696/1174 -f 1679/4697/1175 1675/4698/1175 1676/4699/1175 -f 1679/4697/1175 1676/4699/1175 1680/4700/1175 -f 1677/4701/1176 1673/4702/1176 1675/4703/1176 -f 1677/4701/1176 1675/4703/1176 1679/4704/1176 -f 1674/4705/1177 1678/4706/1177 1680/4707/1177 -f 1674/4705/1177 1680/4707/1177 1676/4708/1177 -f 1681/4709/1178 1682/4710/1178 1684/4711/1178 -f 1681/4709/1178 1684/4711/1178 1683/4712/1178 -f 1686/4713/1179 1685/4714/1179 1687/4715/1179 -f 1686/4713/1179 1687/4715/1179 1688/4716/1179 -f 1685/4717/1180 1681/4718/1180 1683/4719/1180 -f 1685/4717/1180 1683/4719/1180 1687/4720/1180 -f 1682/4721/1181 1686/4722/1181 1688/4723/1181 -f 1682/4721/1181 1688/4723/1181 1684/4724/1181 -f 1689/4725/1182 1690/4726/1182 1692/4727/1182 -f 1689/4725/1182 1692/4727/1182 1691/4728/1182 -f 1694/4729/1183 1693/4730/1183 1695/4731/1183 -f 1694/4729/1183 1695/4731/1183 1696/4732/1183 -f 1694/4733/1184 1690/4734/1184 1689/4735/1184 -f 1694/4733/1184 1689/4735/1184 1693/4736/1184 -f 1695/4737/1185 1691/4738/1185 1692/4739/1185 -f 1695/4737/1185 1692/4739/1185 1696/4740/1185 -f 1693/4741/1186 1689/4742/1186 1691/4743/1186 -f 1693/4741/1186 1691/4743/1186 1695/4744/1186 -f 1690/4745/1187 1694/4746/1187 1696/4747/1187 -f 1690/4745/1187 1696/4747/1187 1692/4748/1187 -o engine_cylinder2 -v -0.1501595132256889 1.0763756776466749 1.049965625 -v -0.1501595132256889 1.0763756776466749 1.299965625 -v -0.018091306431720355 0.7931544941977217 1.049965625 -v -0.018091306431720355 0.7931544941977215 1.299965625 -v -0.3767364599848514 0.9707211122114999 1.049965625 -v -0.3767364599848514 0.9707211122114999 1.299965625 -v -0.2446682531908828 0.6874999287625467 1.049965625 -v -0.2446682531908828 0.6874999287625467 1.299965625 -v -0.20489527292937793 1.1198130936570685 1.081215625 -v -0.20489527292937793 1.1198130936570685 1.268715625 -v -0.17848163157058422 1.063168856967278 1.081215625 -v -0.17848163157058422 1.063168856967278 1.268715625 -v -0.3748279829987498 1.0405721695806873 1.081215625 -v -0.3748279829987498 1.0405721695806873 1.268715625 -v -0.3484143416399561 0.9839279328908968 1.081215625 -v -0.3484143416399561 0.9839279328908968 1.268715625 -v -0.20298679594327634 1.189664151026256 1.049965625 -v -0.20298679594327634 1.189664151026256 1.299965625 -v -0.17657315458448264 1.1330199143364654 1.049965625 -v -0.17657315458448264 1.1330199143364654 1.299965625 -v -0.4295637427024388 1.0840095855910812 1.049965625 -v -0.4295637427024388 1.0840095855910812 1.299965625 -v -0.4031501013436451 1.0273653489012906 1.049965625 -v -0.4031501013436451 1.0273653489012906 1.299965625 -v 0.02515967096283528 1.0763756377833427 0.768715625 -v 0.02515967096283528 1.0763756377833427 1.018715625 -v -0.10690835878245311 0.7931544023112781 0.768715625 -v -0.10690835878245311 0.793154402311278 1.018715625 -v 0.25173665170657894 0.9707209345828823 0.768715625 -v 0.25173665170657894 0.9707209345828823 1.018715625 -v 0.11966862196129058 0.6874996991108179 0.768715625 -v 0.11966862196129058 0.6874996991108178 1.018715625 -v 0.07989567222942096 1.1198127948650893 0.799965625 -v 0.07989567222942096 1.1198127948650893 0.987465625 -v 0.0534823456845927 1.0631685401367683 0.799965625 -v 0.0534823456845927 1.0631685401367683 0.987465625 -v 0.24982870055079703 1.0405722487882378 0.799965625 -v 0.24982870055079703 1.0405722487882376 0.987465625 -v 0.22341480756360194 0.9839277299235033 0.799965625 -v 0.22341480756360194 0.9839277299235033 0.987465625 -v 0.0779871546312721 1.189663844934031 0.768715625 -v 0.0779871546312721 1.1896638449340309 1.018715625 -v 0.05157382808644395 1.13301959020571 0.768715625 -v 0.05157382808644395 1.13301959020571 1.018715625 -v 0.30456413537501587 1.0840091417335709 0.768715625 -v 0.30456413537501587 1.0840091417335709 1.018715625 -v 0.27815054469377404 1.0273654534476169 0.768715625 -v 0.27815054469377404 1.0273654534476169 1.018715625 -vt 0.5625 0.75 -vt 0.3125 0.75 -vt 0.3125 0.4375 -vt 0.5625 0.4375 -vt 0.5625 0.75 -vt 0.3125 0.75 -vt 0.3125 0.4375 -vt 0.5625 0.4375 -vt 0.3125 0.75 -vt 0.5625 0.75 -vt 0.5625 1 -vt 0.3125 1 -vt 0.5625 0.75 -vt 0.3125 0.75 -vt 0.3125 1 -vt 0.5625 1 -vt 0.3125 0.75 -vt 0.5625 0.75 -vt 0.5625 0.4375 -vt 0.3125 0.4375 -vt 0.3125 0.75 -vt 0.5625 0.75 -vt 0.5625 0.4375 -vt 0.3125 0.4375 -vt 0.0625 0.6875 -vt 0.25 0.6875 -vt 0.25 0.75 -vt 0.0625 0.75 -vt 0.0625 0.6875 -vt 0.25 0.6875 -vt 0.25 0.75 -vt 0.0625 0.75 -vt 0.25 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.75 -vt 0.25 0.75 -vt 0.25 0.75 -vt 0.0625 0.75 -vt 0.0625 0.6875 -vt 0.25 0.6875 -vt 0 0.75 -vt 0.25 0.75 -vt 0.25 0.8125 -vt 0 0.8125 -vt 0.0625 0.75 -vt 0.0625 1 -vt 0 1 -vt 0 0.75 -vt 0 0.75 -vt 0.25 0.75 -vt 0.25 1 -vt 0 1 -vt 0 1 -vt 0.25 1 -vt 0.25 0.75 -vt 0 0.75 -vt 0 0.9375 -vt 0.25 0.9375 -vt 0.25 1 -vt 0 1 -vt 0.25 0.75 -vt 0 0.75 -vt 0 0.8125 -vt 0.25 0.8125 -vt 0.3125 0.4375 -vt 0.3125 0.75 -vt 0.5625 0.75 -vt 0.5625 0.4375 -vt 0.3125 0.4375 -vt 0.3125 0.75 -vt 0.5625 0.75 -vt 0.5625 0.4375 -vt 0.5625 1 -vt 0.5625 0.75 -vt 0.3125 0.75 -vt 0.3125 1 -vt 0.3125 1 -vt 0.3125 0.75 -vt 0.5625 0.75 -vt 0.5625 1 -vt 0.5625 0.4375 -vt 0.5625 0.75 -vt 0.3125 0.75 -vt 0.3125 0.4375 -vt 0.5625 0.4375 -vt 0.5625 0.75 -vt 0.3125 0.75 -vt 0.3125 0.4375 -vt 0.25 0.75 -vt 0.25 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.75 -vt 0.25 0.75 -vt 0.25 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.75 -vt 0.0625 0.75 -vt 0.0625 0.6875 -vt 0.25 0.6875 -vt 0.25 0.75 -vt 0.0625 0.6875 -vt 0.0625 0.75 -vt 0.25 0.75 -vt 0.25 0.6875 -vt 0.25 0.8125 -vt 0.25 0.75 -vt 0 0.75 -vt 0 0.8125 -vt 0 1 -vt 0.0625 1 -vt 0.0625 0.75 -vt 0 0.75 -vt 0.25 1 -vt 0.25 0.75 -vt 0 0.75 -vt 0 1 -vt 0.25 0.75 -vt 0.25 1 -vt 0 1 -vt 0 0.75 -vt 0.25 1 -vt 0.25 0.9375 -vt 0 0.9375 -vt 0 1 -vt 0 0.8125 -vt 0 0.75 -vt 0.25 0.75 -vt 0.25 0.8125 -vn 0.90630778703665 0.42261826174069944 5.175581015019659e-17 -vn -0.90630778703665 -0.42261826174069944 -5.175581015019659e-17 -vn -0.42261826174069944 0.9063077870366499 1.1099069304367545e-16 -vn 0.42261826174069944 -0.9063077870366499 -1.1099069304367545e-16 -vn 0 1.2246467991473532e-16 -1 -vn 0 -1.2246467991473532e-16 1 -vn 0.90630778703665 0.42261826174069944 5.175581015019659e-17 -vn -0.90630778703665 -0.42261826174069944 -5.175581015019659e-17 -vn 0 1.2246467991473532e-16 -1 -vn 0 -1.2246467991473532e-16 1 -vn 0.90630778703665 0.42261826174069944 5.175581015019659e-17 -vn -0.90630778703665 -0.42261826174069944 -5.175581015019659e-17 -vn -0.42261826174069944 0.9063077870366499 1.1099069304367545e-16 -vn 0.42261826174069944 -0.9063077870366499 -1.1099069304367545e-16 -vn 0 1.2246467991473532e-16 -1 -vn 0 -1.2246467991473532e-16 1 -vn -0.9063080337732496 0.422617732611951 5.175574535061379e-17 -vn 0.9063080337732496 -0.42261773261195085 -5.175574535061377e-17 -vn 0.42261866231132417 0.9063076002473924 1.1099067016858882e-16 -vn -0.42261866231132406 -0.9063076002473925 -1.1099067016858883e-16 -vn 0 1.2246467991473532e-16 -1 -vn 0 -1.2246467991473532e-16 1 -vn -0.9063097678709966 0.4226140138017439 5.17552899277121e-17 -vn 0.9063070513423195 -0.4226198394386975 -5.175600336247693e-17 -vn 0 1.2246467991473532e-16 -1 -vn 0 -1.2246467991473532e-16 1 -vn -0.9063097678709966 0.4226140138017433 5.175528992771202e-17 -vn 0.9063065304191132 -0.4226209565552435 -5.175614016979716e-17 -vn 0.4226186623113238 0.9063076002473925 1.1099067016858883e-16 -vn -0.4226172059010351 -0.9063082793820227 -1.1099075333859393e-16 -vn 0 1.2246467991473532e-16 -1 -vn 0 -1.2246467991473532e-16 1 -usemtl engine_4 -f 1697/4749/1188 1698/4750/1188 1700/4751/1188 -f 1697/4749/1188 1700/4751/1188 1699/4752/1188 -f 1702/4753/1189 1701/4754/1189 1703/4755/1189 -f 1702/4753/1189 1703/4755/1189 1704/4756/1189 -f 1702/4757/1190 1698/4758/1190 1697/4759/1190 -f 1702/4757/1190 1697/4759/1190 1701/4760/1190 -f 1703/4761/1191 1699/4762/1191 1700/4763/1191 -f 1703/4761/1191 1700/4763/1191 1704/4764/1191 -f 1701/4765/1192 1697/4766/1192 1699/4767/1192 -f 1701/4765/1192 1699/4767/1192 1703/4768/1192 -f 1698/4769/1193 1702/4770/1193 1704/4771/1193 -f 1698/4769/1193 1704/4771/1193 1700/4772/1193 -f 1705/4773/1194 1706/4774/1194 1708/4775/1194 -f 1705/4773/1194 1708/4775/1194 1707/4776/1194 -f 1710/4777/1195 1709/4778/1195 1711/4779/1195 -f 1710/4777/1195 1711/4779/1195 1712/4780/1195 -f 1709/4781/1196 1705/4782/1196 1707/4783/1196 -f 1709/4781/1196 1707/4783/1196 1711/4784/1196 -f 1706/4785/1197 1710/4786/1197 1712/4787/1197 -f 1706/4785/1197 1712/4787/1197 1708/4788/1197 -f 1713/4789/1198 1714/4790/1198 1716/4791/1198 -f 1713/4789/1198 1716/4791/1198 1715/4792/1198 -f 1718/4793/1199 1717/4794/1199 1719/4795/1199 -f 1718/4793/1199 1719/4795/1199 1720/4796/1199 -f 1718/4797/1200 1714/4798/1200 1713/4799/1200 -f 1718/4797/1200 1713/4799/1200 1717/4800/1200 -f 1719/4801/1201 1715/4802/1201 1716/4803/1201 -f 1719/4801/1201 1716/4803/1201 1720/4804/1201 -f 1717/4805/1202 1713/4806/1202 1715/4807/1202 -f 1717/4805/1202 1715/4807/1202 1719/4808/1202 -f 1714/4809/1203 1718/4810/1203 1720/4811/1203 -f 1714/4809/1203 1720/4811/1203 1716/4812/1203 -f 1724/4813/1204 1722/4814/1204 1721/4815/1204 -f 1724/4813/1204 1721/4815/1204 1723/4816/1204 -f 1727/4817/1205 1725/4818/1205 1726/4819/1205 -f 1727/4817/1205 1726/4819/1205 1728/4820/1205 -f 1721/4821/1206 1722/4822/1206 1726/4823/1206 -f 1721/4821/1206 1726/4823/1206 1725/4824/1206 -f 1724/4825/1207 1723/4826/1207 1727/4827/1207 -f 1724/4825/1207 1727/4827/1207 1728/4828/1207 -f 1723/4829/1208 1721/4830/1208 1725/4831/1208 -f 1723/4829/1208 1725/4831/1208 1727/4832/1208 -f 1728/4833/1209 1726/4834/1209 1722/4835/1209 -f 1728/4833/1209 1722/4835/1209 1724/4836/1209 -f 1732/4837/1210 1730/4838/1210 1729/4839/1210 -f 1732/4837/1210 1729/4839/1210 1731/4840/1210 -f 1735/4841/1211 1733/4842/1211 1734/4843/1211 -f 1735/4841/1211 1734/4843/1211 1736/4844/1211 -f 1731/4845/1212 1729/4846/1212 1733/4847/1212 -f 1731/4845/1212 1733/4847/1212 1735/4848/1212 -f 1736/4849/1213 1734/4850/1213 1730/4851/1213 -f 1736/4849/1213 1730/4851/1213 1732/4852/1213 -f 1740/4853/1214 1738/4854/1214 1737/4855/1214 -f 1740/4853/1214 1737/4855/1214 1739/4856/1214 -f 1743/4857/1215 1741/4858/1215 1742/4859/1215 -f 1743/4857/1215 1742/4859/1215 1744/4860/1215 -f 1737/4861/1216 1738/4862/1216 1742/4863/1216 -f 1737/4861/1216 1742/4863/1216 1741/4864/1216 -f 1740/4865/1217 1739/4866/1217 1743/4867/1217 -f 1740/4865/1217 1743/4867/1217 1744/4868/1217 -f 1739/4869/1218 1737/4870/1218 1741/4871/1218 -f 1739/4869/1218 1741/4871/1218 1743/4872/1218 -f 1744/4873/1219 1742/4874/1219 1738/4875/1219 -f 1744/4873/1219 1738/4875/1219 1740/4876/1219 +f 1018/2897/725 843/2898/725 845/2899/725 1019/2900/725 +f 847/2901/726 1020/2902/726 1021/2903/726 849/2904/726 +f 847/2905/727 843/2906/727 1018/2907/727 1020/2908/727 +f 1021/2909/728 1019/2910/728 845/2911/728 849/2912/728 +f 1020/2913/729 1018/2914/729 1019/2915/729 1021/2916/729 +f 843/2917/730 847/2918/730 849/2919/730 845/2920/730 +usemtl common_cable_and_pipe +f 1028/2921/731 1026/2922/731 1027/2923/731 1029/2924/731 +f 1022/2925/732 1023/2926/732 1027/2927/732 1026/2928/732 +f 1025/2929/733 1024/2930/733 1028/2931/733 1029/2932/733 +f 1029/2933/734 1027/2934/734 1023/2935/734 1025/2936/734 +f 1031/2937/735 1028/2938/735 1024/2939/735 1030/2940/735 +f 1032/2941/736 1022/2942/736 1026/2943/736 1033/2944/736 +f 1030/2945/737 1024/2946/737 1022/2947/737 1032/2948/737 +f 1033/2949/738 1026/2950/738 1028/2951/738 1031/2952/738 +f 1032/2953/739 1033/2954/739 1036/2955/739 1037/2956/739 +f 1031/2957/740 1034/2958/740 1036/2959/740 1033/2960/740 +f 1035/2961/741 1030/2962/741 1032/2963/741 1037/2964/741 +f 1037/2965/742 1036/2966/742 1034/2967/742 1035/2968/742 +f 1039/2969/743 1031/2970/743 1030/2971/743 1038/2972/743 +f 1040/2973/744 1035/2974/744 1034/2975/744 1041/2976/744 +f 1038/2977/745 1030/2978/745 1035/2979/745 1040/2980/745 +f 1041/2981/746 1034/2982/746 1031/2983/746 1039/2984/746 o pipe v -0.4375 1.5625 0.375 -v -0.5625 1.589181875 0.3683775 -v -0.375 1.4023949999999998 0.384719375 -v -0.5625 1.4023949999999998 0.384719375 +v -0.5625 1.5892 0.3684 +v -0.375 1.4024 0.3847 +v -0.5625 1.4024 0.3847 v -0.4375 1.5625 0.5625 -v -0.5625 1.60552375 0.55516375 -v -0.375 1.418736875 0.571505625 -v -0.5625 1.418736875 0.571505625 +v -0.5625 1.6055 0.5552 +v -0.375 1.4187 0.5715 +v -0.5625 1.4187 0.5715 v -0.5 1.1875 0.375 v -0.5 1.3125 0.375 v -0.5 1.125 0.5625 @@ -10584,437 +5654,4110 @@ v -0.3125 1.1875 0.375 v -0.3125 1.3125 0.375 v -0.3125 1.125 0.5625 v -0.3125 1.3125 0.5625 -v -0.75 1.418736875 0.571505625 -v -0.75 1.60552375 0.55516375 -v -0.75 1.473209375 1.1941275 -v -0.75 1.659995625 1.177785625 -v -0.5625 1.473209375 1.1941275 -v -0.5625 1.659995625 1.177785625 -v -0.75 1.4078425 0.44698125 -v -0.75 1.59462875 0.43064 -v -0.55625 1.65097 1.0029068749999999 -v -0.55625 1.622644375 0.6791437499999999 -v -0.55625 1.451730625 1.0203381249999999 -v -0.55625 1.423405 0.6965749999999999 -v -0.75625 1.65097 1.0029068749999999 -v -0.75625 1.622644375 0.6791437499999999 -v -0.75625 1.451730625 1.0203381249999999 -v -0.75625 1.423405 0.6965749999999999 -v -0.65625 1.622644375 0.6791437499999999 -v -0.65625 1.65097 1.0029068749999999 -v -0.65625 1.451730625 1.0203381249999999 -v -0.65625 1.423405 0.6965749999999999 -v -0.75625 1.55135 1.0116225 -v -0.75625 1.523024375 0.6878593749999999 -v -0.55625 1.523024375 0.6878593749999999 -v -0.55625 1.55135 1.0116225 -v -0.65625 1.636806875 0.8410249999999999 -v -0.75625 1.636806875 0.8410249999999999 -v -0.75625 1.5371875 0.8497406249999999 -v -0.75625 1.437568125 0.8584562499999999 -v -0.65625 1.437568125 0.8584562499999999 -v -0.55625 1.437568125 0.8584562499999999 -v -0.55625 1.5371875 0.8497406249999999 -v -0.55625 1.636806875 0.8410249999999999 -vt 0.28125 0.8125 -vt 0.28125 0.90625 -vt 0.375 0.90625 -vt 0.375 0.8125 -vt 0.375 0.8125 -vt 0.375 0.90625 -vt 0.28125 0.90625 -vt 0.28125 0.8125 -vt 0.09375 0.9375 -vt 0.09375 1 -vt 0 1 -vt 0 0.9375 -vt 0.09375 0.90625 -vt 0.09375 1 -vt 0 1 -vt 0 0.90625 -vt 0.28125 0.8125 -vt 0.28125 0.90625 -vt 0.375 0.90625 -vt 0.375 0.8125 -vt 0.375 0.8125 -vt 0.375 0.90625 -vt 0.28125 0.90625 -vt 0.28125 0.8125 -vt 0.09375 0.9375 -vt 0.09375 1 -vt 0 1 -vt 0 0.9375 -vt 0.09375 0.90625 -vt 0.09375 1 -vt 0 1 -vt 0 0.90625 -vt 0.1875 0.53125 -vt 0.1875 0.84375 -vt 0.09375 0.84375 -vt 0.09375 0.53125 -vt 0.1875 0.53125 -vt 0.1875 0.84375 -vt 0.09375 0.84375 -vt 0.09375 0.53125 -vt 0.1875 0.53125 -vt 0.1875 0.84375 -vt 0.09375 0.84375 -vt 0.09375 0.53125 -vt 0.1875 0.53125 -vt 0.1875 0.84375 -vt 0.09375 0.84375 -vt 0.09375 0.53125 -vt 0.9375 1 -vt 0.84375 1 -vt 0.84375 0.90625 -vt 0.9375 0.90625 -vt 0.28125 0.8125 -vt 0.28125 0.90625 -vt 0.375 0.90625 -vt 0.375 0.8125 -vt 0.375 0.8125 -vt 0.375 0.90625 -vt 0.28125 0.90625 -vt 0.28125 0.8125 -vt 0.09375 0.9375 -vt 0.09375 1 -vt 0 1 -vt 0 0.9375 -vt 0.09375 0.90625 -vt 0.09375 1 -vt 0 1 -vt 0 0.90625 -vt 0.40625 0.5 -vt 0.40625 0.40625 -vt 0.34375 0.40625 -vt 0.34375 0.5 -vt 0.34375 0.5 -vt 0.34375 0.40625 -vt 0.40625 0.40625 -vt 0.40625 0.5 +v -0.75 1.4187 0.5715 +v -0.75 1.6055 0.5552 +v -0.75 1.4732 1.1941 +v -0.75 1.66 1.1778 +v -0.5625 1.4732 1.1941 +v -0.5625 1.66 1.1778 +v -0.75 1.4078 0.447 +v -0.75 1.5946 0.4306 +v -0.5562 1.651 1.0029 +v -0.5562 1.6226 0.6791 +v -0.5562 1.4517 1.0203 +v -0.5562 1.4234 0.6966 +v -0.7562 1.651 1.0029 +v -0.7562 1.6226 0.6791 +v -0.7562 1.4517 1.0203 +v -0.7562 1.4234 0.6966 +v -0.6562 1.6226 0.6791 +v -0.6562 1.651 1.0029 +v -0.6562 1.4517 1.0203 +v -0.6562 1.4234 0.6966 +v -0.7562 1.5514 1.0116 +v -0.7562 1.523 0.6879 +v -0.5562 1.523 0.6879 +v -0.5562 1.5514 1.0116 +v -0.6562 1.6368 0.841 +v -0.7562 1.6368 0.841 +v -0.7562 1.5372 0.8497 +v -0.7562 1.4376 0.8585 +v -0.6562 1.4376 0.8585 +v -0.5562 1.4376 0.8585 +v -0.5562 1.5372 0.8497 +v -0.5562 1.6368 0.841 +vt 0.6406 0.4063 +vt 0.6406 0.4531 +vt 0.6875 0.4531 +vt 0.6875 0.4063 +vt 0.6875 0.4063 +vt 0.6875 0.4531 +vt 0.6406 0.4531 +vt 0.6406 0.4063 +vt 0.5469 0.4688 +vt 0.5469 0.5 +vt 0.5 0.5 +vt 0.5 0.4688 +vt 0.5469 0.4531 +vt 0.5469 0.5 +vt 0.5 0.5 +vt 0.5 0.4531 +vt 0.6406 0.4063 +vt 0.6406 0.4531 +vt 0.6875 0.4531 +vt 0.6875 0.4063 +vt 0.6875 0.4063 +vt 0.6875 0.4531 +vt 0.6406 0.4531 +vt 0.6406 0.4063 +vt 0.5469 0.4688 +vt 0.5469 0.5 +vt 0.5 0.5 +vt 0.5 0.4688 +vt 0.5469 0.4531 +vt 0.5469 0.5 +vt 0.5 0.5 +vt 0.5 0.4531 +vt 0.5938 0.2656 +vt 0.5938 0.4219 +vt 0.5469 0.4219 +vt 0.5469 0.2656 +vt 0.5938 0.2656 +vt 0.5938 0.4219 +vt 0.5469 0.4219 +vt 0.5469 0.2656 +vt 0.5938 0.2656 +vt 0.5938 0.4219 +vt 0.5469 0.4219 +vt 0.5469 0.2656 +vt 0.5938 0.2656 +vt 0.5938 0.4219 +vt 0.5469 0.4219 +vt 0.5469 0.2656 +vt 0.9688 0.5 +vt 0.9219 0.5 +vt 0.9219 0.4531 +vt 0.9688 0.4531 +vt 0.6406 0.4063 +vt 0.6406 0.4531 +vt 0.6875 0.4531 +vt 0.6875 0.4063 +vt 0.6875 0.4063 +vt 0.6875 0.4531 +vt 0.6406 0.4531 +vt 0.6406 0.4063 +vt 0.5469 0.4688 +vt 0.5469 0.5 +vt 0.5 0.5 +vt 0.5 0.4688 +vt 0.5469 0.4531 +vt 0.5469 0.5 +vt 0.5 0.5 +vt 0.5 0.4531 +vt 0.4063 0.5 +vt 0.4063 0.4063 +vt 0.3438 0.4063 +vt 0.3438 0.5 +vt 0.3438 0.5 +vt 0.3438 0.4063 +vt 0.4063 0.4063 +vt 0.4063 0.5 vt 0.5 0.75 -vt 0.5 0.65625 -vt 0.4375 0.65625 +vt 0.5 0.6563 +vt 0.4375 0.6563 vt 0.4375 0.75 -vt 0.34375 0.3125 -vt 0.34375 0.40625 -vt 0.40625 0.40625 -vt 0.40625 0.3125 -vt 0.34375 0.5 -vt 0.34375 0.40625 -vt 0.40625 0.40625 -vt 0.40625 0.5 +vt 0.3438 0.3125 +vt 0.3438 0.4063 +vt 0.4063 0.4063 +vt 0.4063 0.3125 +vt 0.3438 0.5 +vt 0.3438 0.4063 +vt 0.4063 0.4063 +vt 0.4063 0.5 vt 0.5 0.5625 -vt 0.5 0.65625 -vt 0.4375 0.65625 +vt 0.5 0.6563 +vt 0.4375 0.6563 vt 0.4375 0.5625 vt 0.5 0.75 -vt 0.5 0.65625 -vt 0.4375 0.65625 +vt 0.5 0.6563 +vt 0.4375 0.6563 vt 0.4375 0.75 vt 0.4375 0.75 -vt 0.4375 0.65625 -vt 0.5 0.65625 +vt 0.4375 0.6563 +vt 0.5 0.6563 vt 0.5 0.75 vt 0.4375 0.5625 -vt 0.4375 0.65625 -vt 0.5 0.65625 +vt 0.4375 0.6563 +vt 0.5 0.6563 vt 0.5 0.5625 -vt 0.40625 0.3125 -vt 0.40625 0.40625 -vt 0.34375 0.40625 -vt 0.34375 0.3125 +vt 0.4063 0.3125 +vt 0.4063 0.4063 +vt 0.3438 0.4063 +vt 0.3438 0.3125 vt 0.4375 0.5625 -vt 0.4375 0.65625 -vt 0.5 0.65625 +vt 0.4375 0.6563 +vt 0.5 0.6563 vt 0.5 0.5625 -vt 0.40625 0.5 -vt 0.40625 0.40625 -vt 0.34375 0.40625 -vt 0.34375 0.5 +vt 0.4063 0.5 +vt 0.4063 0.4063 +vt 0.3438 0.4063 +vt 0.3438 0.5 vt 0.4375 0.75 -vt 0.4375 0.65625 -vt 0.5 0.65625 +vt 0.4375 0.6563 +vt 0.5 0.6563 vt 0.5 0.75 vt 0.5 0.5625 -vt 0.5 0.65625 -vt 0.4375 0.65625 +vt 0.5 0.6563 +vt 0.4375 0.6563 vt 0.4375 0.5625 -vt 0.34375 0.3125 -vt 0.34375 0.40625 -vt 0.40625 0.40625 -vt 0.40625 0.3125 -vt 0.40625 0.3125 -vt 0.40625 0.40625 -vt 0.34375 0.40625 -vt 0.34375 0.3125 -vt 0.1875 0.71875 -vt 0.1875 0.78125 -vt 0.09375 0.78125 -vt 0.09375 0.71875 -vt 0.1875 0.71875 -vt 0.1875 0.78125 -vt 0.09375 0.78125 -vt 0.09375 0.71875 -vt 0.1875 0.71875 -vt 0.1875 0.78125 -vt 0.09375 0.78125 -vt 0.09375 0.71875 -vt 0.1875 0.71875 -vt 0.1875 0.78125 -vt 0.09375 0.78125 -vt 0.09375 0.71875 -vn 0.03415446483938489 -0.0871056386742915 -0.9956134190752349 -vn -0.043579637793221396 0.04357709266649024 0.9980991194087628 -vn 0.2123073887978959 0.9734842924963198 -0.08516985925055112 -vn 0.9315382045961843 0.3636434701431029 0 -vn -1 0 0 -vn 1 0 0 -vn 0 0 -1 -vn 0 -0.948683298050514 -0.316227766016838 -vn -1 0 0 -vn 1 0 0 -vn 0 -0.9961946780493579 0.08715597183289389 -vn 0 0.9961947648731585 -0.0871549794292487 -vn 0 0.08715677814364653 0.9961946075057923 -vn 0 -0.9961947648731584 0.08715497942924849 -vn -0.0000036111822270999023 0.9961942927533904 -0.08716037558737247 -vn -1 0 0 -vn -0.31622653960097513 -0.0826810771040748 -0.9450738675579297 -vn 1 0 0 -vn -1 0 0 -vn 0 0.9961948446029714 -0.08715406810047276 -vn 0 -0.9961945106624848 0.08715788504738291 -vn 0 0.9961948446029714 -0.08715406810047276 -vn 0 -0.9961945106624848 0.08715788504738291 -vn -1 0 0 -vn 1 0 0 -vn 0 0.9961945398796772 -0.08715755110097043 -vn -1 0 0 -vn -1 0 0 -vn 0 -0.9961948738176148 0.08715373416845973 -vn 0 -0.9961948738176148 0.08715373416845973 -vn 1 0 0 -vn 1 0 0 -vn 0 0.9961945398796772 -0.08715755110097043 -vn 0.8174705944683781 0.5737785421384987 -0.050199718733630584 -vn -0.8593949601058594 -0.5093665895353195 0.04456433562621729 -vn 0 -0.08446635768445766 0.996426331657048 -vn 0 0.10749273791170305 -0.9942058696750115 -usemtl pipe34 -f 1748/4877/1220 1746/4878/1220 1745/4879/1220 -f 1748/4877/1220 1745/4879/1220 1747/4880/1220 -f 1751/4881/1221 1749/4882/1221 1750/4883/1221 -f 1751/4881/1221 1750/4883/1221 1752/4884/1221 -f 1745/4885/1222 1746/4886/1222 1750/4887/1222 -f 1745/4885/1222 1750/4887/1222 1749/4888/1222 -f 1747/4889/1223 1745/4890/1223 1749/4891/1223 -f 1747/4889/1223 1749/4891/1223 1751/4892/1223 -f 1756/4893/1224 1754/4894/1224 1753/4895/1224 -f 1756/4893/1224 1753/4895/1224 1755/4896/1224 -f 1759/4897/1225 1757/4898/1225 1758/4899/1225 -f 1759/4897/1225 1758/4899/1225 1760/4900/1225 -f 1753/4901/1226 1754/4902/1226 1758/4903/1226 -f 1753/4901/1226 1758/4903/1226 1757/4904/1226 -f 1755/4905/1227 1753/4906/1227 1757/4907/1227 -f 1755/4905/1227 1757/4907/1227 1759/4908/1227 -f 1764/4909/1228 1762/4910/1228 1761/4911/1228 -f 1764/4909/1228 1761/4911/1228 1763/4912/1228 -f 1765/4913/1229 1752/4914/1229 1750/4915/1229 -f 1765/4913/1229 1750/4915/1229 1766/4916/1229 -f 1763/4917/1230 1761/4918/1230 1752/4919/1230 -f 1763/4917/1230 1752/4919/1230 1765/4920/1230 -f 1766/4921/1231 1750/4922/1231 1762/4923/1231 -f 1766/4921/1231 1762/4923/1231 1764/4924/1231 -f 1763/4925/1232 1765/4926/1232 1766/4927/1232 -f 1763/4925/1232 1766/4927/1232 1764/4928/1232 -f 1752/4929/1233 1761/4930/1233 1767/4931/1233 -f 1752/4929/1233 1767/4931/1233 1748/4932/1233 -f 1746/4933/1234 1768/4934/1234 1762/4935/1234 -f 1746/4933/1234 1762/4935/1234 1750/4936/1234 -f 1767/4937/1235 1761/4938/1235 1762/4939/1235 -f 1767/4937/1235 1762/4939/1235 1768/4940/1235 -f 1748/4941/1236 1767/4942/1236 1768/4943/1236 -f 1748/4941/1236 1768/4943/1236 1746/4944/1236 +vt 0.3438 0.3125 +vt 0.3438 0.4063 +vt 0.4063 0.4063 +vt 0.4063 0.3125 +vt 0.4063 0.3125 +vt 0.4063 0.4063 +vt 0.3438 0.4063 +vt 0.3438 0.3125 +vt 0.5938 0.3594 +vt 0.5938 0.3906 +vt 0.5469 0.3906 +vt 0.5469 0.3594 +vt 0.5938 0.3594 +vt 0.5938 0.3906 +vt 0.5469 0.3906 +vt 0.5469 0.3594 +vt 0.5938 0.3594 +vt 0.5938 0.3906 +vt 0.5469 0.3906 +vt 0.5469 0.3594 +vt 0.5938 0.3594 +vt 0.5938 0.3906 +vt 0.5469 0.3906 +vt 0.5469 0.3594 +vn 0.03 -0.09 -1 +vn -0.04 0.04 1 +vn 0.21 0.97 -0.09 +vn 0.93 0.36 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn 0 -0.95 -0.32 +vn -1 0 0 +vn 1 0 0 +vn 0 -1 0.09 +vn 0 1 -0.09 +vn 0 0.09 1 +vn 0 -1 0.09 +vn 0 1 -0.09 +vn -1 0 0 +vn -0.32 -0.08 -0.95 +vn 1 0 0 +vn -1 0 0 +vn 0 1 -0.09 +vn 0 -1 0.09 +vn 0 1 -0.09 +vn 0 -1 0.09 +vn -1 0 0 +vn 1 0 0 +vn 0 1 -0.09 +vn -1 0 0 +vn -1 0 0 +vn 0 -1 0.09 +vn 0 -1 0.09 +vn 1 0 0 +vn 1 0 0 +vn 0 1 -0.09 +vn 0.82 0.57 -0.05 +vn -0.86 -0.51 0.04 +vn 0 -0.08 1 +vn 0 0.11 -0.99 +usemtl common_cable_and_pipe +f 1045/2985/747 1043/2986/747 1042/2987/747 1044/2988/747 +f 1048/2989/748 1046/2990/748 1047/2991/748 1049/2992/748 +f 1042/2993/749 1043/2994/749 1047/2995/749 1046/2996/749 +f 1044/2997/750 1042/2998/750 1046/2999/750 1048/3000/750 +f 1053/3001/751 1051/3002/751 1050/3003/751 1052/3004/751 +f 1056/3005/752 1054/3006/752 1055/3007/752 1057/3008/752 +f 1050/3009/753 1051/3010/753 1055/3011/753 1054/3012/753 +f 1052/3013/754 1050/3014/754 1054/3015/754 1056/3016/754 +f 1061/3017/755 1059/3018/755 1058/3019/755 1060/3020/755 +f 1062/3021/756 1049/3022/756 1047/3023/756 1063/3024/756 +f 1060/3025/757 1058/3026/757 1049/3027/757 1062/3028/757 +f 1063/3029/758 1047/3030/758 1059/3031/758 1061/3032/758 +f 1060/3033/759 1062/3034/759 1063/3035/759 1061/3036/759 +f 1049/3037/760 1058/3038/760 1064/3039/760 1045/3040/760 +f 1043/3041/761 1065/3042/761 1059/3043/761 1047/3044/761 +f 1064/3045/762 1058/3046/762 1059/3047/762 1065/3048/762 +f 1045/3049/763 1064/3050/763 1065/3051/763 1043/3052/763 +usemtl tracked_motorbike +f 1067/3053/764 1089/3054/764 1088/3055/764 1080/3056/764 +f 1079/3057/765 1084/3058/765 1083/3059/765 1071/3060/765 +f 1071/3061/766 1083/3062/766 1082/3063/766 1074/3064/766 +f 1077/3065/767 1086/3066/767 1085/3067/767 1073/3068/767 +f 1074/3069/768 1082/3070/768 1089/3071/768 1067/3072/768 +f 1069/3073/769 1087/3074/769 1086/3075/769 1077/3076/769 +f 1073/3077/770 1085/3078/770 1084/3079/770 1079/3080/770 +f 1080/3081/771 1088/3082/771 1087/3083/771 1069/3084/771 +f 1075/3085/772 1082/3086/772 1083/3087/772 1070/3088/772 +f 1070/3089/773 1083/3090/773 1084/3091/773 1078/3092/773 +f 1078/3093/774 1084/3094/774 1085/3095/774 1072/3096/774 +f 1072/3097/775 1085/3098/775 1086/3099/775 1076/3100/775 +f 1076/3101/776 1086/3102/776 1087/3103/776 1068/3104/776 +f 1068/3105/777 1087/3106/777 1088/3107/777 1081/3108/777 +f 1081/3109/778 1088/3110/778 1089/3111/778 1066/3112/778 +f 1066/3113/779 1089/3114/779 1082/3115/779 1075/3116/779 +usemtl common_cable_and_pipe +f 1055/3117/780 1044/3118/780 1048/3119/780 1057/3120/780 +f 1053/3121/781 1049/3122/781 1045/3123/781 1051/3124/781 +f 1057/3125/782 1048/3126/782 1049/3127/782 1053/3128/782 +f 1051/3129/783 1045/3130/783 1044/3131/783 1055/3132/783 +o hull +v 0.625 1.0625 2.25 +v 0.625 1.0625 1.875 +v 0.625 0.6875 2.25 +v 0.625 0.6875 1.875 +v 0.5625 1.0625 2.25 +v 0.5625 1.0625 1.875 +v 0.5625 0.6875 2.25 +v 0.5625 0.6875 1.875 +v -0.5625 1.0625 2.25 +v -0.5625 1.0625 1.875 +v -0.5625 0.6875 2.25 +v -0.5625 0.6875 1.875 +v -0.625 1.0625 2.25 +v -0.625 1.0625 1.875 +v -0.625 0.6875 2.25 +v -0.625 0.6875 1.875 +v 0.625 1.0625 -0.125 +v 0.625 1.0625 -0.5 +v 0.625 0.6875 -0.125 +v 0.625 0.6875 -0.5 +v 0.5625 1.0625 -0.125 +v 0.5625 1.0625 -0.5 +v 0.5625 0.6875 -0.125 +v 0.5625 0.6875 -0.5 +v 0.5625 0.8688 1.5625 +v 0.5625 0.8688 0.1875 +v 0.5625 1.0563 1.5625 +v 0.5625 1.0563 0.1875 +v 1 0.8688 1.5625 +v 1 0.8688 0.1875 +v 1 1.0563 1.5625 +v 1 1.0563 0.1875 +v 1 0.9938 1.5625 +v 1 0.9938 0.1875 +v 0.5625 0.9938 0.1875 +v 0.5625 0.9938 1.5625 +v 1 0.9938 0.875 +v 1 1.0563 0.875 +v 0.5625 1.0563 0.875 +v 0.5625 0.8688 0.875 +v 1 0.8688 0.875 +v 0.75 0.8688 0.875 +v 0.75 0.8688 1.5625 +v 0.75 0.9938 1.5625 +v 0.75 1.0563 1.5625 +v 0.75 1.0563 0.875 +v 0.75 1.0563 0.1875 +v 0.75 0.9938 0.1875 +v 0.75 0.8688 0.1875 +v 0.5625 1.1188 1.125 +v 0.5625 1.1188 1.1875 +v 0.5625 1.0563 1.125 +v 0.5625 1.0563 1.1875 +v 1 1.1188 1.125 +v 1 1.1188 1.1875 +v 1 1.0563 1.125 +v 1 1.0563 1.1875 +v 0.5625 1.1188 0.5625 +v 0.5625 1.1188 0.625 +v 0.5625 1.0563 0.5625 +v 0.5625 1.0563 0.625 +v 1 1.1188 0.5625 +v 1 1.1188 0.625 +v 1 1.0563 0.5625 +v 1 1.0563 0.625 +v 0.5625 1.4375 1.8125 +v 0.5625 1.4375 0.625 +v 0.5625 1.375 1.8125 +v 0.5625 1.375 0.625 +v 1.0625 1.375 1.8125 +v 1.0625 1.375 0.625 +v 1.0625 1.3125 1.8125 +v 1.0625 1.3125 0.625 +v 0.5625 1.4375 1.25 +v 1.0625 1.375 1.25 +v 1.0625 1.3125 1.25 +v 0.5625 1.375 1.25 +v 0.6875 1.4375 1.25 +v 0.6875 1.4375 1.8125 +v 0.6875 1.375 1.8125 +v 0.6875 1.375 1.25 +v 0.6875 1.375 0.625 +v 0.6875 1.4375 0.625 +v 0.9375 1.5 0.0625 +v 0.9375 1.5 0 +v 1 1.4375 0.0625 +v 1 1.4375 0 +v 0.6875 1.5 0.0625 +v 0.6875 1.5 0 +v 0.625 1.4375 0.0625 +v 0.625 1.4375 0 +v 1 1.375 0.0625 +v 1 1.375 0 +v 0.9375 1.4375 0.0625 +v 0.9375 1.4375 0 +v 0.9375 1.375 0.0625 +v 0.9375 1.375 0 +v 0.6875 1.4375 0.0625 +v 0.6875 1.4375 0 +v 0.6875 1.375 0.0625 +v 0.6875 1.375 0 +v 0.625 1.375 0.0625 +v 0.625 1.375 0 +v 0.9375 1.4813 2.1875 +v 0.9375 1.4813 2.125 +v 1 1.4188 2.1875 +v 1 1.4188 2.125 +v 0.6875 1.4813 2.1875 +v 0.6875 1.4813 2.125 +v 0.625 1.4188 2.1875 +v 0.625 1.4188 2.125 +v 1 1.3563 2.1875 +v 1 1.3563 2.125 +v 0.9375 1.4188 2.1875 +v 0.9375 1.4188 2.125 +v 0.9375 1.3563 2.1875 +v 0.9375 1.3563 2.125 +v 0.6875 1.4188 2.1875 +v 0.6875 1.4188 2.125 +v 0.6875 1.3563 2.1875 +v 0.6875 1.3563 2.125 +v 0.625 1.3563 2.1875 +v 0.625 1.3563 2.125 +v -0.5625 1.0563 1.5625 +v -0.5625 1.0563 0.1875 +v -0.5625 0.8688 1.5625 +v -0.5625 0.8688 0.1875 +v -1 1.0563 1.5625 +v -1 1.0563 0.1875 +v -1 0.8688 1.5625 +v -1 0.8688 0.1875 +v -1 0.9313 1.5625 +v -1 0.9313 0.1875 +v -0.5625 0.9313 0.1875 +v -0.5625 0.9313 1.5625 +v -1 0.9313 0.875 +v -1 0.8688 0.875 +v -0.5625 0.8688 0.875 +v -0.5625 1.0563 0.875 +v -1 1.0563 0.875 +v -0.75 1.0563 0.875 +v -0.75 1.0563 1.5625 +v -0.75 0.9313 1.5625 +v -0.75 0.8688 1.5625 +v -0.75 0.8688 0.875 +v -0.75 0.8688 0.1875 +v -0.75 0.9313 0.1875 +v -0.75 1.0563 0.1875 +v -0.5625 1.1188 0.625 +v -0.5625 1.1188 0.5625 +v -0.5625 1.0563 0.625 +v -0.5625 1.0563 0.5625 +v -1 1.1188 0.625 +v -1 1.1188 0.5625 +v -1 1.0563 0.625 +v -1 1.0563 0.5625 +v -0.5625 1.0625 -0.125 +v -0.5625 1.0625 -0.5 +v -0.5625 0.6875 -0.125 +v -0.5625 0.6875 -0.5 +v -0.625 1.0625 -0.125 +v -0.625 1.0625 -0.5 +v -0.625 0.6875 -0.125 +v -0.625 0.6875 -0.5 +v -0.5625 1.4375 1.8125 +v -0.5625 1.4375 0.625 +v -0.5625 1.375 1.8125 +v -0.5625 1.375 0.625 +v -1.0625 1.375 1.8125 +v -1.0625 1.375 0.625 +v -1.0625 1.3125 1.8125 +v -1.0625 1.3125 0.625 +v -0.5625 1.4375 1.25 +v -1.0625 1.375 1.25 +v -1.0625 1.3125 1.25 +v -0.5625 1.375 1.25 +v -0.6875 1.4375 1.25 +v -0.6875 1.4375 1.8125 +v -0.6875 1.375 1.8125 +v -0.6875 1.375 1.25 +v -0.6875 1.375 0.625 +v -0.6875 1.4375 0.625 +v -0.6875 1.5 0.0625 +v -0.6875 1.5 0 +v -0.625 1.4375 0.0625 +v -0.625 1.4375 0 +v -0.9375 1.5 0.0625 +v -0.9375 1.5 0 +v -1 1.4375 0.0625 +v -1 1.4375 0 +v -0.625 1.375 0.0625 +v -0.625 1.375 0 +v -0.6875 1.4375 0.0625 +v -0.6875 1.4375 0 +v -0.6875 1.375 0.0625 +v -0.6875 1.375 0 +v -0.9375 1.4375 0.0625 +v -0.9375 1.4375 0 +v -0.9375 1.375 0.0625 +v -0.9375 1.375 0 +v -1 1.375 0.0625 +v -1 1.375 0 +v -0.6875 1.4813 2.1875 +v -0.6875 1.4813 2.125 +v -0.625 1.4188 2.1875 +v -0.625 1.4188 2.125 +v -0.9375 1.4813 2.1875 +v -0.9375 1.4813 2.125 +v -1 1.4188 2.1875 +v -1 1.4188 2.125 +v -0.625 1.3563 2.1875 +v -0.625 1.3563 2.125 +v -0.6875 1.4188 2.1875 +v -0.6875 1.4188 2.125 +v -0.6875 1.3563 2.1875 +v -0.6875 1.3563 2.125 +v -0.9375 1.4188 2.1875 +v -0.9375 1.4188 2.125 +v -0.9375 1.3563 2.1875 +v -0.9375 1.3563 2.125 +v -1 1.3563 2.1875 +v -1 1.3563 2.125 +v -0.5625 1.1188 1.1875 +v -0.5625 1.1188 1.125 +v -0.5625 1.0563 1.1875 +v -0.5625 1.0563 1.125 +v -1 1.1188 1.1875 +v -1 1.1188 1.125 +v -1 1.0563 1.1875 +v -1 1.0563 1.125 +v 0.25 1.3125 1.75 +v 0.25 1.3125 1.5 +v 0.25 0.4375 1.5 +v -0.5 1.3125 1.75 +v -0.5 1.3125 1.5 +v -0.5 0.4375 1.5 +v 0.25 0.4375 1.75 +v 0.5 1.25 1.125 +v 0.3125 1.25 1.125 +v 0.5 0.8125 1.125 +v 0.3125 0.8125 1.125 +v 0.5 1.25 1.625 +v 0.3125 1.25 1.625 +v 0.5 0.8125 1.625 +v 0.3125 0.8125 1.625 +v 0.4375 1.25 1.125 +v 0.4375 0.8125 1.125 +v 0.4375 0.8125 1.625 +v 0.4375 1.25 1.625 +v 0.3125 1.1563 1.25 +v 0.25 1.1563 1.25 +v 0.3125 0.9063 1.25 +v 0.25 0.9063 1.25 +v 0.3125 1.1563 1.5 +v 0.25 1.1563 1.5 +v 0.3125 0.9063 1.5 +v 0.25 0.9063 1.5 +v 0.25 1.0938 1.4375 +v 0.25 1.0938 1.3125 +v 0.25 0.9688 1.4375 +v 0.25 0.9688 1.3125 +v 0.1875 1.0938 1.4375 +v 0.1875 1.0938 1.3125 +v 0.125 0.9688 1.4375 +v 0.125 0.9688 1.3125 +v 0.458 0.9428 1.125 +v 0.458 0.9428 0.9375 +v 0.2995 0.6029 1.125 +v 0.2995 0.6029 0.9375 +v 0.288 1.0221 1.125 +v 0.288 1.0221 0.9375 +v 0.1295 0.6822 1.125 +v 0.1295 0.6822 0.9375 +v -0.4062 0.7813 1.5313 +v -0.4062 0.7813 1.0938 +v -0.4062 0.6563 1.5313 +v -0.4062 0.6563 1.0938 +v -0.5312 0.7813 1.5313 +v -0.5312 0.7813 1.0938 +v -0.5312 0.6563 1.5313 +v -0.5312 0.6563 1.0938 +v -0.4062 0.7813 0.9688 +v -0.4062 0.6563 0.9688 +v -0.4687 0.7813 0.9688 +v -0.4687 0.6563 0.9688 +v 0.5 1.3125 -0.4375 +v 0.5 1.3125 0.5625 +v 0.5 0.4375 -0.4375 +v 0.5 0.4375 0.5625 +v 0.5625 1.3125 -0.4375 +v 0.5625 1.3125 0.5625 +v 0.5625 0.4375 -0.4375 +v 0.5625 0.4375 0.5625 +v 0.0625 0.8438 2.6875 +v 0.0625 0.8438 2.5625 +v 0.0625 0.4063 2.6875 +v 0.0625 0.4063 2.5625 +v -0.0625 0.8438 2.6875 +v -0.0625 0.8438 2.5625 +v -0.0625 0.4063 2.6875 +v -0.0625 0.4063 2.5625 +v 0.0625 0.4063 2.375 +v 0.0625 0.2813 2.625 +v 0.0625 0.2813 2.375 +v -0.0625 0.4063 2.375 +v -0.0625 0.2813 2.625 +v -0.0625 0.2813 2.375 +v 0.5625 0.4375 2.4375 +v 0.5625 0.3125 2.4375 +v 0.5625 0.3125 -0.4375 +v -0.5625 0.4375 2.4375 +v -0.5625 0.4375 -0.4375 +v -0.5625 0.3125 2.4375 +v -0.5625 0.3125 -0.4375 +v 0.5625 0.3125 1 +v -0.5625 0.3125 1 +v -0.5625 0.4375 1 +v 0.5625 0.4375 1 +v 0 0.3125 1 +v 0 0.3125 -0.4375 +v 0 0.4375 -0.4375 +v 0 0.4375 1 +v 0 0.4375 2.4375 +v 0 0.3125 2.4375 +v 0.5 1.25 0.6875 +v 0.5 0.4375 0.6875 +v -0.5 1.25 0.6875 +v -0.5 0.4375 0.6875 +v -0.4375 1.5 1.75 +v -0.4375 1.5 1.625 +v -0.4375 1.4375 1.75 +v -0.4375 1.4375 1.625 +v -0.5625 1.5 1.75 +v -0.5625 1.5 1.625 +v -0.5625 1.4375 1.75 +v -0.5625 1.4375 1.625 +v -0.4375 1.5 0.8125 +v -0.4375 1.5 0.6875 +v -0.4375 1.4375 0.8125 +v -0.4375 1.4375 0.6875 +v -0.5625 1.5 0.8125 +v -0.5625 1.5 0.6875 +v -0.5625 1.4375 0.8125 +v -0.5625 1.4375 0.6875 +v 0.1875 0.6188 0.125 +v 0.1875 0.6188 -0.4375 +v 0.1875 0.4313 0.125 +v 0.1875 0.4313 -0.4375 +v -0.0625 0.6188 0.125 +v -0.0625 0.6188 -0.4375 +v -0.0625 0.4313 0.125 +v -0.0625 0.4313 -0.4375 +v -0.4375 1.125 2.25 +v -0.4375 1.125 1.875 +v -0.4375 0.4375 2.25 +v -0.4375 0.4375 1.875 +v -0.5 1.125 2.25 +v -0.5 1.125 1.875 +v -0.5 0.4375 2.25 +v -0.5 0.4375 1.875 +v -0.4375 0.75 1.875 +v -0.4375 0.75 2.25 +v -0.5 0.75 2.25 +v -0.5 0.75 1.875 +v -0.4375 0.75 2.0625 +v -0.4375 1.125 2.0625 +v -0.5 1.125 2.0625 +v -0.4375 0.4375 2.0625 +v 0.4375 1.125 2.25 +v 0.4375 1.125 1.875 +v 0.4375 0.4375 2.25 +v 0.4375 0.4375 1.875 +v 0.5 1.125 2.25 +v 0.5 1.125 1.875 +v 0.5 0.4375 2.25 +v 0.5 0.4375 1.875 +v 0.4375 0.75 1.875 +v 0.4375 0.75 2.25 +v 0.5 0.75 2.25 +v 0.5 0.75 1.875 +v 0.4375 0.75 2.0625 +v 0.4375 1.125 2.0625 +v 0.5 1.125 2.0625 +v 0.4375 0.4375 2.0625 +v 0.25 0.6875 2.1563 +v 0.25 0.6875 1.9063 +v 0.25 0.4375 2.1563 +v 0.25 0.4375 1.9063 +v -0.25 0.6875 2.1563 +v -0.25 0.6875 1.9063 +v -0.25 0.4375 2.1563 +v -0.25 0.4375 1.9063 +v 0.25 0.5625 2.1563 +v -0.25 0.5625 2.1563 +v -0.25 0.5625 1.9063 +v 0.25 0.5625 1.9063 +v 0 0.5625 2.1563 +v 0 0.4375 2.1563 +v 0 0.6875 2.1563 +v -0.3125 1.375 1.8125 +v -0.5 1.375 1.8125 +v -0.3125 1.1875 1.8125 +v -0.5 1.1875 1.8125 +v -0.3125 1.375 1.875 +v -0.5 1.375 1.875 +v -0.3125 1.1875 1.875 +v -0.5 1.1875 1.875 +v 0.375 0.625 0.5625 +v 0.375 0.625 0.125 +v 0.375 0.4375 0.5625 +v 0.375 0.4375 0.125 +v -0.375 0.625 0.5625 +v -0.375 0.625 0.125 +v -0.375 0.4375 0.5625 +v -0.375 0.4375 0.125 +v 0 0.625 0.125 +v 0 0.4375 0.125 +v 0.375 0.625 0.375 +v 0.375 0.4375 0.375 +v -0.375 0.4375 0.375 +v -0.375 0.625 0.375 +v 0 0.5 0.125 +v 0.375 0.5 0.125 +v 0.375 0.5 0.375 +v 0.375 0.5 0.5625 +v -0.375 0.5 0.5625 +v -0.375 0.5 0.375 +v -0.375 0.5 0.125 +v -0.0625 0.5625 -0.1875 +v -0.0625 0.5625 -0.3125 +v -0.0625 0.4375 -0.1875 +v -0.0625 0.4375 -0.3125 +v -0.125 0.5625 -0.1875 +v -0.125 0.5625 -0.3125 +v -0.125 0.4375 -0.1875 +v -0.125 0.4375 -0.3125 +v -0.1875 0.5625 -0.1875 +v -0.1875 0.5625 -0.3125 +v -0.1875 0.4375 -0.1875 +v -0.1875 0.4375 -0.3125 +v -0.25 0.5625 -0.1875 +v -0.25 0.5625 -0.3125 +v -0.25 0.4375 -0.1875 +v -0.25 0.4375 -0.3125 +v -0.3125 0.5625 0.125 +v -0.3125 0.5625 0 +v -0.3125 0.4375 0.125 +v -0.3125 0.4375 0 +v -0.375 0.5625 0.125 +v -0.375 0.5625 0 +v -0.375 0.4375 0 +v -0.4375 0.5625 0.125 +v -0.4375 0.5625 0 +v -0.4375 0.4375 0.125 +v -0.4375 0.4375 0 +v -0.5 0.5625 0.125 +v -0.5 0.5625 0 +v -0.5 0.4375 0.125 +v -0.5 0.4375 0 +v -0.375 0.5313 0.0938 +v -0.375 0.5313 -0.0937 +v -0.375 0.4688 0.0938 +v -0.375 0.4688 -0.0937 +v -0.4375 0.5313 0.0938 +v -0.4375 0.5313 -0.0937 +v -0.4375 0.4688 0.0938 +v -0.4375 0.4688 -0.0937 +v -0.3562 0.55 -0.0937 +v -0.3562 0.55 -0.2812 +v -0.3562 0.45 -0.0937 +v -0.3562 0.45 -0.2812 +v -0.4562 0.55 -0.0937 +v -0.4562 0.55 -0.2812 +v -0.4562 0.45 -0.0937 +v -0.4562 0.45 -0.2812 +v 0.5625 1.4375 1.75 +v 0.5625 0.4375 1.8125 +v 0.5625 0.4375 1.75 +v -0.5625 0.4375 1.8125 +v -0.5625 0.4375 1.75 +v 0.5625 1.1875 1.8125 +v -0.5625 1.1875 1.8125 +v -0.5625 1.1875 1.75 +v 0.5625 1.1875 1.75 +v 0 1.1875 1.8125 +v 0 0.4375 1.8125 +v 0 0.4375 1.75 +v 0 1.1875 1.75 +v 0 1.4375 1.75 +v 0 1.4375 1.8125 +v 0.5625 1.25 0.5625 +v 0.5625 1.25 0.6875 +v 0.5625 0.4375 0.6875 +v 0.5625 1.1875 0.5625 +v 0.5625 1.1875 0.6875 +v -0.5 0.4375 0.5625 +v 0.5625 1.4375 0.6875 +v -0.5625 1.3125 0.5625 +v -0.5625 1.25 0.6875 +v -0.5625 1.25 0.5625 +v 0 1.3125 0.5625 +v 0 1.4375 0.6875 +v 0 1.25 0.6875 +v 0 1.25 0.5625 +v 0.5 1.4375 0.6875 +v 0.5 1.4375 1.75 +v 0.5 0.4375 1.75 +v 0.5 0.9375 1.75 +v 0.5 0.9375 0.6875 +v 0.5625 0.9375 0.6875 +v 0.5625 0.9375 1.75 +v 0.5 0.9375 1.25 +v 0.5 0.4375 1.25 +v 0.5625 0.4375 1.25 +v 0.5625 0.9375 1.25 +v 0.5 1.4375 1.25 +v 0.5 1.25 0.5625 +v -0.5 1.25 0.5625 +v 0.5625 1.25 2.3125 +v 0.5625 1.25 1.8125 +v 0.5 1.25 2.3125 +v 0.5 1.25 1.8125 +v 0.5 0.4375 2.4375 +v 0.5 0.4375 1.8125 +v -0.5 1.3125 0.5625 +v -0.5 1.3125 -0.4375 +v -0.5 0.4375 -0.4375 +v -0.5625 1.3125 -0.4375 +v -0.5625 0.4375 0.5625 +v -0.5625 0.4375 0.6875 +v -0.5625 1.1875 0.6875 +v -0.5625 1.1875 0.5625 +v -0.5 1.4375 1.75 +v -0.5 1.4375 0.6875 +v -0.5 0.4375 1.75 +v -0.5 0.9375 0.6875 +v -0.5 0.9375 1.75 +v -0.5625 0.9375 1.75 +v -0.5625 0.9375 0.6875 +v -0.5 0.9375 1.1875 +v -0.5 0.4375 1.1875 +v -0.5625 0.4375 1.1875 +v -0.5625 0.9375 1.1875 +v -0.5625 1.4375 1.1875 +v -0.5 1.4375 1.1875 +v -0.5 1.25 2.3125 +v -0.5 1.25 1.8125 +v -0.5 0.4375 2.4375 +v -0.5 0.4375 1.8125 +v -0.5625 1.25 2.3125 +v -0.5625 1.25 1.8125 +v 0.5 0.6875 0.75 +v 0.5 0.6875 0.6875 +v 0.5 0.4375 0.75 +v 0.25 0.6875 0.75 +v 0.25 0.6875 0.6875 +v 0.25 0.4375 0.75 +v 0.25 0.4375 0.6875 +v 0.5 0.6875 1.6875 +v 0.5 0.6875 1.75 +v 0.5 0.4375 1.6875 +v 0.25 0.6875 1.6875 +v 0.25 0.6875 1.75 +v 0.25 0.4375 1.6875 +v 0.5 0.875 0.5625 +v 0.5 0.875 -0.4375 +v -0.5 0.875 -0.4375 +v -0.5 0.875 0.5625 +v 0.5 0.75 0.5625 +v 0.5 0.75 0.125 +v 0.5 0.625 0.5625 +v 0.5 0.625 0.125 +v -0.5 0.75 0.5625 +v -0.5 0.75 0.125 +v -0.5 0.625 0.5625 +v -0.5 0.625 0.125 +v 0.5625 1.3125 -0.5625 +v 0.5625 0.3125 -0.5625 +v -0.5625 1.3125 -0.5625 +v -0.5625 0.3125 -0.5625 +v -0.5625 0.8125 -0.5625 +v 0.5625 0.8125 -0.5625 +v 0.5625 0.8125 -0.4375 +v -0.5625 0.8125 -0.4375 +v 0 0.8125 -0.5625 +v 0 0.3125 -0.5625 +v 0 0.8125 -0.4375 +v 0 1.3125 -0.4375 +v 0 1.3125 -0.5625 +v -0.8125 1.125 -0.75 +v -1.0625 1.375 -0.5 +v -1.0625 1.1875 -0.75 +v -1.0625 1.3125 -0.5 +v -1.0625 1.125 -0.75 +v -0.5625 1.375 -0.5 +v -0.5625 1.1875 -0.75 +v -0.5625 1.3125 -0.5 +v -0.5625 1.125 -0.75 +v -0.8125 1.1875 -0.75 +v -0.8125 1.375 -0.5 +v -0.8125 1.3125 -0.5 +v -0.5625 1.3125 0.625 +v -0.8125 1.375 0.625 +v -0.8125 1.3125 0.625 +v -0.5625 1.3531 2.3029 +v -0.5625 1.1549 2.5445 +v -0.5625 1.2907 2.3002 +v -0.5625 1.0924 2.5418 +v -1.0625 1.3531 2.3029 +v -1.0625 1.1549 2.5445 +v -1.0625 1.2907 2.3002 +v -1.0625 1.0924 2.5418 +v -0.8125 1.1549 2.5445 +v -0.8125 1.3531 2.3029 +v -0.8125 1.2907 2.3002 +v -0.8125 1.0924 2.5418 +v -1.0625 1.3125 1.8007 +v -1.0625 1.3749 1.8034 +v -0.5625 1.3125 1.8007 +v -0.5625 1.3749 1.8034 +v -0.8125 1.3125 1.8007 +v -0.8125 1.3749 1.8034 +v 0.8125 1.125 -0.75 +v 1.0625 1.375 -0.5 +v 1.0625 1.1875 -0.75 +v 1.0625 1.3125 -0.5 +v 1.0625 1.125 -0.75 +v 0.5625 1.375 -0.5 +v 0.5625 1.1875 -0.75 +v 0.5625 1.3125 -0.5 +v 0.5625 1.125 -0.75 +v 0.8125 1.1875 -0.75 +v 0.8125 1.375 -0.5 +v 0.8125 1.3125 -0.5 +v 0.5625 1.3125 0.625 +v 0.8125 1.375 0.625 +v 0.8125 1.3125 0.625 +v 0.5625 1.3531 2.3029 +v 0.5625 1.1549 2.5445 +v 0.5625 1.2907 2.3002 +v 0.5625 1.0924 2.5418 +v 1.0625 1.3531 2.3029 +v 1.0625 1.1549 2.5445 +v 1.0625 1.2907 2.3002 +v 1.0625 1.0924 2.5418 +v 0.8125 1.1549 2.5445 +v 0.8125 1.3531 2.3029 +v 0.8125 1.2907 2.3002 +v 0.8125 1.0924 2.5418 +v 1.0625 1.3125 1.8007 +v 1.0625 1.3749 1.8034 +v 0.5625 1.3125 1.8007 +v 0.5625 1.3749 1.8034 +v 0.8125 1.3125 1.8007 +v 0.8125 1.3749 1.8034 +v 1.0635 1.4241 0.875 +v 1.0635 1.4241 0.75 +v 1.0527 1.3626 0.875 +v 1.0527 1.3626 0.75 +v 0.6327 1.5001 0.875 +v 0.6327 1.5001 0.75 +v 0.6218 1.4386 0.875 +v 0.6218 1.4386 0.75 +v 1.0635 1.4241 1.6875 +v 1.0635 1.4241 1.5625 +v 1.0527 1.3626 1.6875 +v 1.0527 1.3626 1.5625 +v 0.6327 1.5001 1.6875 +v 0.6327 1.5001 1.5625 +v 0.6218 1.4386 1.6875 +v 0.6218 1.4386 1.5625 +v 1.1359 1.4748 1.8125 +v 1.1359 1.4748 0.625 +v 1.1251 1.4133 1.8125 +v 1.1251 1.4133 0.625 +v 0.582 1.5725 1.8125 +v 0.582 1.5725 0.625 +v 0.5711 1.511 1.8125 +v 0.5711 1.511 0.625 +v 0.5 0.75 1.8125 +v 0.5 0.75 2.1875 +v 0.5 0.625 1.8125 +v 0.5 0.625 2.1875 +v -0.5 0.75 1.8125 +v -0.5 0.75 2.1875 +v -0.5 0.625 1.8125 +v -0.5 0.625 2.1875 +v 0.275 1.246 -0.4317 +v 0.275 0.9383 -0.3774 +v 0.275 1.2547 -0.3825 +v 0.275 0.947 -0.3282 +v -0.0375 1.246 -0.4317 +v -0.0375 0.9383 -0.3774 +v -0.0375 1.2547 -0.3825 +v -0.0375 0.947 -0.3282 +v -0.1 1.246 -0.4317 +v -0.1 0.9383 -0.3774 +v -0.1 1.2547 -0.3825 +v -0.1 0.947 -0.3282 +v -0.4125 1.246 -0.4317 +v -0.4125 0.9383 -0.3774 +v -0.4125 1.2547 -0.3825 +v -0.4125 0.947 -0.3282 +vt 0.1875 0.3906 +vt 0.1875 0.4844 +vt 0.0938 0.4844 +vt 0.0938 0.3906 +vt 0.1094 0.4844 +vt 0.1094 0.3906 +vt 0.0938 0.3906 +vt 0.0938 0.4844 +vt 0.1875 0.3906 +vt 0.1875 0.4844 +vt 0.1719 0.4844 +vt 0.1719 0.3906 +vt 0.1094 0.3906 +vt 0.1094 0.4844 +vt 0.0938 0.4844 +vt 0.0938 0.3906 +vt 0.1875 0.3906 +vt 0.1875 0.4844 +vt 0.1719 0.4844 +vt 0.1719 0.3906 +vt 0.0938 0.3906 +vt 0.0938 0.4844 +vt 0.1875 0.4844 +vt 0.1875 0.3906 +vt 0.1094 0.4844 +vt 0.1094 0.3906 +vt 0.0938 0.3906 +vt 0.0938 0.4844 +vt 0.1875 0.3906 +vt 0.1875 0.4844 +vt 0.1719 0.4844 +vt 0.1719 0.3906 +vt 0.1094 0.3906 +vt 0.1094 0.4844 +vt 0.0938 0.4844 +vt 0.0938 0.3906 +vt 0.1875 0.3906 +vt 0.1875 0.4844 +vt 0.1719 0.4844 +vt 0.1719 0.3906 +vt 0.1875 0.3906 +vt 0.1875 0.4844 +vt 0.0938 0.4844 +vt 0.0938 0.3906 +vt 0.1094 0.4844 +vt 0.1094 0.3906 +vt 0.0938 0.3906 +vt 0.0938 0.4844 +vt 0.1875 0.3906 +vt 0.1875 0.4844 +vt 0.1719 0.4844 +vt 0.1719 0.3906 +vt 0.1094 0.3906 +vt 0.1094 0.4844 +vt 0.0938 0.4844 +vt 0.0938 0.3906 +vt 0.1875 0.3906 +vt 0.1875 0.4844 +vt 0.1719 0.4844 +vt 0.1719 0.3906 +vt 0.75 0.9688 +vt 0.9219 0.9688 +vt 0.9219 1 +vt 0.75 1 +vt 0.75 0.8281 +vt 0.8125 0.8281 +vt 0.8125 1 +vt 0.75 1 +vt 0.75 0.25 +vt 0.8125 0.25 +vt 0.8125 0.4219 +vt 0.75 0.4219 +vt 0.75 0.9688 +vt 0.8125 0.9688 +vt 0.8125 1 +vt 0.75 1 +vt 1 1 +vt 0.9375 1 +vt 0.9375 0.9688 +vt 1 0.9688 +vt 0.75 0.25 +vt 0.9219 0.25 +vt 0.9219 0.2656 +vt 0.75 0.2656 +vt 0.9531 0.2656 +vt 0.8906 0.2656 +vt 0.8906 0.25 +vt 0.9531 0.25 +vt 0.7656 0.25 +vt 0.8281 0.25 +vt 0.8281 0.2656 +vt 0.7656 0.2656 +vt 1 0.2656 +vt 0.8281 0.2656 +vt 0.8281 0.25 +vt 1 0.25 +vt 0.75 0.8281 +vt 0.8125 0.8281 +vt 0.8125 1 +vt 0.75 1 +vt 0.75 0.25 +vt 0.8125 0.25 +vt 0.8125 0.4219 +vt 0.75 0.4219 +vt 1 1 +vt 0.8281 1 +vt 0.8281 0.9688 +vt 1 0.9688 +vt 1 0.4219 +vt 0.9531 0.4219 +vt 0.9531 0.25 +vt 1 0.25 +vt 1 1 +vt 0.9531 1 +vt 0.9531 0.9688 +vt 1 0.9688 +vt 1 0.2656 +vt 0.9531 0.2656 +vt 0.9531 0.25 +vt 1 0.25 +vt 1 1 +vt 0.9531 1 +vt 0.9531 0.8281 +vt 1 0.8281 +vt 1 0.4219 +vt 0.9531 0.4219 +vt 0.9531 0.25 +vt 1 0.25 +vt 0.8281 0.25 +vt 0.875 0.25 +vt 0.875 0.2656 +vt 0.8281 0.2656 +vt 0.75 0.9688 +vt 0.7969 0.9688 +vt 0.7969 1 +vt 0.75 1 +vt 1 1 +vt 0.9531 1 +vt 0.9531 0.8281 +vt 1 0.8281 +vt 0.8281 0.1406 +vt 0.8281 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.8281 0.1406 +vt 0.8281 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.1094 1 +vt 0.1094 0.8438 +vt 0.0156 0.8438 +vt 0.0156 1 +vt 0.1094 0.4063 +vt 0.1094 0.25 +vt 0.0156 0.25 +vt 0.0156 0.4063 +vt 0.0938 1 +vt 0.0938 0.9844 +vt 0 0.9844 +vt 0 1 +vt 0.0313 0.9844 +vt 0.0313 1 +vt 0.125 1 +vt 0.125 0.9844 +vt 0.1094 0.3906 +vt 0.1094 0.25 +vt 0.0156 0.25 +vt 0.0156 0.3906 +vt 0.1094 1 +vt 0.1094 0.8594 +vt 0.0156 0.8594 +vt 0.0156 1 +vt 0.7031 0.25 +vt 0.7031 0.3906 +vt 0.7344 0.3906 +vt 0.7344 0.25 +vt 0.0781 0.9844 +vt 0.0781 1 +vt 0.1094 1 +vt 0.1094 0.9844 +vt 0.7188 0.8594 +vt 0.7188 1 +vt 0.75 1 +vt 0.75 0.8594 +vt 0.7188 0.25 +vt 0.7188 0.4063 +vt 0.75 0.4063 +vt 0.75 0.25 +vt 0.0313 1 +vt 0.0313 0.9844 +vt 0 0.9844 +vt 0 1 +vt 0.7031 0.8438 +vt 0.7031 1 +vt 0.7344 1 +vt 0.7344 0.8438 +vt 0.0313 0.75 +vt 0 0.75 +vt 0 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.5938 +vt 0 0.5938 +vt 0 0.5625 +vt 0.0313 0.5625 +vt 0.0313 0.7188 +vt 0 0.7188 +vt 0 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.75 +vt 0 0.75 +vt 0 0.5625 +vt 0.0313 0.5625 +vt 0.0313 0.75 +vt 0 0.7188 +vt 0 0.5938 +vt 0.0313 0.5625 +vt 0 0.5625 +vt 0.0313 0.5938 +vt 0.0313 0.7188 +vt 0 0.75 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0313 0.75 +vt 0 0.75 +vt 0 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.5938 +vt 0 0.5938 +vt 0 0.5625 +vt 0.0313 0.5625 +vt 0.0313 0.7188 +vt 0 0.7188 +vt 0 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.75 +vt 0 0.75 +vt 0 0.5625 +vt 0.0313 0.5625 +vt 0.0313 0.75 +vt 0 0.7188 +vt 0 0.5938 +vt 0.0313 0.5625 +vt 0 0.5625 +vt 0.0313 0.5938 +vt 0.0313 0.7188 +vt 0 0.75 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.75 0.9688 +vt 0.9219 0.9688 +vt 0.9219 1 +vt 0.75 1 +vt 0.75 0.8281 +vt 0.8125 0.8281 +vt 0.8125 1 +vt 0.75 1 +vt 0.75 0.25 +vt 0.8125 0.25 +vt 0.8125 0.4219 +vt 0.75 0.4219 +vt 0.75 0.9688 +vt 0.8125 0.9688 +vt 0.8125 1 +vt 0.75 1 +vt 1 1 +vt 0.9375 1 +vt 0.9375 0.9688 +vt 1 0.9688 +vt 0.75 0.25 +vt 0.9219 0.25 +vt 0.9219 0.2656 +vt 0.75 0.2656 +vt 0.9531 0.2656 +vt 0.8906 0.2656 +vt 0.8906 0.25 +vt 0.9531 0.25 +vt 0.7656 0.25 +vt 0.8281 0.25 +vt 0.8281 0.2656 +vt 0.7656 0.2656 +vt 1 0.2656 +vt 0.8281 0.2656 +vt 0.8281 0.25 +vt 1 0.25 +vt 0.75 0.8281 +vt 0.8125 0.8281 +vt 0.8125 1 +vt 0.75 1 +vt 0.75 0.25 +vt 0.8125 0.25 +vt 0.8125 0.4219 +vt 0.75 0.4219 +vt 1 1 +vt 0.8281 1 +vt 0.8281 0.9688 +vt 1 0.9688 +vt 1 0.4219 +vt 0.9531 0.4219 +vt 0.9531 0.25 +vt 1 0.25 +vt 1 1 +vt 0.9531 1 +vt 0.9531 0.9688 +vt 1 0.9688 +vt 1 0.2656 +vt 0.9531 0.2656 +vt 0.9531 0.25 +vt 1 0.25 +vt 1 1 +vt 0.9531 1 +vt 0.9531 0.8281 +vt 1 0.8281 +vt 1 0.4219 +vt 0.9531 0.4219 +vt 0.9531 0.25 +vt 1 0.25 +vt 0.8281 0.25 +vt 0.875 0.25 +vt 0.875 0.2656 +vt 0.8281 0.2656 +vt 0.75 0.9688 +vt 0.7969 0.9688 +vt 0.7969 1 +vt 0.75 1 +vt 1 1 +vt 0.9531 1 +vt 0.9531 0.8281 +vt 1 0.8281 +vt 0.8281 0.1406 +vt 0.8281 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.0938 0.3906 +vt 0.0938 0.4844 +vt 0.1875 0.4844 +vt 0.1875 0.3906 +vt 0.1094 0.4844 +vt 0.1094 0.3906 +vt 0.0938 0.3906 +vt 0.0938 0.4844 +vt 0.1875 0.3906 +vt 0.1875 0.4844 +vt 0.1719 0.4844 +vt 0.1719 0.3906 +vt 0.1094 0.3906 +vt 0.1094 0.4844 +vt 0.0938 0.4844 +vt 0.0938 0.3906 +vt 0.1875 0.3906 +vt 0.1875 0.4844 +vt 0.1719 0.4844 +vt 0.1719 0.3906 +vt 0.0156 0.8438 +vt 0.1094 0.8438 +vt 0.1094 1 +vt 0.0156 1 +vt 0.0156 0.25 +vt 0.1094 0.25 +vt 0.1094 0.4063 +vt 0.0156 0.4063 +vt 0 0.9844 +vt 0.0938 0.9844 +vt 0.0938 1 +vt 0 1 +vt 0.125 1 +vt 0.0313 1 +vt 0.0313 0.9844 +vt 0.125 0.9844 +vt 0.0156 0.25 +vt 0.1094 0.25 +vt 0.1094 0.3906 +vt 0.0156 0.3906 +vt 0.0156 0.8594 +vt 0.1094 0.8594 +vt 0.1094 1 +vt 0.0156 1 +vt 0.7344 0.3906 +vt 0.7031 0.3906 +vt 0.7031 0.25 +vt 0.7344 0.25 +vt 0.1094 1 +vt 0.0781 1 +vt 0.0781 0.9844 +vt 0.1094 0.9844 +vt 0.75 1 +vt 0.7188 1 +vt 0.7188 0.8594 +vt 0.75 0.8594 +vt 0.75 0.4063 +vt 0.7188 0.4063 +vt 0.7188 0.25 +vt 0.75 0.25 +vt 0 0.9844 +vt 0.0313 0.9844 +vt 0.0313 1 +vt 0 1 +vt 0.7344 1 +vt 0.7031 1 +vt 0.7031 0.8438 +vt 0.7344 0.8438 +vt 0.0313 0.75 +vt 0 0.75 +vt 0 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.5938 +vt 0 0.5938 +vt 0 0.5625 +vt 0.0313 0.5625 +vt 0.0313 0.7188 +vt 0 0.7188 +vt 0 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.75 +vt 0 0.75 +vt 0 0.5625 +vt 0.0313 0.5625 +vt 0.0313 0.75 +vt 0 0.7188 +vt 0 0.5938 +vt 0.0313 0.5625 +vt 0 0.5625 +vt 0.0313 0.5938 +vt 0.0313 0.7188 +vt 0 0.75 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0313 0.75 +vt 0 0.75 +vt 0 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.5938 +vt 0 0.5938 +vt 0 0.5625 +vt 0.0313 0.5625 +vt 0.0313 0.7188 +vt 0 0.7188 +vt 0 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.75 +vt 0 0.75 +vt 0 0.5625 +vt 0.0313 0.5625 +vt 0.0313 0.75 +vt 0 0.7188 +vt 0 0.5938 +vt 0.0313 0.5625 +vt 0 0.5625 +vt 0.0313 0.5938 +vt 0.0313 0.7188 +vt 0 0.75 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.6875 +vt 0.0625 0.7188 +vt 0.0313 0.7188 +vt 0.0313 0.6875 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5938 +vt 0.0313 0.5938 +vt 0.0313 0.5625 +vt 0.8281 0.1406 +vt 0.8281 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 0.9219 0.1406 +vt 0.9219 0.1563 +vt 0.8125 0.1563 +vt 0.8125 0.1406 +vt 1 0.5313 +vt 1 0.6563 +vt 0.625 0.6563 +vt 0.625 0.5313 +vt 1 0.5625 +vt 1 1 +vt 0.625 1 +vt 0.625 0.5625 +vt 0.6563 0.5625 +vt 0.6563 1 +vt 0.5313 1 +vt 0.5313 0.5625 +vt 0.9688 0.0625 +vt 0.9688 0.0938 +vt 0.7188 0.0938 +vt 0.7188 0.0625 +vt 0.7188 0.0938 +vt 0.7188 0.0625 +vt 0.9688 0.0625 +vt 0.9688 0.0938 +vt 0.9688 0.0625 +vt 0.9688 0.2813 +vt 0.7188 0.2813 +vt 0.7188 0.0625 +vt 0.9688 0.0625 +vt 0.9688 0.125 +vt 0.7188 0.125 +vt 0.7188 0.0625 +vt 0.7188 0.2813 +vt 0.7188 0.2188 +vt 0.9688 0.2188 +vt 0.9688 0.2813 +vt 0.0469 0.5156 +vt 0.0469 0.5781 +vt 0.0313 0.5781 +vt 0.0313 0.5156 +vt 0.0938 0.5156 +vt 0.0938 0.5781 +vt 0.0781 0.5781 +vt 0.0781 0.5156 +vt 0.0313 0.5625 +vt 0.0313 0.5781 +vt 0.0938 0.5781 +vt 0.0938 0.5625 +vt 0.0313 0.5156 +vt 0.0313 0.5313 +vt 0.0938 0.5313 +vt 0.0938 0.5156 +vt 0.0938 0.5156 +vt 0.0938 0.5781 +vt 0.0313 0.5781 +vt 0.0313 0.5156 +vt 0.7813 0.0625 +vt 0.875 0.0625 +vt 0.875 0.2813 +vt 0.7813 0.2813 +vt 0.8125 0.0625 +vt 0.9063 0.0625 +vt 0.9063 0.2813 +vt 0.8125 0.2813 +vt 0.6563 0.25 +vt 0.6563 0.3125 +vt 0.5938 0.3125 +vt 0.5938 0.25 +vt 0.6563 0.2813 +vt 0.5938 0.2813 +vt 0.5938 0.3125 +vt 0.6563 0.3125 +vt 0.9063 0.4375 +vt 0.9063 0.5 +vt 0.9688 0.5 +vt 0.9688 0.4375 +vt 0.5938 0.2813 +vt 0.5938 0.3438 +vt 0.6563 0.3438 +vt 0.6563 0.2813 +vt 0.4375 0.5 +vt 0.4375 0.6875 +vt 0.3438 0.6875 +vt 0.3438 0.5 +vt 0.4375 0.5 +vt 0.4375 0.6875 +vt 0.3438 0.6875 +vt 0.3438 0.5 +vt 0.3438 0.6563 +vt 0.3438 0.75 +vt 0.4375 0.75 +vt 0.4375 0.6563 +vt 0.3438 0.6563 +vt 0.3438 0.75 +vt 0.25 0.75 +vt 0.25 0.6563 +vt 0.3438 0.5 +vt 0.3438 0.6875 +vt 0.4375 0.6875 +vt 0.4375 0.5 +vt 0.3438 0.5 +vt 0.3438 0.6875 +vt 0.4375 0.6875 +vt 0.4375 0.5 +vt 0.5938 0.4688 +vt 0.5625 0.4688 +vt 0.5625 0.3594 +vt 0.5938 0.3594 +vt 0.5625 0.3594 +vt 0.5938 0.3594 +vt 0.5938 0.4688 +vt 0.5625 0.4688 +vt 0.5625 0.3594 +vt 0.5625 0.4688 +vt 0.5938 0.4688 +vt 0.5938 0.3594 +vt 0.5938 0.4688 +vt 0.5938 0.3594 +vt 0.5625 0.3594 +vt 0.5625 0.4688 +vt 0.5625 0.4688 +vt 0.5938 0.4688 +vt 0.5938 0.5 +vt 0.5625 0.5 +vt 0.6094 0.4375 +vt 0.6094 0.4688 +vt 0.6406 0.4688 +vt 0.6406 0.4375 +vt 0.625 0.4844 +vt 0.625 0.4531 +vt 0.6563 0.4531 +vt 0.6563 0.4844 +vt 0.5156 0.4844 +vt 0.5469 0.4844 +vt 0.5469 0.5 +vt 0.5156 0.5 +vt 0.0156 1 +vt 0.0156 0.8906 +vt 0.2656 0.8906 +vt 0.2656 1 +vt 0.2813 0.0313 +vt 0.2813 0.25 +vt 0.5313 0.25 +vt 0.5313 0.0313 +vt 0 1 +vt 0 0.75 +vt 0.0156 0.75 +vt 0.0156 1 +vt 0.5313 0.3125 +vt 0.5313 0.5313 +vt 0.5938 0.5313 +vt 0.5938 0.3125 +vt 0.5313 0.3125 +vt 0.5313 0.5313 +vt 0.5938 0.5313 +vt 0.5938 0.3125 +vt 0.6563 0.3438 +vt 0.6563 0.4063 +vt 0.5938 0.4063 +vt 0.5938 0.3438 +vt 0.5938 0.3125 +vt 0.5938 0.5313 +vt 0.5313 0.5313 +vt 0.5313 0.3125 +vt 0.5938 0.3125 +vt 0.5938 0.5313 +vt 0.5313 0.5313 +vt 0.5313 0.3125 +vt 0.5938 0.4688 +vt 0.5938 0.4063 +vt 0.75 0.4063 +vt 0.7188 0.4688 +vt 0.7188 0.4688 +vt 0.75 0.5313 +vt 0.5938 0.5313 +vt 0.5938 0.4688 +vt 0.5313 0.3438 +vt 0.5313 0.1875 +vt 0.5938 0.1875 +vt 0.5938 0.3438 +vt 0.5938 0.1875 +vt 0.5938 0.3125 +vt 0.5313 0.3125 +vt 0.5313 0.1875 +vt 0.5938 0.3438 +vt 0.5938 0.4063 +vt 0.5313 0.4063 +vt 0.5313 0.3438 +vt 1 0 +vt 0.6406 0 +vt 0.6406 0.0313 +vt 1 0.0313 +vt 1 0.0313 +vt 0.6406 0.0313 +vt 0.6406 0 +vt 1 0 +vt 0.75 0.25 +vt 0.8906 0.25 +vt 0.8906 0.6094 +vt 0.75 0.6094 +vt 0.75 0.6406 +vt 0.8906 0.6406 +vt 0.8906 1 +vt 0.75 1 +vt 0 0.75 +vt 0.1406 0.75 +vt 0.1406 0.7813 +vt 0 0.7813 +vt 0.75 0.3281 +vt 0.8906 0.3281 +vt 0.8906 0.6875 +vt 0.75 0.6875 +vt 0.2813 0 +vt 0.6406 0 +vt 0.6406 0.0313 +vt 0.2813 0.0313 +vt 0.75 0.6094 +vt 0.8906 0.6094 +vt 0.8906 0.9688 +vt 0.75 0.9688 +vt 0.2813 0.0313 +vt 0.6406 0.0313 +vt 0.6406 0 +vt 0.2813 0 +vt 1 0.6875 +vt 0.8594 0.6875 +vt 0.8594 0.3281 +vt 1 0.3281 +vt 1 0.9844 +vt 0.8594 0.9844 +vt 0.8594 0.625 +vt 1 0.625 +vt 1 0.6094 +vt 0.8594 0.6094 +vt 0.8594 0.25 +vt 1 0.25 +vt 0.2813 0.7813 +vt 0.1406 0.7813 +vt 0.1406 0.75 +vt 0.2813 0.75 +vt 1 1 +vt 0.8594 1 +vt 0.8594 0.6406 +vt 1 0.6406 +vt 0.75 0 +vt 0.75 0.2031 +vt 0.5 0.2031 +vt 0.5 0 +vt 0.625 0.0938 +vt 0.625 0.125 +vt 0.6875 0.125 +vt 0.6875 0.0938 +vt 0.6875 0.125 +vt 0.6875 0.1563 +vt 0.625 0.1563 +vt 0.625 0.125 +vt 0.6875 0.0938 +vt 0.6875 0.1563 +vt 0.625 0.1563 +vt 0.625 0.0938 +vt 0.6875 0.1563 +vt 0.6875 0.0938 +vt 0.625 0.0938 +vt 0.625 0.1563 +vt 0.6875 0.0938 +vt 0.6875 0.125 +vt 0.625 0.125 +vt 0.625 0.0938 +vt 0.625 0.125 +vt 0.625 0.1563 +vt 0.6875 0.1563 +vt 0.6875 0.125 +vt 0.625 0.0938 +vt 0.625 0.125 +vt 0.6875 0.125 +vt 0.6875 0.0938 +vt 0.6875 0.125 +vt 0.6875 0.1563 +vt 0.625 0.1563 +vt 0.625 0.125 +vt 0.6875 0.0938 +vt 0.6875 0.1563 +vt 0.625 0.1563 +vt 0.625 0.0938 +vt 0.6875 0.1563 +vt 0.6875 0.0938 +vt 0.625 0.0938 +vt 0.625 0.1563 +vt 0.6875 0.0938 +vt 0.6875 0.125 +vt 0.625 0.125 +vt 0.625 0.0938 +vt 0.625 0.125 +vt 0.625 0.1563 +vt 0.6875 0.1563 +vt 0.6875 0.125 +vt 0.4063 1 +vt 0.4063 0.9531 +vt 0.2656 0.9531 +vt 0.2656 1 +vt 0.4063 1 +vt 0.4063 0.9531 +vt 0.2656 0.9531 +vt 0.2656 1 +vt 0.5313 0.1875 +vt 0.5313 0.4688 +vt 0.4063 0.4688 +vt 0.4063 0.1875 +vt 1 1 +vt 0.9531 1 +vt 0.9531 0.9063 +vt 1 0.9063 +vt 0.9844 1 +vt 0.9844 0.9531 +vt 1 0.9531 +vt 1 1 +vt 0.9844 1 +vt 0.9844 0.9063 +vt 1 0.9063 +vt 1 1 +vt 0.9844 1 +vt 0.9844 0.9063 +vt 1 0.9063 +vt 1 1 +vt 1 0.3281 +vt 0.9531 0.3281 +vt 0.9531 0.25 +vt 1 0.25 +vt 1 0.8281 +vt 1 0.9063 +vt 0.9844 0.9063 +vt 0.9844 0.8281 +vt 1 0.8281 +vt 1 0.9063 +vt 0.9844 0.9063 +vt 0.9844 0.8281 +vt 0.75 0.9063 +vt 0.7969 0.9063 +vt 0.7969 1 +vt 0.75 1 +vt 1 0.9063 +vt 1 0.9531 +vt 0.9844 0.9531 +vt 0.9844 0.9063 +vt 0.75 0.25 +vt 0.7969 0.25 +vt 0.7969 0.3281 +vt 0.75 0.3281 +vt 0.9531 0.9063 +vt 0.9531 1 +vt 1 1 +vt 1 0.9063 +vt 1 0.9531 +vt 0.9844 0.9531 +vt 0.9844 1 +vt 1 1 +vt 1 0.9063 +vt 0.9844 0.9063 +vt 0.9844 1 +vt 1 1 +vt 1 0.9063 +vt 0.9844 0.9063 +vt 0.9844 1 +vt 1 1 +vt 0.9531 0.25 +vt 0.9531 0.3281 +vt 1 0.3281 +vt 1 0.25 +vt 0.9844 0.9063 +vt 1 0.9063 +vt 1 0.8281 +vt 0.9844 0.8281 +vt 0.9844 0.9063 +vt 1 0.9063 +vt 1 0.8281 +vt 0.9844 0.8281 +vt 0.7969 1 +vt 0.7969 0.9063 +vt 0.75 0.9063 +vt 0.75 1 +vt 0.9844 0.9531 +vt 1 0.9531 +vt 1 0.9063 +vt 0.9844 0.9063 +vt 0.7969 0.3281 +vt 0.7969 0.25 +vt 0.75 0.25 +vt 0.75 0.3281 +vt 0.2813 0.1875 +vt 0.3438 0.1875 +vt 0.3438 0.3125 +vt 0.2813 0.3125 +vt 0.2813 0.1875 +vt 0.3438 0.1875 +vt 0.3438 0.3125 +vt 0.2813 0.3125 +vt 0.0625 0.1875 +vt 0.0625 0.3125 +vt 0 0.3125 +vt 0 0.1875 +vt 0.1875 0.1875 +vt 0.1875 0.3125 +vt 0.125 0.3125 +vt 0.125 0.1875 +vt 0.4063 0.3125 +vt 0.3438 0.3125 +vt 0.3438 0.1875 +vt 0.4063 0.1875 +vt 0.4063 0.3125 +vt 0.3438 0.3125 +vt 0.3438 0.1875 +vt 0.4063 0.1875 +vt 0.125 0.5625 +vt 0.125 0.4375 +vt 0.1875 0.4375 +vt 0.1875 0.5625 +vt 0 0.5625 +vt 0 0.4375 +vt 0.0625 0.4375 +vt 0.0625 0.5625 +vt 0.7344 0.2188 +vt 0.7344 0.2656 +vt 0.6875 0.2656 +vt 0.6875 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.2656 +vt 0.6875 0.2656 +vt 0.6875 0.2188 +vt 0.7344 0.2188 +vt 0.7344 0.2656 +vt 0.7188 0.2656 +vt 0.7188 0.2188 +vt 0.7344 0.2188 +vt 0.7344 0.2656 +vt 0.7188 0.2656 +vt 0.7188 0.2188 +vt 0.7031 0.2188 +vt 0.7031 0.2656 +vt 0.6875 0.2656 +vt 0.6875 0.2188 +vt 0 1 +vt 0 0.9688 +vt 0.0469 0.9688 +vt 0.0469 1 +vt 0.9531 1 +vt 0.9531 0.9688 +vt 1 0.9688 +vt 1 1 +vt 0 1 +vt 0 0.9688 +vt 0.0859 0.9688 +vt 0.0859 1 +vt 0.9141 1 +vt 0.9141 0.9688 +vt 1 0.9688 +vt 1 1 +vt 0.9375 1 +vt 0.9375 0.9688 +vt 1 0.9688 +vt 1 1 +vt 0 1 +vt 0 0.9688 +vt 0.0625 0.9688 +vt 0.0625 1 +vt 0.0859 0 +vt 0.0859 0.0156 +vt 0 0.0156 +vt 0 0 +vt 1 0 +vt 1 0.0156 +vt 0.9375 0.0156 +vt 0.9375 0 +vt 0.0469 0 +vt 0.0469 0.0156 +vt 0 0.0156 +vt 0 0 +vt 1 0 +vt 1 0.0156 +vt 0.9531 0.0156 +vt 0.9531 0 +vt 0.0625 0 +vt 0.0625 0.0156 +vt 0 0.0156 +vt 0 0 +vt 1 0 +vt 1 0.0156 +vt 0.9141 0.0156 +vt 0.9141 0 +vt 0.125 0.5 +vt 0.125 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5 +vt 0.0938 0.5 +vt 0.0938 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5 +vt 0.0938 0.5625 +vt 0.0938 0.5 +vt 0.0625 0.5 +vt 0.0625 0.5625 +vt 0.0938 0.5 +vt 0.0938 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5 +vt 0.0625 0.5 +vt 0.0625 0.5625 +vt 0.125 0.5625 +vt 0.125 0.5 +vt 0.125 0.5 +vt 0.125 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5 +vt 0.0938 0.5 +vt 0.0938 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5 +vt 0.0938 0.5625 +vt 0.0938 0.5 +vt 0.0625 0.5 +vt 0.0625 0.5625 +vt 0.0938 0.5 +vt 0.0938 0.5625 +vt 0.0625 0.5625 +vt 0.0625 0.5 +vt 0.25 0.3125 +vt 0.25 0.375 +vt 0.3125 0.375 +vt 0.3125 0.3125 +vt 0.3125 0.3125 +vt 0.3125 0.375 +vt 0.25 0.375 +vt 0.25 0.3125 +vt 0.2813 0.3125 +vt 0.2813 0.375 +vt 0.25 0.375 +vt 0.25 0.3125 +vt 0.2813 0.375 +vt 0.2813 0.3125 +vt 0.25 0.3125 +vt 0.25 0.375 +vt 0.2813 0.3125 +vt 0.2813 0.375 +vt 0.25 0.375 +vt 0.25 0.3125 +vt 0.25 0.3125 +vt 0.25 0.375 +vt 0.3125 0.375 +vt 0.3125 0.3125 +vt 0.3125 0.3125 +vt 0.3125 0.375 +vt 0.25 0.375 +vt 0.25 0.3125 +vt 0.2813 0.3125 +vt 0.2813 0.375 +vt 0.25 0.375 +vt 0.25 0.3125 +vt 0.2813 0.375 +vt 0.2813 0.3125 +vt 0.25 0.3125 +vt 0.25 0.375 +vt 0.2813 0.3125 +vt 0.2813 0.375 +vt 0.25 0.375 +vt 0.25 0.3125 +vt 0.0469 0.9844 +vt 0.0469 1 +vt 0 1 +vt 0 0.9844 +vt 0.0469 0.9844 +vt 0.0469 1 +vt 0 1 +vt 0 0.9844 +vt 0.0156 0.9531 +vt 0.0156 1 +vt 0 1 +vt 0 0.9531 +vt 0.0156 0.9531 +vt 0.0156 1 +vt 0 1 +vt 0 0.9531 +vt 0.5469 0.0469 +vt 0.5781 0.0469 +vt 0.5781 0 +vt 0.5469 0 +vt 0.5781 0 +vt 0.5469 0 +vt 0.5469 0.0469 +vt 0.5781 0.0469 +vt 0.5781 0 +vt 0.5781 0.0469 +vt 0.5469 0.0469 +vt 0.5469 0 +vt 0.5469 0.0469 +vt 0.5469 0 +vt 0.5781 0 +vt 0.5781 0.0469 +vt 0.5938 0.0156 +vt 0.5938 0.0469 +vt 0.5625 0.0469 +vt 0.5625 0.0156 +vt 0.5938 0.0156 +vt 0.5938 0.0469 +vt 0.5625 0.0469 +vt 0.5625 0.0156 +vt 0.8281 0.2813 +vt 0.8281 0.2188 +vt 0.8438 0.2188 +vt 0.8438 0.2813 +vt 0.8281 0.2813 +vt 0.8281 0.2188 +vt 0.8438 0.2188 +vt 0.8438 0.2813 +vt 0.125 0.9844 +vt 0.2656 0.9844 +vt 0.2656 1 +vt 0.125 1 +vt 0.2813 0.9375 +vt 0.4219 0.9375 +vt 0.4219 1 +vt 0.2813 1 +vt 0.5 0.25 +vt 0.3594 0.25 +vt 0.3594 0.1875 +vt 0.5 0.1875 +vt 0.2813 0.75 +vt 0.4219 0.75 +vt 0.4219 0.9375 +vt 0.2813 0.9375 +vt 0.8438 0.0313 +vt 0.8438 0.2188 +vt 0.8281 0.2188 +vt 0.8281 0.0313 +vt 0.5 0.1875 +vt 0.3594 0.1875 +vt 0.3594 0 +vt 0.5 0 +vt 0.8438 0.0313 +vt 0.8438 0.2188 +vt 0.8281 0.2188 +vt 0.8281 0.0313 +vt 0.5625 0.9375 +vt 0.4219 0.9375 +vt 0.4219 0.75 +vt 0.5625 0.75 +vt 0 0 +vt 0.1406 0 +vt 0.1406 0.1875 +vt 0 0.1875 +vt 0 0.1875 +vt 0.1406 0.1875 +vt 0.1406 0.25 +vt 0 0.25 +vt 0.4063 1 +vt 0.2656 1 +vt 0.2656 0.9844 +vt 0.4063 0.9844 +vt 0.5625 1 +vt 0.4219 1 +vt 0.4219 0.9375 +vt 0.5625 0.9375 +vt 0.5625 0.2344 +vt 0.5625 0.2188 +vt 0.5313 0.2188 +vt 0.5313 0.2344 +vt 0.5313 0.0313 +vt 0.5313 0.2188 +vt 0.5625 0.2188 +vt 0.5625 0.0313 +vt 0.5313 0.2344 +vt 0.5313 0.25 +vt 0.5625 0.2813 +vt 0.5625 0.2344 +vt 0.5625 0.2344 +vt 0.5625 0.2813 +vt 0.5313 0.25 +vt 0.5313 0.2344 +vt 0.5625 1 +vt 0.4219 1 +vt 0.4219 0.9531 +vt 0.5625 0.9531 +vt 0 0.1875 +vt 0.1406 0.1875 +vt 0.1406 0.2344 +vt 0 0.2344 +vt 0.5625 0.9531 +vt 0.4219 0.9531 +vt 0.4219 0.9375 +vt 0.5625 0.9375 +vt 0.2813 0.9531 +vt 0.4219 0.9531 +vt 0.4219 1 +vt 0.2813 1 +vt 0.2813 0.9375 +vt 0.4219 0.9375 +vt 0.4219 0.9531 +vt 0.2813 0.9531 +vt 0.5156 0.2344 +vt 0.375 0.2344 +vt 0.375 0.1875 +vt 0.5156 0.1875 +vt 0 0.125 +vt 0.1406 0.125 +vt 0.1406 0.25 +vt 0 0.25 +vt 0.5625 0.2813 +vt 0.7031 0.2813 +vt 0.7031 0.1563 +vt 0.5625 0.1563 +vt 0.0156 0.7344 +vt 0.0156 0.875 +vt 0 0.875 +vt 0 0.7344 +vt 0 0 +vt 0.1406 0 +vt 0.1406 0.125 +vt 0 0.125 +vt 0.5625 0.1563 +vt 0.7031 0.1563 +vt 0.7031 0.0313 +vt 0.5625 0.0313 +vt 0.5 0.125 +vt 0.375 0.125 +vt 0.375 0 +vt 0.5 0 +vt 0.8281 0.0313 +vt 0.7031 0.0313 +vt 0.7031 0.1563 +vt 0.8281 0.1563 +vt 0.8281 0.1563 +vt 0.7031 0.1563 +vt 0.7031 0.2813 +vt 0.8281 0.2813 +vt 0 1 +vt 0 0.875 +vt 0.0156 0.875 +vt 0.0156 1 +vt 0.5 0.25 +vt 0.375 0.25 +vt 0.375 0.125 +vt 0.5 0.125 +vt 0.5469 0.7344 +vt 0.5469 0.9375 +vt 0.2969 0.9375 +vt 0.2969 0.7344 +vt 0.8438 0.0313 +vt 0.8438 0.2344 +vt 0.9688 0.2344 +vt 1 0.0313 +vt 1 0.0313 +vt 0.9688 0.2344 +vt 0.8438 0.2344 +vt 0.8438 0.0313 +vt 0.0156 0.875 +vt 0.0156 1 +vt 0 1 +vt 0 0.875 +vt 0.0156 0.7945 +vt 0.0156 1 +vt 0 1 +vt 0 0.7945 +vt 0.5 1 +vt 0.5 0.8906 +vt 0.75 0.8906 +vt 0.75 1 +vt 0.5313 0.0313 +vt 0.5313 0.25 +vt 0.2813 0.25 +vt 0.2813 0.0313 +vt 0.0156 0.75 +vt 0.0156 1 +vt 0 1 +vt 0 0.75 +vt 0.5313 0.2344 +vt 0.5313 0.2188 +vt 0.5625 0.2188 +vt 0.5625 0.2344 +vt 0.5625 0.0313 +vt 0.5625 0.2188 +vt 0.5313 0.2188 +vt 0.5313 0.0313 +vt 0 0.125 +vt 0.1406 0.125 +vt 0.1406 0.25 +vt 0 0.25 +vt 0.8281 0.2813 +vt 0.6875 0.2813 +vt 0.6875 0.1563 +vt 0.8281 0.1563 +vt 0.0156 0.7344 +vt 0.0156 0.875 +vt 0 0.875 +vt 0 0.7344 +vt 0 0 +vt 0.1406 0 +vt 0.1406 0.125 +vt 0 0.125 +vt 0.8281 0.1563 +vt 0.6875 0.1563 +vt 0.6875 0.0313 +vt 0.8281 0.0313 +vt 0.5 0.125 +vt 0.375 0.125 +vt 0.375 0 +vt 0.5 0 +vt 0.5625 0.0313 +vt 0.6875 0.0313 +vt 0.6875 0.1563 +vt 0.5625 0.1563 +vt 0.5625 0.1563 +vt 0.6875 0.1563 +vt 0.6875 0.2813 +vt 0.5625 0.2813 +vt 0 1 +vt 0 0.875 +vt 0.0156 0.875 +vt 0.0156 1 +vt 0.5 0.25 +vt 0.375 0.25 +vt 0.375 0.125 +vt 0.5 0.125 +vt 0.8438 0.0313 +vt 0.8438 0.2344 +vt 0.9688 0.2344 +vt 1 0.0313 +vt 0.0156 0.875 +vt 0.0156 1 +vt 0 1 +vt 0 0.875 +vt 0.0156 0.7945 +vt 0.0156 1 +vt 0 1 +vt 0 0.7945 +vt 1 0.0313 +vt 0.9688 0.2344 +vt 0.8438 0.2344 +vt 0.8438 0.0313 +vt 0.6406 0.2031 +vt 0.6406 0.2656 +vt 0.625 0.2656 +vt 0.625 0.2031 +vt 0.6875 0.25 +vt 0.6875 0.2656 +vt 0.625 0.2656 +vt 0.625 0.25 +vt 0.6875 0.2031 +vt 0.6875 0.2656 +vt 0.625 0.2656 +vt 0.625 0.2031 +vt 0.625 0.2656 +vt 0.6875 0.2656 +vt 0.6875 0.25 +vt 0.625 0.25 +vt 0.625 0.2656 +vt 0.6875 0.2656 +vt 0.6875 0.2031 +vt 0.625 0.2031 +vt 0.2656 0.2656 +vt 0.2656 0.375 +vt 0.0156 0.375 +vt 0.0156 0.2656 +vt 0.7344 0.2656 +vt 0.7344 0.375 +vt 0.4844 0.375 +vt 0.4844 0.2656 +vt 0.5 1 +vt 0.5 0.7813 +vt 0 0.7813 +vt 0 1 +vt 0.5 0.7813 +vt 0.5 1 +vt 0 1 +vt 0 0.7813 +vt 0.5 0.75 +vt 0.5 0.8125 +vt 0 0.8125 +vt 0 0.75 +vt 0.25 0.25 +vt 0.25 0.125 +vt 0.2813 0.125 +vt 0.2813 0.25 +vt 0 1 +vt 0.1406 1 +vt 0.1406 0.9688 +vt 0 0.9688 +vt 1 0.9688 +vt 0.8594 0.9688 +vt 0.8594 1 +vt 1 1 +vt 0.75 1 +vt 0.6094 1 +vt 0.6094 0.875 +vt 0.75 0.875 +vt 0 0.875 +vt 0.1406 0.875 +vt 0.1406 1 +vt 0 1 +vt 0 0.75 +vt 0.1406 0.75 +vt 0.1406 0.875 +vt 0 0.875 +vt 0.75 0.3594 +vt 0.6094 0.3594 +vt 0.6094 0.2344 +vt 0.75 0.2344 +vt 0.2813 0 +vt 0.2813 0.125 +vt 0.25 0.125 +vt 0.25 0 +vt 0.2813 0.875 +vt 0.1406 0.875 +vt 0.1406 0.75 +vt 0.2813 0.75 +vt 0.75 1 +vt 0.8906 1 +vt 0.8906 0.9688 +vt 0.75 0.9688 +vt 0 0.2344 +vt 0.1406 0.2344 +vt 0.1406 0.3594 +vt 0 0.3594 +vt 0 0.875 +vt 0.1406 0.875 +vt 0.1406 1 +vt 0 1 +vt 0 0.9688 +vt 0.1406 0.9688 +vt 0.1406 1 +vt 0 1 +vt 0.2813 1 +vt 0.1406 1 +vt 0.1406 0.875 +vt 0.2813 0.875 +vt 0.25 0 +vt 0.25 0.125 +vt 0.2813 0.125 +vt 0.2813 0 +vt 0.2813 0.25 +vt 0.2813 0.125 +vt 0.25 0.125 +vt 0.25 0.25 +vt 0.1094 1 +vt 0.1719 1 +vt 0.1719 0.9844 +vt 0.1094 0.9844 +vt 0.1719 1 +vt 0.1094 1 +vt 0.1094 0.9844 +vt 0.1719 0.9844 +vt 0.4219 0.2344 +vt 0.4219 0.1563 +vt 0.4844 0.1563 +vt 0.4844 0.2344 +vt 0.0625 0.3281 +vt 0.0625 0.25 +vt 0 0.25 +vt 0 0.3281 +vt 0.0781 0.9844 +vt 0.0781 1 +vt 0.1406 1 +vt 0.1406 0.9844 +vt 0.0625 0.3438 +vt 0.0625 0.2656 +vt 0 0.2656 +vt 0 0.3438 +vt 0.6875 0.25 +vt 0.6875 0.3281 +vt 0.75 0.3281 +vt 0.75 0.25 +vt 0.0781 1 +vt 0.0781 0.9844 +vt 0.0156 0.9844 +vt 0.0156 1 +vt 0 1 +vt 0.3125 1 +vt 0.3125 0.9844 +vt 0 0.9844 +vt 0 1 +vt 0.3125 1 +vt 0.3125 0.9844 +vt 0 0.9844 +vt 0.1094 0.1719 +vt 0.3906 0.1719 +vt 0.3906 0.2344 +vt 0.1094 0.2344 +vt 0 0.0625 +vt 0.2813 0.0625 +vt 0.2813 0 +vt 0 0 +vt 0.7344 0.3125 +vt 0.4531 0.3125 +vt 0.4531 0.25 +vt 0.7344 0.25 +vt 0.2813 0.9375 +vt 0 0.9375 +vt 0 1 +vt 0.2813 1 +vt 0.1094 1 +vt 0.1719 1 +vt 0.1719 0.9844 +vt 0.1094 0.9844 +vt 0.1719 1 +vt 0.1094 1 +vt 0.1094 0.9844 +vt 0.1719 0.9844 +vt 0.6875 0.25 +vt 0.6875 0.3281 +vt 0.75 0.3281 +vt 0.75 0.25 +vt 0.0625 0.3281 +vt 0.0625 0.25 +vt 0 0.25 +vt 0 0.3281 +vt 0.0781 0.9844 +vt 0.0781 1 +vt 0.1406 1 +vt 0.1406 0.9844 +vt 0.0781 0.0781 +vt 0.0781 0 +vt 0.0156 0 +vt 0.0156 0.0781 +vt 0.6875 0.25 +vt 0.6875 0.3281 +vt 0.75 0.3281 +vt 0.75 0.25 +vt 0.0781 1 +vt 0.0781 0.9844 +vt 0.0156 0.9844 +vt 0.0156 1 +vt 0 0.9062 +vt 0 0.7812 +vt 0.0156 0.7812 +vt 0.0156 0.9063 +vt 0.0938 0.9844 +vt 0.2188 0.9844 +vt 0.2188 1 +vt 0.0938 1 +vt 0.3906 0.1875 +vt 0.5 0.1875 +vt 0.5 0.25 +vt 0.3906 0.25 +vt 0.0156 0.0781 +vt 0.125 0.0781 +vt 0.125 0.0156 +vt 0.0156 0.0156 +vt 0.75 0.3125 +vt 0.6406 0.3125 +vt 0.6406 0.25 +vt 0.75 0.25 +vt 0.125 0.9375 +vt 0.0156 0.9375 +vt 0.0156 1 +vt 0.125 1 +vt 0.1719 0.9844 +vt 0.1719 1 +vt 0.1094 1 +vt 0.1094 0.9844 +vt 0.1094 0.9844 +vt 0.1094 1 +vt 0.1719 1 +vt 0.1719 0.9844 +vt 0.4844 0.1563 +vt 0.4219 0.1563 +vt 0.4219 0.2344 +vt 0.4844 0.2344 +vt 0 0.25 +vt 0.0625 0.25 +vt 0.0625 0.3281 +vt 0 0.3281 +vt 0.1406 1 +vt 0.0781 1 +vt 0.0781 0.9844 +vt 0.1406 0.9844 +vt 0 0.2656 +vt 0.0625 0.2656 +vt 0.0625 0.3438 +vt 0 0.3438 +vt 0.75 0.3281 +vt 0.6875 0.3281 +vt 0.6875 0.25 +vt 0.75 0.25 +vt 0.0156 0.9844 +vt 0.0781 0.9844 +vt 0.0781 1 +vt 0.0156 1 +vt 0.3125 0.9844 +vt 0.3125 1 +vt 0 1 +vt 0 0.9844 +vt 0.3125 0.9844 +vt 0.3125 1 +vt 0 1 +vt 0 0.9844 +vt 0.3906 0.2344 +vt 0.3906 0.1719 +vt 0.1094 0.1719 +vt 0.1094 0.2344 +vt 0.2813 0 +vt 0.2813 0.0625 +vt 0 0.0625 +vt 0 0 +vt 0.4531 0.25 +vt 0.4531 0.3125 +vt 0.7344 0.3125 +vt 0.7344 0.25 +vt 0 1 +vt 0 0.9375 +vt 0.2813 0.9375 +vt 0.2813 1 +vt 0.1719 0.9844 +vt 0.1719 1 +vt 0.1094 1 +vt 0.1094 0.9844 +vt 0.1094 0.9844 +vt 0.1094 1 +vt 0.1719 1 +vt 0.1719 0.9844 +vt 0.75 0.3281 +vt 0.6875 0.3281 +vt 0.6875 0.25 +vt 0.75 0.25 +vt 0 0.25 +vt 0.0625 0.25 +vt 0.0625 0.3281 +vt 0 0.3281 +vt 0.1406 1 +vt 0.0781 1 +vt 0.0781 0.9844 +vt 0.1406 0.9844 +vt 0.0156 0 +vt 0.0781 0 +vt 0.0781 0.0781 +vt 0.0156 0.0781 +vt 0.75 0.3281 +vt 0.6875 0.3281 +vt 0.6875 0.25 +vt 0.75 0.25 +vt 0.0156 0.9844 +vt 0.0781 0.9844 +vt 0.0781 1 +vt 0.0156 1 +vt 0.0938 1 +vt 0.0938 0.9844 +vt 0.2188 0.9844 +vt 0.2188 1 +vt 0.0156 0.8125 +vt 0 0.8125 +vt 0 0.6875 +vt 0.0156 0.6875 +vt 0.5 0.25 +vt 0.5 0.1875 +vt 0.3906 0.1875 +vt 0.3906 0.25 +vt 0.125 0.0156 +vt 0.125 0.0781 +vt 0.0156 0.0781 +vt 0.0156 0.0156 +vt 0.6406 0.25 +vt 0.6406 0.3125 +vt 0.75 0.3125 +vt 0.75 0.25 +vt 0.0156 1 +vt 0.0156 0.9375 +vt 0.125 0.9375 +vt 0.125 1 +vt 0.2656 0.3281 +vt 0.2813 0.3281 +vt 0.2813 0.3594 +vt 0.2656 0.3594 +vt 0.2656 0.3281 +vt 0.2813 0.3281 +vt 0.2813 0.3594 +vt 0.2656 0.3594 +vt 0.2656 0.25 +vt 0.2813 0.25 +vt 0.2813 0.3594 +vt 0.2656 0.3594 +vt 0.25 0.25 +vt 0.2656 0.25 +vt 0.2656 0.3594 +vt 0.25 0.3594 +vt 0.2656 0.3281 +vt 0.2813 0.3281 +vt 0.2813 0.3594 +vt 0.2656 0.3594 +vt 0.2656 0.3281 +vt 0.2813 0.3281 +vt 0.2813 0.3594 +vt 0.2656 0.3594 +vt 0.2656 0.25 +vt 0.2813 0.25 +vt 0.2813 0.3594 +vt 0.2656 0.3594 +vt 0.25 0.25 +vt 0.2656 0.25 +vt 0.2656 0.3594 +vt 0.25 0.3594 +vt 0.8125 0.4063 +vt 0.8125 0.4219 +vt 0.5156 0.4219 +vt 0.5156 0.4063 +vt 0.8125 0.4063 +vt 0.8125 0.4219 +vt 0.5156 0.4219 +vt 0.5156 0.4063 +vt 0.5156 0.2813 +vt 0.8125 0.2813 +vt 0.8125 0.4219 +vt 0.5156 0.4219 +vt 0.8125 0.4219 +vt 0.5156 0.4219 +vt 0.5156 0.2813 +vt 0.8125 0.2813 +vt 0.7969 0.2813 +vt 0.8125 0.2813 +vt 0.8125 0.4219 +vt 0.7969 0.4219 +vt 0.7969 0.2813 +vt 0.8125 0.2813 +vt 0.8125 0.4219 +vt 0.7969 0.4219 +vt 0 0.75 +vt 0.5 0.75 +vt 0.5 0.9375 +vt 0 0.9375 +vt 0 0.9375 +vt 0.5 0.9375 +vt 0.5 0.75 +vt 0 0.75 +vt 0 0.8125 +vt 0.5 0.8125 +vt 0.5 0.75 +vt 0 0.75 +vt 0.0781 0.8 +vt 0.0781 0.8125 +vt 0 0.8125 +vt 0 0.8 +vt 0.0781 0.7375 +vt 0.0781 0.75 +vt 0 0.75 +vt 0 0.7375 +vt 0 0.7344 +vt 0 0.8125 +vt 0.0781 0.8125 +vt 0.0781 0.7344 +vt 0.0781 0.7969 +vt 0.0781 0.8125 +vt 0 0.8125 +vt 0 0.7969 +vt 0.0781 0.75 +vt 0.0781 0.7344 +vt 0 0.7344 +vt 0 0.75 +vt 0.0781 0.8 +vt 0.0781 0.8125 +vt 0 0.8125 +vt 0 0.8 +vt 0.0781 0.7375 +vt 0.0781 0.75 +vt 0 0.75 +vt 0 0.7375 +vt 0 0.7344 +vt 0 0.8125 +vt 0.0781 0.8125 +vt 0.0781 0.7344 +vt 0.0781 0.7969 +vt 0.0781 0.8125 +vt 0 0.8125 +vt 0 0.7969 +vt 0.0781 0.75 +vt 0.0781 0.7344 +vt 0 0.7344 +vt 0 0.75 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 1 +vn 0 1 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 -1 +vn 0 -1 0 +vn 1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0.16 0.99 0 +vn -0.16 -0.99 0 +vn 0 0 1 +vn 0 0 -1 +vn 0.16 0.99 0 +vn -0.16 -0.99 0 +vn 0 1 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 1 0 +vn 0.71 0.71 0 +vn -0.71 0.71 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0.71 0.71 0 +vn -0.71 0.71 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn -1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 1 +vn 0 -1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 -1 +vn 0 1 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn -0.16 0.99 0 +vn 0.16 -0.99 0 +vn 0 0 1 +vn 0 0 -1 +vn -0.16 0.99 0 +vn 0.16 -0.99 0 +vn 0 1 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 1 0 +vn 0.71 0.71 0 +vn -0.71 0.71 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0.71 0.71 0 +vn -0.71 0.71 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn -0.89 0.45 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0.91 -0.42 0 +vn -0.91 0.42 0 +vn 0.42 0.91 0 +vn -0.42 -0.91 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn -0.89 0 -0.45 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 -0.45 0.89 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 -1 0 +vn -1 0 0 +vn 0 1 0 +vn 1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 0 0 1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 1 0 0 +vn 1 0 0 +vn -1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 1 +vn -1 0 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 1 0 +vn 0 0 1 +vn 1 0 0 +vn 1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0.71 -0.71 +vn 0 0 1 +vn 0 0 -1 +vn 0 0.71 -0.71 +vn 0 0 -1 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 1 0 0 +vn 0 1 0 +vn -1 0 0 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0.15 0.99 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn -1 0 0 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn -1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 0.15 0.99 +vn -1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 0 1 +vn 0 1 0 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 -1 +vn 0 0 1 +vn -1 0 0 +vn 0 0 -1 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 1 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +vn 1 0 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0.8 -0.6 +vn 0 -0.8 0.6 +vn 0 0 -1 +vn 0 0.8 -0.6 +vn 0 -0.8 0.6 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0.77 0.63 +vn 0 -0.77 -0.63 +vn 0 -0.04 1 +vn 0 0.77 0.63 +vn 0 -0.77 -0.63 +vn 0 -0.04 1 +vn -1 0 0 +vn 1 0 0 +vn 0 -1 -0.04 +vn 0 1 0.04 +vn 0 -1 -0.04 +vn 0 1 0.04 +vn 1 0 0 +vn -1 0 0 +vn 0 0.8 -0.6 +vn 0 -0.8 0.6 +vn 0 0 -1 +vn 0 0.8 -0.6 +vn 0 -0.8 0.6 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0.77 0.63 +vn 0 -0.77 -0.63 +vn 0 -0.04 1 +vn 0 0.77 0.63 +vn 0 -0.77 -0.63 +vn 0 -0.04 1 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 -0.04 +vn 0 1 0.04 +vn 0 -1 -0.04 +vn 0 1 0.04 +vn 0.98 -0.17 0 +vn -0.98 0.17 0 +vn 0 0 1 +vn 0 0 -1 +vn 0.98 -0.17 0 +vn -0.98 0.17 0 +vn 0 0 1 +vn 0 0 -1 +vn 0.98 -0.17 0 +vn -0.98 0.17 0 +vn 0.17 0.98 0 +vn -0.17 -0.98 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 0.17 0.98 +vn 0 0.98 -0.17 +vn 0 -0.98 0.17 +vn 1 0 0 +vn -1 0 0 +vn 0 0.17 0.98 +vn 0 0.98 -0.17 +vn 0 -0.98 0.17 +usemtl common_thingies +f 1093/3133/784 1091/3134/784 1090/3135/784 1092/3136/784 +f 1090/3137/785 1091/3138/785 1095/3139/785 1094/3140/785 +f 1093/3141/786 1092/3142/786 1096/3143/786 1097/3144/786 +f 1092/3145/787 1090/3146/787 1094/3147/787 1096/3148/787 +f 1097/3149/788 1095/3150/788 1091/3151/788 1093/3152/788 +f 1104/3153/789 1102/3154/789 1103/3155/789 1105/3156/789 +f 1098/3157/790 1099/3158/790 1103/3159/790 1102/3160/790 +f 1101/3161/791 1100/3162/791 1104/3163/791 1105/3164/791 +f 1100/3165/792 1098/3166/792 1102/3167/792 1104/3168/792 +f 1105/3169/793 1103/3170/793 1099/3171/793 1101/3172/793 +f 1109/3173/794 1107/3174/794 1106/3175/794 1108/3176/794 +f 1106/3177/795 1107/3178/795 1111/3179/795 1110/3180/795 +f 1109/3181/796 1108/3182/796 1112/3183/796 1113/3184/796 +f 1108/3185/797 1106/3186/797 1110/3187/797 1112/3188/797 +f 1113/3189/798 1111/3190/798 1107/3191/798 1109/3192/798 +usemtl common_rough_steel_painted +f 1123/3193/799 1126/3194/799 1130/3195/799 1119/3196/799 +usemtl common_rough_steel +f 1130/3197/800 1131/3198/800 1138/3199/800 1119/3200/800 +usemtl common_rough_steel_painted +f 1121/3201/801 1136/3202/801 1135/3203/801 1127/3204/801 +f 1122/3205/802 1133/3206/802 1132/3207/802 1118/3208/802 +f 1119/3209/803 1138/3210/803 1137/3211/803 1123/3212/803 +f 1121/3213/804 1127/3214/804 1126/3215/804 1123/3216/804 +f 1123/3217/805 1137/3218/805 1136/3219/805 1121/3220/805 +f 1120/3221/806 1134/3222/806 1133/3223/806 1122/3224/806 +f 1122/3225/807 1126/3226/807 1127/3227/807 1120/3228/807 +f 1127/3229/808 1135/3230/808 1134/3231/808 1120/3232/808 +usemtl common_rough_steel +f 1118/3233/809 1132/3234/809 1131/3235/809 1130/3236/809 +usemtl common_rough_steel_painted +f 1118/3237/810 1130/3238/810 1126/3239/810 1122/3240/810 +usemtl common_rough_steel +f 1129/3241/811 1131/3242/811 1132/3243/811 1114/3244/811 +usemtl common_rough_steel_painted +f 1114/3245/812 1132/3246/812 1133/3247/812 1125/3248/812 +f 1125/3249/813 1133/3250/813 1134/3251/813 1116/3252/813 +f 1116/3253/814 1134/3254/814 1135/3255/814 1128/3256/814 +f 1128/3257/815 1135/3258/815 1136/3259/815 1117/3260/815 +f 1117/3261/816 1136/3262/816 1137/3263/816 1124/3264/816 +f 1124/3265/817 1137/3266/817 1138/3267/817 1115/3268/817 +usemtl common_rough_steel +f 1115/3269/818 1138/3270/818 1131/3271/818 1129/3272/818 +usemtl common_steel_norivets +f 1145/3273/819 1143/3274/819 1144/3275/819 1146/3276/819 +f 1139/3277/820 1140/3278/820 1144/3279/820 1143/3280/820 +f 1141/3281/821 1139/3282/821 1143/3283/821 1145/3284/821 +f 1146/3285/822 1144/3286/822 1140/3287/822 1142/3288/822 +f 1153/3289/823 1151/3290/823 1152/3291/823 1154/3292/823 +f 1147/3293/824 1148/3294/824 1152/3295/824 1151/3296/824 +f 1149/3297/825 1147/3298/825 1151/3299/825 1153/3300/825 +f 1154/3301/826 1152/3302/826 1148/3303/826 1150/3304/826 +usemtl common_rough_steel_painted +f 1172/3305/827 1167/3306/827 1164/3307/827 1160/3308/827 +usemtl common_rough_steel +f 1170/3309/828 1171/3310/828 1162/3311/828 1165/3312/828 +usemtl common_steel_painted_norivets +f 1168/3313/829 1169/3314/829 1161/3315/829 1159/3316/829 +f 1171/3317/830 1172/3318/830 1160/3319/830 1162/3320/830 +usemtl common_rough_steel_painted +f 1167/3321/831 1168/3322/831 1159/3323/831 1164/3324/831 +usemtl common_rough_steel +f 1169/3325/832 1170/3326/832 1165/3327/832 1161/3328/832 +usemtl common_steel_painted_norivets +f 1168/3329/833 1167/3330/833 1163/3331/833 1155/3332/833 +f 1169/3333/834 1168/3334/834 1155/3335/834 1157/3336/834 +usemtl common_rough_steel +f 1170/3337/835 1169/3338/835 1157/3339/835 1166/3340/835 +f 1171/3341/836 1170/3342/836 1166/3343/836 1158/3344/836 +usemtl common_steel_painted_norivets +f 1172/3345/837 1171/3346/837 1158/3347/837 1156/3348/837 +f 1167/3349/838 1172/3350/838 1156/3351/838 1163/3352/838 +usemtl tracked_motorbike +f 1176/3353/839 1174/3354/839 1173/3355/839 1175/3356/839 +f 1179/3357/840 1177/3358/840 1178/3359/840 1180/3360/840 +f 1173/3361/841 1174/3362/841 1178/3363/841 1177/3364/841 +f 1176/3365/842 1175/3366/842 1179/3367/842 1180/3368/842 +f 1175/3369/843 1173/3370/843 1177/3371/843 1179/3372/843 +f 1180/3373/844 1178/3374/844 1174/3375/844 1176/3376/844 +f 1182/3377/845 1176/3378/845 1175/3379/845 1181/3380/845 +f 1185/3381/846 1183/3382/846 1184/3383/846 1186/3384/846 +f 1181/3385/847 1175/3386/847 1183/3387/847 1185/3388/847 +f 1186/3389/848 1184/3390/848 1176/3391/848 1182/3392/848 +f 1190/3393/849 1188/3394/849 1187/3395/849 1189/3396/849 +f 1191/3397/850 1179/3398/850 1180/3399/850 1192/3400/850 +f 1189/3401/851 1187/3402/851 1179/3403/851 1191/3404/851 +f 1192/3405/852 1180/3406/852 1188/3407/852 1190/3408/852 +f 1196/3409/853 1194/3410/853 1193/3411/853 1195/3412/853 +f 1199/3413/854 1197/3414/854 1198/3415/854 1200/3416/854 +f 1193/3417/855 1194/3418/855 1198/3419/855 1197/3420/855 +f 1196/3421/856 1195/3422/856 1199/3423/856 1200/3424/856 +f 1195/3425/857 1193/3426/857 1197/3427/857 1199/3428/857 +f 1200/3429/858 1198/3430/858 1194/3431/858 1196/3432/858 +f 1202/3433/859 1196/3434/859 1195/3435/859 1201/3436/859 +f 1205/3437/860 1203/3438/860 1204/3439/860 1206/3440/860 +f 1201/3441/861 1195/3442/861 1203/3443/861 1205/3444/861 +f 1206/3445/862 1204/3446/862 1196/3447/862 1202/3448/862 +f 1210/3449/863 1208/3450/863 1207/3451/863 1209/3452/863 +f 1211/3453/864 1199/3454/864 1200/3455/864 1212/3456/864 +f 1209/3457/865 1207/3458/865 1199/3459/865 1211/3460/865 +f 1212/3461/866 1200/3462/866 1208/3463/866 1210/3464/866 +usemtl common_rough_steel_painted +f 1222/3465/867 1225/3466/867 1229/3467/867 1218/3468/867 +f 1229/3469/868 1230/3470/868 1237/3471/868 1218/3472/868 +usemtl common_rough_steel +f 1220/3473/869 1235/3474/869 1234/3475/869 1226/3476/869 +usemtl common_rough_steel_painted +f 1221/3477/870 1232/3478/870 1231/3479/870 1217/3480/870 +f 1218/3481/871 1237/3482/871 1236/3483/871 1222/3484/871 +f 1220/3485/872 1226/3486/872 1225/3487/872 1222/3488/872 +f 1222/3489/873 1236/3490/873 1235/3491/873 1220/3492/873 +f 1219/3493/874 1233/3494/874 1232/3495/874 1221/3496/874 +f 1221/3497/875 1225/3498/875 1226/3499/875 1219/3500/875 +usemtl common_rough_steel +f 1226/3501/876 1234/3502/876 1233/3503/876 1219/3504/876 +usemtl common_rough_steel_painted +f 1217/3505/877 1231/3506/877 1230/3507/877 1229/3508/877 +f 1217/3509/878 1229/3510/878 1225/3511/878 1221/3512/878 +f 1228/3513/879 1230/3514/879 1231/3515/879 1213/3516/879 +f 1213/3517/880 1231/3518/880 1232/3519/880 1224/3520/880 +f 1224/3521/881 1232/3522/881 1233/3523/881 1215/3524/881 +usemtl common_rough_steel +f 1215/3525/882 1233/3526/882 1234/3527/882 1227/3528/882 +f 1227/3529/883 1234/3530/883 1235/3531/883 1216/3532/883 +usemtl common_rough_steel_painted +f 1216/3533/884 1235/3534/884 1236/3535/884 1223/3536/884 +f 1223/3537/885 1236/3538/885 1237/3539/885 1214/3540/885 +f 1214/3541/886 1237/3542/886 1230/3543/886 1228/3544/886 +usemtl common_steel_norivets +f 1244/3545/887 1242/3546/887 1243/3547/887 1245/3548/887 +f 1238/3549/888 1239/3550/888 1243/3551/888 1242/3552/888 +f 1240/3553/889 1238/3554/889 1242/3555/889 1244/3556/889 +f 1245/3557/890 1243/3558/890 1239/3559/890 1241/3560/890 +usemtl common_thingies +f 1252/3561/891 1250/3562/891 1251/3563/891 1253/3564/891 +f 1246/3565/892 1247/3566/892 1251/3567/892 1250/3568/892 +f 1249/3569/893 1248/3570/893 1252/3571/893 1253/3572/893 +f 1248/3573/894 1246/3574/894 1250/3575/894 1252/3576/894 +f 1253/3577/895 1251/3578/895 1247/3579/895 1249/3580/895 +usemtl common_rough_steel_painted +f 1263/3581/896 1266/3582/896 1271/3583/896 1259/3584/896 +usemtl common_rough_steel +f 1261/3585/897 1270/3586/897 1269/3587/897 1264/3588/897 +usemtl common_steel_painted_norivets +f 1260/3589/898 1268/3590/898 1267/3591/898 1258/3592/898 +f 1259/3593/899 1271/3594/899 1270/3595/899 1261/3596/899 +usemtl common_rough_steel_painted +f 1258/3597/900 1267/3598/900 1266/3599/900 1263/3600/900 +usemtl common_rough_steel +f 1264/3601/901 1269/3602/901 1268/3603/901 1260/3604/901 +usemtl common_steel_painted_norivets +f 1262/3605/902 1266/3606/902 1267/3607/902 1254/3608/902 +f 1254/3609/903 1267/3610/903 1268/3611/903 1256/3612/903 +usemtl common_rough_steel +f 1256/3613/904 1268/3614/904 1269/3615/904 1265/3616/904 +f 1265/3617/905 1269/3618/905 1270/3619/905 1257/3620/905 +usemtl common_steel_painted_norivets +f 1257/3621/906 1270/3622/906 1271/3623/906 1255/3624/906 +f 1255/3625/907 1271/3626/907 1266/3627/907 1262/3628/907 +usemtl tracked_motorbike +f 1275/3629/908 1273/3630/908 1272/3631/908 1274/3632/908 +f 1278/3633/909 1276/3634/909 1277/3635/909 1279/3636/909 +f 1272/3637/910 1273/3638/910 1277/3639/910 1276/3640/910 +f 1275/3641/911 1274/3642/911 1278/3643/911 1279/3644/911 +f 1274/3645/912 1272/3646/912 1276/3647/912 1278/3648/912 +f 1279/3649/913 1277/3650/913 1273/3651/913 1275/3652/913 +f 1281/3653/914 1275/3654/914 1274/3655/914 1280/3656/914 +f 1284/3657/915 1282/3658/915 1283/3659/915 1285/3660/915 +f 1280/3661/916 1274/3662/916 1282/3663/916 1284/3664/916 +f 1285/3665/917 1283/3666/917 1275/3667/917 1281/3668/917 +f 1289/3669/918 1287/3670/918 1286/3671/918 1288/3672/918 +f 1290/3673/919 1278/3674/919 1279/3675/919 1291/3676/919 +f 1288/3677/920 1286/3678/920 1278/3679/920 1290/3680/920 +f 1291/3681/921 1279/3682/921 1287/3683/921 1289/3684/921 +f 1295/3685/922 1293/3686/922 1292/3687/922 1294/3688/922 +f 1298/3689/923 1296/3690/923 1297/3691/923 1299/3692/923 +f 1292/3693/924 1293/3694/924 1297/3695/924 1296/3696/924 +f 1295/3697/925 1294/3698/925 1298/3699/925 1299/3700/925 +f 1294/3701/926 1292/3702/926 1296/3703/926 1298/3704/926 +f 1299/3705/927 1297/3706/927 1293/3707/927 1295/3708/927 +f 1301/3709/928 1295/3710/928 1294/3711/928 1300/3712/928 +f 1304/3713/929 1302/3714/929 1303/3715/929 1305/3716/929 +f 1300/3717/930 1294/3718/930 1302/3719/930 1304/3720/930 +f 1305/3721/931 1303/3722/931 1295/3723/931 1301/3724/931 +f 1309/3725/932 1307/3726/932 1306/3727/932 1308/3728/932 +f 1310/3729/933 1298/3730/933 1299/3731/933 1311/3732/933 +f 1308/3733/934 1306/3734/934 1298/3735/934 1310/3736/934 +f 1311/3737/935 1299/3738/935 1307/3739/935 1309/3740/935 +usemtl common_steel_norivets +f 1318/3741/936 1316/3742/936 1317/3743/936 1319/3744/936 +f 1312/3745/937 1313/3746/937 1317/3747/937 1316/3748/937 +f 1314/3749/938 1312/3750/938 1316/3751/938 1318/3752/938 +f 1319/3753/939 1317/3754/939 1313/3755/939 1315/3756/939 +usemtl tracked_motorbike +f 1320/3757/940 1321/3758/940 1324/3759/940 1323/3760/940 +f 1325/3761/941 1324/3762/941 1321/3763/941 1322/3764/941 +f 1322/3765/942 1321/3766/942 1320/3767/942 1326/3768/942 +f 1327/3769/943 1335/3770/943 1338/3771/943 1331/3772/943 +f 1333/3773/944 1337/3774/944 1336/3775/944 1329/3776/944 +f 1334/3777/945 1332/3778/945 1328/3779/945 1330/3780/945 +f 1330/3781/946 1336/3782/946 1337/3783/946 1334/3784/946 +f 1332/3785/947 1338/3786/947 1335/3787/947 1328/3788/947 +usemtl common_thingies +f 1342/3789/948 1340/3790/948 1339/3791/948 1341/3792/948 +f 1345/3793/949 1343/3794/949 1344/3795/949 1346/3796/949 +f 1339/3797/950 1340/3798/950 1344/3799/950 1343/3800/950 +f 1342/3801/951 1341/3802/951 1345/3803/951 1346/3804/951 +f 1346/3805/952 1344/3806/952 1340/3807/952 1342/3808/952 +usemtl tracked_motorbike +f 1329/3809/953 1330/3810/953 1328/3811/953 1327/3812/953 +f 1334/3813/954 1333/3814/954 1331/3815/954 1332/3816/954 +f 1353/3817/955 1351/3818/955 1352/3819/955 1354/3820/955 +f 1347/3821/956 1348/3822/956 1352/3823/956 1351/3824/956 +f 1349/3825/957 1347/3826/957 1351/3827/957 1353/3828/957 +f 1354/3829/958 1352/3830/958 1348/3831/958 1350/3832/958 +f 1358/3833/959 1356/3834/959 1355/3835/959 1357/3836/959 +f 1361/3837/960 1359/3838/960 1360/3839/960 1362/3840/960 +f 1355/3841/961 1356/3842/961 1360/3843/961 1359/3844/961 +f 1358/3845/962 1357/3846/962 1361/3847/962 1362/3848/962 +f 1357/3849/963 1355/3850/963 1359/3851/963 1361/3852/963 +f 1362/3853/964 1360/3854/964 1356/3855/964 1358/3856/964 +usemtl common_cable_and_pipe +f 1366/3857/965 1364/3858/965 1363/3859/965 1365/3860/965 +f 1369/3861/966 1367/3862/966 1368/3863/966 1370/3864/966 +f 1363/3865/967 1364/3866/967 1368/3867/967 1367/3868/967 +f 1366/3869/968 1365/3870/968 1369/3871/968 1370/3872/968 +f 1370/3873/969 1368/3874/969 1373/3875/969 1374/3876/969 +f 1364/3877/970 1371/3878/970 1373/3879/970 1368/3880/970 +f 1372/3881/971 1366/3882/971 1370/3883/971 1374/3884/971 +f 1374/3885/972 1373/3886/972 1371/3887/972 1372/3888/972 +usemtl common_rough_steel +f 1375/3889/973 1655/3890/973 1654/3891/973 1376/3892/973 +usemtl tracked_motorbike2_paint +f 1381/3893/974 1379/3894/974 1380/3895/974 1382/3896/974 +usemtl common_steel_painted_norivets +f 1375/3897/975 1376/3898/975 1380/3899/975 1379/3900/975 +usemtl tracked_motorbike +f 1386/3901/976 1384/3902/976 1383/3903/976 1385/3904/976 +f 1389/3905/977 1387/3906/977 1388/3907/977 1390/3908/977 +f 1383/3909/978 1384/3910/978 1388/3911/978 1387/3912/978 +f 1385/3913/979 1383/3914/979 1387/3915/979 1389/3916/979 +f 1390/3917/980 1388/3918/980 1384/3919/980 1386/3920/980 +f 1393/3921/981 1391/3922/981 1385/3923/981 1392/3924/981 +f 1395/3925/982 1389/3926/982 1394/3927/982 1396/3928/982 +f 1385/3929/983 1391/3930/983 1394/3931/983 1389/3932/983 +f 1393/3933/984 1392/3934/984 1395/3935/984 1396/3936/984 +f 1392/3937/985 1385/3938/985 1389/3939/985 1395/3940/985 +usemtl tracked_motorbike2_paint +f 1398/3941/986 1404/3942/986 1407/3943/986 1397/3944/986 +f 1400/3945/987 1406/3946/987 1405/3947/987 1402/3948/987 +usemtl common_rough_steel +f 1400/3949/988 1412/3950/988 1411/3951/988 1406/3952/988 +f 1405/3953/989 1408/3954/989 1413/3955/989 1402/3956/989 +usemtl tracked_motorbike2_paint +f 1402/3957/990 1413/3958/990 1412/3959/990 1400/3960/990 +usemtl common_rough_steel +f 1403/3961/991 1409/3962/991 1408/3963/991 1405/3964/991 +usemtl tracked_motorbike2_paint +f 1403/3965/992 1405/3966/992 1406/3967/992 1401/3968/992 +usemtl common_rough_steel +f 1406/3969/993 1411/3970/993 1410/3971/993 1401/3972/993 +usemtl tracked_motorbike2_paint +f 1381/3973/994 1407/3974/994 1404/3975/994 1399/3976/994 +usemtl common_rough_steel +f 1404/3977/995 1408/3978/995 1409/3979/995 1399/3980/995 +f 1381/3981/996 1410/3982/996 1411/3983/996 1407/3984/996 +f 1407/3985/997 1411/3986/997 1412/3987/997 1397/3988/997 +usemtl tracked_motorbike2_paint +f 1397/3989/998 1412/3990/998 1413/3991/998 1398/3992/998 +usemtl common_rough_steel +f 1398/3993/999 1413/3994/999 1408/3995/999 1404/3996/999 +usemtl common_bottom +f 1415/3997/1000 1414/3998/1000 1416/3999/1000 1417/4000/1000 +usemtl tracked_motorbike +f 1421/4001/1001 1419/4002/1001 1418/4003/1001 1420/4004/1001 +f 1424/4005/1002 1422/4006/1002 1423/4007/1002 1425/4008/1002 +f 1418/4009/1003 1419/4010/1003 1423/4011/1003 1422/4012/1003 +f 1421/4013/1004 1420/4014/1004 1424/4015/1004 1425/4016/1004 +f 1420/4017/1005 1418/4018/1005 1422/4019/1005 1424/4020/1005 +f 1425/4021/1006 1423/4022/1006 1419/4023/1006 1421/4024/1006 +f 1429/4025/1007 1427/4026/1007 1426/4027/1007 1428/4028/1007 +f 1432/4029/1008 1430/4030/1008 1431/4031/1008 1433/4032/1008 +f 1426/4033/1009 1427/4034/1009 1431/4035/1009 1430/4036/1009 +f 1429/4037/1010 1428/4038/1010 1432/4039/1010 1433/4040/1010 +f 1428/4041/1011 1426/4042/1011 1430/4043/1011 1432/4044/1011 +f 1433/4045/1012 1431/4046/1012 1427/4047/1012 1429/4048/1012 +usemtl common_steel_norivets +f 1437/4049/1013 1435/4050/1013 1434/4051/1013 1436/4052/1013 +f 1440/4053/1014 1438/4054/1014 1439/4055/1014 1441/4056/1014 +usemtl tracked_motorbike +f 1434/4057/1015 1435/4058/1015 1439/4059/1015 1438/4060/1015 +usemtl common_rough_steel +f 1443/4061/1016 1455/4062/1016 1454/4063/1016 1450/4064/1016 +f 1447/4065/1017 1456/4066/1017 1455/4067/1017 1443/4068/1017 +f 1446/4069/1018 1452/4070/1018 1451/4071/1018 1442/4072/1018 +f 1443/4073/1019 1450/4074/1019 1453/4075/1019 1447/4076/1019 +f 1450/4077/1020 1454/4078/1020 1457/4079/1020 1445/4080/1020 +f 1444/4081/1021 1451/4082/1021 1452/4083/1021 1448/4084/1021 +f 1449/4085/1022 1453/4086/1022 1450/4087/1022 1445/4088/1022 +f 1451/4089/1023 1454/4090/1023 1455/4091/1023 1442/4092/1023 +f 1442/4093/1024 1455/4094/1024 1456/4095/1024 1446/4096/1024 +f 1444/4097/1025 1457/4098/1025 1454/4099/1025 1451/4100/1025 +f 1470/4101/1026 1471/4102/1026 1459/4103/1026 1466/4104/1026 +f 1471/4105/1027 1472/4106/1027 1463/4107/1027 1459/4108/1027 +f 1467/4109/1028 1468/4110/1028 1462/4111/1028 1458/4112/1028 +f 1469/4113/1029 1466/4114/1029 1459/4115/1029 1463/4116/1029 +f 1473/4117/1030 1470/4118/1030 1466/4119/1030 1461/4120/1030 +f 1468/4121/1031 1467/4122/1031 1460/4123/1031 1464/4124/1031 +f 1466/4125/1032 1469/4126/1032 1465/4127/1032 1461/4128/1032 +f 1471/4129/1033 1470/4130/1033 1467/4131/1033 1458/4132/1033 +f 1472/4133/1034 1471/4134/1034 1458/4135/1034 1462/4136/1034 +f 1470/4137/1035 1473/4138/1035 1460/4139/1035 1467/4140/1035 +usemtl tracked_motorbike +f 1474/4141/1036 1482/4142/1036 1485/4143/1036 1475/4144/1036 +f 1479/4145/1037 1484/4146/1037 1483/4147/1037 1478/4148/1037 +f 1483/4149/1038 1486/4150/1038 1488/4151/1038 1478/4152/1038 +f 1480/4153/1039 1487/4154/1039 1486/4155/1039 1483/4156/1039 +f 1480/4157/1040 1483/4158/1040 1484/4159/1040 1481/4160/1040 +f 1477/4161/1041 1485/4162/1041 1482/4163/1041 1476/4164/1041 +f 1482/4165/1042 1486/4166/1042 1487/4167/1042 1476/4168/1042 +f 1474/4169/1043 1488/4170/1043 1486/4171/1043 1482/4172/1043 +usemtl common_thingies +f 1495/4173/1044 1493/4174/1044 1494/4175/1044 1496/4176/1044 +f 1489/4177/1045 1490/4178/1045 1494/4179/1045 1493/4180/1045 +f 1492/4181/1046 1491/4182/1046 1495/4183/1046 1496/4184/1046 +f 1491/4185/1047 1489/4186/1047 1493/4187/1047 1495/4188/1047 +f 1496/4189/1048 1494/4190/1048 1490/4191/1048 1492/4192/1048 +usemtl common_steel_norivets +f 1497/4193/1049 1514/4194/1049 1513/4195/1049 1507/4196/1049 +f 1510/4197/1050 1516/4198/1050 1515/4199/1050 1501/4200/1050 +f 1498/4201/1051 1512/4202/1051 1511/4203/1051 1505/4204/1051 +f 1505/4205/1052 1511/4206/1052 1517/4207/1052 1502/4208/1052 +f 1507/4209/1053 1513/4210/1053 1512/4211/1053 1498/4212/1053 +f 1502/4213/1054 1517/4214/1054 1516/4215/1054 1510/4216/1054 +f 1506/4217/1055 1511/4218/1055 1512/4219/1055 1500/4220/1055 +f 1500/4221/1056 1512/4222/1056 1513/4223/1056 1508/4224/1056 +f 1508/4225/1057 1513/4226/1057 1514/4227/1057 1499/4228/1057 +f 1503/4229/1058 1515/4230/1058 1516/4231/1058 1509/4232/1058 +f 1509/4233/1059 1516/4234/1059 1517/4235/1059 1504/4236/1059 +f 1504/4237/1060 1517/4238/1060 1511/4239/1060 1506/4240/1060 +usemtl tracked_motorbike +f 1524/4241/1061 1522/4242/1061 1523/4243/1061 1525/4244/1061 +f 1518/4245/1062 1519/4246/1062 1523/4247/1062 1522/4248/1062 +f 1520/4249/1063 1518/4250/1063 1522/4251/1063 1524/4252/1063 +f 1525/4253/1064 1523/4254/1064 1519/4255/1064 1521/4256/1064 +f 1529/4257/1065 1527/4258/1065 1526/4259/1065 1528/4260/1065 +f 1532/4261/1066 1530/4262/1066 1531/4263/1066 1533/4264/1066 +f 1526/4265/1067 1527/4266/1067 1531/4267/1067 1530/4268/1067 +f 1528/4269/1068 1526/4270/1068 1530/4271/1068 1532/4272/1068 +f 1533/4273/1069 1531/4274/1069 1527/4275/1069 1529/4276/1069 +f 1537/4277/1070 1535/4278/1070 1534/4279/1070 1536/4280/1070 +f 1504/4281/1071 1538/4282/1071 1539/4283/1071 1540/4284/1071 +f 1534/4285/1072 1535/4286/1072 1539/4287/1072 1538/4288/1072 +f 1536/4289/1073 1534/4290/1073 1538/4291/1073 1504/4292/1073 +f 1540/4293/1074 1539/4294/1074 1535/4295/1074 1537/4296/1074 +f 1544/4297/1075 1542/4298/1075 1541/4299/1075 1543/4300/1075 +f 1547/4301/1076 1545/4302/1076 1546/4303/1076 1548/4304/1076 +f 1541/4305/1077 1542/4306/1077 1546/4307/1077 1545/4308/1077 +f 1543/4309/1078 1541/4310/1078 1545/4311/1078 1547/4312/1078 +f 1548/4313/1079 1546/4314/1079 1542/4315/1079 1544/4316/1079 +usemtl common_steel_norivets +f 1552/4317/1080 1550/4318/1080 1549/4319/1080 1551/4320/1080 +f 1555/4321/1081 1553/4322/1081 1554/4323/1081 1556/4324/1081 +f 1549/4325/1082 1550/4326/1082 1554/4327/1082 1553/4328/1082 +f 1552/4329/1083 1551/4330/1083 1555/4331/1083 1556/4332/1083 +usemtl common_thingies +f 1560/4333/1084 1558/4334/1084 1557/4335/1084 1559/4336/1084 +f 1563/4337/1085 1561/4338/1085 1562/4339/1085 1564/4340/1085 +f 1557/4341/1086 1558/4342/1086 1562/4343/1086 1561/4344/1086 +f 1560/4345/1087 1559/4346/1087 1563/4347/1087 1564/4348/1087 +f 1559/4349/1088 1557/4350/1088 1561/4351/1088 1563/4352/1088 +f 1564/4353/1089 1562/4354/1089 1558/4355/1089 1560/4356/1089 +usemtl tracked_motorbike2_paint +f 1155/4357/1090 1570/4358/1090 1573/4359/1090 1565/4360/1090 +f 1424/4361/1091 1572/4362/1091 1571/4363/1091 1254/4364/1091 +usemtl common_steel_painted_norivets +f 1254/4365/1092 1579/4366/1092 1578/4367/1092 1424/4368/1092 +usemtl tracked_motorbike2_paint +f 1571/4369/1093 1574/4370/1093 1579/4371/1093 1254/4372/1093 +usemtl common_bottom +f 1424/4373/1094 1578/4374/1094 1577/4375/1094 1572/4376/1094 +usemtl tracked_motorbike2_paint +f 1568/4377/1095 1575/4378/1095 1574/4379/1095 1571/4380/1095 +f 1568/4381/1096 1571/4382/1096 1572/4383/1096 1569/4384/1096 +usemtl common_bottom +f 1572/4385/1097 1577/4386/1097 1576/4387/1097 1569/4388/1097 +usemtl tracked_motorbike2_paint +f 1567/4389/1098 1573/4390/1098 1570/4391/1098 1566/4392/1098 +f 1570/4393/1099 1574/4394/1099 1575/4395/1099 1566/4396/1099 +usemtl common_bottom +f 1567/4397/1100 1576/4398/1100 1577/4399/1100 1573/4400/1100 +f 1573/4401/1101 1577/4402/1101 1578/4403/1101 1565/4404/1101 +usemtl common_steel_painted_norivets +f 1565/4405/1102 1578/4406/1102 1579/4407/1102 1155/4408/1102 +usemtl tracked_motorbike2_paint +f 1155/4409/1103 1579/4410/1103 1574/4411/1103 1570/4412/1103 +f 1581/4413/1104 1584/4414/1104 1583/4415/1104 1580/4416/1104 +f 1382/4417/1105 1583/4418/1105 1584/4419/1105 1582/4420/1105 +f 1580/4421/1106 1380/4422/1106 1586/4423/1106 1581/4424/1106 +f 1588/4425/1107 1433/4426/1107 1587/4427/1107 1589/4428/1107 +f 1433/4429/1108 1591/4430/1108 1590/4431/1108 1587/4432/1108 +usemtl common_bottom +f 1588/4433/1109 1592/4434/1109 1591/4435/1109 1433/4436/1109 +usemtl tracked_motorbike2_paint +f 1587/4437/1110 1590/4438/1110 1593/4439/1110 1589/4440/1110 +f 1380/4441/1111 1590/4442/1111 1591/4443/1111 1586/4444/1111 +f 1580/4445/1112 1593/4446/1112 1590/4447/1112 1380/4448/1112 +usemtl common_bottom +f 1586/4449/1113 1591/4450/1113 1592/4451/1113 1581/4452/1113 +f 1598/4453/1114 1601/4454/1114 1605/4455/1114 1594/4456/1114 +usemtl tracked_motorbike2_paint +f 1586/4457/1115 1163/4458/1115 1604/4459/1115 1599/4460/1115 +usemtl common_steel_painted_norivets +f 1594/4461/1116 1605/4462/1116 1163/4463/1116 1586/4464/1116 +usemtl common_bottom +f 1415/4465/1117 1602/4466/1117 1601/4467/1117 1598/4468/1117 +usemtl tracked_motorbike2_paint +f 1599/4469/1118 1604/4470/1118 1603/4471/1118 1582/4472/1118 +usemtl common_bottom +f 1597/4473/1119 1601/4474/1119 1602/4475/1119 1596/4476/1119 +usemtl tracked_motorbike2_paint +f 1567/4477/1120 1603/4478/1120 1604/4479/1120 1600/4480/1120 +f 1600/4481/1121 1604/4482/1121 1163/4483/1121 1565/4484/1121 +usemtl common_steel_painted_norivets +f 1565/4485/1122 1163/4486/1122 1605/4487/1122 1595/4488/1122 +usemtl common_bottom +f 1595/4489/1123 1605/4490/1123 1601/4491/1123 1597/4492/1123 +usemtl tracked_motorbike2_paint +f 1585/4493/1124 1607/4494/1124 1606/4495/1124 1378/4496/1124 +f 1566/4497/1125 1609/4498/1125 1608/4499/1125 1397/4500/1125 +f 1612/4501/1126 1610/4502/1126 1611/4503/1126 1613/4504/1126 +usemtl common_steel_painted_norivets +f 1608/4505/1127 1609/4506/1127 1611/4507/1127 1610/4508/1127 +usemtl tracked_motorbike2_paint +f 1397/4509/1128 1608/4510/1128 1610/4511/1128 1612/4512/1128 +usemtl common_rough_steel +f 1614/4513/1129 1657/4514/1129 1656/4515/1129 1615/4516/1129 +usemtl tracked_motorbike2_paint +f 1618/4517/1130 1587/4518/1130 1617/4519/1130 1401/4520/1130 +usemtl common_steel_painted_norivets +f 1614/4521/1131 1615/4522/1131 1617/4523/1131 1587/4524/1131 +usemtl tracked_motorbike2_paint +f 1589/4525/1132 1621/4526/1132 1620/4527/1132 1588/4528/1132 +f 1619/4529/1133 1620/4530/1133 1621/4531/1133 1618/4532/1133 +usemtl common_bottom +f 1626/4533/1134 1629/4534/1134 1634/4535/1134 1622/4536/1134 +usemtl tracked_motorbike2_paint +f 1424/4537/1135 1633/4538/1135 1632/4539/1135 1627/4540/1135 +usemtl common_steel_painted_norivets +f 1622/4541/1136 1634/4542/1136 1633/4543/1136 1424/4544/1136 +usemtl common_bottom +f 1624/4545/1137 1630/4546/1137 1629/4547/1137 1626/4548/1137 +usemtl tracked_motorbike2_paint +f 1627/4549/1138 1632/4550/1138 1631/4551/1138 1569/4552/1138 +usemtl common_bottom +f 1625/4553/1139 1629/4554/1139 1630/4555/1139 1417/4556/1139 +usemtl tracked_motorbike2_paint +f 1619/4557/1140 1631/4558/1140 1632/4559/1140 1628/4560/1140 +f 1628/4561/1141 1632/4562/1141 1633/4563/1141 1433/4564/1141 +usemtl common_steel_painted_norivets +f 1433/4565/1142 1633/4566/1142 1634/4567/1142 1623/4568/1142 +usemtl common_bottom +f 1623/4569/1143 1634/4570/1143 1629/4571/1143 1625/4572/1143 +usemtl tracked_motorbike2_paint +f 1638/4573/1144 1636/4574/1144 1635/4575/1144 1637/4576/1144 +usemtl common_steel_painted_norivets +f 1635/4577/1145 1636/4578/1145 1640/4579/1145 1639/4580/1145 +usemtl tracked_motorbike2_paint +f 1637/4581/1146 1635/4582/1146 1639/4583/1146 1400/4584/1146 +f 1400/4585/1147 1639/4586/1147 1640/4587/1147 1568/4588/1147 +usemtl common_thingies +f 1646/4589/1148 1644/4590/1148 1645/4591/1148 1647/4592/1148 +f 1641/4593/1149 1642/4594/1149 1645/4595/1149 1644/4596/1149 +f 1643/4597/1150 1641/4598/1150 1644/4599/1150 1646/4600/1150 +f 1652/4601/1151 1649/4602/1151 1648/4603/1151 1651/4604/1151 +f 1651/4605/1152 1648/4606/1152 1650/4607/1152 1653/4608/1152 +usemtl common_rough_steel +f 1378/4609/1153 1654/4610/1153 1655/4611/1153 1377/4612/1153 +f 1616/4613/1154 1656/4614/1154 1657/4615/1154 1585/4616/1154 +usemtl tracked_motorbike +f 1658/4617/1155 1659/4618/1155 1663/4619/1155 1662/4620/1155 +f 1661/4621/1156 1660/4622/1156 1664/4623/1156 1665/4624/1156 +f 1665/4625/1157 1663/4626/1157 1659/4627/1157 1661/4628/1157 +usemtl tracked_motorbike2_paint +f 1668/4629/1158 1670/4630/1158 1673/4631/1158 1617/4632/1158 +usemtl common_steel_painted_norivets +f 1666/4633/1159 1678/4634/1159 1677/4635/1159 1379/4636/1159 +usemtl common_rough_steel +f 1399/4637/1160 1409/4638/1160 1675/4639/1160 1667/4640/1160 +f 1379/4641/1161 1677/4642/1161 1676/4643/1161 1672/4644/1161 +usemtl tracked_motorbike2_paint +f 1671/4645/1162 1674/4646/1162 1678/4647/1162 1666/4648/1162 +f 1667/4649/1163 1675/4650/1163 1674/4651/1163 1671/4652/1163 +usemtl common_rough_steel +f 1672/4653/1164 1676/4654/1164 1409/4655/1164 1399/4656/1164 +usemtl tracked_motorbike2_paint +f 1403/4657/1165 1673/4658/1165 1670/4659/1165 1669/4660/1165 +f 1670/4661/1166 1674/4662/1166 1675/4663/1166 1669/4664/1166 +usemtl common_rough_steel +f 1669/4665/1167 1675/4666/1167 1409/4667/1167 1403/4668/1167 +f 1403/4669/1168 1409/4670/1168 1676/4671/1168 1673/4672/1168 +f 1673/4673/1169 1676/4674/1169 1677/4675/1169 1617/4676/1169 +usemtl common_steel_painted_norivets +f 1617/4677/1170 1677/4678/1170 1678/4679/1170 1668/4680/1170 +usemtl tracked_motorbike2_paint +f 1668/4681/1171 1678/4682/1171 1674/4683/1171 1670/4684/1171 +f 1667/4685/1172 1671/4686/1172 1672/4687/1172 1399/4688/1172 +f 1379/4689/1173 1672/4690/1173 1671/4691/1173 1666/4692/1173 +usemtl common_steel_painted_norivets +f 1680/4693/1174 1681/4694/1174 1683/4695/1174 1682/4696/1174 +f 1685/4697/1175 1684/4698/1175 1686/4699/1175 1687/4700/1175 +usemtl common_steel_painted +f 1688/4701/1176 1689/4702/1176 1684/4703/1176 1685/4704/1176 +usemtl common_steel_norivets +f 1690/4705/1177 1679/4706/1177 1687/4707/1177 1686/4708/1177 +usemtl common_steel_painted_norivets +f 1679/4709/1178 1688/4710/1178 1685/4711/1178 1687/4712/1178 +f 1689/4713/1179 1688/4714/1179 1681/4715/1179 1680/4716/1179 +usemtl common_steel_norivets +f 1679/4717/1180 1690/4718/1180 1682/4719/1180 1683/4720/1180 +usemtl common_steel_painted_norivets +f 1688/4721/1181 1679/4722/1181 1683/4723/1181 1681/4724/1181 +f 1259/4725/1182 1680/4726/1182 1682/4727/1182 1261/4728/1182 +f 1684/4729/1183 1257/4730/1183 1691/4731/1183 1686/4732/1183 +usemtl common_steel_painted +f 1689/4733/1184 1692/4734/1184 1257/4735/1184 1684/4736/1184 +usemtl common_steel_norivets +f 1693/4737/1185 1690/4738/1185 1686/4739/1185 1691/4740/1185 +usemtl common_steel_painted_norivets +f 1692/4741/1186 1689/4742/1186 1680/4743/1186 1259/4744/1186 +usemtl common_rough_steel +f 1690/4745/1187 1693/4746/1187 1261/4747/1187 1682/4748/1187 +usemtl common_steel_painted_norivets +f 1694/4749/1188 1695/4750/1188 1697/4751/1188 1696/4752/1188 +usemtl common_steel_painted +f 1699/4753/1189 1698/4754/1189 1700/4755/1189 1701/4756/1189 +usemtl common_steel_painted_norivets +f 1702/4757/1190 1703/4758/1190 1698/4759/1190 1699/4760/1190 +usemtl common_steel_norivets +f 1704/4761/1191 1705/4762/1191 1701/4763/1191 1700/4764/1191 +usemtl common_steel_painted_norivets +f 1705/4765/1192 1702/4766/1192 1699/4767/1192 1701/4768/1192 +usemtl common_steel_painted +f 1703/4769/1193 1702/4770/1193 1695/4771/1193 1694/4772/1193 +usemtl common_steel_norivets +f 1705/4773/1194 1704/4774/1194 1696/4775/1194 1697/4776/1194 +usemtl common_steel_painted_norivets +f 1702/4777/1195 1705/4778/1195 1697/4779/1195 1695/4780/1195 +usemtl common_steel_painted +f 1706/4781/1196 1700/4782/1196 1698/4783/1196 1707/4784/1196 +usemtl common_steel_painted_norivets +f 1696/4785/1197 1708/4786/1197 1709/4787/1197 1694/4788/1197 +usemtl common_steel_norivets +f 1704/4789/1198 1710/4790/1198 1708/4791/1198 1696/4792/1198 +usemtl common_steel_painted +f 1711/4793/1199 1703/4794/1199 1694/4795/1199 1709/4796/1199 +usemtl common_rough_steel +f 1710/4797/1200 1704/4798/1200 1700/4799/1200 1706/4800/1200 +usemtl common_steel_painted_norivets +f 1703/4801/1201 1711/4802/1201 1707/4803/1201 1698/4804/1201 +f 1716/4805/1202 1714/4806/1202 1713/4807/1202 1715/4808/1202 +f 1719/4809/1203 1717/4810/1203 1718/4811/1203 1720/4812/1203 +usemtl common_steel_painted +f 1717/4813/1204 1722/4814/1204 1721/4815/1204 1718/4816/1204 +usemtl common_steel_norivets +f 1720/4817/1205 1712/4818/1205 1723/4819/1205 1719/4820/1205 +usemtl common_steel_painted_norivets +f 1718/4821/1206 1721/4822/1206 1712/4823/1206 1720/4824/1206 +f 1714/4825/1207 1721/4826/1207 1722/4827/1207 1713/4828/1207 +usemtl common_steel_norivets +f 1715/4829/1208 1723/4830/1208 1712/4831/1208 1716/4832/1208 +usemtl common_steel_painted_norivets +f 1716/4833/1209 1712/4834/1209 1721/4835/1209 1714/4836/1209 +f 1715/4837/1210 1713/4838/1210 1160/4839/1210 1162/4840/1210 +f 1724/4841/1211 1158/4842/1211 1717/4843/1211 1719/4844/1211 +usemtl common_steel_painted +f 1158/4845/1212 1725/4846/1212 1722/4847/1212 1717/4848/1212 +usemtl common_steel_norivets +f 1719/4849/1213 1723/4850/1213 1726/4851/1213 1724/4852/1213 +usemtl common_steel_painted_norivets +f 1713/4853/1214 1722/4854/1214 1725/4855/1214 1160/4856/1214 +usemtl common_rough_steel +f 1162/4857/1215 1726/4858/1215 1723/4859/1215 1715/4860/1215 +usemtl common_steel_painted_norivets +f 1730/4861/1216 1728/4862/1216 1727/4863/1216 1729/4864/1216 +f 1733/4865/1217 1731/4866/1217 1732/4867/1217 1734/4868/1217 +f 1731/4869/1218 1736/4870/1218 1735/4871/1218 1732/4872/1218 +usemtl common_steel_norivets +f 1734/4873/1219 1738/4874/1219 1737/4875/1219 1733/4876/1219 +usemtl common_steel_painted_norivets +f 1732/4877/1220 1735/4878/1220 1738/4879/1220 1734/4880/1220 +usemtl common_steel_painted +f 1728/4881/1221 1735/4882/1221 1736/4883/1221 1727/4884/1221 +usemtl common_steel_norivets +f 1729/4885/1222 1737/4886/1222 1738/4887/1222 1730/4888/1222 +usemtl common_steel_painted_norivets +f 1730/4889/1223 1738/4890/1223 1735/4891/1223 1728/4892/1223 +f 1731/4893/1224 1733/4894/1224 1739/4895/1224 1740/4896/1224 +f 1742/4897/1225 1741/4898/1225 1729/4899/1225 1727/4900/1225 +usemtl common_steel_norivets +f 1741/4901/1226 1743/4902/1226 1737/4903/1226 1729/4904/1226 +usemtl common_steel_painted +f 1727/4905/1227 1736/4906/1227 1744/4907/1227 1742/4908/1227 +usemtl common_rough_steel +f 1733/4909/1228 1737/4910/1228 1743/4911/1228 1739/4912/1228 +usemtl common_steel_painted_norivets +f 1740/4913/1229 1744/4914/1229 1736/4915/1229 1731/4916/1229 +usemtl tracked_motorbike2 +f 1748/4917/1230 1746/4918/1230 1745/4919/1230 1747/4920/1230 +f 1751/4921/1231 1749/4922/1231 1750/4923/1231 1752/4924/1231 +f 1747/4925/1232 1745/4926/1232 1749/4927/1232 1751/4928/1232 +f 1752/4929/1233 1750/4930/1233 1746/4931/1233 1748/4932/1233 +f 1756/4933/1234 1754/4934/1234 1753/4935/1234 1755/4936/1234 +f 1759/4937/1235 1757/4938/1235 1758/4939/1235 1760/4940/1235 +f 1755/4941/1236 1753/4942/1236 1757/4943/1236 1759/4944/1236 +f 1760/4945/1237 1758/4946/1237 1754/4947/1237 1756/4948/1237 +usemtl tracked_motorbike2_paint +f 1764/4949/1238 1762/4950/1238 1761/4951/1238 1763/4952/1238 +f 1767/4953/1239 1765/4954/1239 1766/4955/1239 1768/4956/1239 +f 1761/4957/1240 1762/4958/1240 1766/4959/1240 1765/4960/1240 +usemtl tracked_motorbike2 +f 1764/4961/1241 1763/4962/1241 1767/4963/1241 1768/4964/1241 +usemtl tracked_motorbike2_paint +f 1763/4965/1242 1761/4966/1242 1765/4967/1242 1767/4968/1242 +f 1768/4969/1243 1766/4970/1243 1762/4971/1243 1764/4972/1243 usemtl tracked_motorbike -f 1770/4945/1237 1792/4946/1237 1791/4947/1237 -f 1770/4945/1237 1791/4947/1237 1783/4948/1237 -f 1782/4949/1238 1787/4950/1238 1786/4951/1238 -f 1782/4949/1238 1786/4951/1238 1774/4952/1238 -f 1774/4953/1239 1786/4954/1239 1785/4955/1239 -f 1774/4953/1239 1785/4955/1239 1777/4956/1239 -f 1780/4957/1240 1789/4958/1240 1788/4959/1240 -f 1780/4957/1240 1788/4959/1240 1776/4960/1240 -f 1777/4961/1241 1785/4962/1241 1792/4963/1241 -f 1777/4961/1241 1792/4963/1241 1770/4964/1241 -f 1772/4965/1242 1790/4966/1242 1789/4967/1242 -f 1772/4965/1242 1789/4967/1242 1780/4968/1242 -f 1776/4969/1243 1788/4970/1243 1787/4971/1243 -f 1776/4969/1243 1787/4971/1243 1782/4972/1243 -f 1783/4973/1244 1791/4974/1244 1790/4975/1244 -f 1783/4973/1244 1790/4975/1244 1772/4976/1244 -f 1778/4977/1245 1785/4978/1245 1786/4979/1245 -f 1778/4977/1245 1786/4979/1245 1773/4980/1245 -f 1773/4981/1246 1786/4982/1246 1787/4983/1246 -f 1773/4981/1246 1787/4983/1246 1781/4984/1246 -f 1781/4985/1247 1787/4986/1247 1788/4987/1247 -f 1781/4985/1247 1788/4987/1247 1775/4988/1247 -f 1775/4989/1248 1788/4990/1248 1789/4991/1248 -f 1775/4989/1248 1789/4991/1248 1779/4992/1248 -f 1779/4993/1249 1789/4994/1249 1790/4995/1249 -f 1779/4993/1249 1790/4995/1249 1771/4996/1249 -f 1771/4997/1250 1790/4998/1250 1791/4999/1250 -f 1771/4997/1250 1791/4999/1250 1784/5000/1250 -f 1784/5001/1251 1791/5002/1251 1792/5003/1251 -f 1784/5001/1251 1792/5003/1251 1769/5004/1251 -f 1769/5005/1252 1792/5006/1252 1785/5007/1252 -f 1769/5005/1252 1785/5007/1252 1778/5008/1252 -usemtl pipe34 -f 1758/5009/1253 1747/5010/1253 1751/5011/1253 -f 1758/5009/1253 1751/5011/1253 1760/5012/1253 -f 1756/5013/1254 1752/5014/1254 1748/5015/1254 -f 1756/5013/1254 1748/5015/1254 1754/5016/1254 -f 1760/5017/1255 1751/5018/1255 1752/5019/1255 -f 1760/5017/1255 1752/5019/1255 1756/5020/1255 -f 1754/5021/1256 1748/5022/1256 1747/5023/1256 -f 1754/5021/1256 1747/5023/1256 1758/5024/1256 +f 1774/4973/1244 1770/4974/1244 1769/4975/1244 1773/4976/1244 +f 1775/4977/1245 1771/4978/1245 1772/4979/1245 1776/4980/1245 +f 1770/4981/1246 1774/4982/1246 1776/4983/1246 1772/4984/1246 +usemtl common_thingies +f 1780/4985/1247 1778/4986/1247 1777/4987/1247 1779/4988/1247 +f 1783/4989/1248 1781/4990/1248 1782/4991/1248 1784/4992/1248 +f 1780/4993/1249 1779/4994/1249 1783/4995/1249 1784/4996/1249 +f 1779/4997/1250 1777/4998/1250 1781/4999/1250 1783/5000/1250 +f 1784/5001/1251 1782/5002/1251 1778/5003/1251 1780/5004/1251 +f 1788/5005/1252 1786/5006/1252 1785/5007/1252 1787/5008/1252 +f 1791/5009/1253 1789/5010/1253 1790/5011/1253 1792/5012/1253 +f 1788/5013/1254 1787/5014/1254 1791/5015/1254 1792/5016/1254 +f 1787/5017/1255 1785/5018/1255 1789/5019/1255 1791/5020/1255 +f 1792/5021/1256 1790/5022/1256 1786/5023/1256 1788/5024/1256 o RightWheelRear2 -v 0.875 1.0624999696333308 -0.12500003036666912 -v 0.875 1.0624999696333308 -0.4999999696333308 -v 0.875 0.6875000303666692 -0.12500003036666915 -v 0.875 0.6875000303666692 -0.4999999696333309 -v 0.75 1.0624999696333308 -0.12500003036666912 -v 0.75 1.0624999696333308 -0.4999999696333308 -v 0.75 0.6875000303666692 -0.12500003036666915 -v 0.75 0.6875000303666692 -0.4999999696333309 -v 1 1.162262129857035 -0.15782039161544276 -v 1 1.0296796083845572 -0.02523787014296508 -v 1 1.2064563036811942 -0.11362621779128346 -v 1 1.0738737822087165 0.018956303681194164 -v 0.625 1.162262129857035 -0.1578203916154427 -v 0.625 1.0296796083845572 -0.025237870142965024 -v 0.625 1.2064563036811942 -0.11362621779128346 -v 0.625 1.0738737822087165 0.018956303681194164 -v 1 0.5877378701429651 -0.15782039161544276 -v 1 0.7203203916154427 -0.02523787014296508 -v 1 0.5435436963188058 -0.11362621779128357 -v 1 0.6761262177912835 0.01895630368119411 -v 0.625 0.5877378701429651 -0.15782039161544276 -v 0.625 0.7203203916154427 -0.02523787014296508 -v 0.625 0.5435436963188058 -0.11362621779128351 -v 0.625 0.6761262177912835 0.018956303681194164 -v 1 0.5877378701429651 -0.4671796083845573 -v 1 0.7203203916154427 -0.599762129857035 -v 1 0.5435436963188058 -0.5113737822087165 -v 1 0.6761262177912836 -0.6439563036811942 -v 0.625 0.5877378701429651 -0.46717960838455724 -v 0.625 0.7203203916154428 -0.5997621298570349 -v 0.625 0.5435436963188058 -0.5113737822087165 -v 0.625 0.6761262177912836 -0.6439563036811942 -v 1 1.162262129857035 -0.46717960838455724 -v 1 1.0296796083845572 -0.5997621298570349 -v 1 1.2064563036811942 -0.5113737822087165 -v 1 1.0738737822087165 -0.6439563036811942 -v 0.625 1.162262129857035 -0.46717960838455724 -v 0.625 1.0296796083845572 -0.5997621298570349 -v 0.625 1.2064563036811942 -0.5113737822087164 -v 0.625 1.0738737822087165 -0.6439563036811942 -v 1 0.9687499848166654 -3.45238940713255e-7 -v 1 0.7812500151833346 -3.45238940713255e-7 -v 1 0.9687499848166654 0.06249993926666175 -v 1 0.7812500151833345 0.0624999392666617 -v 0.625 0.9687499848166654 -3.4523894065774385e-7 -v 0.625 0.7812500151833346 -3.45238940713255e-7 -v 0.625 0.9687499848166654 0.06249993926666175 -v 0.625 0.7812500151833346 0.06249993926666175 -v 1 0.5625003452389407 -0.40624998481666547 -v 1 0.5625003452389407 -0.2187500151833346 -v 1 0.5000000607333382 -0.4062499848166655 -v 1 0.5000000607333382 -0.2187500151833346 -v 0.625 0.5625003452389408 -0.4062499848166654 -v 0.625 0.5625003452389408 -0.2187500151833346 -v 0.625 0.5000000607333384 -0.4062499848166654 -v 0.625 0.5000000607333382 -0.21875001518333453 -v 1 0.7812500151833346 -0.6249996547610593 -v 1 0.9687499848166654 -0.6249996547610592 -v 1 0.7812500151833346 -0.6874999392666618 -v 1 0.9687499848166654 -0.6874999392666618 -v 0.625 0.7812500151833346 -0.6249996547610592 -v 0.625 0.9687499848166654 -0.6249996547610592 -v 0.625 0.7812500151833346 -0.6874999392666618 -v 0.625 0.9687499848166655 -0.6874999392666616 -v 1 1.1874996547610592 -0.2187500151833346 -v 1 1.1874996547610592 -0.4062499848166654 -v 1 1.2499999392666616 -0.21875001518333456 -v 1 1.2499999392666616 -0.40624998481666547 -v 0.625 1.1874996547610595 -0.21875001518333453 -v 0.625 1.1874996547610595 -0.4062499848166654 -v 0.625 1.2499999392666616 -0.2187500151833345 -v 0.625 1.2499999392666616 -0.4062499848166654 -v 0.875 1.0000001270694667 -0.6250000967027975 -v 0.875 1.1875000967027975 -0.4375001270694666 -v 0.875 0.7499998729305334 -0.6250000967027975 -v 0.875 0.5624999032972025 -0.43750012706946667 -v 0.9375 1.0000001270694667 -0.6250000967027975 -v 0.9375 1.1875000967027975 -0.43750012706946667 -v 0.9375 0.7499998729305334 -0.6250000967027975 -v 0.9375 0.5624999032972025 -0.43750012706946667 -v 0.9375 1.1875000967027975 -0.18749987293053333 -v 0.9375 1.1875000967027975 -0.43750012706946667 -v 0.9375 0.5624999032972025 -0.18749987293053338 -v 0.9375 0.5624999032972025 -0.43750012706946667 -v 0.875 1.1875000967027975 -0.18749987293053333 -v 0.875 1.1875000967027975 -0.4375001270694666 -v 0.875 0.5624999032972025 -0.18749987293053336 -v 0.875 0.5624999032972025 -0.43750012706946667 -v 0.9375 1.0000001270694667 9.670279754736555e-8 -v 0.9375 1.1875000967027975 -0.18749987293053333 -v 0.9375 0.7499998729305333 9.67027974918544e-8 -v 0.9375 0.5624999032972025 -0.18749987293053338 -v 0.875 1.0000001270694667 9.670279754736555e-8 -v 0.875 1.1875000967027975 -0.18749987293053333 -v 0.875 0.7499998729305333 9.670279754736555e-8 -v 0.875 0.5624999032972025 -0.18749987293053336 -v 0.6875 1.0000001270694667 -0.6250000967027975 -v 0.6875 1.1875000967027975 -0.4375001270694666 -v 0.6875 0.7499998729305334 -0.6250000967027975 -v 0.6875 0.5624999032972025 -0.43750012706946667 -v 0.75 1.0000001270694667 -0.6250000967027975 -v 0.75 1.1875000967027975 -0.4375001270694666 -v 0.75 0.7499998729305334 -0.6250000967027975 -v 0.75 0.5624999032972025 -0.43750012706946667 -v 0.75 1.1875000967027975 -0.18749987293053333 -v 0.75 1.1875000967027975 -0.4375001270694666 -v 0.75 0.5624999032972025 -0.18749987293053336 -v 0.75 0.5624999032972025 -0.43750012706946667 -v 0.6875 1.1875000967027975 -0.18749987293053333 -v 0.6875 1.1875000967027975 -0.4375001270694666 -v 0.6875 0.5624999032972025 -0.18749987293053333 -v 0.6875 0.5624999032972025 -0.43750012706946667 -v 0.75 1.0000001270694667 9.670279754736555e-8 -v 0.75 1.1875000967027975 -0.18749987293053333 -v 0.75 0.7499998729305333 9.670279754736555e-8 -v 0.75 0.5624999032972025 -0.18749987293053336 -v 0.6875 1.0000001270694667 9.670279754736555e-8 -v 0.6875 1.1875000967027975 -0.18749987293053333 -v 0.6875 0.7499998729305333 9.670279754736555e-8 -v 0.6875 0.5624999032972025 -0.18749987293053333 -v 1 1.0624999696333308 -0.12500003036666915 -v 1 1.0624999696333308 -0.4999999696333309 -v 1 0.6875000303666691 -0.12500003036666918 -v 1 0.6875000303666692 -0.49999996963333093 -v 0.9375 1.0624999696333308 -0.12500003036666912 -v 0.9375 1.0624999696333308 -0.4999999696333308 -v 0.9375 0.6875000303666692 -0.12500003036666915 -v 0.9375 0.6875000303666692 -0.4999999696333309 -v 0.625 1.0624999696333308 -0.1250000303666691 -v 0.625 1.0624999696333308 -0.4999999696333308 -v 0.625 0.6875000303666692 -0.12500003036666912 -v 0.625 0.6875000303666692 -0.4999999696333308 -v 0.6875 1.0624999696333308 -0.12500003036666912 -v 0.6875 1.0624999696333308 -0.4999999696333308 -v 0.6875 0.6875000303666692 -0.12500003036666915 -v 0.6875 0.6875000303666692 -0.4999999696333309 +v 0.875 1.0625 -0.125 +v 0.875 1.0625 -0.5 +v 0.875 0.6875 -0.125 +v 0.875 0.6875 -0.5 +v 0.75 1.0625 -0.125 +v 0.75 1.0625 -0.5 +v 0.75 0.6875 -0.125 +v 0.75 0.6875 -0.5 +v 1 1.1623 -0.1578 +v 1 1.0297 -0.0252 +v 1 1.2065 -0.1136 +v 1 1.0739 0.019 +v 0.625 1.1623 -0.1578 +v 0.625 1.0297 -0.0252 +v 0.625 1.2065 -0.1136 +v 0.625 1.0739 0.019 +v 1 0.5877 -0.1578 +v 1 0.7203 -0.0252 +v 1 0.5435 -0.1136 +v 1 0.6761 0.019 +v 0.625 0.5877 -0.1578 +v 0.625 0.7203 -0.0252 +v 0.625 0.5435 -0.1136 +v 0.625 0.6761 0.019 +v 1 0.5877 -0.4672 +v 1 0.7203 -0.5998 +v 1 0.5435 -0.5114 +v 1 0.6761 -0.644 +v 0.625 0.5877 -0.4672 +v 0.625 0.7203 -0.5998 +v 0.625 0.5435 -0.5114 +v 0.625 0.6761 -0.644 +v 1 1.1623 -0.4672 +v 1 1.0297 -0.5998 +v 1 1.2065 -0.5114 +v 1 1.0739 -0.644 +v 0.625 1.1623 -0.4672 +v 0.625 1.0297 -0.5998 +v 0.625 1.2065 -0.5114 +v 0.625 1.0739 -0.644 +v 1 0.9687 0 +v 1 0.7813 0 +v 1 0.9687 0.0625 +v 1 0.7813 0.0625 +v 0.625 0.9687 0 +v 0.625 0.7813 0 +v 0.625 0.9687 0.0625 +v 0.625 0.7813 0.0625 +v 1 0.5625 -0.4062 +v 1 0.5625 -0.2188 +v 1 0.5 -0.4062 +v 1 0.5 -0.2188 +v 0.625 0.5625 -0.4062 +v 0.625 0.5625 -0.2188 +v 0.625 0.5 -0.4062 +v 0.625 0.5 -0.2188 +v 1 0.7813 -0.625 +v 1 0.9687 -0.625 +v 1 0.7813 -0.6875 +v 1 0.9687 -0.6875 +v 0.625 0.7813 -0.625 +v 0.625 0.9687 -0.625 +v 0.625 0.7813 -0.6875 +v 0.625 0.9687 -0.6875 +v 1 1.1875 -0.2188 +v 1 1.1875 -0.4062 +v 1 1.25 -0.2188 +v 1 1.25 -0.4062 +v 0.625 1.1875 -0.2188 +v 0.625 1.1875 -0.4062 +v 0.625 1.25 -0.2188 +v 0.625 1.25 -0.4062 +v 0.875 1 -0.625 +v 0.875 1.1875 -0.4375 +v 0.875 0.75 -0.625 +v 0.875 0.5625 -0.4375 +v 0.9375 1 -0.625 +v 0.9375 1.1875 -0.4375 +v 0.9375 0.75 -0.625 +v 0.9375 0.5625 -0.4375 +v 0.9375 1.1875 -0.1875 +v 0.9375 1.1875 -0.4375 +v 0.9375 0.5625 -0.1875 +v 0.9375 0.5625 -0.4375 +v 0.875 1.1875 -0.1875 +v 0.875 1.1875 -0.4375 +v 0.875 0.5625 -0.1875 +v 0.875 0.5625 -0.4375 +v 0.9375 1 0 +v 0.9375 1.1875 -0.1875 +v 0.9375 0.75 0 +v 0.9375 0.5625 -0.1875 +v 0.875 1 0 +v 0.875 1.1875 -0.1875 +v 0.875 0.75 0 +v 0.875 0.5625 -0.1875 +v 0.6875 1 -0.625 +v 0.6875 1.1875 -0.4375 +v 0.6875 0.75 -0.625 +v 0.6875 0.5625 -0.4375 +v 0.75 1 -0.625 +v 0.75 1.1875 -0.4375 +v 0.75 0.75 -0.625 +v 0.75 0.5625 -0.4375 +v 0.75 1.1875 -0.1875 +v 0.75 1.1875 -0.4375 +v 0.75 0.5625 -0.1875 +v 0.75 0.5625 -0.4375 +v 0.6875 1.1875 -0.1875 +v 0.6875 1.1875 -0.4375 +v 0.6875 0.5625 -0.1875 +v 0.6875 0.5625 -0.4375 +v 0.75 1 0 +v 0.75 1.1875 -0.1875 +v 0.75 0.75 0 +v 0.75 0.5625 -0.1875 +v 0.6875 1 0 +v 0.6875 1.1875 -0.1875 +v 0.6875 0.75 0 +v 0.6875 0.5625 -0.1875 +v 1 1.0625 -0.125 +v 1 1.0625 -0.5 +v 1 0.6875 -0.125 +v 1 0.6875 -0.5 +v 0.9375 1.0625 -0.125 +v 0.9375 1.0625 -0.5 +v 0.9375 0.6875 -0.125 +v 0.9375 0.6875 -0.5 +v 0.625 1.0625 -0.125 +v 0.625 1.0625 -0.5 +v 0.625 0.6875 -0.125 +v 0.625 0.6875 -0.5 +v 0.6875 1.0625 -0.125 +v 0.6875 1.0625 -0.5 +v 0.6875 0.6875 -0.125 +v 0.6875 0.6875 -0.5 vt 0.0625 0.6875 vt 0.0625 0.5 vt 0 0.5 @@ -11032,13 +9775,13 @@ vt 0.0625 0.5 vt 0 0.5 vt 0 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -11048,21 +9791,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -11071,22 +9814,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -11096,21 +9839,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -11119,22 +9862,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -11144,21 +9887,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -11167,22 +9910,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -11192,21 +9935,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -11215,574 +9958,484 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.175 0.5625 vt 0.175 0.9375 vt 0.0625 0.825 vt 0.0625 0.675 -vt 0.0625025 0.8249984375 -vt 0.0625 0.6749974999999999 -vt 0.1749990625 0.5624984375 -vt 0.1749990625 0.9375 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0625 0.825 +vt 0.0625 0.675 +vt 0.175 0.5625 +vt 0.175 0.9375 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 vt 0.175 0.9375 -vt 0.175 0.5624984375 -vt 0.3250040625 0.5624984375 -vt 0.3250040625 0.9375 +vt 0.175 0.5625 +vt 0.325 0.5625 +vt 0.325 0.9375 vt 0.325 0.5625 vt 0.325 0.9375 vt 0.175 0.9375 vt 0.175 0.5625 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 vt 0.325 0.9375 -vt 0.325 0.5624984375 -vt 0.4374990625 0.6749974999999999 -vt 0.4374990625 0.82500125 +vt 0.325 0.5625 +vt 0.4375 0.675 +vt 0.4375 0.825 vt 0.4375 0.675 vt 0.4375 0.825 vt 0.325 0.9375 vt 0.325 0.5625 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 vt 0.175 0.5625 vt 0.175 0.9375 vt 0.0625 0.825 vt 0.0625 0.675 -vt 0.0625025 0.8249984375 -vt 0.0625 0.6749974999999999 -vt 0.1749990625 0.5624984375 -vt 0.1749990625 0.9375 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0625 0.825 +vt 0.0625 0.675 +vt 0.175 0.5625 +vt 0.175 0.9375 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 vt 0.175 0.9375 -vt 0.175 0.5624984375 -vt 0.3250040625 0.5624984375 -vt 0.3250040625 0.9375 +vt 0.175 0.5625 +vt 0.325 0.5625 +vt 0.325 0.9375 vt 0.325 0.5625 vt 0.325 0.9375 vt 0.175 0.9375 vt 0.175 0.5625 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 vt 0.325 0.9375 -vt 0.325 0.5624984375 -vt 0.4374990625 0.6749974999999999 -vt 0.4374990625 0.82500125 +vt 0.325 0.5625 +vt 0.4375 0.675 +vt 0.4375 0.825 vt 0.4375 0.675 vt 0.4375 0.825 vt 0.325 0.9375 vt 0.325 0.5625 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.71875 0.75 -vt 0.71875 0.9375 -vt 0.53125 0.9375 -vt 0.53125 0.75 -vt 0.53125 0.9375 -vt 0.53125 0.75 +vt 0.7188 0.75 +vt 0.7188 0.9375 +vt 0.5313 0.9375 +vt 0.5313 0.75 +vt 0.5313 0.9375 +vt 0.5313 0.75 vt 0.5625 0.75 vt 0.5625 0.9375 -vt 0.71875 0.75 -vt 0.71875 0.9375 +vt 0.7188 0.75 +vt 0.7188 0.9375 vt 0.6875 0.9375 vt 0.6875 0.75 vt 0.5625 0.75 vt 0.5625 0.9375 -vt 0.53125 0.9375 -vt 0.53125 0.75 -vt 0.71875 0.75 -vt 0.71875 0.9375 +vt 0.5313 0.9375 +vt 0.5313 0.75 +vt 0.7188 0.75 +vt 0.7188 0.9375 vt 0.6875 0.9375 vt 0.6875 0.75 -vt 0.53125 0.9375 -vt 0.71875 0.9375 -vt 0.71875 0.75 -vt 0.53125 0.75 +vt 0.5313 0.9375 +vt 0.7188 0.9375 +vt 0.7188 0.75 +vt 0.5313 0.75 vt 0.5625 0.75 -vt 0.53125 0.75 -vt 0.53125 0.9375 +vt 0.5313 0.75 +vt 0.5313 0.9375 vt 0.5625 0.9375 vt 0.6875 0.9375 -vt 0.71875 0.9375 -vt 0.71875 0.75 +vt 0.7188 0.9375 +vt 0.7188 0.75 vt 0.6875 0.75 -vt 0.53125 0.9375 +vt 0.5313 0.9375 vt 0.5625 0.9375 vt 0.5625 0.75 -vt 0.53125 0.75 +vt 0.5313 0.75 vt 0.6875 0.9375 -vt 0.71875 0.9375 -vt 0.71875 0.75 +vt 0.7188 0.9375 +vt 0.7188 0.75 vt 0.6875 0.75 -vn 8.659560562354933e-17 1 1.1102230246251565e-16 -vn -8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn 8.65956056235493e-17 -1.1102230246251565e-16 1 -vn -8.65956056235493e-17 1.1102230246251565e-16 -1 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn -1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn 1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn 1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn -1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn -1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn -1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn 1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn -1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn -1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn 1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn -1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn 1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn 1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn -1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.65956056235493e-17 1.1102230246251565e-16 -1 -vn 8.659560562354932e-17 -1.1102230246251568e-16 1 -vn 8.659560562354932e-17 1 -2.775557561562892e-16 -vn -8.659560562354934e-17 -1 -3.3306690738754696e-16 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.659560562354933e-17 1 1.1102230246251565e-16 -vn -8.659560562354934e-17 -1 -1.1102230246251568e-16 -vn -8.659560562354927e-17 3.3306690738754696e-16 -1 -vn 8.659560562354934e-17 2.775557561562892e-16 1 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.65956056235493e-17 -1.1102230246251565e-16 1 -vn -8.659560562354932e-17 1.1102230246251568e-16 -1 -vn -8.659560562354932e-17 -1 2.775557561562892e-16 -vn 8.659560562354934e-17 1 3.3306690738754696e-16 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn 8.659560562354934e-17 1 1.1102230246251568e-16 -vn 8.659560562354927e-17 -3.3306690738754696e-16 1 -vn -8.659560562354934e-17 -2.775557561562892e-16 -1 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn -1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn -8.659560562354932e-17 1.1102230246251568e-16 -1 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.659560562354934e-17 1 1.1102230246251568e-16 -vn -8.659560562354934e-17 -1 -1.1102230246251568e-16 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn -1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn 8.659560562354932e-17 -1.1102230246251568e-16 1 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn -1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn -8.659560562354932e-17 1.1102230246251568e-16 -1 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.659560562354934e-17 1 1.1102230246251568e-16 -vn -8.659560562354934e-17 -1 -1.1102230246251568e-16 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn -1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn 8.659560562354932e-17 -1.1102230246251568e-16 1 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 8.659560562354933e-17 1 1.1102230246251565e-16 -vn -8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn 8.65956056235493e-17 -1.1102230246251565e-16 1 -vn -8.65956056235493e-17 1.1102230246251565e-16 -1 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.659560562354933e-17 1 1.1102230246251565e-16 -vn -8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn 8.65956056235493e-17 -1.1102230246251565e-16 1 -vn -8.65956056235493e-17 1.1102230246251565e-16 -1 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.71 -0.71 +vn 0 0.71 0.71 +vn 0 0.71 -0.71 +vn 0 -0.71 0.71 +vn 1 0 0 +vn -1 0 0 +vn 0 0.71 -0.71 +vn 0 -0.71 0.71 +vn 0 -0.71 -0.71 +vn 0 0.71 0.71 +vn 1 0 0 +vn -1 0 0 +vn 0 0.71 0.71 +vn 0 -0.71 -0.71 +vn 0 -0.71 0.71 +vn 0 0.71 -0.71 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.71 0.71 +vn 0 0.71 -0.71 +vn 0 0.71 0.71 +vn 0 -0.71 -0.71 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 0.71 -0.71 +vn 0 -0.71 -0.71 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0.71 0.71 +vn 0 -0.71 0.71 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 0.71 -0.71 +vn 0 -0.71 -0.71 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0.71 0.71 +vn 0 -0.71 0.71 +vn 0 0 1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 usemtl tracks14_12 -f 1793/5025/1257 1794/5026/1257 1798/5027/1257 -f 1793/5025/1257 1798/5027/1257 1797/5028/1257 -f 1796/5029/1258 1795/5030/1258 1799/5031/1258 -f 1796/5029/1258 1799/5031/1258 1800/5032/1258 -f 1795/5033/1259 1793/5034/1259 1797/5035/1259 -f 1795/5033/1259 1797/5035/1259 1799/5036/1259 -f 1800/5037/1260 1798/5038/1260 1794/5039/1260 -f 1800/5037/1260 1794/5039/1260 1796/5040/1260 -f 1804/5041/1261 1802/5042/1261 1801/5043/1261 -f 1804/5041/1261 1801/5043/1261 1803/5044/1261 -f 1807/5045/1262 1805/5046/1262 1806/5047/1262 -f 1807/5045/1262 1806/5047/1262 1808/5048/1262 -f 1801/5049/1263 1802/5050/1263 1806/5051/1263 -f 1801/5049/1263 1806/5051/1263 1805/5052/1263 -f 1804/5053/1264 1803/5054/1264 1807/5055/1264 -f 1804/5053/1264 1807/5055/1264 1808/5056/1264 -f 1803/5057/1265 1801/5058/1265 1805/5059/1265 -f 1803/5057/1265 1805/5059/1265 1807/5060/1265 -f 1808/5061/1266 1806/5062/1266 1802/5063/1266 -f 1808/5061/1266 1802/5063/1266 1804/5064/1266 -f 1809/5065/1267 1810/5066/1267 1812/5067/1267 -f 1809/5065/1267 1812/5067/1267 1811/5068/1267 -f 1814/5069/1268 1813/5070/1268 1815/5071/1268 -f 1814/5069/1268 1815/5071/1268 1816/5072/1268 -f 1814/5073/1269 1810/5074/1269 1809/5075/1269 -f 1814/5073/1269 1809/5075/1269 1813/5076/1269 -f 1815/5077/1270 1811/5078/1270 1812/5079/1270 -f 1815/5077/1270 1812/5079/1270 1816/5080/1270 -f 1813/5081/1271 1809/5082/1271 1811/5083/1271 -f 1813/5081/1271 1811/5083/1271 1815/5084/1271 -f 1810/5085/1272 1814/5086/1272 1816/5087/1272 -f 1810/5085/1272 1816/5087/1272 1812/5088/1272 -f 1820/5089/1273 1818/5090/1273 1817/5091/1273 -f 1820/5089/1273 1817/5091/1273 1819/5092/1273 -f 1823/5093/1274 1821/5094/1274 1822/5095/1274 -f 1823/5093/1274 1822/5095/1274 1824/5096/1274 -f 1817/5097/1275 1818/5098/1275 1822/5099/1275 -f 1817/5097/1275 1822/5099/1275 1821/5100/1275 -f 1820/5101/1276 1819/5102/1276 1823/5103/1276 -f 1820/5101/1276 1823/5103/1276 1824/5104/1276 -f 1819/5105/1277 1817/5106/1277 1821/5107/1277 -f 1819/5105/1277 1821/5107/1277 1823/5108/1277 -f 1824/5109/1278 1822/5110/1278 1818/5111/1278 -f 1824/5109/1278 1818/5111/1278 1820/5112/1278 -f 1825/5113/1279 1826/5114/1279 1828/5115/1279 -f 1825/5113/1279 1828/5115/1279 1827/5116/1279 -f 1830/5117/1280 1829/5118/1280 1831/5119/1280 -f 1830/5117/1280 1831/5119/1280 1832/5120/1280 -f 1830/5121/1281 1826/5122/1281 1825/5123/1281 -f 1830/5121/1281 1825/5123/1281 1829/5124/1281 -f 1831/5125/1282 1827/5126/1282 1828/5127/1282 -f 1831/5125/1282 1828/5127/1282 1832/5128/1282 -f 1829/5129/1283 1825/5130/1283 1827/5131/1283 -f 1829/5129/1283 1827/5131/1283 1831/5132/1283 -f 1826/5133/1284 1830/5134/1284 1832/5135/1284 -f 1826/5133/1284 1832/5135/1284 1828/5136/1284 -f 1836/5137/1285 1834/5138/1285 1833/5139/1285 -f 1836/5137/1285 1833/5139/1285 1835/5140/1285 -f 1839/5141/1286 1837/5142/1286 1838/5143/1286 -f 1839/5141/1286 1838/5143/1286 1840/5144/1286 -f 1833/5145/1287 1834/5146/1287 1838/5147/1287 -f 1833/5145/1287 1838/5147/1287 1837/5148/1287 -f 1836/5149/1288 1835/5150/1288 1839/5151/1288 -f 1836/5149/1288 1839/5151/1288 1840/5152/1288 -f 1835/5153/1289 1833/5154/1289 1837/5155/1289 -f 1835/5153/1289 1837/5155/1289 1839/5156/1289 -f 1840/5157/1290 1838/5158/1290 1834/5159/1290 -f 1840/5157/1290 1834/5159/1290 1836/5160/1290 -f 1841/5161/1291 1842/5162/1291 1844/5163/1291 -f 1841/5161/1291 1844/5163/1291 1843/5164/1291 -f 1846/5165/1292 1845/5166/1292 1847/5167/1292 -f 1846/5165/1292 1847/5167/1292 1848/5168/1292 -f 1846/5169/1293 1842/5170/1293 1841/5171/1293 -f 1846/5169/1293 1841/5171/1293 1845/5172/1293 -f 1847/5173/1294 1843/5174/1294 1844/5175/1294 -f 1847/5173/1294 1844/5175/1294 1848/5176/1294 -f 1845/5177/1295 1841/5178/1295 1843/5179/1295 -f 1845/5177/1295 1843/5179/1295 1847/5180/1295 -f 1842/5181/1296 1846/5182/1296 1848/5183/1296 -f 1842/5181/1296 1848/5183/1296 1844/5184/1296 -f 1852/5185/1297 1850/5186/1297 1849/5187/1297 -f 1852/5185/1297 1849/5187/1297 1851/5188/1297 -f 1855/5189/1298 1853/5190/1298 1854/5191/1298 -f 1855/5189/1298 1854/5191/1298 1856/5192/1298 -f 1849/5193/1299 1850/5194/1299 1854/5195/1299 -f 1849/5193/1299 1854/5195/1299 1853/5196/1299 -f 1852/5197/1300 1851/5198/1300 1855/5199/1300 -f 1852/5197/1300 1855/5199/1300 1856/5200/1300 -f 1851/5201/1301 1849/5202/1301 1853/5203/1301 -f 1851/5201/1301 1853/5203/1301 1855/5204/1301 -f 1856/5205/1302 1854/5206/1302 1850/5207/1302 -f 1856/5205/1302 1850/5207/1302 1852/5208/1302 -f 1857/5209/1303 1858/5210/1303 1860/5211/1303 -f 1857/5209/1303 1860/5211/1303 1859/5212/1303 -f 1862/5213/1304 1861/5214/1304 1863/5215/1304 -f 1862/5213/1304 1863/5215/1304 1864/5216/1304 -f 1862/5217/1305 1858/5218/1305 1857/5219/1305 -f 1862/5217/1305 1857/5219/1305 1861/5220/1305 -f 1863/5221/1306 1859/5222/1306 1860/5223/1306 -f 1863/5221/1306 1860/5223/1306 1864/5224/1306 -f 1861/5225/1307 1857/5226/1307 1859/5227/1307 -f 1861/5225/1307 1859/5227/1307 1863/5228/1307 -f 1858/5229/1308 1862/5230/1308 1864/5231/1308 -f 1858/5229/1308 1864/5231/1308 1860/5232/1308 -f 1868/5233/1309 1866/5234/1309 1865/5235/1309 -f 1868/5233/1309 1865/5235/1309 1867/5236/1309 -f 1871/5237/1310 1869/5238/1310 1870/5239/1310 -f 1871/5237/1310 1870/5239/1310 1872/5240/1310 -f 1865/5241/1311 1866/5242/1311 1870/5243/1311 -f 1865/5241/1311 1870/5243/1311 1869/5244/1311 -f 1868/5245/1312 1867/5246/1312 1871/5247/1312 -f 1868/5245/1312 1871/5247/1312 1872/5248/1312 -f 1867/5249/1313 1865/5250/1313 1869/5251/1313 -f 1867/5249/1313 1869/5251/1313 1871/5252/1313 -f 1876/5253/1314 1874/5254/1314 1873/5255/1314 -f 1876/5253/1314 1873/5255/1314 1875/5256/1314 -f 1879/5257/1315 1877/5258/1315 1878/5259/1315 -f 1879/5257/1315 1878/5259/1315 1880/5260/1315 -f 1873/5261/1316 1874/5262/1316 1878/5263/1316 -f 1873/5261/1316 1878/5263/1316 1877/5264/1316 -f 1876/5265/1317 1875/5266/1317 1879/5267/1317 -f 1876/5265/1317 1879/5267/1317 1880/5268/1317 -f 1884/5269/1318 1882/5270/1318 1881/5271/1318 -f 1884/5269/1318 1881/5271/1318 1883/5272/1318 -f 1887/5273/1319 1885/5274/1319 1886/5275/1319 -f 1887/5273/1319 1886/5275/1319 1888/5276/1319 -f 1881/5277/1320 1882/5278/1320 1886/5279/1320 -f 1881/5277/1320 1886/5279/1320 1885/5280/1320 -f 1884/5281/1321 1883/5282/1321 1887/5283/1321 -f 1884/5281/1321 1887/5283/1321 1888/5284/1321 -f 1883/5285/1322 1881/5286/1322 1885/5287/1322 -f 1883/5285/1322 1885/5287/1322 1887/5288/1322 -f 1892/5289/1323 1890/5290/1323 1889/5291/1323 -f 1892/5289/1323 1889/5291/1323 1891/5292/1323 -f 1895/5293/1324 1893/5294/1324 1894/5295/1324 -f 1895/5293/1324 1894/5295/1324 1896/5296/1324 -f 1889/5297/1325 1890/5298/1325 1894/5299/1325 -f 1889/5297/1325 1894/5299/1325 1893/5300/1325 -f 1892/5301/1326 1891/5302/1326 1895/5303/1326 -f 1892/5301/1326 1895/5303/1326 1896/5304/1326 -f 1891/5305/1327 1889/5306/1327 1893/5307/1327 -f 1891/5305/1327 1893/5307/1327 1895/5308/1327 -f 1900/5309/1328 1898/5310/1328 1897/5311/1328 -f 1900/5309/1328 1897/5311/1328 1899/5312/1328 -f 1903/5313/1329 1901/5314/1329 1902/5315/1329 -f 1903/5313/1329 1902/5315/1329 1904/5316/1329 -f 1897/5317/1330 1898/5318/1330 1902/5319/1330 -f 1897/5317/1330 1902/5319/1330 1901/5320/1330 -f 1900/5321/1331 1899/5322/1331 1903/5323/1331 -f 1900/5321/1331 1903/5323/1331 1904/5324/1331 -f 1908/5325/1332 1906/5326/1332 1905/5327/1332 -f 1908/5325/1332 1905/5327/1332 1907/5328/1332 -f 1911/5329/1333 1909/5330/1333 1910/5331/1333 -f 1911/5329/1333 1910/5331/1333 1912/5332/1333 -f 1905/5333/1334 1906/5334/1334 1910/5335/1334 -f 1905/5333/1334 1910/5335/1334 1909/5336/1334 -f 1908/5337/1335 1907/5338/1335 1911/5339/1335 -f 1908/5337/1335 1911/5339/1335 1912/5340/1335 -f 1907/5341/1336 1905/5342/1336 1909/5343/1336 -f 1907/5341/1336 1909/5343/1336 1911/5344/1336 -f 1916/5345/1337 1914/5346/1337 1913/5347/1337 -f 1916/5345/1337 1913/5347/1337 1915/5348/1337 -f 1913/5349/1338 1914/5350/1338 1918/5351/1338 -f 1913/5349/1338 1918/5351/1338 1917/5352/1338 -f 1916/5353/1339 1915/5354/1339 1919/5355/1339 -f 1916/5353/1339 1919/5355/1339 1920/5356/1339 -f 1915/5357/1340 1913/5358/1340 1917/5359/1340 -f 1915/5357/1340 1917/5359/1340 1919/5360/1340 -f 1920/5361/1341 1918/5362/1341 1914/5363/1341 -f 1920/5361/1341 1914/5363/1341 1916/5364/1341 -f 1921/5365/1342 1922/5366/1342 1924/5367/1342 -f 1921/5365/1342 1924/5367/1342 1923/5368/1342 -f 1926/5369/1343 1922/5370/1343 1921/5371/1343 -f 1926/5369/1343 1921/5371/1343 1925/5372/1343 -f 1927/5373/1344 1923/5374/1344 1924/5375/1344 -f 1927/5373/1344 1924/5375/1344 1928/5376/1344 -f 1925/5377/1345 1921/5378/1345 1923/5379/1345 -f 1925/5377/1345 1923/5379/1345 1927/5380/1345 -f 1922/5381/1346 1926/5382/1346 1928/5383/1346 -f 1922/5381/1346 1928/5383/1346 1924/5384/1346 +f 1793/5025/1257 1794/5026/1257 1798/5027/1257 1797/5028/1257 +f 1796/5029/1258 1795/5030/1258 1799/5031/1258 1800/5032/1258 +f 1795/5033/1259 1793/5034/1259 1797/5035/1259 1799/5036/1259 +f 1800/5037/1260 1798/5038/1260 1794/5039/1260 1796/5040/1260 +f 1804/5041/1261 1802/5042/1261 1801/5043/1261 1803/5044/1261 +f 1807/5045/1262 1805/5046/1262 1806/5047/1262 1808/5048/1262 +f 1801/5049/1263 1802/5050/1263 1806/5051/1263 1805/5052/1263 +f 1804/5053/1264 1803/5054/1264 1807/5055/1264 1808/5056/1264 +f 1803/5057/1265 1801/5058/1265 1805/5059/1265 1807/5060/1265 +f 1808/5061/1266 1806/5062/1266 1802/5063/1266 1804/5064/1266 +f 1809/5065/1267 1810/5066/1267 1812/5067/1267 1811/5068/1267 +f 1814/5069/1268 1813/5070/1268 1815/5071/1268 1816/5072/1268 +f 1814/5073/1269 1810/5074/1269 1809/5075/1269 1813/5076/1269 +f 1815/5077/1270 1811/5078/1270 1812/5079/1270 1816/5080/1270 +f 1813/5081/1271 1809/5082/1271 1811/5083/1271 1815/5084/1271 +f 1810/5085/1272 1814/5086/1272 1816/5087/1272 1812/5088/1272 +f 1820/5089/1273 1818/5090/1273 1817/5091/1273 1819/5092/1273 +f 1823/5093/1274 1821/5094/1274 1822/5095/1274 1824/5096/1274 +f 1817/5097/1275 1818/5098/1275 1822/5099/1275 1821/5100/1275 +f 1820/5101/1276 1819/5102/1276 1823/5103/1276 1824/5104/1276 +f 1819/5105/1277 1817/5106/1277 1821/5107/1277 1823/5108/1277 +f 1824/5109/1278 1822/5110/1278 1818/5111/1278 1820/5112/1278 +f 1825/5113/1279 1826/5114/1279 1828/5115/1279 1827/5116/1279 +f 1830/5117/1280 1829/5118/1280 1831/5119/1280 1832/5120/1280 +f 1830/5121/1281 1826/5122/1281 1825/5123/1281 1829/5124/1281 +f 1831/5125/1282 1827/5126/1282 1828/5127/1282 1832/5128/1282 +f 1829/5129/1283 1825/5130/1283 1827/5131/1283 1831/5132/1283 +f 1826/5133/1284 1830/5134/1284 1832/5135/1284 1828/5136/1284 +f 1836/5137/1285 1834/5138/1285 1833/5139/1285 1835/5140/1285 +f 1839/5141/1286 1837/5142/1286 1838/5143/1286 1840/5144/1286 +f 1833/5145/1287 1834/5146/1287 1838/5147/1287 1837/5148/1287 +f 1836/5149/1288 1835/5150/1288 1839/5151/1288 1840/5152/1288 +f 1835/5153/1289 1833/5154/1289 1837/5155/1289 1839/5156/1289 +f 1840/5157/1290 1838/5158/1290 1834/5159/1290 1836/5160/1290 +f 1841/5161/1291 1842/5162/1291 1844/5163/1291 1843/5164/1291 +f 1846/5165/1292 1845/5166/1292 1847/5167/1292 1848/5168/1292 +f 1846/5169/1293 1842/5170/1293 1841/5171/1293 1845/5172/1293 +f 1847/5173/1294 1843/5174/1294 1844/5175/1294 1848/5176/1294 +f 1845/5177/1295 1841/5178/1295 1843/5179/1295 1847/5180/1295 +f 1842/5181/1296 1846/5182/1296 1848/5183/1296 1844/5184/1296 +f 1852/5185/1297 1850/5186/1297 1849/5187/1297 1851/5188/1297 +f 1855/5189/1298 1853/5190/1298 1854/5191/1298 1856/5192/1298 +f 1849/5193/1299 1850/5194/1299 1854/5195/1299 1853/5196/1299 +f 1852/5197/1300 1851/5198/1300 1855/5199/1300 1856/5200/1300 +f 1851/5201/1301 1849/5202/1301 1853/5203/1301 1855/5204/1301 +f 1856/5205/1302 1854/5206/1302 1850/5207/1302 1852/5208/1302 +f 1857/5209/1303 1858/5210/1303 1860/5211/1303 1859/5212/1303 +f 1862/5213/1304 1861/5214/1304 1863/5215/1304 1864/5216/1304 +f 1862/5217/1305 1858/5218/1305 1857/5219/1305 1861/5220/1305 +f 1863/5221/1306 1859/5222/1306 1860/5223/1306 1864/5224/1306 +f 1861/5225/1307 1857/5226/1307 1859/5227/1307 1863/5228/1307 +f 1858/5229/1308 1862/5230/1308 1864/5231/1308 1860/5232/1308 +f 1868/5233/1309 1866/5234/1309 1865/5235/1309 1867/5236/1309 +f 1871/5237/1310 1869/5238/1310 1870/5239/1310 1872/5240/1310 +f 1865/5241/1311 1866/5242/1311 1870/5243/1311 1869/5244/1311 +f 1868/5245/1312 1867/5246/1312 1871/5247/1312 1872/5248/1312 +f 1867/5249/1313 1865/5250/1313 1869/5251/1313 1871/5252/1313 +f 1876/5253/1314 1874/5254/1314 1873/5255/1314 1875/5256/1314 +f 1879/5257/1315 1877/5258/1315 1878/5259/1315 1880/5260/1315 +f 1873/5261/1316 1874/5262/1316 1878/5263/1316 1877/5264/1316 +f 1876/5265/1317 1875/5266/1317 1879/5267/1317 1880/5268/1317 +f 1884/5269/1318 1882/5270/1318 1881/5271/1318 1883/5272/1318 +f 1887/5273/1319 1885/5274/1319 1886/5275/1319 1888/5276/1319 +f 1881/5277/1320 1882/5278/1320 1886/5279/1320 1885/5280/1320 +f 1884/5281/1321 1883/5282/1321 1887/5283/1321 1888/5284/1321 +f 1883/5285/1322 1881/5286/1322 1885/5287/1322 1887/5288/1322 +f 1892/5289/1323 1890/5290/1323 1889/5291/1323 1891/5292/1323 +f 1895/5293/1324 1893/5294/1324 1894/5295/1324 1896/5296/1324 +f 1889/5297/1325 1890/5298/1325 1894/5299/1325 1893/5300/1325 +f 1892/5301/1326 1891/5302/1326 1895/5303/1326 1896/5304/1326 +f 1891/5305/1327 1889/5306/1327 1893/5307/1327 1895/5308/1327 +f 1900/5309/1328 1898/5310/1328 1897/5311/1328 1899/5312/1328 +f 1903/5313/1329 1901/5314/1329 1902/5315/1329 1904/5316/1329 +f 1897/5317/1330 1898/5318/1330 1902/5319/1330 1901/5320/1330 +f 1900/5321/1331 1899/5322/1331 1903/5323/1331 1904/5324/1331 +f 1908/5325/1332 1906/5326/1332 1905/5327/1332 1907/5328/1332 +f 1911/5329/1333 1909/5330/1333 1910/5331/1333 1912/5332/1333 +f 1905/5333/1334 1906/5334/1334 1910/5335/1334 1909/5336/1334 +f 1908/5337/1335 1907/5338/1335 1911/5339/1335 1912/5340/1335 +f 1907/5341/1336 1905/5342/1336 1909/5343/1336 1911/5344/1336 +f 1916/5345/1337 1914/5346/1337 1913/5347/1337 1915/5348/1337 +f 1913/5349/1338 1914/5350/1338 1918/5351/1338 1917/5352/1338 +f 1916/5353/1339 1915/5354/1339 1919/5355/1339 1920/5356/1339 +f 1915/5357/1340 1913/5358/1340 1917/5359/1340 1919/5360/1340 +f 1920/5361/1341 1918/5362/1341 1914/5363/1341 1916/5364/1341 +f 1921/5365/1342 1922/5366/1342 1924/5367/1342 1923/5368/1342 +f 1926/5369/1343 1922/5370/1343 1921/5371/1343 1925/5372/1343 +f 1927/5373/1344 1923/5374/1344 1924/5375/1344 1928/5376/1344 +f 1925/5377/1345 1921/5378/1345 1923/5379/1345 1927/5380/1345 +f 1922/5381/1346 1926/5382/1346 1928/5383/1346 1924/5384/1346 o RightWheelRear1 -v 0.875 1.0624999696333308 2.249999969633331 -v 0.875 1.0624999696333308 1.8750000303666692 -v 0.875 0.6875000303666692 2.249999969633331 -v 0.875 0.6875000303666692 1.8750000303666692 -v 0.75 1.0624999696333308 2.249999969633331 -v 0.75 1.0624999696333308 1.8750000303666692 -v 0.75 0.6875000303666692 2.249999969633331 -v 0.75 0.6875000303666692 1.8750000303666692 -v 1 1.162262129857035 2.217179608384557 -v 1 1.0296796083845572 2.349762129857035 -v 1 1.2064563036811942 2.2613737822087163 -v 1 1.0738737822087165 2.393956303681194 -v 0.625 1.162262129857035 2.217179608384557 -v 0.625 1.0296796083845572 2.349762129857035 -v 0.625 1.2064563036811942 2.2613737822087163 -v 0.625 1.0738737822087165 2.393956303681194 -v 1 0.5877378701429651 2.217179608384557 -v 1 0.7203203916154427 2.349762129857035 -v 1 0.5435436963188058 2.2613737822087163 -v 1 0.6761262177912835 2.393956303681194 -v 0.625 0.5877378701429651 2.217179608384557 -v 0.625 0.7203203916154427 2.349762129857035 -v 0.625 0.5435436963188058 2.2613737822087163 -v 0.625 0.6761262177912835 2.393956303681194 -v 1 0.5877378701429651 1.9078203916154428 -v 1 0.7203203916154427 1.775237870142965 -v 1 0.5435436963188058 1.8636262177912835 -v 1 0.6761262177912836 1.7310436963188058 -v 0.625 0.5877378701429651 1.9078203916154428 -v 0.625 0.7203203916154428 1.775237870142965 -v 0.625 0.5435436963188058 1.8636262177912835 -v 0.625 0.6761262177912836 1.7310436963188058 -v 1 1.162262129857035 1.9078203916154428 -v 1 1.0296796083845572 1.775237870142965 -v 1 1.2064563036811942 1.8636262177912835 -v 1 1.0738737822087165 1.7310436963188058 -v 0.625 1.162262129857035 1.9078203916154428 -v 0.625 1.0296796083845572 1.775237870142965 -v 0.625 1.2064563036811942 1.8636262177912837 -v 0.625 1.0738737822087165 1.7310436963188058 -v 1 0.9687499848166654 2.3749996547610595 -v 1 0.7812500151833346 2.3749996547610595 -v 1 0.9687499848166654 2.4374999392666616 -v 1 0.7812500151833345 2.4374999392666616 -v 0.625 0.9687499848166654 2.3749996547610595 -v 0.625 0.7812500151833346 2.3749996547610595 -v 0.625 0.9687499848166654 2.4374999392666616 -v 0.625 0.7812500151833346 2.4374999392666616 -v 1 0.5625003452389407 1.9687500151833346 -v 1 0.5625003452389407 2.1562499848166654 -v 1 0.5000000607333382 1.9687500151833346 -v 1 0.5000000607333382 2.1562499848166654 -v 0.625 0.5625003452389408 1.9687500151833346 -v 0.625 0.5625003452389408 2.1562499848166654 -v 0.625 0.5000000607333384 1.9687500151833346 -v 0.625 0.5000000607333382 2.1562499848166654 -v 1 0.7812500151833346 1.7500003452389405 -v 1 0.9687499848166654 1.7500003452389408 -v 1 0.7812500151833346 1.6875000607333384 -v 1 0.9687499848166654 1.6875000607333384 -v 0.625 0.7812500151833346 1.7500003452389408 -v 0.625 0.9687499848166654 1.7500003452389408 -v 0.625 0.7812500151833346 1.6875000607333384 -v 0.625 0.9687499848166655 1.6875000607333384 -v 1 1.1874996547610592 2.1562499848166654 -v 1 1.1874996547610592 1.9687500151833346 -v 1 1.2499999392666616 2.1562499848166654 -v 1 1.2499999392666616 1.9687500151833346 -v 0.625 1.1874996547610595 2.1562499848166654 -v 0.625 1.1874996547610595 1.9687500151833346 -v 0.625 1.2499999392666616 2.1562499848166654 -v 0.625 1.2499999392666616 1.9687500151833346 -v 0.875 1.0000001270694667 1.7499999032972025 -v 0.875 1.1875000967027975 1.9374998729305333 -v 0.875 0.7499998729305334 1.7499999032972025 -v 0.875 0.5624999032972025 1.9374998729305333 -v 0.9375 1.0000001270694667 1.7499999032972025 -v 0.9375 1.1875000967027975 1.9374998729305333 -v 0.9375 0.7499998729305334 1.7499999032972025 -v 0.9375 0.5624999032972025 1.9374998729305333 -v 0.9375 1.1875000967027975 2.1875001270694665 -v 0.9375 1.1875000967027975 1.9374998729305333 -v 0.9375 0.5624999032972025 2.1875001270694665 -v 0.9375 0.5624999032972025 1.9374998729305333 -v 0.875 1.1875000967027975 2.1875001270694665 -v 0.875 1.1875000967027975 1.9374998729305333 -v 0.875 0.5624999032972025 2.1875001270694665 -v 0.875 0.5624999032972025 1.9374998729305333 -v 0.9375 1.0000001270694667 2.3750000967027978 -v 0.9375 1.1875000967027975 2.1875001270694665 -v 0.9375 0.7499998729305333 2.3750000967027973 -v 0.9375 0.5624999032972025 2.1875001270694665 -v 0.875 1.0000001270694667 2.3750000967027978 -v 0.875 1.1875000967027975 2.1875001270694665 -v 0.875 0.7499998729305333 2.3750000967027978 -v 0.875 0.5624999032972025 2.1875001270694665 -v 0.6875 1.0000001270694667 1.7499999032972025 -v 0.6875 1.1875000967027975 1.9374998729305335 -v 0.6875 0.7499998729305334 1.7499999032972025 -v 0.6875 0.5624999032972025 1.9374998729305333 -v 0.75 1.0000001270694667 1.7499999032972025 -v 0.75 1.1875000967027975 1.9374998729305333 -v 0.75 0.7499998729305334 1.7499999032972025 -v 0.75 0.5624999032972025 1.9374998729305333 -v 0.75 1.1875000967027975 2.1875001270694665 -v 0.75 1.1875000967027975 1.9374998729305333 -v 0.75 0.5624999032972025 2.1875001270694665 -v 0.75 0.5624999032972025 1.9374998729305333 -v 0.6875 1.1875000967027975 2.1875001270694665 -v 0.6875 1.1875000967027975 1.9374998729305335 -v 0.6875 0.5624999032972025 2.1875001270694665 -v 0.6875 0.5624999032972025 1.9374998729305333 -v 0.75 1.0000001270694667 2.3750000967027978 -v 0.75 1.1875000967027975 2.1875001270694665 -v 0.75 0.7499998729305333 2.3750000967027978 -v 0.75 0.5624999032972025 2.1875001270694665 -v 0.6875 1.0000001270694667 2.3750000967027978 -v 0.6875 1.1875000967027975 2.1875001270694665 -v 0.6875 0.7499998729305333 2.3750000967027978 -v 0.6875 0.5624999032972025 2.1875001270694665 -v 1 1.0624999696333308 2.249999969633331 -v 1 1.0624999696333308 1.8750000303666692 -v 1 0.6875000303666691 2.249999969633331 -v 1 0.6875000303666692 1.8750000303666692 -v 0.9375 1.0624999696333308 2.249999969633331 -v 0.9375 1.0624999696333308 1.8750000303666692 -v 0.9375 0.6875000303666692 2.249999969633331 -v 0.9375 0.6875000303666692 1.8750000303666692 -v 0.625 1.0624999696333308 2.249999969633331 -v 0.625 1.0624999696333308 1.8750000303666692 -v 0.625 0.6875000303666692 2.249999969633331 -v 0.625 0.6875000303666692 1.8750000303666692 -v 0.6875 1.0624999696333308 2.249999969633331 -v 0.6875 1.0624999696333308 1.8750000303666692 -v 0.6875 0.6875000303666692 2.249999969633331 -v 0.6875 0.6875000303666692 1.8750000303666692 +v 0.875 1.0625 2.25 +v 0.875 1.0625 1.875 +v 0.875 0.6875 2.25 +v 0.875 0.6875 1.875 +v 0.75 1.0625 2.25 +v 0.75 1.0625 1.875 +v 0.75 0.6875 2.25 +v 0.75 0.6875 1.875 +v 1 1.1623 2.2172 +v 1 1.0297 2.3498 +v 1 1.2065 2.2614 +v 1 1.0739 2.394 +v 0.625 1.1623 2.2172 +v 0.625 1.0297 2.3498 +v 0.625 1.2065 2.2614 +v 0.625 1.0739 2.394 +v 1 0.5877 2.2172 +v 1 0.7203 2.3498 +v 1 0.5435 2.2614 +v 1 0.6761 2.394 +v 0.625 0.5877 2.2172 +v 0.625 0.7203 2.3498 +v 0.625 0.5435 2.2614 +v 0.625 0.6761 2.394 +v 1 0.5877 1.9078 +v 1 0.7203 1.7752 +v 1 0.5435 1.8636 +v 1 0.6761 1.731 +v 0.625 0.5877 1.9078 +v 0.625 0.7203 1.7752 +v 0.625 0.5435 1.8636 +v 0.625 0.6761 1.731 +v 1 1.1623 1.9078 +v 1 1.0297 1.7752 +v 1 1.2065 1.8636 +v 1 1.0739 1.731 +v 0.625 1.1623 1.9078 +v 0.625 1.0297 1.7752 +v 0.625 1.2065 1.8636 +v 0.625 1.0739 1.731 +v 1 0.9687 2.375 +v 1 0.7813 2.375 +v 1 0.9687 2.4375 +v 1 0.7813 2.4375 +v 0.625 0.9687 2.375 +v 0.625 0.7813 2.375 +v 0.625 0.9687 2.4375 +v 0.625 0.7813 2.4375 +v 1 0.5625 1.9688 +v 1 0.5625 2.1562 +v 1 0.5 1.9688 +v 1 0.5 2.1562 +v 0.625 0.5625 1.9688 +v 0.625 0.5625 2.1562 +v 0.625 0.5 1.9688 +v 0.625 0.5 2.1562 +v 1 0.7813 1.75 +v 1 0.9687 1.75 +v 1 0.7813 1.6875 +v 1 0.9687 1.6875 +v 0.625 0.7813 1.75 +v 0.625 0.9687 1.75 +v 0.625 0.7813 1.6875 +v 0.625 0.9687 1.6875 +v 1 1.1875 2.1562 +v 1 1.1875 1.9688 +v 1 1.25 2.1562 +v 1 1.25 1.9688 +v 0.625 1.1875 2.1562 +v 0.625 1.1875 1.9688 +v 0.625 1.25 2.1562 +v 0.625 1.25 1.9688 +v 0.875 1 1.75 +v 0.875 1.1875 1.9375 +v 0.875 0.75 1.75 +v 0.875 0.5625 1.9375 +v 0.9375 1 1.75 +v 0.9375 1.1875 1.9375 +v 0.9375 0.75 1.75 +v 0.9375 0.5625 1.9375 +v 0.9375 1.1875 2.1875 +v 0.9375 1.1875 1.9375 +v 0.9375 0.5625 2.1875 +v 0.9375 0.5625 1.9375 +v 0.875 1.1875 2.1875 +v 0.875 1.1875 1.9375 +v 0.875 0.5625 2.1875 +v 0.875 0.5625 1.9375 +v 0.9375 1 2.375 +v 0.9375 1.1875 2.1875 +v 0.9375 0.75 2.375 +v 0.9375 0.5625 2.1875 +v 0.875 1 2.375 +v 0.875 1.1875 2.1875 +v 0.875 0.75 2.375 +v 0.875 0.5625 2.1875 +v 0.6875 1 1.75 +v 0.6875 1.1875 1.9375 +v 0.6875 0.75 1.75 +v 0.6875 0.5625 1.9375 +v 0.75 1 1.75 +v 0.75 1.1875 1.9375 +v 0.75 0.75 1.75 +v 0.75 0.5625 1.9375 +v 0.75 1.1875 2.1875 +v 0.75 1.1875 1.9375 +v 0.75 0.5625 2.1875 +v 0.75 0.5625 1.9375 +v 0.6875 1.1875 2.1875 +v 0.6875 1.1875 1.9375 +v 0.6875 0.5625 2.1875 +v 0.6875 0.5625 1.9375 +v 0.75 1 2.375 +v 0.75 1.1875 2.1875 +v 0.75 0.75 2.375 +v 0.75 0.5625 2.1875 +v 0.6875 1 2.375 +v 0.6875 1.1875 2.1875 +v 0.6875 0.75 2.375 +v 0.6875 0.5625 2.1875 +v 1 1.0625 2.25 +v 1 1.0625 1.875 +v 1 0.6875 2.25 +v 1 0.6875 1.875 +v 0.9375 1.0625 2.25 +v 0.9375 1.0625 1.875 +v 0.9375 0.6875 2.25 +v 0.9375 0.6875 1.875 +v 0.625 1.0625 2.25 +v 0.625 1.0625 1.875 +v 0.625 0.6875 2.25 +v 0.625 0.6875 1.875 +v 0.6875 1.0625 2.25 +v 0.6875 1.0625 1.875 +v 0.6875 0.6875 2.25 +v 0.6875 0.6875 1.875 vt 0.0625 0.6875 vt 0.0625 0.5 vt 0 0.5 @@ -11800,13 +10453,13 @@ vt 0.0625 0.5 vt 0 0.5 vt 0 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -11816,21 +10469,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -11839,22 +10492,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -11864,21 +10517,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -11887,22 +10540,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -11912,21 +10565,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -11935,22 +10588,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -11960,21 +10613,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -11983,574 +10636,484 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.175 0.5625 vt 0.175 0.9375 vt 0.0625 0.825 vt 0.0625 0.675 -vt 0.0625025 0.8249984375 -vt 0.0625 0.6749974999999999 -vt 0.1749990625 0.5624984375 -vt 0.1749990625 0.9375 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0625 0.825 +vt 0.0625 0.675 +vt 0.175 0.5625 +vt 0.175 0.9375 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 vt 0.175 0.9375 -vt 0.175 0.5624984375 -vt 0.3250040625 0.5624984375 -vt 0.3250040625 0.9375 +vt 0.175 0.5625 +vt 0.325 0.5625 +vt 0.325 0.9375 vt 0.325 0.5625 vt 0.325 0.9375 vt 0.175 0.9375 vt 0.175 0.5625 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 vt 0.325 0.9375 -vt 0.325 0.5624984375 -vt 0.4374990625 0.6749974999999999 -vt 0.4374990625 0.82500125 +vt 0.325 0.5625 +vt 0.4375 0.675 +vt 0.4375 0.825 vt 0.4375 0.675 vt 0.4375 0.825 vt 0.325 0.9375 vt 0.325 0.5625 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 vt 0.175 0.5625 vt 0.175 0.9375 vt 0.0625 0.825 vt 0.0625 0.675 -vt 0.0625025 0.8249984375 -vt 0.0625 0.6749974999999999 -vt 0.1749990625 0.5624984375 -vt 0.1749990625 0.9375 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0625 0.825 +vt 0.0625 0.675 +vt 0.175 0.5625 +vt 0.175 0.9375 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 vt 0.175 0.9375 -vt 0.175 0.5624984375 -vt 0.3250040625 0.5624984375 -vt 0.3250040625 0.9375 +vt 0.175 0.5625 +vt 0.325 0.5625 +vt 0.325 0.9375 vt 0.325 0.5625 vt 0.325 0.9375 vt 0.175 0.9375 vt 0.175 0.5625 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 vt 0.325 0.9375 -vt 0.325 0.5624984375 -vt 0.4374990625 0.6749974999999999 -vt 0.4374990625 0.82500125 +vt 0.325 0.5625 +vt 0.4375 0.675 +vt 0.4375 0.825 vt 0.4375 0.675 vt 0.4375 0.825 vt 0.325 0.9375 vt 0.325 0.5625 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.09375 0.6875 -vt 0.09375 0.8125 +vt 0.0938 0.6875 +vt 0.0938 0.8125 vt 0.0625 0.8125 vt 0.0625 0.6875 -vt 0.71875 0.75 -vt 0.71875 0.9375 -vt 0.53125 0.9375 -vt 0.53125 0.75 -vt 0.53125 0.9375 -vt 0.53125 0.75 +vt 0.7188 0.75 +vt 0.7188 0.9375 +vt 0.5313 0.9375 +vt 0.5313 0.75 +vt 0.5313 0.9375 +vt 0.5313 0.75 vt 0.5625 0.75 vt 0.5625 0.9375 -vt 0.71875 0.75 -vt 0.71875 0.9375 +vt 0.7188 0.75 +vt 0.7188 0.9375 vt 0.6875 0.9375 vt 0.6875 0.75 vt 0.5625 0.75 vt 0.5625 0.9375 -vt 0.53125 0.9375 -vt 0.53125 0.75 -vt 0.71875 0.75 -vt 0.71875 0.9375 +vt 0.5313 0.9375 +vt 0.5313 0.75 +vt 0.7188 0.75 +vt 0.7188 0.9375 vt 0.6875 0.9375 vt 0.6875 0.75 -vt 0.53125 0.9375 -vt 0.71875 0.9375 -vt 0.71875 0.75 -vt 0.53125 0.75 +vt 0.5313 0.9375 +vt 0.7188 0.9375 +vt 0.7188 0.75 +vt 0.5313 0.75 vt 0.5625 0.75 -vt 0.53125 0.75 -vt 0.53125 0.9375 +vt 0.5313 0.75 +vt 0.5313 0.9375 vt 0.5625 0.9375 vt 0.6875 0.9375 -vt 0.71875 0.9375 -vt 0.71875 0.75 +vt 0.7188 0.9375 +vt 0.7188 0.75 vt 0.6875 0.75 -vt 0.53125 0.9375 +vt 0.5313 0.9375 vt 0.5625 0.9375 vt 0.5625 0.75 -vt 0.53125 0.75 +vt 0.5313 0.75 vt 0.6875 0.9375 -vt 0.71875 0.9375 -vt 0.71875 0.75 +vt 0.7188 0.9375 +vt 0.7188 0.75 vt 0.6875 0.75 -vn 8.659560562354933e-17 1 1.1102230246251565e-16 -vn -8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn 8.65956056235493e-17 -1.1102230246251565e-16 1 -vn -8.65956056235493e-17 1.1102230246251565e-16 -1 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn -1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn 1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn 1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn -1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn -1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn -1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn 1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn -1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn -1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn 1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn -1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn 1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn 1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn -1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.65956056235493e-17 1.1102230246251565e-16 -1 -vn 8.659560562354932e-17 -1.1102230246251568e-16 1 -vn 8.659560562354932e-17 1 -2.775557561562892e-16 -vn -8.659560562354934e-17 -1 -3.3306690738754696e-16 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.659560562354933e-17 1 1.1102230246251565e-16 -vn -8.659560562354934e-17 -1 -1.1102230246251568e-16 -vn -8.659560562354927e-17 3.3306690738754696e-16 -1 -vn 8.659560562354934e-17 2.775557561562892e-16 1 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.65956056235493e-17 -1.1102230246251565e-16 1 -vn -8.659560562354932e-17 1.1102230246251568e-16 -1 -vn -8.659560562354932e-17 -1 2.775557561562892e-16 -vn 8.659560562354934e-17 1 3.3306690738754696e-16 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn 8.659560562354934e-17 1 1.1102230246251568e-16 -vn 8.659560562354927e-17 -3.3306690738754696e-16 1 -vn -8.659560562354934e-17 -2.775557561562892e-16 -1 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn -1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn -8.659560562354932e-17 1.1102230246251568e-16 -1 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.659560562354934e-17 1 1.1102230246251568e-16 -vn -8.659560562354934e-17 -1 -1.1102230246251568e-16 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn -1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn 8.659560562354932e-17 -1.1102230246251568e-16 1 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn -1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn -8.659560562354932e-17 1.1102230246251568e-16 -1 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.659560562354934e-17 1 1.1102230246251568e-16 -vn -8.659560562354934e-17 -1 -1.1102230246251568e-16 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn -1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn 8.659560562354932e-17 -1.1102230246251568e-16 1 -vn 1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 8.659560562354933e-17 1 1.1102230246251565e-16 -vn -8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn 8.65956056235493e-17 -1.1102230246251565e-16 1 -vn -8.65956056235493e-17 1.1102230246251565e-16 -1 -vn -1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.659560562354933e-17 1 1.1102230246251565e-16 -vn -8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn 8.65956056235493e-17 -1.1102230246251565e-16 1 -vn -8.65956056235493e-17 1.1102230246251565e-16 -1 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.71 -0.71 +vn 0 0.71 0.71 +vn 0 0.71 -0.71 +vn 0 -0.71 0.71 +vn 1 0 0 +vn -1 0 0 +vn 0 0.71 -0.71 +vn 0 -0.71 0.71 +vn 0 -0.71 -0.71 +vn 0 0.71 0.71 +vn 1 0 0 +vn -1 0 0 +vn 0 0.71 0.71 +vn 0 -0.71 -0.71 +vn 0 -0.71 0.71 +vn 0 0.71 -0.71 +vn 1 0 0 +vn -1 0 0 +vn 0 -0.71 0.71 +vn 0 0.71 -0.71 +vn 0 0.71 0.71 +vn 0 -0.71 -0.71 +vn 1 0 0 +vn -1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 0 1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 0.71 -0.71 +vn 0 -0.71 -0.71 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0.71 0.71 +vn 0 -0.71 0.71 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 0.71 -0.71 +vn 0 -0.71 -0.71 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 1 0 0 +vn -1 0 0 +vn 0 0.71 0.71 +vn 0 -0.71 0.71 +vn 0 0 1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 usemtl tracks14_12 -f 1929/5385/1347 1930/5386/1347 1934/5387/1347 -f 1929/5385/1347 1934/5387/1347 1933/5388/1347 -f 1932/5389/1348 1931/5390/1348 1935/5391/1348 -f 1932/5389/1348 1935/5391/1348 1936/5392/1348 -f 1931/5393/1349 1929/5394/1349 1933/5395/1349 -f 1931/5393/1349 1933/5395/1349 1935/5396/1349 -f 1936/5397/1350 1934/5398/1350 1930/5399/1350 -f 1936/5397/1350 1930/5399/1350 1932/5400/1350 -f 1940/5401/1351 1938/5402/1351 1937/5403/1351 -f 1940/5401/1351 1937/5403/1351 1939/5404/1351 -f 1943/5405/1352 1941/5406/1352 1942/5407/1352 -f 1943/5405/1352 1942/5407/1352 1944/5408/1352 -f 1937/5409/1353 1938/5410/1353 1942/5411/1353 -f 1937/5409/1353 1942/5411/1353 1941/5412/1353 -f 1940/5413/1354 1939/5414/1354 1943/5415/1354 -f 1940/5413/1354 1943/5415/1354 1944/5416/1354 -f 1939/5417/1355 1937/5418/1355 1941/5419/1355 -f 1939/5417/1355 1941/5419/1355 1943/5420/1355 -f 1944/5421/1356 1942/5422/1356 1938/5423/1356 -f 1944/5421/1356 1938/5423/1356 1940/5424/1356 -f 1945/5425/1357 1946/5426/1357 1948/5427/1357 -f 1945/5425/1357 1948/5427/1357 1947/5428/1357 -f 1950/5429/1358 1949/5430/1358 1951/5431/1358 -f 1950/5429/1358 1951/5431/1358 1952/5432/1358 -f 1950/5433/1359 1946/5434/1359 1945/5435/1359 -f 1950/5433/1359 1945/5435/1359 1949/5436/1359 -f 1951/5437/1360 1947/5438/1360 1948/5439/1360 -f 1951/5437/1360 1948/5439/1360 1952/5440/1360 -f 1949/5441/1361 1945/5442/1361 1947/5443/1361 -f 1949/5441/1361 1947/5443/1361 1951/5444/1361 -f 1946/5445/1362 1950/5446/1362 1952/5447/1362 -f 1946/5445/1362 1952/5447/1362 1948/5448/1362 -f 1956/5449/1363 1954/5450/1363 1953/5451/1363 -f 1956/5449/1363 1953/5451/1363 1955/5452/1363 -f 1959/5453/1364 1957/5454/1364 1958/5455/1364 -f 1959/5453/1364 1958/5455/1364 1960/5456/1364 -f 1953/5457/1365 1954/5458/1365 1958/5459/1365 -f 1953/5457/1365 1958/5459/1365 1957/5460/1365 -f 1956/5461/1366 1955/5462/1366 1959/5463/1366 -f 1956/5461/1366 1959/5463/1366 1960/5464/1366 -f 1955/5465/1367 1953/5466/1367 1957/5467/1367 -f 1955/5465/1367 1957/5467/1367 1959/5468/1367 -f 1960/5469/1368 1958/5470/1368 1954/5471/1368 -f 1960/5469/1368 1954/5471/1368 1956/5472/1368 -f 1961/5473/1369 1962/5474/1369 1964/5475/1369 -f 1961/5473/1369 1964/5475/1369 1963/5476/1369 -f 1966/5477/1370 1965/5478/1370 1967/5479/1370 -f 1966/5477/1370 1967/5479/1370 1968/5480/1370 -f 1966/5481/1371 1962/5482/1371 1961/5483/1371 -f 1966/5481/1371 1961/5483/1371 1965/5484/1371 -f 1967/5485/1372 1963/5486/1372 1964/5487/1372 -f 1967/5485/1372 1964/5487/1372 1968/5488/1372 -f 1965/5489/1373 1961/5490/1373 1963/5491/1373 -f 1965/5489/1373 1963/5491/1373 1967/5492/1373 -f 1962/5493/1374 1966/5494/1374 1968/5495/1374 -f 1962/5493/1374 1968/5495/1374 1964/5496/1374 -f 1972/5497/1375 1970/5498/1375 1969/5499/1375 -f 1972/5497/1375 1969/5499/1375 1971/5500/1375 -f 1975/5501/1376 1973/5502/1376 1974/5503/1376 -f 1975/5501/1376 1974/5503/1376 1976/5504/1376 -f 1969/5505/1377 1970/5506/1377 1974/5507/1377 -f 1969/5505/1377 1974/5507/1377 1973/5508/1377 -f 1972/5509/1378 1971/5510/1378 1975/5511/1378 -f 1972/5509/1378 1975/5511/1378 1976/5512/1378 -f 1971/5513/1379 1969/5514/1379 1973/5515/1379 -f 1971/5513/1379 1973/5515/1379 1975/5516/1379 -f 1976/5517/1380 1974/5518/1380 1970/5519/1380 -f 1976/5517/1380 1970/5519/1380 1972/5520/1380 -f 1977/5521/1381 1978/5522/1381 1980/5523/1381 -f 1977/5521/1381 1980/5523/1381 1979/5524/1381 -f 1982/5525/1382 1981/5526/1382 1983/5527/1382 -f 1982/5525/1382 1983/5527/1382 1984/5528/1382 -f 1982/5529/1383 1978/5530/1383 1977/5531/1383 -f 1982/5529/1383 1977/5531/1383 1981/5532/1383 -f 1983/5533/1384 1979/5534/1384 1980/5535/1384 -f 1983/5533/1384 1980/5535/1384 1984/5536/1384 -f 1981/5537/1385 1977/5538/1385 1979/5539/1385 -f 1981/5537/1385 1979/5539/1385 1983/5540/1385 -f 1978/5541/1386 1982/5542/1386 1984/5543/1386 -f 1978/5541/1386 1984/5543/1386 1980/5544/1386 -f 1988/5545/1387 1986/5546/1387 1985/5547/1387 -f 1988/5545/1387 1985/5547/1387 1987/5548/1387 -f 1991/5549/1388 1989/5550/1388 1990/5551/1388 -f 1991/5549/1388 1990/5551/1388 1992/5552/1388 -f 1985/5553/1389 1986/5554/1389 1990/5555/1389 -f 1985/5553/1389 1990/5555/1389 1989/5556/1389 -f 1988/5557/1390 1987/5558/1390 1991/5559/1390 -f 1988/5557/1390 1991/5559/1390 1992/5560/1390 -f 1987/5561/1391 1985/5562/1391 1989/5563/1391 -f 1987/5561/1391 1989/5563/1391 1991/5564/1391 -f 1992/5565/1392 1990/5566/1392 1986/5567/1392 -f 1992/5565/1392 1986/5567/1392 1988/5568/1392 -f 1993/5569/1393 1994/5570/1393 1996/5571/1393 -f 1993/5569/1393 1996/5571/1393 1995/5572/1393 -f 1998/5573/1394 1997/5574/1394 1999/5575/1394 -f 1998/5573/1394 1999/5575/1394 2000/5576/1394 -f 1998/5577/1395 1994/5578/1395 1993/5579/1395 -f 1998/5577/1395 1993/5579/1395 1997/5580/1395 -f 1999/5581/1396 1995/5582/1396 1996/5583/1396 -f 1999/5581/1396 1996/5583/1396 2000/5584/1396 -f 1997/5585/1397 1993/5586/1397 1995/5587/1397 -f 1997/5585/1397 1995/5587/1397 1999/5588/1397 -f 1994/5589/1398 1998/5590/1398 2000/5591/1398 -f 1994/5589/1398 2000/5591/1398 1996/5592/1398 -f 2004/5593/1399 2002/5594/1399 2001/5595/1399 -f 2004/5593/1399 2001/5595/1399 2003/5596/1399 -f 2007/5597/1400 2005/5598/1400 2006/5599/1400 -f 2007/5597/1400 2006/5599/1400 2008/5600/1400 -f 2001/5601/1401 2002/5602/1401 2006/5603/1401 -f 2001/5601/1401 2006/5603/1401 2005/5604/1401 -f 2004/5605/1402 2003/5606/1402 2007/5607/1402 -f 2004/5605/1402 2007/5607/1402 2008/5608/1402 -f 2003/5609/1403 2001/5610/1403 2005/5611/1403 -f 2003/5609/1403 2005/5611/1403 2007/5612/1403 -f 2012/5613/1404 2010/5614/1404 2009/5615/1404 -f 2012/5613/1404 2009/5615/1404 2011/5616/1404 -f 2015/5617/1405 2013/5618/1405 2014/5619/1405 -f 2015/5617/1405 2014/5619/1405 2016/5620/1405 -f 2009/5621/1406 2010/5622/1406 2014/5623/1406 -f 2009/5621/1406 2014/5623/1406 2013/5624/1406 -f 2012/5625/1407 2011/5626/1407 2015/5627/1407 -f 2012/5625/1407 2015/5627/1407 2016/5628/1407 -f 2020/5629/1408 2018/5630/1408 2017/5631/1408 -f 2020/5629/1408 2017/5631/1408 2019/5632/1408 -f 2023/5633/1409 2021/5634/1409 2022/5635/1409 -f 2023/5633/1409 2022/5635/1409 2024/5636/1409 -f 2017/5637/1410 2018/5638/1410 2022/5639/1410 -f 2017/5637/1410 2022/5639/1410 2021/5640/1410 -f 2020/5641/1411 2019/5642/1411 2023/5643/1411 -f 2020/5641/1411 2023/5643/1411 2024/5644/1411 -f 2019/5645/1412 2017/5646/1412 2021/5647/1412 -f 2019/5645/1412 2021/5647/1412 2023/5648/1412 -f 2028/5649/1413 2026/5650/1413 2025/5651/1413 -f 2028/5649/1413 2025/5651/1413 2027/5652/1413 -f 2031/5653/1414 2029/5654/1414 2030/5655/1414 -f 2031/5653/1414 2030/5655/1414 2032/5656/1414 -f 2025/5657/1415 2026/5658/1415 2030/5659/1415 -f 2025/5657/1415 2030/5659/1415 2029/5660/1415 -f 2028/5661/1416 2027/5662/1416 2031/5663/1416 -f 2028/5661/1416 2031/5663/1416 2032/5664/1416 -f 2027/5665/1417 2025/5666/1417 2029/5667/1417 -f 2027/5665/1417 2029/5667/1417 2031/5668/1417 -f 2036/5669/1418 2034/5670/1418 2033/5671/1418 -f 2036/5669/1418 2033/5671/1418 2035/5672/1418 -f 2039/5673/1419 2037/5674/1419 2038/5675/1419 -f 2039/5673/1419 2038/5675/1419 2040/5676/1419 -f 2033/5677/1420 2034/5678/1420 2038/5679/1420 -f 2033/5677/1420 2038/5679/1420 2037/5680/1420 -f 2036/5681/1421 2035/5682/1421 2039/5683/1421 -f 2036/5681/1421 2039/5683/1421 2040/5684/1421 -f 2044/5685/1422 2042/5686/1422 2041/5687/1422 -f 2044/5685/1422 2041/5687/1422 2043/5688/1422 -f 2047/5689/1423 2045/5690/1423 2046/5691/1423 -f 2047/5689/1423 2046/5691/1423 2048/5692/1423 -f 2041/5693/1424 2042/5694/1424 2046/5695/1424 -f 2041/5693/1424 2046/5695/1424 2045/5696/1424 -f 2044/5697/1425 2043/5698/1425 2047/5699/1425 -f 2044/5697/1425 2047/5699/1425 2048/5700/1425 -f 2043/5701/1426 2041/5702/1426 2045/5703/1426 -f 2043/5701/1426 2045/5703/1426 2047/5704/1426 -f 2052/5705/1427 2050/5706/1427 2049/5707/1427 -f 2052/5705/1427 2049/5707/1427 2051/5708/1427 -f 2049/5709/1428 2050/5710/1428 2054/5711/1428 -f 2049/5709/1428 2054/5711/1428 2053/5712/1428 -f 2052/5713/1429 2051/5714/1429 2055/5715/1429 -f 2052/5713/1429 2055/5715/1429 2056/5716/1429 -f 2051/5717/1430 2049/5718/1430 2053/5719/1430 -f 2051/5717/1430 2053/5719/1430 2055/5720/1430 -f 2056/5721/1431 2054/5722/1431 2050/5723/1431 -f 2056/5721/1431 2050/5723/1431 2052/5724/1431 -f 2057/5725/1432 2058/5726/1432 2060/5727/1432 -f 2057/5725/1432 2060/5727/1432 2059/5728/1432 -f 2062/5729/1433 2058/5730/1433 2057/5731/1433 -f 2062/5729/1433 2057/5731/1433 2061/5732/1433 -f 2063/5733/1434 2059/5734/1434 2060/5735/1434 -f 2063/5733/1434 2060/5735/1434 2064/5736/1434 -f 2061/5737/1435 2057/5738/1435 2059/5739/1435 -f 2061/5737/1435 2059/5739/1435 2063/5740/1435 -f 2058/5741/1436 2062/5742/1436 2064/5743/1436 -f 2058/5741/1436 2064/5743/1436 2060/5744/1436 +f 1929/5385/1347 1930/5386/1347 1934/5387/1347 1933/5388/1347 +f 1932/5389/1348 1931/5390/1348 1935/5391/1348 1936/5392/1348 +f 1931/5393/1349 1929/5394/1349 1933/5395/1349 1935/5396/1349 +f 1936/5397/1350 1934/5398/1350 1930/5399/1350 1932/5400/1350 +f 1940/5401/1351 1938/5402/1351 1937/5403/1351 1939/5404/1351 +f 1943/5405/1352 1941/5406/1352 1942/5407/1352 1944/5408/1352 +f 1937/5409/1353 1938/5410/1353 1942/5411/1353 1941/5412/1353 +f 1940/5413/1354 1939/5414/1354 1943/5415/1354 1944/5416/1354 +f 1939/5417/1355 1937/5418/1355 1941/5419/1355 1943/5420/1355 +f 1944/5421/1356 1942/5422/1356 1938/5423/1356 1940/5424/1356 +f 1945/5425/1357 1946/5426/1357 1948/5427/1357 1947/5428/1357 +f 1950/5429/1358 1949/5430/1358 1951/5431/1358 1952/5432/1358 +f 1950/5433/1359 1946/5434/1359 1945/5435/1359 1949/5436/1359 +f 1951/5437/1360 1947/5438/1360 1948/5439/1360 1952/5440/1360 +f 1949/5441/1361 1945/5442/1361 1947/5443/1361 1951/5444/1361 +f 1946/5445/1362 1950/5446/1362 1952/5447/1362 1948/5448/1362 +f 1956/5449/1363 1954/5450/1363 1953/5451/1363 1955/5452/1363 +f 1959/5453/1364 1957/5454/1364 1958/5455/1364 1960/5456/1364 +f 1953/5457/1365 1954/5458/1365 1958/5459/1365 1957/5460/1365 +f 1956/5461/1366 1955/5462/1366 1959/5463/1366 1960/5464/1366 +f 1955/5465/1367 1953/5466/1367 1957/5467/1367 1959/5468/1367 +f 1960/5469/1368 1958/5470/1368 1954/5471/1368 1956/5472/1368 +f 1961/5473/1369 1962/5474/1369 1964/5475/1369 1963/5476/1369 +f 1966/5477/1370 1965/5478/1370 1967/5479/1370 1968/5480/1370 +f 1966/5481/1371 1962/5482/1371 1961/5483/1371 1965/5484/1371 +f 1967/5485/1372 1963/5486/1372 1964/5487/1372 1968/5488/1372 +f 1965/5489/1373 1961/5490/1373 1963/5491/1373 1967/5492/1373 +f 1962/5493/1374 1966/5494/1374 1968/5495/1374 1964/5496/1374 +f 1972/5497/1375 1970/5498/1375 1969/5499/1375 1971/5500/1375 +f 1975/5501/1376 1973/5502/1376 1974/5503/1376 1976/5504/1376 +f 1969/5505/1377 1970/5506/1377 1974/5507/1377 1973/5508/1377 +f 1972/5509/1378 1971/5510/1378 1975/5511/1378 1976/5512/1378 +f 1971/5513/1379 1969/5514/1379 1973/5515/1379 1975/5516/1379 +f 1976/5517/1380 1974/5518/1380 1970/5519/1380 1972/5520/1380 +f 1977/5521/1381 1978/5522/1381 1980/5523/1381 1979/5524/1381 +f 1982/5525/1382 1981/5526/1382 1983/5527/1382 1984/5528/1382 +f 1982/5529/1383 1978/5530/1383 1977/5531/1383 1981/5532/1383 +f 1983/5533/1384 1979/5534/1384 1980/5535/1384 1984/5536/1384 +f 1981/5537/1385 1977/5538/1385 1979/5539/1385 1983/5540/1385 +f 1978/5541/1386 1982/5542/1386 1984/5543/1386 1980/5544/1386 +f 1988/5545/1387 1986/5546/1387 1985/5547/1387 1987/5548/1387 +f 1991/5549/1388 1989/5550/1388 1990/5551/1388 1992/5552/1388 +f 1985/5553/1389 1986/5554/1389 1990/5555/1389 1989/5556/1389 +f 1988/5557/1390 1987/5558/1390 1991/5559/1390 1992/5560/1390 +f 1987/5561/1391 1985/5562/1391 1989/5563/1391 1991/5564/1391 +f 1992/5565/1392 1990/5566/1392 1986/5567/1392 1988/5568/1392 +f 1993/5569/1393 1994/5570/1393 1996/5571/1393 1995/5572/1393 +f 1998/5573/1394 1997/5574/1394 1999/5575/1394 2000/5576/1394 +f 1998/5577/1395 1994/5578/1395 1993/5579/1395 1997/5580/1395 +f 1999/5581/1396 1995/5582/1396 1996/5583/1396 2000/5584/1396 +f 1997/5585/1397 1993/5586/1397 1995/5587/1397 1999/5588/1397 +f 1994/5589/1398 1998/5590/1398 2000/5591/1398 1996/5592/1398 +f 2004/5593/1399 2002/5594/1399 2001/5595/1399 2003/5596/1399 +f 2007/5597/1400 2005/5598/1400 2006/5599/1400 2008/5600/1400 +f 2001/5601/1401 2002/5602/1401 2006/5603/1401 2005/5604/1401 +f 2004/5605/1402 2003/5606/1402 2007/5607/1402 2008/5608/1402 +f 2003/5609/1403 2001/5610/1403 2005/5611/1403 2007/5612/1403 +f 2012/5613/1404 2010/5614/1404 2009/5615/1404 2011/5616/1404 +f 2015/5617/1405 2013/5618/1405 2014/5619/1405 2016/5620/1405 +f 2009/5621/1406 2010/5622/1406 2014/5623/1406 2013/5624/1406 +f 2012/5625/1407 2011/5626/1407 2015/5627/1407 2016/5628/1407 +f 2020/5629/1408 2018/5630/1408 2017/5631/1408 2019/5632/1408 +f 2023/5633/1409 2021/5634/1409 2022/5635/1409 2024/5636/1409 +f 2017/5637/1410 2018/5638/1410 2022/5639/1410 2021/5640/1410 +f 2020/5641/1411 2019/5642/1411 2023/5643/1411 2024/5644/1411 +f 2019/5645/1412 2017/5646/1412 2021/5647/1412 2023/5648/1412 +f 2028/5649/1413 2026/5650/1413 2025/5651/1413 2027/5652/1413 +f 2031/5653/1414 2029/5654/1414 2030/5655/1414 2032/5656/1414 +f 2025/5657/1415 2026/5658/1415 2030/5659/1415 2029/5660/1415 +f 2028/5661/1416 2027/5662/1416 2031/5663/1416 2032/5664/1416 +f 2027/5665/1417 2025/5666/1417 2029/5667/1417 2031/5668/1417 +f 2036/5669/1418 2034/5670/1418 2033/5671/1418 2035/5672/1418 +f 2039/5673/1419 2037/5674/1419 2038/5675/1419 2040/5676/1419 +f 2033/5677/1420 2034/5678/1420 2038/5679/1420 2037/5680/1420 +f 2036/5681/1421 2035/5682/1421 2039/5683/1421 2040/5684/1421 +f 2044/5685/1422 2042/5686/1422 2041/5687/1422 2043/5688/1422 +f 2047/5689/1423 2045/5690/1423 2046/5691/1423 2048/5692/1423 +f 2041/5693/1424 2042/5694/1424 2046/5695/1424 2045/5696/1424 +f 2044/5697/1425 2043/5698/1425 2047/5699/1425 2048/5700/1425 +f 2043/5701/1426 2041/5702/1426 2045/5703/1426 2047/5704/1426 +f 2052/5705/1427 2050/5706/1427 2049/5707/1427 2051/5708/1427 +f 2049/5709/1428 2050/5710/1428 2054/5711/1428 2053/5712/1428 +f 2052/5713/1429 2051/5714/1429 2055/5715/1429 2056/5716/1429 +f 2051/5717/1430 2049/5718/1430 2053/5719/1430 2055/5720/1430 +f 2056/5721/1431 2054/5722/1431 2050/5723/1431 2052/5724/1431 +f 2057/5725/1432 2058/5726/1432 2060/5727/1432 2059/5728/1432 +f 2062/5729/1433 2058/5730/1433 2057/5731/1433 2061/5732/1433 +f 2063/5733/1434 2059/5734/1434 2060/5735/1434 2064/5736/1434 +f 2061/5737/1435 2057/5738/1435 2059/5739/1435 2063/5740/1435 +f 2058/5741/1436 2062/5742/1436 2064/5743/1436 2060/5744/1436 o LeftWheelLead1 -v -0.875 1.0624999696333308 -0.12500003036666912 -v -0.875 1.0624999696333308 -0.4999999696333308 -v -0.875 0.6875000303666692 -0.12500003036666915 -v -0.875 0.6875000303666692 -0.4999999696333309 -v -0.75 1.0624999696333308 -0.12500003036666912 -v -0.75 1.0624999696333308 -0.4999999696333308 -v -0.75 0.6875000303666692 -0.12500003036666915 -v -0.75 0.6875000303666692 -0.4999999696333309 -v -1 1.162262129857035 -0.15782039161544276 -v -1 1.0296796083845572 -0.02523787014296508 -v -1 1.2064563036811942 -0.11362621779128346 -v -1 1.0738737822087165 0.018956303681194164 -v -0.625 1.162262129857035 -0.1578203916154427 -v -0.625 1.0296796083845572 -0.025237870142965024 -v -0.625 1.2064563036811942 -0.11362621779128346 -v -0.625 1.0738737822087165 0.018956303681194164 -v -1 0.5877378701429651 -0.15782039161544276 -v -1 0.7203203916154427 -0.02523787014296508 -v -1 0.5435436963188058 -0.11362621779128357 -v -1 0.6761262177912835 0.01895630368119411 -v -0.625 0.5877378701429651 -0.15782039161544276 -v -0.625 0.7203203916154427 -0.02523787014296508 -v -0.625 0.5435436963188058 -0.11362621779128351 -v -0.625 0.6761262177912835 0.018956303681194164 -v -1 0.5877378701429651 -0.4671796083845573 -v -1 0.7203203916154427 -0.599762129857035 -v -1 0.5435436963188058 -0.5113737822087165 -v -1 0.6761262177912836 -0.6439563036811942 -v -0.625 0.5877378701429651 -0.46717960838455724 -v -0.625 0.7203203916154428 -0.5997621298570349 -v -0.625 0.5435436963188058 -0.5113737822087165 -v -0.625 0.6761262177912836 -0.6439563036811942 -v -1 1.162262129857035 -0.46717960838455724 -v -1 1.0296796083845572 -0.5997621298570349 -v -1 1.2064563036811942 -0.5113737822087165 -v -1 1.0738737822087165 -0.6439563036811942 -v -0.625 1.162262129857035 -0.46717960838455724 -v -0.625 1.0296796083845572 -0.5997621298570349 -v -0.625 1.2064563036811942 -0.5113737822087164 -v -0.625 1.0738737822087165 -0.6439563036811942 -v -1 0.9687499848166654 -3.45238940713255e-7 -v -1 0.7812500151833346 -3.45238940713255e-7 -v -1 0.9687499848166654 0.06249993926666175 -v -1 0.7812500151833345 0.0624999392666617 -v -0.625 0.9687499848166654 -3.4523894065774385e-7 -v -0.625 0.7812500151833346 -3.45238940713255e-7 -v -0.625 0.9687499848166654 0.06249993926666175 -v -0.625 0.7812500151833346 0.06249993926666175 -v -1 0.5625003452389407 -0.40624998481666547 -v -1 0.5625003452389407 -0.2187500151833346 -v -1 0.5000000607333382 -0.4062499848166655 -v -1 0.5000000607333382 -0.2187500151833346 -v -0.625 0.5625003452389408 -0.4062499848166654 -v -0.625 0.5625003452389408 -0.2187500151833346 -v -0.625 0.5000000607333384 -0.4062499848166654 -v -0.625 0.5000000607333382 -0.21875001518333453 -v -1 0.7812500151833346 -0.6249996547610593 -v -1 0.9687499848166654 -0.6249996547610592 -v -1 0.7812500151833346 -0.6874999392666618 -v -1 0.9687499848166654 -0.6874999392666618 -v -0.625 0.7812500151833346 -0.6249996547610592 -v -0.625 0.9687499848166654 -0.6249996547610592 -v -0.625 0.7812500151833346 -0.6874999392666618 -v -0.625 0.9687499848166655 -0.6874999392666616 -v -1 1.1874996547610592 -0.2187500151833346 -v -1 1.1874996547610592 -0.4062499848166654 -v -1 1.2499999392666616 -0.21875001518333456 -v -1 1.2499999392666616 -0.40624998481666547 -v -0.625 1.1874996547610595 -0.21875001518333453 -v -0.625 1.1874996547610595 -0.4062499848166654 -v -0.625 1.2499999392666616 -0.2187500151833345 -v -0.625 1.2499999392666616 -0.4062499848166654 -v -0.875 1.0000001270694667 -0.6250000967027975 -v -0.875 1.1875000967027975 -0.4375001270694666 -v -0.875 0.7499998729305334 -0.6250000967027975 -v -0.875 0.5624999032972025 -0.43750012706946667 -v -0.9375 1.0000001270694667 -0.6250000967027975 -v -0.9375 1.1875000967027975 -0.43750012706946667 -v -0.9375 0.7499998729305334 -0.6250000967027975 -v -0.9375 0.5624999032972025 -0.43750012706946667 -v -0.9375 1.1875000967027975 -0.18749987293053333 -v -0.9375 1.1875000967027975 -0.43750012706946667 -v -0.9375 0.5624999032972025 -0.18749987293053338 -v -0.9375 0.5624999032972025 -0.43750012706946667 -v -0.875 1.1875000967027975 -0.18749987293053333 -v -0.875 1.1875000967027975 -0.4375001270694666 -v -0.875 0.5624999032972025 -0.18749987293053336 -v -0.875 0.5624999032972025 -0.43750012706946667 -v -0.9375 1.0000001270694667 9.670279754736555e-8 -v -0.9375 1.1875000967027975 -0.18749987293053333 -v -0.9375 0.7499998729305333 9.67027974918544e-8 -v -0.9375 0.5624999032972025 -0.18749987293053338 -v -0.875 1.0000001270694667 9.670279754736555e-8 -v -0.875 1.1875000967027975 -0.18749987293053333 -v -0.875 0.7499998729305333 9.670279754736555e-8 -v -0.875 0.5624999032972025 -0.18749987293053336 -v -0.6875 1.0000001270694667 -0.6250000967027975 -v -0.6875 1.1875000967027975 -0.4375001270694666 -v -0.6875 0.7499998729305334 -0.6250000967027975 -v -0.6875 0.5624999032972025 -0.43750012706946667 -v -0.75 1.0000001270694667 -0.6250000967027975 -v -0.75 1.1875000967027975 -0.4375001270694666 -v -0.75 0.7499998729305334 -0.6250000967027975 -v -0.75 0.5624999032972025 -0.43750012706946667 -v -0.75 1.1875000967027975 -0.18749987293053333 -v -0.75 1.1875000967027975 -0.4375001270694666 -v -0.75 0.5624999032972025 -0.18749987293053336 -v -0.75 0.5624999032972025 -0.43750012706946667 -v -0.6875 1.1875000967027975 -0.18749987293053333 -v -0.6875 1.1875000967027975 -0.4375001270694666 -v -0.6875 0.5624999032972025 -0.18749987293053333 -v -0.6875 0.5624999032972025 -0.43750012706946667 -v -0.75 1.0000001270694667 9.670279754736555e-8 -v -0.75 1.1875000967027975 -0.18749987293053333 -v -0.75 0.7499998729305333 9.670279754736555e-8 -v -0.75 0.5624999032972025 -0.18749987293053336 -v -0.6875 1.0000001270694667 9.670279754736555e-8 -v -0.6875 1.1875000967027975 -0.18749987293053333 -v -0.6875 0.7499998729305333 9.670279754736555e-8 -v -0.6875 0.5624999032972025 -0.18749987293053333 -v -1 1.0624999696333308 -0.12500003036666915 -v -1 1.0624999696333308 -0.4999999696333309 -v -1 0.6875000303666691 -0.12500003036666918 -v -1 0.6875000303666692 -0.49999996963333093 -v -0.9375 1.0624999696333308 -0.12500003036666912 -v -0.9375 1.0624999696333308 -0.4999999696333308 -v -0.9375 0.6875000303666692 -0.12500003036666915 -v -0.9375 0.6875000303666692 -0.4999999696333309 -v -0.625 1.0624999696333308 -0.1250000303666691 -v -0.625 1.0624999696333308 -0.4999999696333308 -v -0.625 0.6875000303666692 -0.12500003036666912 -v -0.625 0.6875000303666692 -0.4999999696333308 -v -0.6875 1.0624999696333308 -0.12500003036666912 -v -0.6875 1.0624999696333308 -0.4999999696333308 -v -0.6875 0.6875000303666692 -0.12500003036666915 -v -0.6875 0.6875000303666692 -0.4999999696333309 +v -0.875 1.0625 -0.125 +v -0.875 1.0625 -0.5 +v -0.875 0.6875 -0.125 +v -0.875 0.6875 -0.5 +v -0.75 1.0625 -0.125 +v -0.75 1.0625 -0.5 +v -0.75 0.6875 -0.125 +v -0.75 0.6875 -0.5 +v -1 1.1623 -0.1578 +v -1 1.0297 -0.0252 +v -1 1.2065 -0.1136 +v -1 1.0739 0.019 +v -0.625 1.1623 -0.1578 +v -0.625 1.0297 -0.0252 +v -0.625 1.2065 -0.1136 +v -0.625 1.0739 0.019 +v -1 0.5877 -0.1578 +v -1 0.7203 -0.0252 +v -1 0.5435 -0.1136 +v -1 0.6761 0.019 +v -0.625 0.5877 -0.1578 +v -0.625 0.7203 -0.0252 +v -0.625 0.5435 -0.1136 +v -0.625 0.6761 0.019 +v -1 0.5877 -0.4672 +v -1 0.7203 -0.5998 +v -1 0.5435 -0.5114 +v -1 0.6761 -0.644 +v -0.625 0.5877 -0.4672 +v -0.625 0.7203 -0.5998 +v -0.625 0.5435 -0.5114 +v -0.625 0.6761 -0.644 +v -1 1.1623 -0.4672 +v -1 1.0297 -0.5998 +v -1 1.2065 -0.5114 +v -1 1.0739 -0.644 +v -0.625 1.1623 -0.4672 +v -0.625 1.0297 -0.5998 +v -0.625 1.2065 -0.5114 +v -0.625 1.0739 -0.644 +v -1 0.9687 0 +v -1 0.7813 0 +v -1 0.9687 0.0625 +v -1 0.7813 0.0625 +v -0.625 0.9687 0 +v -0.625 0.7813 0 +v -0.625 0.9687 0.0625 +v -0.625 0.7813 0.0625 +v -1 0.5625 -0.4062 +v -1 0.5625 -0.2188 +v -1 0.5 -0.4062 +v -1 0.5 -0.2188 +v -0.625 0.5625 -0.4062 +v -0.625 0.5625 -0.2188 +v -0.625 0.5 -0.4062 +v -0.625 0.5 -0.2188 +v -1 0.7813 -0.625 +v -1 0.9687 -0.625 +v -1 0.7813 -0.6875 +v -1 0.9687 -0.6875 +v -0.625 0.7813 -0.625 +v -0.625 0.9687 -0.625 +v -0.625 0.7813 -0.6875 +v -0.625 0.9687 -0.6875 +v -1 1.1875 -0.2188 +v -1 1.1875 -0.4062 +v -1 1.25 -0.2188 +v -1 1.25 -0.4062 +v -0.625 1.1875 -0.2188 +v -0.625 1.1875 -0.4062 +v -0.625 1.25 -0.2188 +v -0.625 1.25 -0.4062 +v -0.875 1 -0.625 +v -0.875 1.1875 -0.4375 +v -0.875 0.75 -0.625 +v -0.875 0.5625 -0.4375 +v -0.9375 1 -0.625 +v -0.9375 1.1875 -0.4375 +v -0.9375 0.75 -0.625 +v -0.9375 0.5625 -0.4375 +v -0.9375 1.1875 -0.1875 +v -0.9375 1.1875 -0.4375 +v -0.9375 0.5625 -0.1875 +v -0.9375 0.5625 -0.4375 +v -0.875 1.1875 -0.1875 +v -0.875 1.1875 -0.4375 +v -0.875 0.5625 -0.1875 +v -0.875 0.5625 -0.4375 +v -0.9375 1 0 +v -0.9375 1.1875 -0.1875 +v -0.9375 0.75 0 +v -0.9375 0.5625 -0.1875 +v -0.875 1 0 +v -0.875 1.1875 -0.1875 +v -0.875 0.75 0 +v -0.875 0.5625 -0.1875 +v -0.6875 1 -0.625 +v -0.6875 1.1875 -0.4375 +v -0.6875 0.75 -0.625 +v -0.6875 0.5625 -0.4375 +v -0.75 1 -0.625 +v -0.75 1.1875 -0.4375 +v -0.75 0.75 -0.625 +v -0.75 0.5625 -0.4375 +v -0.75 1.1875 -0.1875 +v -0.75 1.1875 -0.4375 +v -0.75 0.5625 -0.1875 +v -0.75 0.5625 -0.4375 +v -0.6875 1.1875 -0.1875 +v -0.6875 1.1875 -0.4375 +v -0.6875 0.5625 -0.1875 +v -0.6875 0.5625 -0.4375 +v -0.75 1 0 +v -0.75 1.1875 -0.1875 +v -0.75 0.75 0 +v -0.75 0.5625 -0.1875 +v -0.6875 1 0 +v -0.6875 1.1875 -0.1875 +v -0.6875 0.75 0 +v -0.6875 0.5625 -0.1875 +v -1 1.0625 -0.125 +v -1 1.0625 -0.5 +v -1 0.6875 -0.125 +v -1 0.6875 -0.5 +v -0.9375 1.0625 -0.125 +v -0.9375 1.0625 -0.5 +v -0.9375 0.6875 -0.125 +v -0.9375 0.6875 -0.5 +v -0.625 1.0625 -0.125 +v -0.625 1.0625 -0.5 +v -0.625 0.6875 -0.125 +v -0.625 0.6875 -0.5 +v -0.6875 1.0625 -0.125 +v -0.6875 1.0625 -0.5 +v -0.6875 0.6875 -0.125 +v -0.6875 0.6875 -0.5 vt 0 0.5 vt 0.0625 0.5 vt 0.0625 0.6875 @@ -12567,14 +11130,14 @@ vt 0 0.5 vt 0.0625 0.5 vt 0.0625 0.6875 vt 0 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -12583,22 +11146,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -12608,21 +11171,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -12631,22 +11194,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -12656,21 +11219,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -12679,22 +11242,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -12704,21 +11267,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -12727,22 +11290,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -12752,573 +11315,483 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 vt 0.0625 0.825 vt 0.175 0.9375 vt 0.175 0.5625 vt 0.0625 0.675 -vt 0.1749990625 0.5624984375 -vt 0.0625 0.6749974999999999 -vt 0.0625025 0.8249984375 -vt 0.1749990625 0.9375 +vt 0.175 0.5625 +vt 0.0625 0.675 +vt 0.0625 0.825 +vt 0.175 0.9375 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 -vt 0.3250040625 0.5624984375 -vt 0.175 0.5624984375 +vt 0.325 0.5625 +vt 0.175 0.5625 vt 0.175 0.9375 -vt 0.3250040625 0.9375 +vt 0.325 0.9375 vt 0.175 0.9375 vt 0.325 0.9375 vt 0.325 0.5625 vt 0.175 0.5625 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 -vt 0.4374990625 0.6749974999999999 -vt 0.325 0.5624984375 +vt 0.4375 0.675 +vt 0.325 0.5625 vt 0.325 0.9375 -vt 0.4374990625 0.82500125 +vt 0.4375 0.825 vt 0.325 0.9375 vt 0.4375 0.825 vt 0.4375 0.675 vt 0.325 0.5625 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.825 vt 0.175 0.9375 vt 0.175 0.5625 vt 0.0625 0.675 -vt 0.1749990625 0.5624984375 -vt 0.0625 0.6749974999999999 -vt 0.0625025 0.8249984375 -vt 0.1749990625 0.9375 +vt 0.175 0.5625 +vt 0.0625 0.675 +vt 0.0625 0.825 +vt 0.175 0.9375 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 -vt 0.3250040625 0.5624984375 -vt 0.175 0.5624984375 +vt 0.325 0.5625 +vt 0.175 0.5625 vt 0.175 0.9375 -vt 0.3250040625 0.9375 +vt 0.325 0.9375 vt 0.175 0.9375 vt 0.325 0.9375 vt 0.325 0.5625 vt 0.175 0.5625 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 -vt 0.4374990625 0.6749974999999999 -vt 0.325 0.5624984375 +vt 0.4375 0.675 +vt 0.325 0.5625 vt 0.325 0.9375 -vt 0.4374990625 0.82500125 +vt 0.4375 0.825 vt 0.325 0.9375 vt 0.4375 0.825 vt 0.4375 0.675 vt 0.325 0.5625 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 -vt 0.53125 0.9375 -vt 0.71875 0.9375 -vt 0.71875 0.75 -vt 0.53125 0.75 +vt 0.5313 0.9375 +vt 0.7188 0.9375 +vt 0.7188 0.75 +vt 0.5313 0.75 vt 0.5625 0.75 -vt 0.53125 0.75 -vt 0.53125 0.9375 +vt 0.5313 0.75 +vt 0.5313 0.9375 vt 0.5625 0.9375 vt 0.6875 0.9375 -vt 0.71875 0.9375 -vt 0.71875 0.75 +vt 0.7188 0.9375 +vt 0.7188 0.75 vt 0.6875 0.75 -vt 0.53125 0.9375 +vt 0.5313 0.9375 vt 0.5625 0.9375 vt 0.5625 0.75 -vt 0.53125 0.75 +vt 0.5313 0.75 vt 0.6875 0.9375 -vt 0.71875 0.9375 -vt 0.71875 0.75 +vt 0.7188 0.9375 +vt 0.7188 0.75 vt 0.6875 0.75 -vt 0.71875 0.75 -vt 0.71875 0.9375 -vt 0.53125 0.9375 -vt 0.53125 0.75 -vt 0.53125 0.9375 -vt 0.53125 0.75 +vt 0.7188 0.75 +vt 0.7188 0.9375 +vt 0.5313 0.9375 +vt 0.5313 0.75 +vt 0.5313 0.9375 +vt 0.5313 0.75 vt 0.5625 0.75 vt 0.5625 0.9375 -vt 0.71875 0.75 -vt 0.71875 0.9375 +vt 0.7188 0.75 +vt 0.7188 0.9375 vt 0.6875 0.9375 vt 0.6875 0.75 vt 0.5625 0.75 vt 0.5625 0.9375 -vt 0.53125 0.9375 -vt 0.53125 0.75 -vt 0.71875 0.75 -vt 0.71875 0.9375 +vt 0.5313 0.9375 +vt 0.5313 0.75 +vt 0.7188 0.75 +vt 0.7188 0.9375 vt 0.6875 0.9375 vt 0.6875 0.75 -vn -8.659560562354933e-17 1 1.1102230246251565e-16 -vn 8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn -8.65956056235493e-17 -1.1102230246251565e-16 1 -vn 8.65956056235493e-17 1.1102230246251565e-16 -1 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn 1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn -1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn -1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn 1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn 1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn 1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn -1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn 1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn 1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn -1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn 1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn -1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn -1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn 1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.65956056235493e-17 1.1102230246251565e-16 -1 -vn -8.659560562354932e-17 -1.1102230246251568e-16 1 -vn -8.659560562354932e-17 1 -2.775557561562892e-16 -vn 8.659560562354934e-17 -1 -3.3306690738754696e-16 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.659560562354933e-17 1 1.1102230246251565e-16 -vn 8.659560562354934e-17 -1 -1.1102230246251568e-16 -vn 8.659560562354927e-17 3.3306690738754696e-16 -1 -vn -8.659560562354934e-17 2.775557561562892e-16 1 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.65956056235493e-17 -1.1102230246251565e-16 1 -vn 8.659560562354932e-17 1.1102230246251568e-16 -1 -vn 8.659560562354932e-17 -1 2.775557561562892e-16 -vn -8.659560562354934e-17 1 3.3306690738754696e-16 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn -8.659560562354934e-17 1 1.1102230246251568e-16 -vn -8.659560562354927e-17 -3.3306690738754696e-16 1 -vn 8.659560562354934e-17 -2.775557561562892e-16 -1 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn 1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn 8.659560562354932e-17 1.1102230246251568e-16 -1 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.659560562354934e-17 1 1.1102230246251568e-16 -vn 8.659560562354934e-17 -1 -1.1102230246251568e-16 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn 1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn -8.659560562354932e-17 -1.1102230246251568e-16 1 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn 1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn 8.659560562354932e-17 1.1102230246251568e-16 -1 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.659560562354934e-17 1 1.1102230246251568e-16 -vn 8.659560562354934e-17 -1 -1.1102230246251568e-16 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn 1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn -8.659560562354932e-17 -1.1102230246251568e-16 1 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -8.659560562354933e-17 1 1.1102230246251565e-16 -vn 8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn -8.65956056235493e-17 -1.1102230246251565e-16 1 -vn 8.65956056235493e-17 1.1102230246251565e-16 -1 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.659560562354933e-17 1 1.1102230246251565e-16 -vn 8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn -8.65956056235493e-17 -1.1102230246251565e-16 1 -vn 8.65956056235493e-17 1.1102230246251565e-16 -1 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 -0.71 -0.71 +vn 0 0.71 0.71 +vn 0 0.71 -0.71 +vn 0 -0.71 0.71 +vn -1 0 0 +vn 1 0 0 +vn 0 0.71 -0.71 +vn 0 -0.71 0.71 +vn 0 -0.71 -0.71 +vn 0 0.71 0.71 +vn -1 0 0 +vn 1 0 0 +vn 0 0.71 0.71 +vn 0 -0.71 -0.71 +vn 0 -0.71 0.71 +vn 0 0.71 -0.71 +vn -1 0 0 +vn 1 0 0 +vn 0 -0.71 0.71 +vn 0 0.71 -0.71 +vn 0 0.71 0.71 +vn 0 -0.71 -0.71 +vn -1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 0 1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0.71 -0.71 +vn 0 -0.71 -0.71 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0.71 0.71 +vn 0 -0.71 0.71 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 0.71 -0.71 +vn 0 -0.71 -0.71 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0.71 0.71 +vn 0 -0.71 0.71 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 usemtl tracks14_12 -f 2070/5745/1437 2066/5746/1437 2065/5747/1437 -f 2070/5745/1437 2065/5747/1437 2069/5748/1437 -f 2071/5749/1438 2067/5750/1438 2068/5751/1438 -f 2071/5749/1438 2068/5751/1438 2072/5752/1438 -f 2069/5753/1439 2065/5754/1439 2067/5755/1439 -f 2069/5753/1439 2067/5755/1439 2071/5756/1439 -f 2066/5757/1440 2070/5758/1440 2072/5759/1440 -f 2066/5757/1440 2072/5759/1440 2068/5760/1440 -f 2073/5761/1441 2074/5762/1441 2076/5763/1441 -f 2073/5761/1441 2076/5763/1441 2075/5764/1441 -f 2078/5765/1442 2077/5766/1442 2079/5767/1442 -f 2078/5765/1442 2079/5767/1442 2080/5768/1442 -f 2078/5769/1443 2074/5770/1443 2073/5771/1443 -f 2078/5769/1443 2073/5771/1443 2077/5772/1443 -f 2079/5773/1444 2075/5774/1444 2076/5775/1444 -f 2079/5773/1444 2076/5775/1444 2080/5776/1444 -f 2077/5777/1445 2073/5778/1445 2075/5779/1445 -f 2077/5777/1445 2075/5779/1445 2079/5780/1445 -f 2074/5781/1446 2078/5782/1446 2080/5783/1446 -f 2074/5781/1446 2080/5783/1446 2076/5784/1446 -f 2084/5785/1447 2082/5786/1447 2081/5787/1447 -f 2084/5785/1447 2081/5787/1447 2083/5788/1447 -f 2087/5789/1448 2085/5790/1448 2086/5791/1448 -f 2087/5789/1448 2086/5791/1448 2088/5792/1448 -f 2081/5793/1449 2082/5794/1449 2086/5795/1449 -f 2081/5793/1449 2086/5795/1449 2085/5796/1449 -f 2084/5797/1450 2083/5798/1450 2087/5799/1450 -f 2084/5797/1450 2087/5799/1450 2088/5800/1450 -f 2083/5801/1451 2081/5802/1451 2085/5803/1451 -f 2083/5801/1451 2085/5803/1451 2087/5804/1451 -f 2088/5805/1452 2086/5806/1452 2082/5807/1452 -f 2088/5805/1452 2082/5807/1452 2084/5808/1452 -f 2089/5809/1453 2090/5810/1453 2092/5811/1453 -f 2089/5809/1453 2092/5811/1453 2091/5812/1453 -f 2094/5813/1454 2093/5814/1454 2095/5815/1454 -f 2094/5813/1454 2095/5815/1454 2096/5816/1454 -f 2094/5817/1455 2090/5818/1455 2089/5819/1455 -f 2094/5817/1455 2089/5819/1455 2093/5820/1455 -f 2095/5821/1456 2091/5822/1456 2092/5823/1456 -f 2095/5821/1456 2092/5823/1456 2096/5824/1456 -f 2093/5825/1457 2089/5826/1457 2091/5827/1457 -f 2093/5825/1457 2091/5827/1457 2095/5828/1457 -f 2090/5829/1458 2094/5830/1458 2096/5831/1458 -f 2090/5829/1458 2096/5831/1458 2092/5832/1458 -f 2100/5833/1459 2098/5834/1459 2097/5835/1459 -f 2100/5833/1459 2097/5835/1459 2099/5836/1459 -f 2103/5837/1460 2101/5838/1460 2102/5839/1460 -f 2103/5837/1460 2102/5839/1460 2104/5840/1460 -f 2097/5841/1461 2098/5842/1461 2102/5843/1461 -f 2097/5841/1461 2102/5843/1461 2101/5844/1461 -f 2100/5845/1462 2099/5846/1462 2103/5847/1462 -f 2100/5845/1462 2103/5847/1462 2104/5848/1462 -f 2099/5849/1463 2097/5850/1463 2101/5851/1463 -f 2099/5849/1463 2101/5851/1463 2103/5852/1463 -f 2104/5853/1464 2102/5854/1464 2098/5855/1464 -f 2104/5853/1464 2098/5855/1464 2100/5856/1464 -f 2105/5857/1465 2106/5858/1465 2108/5859/1465 -f 2105/5857/1465 2108/5859/1465 2107/5860/1465 -f 2110/5861/1466 2109/5862/1466 2111/5863/1466 -f 2110/5861/1466 2111/5863/1466 2112/5864/1466 -f 2110/5865/1467 2106/5866/1467 2105/5867/1467 -f 2110/5865/1467 2105/5867/1467 2109/5868/1467 -f 2111/5869/1468 2107/5870/1468 2108/5871/1468 -f 2111/5869/1468 2108/5871/1468 2112/5872/1468 -f 2109/5873/1469 2105/5874/1469 2107/5875/1469 -f 2109/5873/1469 2107/5875/1469 2111/5876/1469 -f 2106/5877/1470 2110/5878/1470 2112/5879/1470 -f 2106/5877/1470 2112/5879/1470 2108/5880/1470 -f 2116/5881/1471 2114/5882/1471 2113/5883/1471 -f 2116/5881/1471 2113/5883/1471 2115/5884/1471 -f 2119/5885/1472 2117/5886/1472 2118/5887/1472 -f 2119/5885/1472 2118/5887/1472 2120/5888/1472 -f 2113/5889/1473 2114/5890/1473 2118/5891/1473 -f 2113/5889/1473 2118/5891/1473 2117/5892/1473 -f 2116/5893/1474 2115/5894/1474 2119/5895/1474 -f 2116/5893/1474 2119/5895/1474 2120/5896/1474 -f 2115/5897/1475 2113/5898/1475 2117/5899/1475 -f 2115/5897/1475 2117/5899/1475 2119/5900/1475 -f 2120/5901/1476 2118/5902/1476 2114/5903/1476 -f 2120/5901/1476 2114/5903/1476 2116/5904/1476 -f 2121/5905/1477 2122/5906/1477 2124/5907/1477 -f 2121/5905/1477 2124/5907/1477 2123/5908/1477 -f 2126/5909/1478 2125/5910/1478 2127/5911/1478 -f 2126/5909/1478 2127/5911/1478 2128/5912/1478 -f 2126/5913/1479 2122/5914/1479 2121/5915/1479 -f 2126/5913/1479 2121/5915/1479 2125/5916/1479 -f 2127/5917/1480 2123/5918/1480 2124/5919/1480 -f 2127/5917/1480 2124/5919/1480 2128/5920/1480 -f 2125/5921/1481 2121/5922/1481 2123/5923/1481 -f 2125/5921/1481 2123/5923/1481 2127/5924/1481 -f 2122/5925/1482 2126/5926/1482 2128/5927/1482 -f 2122/5925/1482 2128/5927/1482 2124/5928/1482 -f 2132/5929/1483 2130/5930/1483 2129/5931/1483 -f 2132/5929/1483 2129/5931/1483 2131/5932/1483 -f 2135/5933/1484 2133/5934/1484 2134/5935/1484 -f 2135/5933/1484 2134/5935/1484 2136/5936/1484 -f 2129/5937/1485 2130/5938/1485 2134/5939/1485 -f 2129/5937/1485 2134/5939/1485 2133/5940/1485 -f 2132/5941/1486 2131/5942/1486 2135/5943/1486 -f 2132/5941/1486 2135/5943/1486 2136/5944/1486 -f 2131/5945/1487 2129/5946/1487 2133/5947/1487 -f 2131/5945/1487 2133/5947/1487 2135/5948/1487 -f 2136/5949/1488 2134/5950/1488 2130/5951/1488 -f 2136/5949/1488 2130/5951/1488 2132/5952/1488 -f 2137/5953/1489 2138/5954/1489 2140/5955/1489 -f 2137/5953/1489 2140/5955/1489 2139/5956/1489 -f 2142/5957/1490 2141/5958/1490 2143/5959/1490 -f 2142/5957/1490 2143/5959/1490 2144/5960/1490 -f 2142/5961/1491 2138/5962/1491 2137/5963/1491 -f 2142/5961/1491 2137/5963/1491 2141/5964/1491 -f 2143/5965/1492 2139/5966/1492 2140/5967/1492 -f 2143/5965/1492 2140/5967/1492 2144/5968/1492 -f 2141/5969/1493 2137/5970/1493 2139/5971/1493 -f 2141/5969/1493 2139/5971/1493 2143/5972/1493 -f 2145/5973/1494 2146/5974/1494 2148/5975/1494 -f 2145/5973/1494 2148/5975/1494 2147/5976/1494 -f 2150/5977/1495 2149/5978/1495 2151/5979/1495 -f 2150/5977/1495 2151/5979/1495 2152/5980/1495 -f 2150/5981/1496 2146/5982/1496 2145/5983/1496 -f 2150/5981/1496 2145/5983/1496 2149/5984/1496 -f 2151/5985/1497 2147/5986/1497 2148/5987/1497 -f 2151/5985/1497 2148/5987/1497 2152/5988/1497 -f 2153/5989/1498 2154/5990/1498 2156/5991/1498 -f 2153/5989/1498 2156/5991/1498 2155/5992/1498 -f 2158/5993/1499 2157/5994/1499 2159/5995/1499 -f 2158/5993/1499 2159/5995/1499 2160/5996/1499 -f 2158/5997/1500 2154/5998/1500 2153/5999/1500 -f 2158/5997/1500 2153/5999/1500 2157/6000/1500 -f 2159/6001/1501 2155/6002/1501 2156/6003/1501 -f 2159/6001/1501 2156/6003/1501 2160/6004/1501 -f 2157/6005/1502 2153/6006/1502 2155/6007/1502 -f 2157/6005/1502 2155/6007/1502 2159/6008/1502 -f 2161/6009/1503 2162/6010/1503 2164/6011/1503 -f 2161/6009/1503 2164/6011/1503 2163/6012/1503 -f 2166/6013/1504 2165/6014/1504 2167/6015/1504 -f 2166/6013/1504 2167/6015/1504 2168/6016/1504 -f 2166/6017/1505 2162/6018/1505 2161/6019/1505 -f 2166/6017/1505 2161/6019/1505 2165/6020/1505 -f 2167/6021/1506 2163/6022/1506 2164/6023/1506 -f 2167/6021/1506 2164/6023/1506 2168/6024/1506 -f 2165/6025/1507 2161/6026/1507 2163/6027/1507 -f 2165/6025/1507 2163/6027/1507 2167/6028/1507 -f 2169/6029/1508 2170/6030/1508 2172/6031/1508 -f 2169/6029/1508 2172/6031/1508 2171/6032/1508 -f 2174/6033/1509 2173/6034/1509 2175/6035/1509 -f 2174/6033/1509 2175/6035/1509 2176/6036/1509 -f 2174/6037/1510 2170/6038/1510 2169/6039/1510 -f 2174/6037/1510 2169/6039/1510 2173/6040/1510 -f 2175/6041/1511 2171/6042/1511 2172/6043/1511 -f 2175/6041/1511 2172/6043/1511 2176/6044/1511 -f 2177/6045/1512 2178/6046/1512 2180/6047/1512 -f 2177/6045/1512 2180/6047/1512 2179/6048/1512 -f 2182/6049/1513 2181/6050/1513 2183/6051/1513 -f 2182/6049/1513 2183/6051/1513 2184/6052/1513 -f 2182/6053/1514 2178/6054/1514 2177/6055/1514 -f 2182/6053/1514 2177/6055/1514 2181/6056/1514 -f 2183/6057/1515 2179/6058/1515 2180/6059/1515 -f 2183/6057/1515 2180/6059/1515 2184/6060/1515 -f 2181/6061/1516 2177/6062/1516 2179/6063/1516 -f 2181/6061/1516 2179/6063/1516 2183/6064/1516 -f 2185/6065/1517 2186/6066/1517 2188/6067/1517 -f 2185/6065/1517 2188/6067/1517 2187/6068/1517 -f 2190/6069/1518 2186/6070/1518 2185/6071/1518 -f 2190/6069/1518 2185/6071/1518 2189/6072/1518 -f 2191/6073/1519 2187/6074/1519 2188/6075/1519 -f 2191/6073/1519 2188/6075/1519 2192/6076/1519 -f 2189/6077/1520 2185/6078/1520 2187/6079/1520 -f 2189/6077/1520 2187/6079/1520 2191/6080/1520 -f 2186/6081/1521 2190/6082/1521 2192/6083/1521 -f 2186/6081/1521 2192/6083/1521 2188/6084/1521 -f 2196/6085/1522 2194/6086/1522 2193/6087/1522 -f 2196/6085/1522 2193/6087/1522 2195/6088/1522 -f 2193/6089/1523 2194/6090/1523 2198/6091/1523 -f 2193/6089/1523 2198/6091/1523 2197/6092/1523 -f 2196/6093/1524 2195/6094/1524 2199/6095/1524 -f 2196/6093/1524 2199/6095/1524 2200/6096/1524 -f 2195/6097/1525 2193/6098/1525 2197/6099/1525 -f 2195/6097/1525 2197/6099/1525 2199/6100/1525 -f 2200/6101/1526 2198/6102/1526 2194/6103/1526 -f 2200/6101/1526 2194/6103/1526 2196/6104/1526 +f 2070/5745/1437 2066/5746/1437 2065/5747/1437 2069/5748/1437 +f 2071/5749/1438 2067/5750/1438 2068/5751/1438 2072/5752/1438 +f 2069/5753/1439 2065/5754/1439 2067/5755/1439 2071/5756/1439 +f 2066/5757/1440 2070/5758/1440 2072/5759/1440 2068/5760/1440 +f 2073/5761/1441 2074/5762/1441 2076/5763/1441 2075/5764/1441 +f 2078/5765/1442 2077/5766/1442 2079/5767/1442 2080/5768/1442 +f 2078/5769/1443 2074/5770/1443 2073/5771/1443 2077/5772/1443 +f 2079/5773/1444 2075/5774/1444 2076/5775/1444 2080/5776/1444 +f 2077/5777/1445 2073/5778/1445 2075/5779/1445 2079/5780/1445 +f 2074/5781/1446 2078/5782/1446 2080/5783/1446 2076/5784/1446 +f 2084/5785/1447 2082/5786/1447 2081/5787/1447 2083/5788/1447 +f 2087/5789/1448 2085/5790/1448 2086/5791/1448 2088/5792/1448 +f 2081/5793/1449 2082/5794/1449 2086/5795/1449 2085/5796/1449 +f 2084/5797/1450 2083/5798/1450 2087/5799/1450 2088/5800/1450 +f 2083/5801/1451 2081/5802/1451 2085/5803/1451 2087/5804/1451 +f 2088/5805/1452 2086/5806/1452 2082/5807/1452 2084/5808/1452 +f 2089/5809/1453 2090/5810/1453 2092/5811/1453 2091/5812/1453 +f 2094/5813/1454 2093/5814/1454 2095/5815/1454 2096/5816/1454 +f 2094/5817/1455 2090/5818/1455 2089/5819/1455 2093/5820/1455 +f 2095/5821/1456 2091/5822/1456 2092/5823/1456 2096/5824/1456 +f 2093/5825/1457 2089/5826/1457 2091/5827/1457 2095/5828/1457 +f 2090/5829/1458 2094/5830/1458 2096/5831/1458 2092/5832/1458 +f 2100/5833/1459 2098/5834/1459 2097/5835/1459 2099/5836/1459 +f 2103/5837/1460 2101/5838/1460 2102/5839/1460 2104/5840/1460 +f 2097/5841/1461 2098/5842/1461 2102/5843/1461 2101/5844/1461 +f 2100/5845/1462 2099/5846/1462 2103/5847/1462 2104/5848/1462 +f 2099/5849/1463 2097/5850/1463 2101/5851/1463 2103/5852/1463 +f 2104/5853/1464 2102/5854/1464 2098/5855/1464 2100/5856/1464 +f 2105/5857/1465 2106/5858/1465 2108/5859/1465 2107/5860/1465 +f 2110/5861/1466 2109/5862/1466 2111/5863/1466 2112/5864/1466 +f 2110/5865/1467 2106/5866/1467 2105/5867/1467 2109/5868/1467 +f 2111/5869/1468 2107/5870/1468 2108/5871/1468 2112/5872/1468 +f 2109/5873/1469 2105/5874/1469 2107/5875/1469 2111/5876/1469 +f 2106/5877/1470 2110/5878/1470 2112/5879/1470 2108/5880/1470 +f 2116/5881/1471 2114/5882/1471 2113/5883/1471 2115/5884/1471 +f 2119/5885/1472 2117/5886/1472 2118/5887/1472 2120/5888/1472 +f 2113/5889/1473 2114/5890/1473 2118/5891/1473 2117/5892/1473 +f 2116/5893/1474 2115/5894/1474 2119/5895/1474 2120/5896/1474 +f 2115/5897/1475 2113/5898/1475 2117/5899/1475 2119/5900/1475 +f 2120/5901/1476 2118/5902/1476 2114/5903/1476 2116/5904/1476 +f 2121/5905/1477 2122/5906/1477 2124/5907/1477 2123/5908/1477 +f 2126/5909/1478 2125/5910/1478 2127/5911/1478 2128/5912/1478 +f 2126/5913/1479 2122/5914/1479 2121/5915/1479 2125/5916/1479 +f 2127/5917/1480 2123/5918/1480 2124/5919/1480 2128/5920/1480 +f 2125/5921/1481 2121/5922/1481 2123/5923/1481 2127/5924/1481 +f 2122/5925/1482 2126/5926/1482 2128/5927/1482 2124/5928/1482 +f 2132/5929/1483 2130/5930/1483 2129/5931/1483 2131/5932/1483 +f 2135/5933/1484 2133/5934/1484 2134/5935/1484 2136/5936/1484 +f 2129/5937/1485 2130/5938/1485 2134/5939/1485 2133/5940/1485 +f 2132/5941/1486 2131/5942/1486 2135/5943/1486 2136/5944/1486 +f 2131/5945/1487 2129/5946/1487 2133/5947/1487 2135/5948/1487 +f 2136/5949/1488 2134/5950/1488 2130/5951/1488 2132/5952/1488 +f 2137/5953/1489 2138/5954/1489 2140/5955/1489 2139/5956/1489 +f 2142/5957/1490 2141/5958/1490 2143/5959/1490 2144/5960/1490 +f 2142/5961/1491 2138/5962/1491 2137/5963/1491 2141/5964/1491 +f 2143/5965/1492 2139/5966/1492 2140/5967/1492 2144/5968/1492 +f 2141/5969/1493 2137/5970/1493 2139/5971/1493 2143/5972/1493 +f 2145/5973/1494 2146/5974/1494 2148/5975/1494 2147/5976/1494 +f 2150/5977/1495 2149/5978/1495 2151/5979/1495 2152/5980/1495 +f 2150/5981/1496 2146/5982/1496 2145/5983/1496 2149/5984/1496 +f 2151/5985/1497 2147/5986/1497 2148/5987/1497 2152/5988/1497 +f 2153/5989/1498 2154/5990/1498 2156/5991/1498 2155/5992/1498 +f 2158/5993/1499 2157/5994/1499 2159/5995/1499 2160/5996/1499 +f 2158/5997/1500 2154/5998/1500 2153/5999/1500 2157/6000/1500 +f 2159/6001/1501 2155/6002/1501 2156/6003/1501 2160/6004/1501 +f 2157/6005/1502 2153/6006/1502 2155/6007/1502 2159/6008/1502 +f 2161/6009/1503 2162/6010/1503 2164/6011/1503 2163/6012/1503 +f 2166/6013/1504 2165/6014/1504 2167/6015/1504 2168/6016/1504 +f 2166/6017/1505 2162/6018/1505 2161/6019/1505 2165/6020/1505 +f 2167/6021/1506 2163/6022/1506 2164/6023/1506 2168/6024/1506 +f 2165/6025/1507 2161/6026/1507 2163/6027/1507 2167/6028/1507 +f 2169/6029/1508 2170/6030/1508 2172/6031/1508 2171/6032/1508 +f 2174/6033/1509 2173/6034/1509 2175/6035/1509 2176/6036/1509 +f 2174/6037/1510 2170/6038/1510 2169/6039/1510 2173/6040/1510 +f 2175/6041/1511 2171/6042/1511 2172/6043/1511 2176/6044/1511 +f 2177/6045/1512 2178/6046/1512 2180/6047/1512 2179/6048/1512 +f 2182/6049/1513 2181/6050/1513 2183/6051/1513 2184/6052/1513 +f 2182/6053/1514 2178/6054/1514 2177/6055/1514 2181/6056/1514 +f 2183/6057/1515 2179/6058/1515 2180/6059/1515 2184/6060/1515 +f 2181/6061/1516 2177/6062/1516 2179/6063/1516 2183/6064/1516 +f 2185/6065/1517 2186/6066/1517 2188/6067/1517 2187/6068/1517 +f 2190/6069/1518 2186/6070/1518 2185/6071/1518 2189/6072/1518 +f 2191/6073/1519 2187/6074/1519 2188/6075/1519 2192/6076/1519 +f 2189/6077/1520 2185/6078/1520 2187/6079/1520 2191/6080/1520 +f 2186/6081/1521 2190/6082/1521 2192/6083/1521 2188/6084/1521 +f 2196/6085/1522 2194/6086/1522 2193/6087/1522 2195/6088/1522 +f 2193/6089/1523 2194/6090/1523 2198/6091/1523 2197/6092/1523 +f 2196/6093/1524 2195/6094/1524 2199/6095/1524 2200/6096/1524 +f 2195/6097/1525 2193/6098/1525 2197/6099/1525 2199/6100/1525 +f 2200/6101/1526 2198/6102/1526 2194/6103/1526 2196/6104/1526 o LeftWheelLead2 -v -0.875 1.0624999696333308 2.249999969633331 -v -0.875 1.0624999696333308 1.8750000303666692 -v -0.875 0.6875000303666692 2.249999969633331 -v -0.875 0.6875000303666692 1.8750000303666692 -v -0.75 1.0624999696333308 2.249999969633331 -v -0.75 1.0624999696333308 1.8750000303666692 -v -0.75 0.6875000303666692 2.249999969633331 -v -0.75 0.6875000303666692 1.8750000303666692 -v -1 1.162262129857035 2.217179608384557 -v -1 1.0296796083845572 2.349762129857035 -v -1 1.2064563036811942 2.2613737822087163 -v -1 1.0738737822087165 2.393956303681194 -v -0.625 1.162262129857035 2.217179608384557 -v -0.625 1.0296796083845572 2.349762129857035 -v -0.625 1.2064563036811942 2.2613737822087163 -v -0.625 1.0738737822087165 2.393956303681194 -v -1 0.5877378701429651 2.217179608384557 -v -1 0.7203203916154427 2.349762129857035 -v -1 0.5435436963188058 2.2613737822087163 -v -1 0.6761262177912835 2.393956303681194 -v -0.625 0.5877378701429651 2.217179608384557 -v -0.625 0.7203203916154427 2.349762129857035 -v -0.625 0.5435436963188058 2.2613737822087163 -v -0.625 0.6761262177912835 2.393956303681194 -v -1 0.5877378701429651 1.9078203916154428 -v -1 0.7203203916154427 1.775237870142965 -v -1 0.5435436963188058 1.8636262177912835 -v -1 0.6761262177912836 1.7310436963188058 -v -0.625 0.5877378701429651 1.9078203916154428 -v -0.625 0.7203203916154428 1.775237870142965 -v -0.625 0.5435436963188058 1.8636262177912835 -v -0.625 0.6761262177912836 1.7310436963188058 -v -1 1.162262129857035 1.9078203916154428 -v -1 1.0296796083845572 1.775237870142965 -v -1 1.2064563036811942 1.8636262177912835 -v -1 1.0738737822087165 1.7310436963188058 -v -0.625 1.162262129857035 1.9078203916154428 -v -0.625 1.0296796083845572 1.775237870142965 -v -0.625 1.2064563036811942 1.8636262177912837 -v -0.625 1.0738737822087165 1.7310436963188058 -v -1 0.9687499848166654 2.3749996547610595 -v -1 0.7812500151833346 2.3749996547610595 -v -1 0.9687499848166654 2.4374999392666616 -v -1 0.7812500151833345 2.4374999392666616 -v -0.625 0.9687499848166654 2.3749996547610595 -v -0.625 0.7812500151833346 2.3749996547610595 -v -0.625 0.9687499848166654 2.4374999392666616 -v -0.625 0.7812500151833346 2.4374999392666616 -v -1 0.5625003452389407 1.9687500151833346 -v -1 0.5625003452389407 2.1562499848166654 -v -1 0.5000000607333382 1.9687500151833346 -v -1 0.5000000607333382 2.1562499848166654 -v -0.625 0.5625003452389408 1.9687500151833346 -v -0.625 0.5625003452389408 2.1562499848166654 -v -0.625 0.5000000607333384 1.9687500151833346 -v -0.625 0.5000000607333382 2.1562499848166654 -v -1 0.7812500151833346 1.7500003452389405 -v -1 0.9687499848166654 1.7500003452389408 -v -1 0.7812500151833346 1.6875000607333384 -v -1 0.9687499848166654 1.6875000607333384 -v -0.625 0.7812500151833346 1.7500003452389408 -v -0.625 0.9687499848166654 1.7500003452389408 -v -0.625 0.7812500151833346 1.6875000607333384 -v -0.625 0.9687499848166655 1.6875000607333384 -v -1 1.1874996547610592 2.1562499848166654 -v -1 1.1874996547610592 1.9687500151833346 -v -1 1.2499999392666616 2.1562499848166654 -v -1 1.2499999392666616 1.9687500151833346 -v -0.625 1.1874996547610595 2.1562499848166654 -v -0.625 1.1874996547610595 1.9687500151833346 -v -0.625 1.2499999392666616 2.1562499848166654 -v -0.625 1.2499999392666616 1.9687500151833346 -v -0.875 1.0000001270694667 1.7499999032972025 -v -0.875 1.1875000967027975 1.9374998729305333 -v -0.875 0.7499998729305334 1.7499999032972025 -v -0.875 0.5624999032972025 1.9374998729305333 -v -0.9375 1.0000001270694667 1.7499999032972025 -v -0.9375 1.1875000967027975 1.9374998729305333 -v -0.9375 0.7499998729305334 1.7499999032972025 -v -0.9375 0.5624999032972025 1.9374998729305333 -v -0.9375 1.1875000967027975 2.1875001270694665 -v -0.9375 1.1875000967027975 1.9374998729305333 -v -0.9375 0.5624999032972025 2.1875001270694665 -v -0.9375 0.5624999032972025 1.9374998729305333 -v -0.875 1.1875000967027975 2.1875001270694665 -v -0.875 1.1875000967027975 1.9374998729305333 -v -0.875 0.5624999032972025 2.1875001270694665 -v -0.875 0.5624999032972025 1.9374998729305333 -v -0.9375 1.0000001270694667 2.3750000967027978 -v -0.9375 1.1875000967027975 2.1875001270694665 -v -0.9375 0.7499998729305333 2.3750000967027973 -v -0.9375 0.5624999032972025 2.1875001270694665 -v -0.875 1.0000001270694667 2.3750000967027978 -v -0.875 1.1875000967027975 2.1875001270694665 -v -0.875 0.7499998729305333 2.3750000967027978 -v -0.875 0.5624999032972025 2.1875001270694665 -v -0.6875 1.0000001270694667 1.7499999032972025 -v -0.6875 1.1875000967027975 1.9374998729305335 -v -0.6875 0.7499998729305334 1.7499999032972025 -v -0.6875 0.5624999032972025 1.9374998729305333 -v -0.75 1.0000001270694667 1.7499999032972025 -v -0.75 1.1875000967027975 1.9374998729305333 -v -0.75 0.7499998729305334 1.7499999032972025 -v -0.75 0.5624999032972025 1.9374998729305333 -v -0.75 1.1875000967027975 2.1875001270694665 -v -0.75 1.1875000967027975 1.9374998729305333 -v -0.75 0.5624999032972025 2.1875001270694665 -v -0.75 0.5624999032972025 1.9374998729305333 -v -0.6875 1.1875000967027975 2.1875001270694665 -v -0.6875 1.1875000967027975 1.9374998729305335 -v -0.6875 0.5624999032972025 2.1875001270694665 -v -0.6875 0.5624999032972025 1.9374998729305333 -v -0.75 1.0000001270694667 2.3750000967027978 -v -0.75 1.1875000967027975 2.1875001270694665 -v -0.75 0.7499998729305333 2.3750000967027978 -v -0.75 0.5624999032972025 2.1875001270694665 -v -0.6875 1.0000001270694667 2.3750000967027978 -v -0.6875 1.1875000967027975 2.1875001270694665 -v -0.6875 0.7499998729305333 2.3750000967027978 -v -0.6875 0.5624999032972025 2.1875001270694665 -v -1 1.0624999696333308 2.249999969633331 -v -1 1.0624999696333308 1.8750000303666692 -v -1 0.6875000303666691 2.249999969633331 -v -1 0.6875000303666692 1.8750000303666692 -v -0.9375 1.0624999696333308 2.249999969633331 -v -0.9375 1.0624999696333308 1.8750000303666692 -v -0.9375 0.6875000303666692 2.249999969633331 -v -0.9375 0.6875000303666692 1.8750000303666692 -v -0.625 1.0624999696333308 2.249999969633331 -v -0.625 1.0624999696333308 1.8750000303666692 -v -0.625 0.6875000303666692 2.249999969633331 -v -0.625 0.6875000303666692 1.8750000303666692 -v -0.6875 1.0624999696333308 2.249999969633331 -v -0.6875 1.0624999696333308 1.8750000303666692 -v -0.6875 0.6875000303666692 2.249999969633331 -v -0.6875 0.6875000303666692 1.8750000303666692 +v -0.875 1.0625 2.25 +v -0.875 1.0625 1.875 +v -0.875 0.6875 2.25 +v -0.875 0.6875 1.875 +v -0.75 1.0625 2.25 +v -0.75 1.0625 1.875 +v -0.75 0.6875 2.25 +v -0.75 0.6875 1.875 +v -1 1.1623 2.2172 +v -1 1.0297 2.3498 +v -1 1.2065 2.2614 +v -1 1.0739 2.394 +v -0.625 1.1623 2.2172 +v -0.625 1.0297 2.3498 +v -0.625 1.2065 2.2614 +v -0.625 1.0739 2.394 +v -1 0.5877 2.2172 +v -1 0.7203 2.3498 +v -1 0.5435 2.2614 +v -1 0.6761 2.394 +v -0.625 0.5877 2.2172 +v -0.625 0.7203 2.3498 +v -0.625 0.5435 2.2614 +v -0.625 0.6761 2.394 +v -1 0.5877 1.9078 +v -1 0.7203 1.7752 +v -1 0.5435 1.8636 +v -1 0.6761 1.731 +v -0.625 0.5877 1.9078 +v -0.625 0.7203 1.7752 +v -0.625 0.5435 1.8636 +v -0.625 0.6761 1.731 +v -1 1.1623 1.9078 +v -1 1.0297 1.7752 +v -1 1.2065 1.8636 +v -1 1.0739 1.731 +v -0.625 1.1623 1.9078 +v -0.625 1.0297 1.7752 +v -0.625 1.2065 1.8636 +v -0.625 1.0739 1.731 +v -1 0.9687 2.375 +v -1 0.7813 2.375 +v -1 0.9687 2.4375 +v -1 0.7813 2.4375 +v -0.625 0.9687 2.375 +v -0.625 0.7813 2.375 +v -0.625 0.9687 2.4375 +v -0.625 0.7813 2.4375 +v -1 0.5625 1.9688 +v -1 0.5625 2.1562 +v -1 0.5 1.9688 +v -1 0.5 2.1562 +v -0.625 0.5625 1.9688 +v -0.625 0.5625 2.1562 +v -0.625 0.5 1.9688 +v -0.625 0.5 2.1562 +v -1 0.7813 1.75 +v -1 0.9687 1.75 +v -1 0.7813 1.6875 +v -1 0.9687 1.6875 +v -0.625 0.7813 1.75 +v -0.625 0.9687 1.75 +v -0.625 0.7813 1.6875 +v -0.625 0.9687 1.6875 +v -1 1.1875 2.1562 +v -1 1.1875 1.9688 +v -1 1.25 2.1562 +v -1 1.25 1.9688 +v -0.625 1.1875 2.1562 +v -0.625 1.1875 1.9688 +v -0.625 1.25 2.1562 +v -0.625 1.25 1.9688 +v -0.875 1 1.75 +v -0.875 1.1875 1.9375 +v -0.875 0.75 1.75 +v -0.875 0.5625 1.9375 +v -0.9375 1 1.75 +v -0.9375 1.1875 1.9375 +v -0.9375 0.75 1.75 +v -0.9375 0.5625 1.9375 +v -0.9375 1.1875 2.1875 +v -0.9375 1.1875 1.9375 +v -0.9375 0.5625 2.1875 +v -0.9375 0.5625 1.9375 +v -0.875 1.1875 2.1875 +v -0.875 1.1875 1.9375 +v -0.875 0.5625 2.1875 +v -0.875 0.5625 1.9375 +v -0.9375 1 2.375 +v -0.9375 1.1875 2.1875 +v -0.9375 0.75 2.375 +v -0.9375 0.5625 2.1875 +v -0.875 1 2.375 +v -0.875 1.1875 2.1875 +v -0.875 0.75 2.375 +v -0.875 0.5625 2.1875 +v -0.6875 1 1.75 +v -0.6875 1.1875 1.9375 +v -0.6875 0.75 1.75 +v -0.6875 0.5625 1.9375 +v -0.75 1 1.75 +v -0.75 1.1875 1.9375 +v -0.75 0.75 1.75 +v -0.75 0.5625 1.9375 +v -0.75 1.1875 2.1875 +v -0.75 1.1875 1.9375 +v -0.75 0.5625 2.1875 +v -0.75 0.5625 1.9375 +v -0.6875 1.1875 2.1875 +v -0.6875 1.1875 1.9375 +v -0.6875 0.5625 2.1875 +v -0.6875 0.5625 1.9375 +v -0.75 1 2.375 +v -0.75 1.1875 2.1875 +v -0.75 0.75 2.375 +v -0.75 0.5625 2.1875 +v -0.6875 1 2.375 +v -0.6875 1.1875 2.1875 +v -0.6875 0.75 2.375 +v -0.6875 0.5625 2.1875 +v -1 1.0625 2.25 +v -1 1.0625 1.875 +v -1 0.6875 2.25 +v -1 0.6875 1.875 +v -0.9375 1.0625 2.25 +v -0.9375 1.0625 1.875 +v -0.9375 0.6875 2.25 +v -0.9375 0.6875 1.875 +v -0.625 1.0625 2.25 +v -0.625 1.0625 1.875 +v -0.625 0.6875 2.25 +v -0.625 0.6875 1.875 +v -0.6875 1.0625 2.25 +v -0.6875 1.0625 1.875 +v -0.6875 0.6875 2.25 +v -0.6875 0.6875 1.875 vt 0 0.5 vt 0.0625 0.5 vt 0.0625 0.6875 @@ -13335,14 +11808,14 @@ vt 0 0.5 vt 0.0625 0.5 vt 0.0625 0.6875 vt 0 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -13351,22 +11824,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -13376,21 +11849,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -13399,22 +11872,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -13424,21 +11897,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -13447,22 +11920,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -13472,21 +11945,21 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 -vt 0.9375 0.71875 -vt 0.8125 0.71875 +vt 0.9375 0.7188 +vt 0.8125 0.7188 vt 0.8125 0.6875 vt 0.9375 0.6875 vt 0.8125 0.9375 vt 0.9375 0.9375 -vt 0.9375 0.90625 -vt 0.8125 0.90625 +vt 0.9375 0.9063 +vt 0.8125 0.9063 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.9375 0.6875 @@ -13495,22 +11968,22 @@ vt 0.9375 0.9375 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 -vt 0.90625 0.9375 -vt 0.90625 0.6875 +vt 0.9063 0.9375 +vt 0.9063 0.6875 vt 0.9375 0.6875 vt 0.9375 0.9375 -vt 0.84375 0.6875 -vt 0.84375 0.9375 +vt 0.8438 0.6875 +vt 0.8438 0.9375 vt 0.8125 0.9375 vt 0.8125 0.6875 vt 0.8125 0.6875 -vt 0.8125 0.71875 -vt 0.9375 0.71875 +vt 0.8125 0.7188 +vt 0.9375 0.7188 vt 0.9375 0.6875 -vt 0.9375 0.90625 +vt 0.9375 0.9063 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.8125 0.90625 +vt 0.8125 0.9063 vt 0.9375 0.6875 vt 0.8125 0.6875 vt 0.8125 0.9375 @@ -13520,519 +11993,569 @@ vt 0.9375 0.6875 vt 0.9375 0.9375 vt 0.8125 0.9375 vt 0.9375 0.6875 -vt 0.90625 0.6875 -vt 0.90625 0.9375 +vt 0.9063 0.6875 +vt 0.9063 0.9375 vt 0.9375 0.9375 vt 0.8125 0.9375 -vt 0.84375 0.9375 -vt 0.84375 0.6875 +vt 0.8438 0.9375 +vt 0.8438 0.6875 vt 0.8125 0.6875 vt 0.0625 0.825 vt 0.175 0.9375 vt 0.175 0.5625 vt 0.0625 0.675 -vt 0.1749990625 0.5624984375 -vt 0.0625 0.6749974999999999 -vt 0.0625025 0.8249984375 -vt 0.1749990625 0.9375 +vt 0.175 0.5625 +vt 0.0625 0.675 +vt 0.0625 0.825 +vt 0.175 0.9375 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 -vt 0.3250040625 0.5624984375 -vt 0.175 0.5624984375 +vt 0.325 0.5625 +vt 0.175 0.5625 vt 0.175 0.9375 -vt 0.3250040625 0.9375 +vt 0.325 0.9375 vt 0.175 0.9375 vt 0.325 0.9375 vt 0.325 0.5625 vt 0.175 0.5625 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 -vt 0.4374990625 0.6749974999999999 -vt 0.325 0.5624984375 +vt 0.4375 0.675 +vt 0.325 0.5625 vt 0.325 0.9375 -vt 0.4374990625 0.82500125 +vt 0.4375 0.825 vt 0.325 0.9375 vt 0.4375 0.825 vt 0.4375 0.675 vt 0.325 0.5625 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.825 vt 0.175 0.9375 vt 0.175 0.5625 vt 0.0625 0.675 -vt 0.1749990625 0.5624984375 -vt 0.0625 0.6749974999999999 -vt 0.0625025 0.8249984375 -vt 0.1749990625 0.9375 +vt 0.175 0.5625 +vt 0.0625 0.675 +vt 0.0625 0.825 +vt 0.175 0.9375 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 -vt 0.3250040625 0.5624984375 -vt 0.175 0.5624984375 +vt 0.325 0.5625 +vt 0.175 0.5625 vt 0.175 0.9375 -vt 0.3250040625 0.9375 +vt 0.325 0.9375 vt 0.175 0.9375 vt 0.325 0.9375 vt 0.325 0.5625 vt 0.175 0.5625 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 -vt 0.4374990625 0.6749974999999999 -vt 0.325 0.5624984375 +vt 0.4375 0.675 +vt 0.325 0.5625 vt 0.325 0.9375 -vt 0.4374990625 0.82500125 +vt 0.4375 0.825 vt 0.325 0.9375 vt 0.4375 0.825 vt 0.4375 0.675 vt 0.325 0.5625 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 vt 0.0625 0.8125 -vt 0.09375 0.8125 -vt 0.09375 0.6875 +vt 0.0938 0.8125 +vt 0.0938 0.6875 vt 0.0625 0.6875 -vt 0.53125 0.9375 -vt 0.71875 0.9375 -vt 0.71875 0.75 -vt 0.53125 0.75 +vt 0.5313 0.9375 +vt 0.7188 0.9375 +vt 0.7188 0.75 +vt 0.5313 0.75 vt 0.5625 0.75 -vt 0.53125 0.75 -vt 0.53125 0.9375 +vt 0.5313 0.75 +vt 0.5313 0.9375 vt 0.5625 0.9375 vt 0.6875 0.9375 -vt 0.71875 0.9375 -vt 0.71875 0.75 +vt 0.7188 0.9375 +vt 0.7188 0.75 vt 0.6875 0.75 -vt 0.53125 0.9375 +vt 0.5313 0.9375 vt 0.5625 0.9375 vt 0.5625 0.75 -vt 0.53125 0.75 +vt 0.5313 0.75 vt 0.6875 0.9375 -vt 0.71875 0.9375 -vt 0.71875 0.75 +vt 0.7188 0.9375 +vt 0.7188 0.75 vt 0.6875 0.75 -vt 0.71875 0.75 -vt 0.71875 0.9375 -vt 0.53125 0.9375 -vt 0.53125 0.75 -vt 0.53125 0.9375 -vt 0.53125 0.75 +vt 0.7188 0.75 +vt 0.7188 0.9375 +vt 0.5313 0.9375 +vt 0.5313 0.75 +vt 0.5313 0.9375 +vt 0.5313 0.75 vt 0.5625 0.75 vt 0.5625 0.9375 -vt 0.71875 0.75 -vt 0.71875 0.9375 +vt 0.7188 0.75 +vt 0.7188 0.9375 vt 0.6875 0.9375 vt 0.6875 0.75 vt 0.5625 0.75 vt 0.5625 0.9375 -vt 0.53125 0.9375 -vt 0.53125 0.75 -vt 0.71875 0.75 -vt 0.71875 0.9375 +vt 0.5313 0.9375 +vt 0.5313 0.75 +vt 0.7188 0.75 +vt 0.7188 0.9375 vt 0.6875 0.9375 vt 0.6875 0.75 -vn -8.659560562354933e-17 1 1.1102230246251565e-16 -vn 8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn -8.65956056235493e-17 -1.1102230246251565e-16 1 -vn 8.65956056235493e-17 1.1102230246251565e-16 -1 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn 1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn -1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn -1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn 1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn 1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn 1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn -1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn 1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn 1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn -1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn 1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn -1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn -1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn 1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.65956056235493e-17 1.1102230246251565e-16 -1 -vn -8.659560562354932e-17 -1.1102230246251568e-16 1 -vn -8.659560562354932e-17 1 -2.775557561562892e-16 -vn 8.659560562354934e-17 -1 -3.3306690738754696e-16 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.659560562354933e-17 1 1.1102230246251565e-16 -vn 8.659560562354934e-17 -1 -1.1102230246251568e-16 -vn 8.659560562354927e-17 3.3306690738754696e-16 -1 -vn -8.659560562354934e-17 2.775557561562892e-16 1 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.65956056235493e-17 -1.1102230246251565e-16 1 -vn 8.659560562354932e-17 1.1102230246251568e-16 -1 -vn 8.659560562354932e-17 -1 2.775557561562892e-16 -vn -8.659560562354934e-17 1 3.3306690738754696e-16 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn 8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn -8.659560562354934e-17 1 1.1102230246251568e-16 -vn -8.659560562354927e-17 -3.3306690738754696e-16 1 -vn 8.659560562354934e-17 -2.775557561562892e-16 -1 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn 1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn 8.659560562354932e-17 1.1102230246251568e-16 -1 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.659560562354934e-17 1 1.1102230246251568e-16 -vn 8.659560562354934e-17 -1 -1.1102230246251568e-16 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn 1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn -8.659560562354932e-17 -1.1102230246251568e-16 1 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -1.232595164407831e-32 0.7071067811865476 -0.7071067811865475 -vn 1.224646799147353e-16 -0.7071067811865475 -0.7071067811865476 -vn 8.659560562354932e-17 1.1102230246251568e-16 -1 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.659560562354934e-17 1 1.1102230246251568e-16 -vn 8.659560562354934e-17 -1 -1.1102230246251568e-16 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -1.224646799147353e-16 0.7071067811865475 0.7071067811865476 -vn 1.232595164407831e-32 -0.7071067811865476 0.7071067811865475 -vn -8.659560562354932e-17 -1.1102230246251568e-16 1 -vn -1 -8.65956056235493e-17 -8.659560562354932e-17 -vn -8.659560562354933e-17 1 1.1102230246251565e-16 -vn 8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn -8.65956056235493e-17 -1.1102230246251565e-16 1 -vn 8.65956056235493e-17 1.1102230246251565e-16 -1 -vn 1 8.65956056235493e-17 8.659560562354932e-17 -vn -8.659560562354933e-17 1 1.1102230246251565e-16 -vn 8.659560562354933e-17 -1 -1.1102230246251565e-16 -vn -8.65956056235493e-17 -1.1102230246251565e-16 1 -vn 8.65956056235493e-17 1.1102230246251565e-16 -1 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 -0.71 -0.71 +vn 0 0.71 0.71 +vn 0 0.71 -0.71 +vn 0 -0.71 0.71 +vn -1 0 0 +vn 1 0 0 +vn 0 0.71 -0.71 +vn 0 -0.71 0.71 +vn 0 -0.71 -0.71 +vn 0 0.71 0.71 +vn -1 0 0 +vn 1 0 0 +vn 0 0.71 0.71 +vn 0 -0.71 -0.71 +vn 0 -0.71 0.71 +vn 0 0.71 -0.71 +vn -1 0 0 +vn 1 0 0 +vn 0 -0.71 0.71 +vn 0 0.71 -0.71 +vn 0 0.71 0.71 +vn 0 -0.71 -0.71 +vn -1 0 0 +vn 1 0 0 +vn 0 0 -1 +vn 0 0 1 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 -1 +vn 0 0 1 +vn -1 0 0 +vn 1 0 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 -1 0 +vn 0 1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn -1 0 0 +vn 0 0.71 -0.71 +vn 0 -0.71 -0.71 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0.71 0.71 +vn 0 -0.71 0.71 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vn 0 0.71 -0.71 +vn 0 -0.71 -0.71 +vn 0 0 -1 +vn -1 0 0 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn -1 0 0 +vn 1 0 0 +vn 0 0.71 0.71 +vn 0 -0.71 0.71 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 usemtl tracks14_12 -f 2206/6105/1527 2202/6106/1527 2201/6107/1527 -f 2206/6105/1527 2201/6107/1527 2205/6108/1527 -f 2207/6109/1528 2203/6110/1528 2204/6111/1528 -f 2207/6109/1528 2204/6111/1528 2208/6112/1528 -f 2205/6113/1529 2201/6114/1529 2203/6115/1529 -f 2205/6113/1529 2203/6115/1529 2207/6116/1529 -f 2202/6117/1530 2206/6118/1530 2208/6119/1530 -f 2202/6117/1530 2208/6119/1530 2204/6120/1530 -f 2209/6121/1531 2210/6122/1531 2212/6123/1531 -f 2209/6121/1531 2212/6123/1531 2211/6124/1531 -f 2214/6125/1532 2213/6126/1532 2215/6127/1532 -f 2214/6125/1532 2215/6127/1532 2216/6128/1532 -f 2214/6129/1533 2210/6130/1533 2209/6131/1533 -f 2214/6129/1533 2209/6131/1533 2213/6132/1533 -f 2215/6133/1534 2211/6134/1534 2212/6135/1534 -f 2215/6133/1534 2212/6135/1534 2216/6136/1534 -f 2213/6137/1535 2209/6138/1535 2211/6139/1535 -f 2213/6137/1535 2211/6139/1535 2215/6140/1535 -f 2210/6141/1536 2214/6142/1536 2216/6143/1536 -f 2210/6141/1536 2216/6143/1536 2212/6144/1536 -f 2220/6145/1537 2218/6146/1537 2217/6147/1537 -f 2220/6145/1537 2217/6147/1537 2219/6148/1537 -f 2223/6149/1538 2221/6150/1538 2222/6151/1538 -f 2223/6149/1538 2222/6151/1538 2224/6152/1538 -f 2217/6153/1539 2218/6154/1539 2222/6155/1539 -f 2217/6153/1539 2222/6155/1539 2221/6156/1539 -f 2220/6157/1540 2219/6158/1540 2223/6159/1540 -f 2220/6157/1540 2223/6159/1540 2224/6160/1540 -f 2219/6161/1541 2217/6162/1541 2221/6163/1541 -f 2219/6161/1541 2221/6163/1541 2223/6164/1541 -f 2224/6165/1542 2222/6166/1542 2218/6167/1542 -f 2224/6165/1542 2218/6167/1542 2220/6168/1542 -f 2225/6169/1543 2226/6170/1543 2228/6171/1543 -f 2225/6169/1543 2228/6171/1543 2227/6172/1543 -f 2230/6173/1544 2229/6174/1544 2231/6175/1544 -f 2230/6173/1544 2231/6175/1544 2232/6176/1544 -f 2230/6177/1545 2226/6178/1545 2225/6179/1545 -f 2230/6177/1545 2225/6179/1545 2229/6180/1545 -f 2231/6181/1546 2227/6182/1546 2228/6183/1546 -f 2231/6181/1546 2228/6183/1546 2232/6184/1546 -f 2229/6185/1547 2225/6186/1547 2227/6187/1547 -f 2229/6185/1547 2227/6187/1547 2231/6188/1547 -f 2226/6189/1548 2230/6190/1548 2232/6191/1548 -f 2226/6189/1548 2232/6191/1548 2228/6192/1548 -f 2236/6193/1549 2234/6194/1549 2233/6195/1549 -f 2236/6193/1549 2233/6195/1549 2235/6196/1549 -f 2239/6197/1550 2237/6198/1550 2238/6199/1550 -f 2239/6197/1550 2238/6199/1550 2240/6200/1550 -f 2233/6201/1551 2234/6202/1551 2238/6203/1551 -f 2233/6201/1551 2238/6203/1551 2237/6204/1551 -f 2236/6205/1552 2235/6206/1552 2239/6207/1552 -f 2236/6205/1552 2239/6207/1552 2240/6208/1552 -f 2235/6209/1553 2233/6210/1553 2237/6211/1553 -f 2235/6209/1553 2237/6211/1553 2239/6212/1553 -f 2240/6213/1554 2238/6214/1554 2234/6215/1554 -f 2240/6213/1554 2234/6215/1554 2236/6216/1554 -f 2241/6217/1555 2242/6218/1555 2244/6219/1555 -f 2241/6217/1555 2244/6219/1555 2243/6220/1555 -f 2246/6221/1556 2245/6222/1556 2247/6223/1556 -f 2246/6221/1556 2247/6223/1556 2248/6224/1556 -f 2246/6225/1557 2242/6226/1557 2241/6227/1557 -f 2246/6225/1557 2241/6227/1557 2245/6228/1557 -f 2247/6229/1558 2243/6230/1558 2244/6231/1558 -f 2247/6229/1558 2244/6231/1558 2248/6232/1558 -f 2245/6233/1559 2241/6234/1559 2243/6235/1559 -f 2245/6233/1559 2243/6235/1559 2247/6236/1559 -f 2242/6237/1560 2246/6238/1560 2248/6239/1560 -f 2242/6237/1560 2248/6239/1560 2244/6240/1560 -f 2252/6241/1561 2250/6242/1561 2249/6243/1561 -f 2252/6241/1561 2249/6243/1561 2251/6244/1561 -f 2255/6245/1562 2253/6246/1562 2254/6247/1562 -f 2255/6245/1562 2254/6247/1562 2256/6248/1562 -f 2249/6249/1563 2250/6250/1563 2254/6251/1563 -f 2249/6249/1563 2254/6251/1563 2253/6252/1563 -f 2252/6253/1564 2251/6254/1564 2255/6255/1564 -f 2252/6253/1564 2255/6255/1564 2256/6256/1564 -f 2251/6257/1565 2249/6258/1565 2253/6259/1565 -f 2251/6257/1565 2253/6259/1565 2255/6260/1565 -f 2256/6261/1566 2254/6262/1566 2250/6263/1566 -f 2256/6261/1566 2250/6263/1566 2252/6264/1566 -f 2257/6265/1567 2258/6266/1567 2260/6267/1567 -f 2257/6265/1567 2260/6267/1567 2259/6268/1567 -f 2262/6269/1568 2261/6270/1568 2263/6271/1568 -f 2262/6269/1568 2263/6271/1568 2264/6272/1568 -f 2262/6273/1569 2258/6274/1569 2257/6275/1569 -f 2262/6273/1569 2257/6275/1569 2261/6276/1569 -f 2263/6277/1570 2259/6278/1570 2260/6279/1570 -f 2263/6277/1570 2260/6279/1570 2264/6280/1570 -f 2261/6281/1571 2257/6282/1571 2259/6283/1571 -f 2261/6281/1571 2259/6283/1571 2263/6284/1571 -f 2258/6285/1572 2262/6286/1572 2264/6287/1572 -f 2258/6285/1572 2264/6287/1572 2260/6288/1572 -f 2268/6289/1573 2266/6290/1573 2265/6291/1573 -f 2268/6289/1573 2265/6291/1573 2267/6292/1573 -f 2271/6293/1574 2269/6294/1574 2270/6295/1574 -f 2271/6293/1574 2270/6295/1574 2272/6296/1574 -f 2265/6297/1575 2266/6298/1575 2270/6299/1575 -f 2265/6297/1575 2270/6299/1575 2269/6300/1575 -f 2268/6301/1576 2267/6302/1576 2271/6303/1576 -f 2268/6301/1576 2271/6303/1576 2272/6304/1576 -f 2267/6305/1577 2265/6306/1577 2269/6307/1577 -f 2267/6305/1577 2269/6307/1577 2271/6308/1577 -f 2272/6309/1578 2270/6310/1578 2266/6311/1578 -f 2272/6309/1578 2266/6311/1578 2268/6312/1578 -f 2273/6313/1579 2274/6314/1579 2276/6315/1579 -f 2273/6313/1579 2276/6315/1579 2275/6316/1579 -f 2278/6317/1580 2277/6318/1580 2279/6319/1580 -f 2278/6317/1580 2279/6319/1580 2280/6320/1580 -f 2278/6321/1581 2274/6322/1581 2273/6323/1581 -f 2278/6321/1581 2273/6323/1581 2277/6324/1581 -f 2279/6325/1582 2275/6326/1582 2276/6327/1582 -f 2279/6325/1582 2276/6327/1582 2280/6328/1582 -f 2277/6329/1583 2273/6330/1583 2275/6331/1583 -f 2277/6329/1583 2275/6331/1583 2279/6332/1583 -f 2281/6333/1584 2282/6334/1584 2284/6335/1584 -f 2281/6333/1584 2284/6335/1584 2283/6336/1584 -f 2286/6337/1585 2285/6338/1585 2287/6339/1585 -f 2286/6337/1585 2287/6339/1585 2288/6340/1585 -f 2286/6341/1586 2282/6342/1586 2281/6343/1586 -f 2286/6341/1586 2281/6343/1586 2285/6344/1586 -f 2287/6345/1587 2283/6346/1587 2284/6347/1587 -f 2287/6345/1587 2284/6347/1587 2288/6348/1587 -f 2289/6349/1588 2290/6350/1588 2292/6351/1588 -f 2289/6349/1588 2292/6351/1588 2291/6352/1588 -f 2294/6353/1589 2293/6354/1589 2295/6355/1589 -f 2294/6353/1589 2295/6355/1589 2296/6356/1589 -f 2294/6357/1590 2290/6358/1590 2289/6359/1590 -f 2294/6357/1590 2289/6359/1590 2293/6360/1590 -f 2295/6361/1591 2291/6362/1591 2292/6363/1591 -f 2295/6361/1591 2292/6363/1591 2296/6364/1591 -f 2293/6365/1592 2289/6366/1592 2291/6367/1592 -f 2293/6365/1592 2291/6367/1592 2295/6368/1592 -f 2297/6369/1593 2298/6370/1593 2300/6371/1593 -f 2297/6369/1593 2300/6371/1593 2299/6372/1593 -f 2302/6373/1594 2301/6374/1594 2303/6375/1594 -f 2302/6373/1594 2303/6375/1594 2304/6376/1594 -f 2302/6377/1595 2298/6378/1595 2297/6379/1595 -f 2302/6377/1595 2297/6379/1595 2301/6380/1595 -f 2303/6381/1596 2299/6382/1596 2300/6383/1596 -f 2303/6381/1596 2300/6383/1596 2304/6384/1596 -f 2301/6385/1597 2297/6386/1597 2299/6387/1597 -f 2301/6385/1597 2299/6387/1597 2303/6388/1597 -f 2305/6389/1598 2306/6390/1598 2308/6391/1598 -f 2305/6389/1598 2308/6391/1598 2307/6392/1598 -f 2310/6393/1599 2309/6394/1599 2311/6395/1599 -f 2310/6393/1599 2311/6395/1599 2312/6396/1599 -f 2310/6397/1600 2306/6398/1600 2305/6399/1600 -f 2310/6397/1600 2305/6399/1600 2309/6400/1600 -f 2311/6401/1601 2307/6402/1601 2308/6403/1601 -f 2311/6401/1601 2308/6403/1601 2312/6404/1601 -f 2313/6405/1602 2314/6406/1602 2316/6407/1602 -f 2313/6405/1602 2316/6407/1602 2315/6408/1602 -f 2318/6409/1603 2317/6410/1603 2319/6411/1603 -f 2318/6409/1603 2319/6411/1603 2320/6412/1603 -f 2318/6413/1604 2314/6414/1604 2313/6415/1604 -f 2318/6413/1604 2313/6415/1604 2317/6416/1604 -f 2319/6417/1605 2315/6418/1605 2316/6419/1605 -f 2319/6417/1605 2316/6419/1605 2320/6420/1605 -f 2317/6421/1606 2313/6422/1606 2315/6423/1606 -f 2317/6421/1606 2315/6423/1606 2319/6424/1606 -f 2321/6425/1607 2322/6426/1607 2324/6427/1607 -f 2321/6425/1607 2324/6427/1607 2323/6428/1607 -f 2326/6429/1608 2322/6430/1608 2321/6431/1608 -f 2326/6429/1608 2321/6431/1608 2325/6432/1608 -f 2327/6433/1609 2323/6434/1609 2324/6435/1609 -f 2327/6433/1609 2324/6435/1609 2328/6436/1609 -f 2325/6437/1610 2321/6438/1610 2323/6439/1610 -f 2325/6437/1610 2323/6439/1610 2327/6440/1610 -f 2322/6441/1611 2326/6442/1611 2328/6443/1611 -f 2322/6441/1611 2328/6443/1611 2324/6444/1611 -f 2332/6445/1612 2330/6446/1612 2329/6447/1612 -f 2332/6445/1612 2329/6447/1612 2331/6448/1612 -f 2329/6449/1613 2330/6450/1613 2334/6451/1613 -f 2329/6449/1613 2334/6451/1613 2333/6452/1613 -f 2332/6453/1614 2331/6454/1614 2335/6455/1614 -f 2332/6453/1614 2335/6455/1614 2336/6456/1614 -f 2331/6457/1615 2329/6458/1615 2333/6459/1615 -f 2331/6457/1615 2333/6459/1615 2335/6460/1615 -f 2336/6461/1616 2334/6462/1616 2330/6463/1616 -f 2336/6461/1616 2330/6463/1616 2332/6464/1616 +f 2206/6105/1527 2202/6106/1527 2201/6107/1527 2205/6108/1527 +f 2207/6109/1528 2203/6110/1528 2204/6111/1528 2208/6112/1528 +f 2205/6113/1529 2201/6114/1529 2203/6115/1529 2207/6116/1529 +f 2202/6117/1530 2206/6118/1530 2208/6119/1530 2204/6120/1530 +f 2209/6121/1531 2210/6122/1531 2212/6123/1531 2211/6124/1531 +f 2214/6125/1532 2213/6126/1532 2215/6127/1532 2216/6128/1532 +f 2214/6129/1533 2210/6130/1533 2209/6131/1533 2213/6132/1533 +f 2215/6133/1534 2211/6134/1534 2212/6135/1534 2216/6136/1534 +f 2213/6137/1535 2209/6138/1535 2211/6139/1535 2215/6140/1535 +f 2210/6141/1536 2214/6142/1536 2216/6143/1536 2212/6144/1536 +f 2220/6145/1537 2218/6146/1537 2217/6147/1537 2219/6148/1537 +f 2223/6149/1538 2221/6150/1538 2222/6151/1538 2224/6152/1538 +f 2217/6153/1539 2218/6154/1539 2222/6155/1539 2221/6156/1539 +f 2220/6157/1540 2219/6158/1540 2223/6159/1540 2224/6160/1540 +f 2219/6161/1541 2217/6162/1541 2221/6163/1541 2223/6164/1541 +f 2224/6165/1542 2222/6166/1542 2218/6167/1542 2220/6168/1542 +f 2225/6169/1543 2226/6170/1543 2228/6171/1543 2227/6172/1543 +f 2230/6173/1544 2229/6174/1544 2231/6175/1544 2232/6176/1544 +f 2230/6177/1545 2226/6178/1545 2225/6179/1545 2229/6180/1545 +f 2231/6181/1546 2227/6182/1546 2228/6183/1546 2232/6184/1546 +f 2229/6185/1547 2225/6186/1547 2227/6187/1547 2231/6188/1547 +f 2226/6189/1548 2230/6190/1548 2232/6191/1548 2228/6192/1548 +f 2236/6193/1549 2234/6194/1549 2233/6195/1549 2235/6196/1549 +f 2239/6197/1550 2237/6198/1550 2238/6199/1550 2240/6200/1550 +f 2233/6201/1551 2234/6202/1551 2238/6203/1551 2237/6204/1551 +f 2236/6205/1552 2235/6206/1552 2239/6207/1552 2240/6208/1552 +f 2235/6209/1553 2233/6210/1553 2237/6211/1553 2239/6212/1553 +f 2240/6213/1554 2238/6214/1554 2234/6215/1554 2236/6216/1554 +f 2241/6217/1555 2242/6218/1555 2244/6219/1555 2243/6220/1555 +f 2246/6221/1556 2245/6222/1556 2247/6223/1556 2248/6224/1556 +f 2246/6225/1557 2242/6226/1557 2241/6227/1557 2245/6228/1557 +f 2247/6229/1558 2243/6230/1558 2244/6231/1558 2248/6232/1558 +f 2245/6233/1559 2241/6234/1559 2243/6235/1559 2247/6236/1559 +f 2242/6237/1560 2246/6238/1560 2248/6239/1560 2244/6240/1560 +f 2252/6241/1561 2250/6242/1561 2249/6243/1561 2251/6244/1561 +f 2255/6245/1562 2253/6246/1562 2254/6247/1562 2256/6248/1562 +f 2249/6249/1563 2250/6250/1563 2254/6251/1563 2253/6252/1563 +f 2252/6253/1564 2251/6254/1564 2255/6255/1564 2256/6256/1564 +f 2251/6257/1565 2249/6258/1565 2253/6259/1565 2255/6260/1565 +f 2256/6261/1566 2254/6262/1566 2250/6263/1566 2252/6264/1566 +f 2257/6265/1567 2258/6266/1567 2260/6267/1567 2259/6268/1567 +f 2262/6269/1568 2261/6270/1568 2263/6271/1568 2264/6272/1568 +f 2262/6273/1569 2258/6274/1569 2257/6275/1569 2261/6276/1569 +f 2263/6277/1570 2259/6278/1570 2260/6279/1570 2264/6280/1570 +f 2261/6281/1571 2257/6282/1571 2259/6283/1571 2263/6284/1571 +f 2258/6285/1572 2262/6286/1572 2264/6287/1572 2260/6288/1572 +f 2268/6289/1573 2266/6290/1573 2265/6291/1573 2267/6292/1573 +f 2271/6293/1574 2269/6294/1574 2270/6295/1574 2272/6296/1574 +f 2265/6297/1575 2266/6298/1575 2270/6299/1575 2269/6300/1575 +f 2268/6301/1576 2267/6302/1576 2271/6303/1576 2272/6304/1576 +f 2267/6305/1577 2265/6306/1577 2269/6307/1577 2271/6308/1577 +f 2272/6309/1578 2270/6310/1578 2266/6311/1578 2268/6312/1578 +f 2273/6313/1579 2274/6314/1579 2276/6315/1579 2275/6316/1579 +f 2278/6317/1580 2277/6318/1580 2279/6319/1580 2280/6320/1580 +f 2278/6321/1581 2274/6322/1581 2273/6323/1581 2277/6324/1581 +f 2279/6325/1582 2275/6326/1582 2276/6327/1582 2280/6328/1582 +f 2277/6329/1583 2273/6330/1583 2275/6331/1583 2279/6332/1583 +f 2281/6333/1584 2282/6334/1584 2284/6335/1584 2283/6336/1584 +f 2286/6337/1585 2285/6338/1585 2287/6339/1585 2288/6340/1585 +f 2286/6341/1586 2282/6342/1586 2281/6343/1586 2285/6344/1586 +f 2287/6345/1587 2283/6346/1587 2284/6347/1587 2288/6348/1587 +f 2289/6349/1588 2290/6350/1588 2292/6351/1588 2291/6352/1588 +f 2294/6353/1589 2293/6354/1589 2295/6355/1589 2296/6356/1589 +f 2294/6357/1590 2290/6358/1590 2289/6359/1590 2293/6360/1590 +f 2295/6361/1591 2291/6362/1591 2292/6363/1591 2296/6364/1591 +f 2293/6365/1592 2289/6366/1592 2291/6367/1592 2295/6368/1592 +f 2297/6369/1593 2298/6370/1593 2300/6371/1593 2299/6372/1593 +f 2302/6373/1594 2301/6374/1594 2303/6375/1594 2304/6376/1594 +f 2302/6377/1595 2298/6378/1595 2297/6379/1595 2301/6380/1595 +f 2303/6381/1596 2299/6382/1596 2300/6383/1596 2304/6384/1596 +f 2301/6385/1597 2297/6386/1597 2299/6387/1597 2303/6388/1597 +f 2305/6389/1598 2306/6390/1598 2308/6391/1598 2307/6392/1598 +f 2310/6393/1599 2309/6394/1599 2311/6395/1599 2312/6396/1599 +f 2310/6397/1600 2306/6398/1600 2305/6399/1600 2309/6400/1600 +f 2311/6401/1601 2307/6402/1601 2308/6403/1601 2312/6404/1601 +f 2313/6405/1602 2314/6406/1602 2316/6407/1602 2315/6408/1602 +f 2318/6409/1603 2317/6410/1603 2319/6411/1603 2320/6412/1603 +f 2318/6413/1604 2314/6414/1604 2313/6415/1604 2317/6416/1604 +f 2319/6417/1605 2315/6418/1605 2316/6419/1605 2320/6420/1605 +f 2317/6421/1606 2313/6422/1606 2315/6423/1606 2319/6424/1606 +f 2321/6425/1607 2322/6426/1607 2324/6427/1607 2323/6428/1607 +f 2326/6429/1608 2322/6430/1608 2321/6431/1608 2325/6432/1608 +f 2327/6433/1609 2323/6434/1609 2324/6435/1609 2328/6436/1609 +f 2325/6437/1610 2321/6438/1610 2323/6439/1610 2327/6440/1610 +f 2322/6441/1611 2326/6442/1611 2328/6443/1611 2324/6444/1611 +f 2332/6445/1612 2330/6446/1612 2329/6447/1612 2331/6448/1612 +f 2329/6449/1613 2330/6450/1613 2334/6451/1613 2333/6452/1613 +f 2332/6453/1614 2331/6454/1614 2335/6455/1614 2336/6456/1614 +f 2331/6457/1615 2329/6458/1615 2333/6459/1615 2335/6460/1615 +f 2336/6461/1616 2334/6462/1616 2330/6463/1616 2332/6464/1616 +o wheel_right1 +v 1 0.6246 0.6542 +v 1 0.6246 0.2801 +v 1 0.2504 0.6542 +v 1 0.2504 0.2801 +v 0.9583 0.6246 0.6542 +v 0.9583 0.6246 0.2801 +v 0.9583 0.2504 0.6542 +v 0.9583 0.2504 0.2801 +v 0.9583 0.2836 0.8341 +v 0.625 0.2836 0.8341 +v 0.9583 0.5914 0.8341 +v 0.625 0.5914 0.8341 +v 0.9583 0.8091 0.6164 +v 0.625 0.8091 0.6164 +v 0.9583 0.8091 0.3086 +v 0.625 0.8091 0.3086 +v 0.9583 0.5914 0.0909 +v 0.625 0.5914 0.0909 +v 0.9583 0.2836 0.0909 +v 0.625 0.2836 0.0909 +v 0.9583 0.0659 0.3086 +v 0.625 0.0659 0.3086 +v 0.9583 0.0659 0.6164 +v 0.625 0.0659 0.6164 +vt 0.2813 0.2188 +vt 0.2813 0.4063 +vt 0.4688 0.4063 +vt 0.4688 0.2188 +vt 0.4688 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.375 +vt 0.4688 0.375 +vt 0.4688 0.25 +vt 0.2813 0.25 +vt 0.2813 0.2188 +vt 0.4688 0.2188 +vt 0.2813 0.2188 +vt 0.2813 0.4063 +vt 0.3125 0.4063 +vt 0.3125 0.2188 +vt 0.4375 0.2188 +vt 0.4375 0.4063 +vt 0.4688 0.4063 +vt 0.4688 0.2188 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0.8438 0.5313 +vt 0.6563 0.5313 +vt 0.5313 0.4063 +vt 0.9688 0.4063 +vt 0.5313 0.4063 +vt 0.5313 0.2188 +vt 0.9688 0.2188 +vt 0.9688 0.4063 +vt 0.5313 0.2188 +vt 0.6563 0.0938 +vt 0.8438 0.0938 +vt 0.9688 0.2188 +vt 0.5313 0.4063 +vt 0.9688 0.4063 +vt 0.8438 0.5313 +vt 0.6563 0.5313 +vt 0.5313 0.4063 +vt 0.5313 0.2188 +vt 0.9688 0.2188 +vt 0.9688 0.4063 +vt 0.8438 0.0938 +vt 0.9688 0.2188 +vt 0.5313 0.2188 +vt 0.6563 0.0938 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 1 +vn 0 0.71 0.71 +vn 0 1 0 +vn 0 0.71 -0.71 +vn 0 0 -1 +vn 0 -0.71 -0.71 +vn 0 -1 0 +vn 0 -0.71 0.71 +vn 1 0 0 +vn 1 0 0 +vn 1 0 0 +vn -1 0 0 +vn -1 0 0 +vn -1 0 0 +usemtl tracks16_14 +f 2340/6465/1617 2338/6466/1617 2337/6467/1617 2339/6468/1617 +f 2337/6469/1618 2338/6470/1618 2342/6471/1618 2341/6472/1618 +f 2340/6473/1619 2339/6474/1619 2343/6475/1619 2344/6476/1619 +f 2339/6477/1620 2337/6478/1620 2341/6479/1620 2343/6480/1620 +f 2344/6481/1621 2342/6482/1621 2338/6483/1621 2340/6484/1621 +f 2345/6485/1622 2347/6486/1622 2348/6487/1622 2346/6488/1622 +f 2347/6489/1623 2349/6490/1623 2350/6491/1623 2348/6492/1623 +f 2349/6493/1624 2351/6494/1624 2352/6495/1624 2350/6496/1624 +f 2351/6497/1625 2353/6498/1625 2354/6499/1625 2352/6500/1625 +f 2353/6501/1626 2355/6502/1626 2356/6503/1626 2354/6504/1626 +f 2355/6505/1627 2357/6506/1627 2358/6507/1627 2356/6508/1627 +f 2357/6509/1628 2359/6510/1628 2360/6511/1628 2358/6512/1628 +f 2359/6513/1629 2345/6514/1629 2346/6515/1629 2360/6516/1629 +f 2351/6517/1630 2349/6518/1630 2347/6519/1630 2353/6520/1630 +f 2355/6521/1631 2353/6522/1631 2347/6523/1631 2345/6524/1631 +f 2345/6525/1632 2359/6526/1632 2357/6527/1632 2355/6528/1632 +f 2354/6529/1633 2348/6530/1633 2350/6531/1633 2352/6532/1633 +f 2354/6533/1634 2356/6534/1634 2346/6535/1634 2348/6536/1634 +f 2360/6537/1635 2346/6538/1635 2356/6539/1635 2358/6540/1635 o sspension1 -v 0.625 0.9375 0.59375 -v 0.625 0.9375 0.34375 -v 0.625 0.3125 0.59375 -v 0.625 0.3125 0.34375 -v 0.5625 0.9375 0.59375 -v 0.5625 0.9375 0.34375 -v 0.5625 0.3125 0.59375 -v 0.5625 0.3125 0.34375 -v 0.625 0.9375 0.46875 -v 0.625 0.3125 0.46875 -v 0.5625 0.3125 0.46875 -v 0.5625 0.9375 0.46875 -v 0.625 0.625 0.46875 -v 0.625 0.625 0.34375 -v 0.5625 0.625 0.34375 -v 0.5625 0.625 0.46875 -v 0.5625 0.625 0.59375 -v 0.625 0.625 0.59375 -vt 0.796875 0.25 -vt 0.796875 0.328125 -vt 0.765625 0.328125 -vt 0.765625 0.25 +v 0.625 0.9375 0.5938 +v 0.625 0.9375 0.3438 +v 0.625 0.3125 0.5938 +v 0.625 0.3125 0.3438 +v 0.5625 0.9375 0.5938 +v 0.5625 0.9375 0.3438 +v 0.5625 0.3125 0.5938 +v 0.5625 0.3125 0.3438 +v 0.625 0.9375 0.4688 +v 0.625 0.3125 0.4688 +v 0.5625 0.3125 0.4688 +v 0.5625 0.9375 0.4688 +v 0.625 0.625 0.4688 +v 0.625 0.625 0.3438 +v 0.5625 0.625 0.3438 +v 0.5625 0.625 0.4688 +v 0.5625 0.625 0.5938 +v 0.625 0.625 0.5938 +vt 0.7969 0.25 +vt 0.7969 0.3281 +vt 0.7656 0.3281 +vt 0.7656 0.25 vt 1 0.25 -vt 1 0.328125 -vt 0.96875 0.328125 -vt 0.96875 0.25 -vt 0.015625 0.9375 -vt 0.015625 0.96875 -vt 0 0.96875 +vt 1 0.3281 +vt 0.9688 0.3281 +vt 0.9688 0.25 +vt 0.0156 0.9375 +vt 0.0156 0.9688 +vt 0 0.9688 vt 0 0.9375 vt 0 1 -vt 0 0.96875 -vt 0.015625 0.96875 -vt 0.015625 1 -vt 0.015625 0.84375 -vt 0.015625 0.921875 -vt 0 0.921875 -vt 0 0.84375 -vt 0.015625 0.84375 -vt 0.015625 0.921875 -vt 0 0.921875 -vt 0 0.84375 +vt 0 0.9688 +vt 0.0156 0.9688 +vt 0.0156 1 +vt 0.0156 0.8438 +vt 0.0156 0.9219 +vt 0 0.9219 +vt 0 0.8438 +vt 0.0156 0.8438 +vt 0.0156 0.9219 +vt 0 0.9219 +vt 0 0.8438 vt 1 0.25 -vt 1 0.328125 -vt 0.96875 0.328125 -vt 0.96875 0.25 -vt 0.015625 0.9375 -vt 0.015625 0.96875 -vt 0 0.96875 +vt 1 0.3281 +vt 0.9688 0.3281 +vt 0.9688 0.25 +vt 0.0156 0.9375 +vt 0.0156 0.9688 +vt 0 0.9688 vt 0 0.9375 -vt 0.796875 0.25 -vt 0.796875 0.328125 -vt 0.765625 0.328125 -vt 0.765625 0.25 +vt 0.7969 0.25 +vt 0.7969 0.3281 +vt 0.7656 0.3281 +vt 0.7656 0.25 vt 0 1 -vt 0 0.96875 -vt 0.015625 0.96875 -vt 0.015625 1 -vt 0.96875 1 -vt 0.96875 0.921875 -vt 1 0.921875 +vt 0 0.9688 +vt 0.0156 0.9688 +vt 0.0156 1 +vt 0.9688 1 +vt 0.9688 0.9219 +vt 1 0.9219 vt 1 1 vt 0 1 -vt 0 0.921875 -vt 0.015625 0.921875 -vt 0.015625 1 -vt 0.765625 1 -vt 0.765625 0.921875 -vt 0.796875 0.921875 -vt 0.796875 1 -vt 0.96875 1 -vt 0.96875 0.921875 -vt 1 0.921875 +vt 0 0.9219 +vt 0.0156 0.9219 +vt 0.0156 1 +vt 0.7656 1 +vt 0.7656 0.9219 +vt 0.7969 0.9219 +vt 0.7969 1 +vt 0.9688 1 +vt 0.9688 0.9219 +vt 1 0.9219 vt 1 1 vt 0 1 -vt 0 0.921875 -vt 0.015625 0.921875 -vt 0.015625 1 -vt 0.765625 1 -vt 0.765625 0.921875 -vt 0.796875 0.921875 -vt 0.796875 1 +vt 0 0.9219 +vt 0.0156 0.9219 +vt 0.0156 1 +vt 0.7656 1 +vt 0.7656 0.9219 +vt 0.7969 0.9219 +vt 0.7969 1 vn 1 0 0 vn -1 0 0 vn 0 1 0 @@ -14050,152 +12573,136 @@ vn -1 0 0 vn 0 0 1 vn 1 0 0 usemtl common_rough_steel -f 2346/6465/1617 2349/6466/1617 2354/6467/1617 -f 2346/6465/1617 2354/6467/1617 2339/6468/1617 -f 2343/6469/1618 2353/6470/1618 2352/6471/1618 -f 2343/6469/1618 2352/6471/1618 2347/6472/1618 -f 2337/6473/1619 2345/6474/1619 2348/6475/1619 -f 2337/6473/1619 2348/6475/1619 2341/6476/1619 -f 2343/6477/1620 2347/6478/1620 2346/6479/1620 -f 2343/6477/1620 2346/6479/1620 2339/6480/1620 -f 2339/6481/1621 2354/6482/1621 2353/6483/1621 -f 2339/6481/1621 2353/6483/1621 2343/6484/1621 -f 2344/6485/1622 2351/6486/1622 2350/6487/1622 -f 2344/6485/1622 2350/6487/1622 2340/6488/1622 -f 2340/6489/1623 2350/6490/1623 2349/6491/1623 -f 2340/6489/1623 2349/6491/1623 2346/6492/1623 -f 2340/6493/1624 2346/6494/1624 2347/6495/1624 -f 2340/6493/1624 2347/6495/1624 2344/6496/1624 -f 2347/6497/1625 2352/6498/1625 2351/6499/1625 -f 2347/6497/1625 2351/6499/1625 2344/6500/1625 -f 2342/6501/1626 2348/6502/1626 2345/6503/1626 -f 2342/6501/1626 2345/6503/1626 2338/6504/1626 -f 2345/6505/1627 2349/6506/1627 2350/6507/1627 -f 2345/6505/1627 2350/6507/1627 2338/6508/1627 -f 2338/6509/1628 2350/6510/1628 2351/6511/1628 -f 2338/6509/1628 2351/6511/1628 2342/6512/1628 -f 2342/6513/1629 2351/6514/1629 2352/6515/1629 -f 2342/6513/1629 2352/6515/1629 2348/6516/1629 -f 2348/6517/1630 2352/6518/1630 2353/6519/1630 -f 2348/6517/1630 2353/6519/1630 2341/6520/1630 -f 2341/6521/1631 2353/6522/1631 2354/6523/1631 -f 2341/6521/1631 2354/6523/1631 2337/6524/1631 -f 2337/6525/1632 2354/6526/1632 2349/6527/1632 -f 2337/6525/1632 2349/6527/1632 2345/6528/1632 -o wheel_right1 -v 1 0.62457 0.654246875 -v 1 0.62457 0.28010625 -v 1 0.25043000000000004 0.654246875 -v 1 0.25043000000000004 0.28010625 -v 0.95833375 0.62457 0.654246875 -v 0.95833375 0.62457 0.28010625 -v 0.95833375 0.25043000000000004 0.654246875 -v 0.95833375 0.25043000000000004 0.28010625 -v 0.95833375 0.283584375 0.834085 -v 0.625 0.283584375 0.834085 -v 0.95833375 0.591415625 0.834085 -v 0.625 0.591415625 0.834085 -v 0.95833375 0.809085 0.616415625 -v 0.625 0.809085 0.616415625 -v 0.95833375 0.809085 0.308584375 -v 0.625 0.809085 0.308584375 -v 0.95833375 0.591415625 0.09091437500000005 -v 0.625 0.591415625 0.09091437500000005 -v 0.95833375 0.283584375 0.09091437500000005 -v 0.625 0.283584375 0.09091437500000005 -v 0.95833375 0.065915 0.308584375 -v 0.625 0.065915 0.308584375 -v 0.95833375 0.065915 0.616415625 -v 0.625 0.065915 0.616415625 -vt 0.28125 0.21875 -vt 0.28125 0.40625 -vt 0.46875 0.40625 -vt 0.46875 0.21875 -vt 0.46875 0.40625 -vt 0.28125 0.40625 -vt 0.28125 0.375 -vt 0.46875 0.375 -vt 0.46875 0.25 -vt 0.28125 0.25 -vt 0.28125 0.21875 -vt 0.46875 0.21875 -vt 0.28125 0.21875 -vt 0.28125 0.40625 -vt 0.3125 0.40625 -vt 0.3125 0.21875 -vt 0.4375 0.21875 -vt 0.4375 0.40625 -vt 0.46875 0.40625 -vt 0.46875 0.21875 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0.84375 0.53125 -vt 0.65625 0.53125 -vt 0.53125 0.40625 -vt 0.96875 0.40625 -vt 0.53125 0.40625 -vt 0.53125 0.21875 -vt 0.96875 0.21875 -vt 0.96875 0.40625 -vt 0.53125 0.21875 -vt 0.65625 0.09375 -vt 0.84375 0.09375 -vt 0.96875 0.21875 -vt 0.53125 0.40625 -vt 0.96875 0.40625 -vt 0.84375 0.53125 -vt 0.65625 0.53125 -vt 0.53125 0.40625 -vt 0.53125 0.21875 -vt 0.96875 0.21875 -vt 0.96875 0.40625 -vt 0.84375 0.09375 -vt 0.96875 0.21875 -vt 0.53125 0.21875 -vt 0.65625 0.09375 -vn 1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -vn 0 0 1 -vn 0 0.7071067811865476 0.7071067811865476 -vn 0 1 0 -vn 0 0.7071077963518332 -0.7071057660198045 -vn 0 0 -1 -vn 0 -0.7071077963518332 -0.7071057660198045 -vn 0 -1 0 -vn 0 -0.7071067811865476 0.7071067811865476 +f 2370/6541/1636 2373/6542/1636 2378/6543/1636 2363/6544/1636 +f 2367/6545/1637 2377/6546/1637 2376/6547/1637 2371/6548/1637 +f 2361/6549/1638 2369/6550/1638 2372/6551/1638 2365/6552/1638 +f 2367/6553/1639 2371/6554/1639 2370/6555/1639 2363/6556/1639 +f 2363/6557/1640 2378/6558/1640 2377/6559/1640 2367/6560/1640 +f 2368/6561/1641 2375/6562/1641 2374/6563/1641 2364/6564/1641 +f 2364/6565/1642 2374/6566/1642 2373/6567/1642 2370/6568/1642 +f 2364/6569/1643 2370/6570/1643 2371/6571/1643 2368/6572/1643 +f 2371/6573/1644 2376/6574/1644 2375/6575/1644 2368/6576/1644 +f 2366/6577/1645 2372/6578/1645 2369/6579/1645 2362/6580/1645 +f 2369/6581/1646 2373/6582/1646 2374/6583/1646 2362/6584/1646 +f 2362/6585/1647 2374/6586/1647 2375/6587/1647 2366/6588/1647 +f 2366/6589/1648 2375/6590/1648 2376/6591/1648 2372/6592/1648 +f 2372/6593/1649 2376/6594/1649 2377/6595/1649 2365/6596/1649 +f 2365/6597/1650 2377/6598/1650 2378/6599/1650 2361/6600/1650 +f 2361/6601/1651 2378/6602/1651 2373/6603/1651 2369/6604/1651 +o wheel_right2 +v 1 0.6246 1.4667 +v 1 0.6246 1.0926 +v 1 0.2504 1.4667 +v 1 0.2504 1.0926 +v 0.9583 0.6246 1.4667 +v 0.9583 0.6246 1.0926 +v 0.9583 0.2504 1.4667 +v 0.9583 0.2504 1.0926 +v 0.9583 0.2836 1.6466 +v 0.625 0.2836 1.6466 +v 0.9583 0.5914 1.6466 +v 0.625 0.5914 1.6466 +v 0.9583 0.8091 1.4289 +v 0.625 0.8091 1.4289 +v 0.9583 0.8091 1.1211 +v 0.625 0.8091 1.1211 +v 0.9583 0.5914 0.9034 +v 0.625 0.5914 0.9034 +v 0.9583 0.2836 0.9034 +v 0.625 0.2836 0.9034 +v 0.9583 0.0659 1.1211 +v 0.625 0.0659 1.1211 +v 0.9583 0.0659 1.4289 +v 0.625 0.0659 1.4289 +vt 0.2813 0.2188 +vt 0.2813 0.4063 +vt 0.4688 0.4063 +vt 0.4688 0.2188 +vt 0.4688 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.375 +vt 0.4688 0.375 +vt 0.4688 0.25 +vt 0.2813 0.25 +vt 0.2813 0.2188 +vt 0.4688 0.2188 +vt 0.2813 0.2188 +vt 0.2813 0.4063 +vt 0.3125 0.4063 +vt 0.3125 0.2188 +vt 0.4375 0.2188 +vt 0.4375 0.4063 +vt 0.4688 0.4063 +vt 0.4688 0.2188 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0 0.2188 +vt 0.1875 0.2188 +vt 0.1875 0.4063 +vt 0 0.4063 +vt 0.8438 0.5313 +vt 0.6563 0.5313 +vt 0.5313 0.4063 +vt 0.9688 0.4063 +vt 0.5313 0.4063 +vt 0.5313 0.2188 +vt 0.9688 0.2188 +vt 0.9688 0.4063 +vt 0.5313 0.2188 +vt 0.6563 0.0938 +vt 0.8438 0.0938 +vt 0.9688 0.2188 +vt 0.5313 0.4063 +vt 0.9688 0.4063 +vt 0.8438 0.5313 +vt 0.6563 0.5313 +vt 0.5313 0.4063 +vt 0.5313 0.2188 +vt 0.9688 0.2188 +vt 0.9688 0.4063 +vt 0.8438 0.0938 +vt 0.9688 0.2188 +vt 0.5313 0.2188 +vt 0.6563 0.0938 +vn 1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 1 +vn 0 0.71 0.71 +vn 0 1 0 +vn 0 0.71 -0.71 +vn 0 0 -1 +vn 0 -0.71 -0.71 +vn 0 -1 0 +vn 0 -0.71 0.71 vn 1 0 0 vn 1 0 0 vn 1 0 0 @@ -14203,127 +12710,108 @@ vn -1 0 0 vn -1 0 0 vn -1 0 0 usemtl tracks16_14 -f 2358/6529/1633 2356/6530/1633 2355/6531/1633 -f 2358/6529/1633 2355/6531/1633 2357/6532/1633 -f 2355/6533/1634 2356/6534/1634 2360/6535/1634 -f 2355/6533/1634 2360/6535/1634 2359/6536/1634 -f 2358/6537/1635 2357/6538/1635 2361/6539/1635 -f 2358/6537/1635 2361/6539/1635 2362/6540/1635 -f 2357/6541/1636 2355/6542/1636 2359/6543/1636 -f 2357/6541/1636 2359/6543/1636 2361/6544/1636 -f 2362/6545/1637 2360/6546/1637 2356/6547/1637 -f 2362/6545/1637 2356/6547/1637 2358/6548/1637 -f 2363/6549/1638 2365/6550/1638 2366/6551/1638 -f 2363/6549/1638 2366/6551/1638 2364/6552/1638 -f 2365/6553/1639 2367/6554/1639 2368/6555/1639 -f 2365/6553/1639 2368/6555/1639 2366/6556/1639 -f 2367/6557/1640 2369/6558/1640 2370/6559/1640 -f 2367/6557/1640 2370/6559/1640 2368/6560/1640 -f 2369/6561/1641 2371/6562/1641 2372/6563/1641 -f 2369/6561/1641 2372/6563/1641 2370/6564/1641 -f 2371/6565/1642 2373/6566/1642 2374/6567/1642 -f 2371/6565/1642 2374/6567/1642 2372/6568/1642 -f 2373/6569/1643 2375/6570/1643 2376/6571/1643 -f 2373/6569/1643 2376/6571/1643 2374/6572/1643 -f 2375/6573/1644 2377/6574/1644 2378/6575/1644 -f 2375/6573/1644 2378/6575/1644 2376/6576/1644 -f 2377/6577/1645 2363/6578/1645 2364/6579/1645 -f 2377/6577/1645 2364/6579/1645 2378/6580/1645 -f 2369/6581/1646 2367/6582/1646 2365/6583/1646 -f 2369/6581/1646 2365/6583/1646 2371/6584/1646 -f 2373/6585/1647 2371/6586/1647 2365/6587/1647 -f 2373/6585/1647 2365/6587/1647 2363/6588/1647 -f 2363/6589/1648 2377/6590/1648 2375/6591/1648 -f 2363/6589/1648 2375/6591/1648 2373/6592/1648 -f 2372/6593/1649 2366/6594/1649 2368/6595/1649 -f 2372/6593/1649 2368/6595/1649 2370/6596/1649 -f 2372/6597/1650 2374/6598/1650 2364/6599/1650 -f 2372/6597/1650 2364/6599/1650 2366/6600/1650 -f 2378/6601/1651 2364/6602/1651 2374/6603/1651 -f 2378/6601/1651 2374/6603/1651 2376/6604/1651 +f 2382/6605/1652 2380/6606/1652 2379/6607/1652 2381/6608/1652 +f 2379/6609/1653 2380/6610/1653 2384/6611/1653 2383/6612/1653 +f 2382/6613/1654 2381/6614/1654 2385/6615/1654 2386/6616/1654 +f 2381/6617/1655 2379/6618/1655 2383/6619/1655 2385/6620/1655 +f 2386/6621/1656 2384/6622/1656 2380/6623/1656 2382/6624/1656 +f 2387/6625/1657 2389/6626/1657 2390/6627/1657 2388/6628/1657 +f 2389/6629/1658 2391/6630/1658 2392/6631/1658 2390/6632/1658 +f 2391/6633/1659 2393/6634/1659 2394/6635/1659 2392/6636/1659 +f 2393/6637/1660 2395/6638/1660 2396/6639/1660 2394/6640/1660 +f 2395/6641/1661 2397/6642/1661 2398/6643/1661 2396/6644/1661 +f 2397/6645/1662 2399/6646/1662 2400/6647/1662 2398/6648/1662 +f 2399/6649/1663 2401/6650/1663 2402/6651/1663 2400/6652/1663 +f 2401/6653/1664 2387/6654/1664 2388/6655/1664 2402/6656/1664 +f 2393/6657/1665 2391/6658/1665 2389/6659/1665 2395/6660/1665 +f 2397/6661/1666 2395/6662/1666 2389/6663/1666 2387/6664/1666 +f 2387/6665/1667 2401/6666/1667 2399/6667/1667 2397/6668/1667 +f 2396/6669/1668 2390/6670/1668 2392/6671/1668 2394/6672/1668 +f 2396/6673/1669 2398/6674/1669 2388/6675/1669 2390/6676/1669 +f 2402/6677/1670 2388/6678/1670 2398/6679/1670 2400/6680/1670 o sspension2 -v 0.625 0.9375 1.40625 -v 0.625 0.9375 1.15625 -v 0.625 0.3125 1.40625 -v 0.625 0.3125 1.15625 -v 0.5625 0.9375 1.40625 -v 0.5625 0.9375 1.15625 -v 0.5625 0.3125 1.40625 -v 0.5625 0.3125 1.15625 -v 0.625 0.9375 1.28125 -v 0.625 0.3125 1.28125 -v 0.5625 0.3125 1.28125 -v 0.5625 0.9375 1.28125 -v 0.625 0.625 1.28125 -v 0.625 0.625 1.15625 -v 0.5625 0.625 1.15625 -v 0.5625 0.625 1.28125 -v 0.5625 0.625 1.40625 -v 0.625 0.625 1.40625 -vt 0.796875 0.25 -vt 0.796875 0.328125 -vt 0.765625 0.328125 -vt 0.765625 0.25 +v 0.625 0.9375 1.4063 +v 0.625 0.9375 1.1563 +v 0.625 0.3125 1.4063 +v 0.625 0.3125 1.1563 +v 0.5625 0.9375 1.4063 +v 0.5625 0.9375 1.1563 +v 0.5625 0.3125 1.4063 +v 0.5625 0.3125 1.1563 +v 0.625 0.9375 1.2813 +v 0.625 0.3125 1.2813 +v 0.5625 0.3125 1.2813 +v 0.5625 0.9375 1.2813 +v 0.625 0.625 1.2813 +v 0.625 0.625 1.1563 +v 0.5625 0.625 1.1563 +v 0.5625 0.625 1.2813 +v 0.5625 0.625 1.4063 +v 0.625 0.625 1.4063 +vt 0.7969 0.25 +vt 0.7969 0.3281 +vt 0.7656 0.3281 +vt 0.7656 0.25 vt 1 0.25 -vt 1 0.328125 -vt 0.96875 0.328125 -vt 0.96875 0.25 -vt 0.015625 0.9375 -vt 0.015625 0.96875 -vt 0 0.96875 +vt 1 0.3281 +vt 0.9688 0.3281 +vt 0.9688 0.25 +vt 0.0156 0.9375 +vt 0.0156 0.9688 +vt 0 0.9688 vt 0 0.9375 vt 0 1 -vt 0 0.96875 -vt 0.015625 0.96875 -vt 0.015625 1 -vt 0.015625 0.84375 -vt 0.015625 0.921875 -vt 0 0.921875 -vt 0 0.84375 -vt 0.015625 0.84375 -vt 0.015625 0.921875 -vt 0 0.921875 -vt 0 0.84375 +vt 0 0.9688 +vt 0.0156 0.9688 +vt 0.0156 1 +vt 0.0156 0.8438 +vt 0.0156 0.9219 +vt 0 0.9219 +vt 0 0.8438 +vt 0.0156 0.8438 +vt 0.0156 0.9219 +vt 0 0.9219 +vt 0 0.8438 vt 1 0.25 -vt 1 0.328125 -vt 0.96875 0.328125 -vt 0.96875 0.25 -vt 0.015625 0.9375 -vt 0.015625 0.96875 -vt 0 0.96875 +vt 1 0.3281 +vt 0.9688 0.3281 +vt 0.9688 0.25 +vt 0.0156 0.9375 +vt 0.0156 0.9688 +vt 0 0.9688 vt 0 0.9375 -vt 0.796875 0.25 -vt 0.796875 0.328125 -vt 0.765625 0.328125 -vt 0.765625 0.25 +vt 0.7969 0.25 +vt 0.7969 0.3281 +vt 0.7656 0.3281 +vt 0.7656 0.25 vt 0 1 -vt 0 0.96875 -vt 0.015625 0.96875 -vt 0.015625 1 -vt 0.96875 1 -vt 0.96875 0.921875 -vt 1 0.921875 +vt 0 0.9688 +vt 0.0156 0.9688 +vt 0.0156 1 +vt 0.9688 1 +vt 0.9688 0.9219 +vt 1 0.9219 vt 1 1 vt 0 1 -vt 0 0.921875 -vt 0.015625 0.921875 -vt 0.015625 1 -vt 0.765625 1 -vt 0.765625 0.921875 -vt 0.796875 0.921875 -vt 0.796875 1 -vt 0.96875 1 -vt 0.96875 0.921875 -vt 1 0.921875 +vt 0 0.9219 +vt 0.0156 0.9219 +vt 0.0156 1 +vt 0.7656 1 +vt 0.7656 0.9219 +vt 0.7969 0.9219 +vt 0.7969 1 +vt 0.9688 1 +vt 0.9688 0.9219 +vt 1 0.9219 vt 1 1 vt 0 1 -vt 0 0.921875 -vt 0.015625 0.921875 -vt 0.015625 1 -vt 0.765625 1 -vt 0.765625 0.921875 -vt 0.796875 0.921875 -vt 0.796875 1 +vt 0 0.9219 +vt 0.0156 0.9219 +vt 0.0156 1 +vt 0.7656 1 +vt 0.7656 0.9219 +vt 0.7969 0.9219 +vt 0.7969 1 vn 1 0 0 vn -1 0 0 vn 0 1 0 @@ -14341,280 +12829,245 @@ vn -1 0 0 vn 0 0 1 vn 1 0 0 usemtl common_rough_steel -f 2388/6605/1652 2391/6606/1652 2396/6607/1652 -f 2388/6605/1652 2396/6607/1652 2381/6608/1652 -f 2385/6609/1653 2395/6610/1653 2394/6611/1653 -f 2385/6609/1653 2394/6611/1653 2389/6612/1653 -f 2379/6613/1654 2387/6614/1654 2390/6615/1654 -f 2379/6613/1654 2390/6615/1654 2383/6616/1654 -f 2385/6617/1655 2389/6618/1655 2388/6619/1655 -f 2385/6617/1655 2388/6619/1655 2381/6620/1655 -f 2381/6621/1656 2396/6622/1656 2395/6623/1656 -f 2381/6621/1656 2395/6623/1656 2385/6624/1656 -f 2386/6625/1657 2393/6626/1657 2392/6627/1657 -f 2386/6625/1657 2392/6627/1657 2382/6628/1657 -f 2382/6629/1658 2392/6630/1658 2391/6631/1658 -f 2382/6629/1658 2391/6631/1658 2388/6632/1658 -f 2382/6633/1659 2388/6634/1659 2389/6635/1659 -f 2382/6633/1659 2389/6635/1659 2386/6636/1659 -f 2389/6637/1660 2394/6638/1660 2393/6639/1660 -f 2389/6637/1660 2393/6639/1660 2386/6640/1660 -f 2384/6641/1661 2390/6642/1661 2387/6643/1661 -f 2384/6641/1661 2387/6643/1661 2380/6644/1661 -f 2387/6645/1662 2391/6646/1662 2392/6647/1662 -f 2387/6645/1662 2392/6647/1662 2380/6648/1662 -f 2380/6649/1663 2392/6650/1663 2393/6651/1663 -f 2380/6649/1663 2393/6651/1663 2384/6652/1663 -f 2384/6653/1664 2393/6654/1664 2394/6655/1664 -f 2384/6653/1664 2394/6655/1664 2390/6656/1664 -f 2390/6657/1665 2394/6658/1665 2395/6659/1665 -f 2390/6657/1665 2395/6659/1665 2383/6660/1665 -f 2383/6661/1666 2395/6662/1666 2396/6663/1666 -f 2383/6661/1666 2396/6663/1666 2379/6664/1666 -f 2379/6665/1667 2396/6666/1667 2391/6667/1667 -f 2379/6665/1667 2391/6667/1667 2387/6668/1667 -o wheel_right2 -v 1 0.62457 1.466746875 -v 1 0.62457 1.09260625 -v 1 0.25043000000000004 1.466746875 -v 1 0.25043000000000004 1.09260625 -v 0.95833375 0.62457 1.466746875 -v 0.95833375 0.62457 1.09260625 -v 0.95833375 0.25043000000000004 1.466746875 -v 0.95833375 0.25043000000000004 1.09260625 -v 0.95833375 0.283584375 1.646585 -v 0.625 0.283584375 1.646585 -v 0.95833375 0.591415625 1.646585 -v 0.625 0.591415625 1.646585 -v 0.95833375 0.809085 1.428915625 -v 0.625 0.809085 1.428915625 -v 0.95833375 0.809085 1.121084375 -v 0.625 0.809085 1.121084375 -v 0.95833375 0.591415625 0.903414375 -v 0.625 0.591415625 0.903414375 -v 0.95833375 0.283584375 0.903414375 -v 0.625 0.283584375 0.903414375 -v 0.95833375 0.065915 1.121084375 -v 0.625 0.065915 1.121084375 -v 0.95833375 0.065915 1.428915625 -v 0.625 0.065915 1.428915625 -vt 0.28125 0.21875 -vt 0.28125 0.40625 -vt 0.46875 0.40625 -vt 0.46875 0.21875 -vt 0.46875 0.40625 -vt 0.28125 0.40625 -vt 0.28125 0.375 -vt 0.46875 0.375 -vt 0.46875 0.25 -vt 0.28125 0.25 -vt 0.28125 0.21875 -vt 0.46875 0.21875 -vt 0.28125 0.21875 -vt 0.28125 0.40625 -vt 0.3125 0.40625 -vt 0.3125 0.21875 -vt 0.4375 0.21875 -vt 0.4375 0.40625 -vt 0.46875 0.40625 -vt 0.46875 0.21875 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0 0.21875 -vt 0.1875 0.21875 -vt 0.1875 0.40625 -vt 0 0.40625 -vt 0.84375 0.53125 -vt 0.65625 0.53125 -vt 0.53125 0.40625 -vt 0.96875 0.40625 -vt 0.53125 0.40625 -vt 0.53125 0.21875 -vt 0.96875 0.21875 -vt 0.96875 0.40625 -vt 0.53125 0.21875 -vt 0.65625 0.09375 -vt 0.84375 0.09375 -vt 0.96875 0.21875 -vt 0.53125 0.40625 -vt 0.96875 0.40625 -vt 0.84375 0.53125 -vt 0.65625 0.53125 -vt 0.53125 0.40625 -vt 0.53125 0.21875 -vt 0.96875 0.21875 -vt 0.96875 0.40625 -vt 0.84375 0.09375 -vt 0.96875 0.21875 -vt 0.53125 0.21875 -vt 0.65625 0.09375 -vn 1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -vn 0 0 1 -vn 0 0.7071067811865476 0.7071067811865476 -vn 0 1 0 -vn 0 0.7071077963518332 -0.7071057660198045 -vn 0 0 -1 -vn 0 -0.7071077963518332 -0.7071057660198045 -vn 0 -1 0 -vn 0 -0.7071067811865476 0.7071067811865476 -vn 1 0 0 -vn 1 0 0 -vn 1 0 0 +f 2412/6681/1671 2415/6682/1671 2420/6683/1671 2405/6684/1671 +f 2409/6685/1672 2419/6686/1672 2418/6687/1672 2413/6688/1672 +f 2403/6689/1673 2411/6690/1673 2414/6691/1673 2407/6692/1673 +f 2409/6693/1674 2413/6694/1674 2412/6695/1674 2405/6696/1674 +f 2405/6697/1675 2420/6698/1675 2419/6699/1675 2409/6700/1675 +f 2410/6701/1676 2417/6702/1676 2416/6703/1676 2406/6704/1676 +f 2406/6705/1677 2416/6706/1677 2415/6707/1677 2412/6708/1677 +f 2406/6709/1678 2412/6710/1678 2413/6711/1678 2410/6712/1678 +f 2413/6713/1679 2418/6714/1679 2417/6715/1679 2410/6716/1679 +f 2408/6717/1680 2414/6718/1680 2411/6719/1680 2404/6720/1680 +f 2411/6721/1681 2415/6722/1681 2416/6723/1681 2404/6724/1681 +f 2404/6725/1682 2416/6726/1682 2417/6727/1682 2408/6728/1682 +f 2408/6729/1683 2417/6730/1683 2418/6731/1683 2414/6732/1683 +f 2414/6733/1684 2418/6734/1684 2419/6735/1684 2407/6736/1684 +f 2407/6737/1685 2419/6738/1685 2420/6739/1685 2403/6740/1685 +f 2403/6741/1686 2420/6742/1686 2415/6743/1686 2411/6744/1686 +o wheel_left1 +v -1 0.6246 0.6542 +v -1 0.6246 0.2801 +v -1 0.2504 0.6542 +v -1 0.2504 0.2801 +v -0.9583 0.6246 0.6542 +v -0.9583 0.6246 0.2801 +v -0.9583 0.2504 0.6542 +v -0.9583 0.2504 0.2801 +v -0.9583 0.2836 0.8341 +v -0.625 0.2836 0.8341 +v -0.9583 0.5914 0.8341 +v -0.625 0.5914 0.8341 +v -0.9583 0.8091 0.6164 +v -0.625 0.8091 0.6164 +v -0.9583 0.8091 0.3086 +v -0.625 0.8091 0.3086 +v -0.9583 0.5914 0.0909 +v -0.625 0.5914 0.0909 +v -0.9583 0.2836 0.0909 +v -0.625 0.2836 0.0909 +v -0.9583 0.0659 0.3086 +v -0.625 0.0659 0.3086 +v -0.9583 0.0659 0.6164 +v -0.625 0.0659 0.6164 +vt 0.4688 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.2188 +vt 0.4688 0.2188 +vt 0.2813 0.375 +vt 0.2813 0.4063 +vt 0.4688 0.4063 +vt 0.4688 0.375 +vt 0.2813 0.2188 +vt 0.2813 0.25 +vt 0.4688 0.25 +vt 0.4688 0.2188 +vt 0.3125 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.2188 +vt 0.3125 0.2188 +vt 0.4688 0.4063 +vt 0.4375 0.4063 +vt 0.4375 0.2188 +vt 0.4688 0.2188 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.5313 0.4063 +vt 0.6563 0.5313 +vt 0.8438 0.5313 +vt 0.9688 0.4063 +vt 0.9688 0.2188 +vt 0.5313 0.2188 +vt 0.5313 0.4063 +vt 0.9688 0.4063 +vt 0.8438 0.0938 +vt 0.6563 0.0938 +vt 0.5313 0.2188 +vt 0.9688 0.2188 +vt 0.8438 0.5313 +vt 0.9688 0.4063 +vt 0.5313 0.4063 +vt 0.6563 0.5313 +vt 0.9688 0.2188 +vt 0.5313 0.2188 +vt 0.5313 0.4063 +vt 0.9688 0.4063 +vt 0.5313 0.2188 +vt 0.9688 0.2188 +vt 0.8438 0.0938 +vt 0.6563 0.0938 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 1 +vn 0 0.71 0.71 +vn 0 1 0 +vn 0 0.71 -0.71 +vn 0 0 -1 +vn 0 -0.71 -0.71 +vn 0 -1 0 +vn 0 -0.71 0.71 vn -1 0 0 vn -1 0 0 vn -1 0 0 +vn 1 0 0 +vn 1 0 0 +vn 1 0 0 usemtl tracks16_14 -f 2400/6669/1668 2398/6670/1668 2397/6671/1668 -f 2400/6669/1668 2397/6671/1668 2399/6672/1668 -f 2397/6673/1669 2398/6674/1669 2402/6675/1669 -f 2397/6673/1669 2402/6675/1669 2401/6676/1669 -f 2400/6677/1670 2399/6678/1670 2403/6679/1670 -f 2400/6677/1670 2403/6679/1670 2404/6680/1670 -f 2399/6681/1671 2397/6682/1671 2401/6683/1671 -f 2399/6681/1671 2401/6683/1671 2403/6684/1671 -f 2404/6685/1672 2402/6686/1672 2398/6687/1672 -f 2404/6685/1672 2398/6687/1672 2400/6688/1672 -f 2405/6689/1673 2407/6690/1673 2408/6691/1673 -f 2405/6689/1673 2408/6691/1673 2406/6692/1673 -f 2407/6693/1674 2409/6694/1674 2410/6695/1674 -f 2407/6693/1674 2410/6695/1674 2408/6696/1674 -f 2409/6697/1675 2411/6698/1675 2412/6699/1675 -f 2409/6697/1675 2412/6699/1675 2410/6700/1675 -f 2411/6701/1676 2413/6702/1676 2414/6703/1676 -f 2411/6701/1676 2414/6703/1676 2412/6704/1676 -f 2413/6705/1677 2415/6706/1677 2416/6707/1677 -f 2413/6705/1677 2416/6707/1677 2414/6708/1677 -f 2415/6709/1678 2417/6710/1678 2418/6711/1678 -f 2415/6709/1678 2418/6711/1678 2416/6712/1678 -f 2417/6713/1679 2419/6714/1679 2420/6715/1679 -f 2417/6713/1679 2420/6715/1679 2418/6716/1679 -f 2419/6717/1680 2405/6718/1680 2406/6719/1680 -f 2419/6717/1680 2406/6719/1680 2420/6720/1680 -f 2411/6721/1681 2409/6722/1681 2407/6723/1681 -f 2411/6721/1681 2407/6723/1681 2413/6724/1681 -f 2415/6725/1682 2413/6726/1682 2407/6727/1682 -f 2415/6725/1682 2407/6727/1682 2405/6728/1682 -f 2405/6729/1683 2419/6730/1683 2417/6731/1683 -f 2405/6729/1683 2417/6731/1683 2415/6732/1683 -f 2414/6733/1684 2408/6734/1684 2410/6735/1684 -f 2414/6733/1684 2410/6735/1684 2412/6736/1684 -f 2414/6737/1685 2416/6738/1685 2406/6739/1685 -f 2414/6737/1685 2406/6739/1685 2408/6740/1685 -f 2420/6741/1686 2406/6742/1686 2416/6743/1686 -f 2420/6741/1686 2416/6743/1686 2418/6744/1686 +f 2421/6745/1687 2422/6746/1687 2424/6747/1687 2423/6748/1687 +f 2426/6749/1688 2422/6750/1688 2421/6751/1688 2425/6752/1688 +f 2427/6753/1689 2423/6754/1689 2424/6755/1689 2428/6756/1689 +f 2425/6757/1690 2421/6758/1690 2423/6759/1690 2427/6760/1690 +f 2422/6761/1691 2426/6762/1691 2428/6763/1691 2424/6764/1691 +f 2432/6765/1692 2431/6766/1692 2429/6767/1692 2430/6768/1692 +f 2434/6769/1693 2433/6770/1693 2431/6771/1693 2432/6772/1693 +f 2436/6773/1694 2435/6774/1694 2433/6775/1694 2434/6776/1694 +f 2438/6777/1695 2437/6778/1695 2435/6779/1695 2436/6780/1695 +f 2440/6781/1696 2439/6782/1696 2437/6783/1696 2438/6784/1696 +f 2442/6785/1697 2441/6786/1697 2439/6787/1697 2440/6788/1697 +f 2444/6789/1698 2443/6790/1698 2441/6791/1698 2442/6792/1698 +f 2430/6793/1699 2429/6794/1699 2443/6795/1699 2444/6796/1699 +f 2431/6797/1700 2433/6798/1700 2435/6799/1700 2437/6800/1700 +f 2431/6801/1701 2437/6802/1701 2439/6803/1701 2429/6804/1701 +f 2441/6805/1702 2443/6806/1702 2429/6807/1702 2439/6808/1702 +f 2434/6809/1703 2432/6810/1703 2438/6811/1703 2436/6812/1703 +f 2430/6813/1704 2440/6814/1704 2438/6815/1704 2432/6816/1704 +f 2440/6817/1705 2430/6818/1705 2444/6819/1705 2442/6820/1705 o sspension3 -v -0.5625 0.9375 0.59375 -v -0.5625 0.9375 0.34375 -v -0.5625 0.3125 0.59375 -v -0.5625 0.3125 0.34375 -v -0.625 0.9375 0.59375 -v -0.625 0.9375 0.34375 -v -0.625 0.3125 0.59375 -v -0.625 0.3125 0.34375 -v -0.5625 0.9375 0.46875 -v -0.5625 0.3125 0.46875 -v -0.625 0.3125 0.46875 -v -0.625 0.9375 0.46875 -v -0.5625 0.625 0.46875 -v -0.5625 0.625 0.34375 -v -0.625 0.625 0.34375 -v -0.625 0.625 0.46875 -v -0.625 0.625 0.59375 -v -0.5625 0.625 0.59375 -vt 0.796875 0.25 -vt 0.796875 0.328125 -vt 0.765625 0.328125 -vt 0.765625 0.25 +v -0.5625 0.9375 0.5938 +v -0.5625 0.9375 0.3438 +v -0.5625 0.3125 0.5938 +v -0.5625 0.3125 0.3438 +v -0.625 0.9375 0.5938 +v -0.625 0.9375 0.3438 +v -0.625 0.3125 0.5938 +v -0.625 0.3125 0.3438 +v -0.5625 0.9375 0.4688 +v -0.5625 0.3125 0.4688 +v -0.625 0.3125 0.4688 +v -0.625 0.9375 0.4688 +v -0.5625 0.625 0.4688 +v -0.5625 0.625 0.3438 +v -0.625 0.625 0.3438 +v -0.625 0.625 0.4688 +v -0.625 0.625 0.5938 +v -0.5625 0.625 0.5938 +vt 0.7969 0.25 +vt 0.7969 0.3281 +vt 0.7656 0.3281 +vt 0.7656 0.25 vt 1 0.25 -vt 1 0.328125 -vt 0.96875 0.328125 -vt 0.96875 0.25 -vt 0.015625 0.9375 -vt 0.015625 0.96875 -vt 0 0.96875 +vt 1 0.3281 +vt 0.9688 0.3281 +vt 0.9688 0.25 +vt 0.0156 0.9375 +vt 0.0156 0.9688 +vt 0 0.9688 vt 0 0.9375 vt 0 1 -vt 0 0.96875 -vt 0.015625 0.96875 -vt 0.015625 1 -vt 0.015625 0.84375 -vt 0.015625 0.921875 -vt 0 0.921875 -vt 0 0.84375 -vt 0.015625 0.84375 -vt 0.015625 0.921875 -vt 0 0.921875 -vt 0 0.84375 +vt 0 0.9688 +vt 0.0156 0.9688 +vt 0.0156 1 +vt 0.0156 0.8438 +vt 0.0156 0.9219 +vt 0 0.9219 +vt 0 0.8438 +vt 0.0156 0.8438 +vt 0.0156 0.9219 +vt 0 0.9219 +vt 0 0.8438 vt 1 0.25 -vt 1 0.328125 -vt 0.96875 0.328125 -vt 0.96875 0.25 -vt 0.015625 0.9375 -vt 0.015625 0.96875 -vt 0 0.96875 +vt 1 0.3281 +vt 0.9688 0.3281 +vt 0.9688 0.25 +vt 0.0156 0.9375 +vt 0.0156 0.9688 +vt 0 0.9688 vt 0 0.9375 -vt 0.796875 0.25 -vt 0.796875 0.328125 -vt 0.765625 0.328125 -vt 0.765625 0.25 +vt 0.7969 0.25 +vt 0.7969 0.3281 +vt 0.7656 0.3281 +vt 0.7656 0.25 vt 0 1 -vt 0 0.96875 -vt 0.015625 0.96875 -vt 0.015625 1 -vt 0.96875 1 -vt 0.96875 0.921875 -vt 1 0.921875 +vt 0 0.9688 +vt 0.0156 0.9688 +vt 0.0156 1 +vt 0.9688 1 +vt 0.9688 0.9219 +vt 1 0.9219 vt 1 1 vt 0 1 -vt 0 0.921875 -vt 0.015625 0.921875 -vt 0.015625 1 -vt 0.765625 1 -vt 0.765625 0.921875 -vt 0.796875 0.921875 -vt 0.796875 1 -vt 0.96875 1 -vt 0.96875 0.921875 -vt 1 0.921875 +vt 0 0.9219 +vt 0.0156 0.9219 +vt 0.0156 1 +vt 0.7656 1 +vt 0.7656 0.9219 +vt 0.7969 0.9219 +vt 0.7969 1 +vt 0.9688 1 +vt 0.9688 0.9219 +vt 1 0.9219 vt 1 1 vt 0 1 -vt 0 0.921875 -vt 0.015625 0.921875 -vt 0.015625 1 -vt 0.765625 1 -vt 0.765625 0.921875 -vt 0.796875 0.921875 -vt 0.796875 1 +vt 0 0.9219 +vt 0.0156 0.9219 +vt 0.0156 1 +vt 0.7656 1 +vt 0.7656 0.9219 +vt 0.7969 0.9219 +vt 0.7969 1 vn 1 0 0 vn -1 0 0 vn 0 1 0 @@ -14632,152 +13085,136 @@ vn -1 0 0 vn 0 0 1 vn 1 0 0 usemtl common_rough_steel -f 2430/6745/1687 2433/6746/1687 2438/6747/1687 -f 2430/6745/1687 2438/6747/1687 2423/6748/1687 -f 2427/6749/1688 2437/6750/1688 2436/6751/1688 -f 2427/6749/1688 2436/6751/1688 2431/6752/1688 -f 2421/6753/1689 2429/6754/1689 2432/6755/1689 -f 2421/6753/1689 2432/6755/1689 2425/6756/1689 -f 2427/6757/1690 2431/6758/1690 2430/6759/1690 -f 2427/6757/1690 2430/6759/1690 2423/6760/1690 -f 2423/6761/1691 2438/6762/1691 2437/6763/1691 -f 2423/6761/1691 2437/6763/1691 2427/6764/1691 -f 2428/6765/1692 2435/6766/1692 2434/6767/1692 -f 2428/6765/1692 2434/6767/1692 2424/6768/1692 -f 2424/6769/1693 2434/6770/1693 2433/6771/1693 -f 2424/6769/1693 2433/6771/1693 2430/6772/1693 -f 2424/6773/1694 2430/6774/1694 2431/6775/1694 -f 2424/6773/1694 2431/6775/1694 2428/6776/1694 -f 2431/6777/1695 2436/6778/1695 2435/6779/1695 -f 2431/6777/1695 2435/6779/1695 2428/6780/1695 -f 2426/6781/1696 2432/6782/1696 2429/6783/1696 -f 2426/6781/1696 2429/6783/1696 2422/6784/1696 -f 2429/6785/1697 2433/6786/1697 2434/6787/1697 -f 2429/6785/1697 2434/6787/1697 2422/6788/1697 -f 2422/6789/1698 2434/6790/1698 2435/6791/1698 -f 2422/6789/1698 2435/6791/1698 2426/6792/1698 -f 2426/6793/1699 2435/6794/1699 2436/6795/1699 -f 2426/6793/1699 2436/6795/1699 2432/6796/1699 -f 2432/6797/1700 2436/6798/1700 2437/6799/1700 -f 2432/6797/1700 2437/6799/1700 2425/6800/1700 -f 2425/6801/1701 2437/6802/1701 2438/6803/1701 -f 2425/6801/1701 2438/6803/1701 2421/6804/1701 -f 2421/6805/1702 2438/6806/1702 2433/6807/1702 -f 2421/6805/1702 2433/6807/1702 2429/6808/1702 -o wheel_left1 -v -1 0.6245700000000001 0.6542468749999997 -v -1 0.6245700000000001 0.2801062499999998 -v -1 0.25043000000000004 0.6542468749999997 -v -1 0.25043000000000004 0.2801062499999998 -v -0.958333125 0.6245700000000001 0.6542468749999997 -v -0.958333125 0.6245700000000001 0.2801062499999998 -v -0.958333125 0.25043000000000004 0.6542468749999997 -v -0.958333125 0.25043000000000004 0.2801062499999998 -v -0.958333125 0.283584375 0.834085 -v -0.625 0.283584375 0.834085 -v -0.958333125 0.591415625 0.834085 -v -0.625 0.591415625 0.834085 -v -0.958333125 0.809085 0.6164156249999997 -v -0.625 0.809085 0.6164156249999997 -v -0.958333125 0.809085 0.3085843749999997 -v -0.625 0.809085 0.3085843749999997 -v -0.958333125 0.591415625 0.09091437499999966 -v -0.625 0.591415625 0.09091437499999966 -v -0.958333125 0.283584375 0.09091437499999966 -v -0.625 0.283584375 0.09091437499999966 -v -0.958333125 0.06591499999999995 0.3085843749999997 -v -0.625 0.06591499999999995 0.3085843749999997 -v -0.958333125 0.06591499999999995 0.6164156249999997 -v -0.625 0.06591499999999995 0.6164156249999997 -vt 0.46875 0.40625 -vt 0.28125 0.40625 -vt 0.28125 0.21875 -vt 0.46875 0.21875 -vt 0.28125 0.375 -vt 0.28125 0.40625 -vt 0.46875 0.40625 -vt 0.46875 0.375 -vt 0.28125 0.21875 -vt 0.28125 0.25 -vt 0.46875 0.25 -vt 0.46875 0.21875 -vt 0.3125 0.40625 -vt 0.28125 0.40625 -vt 0.28125 0.21875 -vt 0.3125 0.21875 -vt 0.46875 0.40625 -vt 0.4375 0.40625 -vt 0.4375 0.21875 -vt 0.46875 0.21875 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.53125 0.40625 -vt 0.65625 0.53125 -vt 0.84375 0.53125 -vt 0.96875 0.40625 -vt 0.96875 0.21875 -vt 0.53125 0.21875 -vt 0.53125 0.40625 -vt 0.96875 0.40625 -vt 0.84375 0.09375 -vt 0.65625 0.09375 -vt 0.53125 0.21875 -vt 0.96875 0.21875 -vt 0.84375 0.53125 -vt 0.96875 0.40625 -vt 0.53125 0.40625 -vt 0.65625 0.53125 -vt 0.96875 0.21875 -vt 0.53125 0.21875 -vt 0.53125 0.40625 -vt 0.96875 0.40625 -vt 0.53125 0.21875 -vt 0.96875 0.21875 -vt 0.84375 0.09375 -vt 0.65625 0.09375 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -vn 0 0 1 -vn 0 0.7071067811865479 0.7071067811865471 -vn 0 1 0 -vn 0 0.7071077963518333 -0.7071057660198043 -vn 0 0 -1 -vn 0 -0.7071077963518332 -0.7071057660198045 -vn 0 -1 0 -vn 0 -0.7071067811865479 0.7071067811865472 +f 2454/6821/1706 2457/6822/1706 2462/6823/1706 2447/6824/1706 +f 2451/6825/1707 2461/6826/1707 2460/6827/1707 2455/6828/1707 +f 2445/6829/1708 2453/6830/1708 2456/6831/1708 2449/6832/1708 +f 2451/6833/1709 2455/6834/1709 2454/6835/1709 2447/6836/1709 +f 2447/6837/1710 2462/6838/1710 2461/6839/1710 2451/6840/1710 +f 2452/6841/1711 2459/6842/1711 2458/6843/1711 2448/6844/1711 +f 2448/6845/1712 2458/6846/1712 2457/6847/1712 2454/6848/1712 +f 2448/6849/1713 2454/6850/1713 2455/6851/1713 2452/6852/1713 +f 2455/6853/1714 2460/6854/1714 2459/6855/1714 2452/6856/1714 +f 2450/6857/1715 2456/6858/1715 2453/6859/1715 2446/6860/1715 +f 2453/6861/1716 2457/6862/1716 2458/6863/1716 2446/6864/1716 +f 2446/6865/1717 2458/6866/1717 2459/6867/1717 2450/6868/1717 +f 2450/6869/1718 2459/6870/1718 2460/6871/1718 2456/6872/1718 +f 2456/6873/1719 2460/6874/1719 2461/6875/1719 2449/6876/1719 +f 2449/6877/1720 2461/6878/1720 2462/6879/1720 2445/6880/1720 +f 2445/6881/1721 2462/6882/1721 2457/6883/1721 2453/6884/1721 +o wheel_left2 +v -1 0.6246 1.4667 +v -1 0.6246 1.0926 +v -1 0.2504 1.4667 +v -1 0.2504 1.0926 +v -0.9583 0.6246 1.4667 +v -0.9583 0.6246 1.0926 +v -0.9583 0.2504 1.4667 +v -0.9583 0.2504 1.0926 +v -0.9583 0.2836 1.6466 +v -0.625 0.2836 1.6466 +v -0.9583 0.5914 1.6466 +v -0.625 0.5914 1.6466 +v -0.9583 0.8091 1.4289 +v -0.625 0.8091 1.4289 +v -0.9583 0.8091 1.1211 +v -0.625 0.8091 1.1211 +v -0.9583 0.5914 0.9034 +v -0.625 0.5914 0.9034 +v -0.9583 0.2836 0.9034 +v -0.625 0.2836 0.9034 +v -0.9583 0.0659 1.1211 +v -0.625 0.0659 1.1211 +v -0.9583 0.0659 1.4289 +v -0.625 0.0659 1.4289 +vt 0.4688 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.2188 +vt 0.4688 0.2188 +vt 0.2813 0.375 +vt 0.2813 0.4063 +vt 0.4688 0.4063 +vt 0.4688 0.375 +vt 0.2813 0.2188 +vt 0.2813 0.25 +vt 0.4688 0.25 +vt 0.4688 0.2188 +vt 0.3125 0.4063 +vt 0.2813 0.4063 +vt 0.2813 0.2188 +vt 0.3125 0.2188 +vt 0.4688 0.4063 +vt 0.4375 0.4063 +vt 0.4375 0.2188 +vt 0.4688 0.2188 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.1875 0.4063 +vt 0.1875 0.2188 +vt 0 0.2188 +vt 0 0.4063 +vt 0.5313 0.4063 +vt 0.6563 0.5313 +vt 0.8438 0.5313 +vt 0.9688 0.4063 +vt 0.9688 0.2188 +vt 0.5313 0.2188 +vt 0.5313 0.4063 +vt 0.9688 0.4063 +vt 0.8438 0.0938 +vt 0.6563 0.0938 +vt 0.5313 0.2188 +vt 0.9688 0.2188 +vt 0.8438 0.5313 +vt 0.9688 0.4063 +vt 0.5313 0.4063 +vt 0.6563 0.5313 +vt 0.9688 0.2188 +vt 0.5313 0.2188 +vt 0.5313 0.4063 +vt 0.9688 0.4063 +vt 0.5313 0.2188 +vt 0.9688 0.2188 +vt 0.8438 0.0938 +vt 0.6563 0.0938 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +vn 0 0 1 +vn 0 0 -1 +vn 0 0 1 +vn 0 0.71 0.71 +vn 0 1 0 +vn 0 0.71 -0.71 +vn 0 0 -1 +vn 0 -0.71 -0.71 +vn 0 -1 0 +vn 0 -0.71 0.71 vn -1 0 0 vn -1 0 0 vn -1 0 0 @@ -14785,127 +13222,108 @@ vn 1 0 0 vn 1 0 0 vn 1 0 0 usemtl tracks16_14 -f 2439/6809/1703 2440/6810/1703 2442/6811/1703 -f 2439/6809/1703 2442/6811/1703 2441/6812/1703 -f 2444/6813/1704 2440/6814/1704 2439/6815/1704 -f 2444/6813/1704 2439/6815/1704 2443/6816/1704 -f 2445/6817/1705 2441/6818/1705 2442/6819/1705 -f 2445/6817/1705 2442/6819/1705 2446/6820/1705 -f 2443/6821/1706 2439/6822/1706 2441/6823/1706 -f 2443/6821/1706 2441/6823/1706 2445/6824/1706 -f 2440/6825/1707 2444/6826/1707 2446/6827/1707 -f 2440/6825/1707 2446/6827/1707 2442/6828/1707 -f 2450/6829/1708 2449/6830/1708 2447/6831/1708 -f 2450/6829/1708 2447/6831/1708 2448/6832/1708 -f 2452/6833/1709 2451/6834/1709 2449/6835/1709 -f 2452/6833/1709 2449/6835/1709 2450/6836/1709 -f 2454/6837/1710 2453/6838/1710 2451/6839/1710 -f 2454/6837/1710 2451/6839/1710 2452/6840/1710 -f 2456/6841/1711 2455/6842/1711 2453/6843/1711 -f 2456/6841/1711 2453/6843/1711 2454/6844/1711 -f 2458/6845/1712 2457/6846/1712 2455/6847/1712 -f 2458/6845/1712 2455/6847/1712 2456/6848/1712 -f 2460/6849/1713 2459/6850/1713 2457/6851/1713 -f 2460/6849/1713 2457/6851/1713 2458/6852/1713 -f 2462/6853/1714 2461/6854/1714 2459/6855/1714 -f 2462/6853/1714 2459/6855/1714 2460/6856/1714 -f 2448/6857/1715 2447/6858/1715 2461/6859/1715 -f 2448/6857/1715 2461/6859/1715 2462/6860/1715 -f 2449/6861/1716 2451/6862/1716 2453/6863/1716 -f 2449/6861/1716 2453/6863/1716 2455/6864/1716 -f 2449/6865/1717 2455/6866/1717 2457/6867/1717 -f 2449/6865/1717 2457/6867/1717 2447/6868/1717 -f 2459/6869/1718 2461/6870/1718 2447/6871/1718 -f 2459/6869/1718 2447/6871/1718 2457/6872/1718 -f 2452/6873/1719 2450/6874/1719 2456/6875/1719 -f 2452/6873/1719 2456/6875/1719 2454/6876/1719 -f 2448/6877/1720 2458/6878/1720 2456/6879/1720 -f 2448/6877/1720 2456/6879/1720 2450/6880/1720 -f 2458/6881/1721 2448/6882/1721 2462/6883/1721 -f 2458/6881/1721 2462/6883/1721 2460/6884/1721 +f 2463/6885/1722 2464/6886/1722 2466/6887/1722 2465/6888/1722 +f 2468/6889/1723 2464/6890/1723 2463/6891/1723 2467/6892/1723 +f 2469/6893/1724 2465/6894/1724 2466/6895/1724 2470/6896/1724 +f 2467/6897/1725 2463/6898/1725 2465/6899/1725 2469/6900/1725 +f 2464/6901/1726 2468/6902/1726 2470/6903/1726 2466/6904/1726 +f 2474/6905/1727 2473/6906/1727 2471/6907/1727 2472/6908/1727 +f 2476/6909/1728 2475/6910/1728 2473/6911/1728 2474/6912/1728 +f 2478/6913/1729 2477/6914/1729 2475/6915/1729 2476/6916/1729 +f 2480/6917/1730 2479/6918/1730 2477/6919/1730 2478/6920/1730 +f 2482/6921/1731 2481/6922/1731 2479/6923/1731 2480/6924/1731 +f 2484/6925/1732 2483/6926/1732 2481/6927/1732 2482/6928/1732 +f 2486/6929/1733 2485/6930/1733 2483/6931/1733 2484/6932/1733 +f 2472/6933/1734 2471/6934/1734 2485/6935/1734 2486/6936/1734 +f 2473/6937/1735 2475/6938/1735 2477/6939/1735 2479/6940/1735 +f 2473/6941/1736 2479/6942/1736 2481/6943/1736 2471/6944/1736 +f 2483/6945/1737 2485/6946/1737 2471/6947/1737 2481/6948/1737 +f 2476/6949/1738 2474/6950/1738 2480/6951/1738 2478/6952/1738 +f 2472/6953/1739 2482/6954/1739 2480/6955/1739 2474/6956/1739 +f 2482/6957/1740 2472/6958/1740 2486/6959/1740 2484/6960/1740 o sspension4 -v -0.5625 0.9375 1.40625 -v -0.5625 0.9375 1.15625 -v -0.5625 0.3125 1.40625 -v -0.5625 0.3125 1.15625 -v -0.625 0.9375 1.40625 -v -0.625 0.9375 1.15625 -v -0.625 0.3125 1.40625 -v -0.625 0.3125 1.15625 -v -0.5625 0.9375 1.28125 -v -0.5625 0.3125 1.28125 -v -0.625 0.3125 1.28125 -v -0.625 0.9375 1.28125 -v -0.5625 0.625 1.28125 -v -0.5625 0.625 1.15625 -v -0.625 0.625 1.15625 -v -0.625 0.625 1.28125 -v -0.625 0.625 1.40625 -v -0.5625 0.625 1.40625 -vt 0.796875 0.25 -vt 0.796875 0.328125 -vt 0.765625 0.328125 -vt 0.765625 0.25 +v -0.5625 0.9375 1.4063 +v -0.5625 0.9375 1.1563 +v -0.5625 0.3125 1.4063 +v -0.5625 0.3125 1.1563 +v -0.625 0.9375 1.4063 +v -0.625 0.9375 1.1563 +v -0.625 0.3125 1.4063 +v -0.625 0.3125 1.1563 +v -0.5625 0.9375 1.2813 +v -0.5625 0.3125 1.2813 +v -0.625 0.3125 1.2813 +v -0.625 0.9375 1.2813 +v -0.5625 0.625 1.2813 +v -0.5625 0.625 1.1563 +v -0.625 0.625 1.1563 +v -0.625 0.625 1.2813 +v -0.625 0.625 1.4063 +v -0.5625 0.625 1.4063 +vt 0.7969 0.25 +vt 0.7969 0.3281 +vt 0.7656 0.3281 +vt 0.7656 0.25 vt 1 0.25 -vt 1 0.328125 -vt 0.96875 0.328125 -vt 0.96875 0.25 -vt 0.015625 0.9375 -vt 0.015625 0.96875 -vt 0 0.96875 +vt 1 0.3281 +vt 0.9688 0.3281 +vt 0.9688 0.25 +vt 0.0156 0.9375 +vt 0.0156 0.9688 +vt 0 0.9688 vt 0 0.9375 vt 0 1 -vt 0 0.96875 -vt 0.015625 0.96875 -vt 0.015625 1 -vt 0.015625 0.84375 -vt 0.015625 0.921875 -vt 0 0.921875 -vt 0 0.84375 -vt 0.015625 0.84375 -vt 0.015625 0.921875 -vt 0 0.921875 -vt 0 0.84375 +vt 0 0.9688 +vt 0.0156 0.9688 +vt 0.0156 1 +vt 0.0156 0.8438 +vt 0.0156 0.9219 +vt 0 0.9219 +vt 0 0.8438 +vt 0.0156 0.8438 +vt 0.0156 0.9219 +vt 0 0.9219 +vt 0 0.8438 vt 1 0.25 -vt 1 0.328125 -vt 0.96875 0.328125 -vt 0.96875 0.25 -vt 0.015625 0.9375 -vt 0.015625 0.96875 -vt 0 0.96875 +vt 1 0.3281 +vt 0.9688 0.3281 +vt 0.9688 0.25 +vt 0.0156 0.9375 +vt 0.0156 0.9688 +vt 0 0.9688 vt 0 0.9375 -vt 0.796875 0.25 -vt 0.796875 0.328125 -vt 0.765625 0.328125 -vt 0.765625 0.25 +vt 0.7969 0.25 +vt 0.7969 0.3281 +vt 0.7656 0.3281 +vt 0.7656 0.25 vt 0 1 -vt 0 0.96875 -vt 0.015625 0.96875 -vt 0.015625 1 -vt 0.96875 1 -vt 0.96875 0.921875 -vt 1 0.921875 +vt 0 0.9688 +vt 0.0156 0.9688 +vt 0.0156 1 +vt 0.9688 1 +vt 0.9688 0.9219 +vt 1 0.9219 vt 1 1 vt 0 1 -vt 0 0.921875 -vt 0.015625 0.921875 -vt 0.015625 1 -vt 0.765625 1 -vt 0.765625 0.921875 -vt 0.796875 0.921875 -vt 0.796875 1 -vt 0.96875 1 -vt 0.96875 0.921875 -vt 1 0.921875 +vt 0 0.9219 +vt 0.0156 0.9219 +vt 0.0156 1 +vt 0.7656 1 +vt 0.7656 0.9219 +vt 0.7969 0.9219 +vt 0.7969 1 +vt 0.9688 1 +vt 0.9688 0.9219 +vt 1 0.9219 vt 1 1 vt 0 1 -vt 0 0.921875 -vt 0.015625 0.921875 -vt 0.015625 1 -vt 0.765625 1 -vt 0.765625 0.921875 -vt 0.796875 0.921875 -vt 0.796875 1 +vt 0 0.9219 +vt 0.0156 0.9219 +vt 0.0156 1 +vt 0.7656 1 +vt 0.7656 0.9219 +vt 0.7969 0.9219 +vt 0.7969 1 vn 1 0 0 vn -1 0 0 vn 0 1 0 @@ -14923,311 +13341,136 @@ vn -1 0 0 vn 0 0 1 vn 1 0 0 usemtl common_rough_steel -f 2472/6885/1722 2475/6886/1722 2480/6887/1722 -f 2472/6885/1722 2480/6887/1722 2465/6888/1722 -f 2469/6889/1723 2479/6890/1723 2478/6891/1723 -f 2469/6889/1723 2478/6891/1723 2473/6892/1723 -f 2463/6893/1724 2471/6894/1724 2474/6895/1724 -f 2463/6893/1724 2474/6895/1724 2467/6896/1724 -f 2469/6897/1725 2473/6898/1725 2472/6899/1725 -f 2469/6897/1725 2472/6899/1725 2465/6900/1725 -f 2465/6901/1726 2480/6902/1726 2479/6903/1726 -f 2465/6901/1726 2479/6903/1726 2469/6904/1726 -f 2470/6905/1727 2477/6906/1727 2476/6907/1727 -f 2470/6905/1727 2476/6907/1727 2466/6908/1727 -f 2466/6909/1728 2476/6910/1728 2475/6911/1728 -f 2466/6909/1728 2475/6911/1728 2472/6912/1728 -f 2466/6913/1729 2472/6914/1729 2473/6915/1729 -f 2466/6913/1729 2473/6915/1729 2470/6916/1729 -f 2473/6917/1730 2478/6918/1730 2477/6919/1730 -f 2473/6917/1730 2477/6919/1730 2470/6920/1730 -f 2468/6921/1731 2474/6922/1731 2471/6923/1731 -f 2468/6921/1731 2471/6923/1731 2464/6924/1731 -f 2471/6925/1732 2475/6926/1732 2476/6927/1732 -f 2471/6925/1732 2476/6927/1732 2464/6928/1732 -f 2464/6929/1733 2476/6930/1733 2477/6931/1733 -f 2464/6929/1733 2477/6931/1733 2468/6932/1733 -f 2468/6933/1734 2477/6934/1734 2478/6935/1734 -f 2468/6933/1734 2478/6935/1734 2474/6936/1734 -f 2474/6937/1735 2478/6938/1735 2479/6939/1735 -f 2474/6937/1735 2479/6939/1735 2467/6940/1735 -f 2467/6941/1736 2479/6942/1736 2480/6943/1736 -f 2467/6941/1736 2480/6943/1736 2463/6944/1736 -f 2463/6945/1737 2480/6946/1737 2475/6947/1737 -f 2463/6945/1737 2475/6947/1737 2471/6948/1737 -o wheel_left2 -v -1 0.6245700000000001 1.4667468749999997 -v -1 0.6245700000000001 1.0926062499999998 -v -1 0.25043000000000004 1.4667468749999997 -v -1 0.25043000000000004 1.0926062499999998 -v -0.958333125 0.6245700000000001 1.4667468749999997 -v -0.958333125 0.6245700000000001 1.0926062499999998 -v -0.958333125 0.25043000000000004 1.4667468749999997 -v -0.958333125 0.25043000000000004 1.0926062499999998 -v -0.958333125 0.283584375 1.6465849999999995 -v -0.625 0.283584375 1.6465849999999995 -v -0.958333125 0.591415625 1.6465849999999995 -v -0.625 0.591415625 1.6465849999999995 -v -0.958333125 0.809085 1.4289156249999997 -v -0.625 0.809085 1.4289156249999997 -v -0.958333125 0.809085 1.1210843749999992 -v -0.625 0.809085 1.1210843749999992 -v -0.958333125 0.591415625 0.9034143749999992 -v -0.625 0.591415625 0.9034143749999992 -v -0.958333125 0.283584375 0.9034143749999992 -v -0.625 0.283584375 0.9034143749999992 -v -0.958333125 0.06591499999999995 1.1210843749999992 -v -0.625 0.06591499999999995 1.1210843749999992 -v -0.958333125 0.06591499999999995 1.4289156249999997 -v -0.625 0.06591499999999995 1.4289156249999997 -vt 0.46875 0.40625 -vt 0.28125 0.40625 -vt 0.28125 0.21875 -vt 0.46875 0.21875 -vt 0.28125 0.375 -vt 0.28125 0.40625 -vt 0.46875 0.40625 -vt 0.46875 0.375 -vt 0.28125 0.21875 -vt 0.28125 0.25 -vt 0.46875 0.25 -vt 0.46875 0.21875 -vt 0.3125 0.40625 -vt 0.28125 0.40625 -vt 0.28125 0.21875 -vt 0.3125 0.21875 -vt 0.46875 0.40625 -vt 0.4375 0.40625 -vt 0.4375 0.21875 -vt 0.46875 0.21875 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.21875 -vt 0 0.21875 -vt 0 0.40625 -vt 0.53125 0.40625 -vt 0.65625 0.53125 -vt 0.84375 0.53125 -vt 0.96875 0.40625 -vt 0.96875 0.21875 -vt 0.53125 0.21875 -vt 0.53125 0.40625 -vt 0.96875 0.40625 -vt 0.84375 0.09375 -vt 0.65625 0.09375 -vt 0.53125 0.21875 -vt 0.96875 0.21875 -vt 0.84375 0.53125 -vt 0.96875 0.40625 -vt 0.53125 0.40625 -vt 0.65625 0.53125 -vt 0.96875 0.21875 -vt 0.53125 0.21875 -vt 0.53125 0.40625 -vt 0.96875 0.40625 -vt 0.53125 0.21875 -vt 0.96875 0.21875 -vt 0.84375 0.09375 -vt 0.65625 0.09375 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -vn 0 0 1 -vn 0 0 -1 -vn 0 0 1 -vn 0 0.7071067811865472 0.7071067811865478 -vn 0 1 0 -vn 0 0.7071077963518333 -0.7071057660198043 -vn 0 0 -1 -vn 0 -0.7071077963518332 -0.7071057660198045 -vn 0 -1 0 -vn 0 -0.7071067811865472 0.7071067811865479 -vn -1 0 0 -vn -1 0 0 -vn -1 0 0 -vn 1 0 0 -vn 1 0 0 -vn 1 0 0 -usemtl tracks16_14 -f 2481/6949/1738 2482/6950/1738 2484/6951/1738 -f 2481/6949/1738 2484/6951/1738 2483/6952/1738 -f 2486/6953/1739 2482/6954/1739 2481/6955/1739 -f 2486/6953/1739 2481/6955/1739 2485/6956/1739 -f 2487/6957/1740 2483/6958/1740 2484/6959/1740 -f 2487/6957/1740 2484/6959/1740 2488/6960/1740 -f 2485/6961/1741 2481/6962/1741 2483/6963/1741 -f 2485/6961/1741 2483/6963/1741 2487/6964/1741 -f 2482/6965/1742 2486/6966/1742 2488/6967/1742 -f 2482/6965/1742 2488/6967/1742 2484/6968/1742 -f 2492/6969/1743 2491/6970/1743 2489/6971/1743 -f 2492/6969/1743 2489/6971/1743 2490/6972/1743 -f 2494/6973/1744 2493/6974/1744 2491/6975/1744 -f 2494/6973/1744 2491/6975/1744 2492/6976/1744 -f 2496/6977/1745 2495/6978/1745 2493/6979/1745 -f 2496/6977/1745 2493/6979/1745 2494/6980/1745 -f 2498/6981/1746 2497/6982/1746 2495/6983/1746 -f 2498/6981/1746 2495/6983/1746 2496/6984/1746 -f 2500/6985/1747 2499/6986/1747 2497/6987/1747 -f 2500/6985/1747 2497/6987/1747 2498/6988/1747 -f 2502/6989/1748 2501/6990/1748 2499/6991/1748 -f 2502/6989/1748 2499/6991/1748 2500/6992/1748 -f 2504/6993/1749 2503/6994/1749 2501/6995/1749 -f 2504/6993/1749 2501/6995/1749 2502/6996/1749 -f 2490/6997/1750 2489/6998/1750 2503/6999/1750 -f 2490/6997/1750 2503/6999/1750 2504/7000/1750 -f 2491/7001/1751 2493/7002/1751 2495/7003/1751 -f 2491/7001/1751 2495/7003/1751 2497/7004/1751 -f 2491/7005/1752 2497/7006/1752 2499/7007/1752 -f 2491/7005/1752 2499/7007/1752 2489/7008/1752 -f 2501/7009/1753 2503/7010/1753 2489/7011/1753 -f 2501/7009/1753 2489/7011/1753 2499/7012/1753 -f 2494/7013/1754 2492/7014/1754 2498/7015/1754 -f 2494/7013/1754 2498/7015/1754 2496/7016/1754 -f 2490/7017/1755 2500/7018/1755 2498/7019/1755 -f 2490/7017/1755 2498/7019/1755 2492/7020/1755 -f 2500/7021/1756 2490/7022/1756 2504/7023/1756 -f 2500/7021/1756 2504/7023/1756 2502/7024/1756 +f 2496/6961/1741 2499/6962/1741 2504/6963/1741 2489/6964/1741 +f 2493/6965/1742 2503/6966/1742 2502/6967/1742 2497/6968/1742 +f 2487/6969/1743 2495/6970/1743 2498/6971/1743 2491/6972/1743 +f 2493/6973/1744 2497/6974/1744 2496/6975/1744 2489/6976/1744 +f 2489/6977/1745 2504/6978/1745 2503/6979/1745 2493/6980/1745 +f 2494/6981/1746 2501/6982/1746 2500/6983/1746 2490/6984/1746 +f 2490/6985/1747 2500/6986/1747 2499/6987/1747 2496/6988/1747 +f 2490/6989/1748 2496/6990/1748 2497/6991/1748 2494/6992/1748 +f 2497/6993/1749 2502/6994/1749 2501/6995/1749 2494/6996/1749 +f 2492/6997/1750 2498/6998/1750 2495/6999/1750 2488/7000/1750 +f 2495/7001/1751 2499/7002/1751 2500/7003/1751 2488/7004/1751 +f 2488/7005/1752 2500/7006/1752 2501/7007/1752 2492/7008/1752 +f 2492/7009/1753 2501/7010/1753 2502/7011/1753 2498/7012/1753 +f 2498/7013/1754 2502/7014/1754 2503/7015/1754 2491/7016/1754 +f 2491/7017/1755 2503/7018/1755 2504/7019/1755 2487/7020/1755 +f 2487/7021/1756 2504/7022/1756 2499/7023/1756 2495/7024/1756 o smoll_whell -v -0.65625 1.24375 1.3125 -v -0.65625 1.24375 1 -v -0.65625 0.9312499999999999 1.3125 -v -0.65625 0.9312499999999999 1 -v -0.90625 1.24375 1.3125 -v -0.90625 1.24375 1 -v -0.90625 0.9312499999999999 1.3125 -v -0.90625 0.9312499999999999 1 -v -0.90625 1.05625 1.3125 -v -0.90625 1.05625 1 -v -0.65625 1.05625 1 -v -0.65625 1.05625 1.3125 -v -0.90625 0.9312499999999999 1.1875 -v -0.65625 0.9312499999999999 1.1875 -v -0.65625 1.24375 1.1875 -v -0.90625 1.24375 1.1875 -v -0.71875 1.05625 1 -v -0.71875 1.24375 1 -v -0.71875 1.24375 1.1875 -v -0.71875 1.24375 1.3125 -v -0.71875 1.05625 1.3125 -v -0.71875 0.9312499999999999 1.3125 -v -0.71875 0.9312499999999999 1.1875 -v -0.71875 0.9312499999999999 1 -v -0.90625 1.24375 1.3125 -v -0.90625 1.24375 1 -v -0.90625 0.9312499999999999 1.3125 -v -0.90625 0.9312499999999999 1 -v -0.90625 1.05625 1.3125 -v -0.90625 1.05625 1 -v -0.90625 1.05625 1.1875 -v -0.90625 0.9312499999999999 1.1875 -v -0.90625 1.24375 1.1875 -v -0.65625 1.24375 1 -v -0.65625 1.24375 1.3125 -v -0.65625 0.9312499999999999 1 -v -0.65625 0.9312499999999999 1.3125 -v -0.65625 1.05625 1 -v -0.65625 1.05625 1.3125 -v -0.65625 1.05625 1.125 -v -0.65625 0.9312499999999999 1.125 -v -0.65625 1.24375 1.125 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +v -0.6562 1.2438 1.3125 +v -0.6562 1.2438 1 +v -0.6562 0.9313 1.3125 +v -0.6562 0.9313 1 +v -0.9062 1.2438 1.3125 +v -0.9062 1.2438 1 +v -0.9062 0.9313 1.3125 +v -0.9062 0.9313 1 +v -0.9062 1.0563 1.3125 +v -0.9062 1.0563 1 +v -0.6562 1.0563 1 +v -0.6562 1.0563 1.3125 +v -0.9062 0.9313 1.1875 +v -0.6562 0.9313 1.1875 +v -0.6562 1.2438 1.1875 +v -0.9062 1.2438 1.1875 +v -0.7187 1.0563 1 +v -0.7187 1.2438 1 +v -0.7187 1.2438 1.1875 +v -0.7187 1.2438 1.3125 +v -0.7187 1.0563 1.3125 +v -0.7187 0.9313 1.3125 +v -0.7187 0.9313 1.1875 +v -0.7187 0.9313 1 +v -0.9062 1.2438 1.3125 +v -0.9062 1.2438 1 +v -0.9062 0.9313 1.3125 +v -0.9062 0.9313 1 +v -0.9062 1.0563 1.3125 +v -0.9062 1.0563 1 +v -0.9062 1.0563 1.1875 +v -0.9062 0.9313 1.1875 +v -0.9062 1.2438 1.1875 +v -0.6562 1.2438 1 +v -0.6562 1.2438 1.3125 +v -0.6562 0.9313 1 +v -0.6562 0.9313 1.3125 +v -0.6562 1.0563 1 +v -0.6562 1.0563 1.3125 +v -0.6562 1.0563 1.125 +v -0.6562 0.9313 1.125 +v -0.6562 1.2438 1.125 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 0.75 0.5 -vt 0.84375 0.5 -vt 0.84375 0.59375 -vt 0.75 0.59375 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +vt 0.8438 0.5 +vt 0.8438 0.5938 +vt 0.75 0.5938 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 1 0.625 -vt 0.90625 0.625 -vt 0.90625 0.53125 -vt 1 0.53125 +vt 0.9063 0.625 +vt 0.9063 0.5313 +vt 1 0.5313 vt 0.75 0.5625 -vt 0.84375 0.5625 -vt 0.84375 0.5 +vt 0.8438 0.5625 +vt 0.8438 0.5 vt 0.75 0.5 vt 1 0.5 -vt 0.90625 0.5 -vt 0.90625 0.5625 +vt 0.9063 0.5 +vt 0.9063 0.5625 vt 1 0.5625 vt 0.75 0.5625 -vt 0.84375 0.5625 -vt 0.84375 0.5 +vt 0.8438 0.5625 +vt 0.8438 0.5 vt 0.75 0.5 -vt 0.78125 0.5 +vt 0.7813 0.5 vt 0.875 0.5 vt 0.875 0.5625 -vt 0.78125 0.5625 -vt 0.96875 0.53125 -vt 1 0.53125 +vt 0.7813 0.5625 +vt 0.9688 0.5313 +vt 1 0.5313 vt 1 0.625 -vt 0.96875 0.625 +vt 0.9688 0.625 vt 1 0.5 -vt 0.96875 0.5 -vt 0.96875 0.59375 -vt 1 0.59375 +vt 0.9688 0.5 +vt 0.9688 0.5938 +vt 1 0.5938 vt 1 0.5625 -vt 0.96875 0.5625 -vt 0.96875 0.625 +vt 0.9688 0.5625 +vt 0.9688 0.625 vt 1 0.625 vt 1 0.625 -vt 0.96875 0.625 -vt 0.96875 0.53125 -vt 1 0.53125 +vt 0.9688 0.625 +vt 0.9688 0.5313 +vt 1 0.5313 vt 1 0.5625 -vt 0.96875 0.5625 -vt 0.96875 0.5 +vt 0.9688 0.5625 +vt 0.9688 0.5 vt 1 0.5 vt 1 0.625 -vt 0.96875 0.625 -vt 0.96875 0.5625 +vt 0.9688 0.625 +vt 0.9688 0.5625 vt 1 0.5625 -vt 1 0.59375 -vt 0.96875 0.59375 -vt 0.96875 0.5 +vt 1 0.5938 +vt 0.9688 0.5938 +vt 0.9688 0.5 vt 1 0.5 -vt 0.96875 0.5 +vt 0.9688 0.5 vt 1 0.5 vt 1 0.5625 -vt 0.96875 0.5625 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +vt 0.9688 0.5625 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 1 0.5 -vt 0.90625 0.5 -vt 0.90625 0.5625 +vt 0.9063 0.5 +vt 0.9063 0.5625 vt 1 0.5625 vt 1 0.5625 vt 0.9375 0.5625 @@ -15235,15 +13478,15 @@ vt 0.9375 0.5 vt 1 0.5 vt 0.75 0.625 vt 0.8125 0.625 -vt 0.8125 0.53125 -vt 0.75 0.53125 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +vt 0.8125 0.5313 +vt 0.75 0.5313 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 1 0.5 -vt 0.90625 0.5 -vt 0.90625 0.5625 +vt 0.9063 0.5 +vt 0.9063 0.5625 vt 1 0.5625 vt 1 0.5625 vt 0.9375 0.5625 @@ -15251,8 +13494,8 @@ vt 0.9375 0.5 vt 1 0.5 vt 0.75 0.625 vt 0.8125 0.625 -vt 0.8125 0.53125 -vt 0.75 0.53125 +vt 0.8125 0.5313 +vt 0.75 0.5313 vn 0 1 0 vn 0 -1 0 vn 0 0 1 @@ -15278,168 +13521,144 @@ vn 1 0 0 vn 1 0 0 vn 1 0 0 usemtl tracks14_12 -f 2520/7025/1757 2523/7026/1757 2522/7027/1757 -f 2520/7025/1757 2522/7027/1757 2510/7028/1757 -f 2512/7029/1758 2528/7030/1758 2527/7031/1758 -f 2512/7029/1758 2527/7031/1758 2517/7032/1758 -f 2513/7033/1759 2525/7034/1759 2524/7035/1759 -f 2513/7033/1759 2524/7035/1759 2509/7036/1759 -f 2510/7037/1760 2522/7038/1760 2521/7039/1760 -f 2510/7037/1760 2521/7039/1760 2514/7040/1760 -f 2514/7041/1761 2521/7042/1761 2528/7043/1761 -f 2514/7041/1761 2528/7043/1761 2512/7044/1761 -f 2511/7045/1762 2526/7046/1762 2525/7047/1762 -f 2511/7045/1762 2525/7047/1762 2513/7048/1762 -f 2517/7049/1763 2527/7050/1763 2526/7051/1763 -f 2517/7049/1763 2526/7051/1763 2511/7052/1763 -f 2509/7053/1764 2524/7054/1764 2523/7055/1764 -f 2509/7053/1764 2523/7055/1764 2520/7056/1764 -f 2515/7057/1765 2521/7058/1765 2522/7059/1765 -f 2515/7057/1765 2522/7059/1765 2506/7060/1765 -f 2506/7061/1766 2522/7062/1766 2523/7063/1766 -f 2506/7061/1766 2523/7063/1766 2519/7064/1766 -f 2519/7065/1767 2523/7066/1767 2524/7067/1767 -f 2519/7065/1767 2524/7067/1767 2505/7068/1767 -f 2505/7069/1768 2524/7070/1768 2525/7071/1768 -f 2505/7069/1768 2525/7071/1768 2516/7072/1768 -f 2516/7073/1769 2525/7074/1769 2526/7075/1769 -f 2516/7073/1769 2526/7075/1769 2507/7076/1769 -f 2507/7077/1770 2526/7078/1770 2527/7079/1770 -f 2507/7077/1770 2527/7079/1770 2518/7080/1770 -f 2518/7081/1771 2527/7082/1771 2528/7083/1771 -f 2518/7081/1771 2528/7083/1771 2508/7084/1771 -f 2508/7085/1772 2528/7086/1772 2521/7087/1772 -f 2508/7085/1772 2521/7087/1772 2515/7088/1772 -f 2534/7089/1773 2535/7090/1773 2537/7091/1773 -f 2534/7089/1773 2537/7091/1773 2530/7092/1773 -f 2532/7093/1774 2536/7094/1774 2535/7095/1774 -f 2532/7093/1774 2535/7095/1774 2534/7096/1774 -f 2533/7097/1775 2535/7098/1775 2536/7099/1775 -f 2533/7097/1775 2536/7099/1775 2531/7100/1775 -f 2529/7101/1776 2537/7102/1776 2535/7103/1776 -f 2529/7101/1776 2535/7103/1776 2533/7104/1776 -f 2543/7105/1777 2544/7106/1777 2546/7107/1777 -f 2543/7105/1777 2546/7107/1777 2539/7108/1777 -f 2541/7109/1778 2545/7110/1778 2544/7111/1778 -f 2541/7109/1778 2544/7111/1778 2543/7112/1778 -f 2542/7113/1779 2544/7114/1779 2545/7115/1779 -f 2542/7113/1779 2545/7115/1779 2540/7116/1779 -f 2538/7117/1780 2546/7118/1780 2544/7119/1780 -f 2538/7117/1780 2544/7119/1780 2542/7120/1780 +f 2520/7025/1757 2523/7026/1757 2522/7027/1757 2510/7028/1757 +f 2512/7029/1758 2528/7030/1758 2527/7031/1758 2517/7032/1758 +f 2513/7033/1759 2525/7034/1759 2524/7035/1759 2509/7036/1759 +f 2510/7037/1760 2522/7038/1760 2521/7039/1760 2514/7040/1760 +f 2514/7041/1761 2521/7042/1761 2528/7043/1761 2512/7044/1761 +f 2511/7045/1762 2526/7046/1762 2525/7047/1762 2513/7048/1762 +f 2517/7049/1763 2527/7050/1763 2526/7051/1763 2511/7052/1763 +f 2509/7053/1764 2524/7054/1764 2523/7055/1764 2520/7056/1764 +f 2515/7057/1765 2521/7058/1765 2522/7059/1765 2506/7060/1765 +f 2506/7061/1766 2522/7062/1766 2523/7063/1766 2519/7064/1766 +f 2519/7065/1767 2523/7066/1767 2524/7067/1767 2505/7068/1767 +f 2505/7069/1768 2524/7070/1768 2525/7071/1768 2516/7072/1768 +f 2516/7073/1769 2525/7074/1769 2526/7075/1769 2507/7076/1769 +f 2507/7077/1770 2526/7078/1770 2527/7079/1770 2518/7080/1770 +f 2518/7081/1771 2527/7082/1771 2528/7083/1771 2508/7084/1771 +f 2508/7085/1772 2528/7086/1772 2521/7087/1772 2515/7088/1772 +f 2534/7089/1773 2535/7090/1773 2537/7091/1773 2530/7092/1773 +f 2532/7093/1774 2536/7094/1774 2535/7095/1774 2534/7096/1774 +f 2533/7097/1775 2535/7098/1775 2536/7099/1775 2531/7100/1775 +f 2529/7101/1776 2537/7102/1776 2535/7103/1776 2533/7104/1776 +f 2543/7105/1777 2544/7106/1777 2546/7107/1777 2539/7108/1777 +f 2541/7109/1778 2545/7110/1778 2544/7111/1778 2543/7112/1778 +f 2542/7113/1779 2544/7114/1779 2545/7115/1779 2540/7116/1779 +f 2538/7117/1780 2546/7118/1780 2544/7119/1780 2542/7120/1780 o smoll_whell2 -v -0.65625 1.24375 0.75 -v -0.65625 1.24375 0.4375 -v -0.65625 0.9312499999999999 0.75 -v -0.65625 0.9312499999999999 0.4375 -v -0.90625 1.24375 0.75 -v -0.90625 1.24375 0.4375 -v -0.90625 0.9312499999999999 0.75 -v -0.90625 0.9312499999999999 0.4375 -v -0.90625 1.05625 0.75 -v -0.90625 1.05625 0.4375 -v -0.65625 1.05625 0.4375 -v -0.65625 1.05625 0.75 -v -0.90625 0.9312499999999999 0.625 -v -0.65625 0.9312499999999999 0.625 -v -0.65625 1.24375 0.625 -v -0.90625 1.24375 0.625 -v -0.71875 1.05625 0.4375 -v -0.71875 1.24375 0.4375 -v -0.71875 1.24375 0.625 -v -0.71875 1.24375 0.75 -v -0.71875 1.05625 0.75 -v -0.71875 0.9312499999999999 0.75 -v -0.71875 0.9312499999999999 0.625 -v -0.71875 0.9312499999999999 0.4375 -v -0.90625 1.24375 0.75 -v -0.90625 1.24375 0.4375 -v -0.90625 0.9312499999999999 0.75 -v -0.90625 0.9312499999999999 0.4375 -v -0.90625 1.05625 0.75 -v -0.90625 1.05625 0.4375 -v -0.90625 1.05625 0.625 -v -0.90625 0.9312499999999999 0.625 -v -0.90625 1.24375 0.625 -v -0.65625 1.24375 0.4375 -v -0.65625 1.24375 0.75 -v -0.65625 0.9312499999999999 0.4375 -v -0.65625 0.9312499999999999 0.75 -v -0.65625 1.05625 0.4375 -v -0.65625 1.05625 0.75 -v -0.65625 1.05625 0.5625 -v -0.65625 0.9312499999999999 0.5625 -v -0.65625 1.24375 0.5625 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +v -0.6562 1.2438 0.75 +v -0.6562 1.2438 0.4375 +v -0.6562 0.9313 0.75 +v -0.6562 0.9313 0.4375 +v -0.9062 1.2438 0.75 +v -0.9062 1.2438 0.4375 +v -0.9062 0.9313 0.75 +v -0.9062 0.9313 0.4375 +v -0.9062 1.0563 0.75 +v -0.9062 1.0563 0.4375 +v -0.6562 1.0563 0.4375 +v -0.6562 1.0563 0.75 +v -0.9062 0.9313 0.625 +v -0.6562 0.9313 0.625 +v -0.6562 1.2438 0.625 +v -0.9062 1.2438 0.625 +v -0.7187 1.0563 0.4375 +v -0.7187 1.2438 0.4375 +v -0.7187 1.2438 0.625 +v -0.7187 1.2438 0.75 +v -0.7187 1.0563 0.75 +v -0.7187 0.9313 0.75 +v -0.7187 0.9313 0.625 +v -0.7187 0.9313 0.4375 +v -0.9062 1.2438 0.75 +v -0.9062 1.2438 0.4375 +v -0.9062 0.9313 0.75 +v -0.9062 0.9313 0.4375 +v -0.9062 1.0563 0.75 +v -0.9062 1.0563 0.4375 +v -0.9062 1.0563 0.625 +v -0.9062 0.9313 0.625 +v -0.9062 1.2438 0.625 +v -0.6562 1.2438 0.4375 +v -0.6562 1.2438 0.75 +v -0.6562 0.9313 0.4375 +v -0.6562 0.9313 0.75 +v -0.6562 1.0563 0.4375 +v -0.6562 1.0563 0.75 +v -0.6562 1.0563 0.5625 +v -0.6562 0.9313 0.5625 +v -0.6562 1.2438 0.5625 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 0.75 0.5 -vt 0.84375 0.5 -vt 0.84375 0.59375 -vt 0.75 0.59375 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +vt 0.8438 0.5 +vt 0.8438 0.5938 +vt 0.75 0.5938 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 1 0.625 -vt 0.90625 0.625 -vt 0.90625 0.53125 -vt 1 0.53125 +vt 0.9063 0.625 +vt 0.9063 0.5313 +vt 1 0.5313 vt 0.75 0.5625 -vt 0.84375 0.5625 -vt 0.84375 0.5 +vt 0.8438 0.5625 +vt 0.8438 0.5 vt 0.75 0.5 vt 1 0.5 -vt 0.90625 0.5 -vt 0.90625 0.5625 +vt 0.9063 0.5 +vt 0.9063 0.5625 vt 1 0.5625 vt 0.75 0.5625 -vt 0.84375 0.5625 -vt 0.84375 0.5 +vt 0.8438 0.5625 +vt 0.8438 0.5 vt 0.75 0.5 -vt 0.78125 0.5 +vt 0.7813 0.5 vt 0.875 0.5 vt 0.875 0.5625 -vt 0.78125 0.5625 -vt 0.96875 0.53125 -vt 1 0.53125 +vt 0.7813 0.5625 +vt 0.9688 0.5313 +vt 1 0.5313 vt 1 0.625 -vt 0.96875 0.625 +vt 0.9688 0.625 vt 1 0.5 -vt 0.96875 0.5 -vt 0.96875 0.59375 -vt 1 0.59375 +vt 0.9688 0.5 +vt 0.9688 0.5938 +vt 1 0.5938 vt 1 0.5625 -vt 0.96875 0.5625 -vt 0.96875 0.625 +vt 0.9688 0.5625 +vt 0.9688 0.625 vt 1 0.625 vt 1 0.625 -vt 0.96875 0.625 -vt 0.96875 0.53125 -vt 1 0.53125 +vt 0.9688 0.625 +vt 0.9688 0.5313 +vt 1 0.5313 vt 1 0.5625 -vt 0.96875 0.5625 -vt 0.96875 0.5 +vt 0.9688 0.5625 +vt 0.9688 0.5 vt 1 0.5 vt 1 0.625 -vt 0.96875 0.625 -vt 0.96875 0.5625 +vt 0.9688 0.625 +vt 0.9688 0.5625 vt 1 0.5625 -vt 1 0.59375 -vt 0.96875 0.59375 -vt 0.96875 0.5 +vt 1 0.5938 +vt 0.9688 0.5938 +vt 0.9688 0.5 vt 1 0.5 -vt 0.96875 0.5 +vt 0.9688 0.5 vt 1 0.5 vt 1 0.5625 -vt 0.96875 0.5625 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +vt 0.9688 0.5625 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 1 0.5 -vt 0.90625 0.5 -vt 0.90625 0.5625 +vt 0.9063 0.5 +vt 0.9063 0.5625 vt 1 0.5625 vt 1 0.5625 vt 0.9375 0.5625 @@ -15447,15 +13666,15 @@ vt 0.9375 0.5 vt 1 0.5 vt 0.75 0.625 vt 0.8125 0.625 -vt 0.8125 0.53125 -vt 0.75 0.53125 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +vt 0.8125 0.5313 +vt 0.75 0.5313 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 1 0.5 -vt 0.90625 0.5 -vt 0.90625 0.5625 +vt 0.9063 0.5 +vt 0.9063 0.5625 vt 1 0.5625 vt 1 0.5625 vt 0.9375 0.5625 @@ -15463,8 +13682,8 @@ vt 0.9375 0.5 vt 1 0.5 vt 0.75 0.625 vt 0.8125 0.625 -vt 0.8125 0.53125 -vt 0.75 0.53125 +vt 0.8125 0.5313 +vt 0.75 0.5313 vn 0 1 0 vn 0 -1 0 vn 0 0 1 @@ -15490,168 +13709,144 @@ vn 1 0 0 vn 1 0 0 vn 1 0 0 usemtl tracks14_12 -f 2562/7121/1781 2565/7122/1781 2564/7123/1781 -f 2562/7121/1781 2564/7123/1781 2552/7124/1781 -f 2554/7125/1782 2570/7126/1782 2569/7127/1782 -f 2554/7125/1782 2569/7127/1782 2559/7128/1782 -f 2555/7129/1783 2567/7130/1783 2566/7131/1783 -f 2555/7129/1783 2566/7131/1783 2551/7132/1783 -f 2552/7133/1784 2564/7134/1784 2563/7135/1784 -f 2552/7133/1784 2563/7135/1784 2556/7136/1784 -f 2556/7137/1785 2563/7138/1785 2570/7139/1785 -f 2556/7137/1785 2570/7139/1785 2554/7140/1785 -f 2553/7141/1786 2568/7142/1786 2567/7143/1786 -f 2553/7141/1786 2567/7143/1786 2555/7144/1786 -f 2559/7145/1787 2569/7146/1787 2568/7147/1787 -f 2559/7145/1787 2568/7147/1787 2553/7148/1787 -f 2551/7149/1788 2566/7150/1788 2565/7151/1788 -f 2551/7149/1788 2565/7151/1788 2562/7152/1788 -f 2557/7153/1789 2563/7154/1789 2564/7155/1789 -f 2557/7153/1789 2564/7155/1789 2548/7156/1789 -f 2548/7157/1790 2564/7158/1790 2565/7159/1790 -f 2548/7157/1790 2565/7159/1790 2561/7160/1790 -f 2561/7161/1791 2565/7162/1791 2566/7163/1791 -f 2561/7161/1791 2566/7163/1791 2547/7164/1791 -f 2547/7165/1792 2566/7166/1792 2567/7167/1792 -f 2547/7165/1792 2567/7167/1792 2558/7168/1792 -f 2558/7169/1793 2567/7170/1793 2568/7171/1793 -f 2558/7169/1793 2568/7171/1793 2549/7172/1793 -f 2549/7173/1794 2568/7174/1794 2569/7175/1794 -f 2549/7173/1794 2569/7175/1794 2560/7176/1794 -f 2560/7177/1795 2569/7178/1795 2570/7179/1795 -f 2560/7177/1795 2570/7179/1795 2550/7180/1795 -f 2550/7181/1796 2570/7182/1796 2563/7183/1796 -f 2550/7181/1796 2563/7183/1796 2557/7184/1796 -f 2576/7185/1797 2577/7186/1797 2579/7187/1797 -f 2576/7185/1797 2579/7187/1797 2572/7188/1797 -f 2574/7189/1798 2578/7190/1798 2577/7191/1798 -f 2574/7189/1798 2577/7191/1798 2576/7192/1798 -f 2575/7193/1799 2577/7194/1799 2578/7195/1799 -f 2575/7193/1799 2578/7195/1799 2573/7196/1799 -f 2571/7197/1800 2579/7198/1800 2577/7199/1800 -f 2571/7197/1800 2577/7199/1800 2575/7200/1800 -f 2585/7201/1801 2586/7202/1801 2588/7203/1801 -f 2585/7201/1801 2588/7203/1801 2581/7204/1801 -f 2583/7205/1802 2587/7206/1802 2586/7207/1802 -f 2583/7205/1802 2586/7207/1802 2585/7208/1802 -f 2584/7209/1803 2586/7210/1803 2587/7211/1803 -f 2584/7209/1803 2587/7211/1803 2582/7212/1803 -f 2580/7213/1804 2588/7214/1804 2586/7215/1804 -f 2580/7213/1804 2586/7215/1804 2584/7216/1804 +f 2562/7121/1781 2565/7122/1781 2564/7123/1781 2552/7124/1781 +f 2554/7125/1782 2570/7126/1782 2569/7127/1782 2559/7128/1782 +f 2555/7129/1783 2567/7130/1783 2566/7131/1783 2551/7132/1783 +f 2552/7133/1784 2564/7134/1784 2563/7135/1784 2556/7136/1784 +f 2556/7137/1785 2563/7138/1785 2570/7139/1785 2554/7140/1785 +f 2553/7141/1786 2568/7142/1786 2567/7143/1786 2555/7144/1786 +f 2559/7145/1787 2569/7146/1787 2568/7147/1787 2553/7148/1787 +f 2551/7149/1788 2566/7150/1788 2565/7151/1788 2562/7152/1788 +f 2557/7153/1789 2563/7154/1789 2564/7155/1789 2548/7156/1789 +f 2548/7157/1790 2564/7158/1790 2565/7159/1790 2561/7160/1790 +f 2561/7161/1791 2565/7162/1791 2566/7163/1791 2547/7164/1791 +f 2547/7165/1792 2566/7166/1792 2567/7167/1792 2558/7168/1792 +f 2558/7169/1793 2567/7170/1793 2568/7171/1793 2549/7172/1793 +f 2549/7173/1794 2568/7174/1794 2569/7175/1794 2560/7176/1794 +f 2560/7177/1795 2569/7178/1795 2570/7179/1795 2550/7180/1795 +f 2550/7181/1796 2570/7182/1796 2563/7183/1796 2557/7184/1796 +f 2576/7185/1797 2577/7186/1797 2579/7187/1797 2572/7188/1797 +f 2574/7189/1798 2578/7190/1798 2577/7191/1798 2576/7192/1798 +f 2575/7193/1799 2577/7194/1799 2578/7195/1799 2573/7196/1799 +f 2571/7197/1800 2579/7198/1800 2577/7199/1800 2575/7200/1800 +f 2585/7201/1801 2586/7202/1801 2588/7203/1801 2581/7204/1801 +f 2583/7205/1802 2587/7206/1802 2586/7207/1802 2585/7208/1802 +f 2584/7209/1803 2586/7210/1803 2587/7211/1803 2582/7212/1803 +f 2580/7213/1804 2588/7214/1804 2586/7215/1804 2584/7216/1804 o smoll_whell3 -v 0.90625 1.24375 0.75 -v 0.90625 1.24375 0.4375 -v 0.90625 0.9312499999999999 0.75 -v 0.90625 0.9312499999999999 0.4375 -v 0.65625 1.24375 0.75 -v 0.65625 1.24375 0.4375 -v 0.65625 0.9312499999999999 0.75 -v 0.65625 0.9312499999999999 0.4375 -v 0.65625 1.05625 0.75 -v 0.65625 1.05625 0.4375 -v 0.90625 1.05625 0.4375 -v 0.90625 1.05625 0.75 -v 0.65625 0.9312499999999999 0.625 -v 0.90625 0.9312499999999999 0.625 -v 0.90625 1.24375 0.625 -v 0.65625 1.24375 0.625 -v 0.84375 1.05625 0.4375 -v 0.84375 1.24375 0.4375 -v 0.84375 1.24375 0.625 -v 0.84375 1.24375 0.75 -v 0.84375 1.05625 0.75 -v 0.84375 0.9312499999999999 0.75 -v 0.84375 0.9312499999999999 0.625 -v 0.84375 0.9312499999999999 0.4375 -v 0.65625 1.24375 0.75 -v 0.65625 1.24375 0.4375 -v 0.65625 0.9312499999999999 0.75 -v 0.65625 0.9312499999999999 0.4375 -v 0.65625 1.05625 0.75 -v 0.65625 1.05625 0.4375 -v 0.65625 1.05625 0.625 -v 0.65625 0.9312499999999999 0.625 -v 0.65625 1.24375 0.625 -v 0.90625 1.24375 0.4375 -v 0.90625 1.24375 0.75 -v 0.90625 0.9312499999999999 0.4375 -v 0.90625 0.9312499999999999 0.75 -v 0.90625 1.05625 0.4375 -v 0.90625 1.05625 0.75 -v 0.90625 1.05625 0.5625 -v 0.90625 0.9312499999999999 0.5625 -v 0.90625 1.24375 0.5625 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +v 0.9063 1.2438 0.75 +v 0.9063 1.2438 0.4375 +v 0.9063 0.9313 0.75 +v 0.9063 0.9313 0.4375 +v 0.6563 1.2438 0.75 +v 0.6563 1.2438 0.4375 +v 0.6563 0.9313 0.75 +v 0.6563 0.9313 0.4375 +v 0.6563 1.0563 0.75 +v 0.6563 1.0563 0.4375 +v 0.9063 1.0563 0.4375 +v 0.9063 1.0563 0.75 +v 0.6563 0.9313 0.625 +v 0.9063 0.9313 0.625 +v 0.9063 1.2438 0.625 +v 0.6563 1.2438 0.625 +v 0.8438 1.0563 0.4375 +v 0.8438 1.2438 0.4375 +v 0.8438 1.2438 0.625 +v 0.8438 1.2438 0.75 +v 0.8438 1.0563 0.75 +v 0.8438 0.9313 0.75 +v 0.8438 0.9313 0.625 +v 0.8438 0.9313 0.4375 +v 0.6563 1.2438 0.75 +v 0.6563 1.2438 0.4375 +v 0.6563 0.9313 0.75 +v 0.6563 0.9313 0.4375 +v 0.6563 1.0563 0.75 +v 0.6563 1.0563 0.4375 +v 0.6563 1.0563 0.625 +v 0.6563 0.9313 0.625 +v 0.6563 1.2438 0.625 +v 0.9063 1.2438 0.4375 +v 0.9063 1.2438 0.75 +v 0.9063 0.9313 0.4375 +v 0.9063 0.9313 0.75 +v 0.9063 1.0563 0.4375 +v 0.9063 1.0563 0.75 +v 0.9063 1.0563 0.5625 +v 0.9063 0.9313 0.5625 +v 0.9063 1.2438 0.5625 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 0.75 0.5 -vt 0.84375 0.5 -vt 0.84375 0.59375 -vt 0.75 0.59375 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +vt 0.8438 0.5 +vt 0.8438 0.5938 +vt 0.75 0.5938 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 1 0.625 -vt 0.90625 0.625 -vt 0.90625 0.53125 -vt 1 0.53125 +vt 0.9063 0.625 +vt 0.9063 0.5313 +vt 1 0.5313 vt 0.75 0.5625 -vt 0.84375 0.5625 -vt 0.84375 0.5 +vt 0.8438 0.5625 +vt 0.8438 0.5 vt 0.75 0.5 vt 1 0.5 -vt 0.90625 0.5 -vt 0.90625 0.5625 +vt 0.9063 0.5 +vt 0.9063 0.5625 vt 1 0.5625 vt 0.75 0.5625 -vt 0.84375 0.5625 -vt 0.84375 0.5 +vt 0.8438 0.5625 +vt 0.8438 0.5 vt 0.75 0.5 -vt 0.78125 0.5 +vt 0.7813 0.5 vt 0.875 0.5 vt 0.875 0.5625 -vt 0.78125 0.5625 -vt 0.96875 0.53125 -vt 1 0.53125 +vt 0.7813 0.5625 +vt 0.9688 0.5313 +vt 1 0.5313 vt 1 0.625 -vt 0.96875 0.625 +vt 0.9688 0.625 vt 1 0.5 -vt 0.96875 0.5 -vt 0.96875 0.59375 -vt 1 0.59375 +vt 0.9688 0.5 +vt 0.9688 0.5938 +vt 1 0.5938 vt 1 0.5625 -vt 0.96875 0.5625 -vt 0.96875 0.625 +vt 0.9688 0.5625 +vt 0.9688 0.625 vt 1 0.625 vt 1 0.625 -vt 0.96875 0.625 -vt 0.96875 0.53125 -vt 1 0.53125 +vt 0.9688 0.625 +vt 0.9688 0.5313 +vt 1 0.5313 vt 1 0.5625 -vt 0.96875 0.5625 -vt 0.96875 0.5 +vt 0.9688 0.5625 +vt 0.9688 0.5 vt 1 0.5 vt 1 0.625 -vt 0.96875 0.625 -vt 0.96875 0.5625 +vt 0.9688 0.625 +vt 0.9688 0.5625 vt 1 0.5625 -vt 1 0.59375 -vt 0.96875 0.59375 -vt 0.96875 0.5 +vt 1 0.5938 +vt 0.9688 0.5938 +vt 0.9688 0.5 vt 1 0.5 -vt 0.96875 0.5 +vt 0.9688 0.5 vt 1 0.5 vt 1 0.5625 -vt 0.96875 0.5625 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +vt 0.9688 0.5625 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 1 0.5 -vt 0.90625 0.5 -vt 0.90625 0.5625 +vt 0.9063 0.5 +vt 0.9063 0.5625 vt 1 0.5625 vt 1 0.5625 vt 0.9375 0.5625 @@ -15659,15 +13854,15 @@ vt 0.9375 0.5 vt 1 0.5 vt 0.75 0.625 vt 0.8125 0.625 -vt 0.8125 0.53125 -vt 0.75 0.53125 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +vt 0.8125 0.5313 +vt 0.75 0.5313 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 1 0.5 -vt 0.90625 0.5 -vt 0.90625 0.5625 +vt 0.9063 0.5 +vt 0.9063 0.5625 vt 1 0.5625 vt 1 0.5625 vt 0.9375 0.5625 @@ -15675,8 +13870,8 @@ vt 0.9375 0.5 vt 1 0.5 vt 0.75 0.625 vt 0.8125 0.625 -vt 0.8125 0.53125 -vt 0.75 0.53125 +vt 0.8125 0.5313 +vt 0.75 0.5313 vn 0 1 0 vn 0 -1 0 vn 0 0 1 @@ -15702,168 +13897,144 @@ vn 1 0 0 vn 1 0 0 vn 1 0 0 usemtl tracks14_12 -f 2604/7217/1805 2607/7218/1805 2606/7219/1805 -f 2604/7217/1805 2606/7219/1805 2594/7220/1805 -f 2596/7221/1806 2612/7222/1806 2611/7223/1806 -f 2596/7221/1806 2611/7223/1806 2601/7224/1806 -f 2597/7225/1807 2609/7226/1807 2608/7227/1807 -f 2597/7225/1807 2608/7227/1807 2593/7228/1807 -f 2594/7229/1808 2606/7230/1808 2605/7231/1808 -f 2594/7229/1808 2605/7231/1808 2598/7232/1808 -f 2598/7233/1809 2605/7234/1809 2612/7235/1809 -f 2598/7233/1809 2612/7235/1809 2596/7236/1809 -f 2595/7237/1810 2610/7238/1810 2609/7239/1810 -f 2595/7237/1810 2609/7239/1810 2597/7240/1810 -f 2601/7241/1811 2611/7242/1811 2610/7243/1811 -f 2601/7241/1811 2610/7243/1811 2595/7244/1811 -f 2593/7245/1812 2608/7246/1812 2607/7247/1812 -f 2593/7245/1812 2607/7247/1812 2604/7248/1812 -f 2599/7249/1813 2605/7250/1813 2606/7251/1813 -f 2599/7249/1813 2606/7251/1813 2590/7252/1813 -f 2590/7253/1814 2606/7254/1814 2607/7255/1814 -f 2590/7253/1814 2607/7255/1814 2603/7256/1814 -f 2603/7257/1815 2607/7258/1815 2608/7259/1815 -f 2603/7257/1815 2608/7259/1815 2589/7260/1815 -f 2589/7261/1816 2608/7262/1816 2609/7263/1816 -f 2589/7261/1816 2609/7263/1816 2600/7264/1816 -f 2600/7265/1817 2609/7266/1817 2610/7267/1817 -f 2600/7265/1817 2610/7267/1817 2591/7268/1817 -f 2591/7269/1818 2610/7270/1818 2611/7271/1818 -f 2591/7269/1818 2611/7271/1818 2602/7272/1818 -f 2602/7273/1819 2611/7274/1819 2612/7275/1819 -f 2602/7273/1819 2612/7275/1819 2592/7276/1819 -f 2592/7277/1820 2612/7278/1820 2605/7279/1820 -f 2592/7277/1820 2605/7279/1820 2599/7280/1820 -f 2618/7281/1821 2619/7282/1821 2621/7283/1821 -f 2618/7281/1821 2621/7283/1821 2614/7284/1821 -f 2616/7285/1822 2620/7286/1822 2619/7287/1822 -f 2616/7285/1822 2619/7287/1822 2618/7288/1822 -f 2617/7289/1823 2619/7290/1823 2620/7291/1823 -f 2617/7289/1823 2620/7291/1823 2615/7292/1823 -f 2613/7293/1824 2621/7294/1824 2619/7295/1824 -f 2613/7293/1824 2619/7295/1824 2617/7296/1824 -f 2627/7297/1825 2628/7298/1825 2630/7299/1825 -f 2627/7297/1825 2630/7299/1825 2623/7300/1825 -f 2625/7301/1826 2629/7302/1826 2628/7303/1826 -f 2625/7301/1826 2628/7303/1826 2627/7304/1826 -f 2626/7305/1827 2628/7306/1827 2629/7307/1827 -f 2626/7305/1827 2629/7307/1827 2624/7308/1827 -f 2622/7309/1828 2630/7310/1828 2628/7311/1828 -f 2622/7309/1828 2628/7311/1828 2626/7312/1828 +f 2604/7217/1805 2607/7218/1805 2606/7219/1805 2594/7220/1805 +f 2596/7221/1806 2612/7222/1806 2611/7223/1806 2601/7224/1806 +f 2597/7225/1807 2609/7226/1807 2608/7227/1807 2593/7228/1807 +f 2594/7229/1808 2606/7230/1808 2605/7231/1808 2598/7232/1808 +f 2598/7233/1809 2605/7234/1809 2612/7235/1809 2596/7236/1809 +f 2595/7237/1810 2610/7238/1810 2609/7239/1810 2597/7240/1810 +f 2601/7241/1811 2611/7242/1811 2610/7243/1811 2595/7244/1811 +f 2593/7245/1812 2608/7246/1812 2607/7247/1812 2604/7248/1812 +f 2599/7249/1813 2605/7250/1813 2606/7251/1813 2590/7252/1813 +f 2590/7253/1814 2606/7254/1814 2607/7255/1814 2603/7256/1814 +f 2603/7257/1815 2607/7258/1815 2608/7259/1815 2589/7260/1815 +f 2589/7261/1816 2608/7262/1816 2609/7263/1816 2600/7264/1816 +f 2600/7265/1817 2609/7266/1817 2610/7267/1817 2591/7268/1817 +f 2591/7269/1818 2610/7270/1818 2611/7271/1818 2602/7272/1818 +f 2602/7273/1819 2611/7274/1819 2612/7275/1819 2592/7276/1819 +f 2592/7277/1820 2612/7278/1820 2605/7279/1820 2599/7280/1820 +f 2618/7281/1821 2619/7282/1821 2621/7283/1821 2614/7284/1821 +f 2616/7285/1822 2620/7286/1822 2619/7287/1822 2618/7288/1822 +f 2617/7289/1823 2619/7290/1823 2620/7291/1823 2615/7292/1823 +f 2613/7293/1824 2621/7294/1824 2619/7295/1824 2617/7296/1824 +f 2627/7297/1825 2628/7298/1825 2630/7299/1825 2623/7300/1825 +f 2625/7301/1826 2629/7302/1826 2628/7303/1826 2627/7304/1826 +f 2626/7305/1827 2628/7306/1827 2629/7307/1827 2624/7308/1827 +f 2622/7309/1828 2630/7310/1828 2628/7311/1828 2626/7312/1828 o smoll_whell4 -v 0.90625 1.24375 1.3125 -v 0.90625 1.24375 1 -v 0.90625 0.9312499999999999 1.3125 -v 0.90625 0.9312499999999999 1 -v 0.65625 1.24375 1.3125 -v 0.65625 1.24375 1 -v 0.65625 0.9312499999999999 1.3125 -v 0.65625 0.9312499999999999 1 -v 0.65625 1.05625 1.3125 -v 0.65625 1.05625 1 -v 0.90625 1.05625 1 -v 0.90625 1.05625 1.3125 -v 0.65625 0.9312499999999999 1.1875 -v 0.90625 0.9312499999999999 1.1875 -v 0.90625 1.24375 1.1875 -v 0.65625 1.24375 1.1875 -v 0.84375 1.05625 1 -v 0.84375 1.24375 1 -v 0.84375 1.24375 1.1875 -v 0.84375 1.24375 1.3125 -v 0.84375 1.05625 1.3125 -v 0.84375 0.9312499999999999 1.3125 -v 0.84375 0.9312499999999999 1.1875 -v 0.84375 0.9312499999999999 1 -v 0.65625 1.24375 1.3125 -v 0.65625 1.24375 1 -v 0.65625 0.9312499999999999 1.3125 -v 0.65625 0.9312499999999999 1 -v 0.65625 1.05625 1.3125 -v 0.65625 1.05625 1 -v 0.65625 1.05625 1.1875 -v 0.65625 0.9312499999999999 1.1875 -v 0.65625 1.24375 1.1875 -v 0.90625 1.24375 1 -v 0.90625 1.24375 1.3125 -v 0.90625 0.9312499999999999 1 -v 0.90625 0.9312499999999999 1.3125 -v 0.90625 1.05625 1 -v 0.90625 1.05625 1.3125 -v 0.90625 1.05625 1.125 -v 0.90625 0.9312499999999999 1.125 -v 0.90625 1.24375 1.125 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +v 0.9063 1.2438 1.3125 +v 0.9063 1.2438 1 +v 0.9063 0.9313 1.3125 +v 0.9063 0.9313 1 +v 0.6563 1.2438 1.3125 +v 0.6563 1.2438 1 +v 0.6563 0.9313 1.3125 +v 0.6563 0.9313 1 +v 0.6563 1.0563 1.3125 +v 0.6563 1.0563 1 +v 0.9063 1.0563 1 +v 0.9063 1.0563 1.3125 +v 0.6563 0.9313 1.1875 +v 0.9063 0.9313 1.1875 +v 0.9063 1.2438 1.1875 +v 0.6563 1.2438 1.1875 +v 0.8438 1.0563 1 +v 0.8438 1.2438 1 +v 0.8438 1.2438 1.1875 +v 0.8438 1.2438 1.3125 +v 0.8438 1.0563 1.3125 +v 0.8438 0.9313 1.3125 +v 0.8438 0.9313 1.1875 +v 0.8438 0.9313 1 +v 0.6563 1.2438 1.3125 +v 0.6563 1.2438 1 +v 0.6563 0.9313 1.3125 +v 0.6563 0.9313 1 +v 0.6563 1.0563 1.3125 +v 0.6563 1.0563 1 +v 0.6563 1.0563 1.1875 +v 0.6563 0.9313 1.1875 +v 0.6563 1.2438 1.1875 +v 0.9063 1.2438 1 +v 0.9063 1.2438 1.3125 +v 0.9063 0.9313 1 +v 0.9063 0.9313 1.3125 +v 0.9063 1.0563 1 +v 0.9063 1.0563 1.3125 +v 0.9063 1.0563 1.125 +v 0.9063 0.9313 1.125 +v 0.9063 1.2438 1.125 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 0.75 0.5 -vt 0.84375 0.5 -vt 0.84375 0.59375 -vt 0.75 0.59375 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +vt 0.8438 0.5 +vt 0.8438 0.5938 +vt 0.75 0.5938 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 1 0.625 -vt 0.90625 0.625 -vt 0.90625 0.53125 -vt 1 0.53125 +vt 0.9063 0.625 +vt 0.9063 0.5313 +vt 1 0.5313 vt 0.75 0.5625 -vt 0.84375 0.5625 -vt 0.84375 0.5 +vt 0.8438 0.5625 +vt 0.8438 0.5 vt 0.75 0.5 vt 1 0.5 -vt 0.90625 0.5 -vt 0.90625 0.5625 +vt 0.9063 0.5 +vt 0.9063 0.5625 vt 1 0.5625 vt 0.75 0.5625 -vt 0.84375 0.5625 -vt 0.84375 0.5 +vt 0.8438 0.5625 +vt 0.8438 0.5 vt 0.75 0.5 -vt 0.78125 0.5 +vt 0.7813 0.5 vt 0.875 0.5 vt 0.875 0.5625 -vt 0.78125 0.5625 -vt 0.96875 0.53125 -vt 1 0.53125 +vt 0.7813 0.5625 +vt 0.9688 0.5313 +vt 1 0.5313 vt 1 0.625 -vt 0.96875 0.625 +vt 0.9688 0.625 vt 1 0.5 -vt 0.96875 0.5 -vt 0.96875 0.59375 -vt 1 0.59375 +vt 0.9688 0.5 +vt 0.9688 0.5938 +vt 1 0.5938 vt 1 0.5625 -vt 0.96875 0.5625 -vt 0.96875 0.625 +vt 0.9688 0.5625 +vt 0.9688 0.625 vt 1 0.625 vt 1 0.625 -vt 0.96875 0.625 -vt 0.96875 0.53125 -vt 1 0.53125 +vt 0.9688 0.625 +vt 0.9688 0.5313 +vt 1 0.5313 vt 1 0.5625 -vt 0.96875 0.5625 -vt 0.96875 0.5 +vt 0.9688 0.5625 +vt 0.9688 0.5 vt 1 0.5 vt 1 0.625 -vt 0.96875 0.625 -vt 0.96875 0.5625 +vt 0.9688 0.625 +vt 0.9688 0.5625 vt 1 0.5625 -vt 1 0.59375 -vt 0.96875 0.59375 -vt 0.96875 0.5 +vt 1 0.5938 +vt 0.9688 0.5938 +vt 0.9688 0.5 vt 1 0.5 -vt 0.96875 0.5 +vt 0.9688 0.5 vt 1 0.5 vt 1 0.5625 -vt 0.96875 0.5625 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +vt 0.9688 0.5625 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 1 0.5 -vt 0.90625 0.5 -vt 0.90625 0.5625 +vt 0.9063 0.5 +vt 0.9063 0.5625 vt 1 0.5625 vt 1 0.5625 vt 0.9375 0.5625 @@ -15871,15 +14042,15 @@ vt 0.9375 0.5 vt 1 0.5 vt 0.75 0.625 vt 0.8125 0.625 -vt 0.8125 0.53125 -vt 0.75 0.53125 -vt 0.75 0.53125 -vt 0.84375 0.53125 -vt 0.84375 0.625 +vt 0.8125 0.5313 +vt 0.75 0.5313 +vt 0.75 0.5313 +vt 0.8438 0.5313 +vt 0.8438 0.625 vt 0.75 0.625 vt 1 0.5 -vt 0.90625 0.5 -vt 0.90625 0.5625 +vt 0.9063 0.5 +vt 0.9063 0.5625 vt 1 0.5625 vt 1 0.5625 vt 0.9375 0.5625 @@ -15887,8 +14058,8 @@ vt 0.9375 0.5 vt 1 0.5 vt 0.75 0.625 vt 0.8125 0.625 -vt 0.8125 0.53125 -vt 0.75 0.53125 +vt 0.8125 0.5313 +vt 0.75 0.5313 vn 0 1 0 vn 0 -1 0 vn 0 0 1 @@ -15914,51 +14085,27 @@ vn 1 0 0 vn 1 0 0 vn 1 0 0 usemtl tracks14_12 -f 2646/7313/1829 2649/7314/1829 2648/7315/1829 -f 2646/7313/1829 2648/7315/1829 2636/7316/1829 -f 2638/7317/1830 2654/7318/1830 2653/7319/1830 -f 2638/7317/1830 2653/7319/1830 2643/7320/1830 -f 2639/7321/1831 2651/7322/1831 2650/7323/1831 -f 2639/7321/1831 2650/7323/1831 2635/7324/1831 -f 2636/7325/1832 2648/7326/1832 2647/7327/1832 -f 2636/7325/1832 2647/7327/1832 2640/7328/1832 -f 2640/7329/1833 2647/7330/1833 2654/7331/1833 -f 2640/7329/1833 2654/7331/1833 2638/7332/1833 -f 2637/7333/1834 2652/7334/1834 2651/7335/1834 -f 2637/7333/1834 2651/7335/1834 2639/7336/1834 -f 2643/7337/1835 2653/7338/1835 2652/7339/1835 -f 2643/7337/1835 2652/7339/1835 2637/7340/1835 -f 2635/7341/1836 2650/7342/1836 2649/7343/1836 -f 2635/7341/1836 2649/7343/1836 2646/7344/1836 -f 2641/7345/1837 2647/7346/1837 2648/7347/1837 -f 2641/7345/1837 2648/7347/1837 2632/7348/1837 -f 2632/7349/1838 2648/7350/1838 2649/7351/1838 -f 2632/7349/1838 2649/7351/1838 2645/7352/1838 -f 2645/7353/1839 2649/7354/1839 2650/7355/1839 -f 2645/7353/1839 2650/7355/1839 2631/7356/1839 -f 2631/7357/1840 2650/7358/1840 2651/7359/1840 -f 2631/7357/1840 2651/7359/1840 2642/7360/1840 -f 2642/7361/1841 2651/7362/1841 2652/7363/1841 -f 2642/7361/1841 2652/7363/1841 2633/7364/1841 -f 2633/7365/1842 2652/7366/1842 2653/7367/1842 -f 2633/7365/1842 2653/7367/1842 2644/7368/1842 -f 2644/7369/1843 2653/7370/1843 2654/7371/1843 -f 2644/7369/1843 2654/7371/1843 2634/7372/1843 -f 2634/7373/1844 2654/7374/1844 2647/7375/1844 -f 2634/7373/1844 2647/7375/1844 2641/7376/1844 -f 2660/7377/1845 2661/7378/1845 2663/7379/1845 -f 2660/7377/1845 2663/7379/1845 2656/7380/1845 -f 2658/7381/1846 2662/7382/1846 2661/7383/1846 -f 2658/7381/1846 2661/7383/1846 2660/7384/1846 -f 2659/7385/1847 2661/7386/1847 2662/7387/1847 -f 2659/7385/1847 2662/7387/1847 2657/7388/1847 -f 2655/7389/1848 2663/7390/1848 2661/7391/1848 -f 2655/7389/1848 2661/7391/1848 2659/7392/1848 -f 2669/7393/1849 2670/7394/1849 2672/7395/1849 -f 2669/7393/1849 2672/7395/1849 2665/7396/1849 -f 2667/7397/1850 2671/7398/1850 2670/7399/1850 -f 2667/7397/1850 2670/7399/1850 2669/7400/1850 -f 2668/7401/1851 2670/7402/1851 2671/7403/1851 -f 2668/7401/1851 2671/7403/1851 2666/7404/1851 -f 2664/7405/1852 2672/7406/1852 2670/7407/1852 -f 2664/7405/1852 2670/7407/1852 2668/7408/1852 \ No newline at end of file +f 2646/7313/1829 2649/7314/1829 2648/7315/1829 2636/7316/1829 +f 2638/7317/1830 2654/7318/1830 2653/7319/1830 2643/7320/1830 +f 2639/7321/1831 2651/7322/1831 2650/7323/1831 2635/7324/1831 +f 2636/7325/1832 2648/7326/1832 2647/7327/1832 2640/7328/1832 +f 2640/7329/1833 2647/7330/1833 2654/7331/1833 2638/7332/1833 +f 2637/7333/1834 2652/7334/1834 2651/7335/1834 2639/7336/1834 +f 2643/7337/1835 2653/7338/1835 2652/7339/1835 2637/7340/1835 +f 2635/7341/1836 2650/7342/1836 2649/7343/1836 2646/7344/1836 +f 2641/7345/1837 2647/7346/1837 2648/7347/1837 2632/7348/1837 +f 2632/7349/1838 2648/7350/1838 2649/7351/1838 2645/7352/1838 +f 2645/7353/1839 2649/7354/1839 2650/7355/1839 2631/7356/1839 +f 2631/7357/1840 2650/7358/1840 2651/7359/1840 2642/7360/1840 +f 2642/7361/1841 2651/7362/1841 2652/7363/1841 2633/7364/1841 +f 2633/7365/1842 2652/7366/1842 2653/7367/1842 2644/7368/1842 +f 2644/7369/1843 2653/7370/1843 2654/7371/1843 2634/7372/1843 +f 2634/7373/1844 2654/7374/1844 2647/7375/1844 2641/7376/1844 +f 2660/7377/1845 2661/7378/1845 2663/7379/1845 2656/7380/1845 +f 2658/7381/1846 2662/7382/1846 2661/7383/1846 2660/7384/1846 +f 2659/7385/1847 2661/7386/1847 2662/7387/1847 2657/7388/1847 +f 2655/7389/1848 2663/7390/1848 2661/7391/1848 2659/7392/1848 +f 2669/7393/1849 2670/7394/1849 2672/7395/1849 2665/7396/1849 +f 2667/7397/1850 2671/7398/1850 2670/7399/1850 2669/7400/1850 +f 2668/7401/1851 2670/7402/1851 2671/7403/1851 2666/7404/1851 +f 2664/7405/1852 2672/7406/1852 2670/7407/1852 2668/7408/1852 \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/particles/phosphorus/ember.fx.amt b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/ember.fx.amt new file mode 100644 index 000000000..7c3c3011c --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/ember.fx.amt @@ -0,0 +1,9 @@ +{ + "type": "ParticleVanilla", + "textures": ["immersiveintelligence:particle/paint"], + "max_lifetime": 4, + "draw_stage": "custom_additive", + "aabb": 0.3, + "color": "ffde7b", + "size": 0.25 +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/particles/phosphorus/glow.fx.amt b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/glow.fx.amt new file mode 100644 index 000000000..6af12599a --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/glow.fx.amt @@ -0,0 +1,20 @@ +{ + "type": "ParticleVanilla", + "textures": ["immersiveintelligence:particle/round"], + "color": "ab7810", + "max_lifetime": 6, + "draw_stage": "custom_additive", + "size": 1.65, + "programs": [ + "shockwave_transition" + ], + "scheduled": [ + { + "time": 1, + "generator": "same", + "distance": 0.5, + "amount": 1, + "type": "phosphorus/glow_big" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/particles/phosphorus/glow_big.fx.amt b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/glow_big.fx.amt new file mode 100644 index 000000000..d78978dfa --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/glow_big.fx.amt @@ -0,0 +1,11 @@ +{ + "type": "ParticleVanilla", + "textures": ["immersiveintelligence:particle/round"], + "color": "ab9f17", + "max_lifetime": 6, + "draw_stage": "custom_additive", + "size": 5.0, + "programs": [ + "shockwave_transition" + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/particles/phosphorus/orb.fx.amt b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/orb.fx.amt new file mode 100644 index 000000000..c46136e14 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/orb.fx.amt @@ -0,0 +1,25 @@ +{ + "type": "ParticleModel", + "models": ["smoke/smoke_trace.obj"], + "max_lifetime": 25, + "draw_stage": "custom_smoke_noise_shader", + "programs": [ + "smoke_transition" + ], + "scheduled": [ + { + "time": 0, + "generator": "same", + "distance": -0.5, + "amount": 1, + "type": "phosphorus/glow" + }, + { + "time": 20, + "generator": "rand_xz", + "distance": 2.0, + "amount": 4, + "type": "phosphorus/smoke_main" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/particles/phosphorus/smoke_graceful.fx.amt b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/smoke_graceful.fx.amt new file mode 100644 index 000000000..799278244 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/smoke_graceful.fx.amt @@ -0,0 +1,24 @@ +{ + "type": "ParticleVanilla", + "textures": [ + "immersiveintelligence:particle/rough/smoke1", + "immersiveintelligence:particle/rough/smoke2", + "immersiveintelligence:particle/rough/smoke3", + "immersiveintelligence:particle/rough/smoke2", + "immersiveintelligence:particle/rough/smoke3", + "immersiveintelligence:particle/rough/smoke4", + "immersiveintelligence:particle/rough/smoke2", + "immersiveintelligence:particle/rough/smoke1", + "immersiveintelligence:particle/rough/smoke0" + ], + "max_lifetime": 45, + "draw_stage": "custom_additive", + "aabb": 0.4, + "color": "9c6724", + "programs": [ + "smoke_transition", + "lifetime_retexture", + "gravity(0.3,0.03)" + ], + "size": 0.4 +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/particles/phosphorus/smoke_main.fx.amt b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/smoke_main.fx.amt new file mode 100644 index 000000000..9681e2c26 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/smoke_main.fx.amt @@ -0,0 +1,12 @@ +{ + "type": "ParticleVanilla", + "textures": ["immersiveintelligence:particle/gas"], + "max_lifetime": 120, + "draw_stage": "custom_smoke_noise_shader", + "aabb": 1.0, + "color": "ffffff", + "programs": [ + "smoke_transition" + ], + "size": 4.5 +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/particles/phosphorus/smoke_trace.fx.amt b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/smoke_trace.fx.amt new file mode 100644 index 000000000..c6618ce41 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/particles/phosphorus/smoke_trace.fx.amt @@ -0,0 +1,12 @@ +{ + "type": "ParticleVanilla", + "textures": ["immersiveintelligence:particle/smoke/smoke"], + "max_lifetime": 80, + "draw_stage": "custom_smoke_noise_shader", + "aabb": 0.3, + "color": "ffffff", + "programs": [ + "smoke_transition" + ], + "size": 0.8 +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/particles/smoke/gas_cloud.fx.amt b/src/main/resources/assets/immersiveintelligence/particles/smoke/gas_cloud.fx.amt new file mode 100644 index 000000000..c9cbdbf59 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/particles/smoke/gas_cloud.fx.amt @@ -0,0 +1,13 @@ +{ + "type": "ParticleVanilla", + "textures": ["immersiveintelligence:particle/gas"], + "max_lifetime": 55, + "draw_stage": "custom_smoke_noise_shader", + "aabb": 0.3, + "color": "474747", + "programs": [ + "smoke_transition", + "gravity(1.0,-0.002)" + ], + "size": 1.0 +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/particles/vehicle/exhaust_light.fx.amt b/src/main/resources/assets/immersiveintelligence/particles/vehicle/exhaust_light.fx.amt new file mode 100644 index 000000000..059e98eec --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/particles/vehicle/exhaust_light.fx.amt @@ -0,0 +1,13 @@ +{ + "type": "ParticleVanilla", + "textures": ["immersiveintelligence:particle/smoke/smoke"], + "max_lifetime": 35, + "draw_stage": "custom_smoke_noise_shader", + "aabb": 0.3, + "color": "2a2a2a", + "programs": [ + "smoke_transition", + "gravity(1.0,-0.005)" + ], + "size": 0.385 +} \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/shaders/alpha.frag b/src/main/resources/assets/immersiveintelligence/shaders/alpha.frag index e857fb988..5a5ce61a2 100644 --- a/src/main/resources/assets/immersiveintelligence/shaders/alpha.frag +++ b/src/main/resources/assets/immersiveintelligence/shaders/alpha.frag @@ -4,17 +4,12 @@ //Alpha fragment shader uniform float alpha;// Passed in by callback -//Texture (GL_TEXTURE0) uniform sampler2D texture; -//Lightmap Texture (GL_TEXTURE1) -//uniform sampler2D lightmap; - -/*vec3 vanillaLight() { - return clamp(texture2D(lightmap, gl_TexCoord[1].st).xyz, 0.0f, 1.0f); -}*/ +uniform sampler2D lightmap; void main() { - // gl_FragColor = texture2D(texture, gl_TexCoord[0].st) * gl_Color * vec4(vanillaLight(), alpha); - gl_FragColor = texture2D(texture, gl_TexCoord[0].st) * gl_Color * vec4(1, 1, 1, alpha); + vec4 tex = texture2D(texture, gl_TexCoord[0].st); + vec4 light = texture2D(lightmap, gl_TexCoord[1].st); + gl_FragColor = tex * gl_Color * light * vec4(1.0, 1.0, 1.0, alpha); } \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/shaders/blueprint.frag b/src/main/resources/assets/immersiveintelligence/shaders/blueprint.frag index 1e87d4163..0e2b31157 100644 --- a/src/main/resources/assets/immersiveintelligence/shaders/blueprint.frag +++ b/src/main/resources/assets/immersiveintelligence/shaders/blueprint.frag @@ -3,16 +3,20 @@ //Author: Flaxbeard (https://github.com/Flaxbeard/ImmersivePetroleum/blob/1.12.2/src/main/resources/assets/immersivepetroleum/shaders/alpha.frag) uniform float alpha;// Passed in by callback uniform float time; -uniform sampler2D bgl_RenderedTexture; + +uniform sampler2D texture; +uniform sampler2D lightmap; float noise(in vec2 coordinate, in float seed) { - vec2 coordActual = floor(textureSize(bgl_RenderedTexture, 0) * coordinate); + vec2 coordActual = floor(textureSize(texture, 0) * coordinate); return fract(sin(dot(coordActual*seed, vec2(12.9898, 78.233)))*43758.5453); } void main() { float n = (noise(vec2(gl_TexCoord[0]), time) - 0.5) * 0.25; - gl_FragColor = texture2D(bgl_RenderedTexture, vec2(gl_TexCoord[0])) * gl_Color * vec4(0.0706 + n, 0.4 + n, 0.7804 + n, alpha); + vec4 tex = texture2D(texture, gl_TexCoord[0].st); + + gl_FragColor = tex * gl_Color * vec4(0.0706 + n, 0.4 + n, 0.7804 + n, alpha); } \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/shaders/color.frag b/src/main/resources/assets/immersiveintelligence/shaders/color.frag index f2ff0d25a..bb20487a9 100644 --- a/src/main/resources/assets/immersiveintelligence/shaders/color.frag +++ b/src/main/resources/assets/immersiveintelligence/shaders/color.frag @@ -3,9 +3,14 @@ //Author: Pabilo8 (pabilo@iiteam.net) //RGB color shader uniform vec3 color;// Passed in by callback -uniform sampler2D bgl_RenderedTexture; + +uniform sampler2D texture; +uniform sampler2D lightmap; void main() { - gl_FragColor = texture2D(bgl_RenderedTexture, vec2(gl_TexCoord[0])) * gl_Color * vec4(color.xyz, 1.0); + vec4 tex = texture2D(texture, gl_TexCoord[0].st); + vec4 light = texture2D(lightmap, gl_TexCoord[1].st); + + gl_FragColor = tex * gl_Color * light * vec4(color.xyz, 1.0); } \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/shaders/grayscale.frag b/src/main/resources/assets/immersiveintelligence/shaders/grayscale.frag index c4e0d6b9a..89420d77e 100644 --- a/src/main/resources/assets/immersiveintelligence/shaders/grayscale.frag +++ b/src/main/resources/assets/immersiveintelligence/shaders/grayscale.frag @@ -3,11 +3,15 @@ //Author: Pabilo8 (pabilo@iiteam.net) //Grayscale shader with a darkness parameter uniform float darkness; -uniform sampler2D bgl_RenderedTexture; + +uniform sampler2D texture; +uniform sampler2D lightmap; void main() { - vec4 color = texture2D(bgl_RenderedTexture, vec2(gl_TexCoord[0])) * gl_Color; - vec4 grayscaleColor = vec4(vec3(dot(color.rgb, vec3(0.299, 0.587, 0.114))) * (1.0 - darkness), 1.0); - gl_FragColor = grayscaleColor; + vec4 tex = texture2D(texture, gl_TexCoord[0].st); + vec4 light = texture2D(lightmap, gl_TexCoord[1].st); + vec4 color = tex * gl_Color * light * gl_Color; + + gl_FragColor = vec4(vec3(dot(color.rgb, vec3(0.299, 0.587, 0.114))) * (1.0 - darkness), 1.0); } \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/shaders/noise.frag b/src/main/resources/assets/immersiveintelligence/shaders/noise.frag index b85a30f43..6f761a0d2 100644 --- a/src/main/resources/assets/immersiveintelligence/shaders/noise.frag +++ b/src/main/resources/assets/immersiveintelligence/shaders/noise.frag @@ -2,7 +2,9 @@ //Author: Pabilo8 (pabilo@iiteam.net) uniform float time; -uniform sampler2D bgl_RenderedTexture; + +uniform sampler2D texture; +uniform sampler2D lightmap; float noise(in vec2 coordinate, in float seed) { @@ -12,6 +14,9 @@ float noise(in vec2 coordinate, in float seed) void main() { + vec4 tex = texture2D(texture, gl_TexCoord[0].st); + vec4 light = texture2D(lightmap, gl_TexCoord[1].st); float n = (noise(vec2(gl_TexCoord[0]), time) - 0.5) * 0.25; - gl_FragColor = texture2D(bgl_RenderedTexture, vec2(gl_TexCoord[0])) * gl_Color * vec4(1-n, 1-n, 1-n, 1); + + gl_FragColor = tex * gl_Color * light * vec4(1-n, 1-n, 1-n, 1); } \ No newline at end of file diff --git a/src/main/resources/assets/immersiveintelligence/shaders/post/nightvision.json b/src/main/resources/assets/immersiveintelligence/shaders/post/nightvision.json new file mode 100644 index 000000000..2621e9770 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/shaders/post/nightvision.json @@ -0,0 +1,61 @@ +{ + "targets": [ + "swap", + "temp" + ], + "passes": [ + { + "name": "color_convolve", + "intarget": "minecraft:main", + "outtarget": "swap", + "uniforms": [ + { + "name": "RedMatrix", + "values": [0.27, 0.81, 0.44] + }, + { + "name": "GreenMatrix", + "values": [0.0, 0.0, 0.0] + }, + { + "name": "BlueMatrix", + "values": [0.0, 0.0, 0.0] + } + ] + }, + { + "name": "bits", + "intarget": "swap", + "outtarget": "temp", + "uniforms": [ + { + "name": "Resolution", + "values": [16.0] + }, + { + "name": "MosaicSize", + "values": [4.0] + } + ] + }, + { + "name": "blur", + "intarget": "temp", + "outtarget": "minecraft:main", + "uniforms": [ + { + "name": "BlurDir", + "values": [0.0, 1.0] + }, + { + "name": "OutSize", + "values": [1.0, 1.0] + }, + { + "name": "Radius", + "values": [5.0] + } + ] + } + ] +} diff --git a/src/main/resources/assets/immersiveintelligence/sounds/vehicle/drone/drone_propeller.ogg b/src/main/resources/assets/immersiveintelligence/sounds/vehicle/drone/drone_propeller.ogg new file mode 100644 index 000000000..e0b00fc5f Binary files /dev/null and b/src/main/resources/assets/immersiveintelligence/sounds/vehicle/drone/drone_propeller.ogg differ diff --git a/src/main/resources/assets/immersiveintelligence/sounds/motorbike/engine.ogg b/src/main/resources/assets/immersiveintelligence/sounds/vehicle/engine_light/engine.ogg similarity index 100% rename from src/main/resources/assets/immersiveintelligence/sounds/motorbike/engine.ogg rename to src/main/resources/assets/immersiveintelligence/sounds/vehicle/engine_light/engine.ogg diff --git a/src/main/resources/assets/immersiveintelligence/sounds/motorbike/start.ogg b/src/main/resources/assets/immersiveintelligence/sounds/vehicle/engine_light/start.ogg similarity index 100% rename from src/main/resources/assets/immersiveintelligence/sounds/motorbike/start.ogg rename to src/main/resources/assets/immersiveintelligence/sounds/vehicle/engine_light/start.ogg diff --git a/src/main/resources/assets/immersiveintelligence/sounds/motorbike/start_no_fuel.ogg b/src/main/resources/assets/immersiveintelligence/sounds/vehicle/engine_light/start_no_fuel.ogg similarity index 100% rename from src/main/resources/assets/immersiveintelligence/sounds/motorbike/start_no_fuel.ogg rename to src/main/resources/assets/immersiveintelligence/sounds/vehicle/engine_light/start_no_fuel.ogg diff --git a/src/main/resources/assets/immersiveintelligence/sounds/motorbike/horn.ogg b/src/main/resources/assets/immersiveintelligence/sounds/vehicle/horn.ogg similarity index 100% rename from src/main/resources/assets/immersiveintelligence/sounds/motorbike/horn.ogg rename to src/main/resources/assets/immersiveintelligence/sounds/vehicle/horn.ogg diff --git a/src/main/resources/assets/immersiveintelligence/sounds/weapons/weapon_placed/weapon_placed0.ogg b/src/main/resources/assets/immersiveintelligence/sounds/weapons/weapon_placed/weapon_placed0.ogg new file mode 100644 index 000000000..fb5234c17 Binary files /dev/null and b/src/main/resources/assets/immersiveintelligence/sounds/weapons/weapon_placed/weapon_placed0.ogg differ diff --git a/src/main/resources/assets/immersiveintelligence/sounds/weapons/weapon_placed/weapon_placed1.ogg b/src/main/resources/assets/immersiveintelligence/sounds/weapons/weapon_placed/weapon_placed1.ogg new file mode 100644 index 000000000..968b04a95 Binary files /dev/null and b/src/main/resources/assets/immersiveintelligence/sounds/weapons/weapon_placed/weapon_placed1.ogg differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/blocks/common/camo_net/common_camo_net.png b/src/main/resources/assets/immersiveintelligence/textures/blocks/common/camo_net/common_camo_net.png new file mode 100644 index 000000000..ead14ee4e Binary files /dev/null and b/src/main/resources/assets/immersiveintelligence/textures/blocks/common/camo_net/common_camo_net.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/blocks/metal_device/latex_collector.png b/src/main/resources/assets/immersiveintelligence/textures/blocks/metal_device/latex_collector.png index c8ba2c152..9b4265872 100644 Binary files a/src/main/resources/assets/immersiveintelligence/textures/blocks/metal_device/latex_collector.png and b/src/main/resources/assets/immersiveintelligence/textures/blocks/metal_device/latex_collector.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/anti_aircraft_gun.png b/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/anti_aircraft_gun.png index 21934ac91..732a10bd1 100644 Binary files a/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/anti_aircraft_gun.png and b/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/anti_aircraft_gun.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/anti_aircraft_gun_painted.png b/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/anti_aircraft_gun_painted.png index 46070a759..5b24a782e 100644 Binary files a/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/anti_aircraft_gun_painted.png and b/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/anti_aircraft_gun_painted.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/artillery_scope.png b/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/artillery_scope.png new file mode 100644 index 000000000..1604d658c Binary files /dev/null and b/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/artillery_scope.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/field_howitzer.png b/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/field_howitzer.png index 16fa4c1c6..d8d587caa 100644 Binary files a/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/field_howitzer.png and b/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/field_howitzer.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/field_howitzer_painted.png b/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/field_howitzer_painted.png index eac0cfe30..d66ef1b17 100644 Binary files a/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/field_howitzer_painted.png and b/src/main/resources/assets/immersiveintelligence/textures/entity/vehicle/field_gun/field_howitzer_painted.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/ammunition_assembler.png b/src/main/resources/assets/immersiveintelligence/textures/gui/ammunition_assembler.png index 49efd20e0..63bfec830 100644 Binary files a/src/main/resources/assets/immersiveintelligence/textures/gui/ammunition_assembler.png and b/src/main/resources/assets/immersiveintelligence/textures/gui/ammunition_assembler.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/ammunition_crate.png b/src/main/resources/assets/immersiveintelligence/textures/gui/ammunition_crate.png deleted file mode 100644 index d19918948..000000000 Binary files a/src/main/resources/assets/immersiveintelligence/textures/gui/ammunition_crate.png and /dev/null differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/casing_pouch.png b/src/main/resources/assets/immersiveintelligence/textures/gui/casing_pouch.png deleted file mode 100644 index 82bbddae7..000000000 Binary files a/src/main/resources/assets/immersiveintelligence/textures/gui/casing_pouch.png and /dev/null differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/data_merger.png b/src/main/resources/assets/immersiveintelligence/textures/gui/data_merger.png deleted file mode 100644 index 561aab163..000000000 Binary files a/src/main/resources/assets/immersiveintelligence/textures/gui/data_merger.png and /dev/null differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_contact.png b/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_contact.png deleted file mode 100644 index 88ebc22b4..000000000 Binary files a/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_contact.png and /dev/null differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_fuse_contact.png b/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_fuse_contact.png new file mode 100644 index 000000000..5826a02f4 Binary files /dev/null and b/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_fuse_contact.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_fuse_proximity.png b/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_fuse_proximity.png new file mode 100644 index 000000000..caa0142a9 Binary files /dev/null and b/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_fuse_proximity.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_fuse_timed.png b/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_fuse_timed.png new file mode 100644 index 000000000..28d1c8bec Binary files /dev/null and b/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_fuse_timed.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_proximity.png b/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_proximity.png deleted file mode 100644 index 4fc76d6bb..000000000 Binary files a/src/main/resources/assets/immersiveintelligence/textures/gui/deco/icons/icon_proximity.png and /dev/null differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/projectile_workshop.png b/src/main/resources/assets/immersiveintelligence/textures/gui/projectile_workshop.png index 20210e02b..ef995f4e1 100644 Binary files a/src/main/resources/assets/immersiveintelligence/textures/gui/projectile_workshop.png and b/src/main/resources/assets/immersiveintelligence/textures/gui/projectile_workshop.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/advanced_data.png b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/advanced_data.png new file mode 100644 index 000000000..953d3fa08 Binary files /dev/null and b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/advanced_data.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/circuit_racks.png b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/circuit_racks.png new file mode 100644 index 000000000..9ececfc4e Binary files /dev/null and b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/circuit_racks.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/capture_defiance.png b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/capture_defiance.png index ac62d1479..32a6fe90d 100644 Binary files a/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/capture_defiance.png and b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/capture_defiance.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/distress_signal.png b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/distress_signal.png index ac62d1479..ccc0d4f07 100644 Binary files a/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/distress_signal.png and b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/distress_signal.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/taser_locks.png b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/taser_locks.png index ac62d1479..d54fd4f3d 100644 Binary files a/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/taser_locks.png and b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/taser_locks.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/unit_post.png b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/unit_post.png index ac62d1479..a2e9864c9 100644 Binary files a/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/unit_post.png and b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/flagpole/unit_post.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/memory.png b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/memory.png new file mode 100644 index 000000000..804bbea1c Binary files /dev/null and b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/memory.png differ diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/printing_press/batching_mechanism.png b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/printing_press/batching.png similarity index 100% rename from src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/printing_press/batching_mechanism.png rename to src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/printing_press/batching.png diff --git a/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/printing_press/punchtape_processor.png b/src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/printing_press/punchtapes.png similarity index 100% rename from src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/printing_press/punchtape_processor.png rename to src/main/resources/assets/immersiveintelligence/textures/gui/upgrade/printing_press/punchtapes.png diff --git a/src/main/resources/assets/immersiveintelligence/textures/particle/tracer/air_cone.png.mcmeta b/src/main/resources/assets/immersiveintelligence/textures/particle/tracer/air_cone.png.mcmeta new file mode 100644 index 000000000..c5d457f93 --- /dev/null +++ b/src/main/resources/assets/immersiveintelligence/textures/particle/tracer/air_cone.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 1 + } +} \ No newline at end of file