diff --git a/changelog b/changelog index 316a59806..3e1f26717 100644 --- a/changelog +++ b/changelog @@ -1,28 +1,7 @@ ## Changed -* Removed advanced alloy - * All recipes that used to have AA in it now use something else - * AA tools and armor remain for now, although they are uncraftable - * Steel and titanium armor now have some DT and DR, making them roughly on-par with the old AA - * Buffed durability for steel and titanium tool materials - * Steel tools now deal more damage (still not as much as titanium) and has diamond harvest level - * AA custom machine blocks have been replaced with bronze ones which make more sense in progression, since AA was too close to steel anyway -* Renamed "worker's alloy" to "desh" to avoid confusion - * Seriously why did this have two names? -* Industrial grade and minecraft grade copper ingots now have the "ingot" suffix -* Changed the microchip assembler recipe duration so that it matches with the demand of one soldering station -* Blast furnace speed with hot air blast can now be increased to 500% (uses the same amount of hot air blast as before) +* Updated all oil well GUI textures + * There's now only two upgrade slots instead of three +* All legacy pixel gauges have been replaced with smooth ones (watz, ZIRNOX, CCGT) making them more accurate ## Fixed -* AUTOCAL - * Fixed `listen` command failing if the buffer is empty - * Fixed variable substitution failing when there is a trailing $ sign - * Fixed concat prefixing all output with "t " for some reason - * Eval(r) now uses a special mode for variable substitution that forces empty variables to be interpreted as "0" -* Fixed things not intended to be used in the blast furnace (scrap, lava) being usable fuels -* Fixed blast furnace swallowing container items left behind by fuels, instead fuels with containers will not be accepted at all -* Fixed the blast furnace NEI screen listing "0 HE" for every recipe even though it's not an electric machine -* Fixed flue gas not having an inventory texture -* Potentially fixed issue with Angelica where tile entity culling would cause cargo elevators to not render on certain angles -* Fixed the blast furnace not performing stack size checks correctly, outputting items when it shouldn't -* Fixed cargo elevators not rendering past a distance of 100 blocks -* Fixed cargo elevator syncing range being only 100 blocks, meaning that elevators taller than that don't work properly +* Fixed held block being placed when not sneaking when opening the cable diode's GUI \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index fc85e5e78..fb5115c4e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5719 +mod_build_number=5758 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/api/hbm/block/IPileNeutronReceiver.java b/src/main/java/api/hbm/block/IPileNeutronReceiver.java index caac67bcc..63448c086 100644 --- a/src/main/java/api/hbm/block/IPileNeutronReceiver.java +++ b/src/main/java/api/hbm/block/IPileNeutronReceiver.java @@ -1,5 +1,6 @@ package api.hbm.block; +@Deprecated public interface IPileNeutronReceiver { public void receiveNeutrons(int n); diff --git a/src/main/java/api/hbm/ntl/ISlotMonitorProvider.java b/src/main/java/api/hbm/ntl/ISlotMonitorProvider.java index 0dbde4ea5..da57797ba 100644 --- a/src/main/java/api/hbm/ntl/ISlotMonitorProvider.java +++ b/src/main/java/api/hbm/ntl/ISlotMonitorProvider.java @@ -15,12 +15,24 @@ public interface ISlotMonitorProvider { /** Returns an array of available slot monitors, which should ideally mirror the available slots of that container */ public SlotMonitor[] getMonitors(); - /** Returns the slot contents of that index, so that the monitors can detect changes */ + /** Returns the ORIGIANL ItemStack of that index, so that the monitors can detect changes */ public ItemStack getSlotAt(int index); /** Returns the amount of that slot at that index. Some storages may use int64 datatypes so we have to account for those too somehow, since ItemStacks cannot handle that. */ public long getAmountAt(int index); + /** Removes the given number of items from that slot, returns the amount left to remove if the stack was smaller than the supplied amount */ + public long useUpItem(int index, long amount); + + /** Adds the given number of items to that slot, returns the amount that couldn't be added due to stack limits */ + public long addItem(int index, long amount); + + /** Sets the slot contents, returns the number of items that couldn't be added */ + public long setupType(int index, ItemStack zeroStack, long amount); + + /** Whether this container allows types to be set via the access terminal */ + public boolean allowTypeSetting(); + /** Whether this storage unit is reachable by the access point */ public boolean isAvailableToCache(StackCache cache); diff --git a/src/main/java/api/hbm/ntl/SlotMonitor.java b/src/main/java/api/hbm/ntl/SlotMonitor.java index b0c295743..4b8bec70b 100644 --- a/src/main/java/api/hbm/ntl/SlotMonitor.java +++ b/src/main/java/api/hbm/ntl/SlotMonitor.java @@ -35,11 +35,13 @@ public class SlotMonitor { public long stacksize; public int meta; public NBTTagCompound nbt; - + protected boolean hasAvailabilityChanged = false; + protected boolean forceTypeUpdate = false; public SlotMonitor(int index, ISlotMonitorProvider parent) { this.hasAvailabilityChanged = true; + this.forceTypeUpdate = true; this.index = index; this.parent = parent; } @@ -101,9 +103,7 @@ public class SlotMonitor { else if(nbt != null && stack.hasTagCompound() && !nbt.equals(stack.stackTagCompound)) hasTypeChanged = true; } - if(hasTypeChanged) { - - System.out.println("Type changed!"); + if(hasTypeChanged || forceTypeUpdate) { // remove from all existing monitors Iterator iterator = viewedBy.iterator(); @@ -111,7 +111,6 @@ public class SlotMonitor { CacheSlot slot = iterator.next(); slot.removeMonitor(this); iterator.remove(); - System.out.println("Removing"); } // set updated traits @@ -130,17 +129,14 @@ public class SlotMonitor { // find new monitors if(pneumoNet != null) { - System.out.println("Adding to new network..."); - for(StackCache cache : pneumoNet.accessors) { - System.out.println("Adding to cache..."); if(!cache.hasExpired && parent.isAvailableToCache(cache)) { cache.addToCache(this); - System.out.println("Added!"); } } } + forceTypeUpdate = false; return; } diff --git a/src/main/java/api/hbm/ntl/StackCache.java b/src/main/java/api/hbm/ntl/StackCache.java index 6c8674513..7d941d73c 100644 --- a/src/main/java/api/hbm/ntl/StackCache.java +++ b/src/main/java/api/hbm/ntl/StackCache.java @@ -46,6 +46,61 @@ public class StackCache { cache.addMonitor(monitor); } + public CacheSlot getSlotFromStack(ItemStack stack) { + return getSlotFromStack(stack.getItem(), stack.getItemDamage(), stack.stackTagCompound); + } + + public CacheSlot getSlotFromStack(Item item, int meta, NBTTagCompound nbt) { + long monitorIdentity = getStackIdentity(item, meta, nbt); + return cacheSlots.get(monitorIdentity); + } + + /** Uses up items and returns how many of the requested items could be removed, with no desyncs that number should always be equal to the supplied amount */ + public long consumeItemsAndReturnQuantity(ItemStack stack, long amount) { + long stackIdentity = getStackIdentity(stack.getItem(), stack.getItemDamage(), stack.stackTagCompound); + CacheSlot cache = this.cacheSlots.get(stackIdentity); + if(cache == null) return 0; + long originalAmount = amount; + + for(SlotMonitor monitor : cache.monitors) { + ItemStack original = monitor.parent.getSlotAt(monitor.index); + long checkIdentity = getStackIdentity(original); + if(checkIdentity != stackIdentity) continue; + amount = monitor.parent.useUpItem(monitor.index, amount); + if(amount <= 0) break; + } + + return originalAmount - amount; + } + + /** Adds a stack to the system and returns the amount that did not fit */ + public long addItemsAndReturnQuantity(ItemStack stack, long amount) { + long stackIdentity = getStackIdentity(stack.getItem(), stack.getItemDamage(), stack.stackTagCompound); + CacheSlot cache = this.cacheSlots.get(stackIdentity); + + if(cache != null) for(SlotMonitor monitor : cache.monitors) { + ItemStack original = monitor.parent.getSlotAt(monitor.index); + long checkIdentity = getStackIdentity(original); + if(checkIdentity != stackIdentity) continue; + amount = monitor.parent.addItem(monitor.index, amount); + if(amount <= 0) break; + } + + if(amount > 0) { + CacheSlot nullCache = this.cacheSlots.get(getNullIdentity()); + if(nullCache != null) { // quite ironic, isn't it? + for(SlotMonitor monitor : nullCache.monitors) { + if(!monitor.parent.allowTypeSetting()) continue; + if(monitor.parent.getSlotAt(monitor.index) != null) continue; + amount = monitor.parent.setupType(monitor.index, stack, amount); + if(amount <= 0) break; + } + } + } + + return amount; + } + public void dissolveCache() { for(Entry cacheEntry : cacheSlots.entrySet()) { cacheEntry.getValue().destroy(); @@ -131,10 +186,25 @@ public class StackCache { } } + public static long getNullIdentity() { + return 0; //getStackIdentity(null, 0, null); + } + + public static long getStackIdentity(ItemStack stack) { + if(stack == null) return getNullIdentity(); + return getStackIdentity(stack.getItem(), stack.getItemDamage(), stack.stackTagCompound); + } + public static long getStackIdentity(Item item, int meta, NBTTagCompound nbt) { - long identity = Item.getIdFromItem(item) * 27644437; - identity += meta * 27644437; - if(nbt != null) identity += nbt.toString().hashCode(); + if(item == null) return getNullIdentity(); + return getStackIdentity(Item.getIdFromItem(item), meta, nbt); + } + + public static long getStackIdentity(int item, int meta, NBTTagCompound nbt) { + long identity = item * 27644437; + identity += meta; + identity *= 27644437; + if(nbt != null) identity += nbt.hashCode(); return identity; } } diff --git a/src/main/java/api/hbm/redstoneoverradio/IRORInteractive.java b/src/main/java/api/hbm/redstoneoverradio/IRORInteractive.java index 4e90ac4ad..37819b5df 100644 --- a/src/main/java/api/hbm/redstoneoverradio/IRORInteractive.java +++ b/src/main/java/api/hbm/redstoneoverradio/IRORInteractive.java @@ -1,5 +1,7 @@ package api.hbm.redstoneoverradio; +import java.util.Locale; + public interface IRORInteractive extends IRORInfo { public static String NAME_SEPARATOR = "!"; @@ -9,7 +11,7 @@ public interface IRORInteractive extends IRORInfo { public static String EX_NAME = "Exception: Multiple Name Separators"; public static String EX_FORMAT = "Exception: Parameter in Invalid Format"; - /** Runs a function on the ROR component, usually causing the component to change or do something. Returns are optional. */ + /** Runs a function on the ROR component, usually causing the component to change or do something. Returns are unused for now. */ public String runRORFunction(String name, String[] params); /** Extracts the command name from a full command string */ @@ -18,7 +20,7 @@ public interface IRORInteractive extends IRORInfo { String[] parts = input.split(NAME_SEPARATOR); if(parts.length <= 0 || parts.length > 2) throw new RORFunctionException(EX_NAME); if(parts[0].isEmpty()) throw new RORFunctionException(EX_NULL); - return parts[0]; + return parts[0].toLowerCase(Locale.US); } /** Extracts the param list from a full command string */ @@ -34,7 +36,9 @@ public interface IRORInteractive extends IRORInfo { public static int parseInt(String val, int min, int max) { int result = 0; - try { result = Integer.parseInt(val); } catch(Exception x) { throw new RORFunctionException(EX_FORMAT); }; + try { result = Integer.parseInt(val); } catch(Exception x) { + try { result = (int) Math.round(Double.parseDouble(val)); } catch(Exception y) { throw new RORFunctionException(EX_FORMAT); } + } if(result < min || result > max) throw new RORFunctionException(EX_FORMAT); return result; } diff --git a/src/main/java/com/hbm/blocks/ITooltipProvider.java b/src/main/java/com/hbm/blocks/ITooltipProvider.java index 829de9f15..9b4d4dfc6 100644 --- a/src/main/java/com/hbm/blocks/ITooltipProvider.java +++ b/src/main/java/com/hbm/blocks/ITooltipProvider.java @@ -16,9 +16,13 @@ public interface ITooltipProvider { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext); public default void addStandardInfo(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, ((Block) this).getUnlocalizedName() + ".desc", player, list, ext); + } + + public default void addStandardInfo(ItemStack stack, String name, EntityPlayer player, List list, boolean ext) { if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { - for(String s : I18nUtil.resolveKeyArray(((Block)this).getUnlocalizedName() + ".desc")) list.add(EnumChatFormatting.YELLOW + s); + for(String s : I18nUtil.resolveKeyArray(name)) list.add(EnumChatFormatting.YELLOW + s); } else { list.add(EnumChatFormatting.DARK_GRAY + "" + EnumChatFormatting.ITALIC +"Hold <" + EnumChatFormatting.YELLOW + "" + EnumChatFormatting.ITALIC + "LSHIFT" + diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index f038a84ed..507d6d814 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -12,11 +12,7 @@ import com.hbm.blocks.machine.fusion.*; import com.hbm.blocks.machine.pile.*; import com.hbm.blocks.machine.rbmk.*; import com.hbm.blocks.network.*; -import com.hbm.blocks.network.pneumatic.PneumoStorageAccess; -import com.hbm.blocks.network.pneumatic.PneumoStorageClutter; -import com.hbm.blocks.network.pneumatic.PneumoStorageMono; -import com.hbm.blocks.network.pneumatic.PneumoTube; -import com.hbm.blocks.network.pneumatic.PneumoTubePaintableBlock; +import com.hbm.blocks.network.pneumatic.*; import com.hbm.blocks.rail.*; import com.hbm.blocks.test.*; import com.hbm.blocks.turret.*; @@ -229,14 +225,14 @@ public class ModBlocks { public static Block block_foam; public static Block block_coke; public static Block block_graphite; - public static Block block_graphite_drilled; - public static Block block_graphite_fuel; - public static Block block_graphite_plutonium; - public static Block block_graphite_rod; - public static Block block_graphite_source; - public static Block block_graphite_lithium; - public static Block block_graphite_tritium; - public static Block block_graphite_detector; + @Deprecated public static Block block_graphite_drilled; + @Deprecated public static Block block_graphite_fuel; + @Deprecated public static Block block_graphite_plutonium; + @Deprecated public static Block block_graphite_rod; + @Deprecated public static Block block_graphite_source; + @Deprecated public static Block block_graphite_lithium; + @Deprecated public static Block block_graphite_tritium; + @Deprecated public static Block block_graphite_detector; public static Block block_boron; public static Block block_lanthanium; public static Block block_ra226; @@ -578,7 +574,7 @@ public class ModBlocks { public static Block seal_hatch; public static Block cargo_elevator; - + public static Block vault_door; public static Block blast_door; public static Block sliding_blast_door; @@ -595,6 +591,7 @@ public class ModBlocks { public static Block round_airlock_door; public static Block sliding_seal_door; public static Block water_door; + public static Block cargo_door; public static Block door_metal; public static Block door_office; @@ -807,6 +804,8 @@ public class ModBlocks { public static Block pneumatic_storage_access; public static Block pneumatic_storage_clutter; public static Block pneumatic_storage_mono; + public static Block pneumatic_storage_importer; + public static Block pneumatic_storage_exporter; public static Block fan; public static Block piston_inserter; @@ -852,6 +851,10 @@ public class ModBlocks { public static Block custom_machine; public static Block cm_anchor; + public static Block pile_brick; + public static Block pile_block; + public static Block pile_device; + public static Block pwr_fuel; public static Block pwr_control; public static Block pwr_channel; @@ -914,9 +917,7 @@ public class ModBlocks { public static Block teleanchor; public static Block field_disturber; - public static Block machine_rtg_grey; - @Deprecated public static Block machine_minirtg; - @Deprecated public static Block machine_powerrtg; + public static Block machine_rtg; public static Block machine_radiolysis; public static Block machine_hephaestus; @@ -1649,8 +1650,8 @@ public class ModBlocks { waste_earth = new WasteEarth(Material.ground, true).setBlockName("waste_earth").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.blockTab).setHardness(0.6F).setBlockTextureName(RefStrings.MODID + ":waste_earth"); waste_mycelium = new WasteEarth(Material.ground, true).setBlockName("waste_mycelium").setStepSound(Block.soundTypeGrass).setLightLevel(1F).setCreativeTab(MainRegistry.blockTab).setHardness(0.6F).setBlockTextureName(RefStrings.MODID + ":waste_mycelium_side"); - waste_trinitite = new BlockOre(Material.sand).noFortune().setBlockName("waste_trinitite").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":waste_trinitite"); - waste_trinitite_red = new BlockOre(Material.sand).noFortune().setBlockName("waste_trinitite_red").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":waste_trinitite_red"); + waste_trinitite = new BlockTrinitite(Material.sand).noFortune().setBlockName("waste_trinitite").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":waste_trinitite"); + waste_trinitite_red = new BlockTrinitite(Material.sand).noFortune().setBlockName("waste_trinitite_red").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":waste_trinitite_red"); waste_log = new WasteLog(Material.wood).setBlockName("waste_log").setStepSound(Block.soundTypeWood).setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(2.5F); waste_leaves = new WasteLeaves(Material.leaves).setBlockName("waste_leaves").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.blockTab).setHardness(0.1F).setBlockTextureName(RefStrings.MODID + ":waste_leaves"); waste_planks = new BlockOre(Material.wood).setBlockName("waste_planks").setStepSound(Block.soundTypeWood).setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.5F).setBlockTextureName(RefStrings.MODID + ":waste_planks"); @@ -1840,9 +1841,7 @@ public class ModBlocks { teleanchor = new MachineTeleanchor().setBlockName("teleanchor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); field_disturber = new MachineFieldDisturber().setBlockName("field_disturber").setHardness(5.0F).setResistance(200.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":field_disturber"); - machine_rtg_grey = new MachineRTG(Material.iron).setBlockName("machine_rtg_grey").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg"); - machine_minirtg = new MachineMiniRTG(Material.iron).setBlockName("machine_minirtg").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rtg_cell"); - machine_powerrtg = new MachineMiniRTG(Material.iron).setBlockName("machine_powerrtg").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rtg_polonium"); + machine_rtg = new MachineRTG(Material.iron).setBlockName("machine_rtg_grey").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg"); machine_radiolysis = new MachineRadiolysis(Material.iron).setBlockName("machine_radiolysis").setHardness(10.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel_machine"); machine_hephaestus = new MachineHephaestus(Material.iron).setBlockName("machine_hephaestus").setHardness(10.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel_machine"); @@ -1910,11 +1909,13 @@ public class ModBlocks { drone_crate_provider = new DroneDock().setBlockName("drone_crate_provider").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":drone_crate_provider"); drone_crate_requester = new DroneDock().setBlockName("drone_crate_requester").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":drone_crate_requester"); - pneumatic_tube = new PneumoTube().setBlockName("pneumatic_tube").setStepSound(ModSoundTypes.pipe).setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_tube"); + pneumatic_tube = new PneumoTube().setBlockName("pneumatic_tube").setStepSound(ModSoundTypes.pipe).setHardness(2F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_tube"); pneumatic_tube_paintable = new PneumoTubePaintableBlock().setBlockName("pneumatic_tube_paintable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); - pneumatic_storage_access = new PneumoStorageAccess().setBlockName("pneumatic_storage_access").setStepSound(ModSoundTypes.pipe).setHardness(0.1F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_access"); - pneumatic_storage_clutter = new PneumoStorageClutter().setBlockName("pneumatic_storage_clutter").setStepSound(ModSoundTypes.pipe).setHardness(0.1F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_clutter"); - pneumatic_storage_mono = new PneumoStorageMono().setBlockName("pneumatic_storage_mono").setStepSound(ModSoundTypes.pipe).setHardness(0.1F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_mono"); + pneumatic_storage_access = new PneumoStorageAccess().setBlockName("pneumatic_storage_access").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_access"); + pneumatic_storage_clutter = new PneumoStorageClutter().setBlockName("pneumatic_storage_clutter").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_clutter"); + pneumatic_storage_mono = new PneumoStorageMono().setBlockName("pneumatic_storage_mono").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_mono"); + pneumatic_storage_importer = new PneumoStorageImporter().setBlockName("pneumatic_storage_importer").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_importer"); + pneumatic_storage_exporter = new PneumoStorageExporter().setBlockName("pneumatic_storage_exporter").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_storage_exporter"); chain = new BlockChain(Material.iron).setBlockName("dungeon_chain").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":chain"); @@ -1961,18 +1962,22 @@ public class ModBlocks { cm_heat = new BlockCMHeat(Material.iron, RefStrings.MODID +":cm_heat_top").setBlockName("cm_heat").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_heat_side"); custom_machine = new BlockCustomMachine().setBlockName("custom_machine").setCreativeTab(MainRegistry.machineTab).setLightLevel(1F).setHardness(5.0F).setResistance(10.0F); cm_anchor = new BlockCMAnchor().setBlockName("custom_machine_anchor").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F); + + pile_brick = new BlockPileBrick().setBlockName("pile_brick").setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pile_brick"); + pile_device = new BlockPileDevice().setBlockName("pile_device").setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + pile_block = new BlockPile().setBlockName("pile_block").setStepSound(Block.soundTypeMetal).setHardness(15.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pile_block"); pwr_fuel = new BlockPillarPWR(Material.iron, RefStrings.MODID + ":pwr_fuel_top").setBlockName("pwr_fuel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_fuel_side"); pwr_control = new BlockPillarPWR(Material.iron, RefStrings.MODID + ":pwr_control_top").setBlockName("pwr_control").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_control_side"); pwr_channel = new BlockPillarPWR(Material.iron, RefStrings.MODID + ":pwr_channel_top").setBlockName("pwr_channel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_channel_side"); - pwr_heatex = new BlockGenericPWR(Material.iron).setBlockName("pwr_heatex").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_heatex"); - pwr_heatsink = new BlockGenericPWR(Material.iron).setBlockName("pwr_heatsink").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_heatsink"); - pwr_neutron_source = new BlockGenericPWR(Material.iron).setBlockName("pwr_neutron_source").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_neutron_source"); - pwr_reflector = new BlockGenericPWR(Material.iron).setBlockName("pwr_reflector").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_reflector"); - pwr_casing = new BlockGenericPWR(Material.iron).setBlockName("pwr_casing").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_casing"); - pwr_port = new BlockGenericPWR(Material.iron).setBlockName("pwr_port").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_port"); + pwr_heatex = new BlockGenericTooltip(Material.iron).setBlockName("pwr_heatex").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_heatex"); + pwr_heatsink = new BlockGenericTooltip(Material.iron).setBlockName("pwr_heatsink").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_heatsink"); + pwr_neutron_source = new BlockGenericTooltip(Material.iron).setBlockName("pwr_neutron_source").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_neutron_source"); + pwr_reflector = new BlockGenericTooltip(Material.iron).setBlockName("pwr_reflector").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_reflector"); + pwr_casing = new BlockGenericTooltip(Material.iron).setBlockName("pwr_casing").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_casing"); + pwr_port = new BlockGenericTooltip(Material.iron).setBlockName("pwr_port").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_port"); pwr_controller = new MachinePWRController(Material.iron).setBlockName("pwr_controller").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_casing_blank"); - pwr_block = new BlockPWR(Material.iron).setBlockName("pwr_block").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":pwr_block"); + pwr_block = new BlockPWR(Material.iron).setBlockName("pwr_block").setHardness(15.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":pwr_block"); fusion_heater = new BlockPillar(Material.iron, RefStrings.MODID + ":fusion_heater_top").setBlockName("fusion_heater").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":fusion_heater_side"); fusion_hatch = new FusionHatch(Material.iron).setBlockName("fusion_hatch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":fusion_hatch"); @@ -2019,7 +2024,7 @@ public class ModBlocks { seal_hatch = new BlockHatch(Material.iron).setBlockName("seal_hatch").setHardness(Float.POSITIVE_INFINITY).setResistance(Float.POSITIVE_INFINITY).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":seal_hatch_3"); cargo_elevator = new BlockCargoElevator().setBlockName("cargo_elevator").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); - + vault_door = new BlockDoorGeneric(Material.iron, DoorDecl.VAULT_DOOR).setBlockName("vault_door").setHardness(10.0F).setResistance(1_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":concrete"); blast_door = new BlastDoor(Material.iron).setBlockName("blast_door").setHardness(10.0F).setResistance(1_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":blast_door"); @@ -2035,6 +2040,7 @@ public class ModBlocks { round_airlock_door = new BlockDoorGeneric(Material.iron, DoorDecl.ROUND_AIRLOCK_DOOR).setBlockName("round_airlock_door").setHardness(10.0F).setResistance(1_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); sliding_seal_door = new BlockDoorGeneric(Material.iron, DoorDecl.SLIDING_SEAL_DOOR).setBlockName("sliding_seal_door").setHardness(10.0F).setResistance(1_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); water_door = new BlockDoorGeneric(Material.iron, DoorDecl.WATER_DOOR).setBlockName("water_door").setHardness(5.0F).setResistance(50.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + cargo_door = new BlockDoorGeneric(Material.iron, DoorDecl.CARGO_DOOR).setBlockName("cargo_door").setHardness(5.0F).setResistance(50.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); door_metal = new BlockModDoor(Material.iron).setBlockName("door_metal").setHardness(5.0F).setResistance(5.0F).setBlockTextureName(RefStrings.MODID + ":door_metal"); door_office = new BlockModDoor(Material.iron).setBlockName("door_office").setHardness(10.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":door_office"); @@ -2348,7 +2354,6 @@ public class ModBlocks { logic_block = new LogicBlock().setBlockName("logic_block").setBlockTextureName(RefStrings.MODID + ":logic_block"); logic_block_invis = new LogicBlockInvis().setBlockName("logic_block_invis").setBlockTextureName(RefStrings.MODID + ":logic_block"); - } private static void registerBlock() { @@ -2943,7 +2948,7 @@ public class ModBlocks { //Hooh GameRegistry.registerBlock(cargo_elevator, cargo_elevator.getUnlocalizedName()); - + //Vault Door GameRegistry.registerBlock(vault_door, vault_door.getUnlocalizedName()); GameRegistry.registerBlock(blast_door, blast_door.getUnlocalizedName()); @@ -2965,6 +2970,7 @@ public class ModBlocks { GameRegistry.registerBlock(round_airlock_door, round_airlock_door.getUnlocalizedName()); GameRegistry.registerBlock(sliding_seal_door, sliding_seal_door.getUnlocalizedName()); GameRegistry.registerBlock(water_door, water_door.getUnlocalizedName()); + GameRegistry.registerBlock(cargo_door, cargo_door.getUnlocalizedName()); //Crates register(crate_iron, ItemBlockStorageCrate.class); @@ -3056,9 +3062,7 @@ public class ModBlocks { GameRegistry.registerBlock(machine_radgen, machine_radgen.getUnlocalizedName()); GameRegistry.registerBlock(machine_cyclotron, machine_cyclotron.getUnlocalizedName()); GameRegistry.registerBlock(machine_exposure_chamber, machine_exposure_chamber.getUnlocalizedName()); - GameRegistry.registerBlock(machine_rtg_grey, machine_rtg_grey.getUnlocalizedName()); - GameRegistry.registerBlock(machine_minirtg, machine_minirtg.getUnlocalizedName()); - GameRegistry.registerBlock(machine_powerrtg, machine_powerrtg.getUnlocalizedName()); + GameRegistry.registerBlock(machine_rtg, machine_rtg.getUnlocalizedName()); GameRegistry.registerBlock(machine_radiolysis, machine_radiolysis.getUnlocalizedName()); GameRegistry.registerBlock(machine_hephaestus, machine_hephaestus.getUnlocalizedName()); @@ -3130,12 +3134,12 @@ public class ModBlocks { register(red_pylon_medium_wood_transformer); register(red_pylon_medium_steel); register(red_pylon_medium_steel_transformer); - GameRegistry.registerBlock(red_pylon_large, ItemBlockBase.class, red_pylon_large.getUnlocalizedName()); - GameRegistry.registerBlock(substation, ItemBlockBase.class, substation.getUnlocalizedName()); - GameRegistry.registerBlock(cable_switch, cable_switch.getUnlocalizedName()); - GameRegistry.registerBlock(cable_detector, cable_detector.getUnlocalizedName()); - GameRegistry.registerBlock(cable_diode, ItemBlockBase.class, cable_diode.getUnlocalizedName()); - GameRegistry.registerBlock(machine_detector, machine_detector.getUnlocalizedName()); + register(red_pylon_large); + register(substation); + register(cable_switch); + register(cable_detector); + register(cable_diode); + register(machine_detector); register(fluid_duct_neo); register(fluid_duct_box); @@ -3183,6 +3187,8 @@ public class ModBlocks { register(pneumatic_storage_access); register(pneumatic_storage_clutter); register(pneumatic_storage_mono); + register(pneumatic_storage_importer); + register(pneumatic_storage_exporter); register(fan); register(piston_inserter); @@ -3319,6 +3325,11 @@ public class ModBlocks { register(cm_flux); register(cm_heat); register(cm_anchor); + + //Chicago Pile + register(pile_brick); + register(pile_device); + register(pile_block); //PWR register(pwr_fuel); diff --git a/src/main/java/com/hbm/blocks/generic/BlockCrate.java b/src/main/java/com/hbm/blocks/generic/BlockCrate.java index b016e53c7..487165f10 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockCrate.java @@ -104,7 +104,7 @@ public class BlockCrate extends BlockFalling { BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_reactor_breeding), 6); BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_wood_burner), 10); BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_diesel), 8); - BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_rtg_grey), 4); + BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_rtg), 4); BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.red_pylon), 9); BlockCrate.addToListWithWeight(metalList, new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD.ordinal()), 10); BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_electric_furnace_off), 8); diff --git a/src/main/java/com/hbm/blocks/generic/BlockDecoCT.java b/src/main/java/com/hbm/blocks/generic/BlockDecoCT.java index f46a7b4fd..214e05e77 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockDecoCT.java +++ b/src/main/java/com/hbm/blocks/generic/BlockDecoCT.java @@ -34,7 +34,7 @@ public class BlockDecoCT extends BlockOre implements IBlockCT { } @Override - public IIcon[] getFragments(IBlockAccess world, int x, int y, int z) { + public IIcon[] getFragments(IBlockAccess world, int x, int y, int z, int side) { return rec.fragCache; } diff --git a/src/main/java/com/hbm/blocks/generic/BlockNTMGlassCT.java b/src/main/java/com/hbm/blocks/generic/BlockNTMGlassCT.java index be9993790..a5bd0f3a4 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockNTMGlassCT.java +++ b/src/main/java/com/hbm/blocks/generic/BlockNTMGlassCT.java @@ -36,7 +36,7 @@ public class BlockNTMGlassCT extends BlockNTMGlass implements IBlockCT { } @Override - public IIcon[] getFragments(IBlockAccess world, int x, int y, int z) { + public IIcon[] getFragments(IBlockAccess world, int x, int y, int z, int side) { return rec.fragCache; } } diff --git a/src/main/java/com/hbm/blocks/generic/BlockOre.java b/src/main/java/com/hbm/blocks/generic/BlockOre.java index 9e613c75b..c621053d3 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockOre.java +++ b/src/main/java/com/hbm/blocks/generic/BlockOre.java @@ -159,7 +159,7 @@ public class BlockOre extends Block { living.addPotionEffect(new PotionEffect(HbmPotion.radiation.id, 30 * 20, 2)); } if(this == ModBlocks.waste_trinitite || this == ModBlocks.waste_trinitite_red) { - living.addPotionEffect(new PotionEffect(HbmPotion.radiation.id, 30 * 20, 0)); + living.addPotionEffect(new PotionEffect(HbmPotion.radiation.id, 5 * 20, 2)); } if(this == ModBlocks.brick_jungle_ooze) { living.addPotionEffect(new PotionEffect(HbmPotion.radiation.id, 15 * 20, 9)); @@ -178,8 +178,12 @@ public class BlockOre extends Block { public void randomDisplayTick(World world, int x, int y, int z, Random rand) { super.randomDisplayTick(world, x, y, z, rand); - if(this == ModBlocks.waste_trinitite || this == ModBlocks.waste_trinitite_red || this == ModBlocks.block_trinitite || this == ModBlocks.block_waste) { - world.spawnParticle("townaura", x + rand.nextFloat(), y + 1.1F, z + rand.nextFloat(), 0.0D, 0.0D, 0.0D); + if(this == ModBlocks.block_trinitite || this == ModBlocks.block_waste) { + world.spawnParticle("townaura", x + rand.nextFloat(), y + 1.0625, z + rand.nextFloat(), 0, 0, 0); + } + + if((this == ModBlocks.waste_trinitite || this == ModBlocks.waste_trinitite_red) && rand.nextInt(5) == 0) { + world.spawnParticle("townaura", x + rand.nextFloat(), y + 1.0625, z + rand.nextFloat(), 0, 0, 0); } } diff --git a/src/main/java/com/hbm/blocks/generic/BlockPedestal.java b/src/main/java/com/hbm/blocks/generic/BlockPedestal.java index 82a2b46bb..0333505dc 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockPedestal.java +++ b/src/main/java/com/hbm/blocks/generic/BlockPedestal.java @@ -1,14 +1,19 @@ package com.hbm.blocks.generic; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import com.hbm.extprop.HbmPlayerProps; import com.hbm.inventory.recipes.PedestalRecipes; import com.hbm.inventory.recipes.PedestalRecipes.PedestalRecipe; +import com.hbm.items.ModItems; +import com.hbm.items.armor.ItemModDefuser; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.particle.helper.ExplosionSmallCreator; import com.hbm.util.Compat; +import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; @@ -18,6 +23,7 @@ import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -194,8 +200,24 @@ public class BlockPedestal extends BlockContainer { public ItemStack item; - @Override public boolean canUpdate() { return false; } - + @Override + public void updateEntity() { + + if(!worldObj.isRemote && worldObj.getTotalWorldTime() % 20 == 0) { + + if(this.item != null) { + if(item.getItem() == ModItems.protection_charm) pushPedestalEntry(worldObj, PedestalEntryType.CHARM_OF_PROTECTION, xCoord, yCoord, zCoord); + if(item.getItem() == ModItems.meteor_charm) pushPedestalEntry(worldObj, PedestalEntryType.METEORITE_CHARM, xCoord, yCoord, zCoord); + if(worldObj.getTotalWorldTime() % 60 == 0 && item.getItem() == ModItems.defuser_gold) castrateCreepers(); + } + } + } + + public void castrateCreepers() { + List creepers = worldObj.getEntitiesWithinAABB(EntityCreeper.class, AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 1, zCoord + 1).expand(25, 25, 25)); + for(EntityCreeper creeper : creepers) ItemModDefuser.castrateCreeper(creeper, null, false); + } + @Override public Packet getDescriptionPacket() { NBTTagCompound nbt = new NBTTagCompound(); @@ -224,4 +246,48 @@ public class BlockPedestal extends BlockContainer { } } } + + public static HashMap> pedestalEntries = new HashMap(); + + public static void pushPedestalEntry(World world, PedestalEntryType type, int x, int y, int z) { + PedestalEntry entry = new PedestalEntry(type, x, y, z, world.getTotalWorldTime()); + + int dim = world.provider.dimensionId; + List entries = pedestalEntries.get(dim); + + if(entries == null) { + entries = new ArrayList(); + pedestalEntries.put(dim, entries); + } + entries.add(entry); + } + + public static final int timeout = 60; //3 seconds + + public static void checkPedestalEntries(int dim, long currentTime) { + List entries = getEntriesForDimension(dim); + if(entries == null) return; + entries.removeIf(x -> { return x.timestamp < currentTime - timeout; }); + } + + public static List getEntriesForDimension(int dim) { + return pedestalEntries.get(dim); + } + + public static class PedestalEntry { + public PedestalEntryType type; + public BlockPos pos; + public long timestamp; + + public PedestalEntry(PedestalEntryType type, int x, int y, int z, long timestamp) { + this.type = type; + this.pos = new BlockPos(x, y, z); + this.timestamp = timestamp; + } + } + + public static enum PedestalEntryType { + CHARM_OF_PROTECTION, + METEORITE_CHARM + } } diff --git a/src/main/java/com/hbm/blocks/generic/BlockSellafieldSlaked.java b/src/main/java/com/hbm/blocks/generic/BlockSellafieldSlaked.java index be264d979..c382bb0d8 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockSellafieldSlaked.java +++ b/src/main/java/com/hbm/blocks/generic/BlockSellafieldSlaked.java @@ -41,7 +41,7 @@ public class BlockSellafieldSlaked extends Block { @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister reg) { icons = new IIcon[4]; - icons[0] = reg.registerIcon(RefStrings.MODID + ":sellafield_slaked"); + this.blockIcon = icons[0] = reg.registerIcon(RefStrings.MODID + ":sellafield_slaked"); icons[1] = reg.registerIcon(RefStrings.MODID + ":sellafield_slaked_1"); icons[2] = reg.registerIcon(RefStrings.MODID + ":sellafield_slaked_2"); icons[3] = reg.registerIcon(RefStrings.MODID + ":sellafield_slaked_3"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockTrinitite.java b/src/main/java/com/hbm/blocks/generic/BlockTrinitite.java new file mode 100644 index 000000000..437218f38 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockTrinitite.java @@ -0,0 +1,41 @@ +package com.hbm.blocks.generic; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +public class BlockTrinitite extends BlockOre { + + public IIcon[] icons; + + public BlockTrinitite(Material mat) { + super(mat); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return icons[0]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + icons = new IIcon[4]; + + for(int i = 0; i < 4; i++) icons[i] = reg.registerIcon(this.getTextureName() + "." + i); + this.blockIcon = icons[0]; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + long l = (long) (x * 3129871) ^ (long)y * 116129781L ^ (long)z; + l = l * l * 42317861L + l * 11L; + int i = (int)(l >> 16 & 3L); + return icons[(int)(Math.abs(i) % icons.length)]; + } +} diff --git a/src/main/java/com/hbm/blocks/generic/BlockWand.java b/src/main/java/com/hbm/blocks/generic/BlockWand.java index c25c390eb..8fbc8ae18 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWand.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWand.java @@ -19,33 +19,20 @@ public class BlockWand extends Block { setBlockBounds(1F/16F, 1F/16F, 1F/16F, 15F/16F, 15F/16F, 15F/16F); } - @Override - public boolean isOpaqueCube() { - return false; - } + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); - @Override - public boolean renderAsNormalBlock() { - return false; - } + @Override public int getRenderType() { return renderID; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { return null; } - public static int renderID = RenderingRegistry.getNextAvailableRenderId(); - - @Override - public int getRenderType() { - return renderID; - } - @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { Block block = world.getBlock(x, y, z); - return block != this; } - } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandTandem.java b/src/main/java/com/hbm/blocks/generic/BlockWandTandem.java index 2a9342454..b512adefc 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandTandem.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandTandem.java @@ -9,6 +9,7 @@ import com.hbm.blocks.IBlockSideRotation; import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IControlReceiver; +import com.hbm.interfaces.NotableComments; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; @@ -73,6 +74,7 @@ import net.minecraftforge.common.util.ForgeDirection; * * @author hbm, Mellow */ +@NotableComments public class BlockWandTandem extends BlockContainer implements IBlockSideRotation, INBTBlockTransformable, IGUIProvider, ILookOverlay { private IIcon iconTop; diff --git a/src/main/java/com/hbm/blocks/machine/BlockGenericPWR.java b/src/main/java/com/hbm/blocks/machine/BlockGenericTooltip.java similarity index 77% rename from src/main/java/com/hbm/blocks/machine/BlockGenericPWR.java rename to src/main/java/com/hbm/blocks/machine/BlockGenericTooltip.java index d94d06697..e66836750 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockGenericPWR.java +++ b/src/main/java/com/hbm/blocks/machine/BlockGenericTooltip.java @@ -9,9 +9,9 @@ import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -public class BlockGenericPWR extends BlockGeneric implements ITooltipProvider { +public class BlockGenericTooltip extends BlockGeneric implements ITooltipProvider { - public BlockGenericPWR(Material material) { + public BlockGenericTooltip(Material material) { super(material); } diff --git a/src/main/java/com/hbm/blocks/machine/BlockHadronCoil.java b/src/main/java/com/hbm/blocks/machine/BlockHadronCoil.java index 3e099e600..7a0d858b9 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockHadronCoil.java +++ b/src/main/java/com/hbm/blocks/machine/BlockHadronCoil.java @@ -43,7 +43,7 @@ public class BlockHadronCoil extends Block implements IBlockCT, ITooltipProvider } @Override - public IIcon[] getFragments(IBlockAccess world, int x, int y, int z) { + public IIcon[] getFragments(IBlockAccess world, int x, int y, int z, int side) { return rec.fragCache; } diff --git a/src/main/java/com/hbm/blocks/machine/BlockICF.java b/src/main/java/com/hbm/blocks/machine/BlockICF.java index 442433aba..95d708b63 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockICF.java +++ b/src/main/java/com/hbm/blocks/machine/BlockICF.java @@ -55,7 +55,7 @@ public class BlockICF extends BlockContainer implements IBlockCT { } @Override - public IIcon[] getFragments(IBlockAccess world, int x, int y, int z) { + public IIcon[] getFragments(IBlockAccess world, int x, int y, int z, int side) { int meta = world.getBlockMetadata(x, y, z); if(meta == 1) return recPort.fragCache; return rec.fragCache; diff --git a/src/main/java/com/hbm/blocks/machine/BlockPWR.java b/src/main/java/com/hbm/blocks/machine/BlockPWR.java index aff9d5cbf..07c368d27 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockPWR.java +++ b/src/main/java/com/hbm/blocks/machine/BlockPWR.java @@ -62,7 +62,7 @@ public class BlockPWR extends BlockContainer implements IBlockCT { } @Override - public IIcon[] getFragments(IBlockAccess world, int x, int y, int z) { + public IIcon[] getFragments(IBlockAccess world, int x, int y, int z, int side) { int meta = world.getBlockMetadata(x, y, z); if(meta == 1) return recPort.fragCache; return rec.fragCache; diff --git a/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java b/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java index fe57bc788..9c499f04d 100644 --- a/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java +++ b/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java @@ -202,7 +202,7 @@ public abstract class FoundryCastingBase extends BlockContainer implements ICruc } if(cast.type != null && cast.amount > 0) { - text.add(EnumChatFormatting.YELLOW + cast.type.names[0] + ": " + cast.amount + " / " + cast.getCapacity()); + text.add(EnumChatFormatting.YELLOW + cast.type.getLocalizedName() + ": " + cast.amount + " / " + cast.getCapacity()); } ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xFF4000, 0x401000, text); diff --git a/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java b/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java index bbf18772b..a9a0d1d7d 100644 --- a/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java +++ b/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java @@ -204,7 +204,7 @@ public class FoundryOutlet extends BlockContainer implements ICrucibleAcceptor, List text = new ArrayList(); if(outlet.filter != null) { - text.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("foundry.filter", outlet.filter.names[0])); + text.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("foundry.filter", outlet.filter.getLocalizedName())); } if(outlet.invertFilter) { text.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("foundry.invertFilter")); diff --git a/src/main/java/com/hbm/blocks/machine/MachineMiniRTG.java b/src/main/java/com/hbm/blocks/machine/MachineMiniRTG.java deleted file mode 100644 index 68bc2b9a6..000000000 --- a/src/main/java/com/hbm/blocks/machine/MachineMiniRTG.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.hbm.blocks.machine; - -import com.hbm.tileentity.machine.TileEntityMachineMiniRTG; - -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -public class MachineMiniRTG extends BlockContainer { - - public MachineMiniRTG(Material mat) { - super(mat); - } - - @Override - public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - return new TileEntityMachineMiniRTG(); - } - - @Override - public int getRenderType() { - return MachineRTG.renderID; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - -} diff --git a/src/main/java/com/hbm/blocks/machine/MachinePWRController.java b/src/main/java/com/hbm/blocks/machine/MachinePWRController.java index 61b9930dc..10de4e22d 100644 --- a/src/main/java/com/hbm/blocks/machine/MachinePWRController.java +++ b/src/main/java/com/hbm/blocks/machine/MachinePWRController.java @@ -187,7 +187,7 @@ public class MachinePWRController extends BlockContainer implements ITooltipProv errored = true; } - private void sendError(World world, int x, int y, int z, String message, EntityPlayer player) { + public static void sendError(World world, int x, int y, int z, String message, EntityPlayer player) { if(player instanceof EntityPlayerMP) { NBTTagCompound data = new NBTTagCompound(); diff --git a/src/main/java/com/hbm/blocks/machine/MachineRTG.java b/src/main/java/com/hbm/blocks/machine/MachineRTG.java index 2b3d14099..cda3389dc 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineRTG.java +++ b/src/main/java/com/hbm/blocks/machine/MachineRTG.java @@ -47,7 +47,7 @@ public class MachineRTG extends BlockContainer { @Override public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - if(this == ModBlocks.machine_rtg_grey) + if(this == ModBlocks.machine_rtg) return new TileEntityMachineRTG(); return null; @@ -60,7 +60,7 @@ public class MachineRTG extends BlockContainer { return true; } else if(!player.isSneaking()) { - if(this == ModBlocks.machine_rtg_grey) { + if(this == ModBlocks.machine_rtg) { TileEntityMachineRTG entity = (TileEntityMachineRTG) world.getTileEntity(x, y, z); if(entity != null) { @@ -78,7 +78,7 @@ public class MachineRTG extends BlockContainer { { if (!keepInventory) { - if (this == ModBlocks.machine_rtg_grey) { + if (this == ModBlocks.machine_rtg) { TileEntityMachineRTG tileentityfurnace = (TileEntityMachineRTG) p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphite.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphite.java index 28ddcd06a..826c56e78 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphite.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphite.java @@ -1,41 +1,12 @@ package com.hbm.blocks.machine.pile; -import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockFlammable; -import com.hbm.items.ModItems; -import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.toclient.ParticleBurstPacket; -import api.hbm.block.IToolable; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; -import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -public class BlockGraphite extends BlockFlammable implements IToolable { +public class BlockGraphite extends BlockFlammable { public BlockGraphite(Material mat, int en, int flam) { super(mat, en, flam); } - - @Override - public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { - - if(tool != ToolType.HAND_DRILL) - return false; - - if(!world.isRemote) { - world.setBlock(x, y, z, ModBlocks.block_graphite_drilled, side / 2, 3); - PacketDispatcher.wrapper.sendToAllAround(new ParticleBurstPacket(x, y, z, Block.getIdFromBlock(this), 0), new TargetPoint(world.provider.dimensionId, x, y, z, 50)); - world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, this.stepSound.func_150496_b(), (this.stepSound.getVolume() + 1.0F) / 2.0F, this.stepSound.getPitch() * 0.8F); - - BlockGraphiteRod.ejectItem(world, x, y, z, ForgeDirection.getOrientation(side), new ItemStack(ModItems.ingot_graphite)); - } - - return true; - } - } diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingFuel.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingFuel.java index fdfcac709..795898430 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingFuel.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingFuel.java @@ -19,6 +19,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated public class BlockGraphiteBreedingFuel extends BlockGraphiteDrilledTE implements IToolable { @Override diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingProduct.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingProduct.java index 04ab98c8b..6f7d6b2de 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingProduct.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteBreedingProduct.java @@ -9,6 +9,7 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.Item; +@Deprecated public class BlockGraphiteBreedingProduct extends BlockGraphiteDrilledBase implements IToolable { @Override diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilled.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilled.java index 309f8b2d5..c628eb524 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilled.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilled.java @@ -12,6 +12,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated public class BlockGraphiteDrilled extends BlockGraphiteDrilledBase implements IToolable { @Override diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledBase.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledBase.java index efe9764b6..9b3dfe978 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledBase.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledBase.java @@ -26,6 +26,7 @@ import net.minecraft.util.IIcon; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated public abstract class BlockGraphiteDrilledBase extends BlockFlammable implements IToolable, IInsertable { @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledTE.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledTE.java index 5aff70327..4c5b1f6a2 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledTE.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledTE.java @@ -4,6 +4,7 @@ import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.world.World; +@Deprecated public abstract class BlockGraphiteDrilledTE extends BlockGraphiteDrilledBase implements ITileEntityProvider { public BlockGraphiteDrilledTE() { diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteFuel.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteFuel.java index 7b3b892ca..b8435722f 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteFuel.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteFuel.java @@ -21,6 +21,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated public class BlockGraphiteFuel extends BlockGraphiteDrilledTE implements IToolable, IBlowable { @Override diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteNeutronDetector.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteNeutronDetector.java index ce6fddf76..535eb7ac2 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteNeutronDetector.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteNeutronDetector.java @@ -19,6 +19,7 @@ import net.minecraft.util.IIcon; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated public class BlockGraphiteNeutronDetector extends BlockGraphiteDrilledTE { @Override diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteRod.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteRod.java index 36f65bacf..46e9dc969 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteRod.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteRod.java @@ -13,6 +13,7 @@ import net.minecraft.util.IIcon; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated public class BlockGraphiteRod extends BlockGraphiteDrilledBase implements IToolable { @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteSource.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteSource.java index 979ad2471..819f641c7 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteSource.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteSource.java @@ -13,6 +13,7 @@ import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +@Deprecated public class BlockGraphiteSource extends BlockGraphiteDrilledTE implements IToolable { @Override diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockPile.java b/src/main/java/com/hbm/blocks/machine/pile/BlockPile.java new file mode 100644 index 000000000..c205ef53d --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockPile.java @@ -0,0 +1,156 @@ +package com.hbm.blocks.machine.pile; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.machine.MachinePWRController; +import com.hbm.lib.RefStrings; +import com.hbm.render.block.ct.CT; +import com.hbm.render.block.ct.CTStitchReceiver; +import com.hbm.render.block.ct.IBlockCT; +import com.hbm.tileentity.machine.pile.TileEntityPileBaseMK2; +import com.hbm.tileentity.machine.pile.TileEntityPileCore; +import com.hbm.util.i18n.I18nUtil; + +import api.hbm.block.IToolable; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockPile extends BlockContainer implements IBlockCT, IToolable, ILookOverlay { + + /** Blank dummy, the pile is mostly composed of that */ + public static final int META_DUMMY = 0; + /** The core, gets its own TE and runs the simulation, only one per pile */ + public static final int META_CORE = 1; + /** Channel mid segment for channel intersect checks */ + public static final int META_CHANNEL = 2; + /** Startpoint of the channel */ + public static final int META_FUEL_IN = 3; + /** Endpoint of the fuel channel */ + public static final int META_FUEL_OUT = 4; + /** Startpoint of the ventilation channel */ + public static final int META_AIR_IN = 5; + /** Endpoint of the ventilation channel */ + public static final int META_AIR_OUT = 6; + /** Control rod channel */ + public static final int META_CONTROL = 7; + /** Edge of our pile "cube" to prevent channels from being drilled there */ + public static final int META_EDGE = 8; + + @SideOnly(Side.CLIENT) public CTStitchReceiver rec; + @SideOnly(Side.CLIENT) public CTStitchReceiver recTop; + @SideOnly(Side.CLIENT) public CTStitchReceiver recChanIn; + @SideOnly(Side.CLIENT) public CTStitchReceiver recChanOut; + @SideOnly(Side.CLIENT) public CTStitchReceiver recCon; + @SideOnly(Side.CLIENT) public CTStitchReceiver recCore; + + @SideOnly(Side.CLIENT) protected IIcon iconTop; + + public BlockPile() { super(Material.iron); } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta == META_CORE) return new TileEntityPileCore(); + return new TileEntityPileBaseMK2(); + } + + @Override public int getRenderType() { return CT.renderID; } + @Override public Item getItemDropped(int i, Random rand, int j) { return null; } + + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + this.iconTop = reg.registerIcon(RefStrings.MODID + ":pile_block_top"); + + this.rec = IBlockCT.primeReceiver(reg, this.blockIcon.getIconName(), this.blockIcon); + this.recTop = IBlockCT.primeReceiver(reg, this.iconTop.getIconName(), this.iconTop); + this.recChanIn = IBlockCT.primeReceiver(reg, RefStrings.MODID + ":pile_block_input", this.blockIcon); + this.recChanOut = IBlockCT.primeReceiver(reg, RefStrings.MODID + ":pile_block_output", this.blockIcon); + this.recCon = IBlockCT.primeReceiver(reg, RefStrings.MODID + ":pile_block_control_top", this.iconTop); + this.recCore = IBlockCT.primeReceiver(reg, RefStrings.MODID + ":pile_block_core", this.iconTop); + } + + @Override + public IIcon[] getFragments(IBlockAccess world, int x, int y, int z, int side) { + int meta = world.getBlockMetadata(x, y, z); + if(side == 0 || side == 1) return meta == META_CONTROL ? recCon.fragCache : recTop.fragCache; + if(meta == META_FUEL_IN || meta == META_AIR_IN) return recChanIn.fragCache; + if(meta == META_FUEL_OUT || meta == META_AIR_OUT) return recChanOut.fragCache; + if(meta == META_CORE) return recCore.fragCache; + return rec.fragCache; + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityPileBaseMK2) { + TileEntityPileBaseMK2 pile = (TileEntityPileBaseMK2) tile; + world.removeTileEntity(x, y, z); + if(pile.coreY >= 0) world.setBlock(x, y, z, ModBlocks.pile_brick); + + TileEntityPileCore core = pile.getCore(); + if(core != null && !core.isInvalid()) core.destroy(); + + } else { + world.removeTileEntity(x, y, z); + world.setBlock(x, y, z, ModBlocks.pile_brick); + } + super.breakBlock(world, x, y, z, block, meta); + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if(tool == tool.HAND_DRILL) { + + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityPileCore || world.getBlockMetadata(x, y, z) == META_CORE) { + MachinePWRController.sendError(world, x, y, z, "Cannot intersect core", player); + return false; + } + + if(tile instanceof TileEntityPileBaseMK2) { + if(world.isRemote) return true; + TileEntityPileCore core = ((TileEntityPileBaseMK2) tile).getCore(); + if(core != null) { + ForgeDirection dir = ForgeDirection.getOrientation(side).getOpposite(); + return core.drillChannel(x, y, z, dir, player); + } + } + + MachinePWRController.sendError(world, x, y, z, "No core found", player); + } + + return false; + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + int meta = world.getBlockMetadata(x, y, z); + List text = new ArrayList(); + if(meta == META_FUEL_IN) text.add("Fuel Loading Port"); + if(meta == META_FUEL_OUT) text.add("Fuel Ejection Port"); + if(meta == META_AIR_IN) text.add("Air Inlet"); + if(meta == META_AIR_OUT) text.add("Air Outlet"); + if(meta == META_CONTROL) text.add("Control Rod Channel"); + if(!text.isEmpty()) ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } +} diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockPileBrick.java b/src/main/java/com/hbm/blocks/machine/pile/BlockPileBrick.java new file mode 100644 index 000000000..f309e03ba --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockPileBrick.java @@ -0,0 +1,150 @@ +package com.hbm.blocks.machine.pile; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.machine.MachinePWRController; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.pile.TileEntityPileBaseMK2; +import com.hbm.tileentity.machine.pile.TileEntityPileCore; +import com.hbm.tileentity.machine.pile.TileEntityPileCore.PileOrientation; + +import api.hbm.block.IToolable; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockPileBrick extends Block implements IToolable { + + @SideOnly(Side.CLIENT) protected IIcon iconTop; + @SideOnly(Side.CLIENT) protected IIcon iconSide; + + public BlockPileBrick() { + super(Material.rock); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + this.iconTop = reg.registerIcon(RefStrings.MODID + ":pile_brick_top"); + this.iconSide = reg.registerIcon(RefStrings.MODID + ":pile_brick_side"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + if(side == 0 || side == 1) return this.iconTop; + if(side == 4 || side == 5) return this.iconSide; + return this.blockIcon; + } + + + public static final int MIN_V_SIZE = 5; + public static final int MIN_H_SIZE = 5; + public static final int MAX_V_SIZE = 15; + public static final int MAX_H_SIZE = 15; + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if(tool == tool.HAND_DRILL) { + if(side == 0 || side == 1) return false; + if(world.isRemote) return true; + + ForgeDirection dir = ForgeDirection.getOrientation(side).getOpposite(); + ForgeDirection dirLeft = dir.getRotation(ForgeDirection.DOWN); + + int negHeight = 0; + int posHeight = 0; + int left = 0; + int right = 0; + int depth = 0; + + /// PROBE DIMENSIONS /// + // height + for(int i = 1; i <= MAX_V_SIZE - 1; i++) { if(world.getBlock(x, y + i, z) != this) break; posHeight = i; } + for(int i = 1; i <= MAX_V_SIZE - posHeight - 1; i++) { if(world.getBlock(x, y - i, z) != this) break; negHeight = i; } + // side width + for(int i = 1; i <= MAX_H_SIZE - 1; i++) { if(world.getBlock(x + dirLeft.offsetX * i, y, z + dirLeft.offsetZ * i) != this) break; left = i; } + for(int i = 1; i <= MAX_H_SIZE - left - 1; i++) { if(world.getBlock(x - dirLeft.offsetX * i, y, z - dirLeft.offsetZ * i) != this) break; right = i; } + // depth + for(int i = 1; i <= MAX_H_SIZE; i++) { if(world.getBlock(x + dir.offsetX * i, y, z + dir.offsetZ * i) != this) break; depth = i; } + + /// SIZE CHECKS /// + if(posHeight + negHeight + 1 < MIN_V_SIZE) { + MachinePWRController.sendError(world, x, y + posHeight, z, "Height too low (<" + MIN_V_SIZE + ")", player); + MachinePWRController.sendError(world, x, y - negHeight, z, "Height too low (<" + MIN_V_SIZE + ")", player); + return true; + } + + if(left + right + 1 < MIN_H_SIZE) { + MachinePWRController.sendError(world, x + dirLeft.offsetX * left, y, z + dirLeft.offsetZ * right, "Width too low (<" + MIN_H_SIZE + ")", player); + MachinePWRController.sendError(world, x - dirLeft.offsetX * right, y, z - dirLeft.offsetZ * right, "Width too low (<" + MIN_H_SIZE + ")", player); + return true; + } + + if(depth + 1 < MIN_H_SIZE) { + MachinePWRController.sendError(world, x + dir.offsetX * depth, y, z + dir.offsetZ * depth, "Depth too low (<" + MIN_H_SIZE + ")", player); + return true; + } + + /// CORE EDGE CHECK /// + if(posHeight == 0 || negHeight == 0 || left == 0 || right == 0) { + MachinePWRController.sendError(world, x, y, z, "Core cannot be on an edge", player); + return true; + } + + /// VOLUME CHECK /// + for(int h = -negHeight; h <= posHeight; h++) { + for(int v = -left; v <= right; v++) { + for(int d = 0; d <= depth; d++) { + int iX = x - dirLeft.offsetX * v + dir.offsetX * d; + int iY = y + h; + int iZ = z - dirLeft.offsetZ * v + dir.offsetZ * d; + + if(world.getBlock(iX, iY, iZ) != this) { + MachinePWRController.sendError(world, iX, iY, iZ, "Graphite block missing", player); + return true; + } + } + } + } + + /// BUILD /// + for(int h = -negHeight; h <= posHeight; h++) { + for(int v = -left; v <= right; v++) { + for(int d = 0; d <= depth; d++) { + int iX = x - dirLeft.offsetX * v + dir.offsetX * d; + int iY = y + h; + int iZ = z - dirLeft.offsetZ * v + dir.offsetZ * d; + + if(x == iX && y == iY && z == iZ) { + world.setBlock(iX, iY, iZ, ModBlocks.pile_block, BlockPile.META_CORE, 3); + TileEntityPileCore core = (TileEntityPileCore) world.getTileEntity(iX, iY, iZ); + core.orientation = PileOrientation.getOrientation(dir); + core.setupSize(posHeight + negHeight + 1, left + right + 1, depth + 1); + } else { + int edgeCount = 0; + if(h == -negHeight || h == posHeight) edgeCount++; + if(v == -left || v == right) edgeCount++; + if(d == 0 || d == depth) edgeCount++; + boolean isEdge = edgeCount > 1; + world.setBlock(iX, iY, iZ, ModBlocks.pile_block, isEdge ? BlockPile.META_EDGE : BlockPile.META_DUMMY, 3); + TileEntityPileBaseMK2 pile = (TileEntityPileBaseMK2) world.getTileEntity(iX, iY, iZ); + pile.setCore(x, y, z); + } + } + } + } + + return true; + } + + return false; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java b/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java new file mode 100644 index 000000000..d362e0c7e --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockPileDevice.java @@ -0,0 +1,187 @@ +package com.hbm.blocks.machine.pile; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.blocks.IBlockMulti; +import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.main.NTMSounds; +import com.hbm.tileentity.machine.pile.TileEntityPileControl; +import com.hbm.tileentity.machine.pile.TileEntityPileLoader; +import com.hbm.tileentity.machine.pile.TileEntityPileVent; +import com.hbm.util.i18n.I18nUtil; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockPileDevice extends BlockContainer implements IBlockMulti, ILookOverlay, ITooltipProvider { + + public static final int ITEM_META_LOADER = 0; + public static final int ITEM_META_VENT = 1; + public static final int ITEM_META_CONTROL = 2; + + public static final int BLOCK_META_LOADER = 0; + public static final int BLOCK_META_VENT = 4; + public static final int BLOCK_META_CONTROL = 8; + + public BlockPileDevice() { + super(Material.iron); + } + + @Override + public int getSubCount() { + return 3; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for(int i = 0; i < getSubCount(); ++i) { + list.add(new ItemStack(item, 1, i)); + } + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + meta -= meta % 4; + if(meta == BLOCK_META_LOADER) return new TileEntityPileLoader(); + if(meta == BLOCK_META_VENT) return new TileEntityPileVent(); + if(meta == BLOCK_META_CONTROL) return new TileEntityPileControl(); + return null; + } + + @Override public int getRenderType() { return -1; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } + + @Override + public int onBlockPlaced(World world, int x, int y, int z, int side, float fx, float fy, float fz, int meta) { + int metaOffset = itemMetaToBlockMeta(meta); + // side is reduced by 2 because UP and DOWN (0 and 1) aren't relevant + // therefore, all item metas (device subtypes) are neatly packed into 4 metas each + side = MathHelper.clamp_int(side - 2, 0, 3); + return metaOffset + side; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + int meta = world.getBlockMetadata(x, y, z); + meta -= meta % 4; + + if(meta == BLOCK_META_LOADER) { + if(world.isRemote) return true; + + TileEntityPileLoader tile = (TileEntityPileLoader) world.getTileEntity(x, y, z); + + if(tile.level <= 0 && !tile.loading) { + + if(player.getHeldItem() != null && tile.stack == null && tile.isItemLoadable(player.getHeldItem())) { + tile.stack = player.getHeldItem().copy(); + tile.stack.stackSize = 1; + player.getHeldItem().stackSize--; + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, NTMSounds.UPGRADE_PLUG, 1F, 1F); + return true; + } + + tile.loading = true; + } + + return true; + } + + return false; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { + if(world.getBlockMetadata(x, y, z) != BLOCK_META_CONTROL) return; + + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + if(i == 0) world.setBlockMetadataWithNotify(x, y, z, BLOCK_META_CONTROL + 0, 2); + if(i == 1) world.setBlockMetadataWithNotify(x, y, z, BLOCK_META_CONTROL + 3, 2); + if(i == 2) world.setBlockMetadataWithNotify(x, y, z, BLOCK_META_CONTROL + 1, 2); + if(i == 3) world.setBlockMetadataWithNotify(x, y, z, BLOCK_META_CONTROL + 2, 2); + } + + public static int itemMetaToBlockMeta(int meta) { + if(meta >= ITEM_META_CONTROL) return BLOCK_META_CONTROL; + if(meta == ITEM_META_VENT) return BLOCK_META_VENT; + return BLOCK_META_LOADER; + } + + @Override + public int damageDropped(int meta) { + if(meta >= BLOCK_META_CONTROL) return ITEM_META_CONTROL; + if(meta >= BLOCK_META_VENT) return ITEM_META_VENT; + return ITEM_META_LOADER; + } + + @Override + public boolean isSideSolid(IBlockAccess world, int x, int y, int z, ForgeDirection side) { + int meta = world.getBlockMetadata(x, y, z); + if(meta >= BLOCK_META_CONTROL) return side.ordinal() == meta % 4 + 2; + if(meta >= BLOCK_META_VENT) return false; + if(meta >= BLOCK_META_LOADER) return side.ordinal() == meta % 4 + 2; + return false; + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, this.getUnlocalizedName(stack) + ".desc", player, list, ext); + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + int meta = world.getBlockMetadata(x, y, z); + + List text = new ArrayList(); + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityPileLoader) { + TileEntityPileLoader device = (TileEntityPileLoader) tile; + text.add("Index: " + device.chanNum); + if(device.syncStack != null) text.add("Loading: " + device.syncStack.getDisplayName()); + } + + if(tile instanceof TileEntityPileVent) { + TileEntityPileVent device = (TileEntityPileVent) tile; + text.add("Index: " + device.chanNum); + } + + if(tile instanceof TileEntityPileControl) { + TileEntityPileControl device = (TileEntityPileControl) tile; + text.add("Index: " + device.chanNum); + text.add("Extraction level: " + (int) + (device.level * 100) + "%"); + } + + if(!text.isEmpty()) + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedNameFromItemMeta(this.damageDropped(meta)) + ".name"), 0xffff00, 0x404000, text); + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return getUnlocalizedNameFromItemMeta(stack.getItemDamage()); + } + + public String getUnlocalizedNameFromItemMeta(int meta) { + meta = Math.abs(meta % 3); // recitfy + if(meta == ITEM_META_LOADER) return this.getUnlocalizedName() + ".loader"; + if(meta == ITEM_META_VENT) return this.getUnlocalizedName() + ".vent"; + if(meta == ITEM_META_CONTROL) return this.getUnlocalizedName() + ".control"; + return this.getUnlocalizedName(); + } +} diff --git a/src/main/java/com/hbm/blocks/network/CableDiode.java b/src/main/java/com/hbm/blocks/network/CableDiode.java index 4dd7a8f80..ca349a096 100644 --- a/src/main/java/com/hbm/blocks/network/CableDiode.java +++ b/src/main/java/com/hbm/blocks/network/CableDiode.java @@ -1,32 +1,35 @@ package com.hbm.blocks.network; -import api.hbm.block.IToolable; import api.hbm.energymk2.IEnergyConnectorBlock; import api.hbm.energymk2.IEnergyConnectorMK2; import api.hbm.energymk2.IEnergyReceiverMK2; -import api.hbm.energymk2.IEnergyReceiverMK2.ConnectionPriority; import api.hbm.energymk2.Nodespace; import api.hbm.energymk2.Nodespace.PowerNode; import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ITooltipProvider; +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.gui.GUIDiode; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BobMathUtil; import com.hbm.util.Compat; +import com.hbm.util.EnumUtil; import com.hbm.util.i18n.I18nUtil; import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.BlockContainer; import net.minecraft.block.BlockPistonBase; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.IBlockAccess; @@ -37,28 +40,16 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.List; -public class CableDiode extends BlockContainer implements IEnergyConnectorBlock, ILookOverlay, IToolable, ITooltipProvider { +public class CableDiode extends BlockContainer implements IEnergyConnectorBlock, ILookOverlay, ITooltipProvider { public CableDiode(Material mat) { super(mat); } public static int renderID = RenderingRegistry.getNextAvailableRenderId(); - - @Override - public int getRenderType() { - return renderID; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } + @Override public int getRenderType() { return renderID; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } @Override @SideOnly(Side.CLIENT) @@ -72,61 +63,31 @@ public class CableDiode extends BlockContainer implements IEnergyConnectorBlock, } @Override - public boolean canConnect(IBlockAccess world, int x, int y, int z, ForgeDirection dir) { - return true; - } + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { - @Override - public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { - - TileEntityDiode te = (TileEntityDiode)world.getTileEntity(x, y, z); - - if(world.isRemote) - return true; - - if(tool == ToolType.SCREWDRIVER) { - if(te.level < 11) - te.level++; - te.markDirty(); - world.markBlockForUpdate(x, y, z); - return true; - } - - if(tool == ToolType.HAND_DRILL) { - if(te.level > 1) - te.level--; - te.markDirty(); - world.markBlockForUpdate(x, y, z); - return true; - } - - if(tool == ToolType.DEFUSER) { - int p = te.priority.ordinal() + 1; - if(p > 4) p = 0; - te.priority = ConnectionPriority.values()[p]; - te.markDirty(); - world.markBlockForUpdate(x, y, z); + if(!player.isSneaking()) { + if(world.isRemote) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); return true; } return false; } + @Override + public boolean canConnect(IBlockAccess world, int x, int y, int z, ForgeDirection dir) { + return true; + } + @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { list.add(EnumChatFormatting.GOLD + "Limits throughput and restricts flow direction"); - list.add(EnumChatFormatting.YELLOW + "Use screwdriver to increase throughput"); - list.add(EnumChatFormatting.YELLOW + "Use hand drill to decrease throughput"); - list.add(EnumChatFormatting.YELLOW + "Use defuser to change network priority"); } @Override public void printHook(Pre event, World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); - - if(!(te instanceof TileEntityDiode)) - return; + if(!(te instanceof TileEntityDiode)) return; TileEntityDiode diode = (TileEntityDiode) te; @@ -142,36 +103,47 @@ public class CableDiode extends BlockContainer implements IEnergyConnectorBlock, return new TileEntityDiode(); } - public static class TileEntityDiode extends TileEntityLoadedBase implements IEnergyReceiverMK2 { + public static class TileEntityDiode extends TileEntityLoadedBase implements IEnergyReceiverMK2, IControlReceiver, IGUIProvider { + + /** Used as an intra-tick tracker for how much energy has been transmitted, resets to 0 each tick and maxes out based on transfer */ + private long power; + private boolean recursionBrake = false; + private int pulses = 0; + public ConnectionPriority priority = ConnectionPriority.NORMAL; + public long limit = 1_000; @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - level = nbt.getInteger("level"); - priority = ConnectionPriority.values()[nbt.getByte("p")]; + if(nbt.hasKey("level")) { + this.limit = (long) Math.pow(10, nbt.getInteger("level")); + } else { + this.limit = nbt.getLong("limit"); + } + this.priority = ConnectionPriority.values()[nbt.getByte("p")]; } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - nbt.setInteger("level", level); + nbt.setLong("limit", limit); nbt.setByte("p", (byte) this.priority.ordinal()); } @Override - public Packet getDescriptionPacket() { - NBTTagCompound nbt = new NBTTagCompound(); - this.writeToNBT(nbt); - return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeByte((byte) priority.ordinal()); + buf.writeLong(limit); } @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { - this.readFromNBT(pkt.func_148857_g()); + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, buf.readByte()); + limit = buf.readLong(); } - int level = 1; - private ForgeDirection getDir() { return ForgeDirection.getOrientation(this.getBlockMetadata()).getOpposite(); } @@ -181,34 +153,22 @@ public class CableDiode extends BlockContainer implements IEnergyConnectorBlock, if(!worldObj.isRemote) { for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { - - if(dir == getDir()) - continue; - + if(dir == getDir()) continue; this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); } pulses = 0; - this.setPower(0); //tick is over, reset our allowed transfe + this.setPower(0); //tick is over, reset our allowed transfer + this.networkPackNT(15); } } - @Override - public boolean canConnect(ForgeDirection dir) { - return dir != getDir(); - } - - /** Used as an intra-tick tracker for how much energy has been transmitted, resets to 0 each tick and maxes out based on transfer */ - private long power; - private boolean recursionBrake = false; - private int pulses = 0; - public ConnectionPriority priority = ConnectionPriority.NORMAL; + @Override public boolean canConnect(ForgeDirection dir) { return dir != getDir(); } @Override public long transferPower(long power) { - if(recursionBrake) - return power; + if(recursionBrake) return power; pulses++; if(this.getPower() >= this.getMaxPower() || pulses > 10) return power; //if we have already maxed out transfer or max pulses, abort @@ -241,29 +201,27 @@ public class CableDiode extends BlockContainer implements IEnergyConnectorBlock, return power; } + @Override public long getReceiverSpeed() { return this.getMaxPower() - this.getPower(); } + @Override public long getMaxPower() { return this.limit; } + @Override public long getPower() { return Math.min(power, this.getMaxPower()); } + @Override public void setPower(long power) { this.power = power; } + @Override public ConnectionPriority getPriority() { return this.priority; } + @Override - public long getReceiverSpeed() { - return this.getMaxPower() - this.getPower(); + public boolean hasPermission(EntityPlayer player) { + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 128; } @Override - public long getMaxPower() { - return (long) Math.pow(10, level); + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("limit")) this.limit = data.getLong("limit"); + if(data.hasKey("priority")) this.priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, data.getByte("priority")); + if(limit < 0) limit = 0; + if(limit > 10_000_000_000L) limit = 10_000_000_000L; + this.markDirty(); } - @Override - public long getPower() { - return Math.min(power, this.getMaxPower()); - } - - @Override - public void setPower(long power) { - this.power = power; - } - - @Override - public ConnectionPriority getPriority() { - return this.priority; - } + @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIDiode(this); } + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } } } diff --git a/src/main/java/com/hbm/blocks/network/RadioAUTOCAL.java b/src/main/java/com/hbm/blocks/network/RadioAUTOCAL.java index ca989f365..8b7c6f7b2 100644 --- a/src/main/java/com/hbm/blocks/network/RadioAUTOCAL.java +++ b/src/main/java/com/hbm/blocks/network/RadioAUTOCAL.java @@ -22,7 +22,7 @@ public class RadioAUTOCAL extends BlockDummyable { return null; } - @Override public int[] getDimensions() { return new int[] {1, 0, 0, 0, 0 ,0}; } + @Override public int[] getDimensions() { return new int[] {1, 0, 0, 0, 0, 0}; } @Override public int getOffset() { return 0; } @Override diff --git a/src/main/java/com/hbm/blocks/network/WireCoated.java b/src/main/java/com/hbm/blocks/network/WireCoated.java index c96c68ad5..ddc06bc6d 100644 --- a/src/main/java/com/hbm/blocks/network/WireCoated.java +++ b/src/main/java/com/hbm/blocks/network/WireCoated.java @@ -40,7 +40,7 @@ public class WireCoated extends BlockContainer implements IBlockCT { } @Override - public IIcon[] getFragments(IBlockAccess world, int x, int y, int z) { + public IIcon[] getFragments(IBlockAccess world, int x, int y, int z, int side) { return rec.fragCache; } } diff --git a/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageClutter.java b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageClutter.java index 33b18b6ae..17e06647e 100644 --- a/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageClutter.java +++ b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageClutter.java @@ -1,13 +1,27 @@ package com.hbm.blocks.network.pneumatic; +import java.io.IOException; +import java.util.Random; + +import com.hbm.config.ServerConfig; import com.hbm.main.MainRegistry; import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageClutter; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; public class PneumoStorageClutter extends BlockContainer { @@ -30,4 +44,129 @@ public class PneumoStorageClutter extends BlockContainer { } return false; } + + @Override + public Item getItemDropped(int i, Random rand, int j) { + return null; + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + + if(dropInv) { + TileEntityPneumoStorageClutter storage = (TileEntityPneumoStorageClutter) world.getTileEntity(x, y, z); + Random rand = world.rand; + if(storage != null) { + for(int i = 0; i < storage.getSizeInventory(); ++i) { + ItemStack itemstack = storage.getStackInSlot(i); + if(itemstack != null) { + float offsetX = rand.nextFloat() * 0.8F + 0.1F; + float offsetY = rand.nextFloat() * 0.8F + 0.1F; + float offsetZ = rand.nextFloat() * 0.8F + 0.1F; + + while(itemstack.stackSize > 0) { + int split = rand.nextInt(21) + 10; + if(split > itemstack.stackSize) split = itemstack.stackSize; + itemstack.stackSize -= split; + EntityItem entityitem = new EntityItem(world, x + offsetX, y + offsetY, z + offsetZ, new ItemStack(itemstack.getItem(), split, itemstack.getItemDamage())); + + if(itemstack.hasTagCompound()) { + entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); + } + float intensity = 0.05F; + entityitem.motionX = rand.nextGaussian() * intensity; + entityitem.motionY = rand.nextGaussian() * intensity + 0.2F; + entityitem.motionZ = rand.nextGaussian() * intensity; + world.spawnEntityInWorld(entityitem); + } + } + } + + world.func_147453_f(x, y, z, block); + } + } + + super.breakBlock(world, x, y, z, block, meta); + } + + private static boolean dropInv = true; + + @Override + public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) { + + if(!world.isRemote && !ServerConfig.CRATE_KEEP_CONTENTS.get()) { + if(!player.capabilities.isCreativeMode) { + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(this))); + } + dropInv = true; + boolean flag = world.setBlockToAir(x, y, z); + return flag; + } + + if(!player.capabilities.isCreativeMode && !world.isRemote && willHarvest) { + + ItemStack drop = new ItemStack(this); + ISidedInventory inv = (ISidedInventory)world.getTileEntity(x, y, z); + + NBTTagCompound nbt = new NBTTagCompound(); + + if(inv != null) { + + for(int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack stack = inv.getStackInSlot(i); + if(stack == null) continue; + NBTTagCompound slot = new NBTTagCompound(); + stack.writeToNBT(slot); + nbt.setTag("slot" + i, slot); + } + } + + if(!nbt.hasNoTags()) { + drop.stackTagCompound = nbt; + } + + if(inv instanceof TileEntityPneumoStorageClutter) { + TileEntityPneumoStorageClutter crate = (TileEntityPneumoStorageClutter) inv; + if (crate.hasCustomInventoryName()) { + drop.setStackDisplayName(crate.getInventoryName()); + } + } + + if(drop.hasTagCompound()) { + try { + byte[] abyte = CompressedStreamTools.compress(drop.stackTagCompound); + + if(abyte.length > 6000) { + player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Warning: Container NBT exceeds 6kB, contents will be ejected!")); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(this))); + return world.setBlockToAir(x, y, z); + } + + } catch(IOException e) { } + } + + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, drop)); + } + + dropInv = false; + boolean flag = world.setBlockToAir(x, y, z); + dropInv = true; + + return flag; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + + TileEntityPneumoStorageClutter inv = (TileEntityPneumoStorageClutter) world.getTileEntity(x, y, z); + + if(inv != null && stack.hasTagCompound()) { + for(int i = 0; i < inv.getSizeInventory(); i++) { + inv.setInventorySlotContents(i, ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("slot" + i))); + } + if(stack.hasDisplayName()) inv.setCustomName(stack.getDisplayName()); + } + + super.onBlockPlacedBy(world, x, y, z, player, stack); + } } diff --git a/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageExporter.java b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageExporter.java new file mode 100644 index 000000000..fe494f755 --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageExporter.java @@ -0,0 +1,72 @@ +package com.hbm.blocks.network.pneumatic; + +import com.hbm.blocks.machine.BlockMachineBase; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageExporter; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class PneumoStorageExporter extends BlockMachineBase { + + public PneumoStorageExporter() { + super(Material.iron, 0); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityPneumoStorageExporter(); + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof ISidedInventory)) return; + + ISidedInventory tileentityfurnace = (ISidedInventory) te; + + if(tileentityfurnace != null) { + + for(int i = 9; i < tileentityfurnace.getSizeInventory(); ++i) { + + ItemStack itemstack = tileentityfurnace.getStackInSlot(i); + + if(itemstack != null) { + + float mX = world.rand.nextFloat() * 0.8F + 0.1F; + float mY = world.rand.nextFloat() * 0.8F + 0.1F; + float mZ = world.rand.nextFloat() * 0.8F + 0.1F; + + while(itemstack.stackSize > 0) { + + int amount = world.rand.nextInt(21) + 10; + if(amount > itemstack.stackSize) amount = itemstack.stackSize; + + itemstack.stackSize -= amount; + EntityItem entityitem = new EntityItem(world, x + mX, y + mY, z + mZ, new ItemStack(itemstack.getItem(), amount, itemstack.getItemDamage())); + + if(itemstack.hasTagCompound()) + entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); + + float motion = 0.05F; + entityitem.motionX = (float) world.rand.nextGaussian() * motion; + entityitem.motionY = (float) world.rand.nextGaussian() * motion + 0.2F; + entityitem.motionZ = (float) world.rand.nextGaussian() * motion; + world.spawnEntityInWorld(entityitem); + } + } + } + + world.func_147453_f(x, y, z, block); + } + + super.breakBlock(world, x, y, z, block, meta); + } +} diff --git a/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageImporter.java b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageImporter.java new file mode 100644 index 000000000..a6a70e5b2 --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageImporter.java @@ -0,0 +1,20 @@ +package com.hbm.blocks.network.pneumatic; + +import com.hbm.blocks.machine.BlockMachineBase; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageImporter; + +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class PneumoStorageImporter extends BlockMachineBase { + + public PneumoStorageImporter() { + super(Material.iron, 0); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityPneumoStorageImporter(); + } +} diff --git a/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageMono.java b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageMono.java index 47428aff2..73d9f4742 100644 --- a/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageMono.java +++ b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageMono.java @@ -1,7 +1,16 @@ package com.hbm.blocks.network.pneumatic; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageMono; + +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -13,7 +22,58 @@ public class PneumoStorageMono extends BlockContainer { @Override public TileEntity createNewTileEntity(World world, int meta) { - return null; + return new TileEntityPneumoStorageMono(); } + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + if(world.isRemote) return true; + if(!player.isSneaking()) { + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + return true; + } + return false; + } + + @Override + public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) { + + if(!player.capabilities.isCreativeMode && !world.isRemote && willHarvest) { + + TileEntityPneumoStorageMono inv = (TileEntityPneumoStorageMono) world.getTileEntity(x, y, z); + ItemStack drop = new ItemStack(this); + NBTTagCompound nbt = new NBTTagCompound(); + + if(inv != null) { + for(int i = 0; i < 3; i++) { + ItemStack stack = inv.getStackInSlot(i); + if(stack == null) continue; + NBTTagCompound slot = new NBTTagCompound(); + stack.writeToNBT(slot); + nbt.setTag("slot" + i, slot); + nbt.setInteger("amount" + i, inv.amounts[i]); + } + } + + if(!nbt.hasNoTags()) drop.stackTagCompound = nbt; + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, drop)); + } + + return world.setBlockToAir(x, y, z); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + + TileEntityPneumoStorageMono inv = (TileEntityPneumoStorageMono) world.getTileEntity(x, y, z); + + if(inv != null && stack.hasTagCompound()) { + for(int i = 0; i < 3; i++) { + inv.setInventorySlotContents(i, ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("slot" + i))); + inv.amounts[i] = stack.stackTagCompound.getInteger("amount" + i); + } + } + + super.onBlockPlacedBy(world, x, y, z, player, stack); + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/commands/CommandWikiRender.java b/src/main/java/com/hbm/commands/CommandWikiRender.java new file mode 100644 index 000000000..4ff79e9ba --- /dev/null +++ b/src/main/java/com/hbm/commands/CommandWikiRender.java @@ -0,0 +1,95 @@ +package com.hbm.commands; + +import java.util.ArrayList; +import java.util.Locale; +import java.util.List; +import java.util.Arrays; + +import com.hbm.inventory.gui.GUIScreenWikiRender; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemDepletedFuel; +import com.hbm.items.machine.ItemFluidDuct; +import com.hbm.items.machine.ItemRBMKPellet; +import com.hbm.main.MainRegistry; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.relauncher.FMLLaunchHandler; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.command.WrongUsageException; +import net.minecraft.command.PlayerNotFoundException; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.client.ClientCommandHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.command.CommandBase; +import net.minecraft.item.Item; +import net.minecraft.init.Items; +import net.minecraft.init.Blocks; + +// horribly written command so you can render more than fucking guns without having to decompile the JAR +public class CommandWikiRender extends CommandBase { + + public static void register() { + if(FMLLaunchHandler.side() != Side.CLIENT) return; + ClientCommandHandler.instance.registerCommand(new CommandWikiRender()); + } + + @Override + public String getCommandName() { + return "ntmwikirender"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return String.format(Locale.US, "%s/%s %s- Render screenshots of a selected item type (e.g ItemGunBaseNT). Intended for developers and wiki editors only.", EnumChatFormatting.GREEN, + getCommandName(), EnumChatFormatting.LIGHT_PURPLE); + } + + @Override + public boolean canCommandSenderUseCommand(ICommandSender sender) { + return true; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + if(!(sender instanceof EntityPlayer)) { + throw new PlayerNotFoundException(); + } + + if(args.length == 0) { + throw new WrongUsageException(getCommandUsage(sender), new Object[0]); + } + + MainRegistry.logger.info("Taking a screenshot of " + args[0]); + + List ignoredItems = Arrays.asList(ModItems.achievement_icon, Items.spawn_egg, Item.getItemFromBlock(Blocks.mob_spawner)); + + List> collapsedClasses = Arrays.asList(ItemRBMKPellet.class, ItemDepletedFuel.class, ItemFluidDuct.class); + + String prefix = args[0]; + int slotScale = 16; + boolean ignoreNonNTM = true; + + List stacks = new ArrayList(); + for(Object reg : Item.itemRegistry) { + Item item = (Item) reg; + if(ignoreNonNTM && !Item.itemRegistry.getNameForObject(item).startsWith("hbm:")) + continue; + if(ignoredItems.contains(item)) + continue; + if(!item.getClass().getSimpleName().equalsIgnoreCase(args[0]) + && (net.minecraft.block.Block.getBlockFromItem(item) == null || !net.minecraft.block.Block.getBlockFromItem(item).getClass().getSimpleName().equalsIgnoreCase(args[0]))) + continue; + if(collapsedClasses.contains(item.getClass())) { + stacks.add(new ItemStack(item)); + } else { + item.getSubItems(item, null, stacks); + } + } + + Minecraft.getMinecraft().thePlayer.closeScreen(); + FMLCommonHandler.instance().showGuiScreen(new GUIScreenWikiRender(stacks.toArray(new ItemStack[0]), prefix, "wiki-block-renders-256", slotScale)); + } +} \ No newline at end of file diff --git a/src/main/java/com/hbm/config/MobConfig.java b/src/main/java/com/hbm/config/MobConfig.java index f5b583df0..337a32754 100644 --- a/src/main/java/com/hbm/config/MobConfig.java +++ b/src/main/java/com/hbm/config/MobConfig.java @@ -5,8 +5,7 @@ import net.minecraftforge.common.config.Configuration; public class MobConfig { public static boolean enableMaskman = true; - public static int maskmanDelay = 60 * 60 * 60; - public static int maskmanChance = 3; + public static int maskmanDelay = 20 * 60; // 20 minutes public static int maskmanMinRad = 50; public static boolean maskmanUnderground = true; @@ -78,8 +77,7 @@ public class MobConfig { final String CATEGORY = CommonConfig.CATEGORY_MOBS; enableMaskman = CommonConfig.createConfigBool(config, CATEGORY, "12.M00_enableMaskman", "Whether mask man should spawn", true); - maskmanDelay = CommonConfig.createConfigInt(config, CATEGORY, "12.M01_maskmanDelay", "How many world ticks need to pass for a check to be performed", 60 * 60 * 60); - maskmanChance = CommonConfig.createConfigInt(config, CATEGORY, "12.M02_maskmanChance", "1:x chance to spawn mask man, must be at least 1", 3); + maskmanDelay = CommonConfig.createConfigInt(config, CATEGORY, "12.M01_maskmanTimer", "How many world seconds need to pass for mask man to spawn, if the requirements are met", 20 * 60); maskmanMinRad = CommonConfig.createConfigInt(config, CATEGORY, "12.M03_maskmanMinRad", "The amount of radiation needed for mask man to spawn", 50); maskmanUnderground = CommonConfig.createConfigBool(config, CATEGORY, "12.M04_maskmanUnderound", "Whether players need to be underground for mask man to spawn", true); diff --git a/src/main/java/com/hbm/config/VersatileConfig.java b/src/main/java/com/hbm/config/VersatileConfig.java index ee0b4ac8d..31ada5393 100644 --- a/src/main/java/com/hbm/config/VersatileConfig.java +++ b/src/main/java/com/hbm/config/VersatileConfig.java @@ -18,7 +18,7 @@ public class VersatileConfig { public static int getSchrabOreChance() { if(GeneralConfig.enableLBSM) return GeneralConfig.schrabRate; - return 100; + return 250; } public static void applyPotionSickness(EntityLivingBase entity, int duration) { diff --git a/src/main/java/com/hbm/config/WorldConfig.java b/src/main/java/com/hbm/config/WorldConfig.java index ce87ae285..d558ac37f 100644 --- a/src/main/java/com/hbm/config/WorldConfig.java +++ b/src/main/java/com/hbm/config/WorldConfig.java @@ -32,7 +32,6 @@ public class WorldConfig { public static int bedrockOilSpawn = 200; public static int meteoriteSpawn = 500; - public static boolean newBedrockOres = true; public static int bedrockIronSpawn = 100; public static int bedrockCopperSpawn = 200; public static int bedrockBoraxSpawn = 50; @@ -150,7 +149,6 @@ public class WorldConfig { bedrockOilSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.22_bedrockOilSpawnRate", "Spawns a bedrock oil node every nTH chunk", 200); meteoriteSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.23_meteoriteSpawnRate", "Spawns a fallen meteorite every nTH chunk", 200); - newBedrockOres = CommonConfig.createConfigBool(config, CATEGORY_OREGEN, "2.NB_newBedrockOres", "Enables the newer genreric bedrock ores", true); bedrockIronSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B00_bedrockIronWeight", "Spawn weight for iron bedrock ore", 100); bedrockCopperSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B01_bedrockCopperWeight", "Spawn weight for copper bedrock ore", 200); bedrockBoraxSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B02_bedrockBoraxWeight", "Spawn weight for borax bedrock ore", 50); diff --git a/src/main/java/com/hbm/crafting/MineralRecipes.java b/src/main/java/com/hbm/crafting/MineralRecipes.java index 626922cc9..6cad0a65e 100644 --- a/src/main/java/com/hbm/crafting/MineralRecipes.java +++ b/src/main/java/com/hbm/crafting/MineralRecipes.java @@ -230,9 +230,6 @@ public class MineralRecipes { addBilletToIngot(ModItems.ingot_hes, ModItems.billet_hes); addBilletToIngot(ModItems.ingot_australium, ModItems.billet_australium);*/ - GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_balefire_gold, 1), new Object[] { ModItems.billet_au198, ModItems.cell_antimatter, ModItems.pellet_charged }); - GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_flashlead, 2), new Object[] { ModItems.billet_balefire_gold, ModItems.billet_pb209, ModItems.cell_antimatter }); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg), new Object[] { ModItems.billet_pu238, ModItems.billet_pu238, ModItems.billet_pu238, IRON.plate() })); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_radium), new Object[] { ModItems.billet_ra226, ModItems.billet_ra226, ModItems.billet_ra226, IRON.plate() })); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_weak), new Object[] { ModItems.billet_u238, ModItems.billet_u238, ModItems.billet_pu238, IRON.plate() })); diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index 1640cae61..d54702964 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -62,20 +62,19 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_pickaxe, 1), new Object[] { "RDM", " PB", " P ", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', EnumBatteryPack.BATTERY_LEAD.stack() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_axe, 1), new Object[] { " DP", "RRM", " PB", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', EnumBatteryPack.BATTERY_LEAD.stack() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_shovel, 1), new Object[] { " P", "RRM", " B", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', EnumBatteryPack.BATTERY_LEAD.stack() }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.centri_stick, 1), new Object[] { ModItems.centrifuge_element, ModItems.energy_core, KEY_STICK }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.smashing_hammer, 1), new Object[] { "STS", "SPS", " P ", 'S', STEEL.block(), 'T', W.block(), 'P', ANY_PLASTIC.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.meteorite_sword, 1), new Object[] { " B", "GB ", "SG ", 'B', ModItems.blade_meteorite, 'G', GOLD.plate(), 'S', KEY_STICK }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.dwarven_pickaxe, 1), new Object[] { "CIC", " S ", " S ", 'C', CU.ingot(), 'I', IRON.ingot(), 'S', KEY_STICK }); //Super pickaxes - CraftingManager.addRecipeAuto(new ItemStack(ModItems.bismuth_pickaxe, 1), new Object[] { " BM", "BPB", "TB ", 'B', ModItems.ingot_bismuth, 'M', ModItems.ingot_meteorite, 'P', ModItems.starmetal_pickaxe, 'T', W.bolt() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.bismuth_pickaxe, 1), new Object[] { " BM", "BPB", "TB ", 'B', BI.ingot(), 'M', ModItems.ingot_meteorite, 'P', ModItems.starmetal_pickaxe, 'T', W.bolt() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.volcanic_pickaxe, 1), new Object[] { " BM", "BPB", "TB ", 'B', ModItems.gem_volcanic, 'M', ModItems.ingot_meteorite, 'P', ModItems.starmetal_pickaxe, 'T', W.bolt() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.chlorophyte_pickaxe, 1), new Object[] { " SD", "APS", "FA ", 'S', ModItems.blades_steel, 'D', ModItems.powder_chlorophyte, 'A', FIBER.ingot(), 'P', ModItems.bismuth_pickaxe, 'F', DURA.bolt() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.chlorophyte_pickaxe, 1), new Object[] { " SD", "APS", "FA ", 'S', ModItems.blades_steel, 'D', ModItems.powder_chlorophyte, 'A', FIBER.ingot(), 'P', ModItems.volcanic_pickaxe, 'F', DURA.bolt() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.mese_pickaxe, 1), new Object[] { " SD", "APS", "FA ", 'S', ModItems.blades_desh, 'D', ModItems.powder_dineutronium, 'A', ModItems.plate_paa, 'P', ModItems.chlorophyte_pickaxe, 'F', ModItems.shimmer_handle }); //Super Axes - CraftingManager.addRecipeAuto(new ItemStack(ModItems.bismuth_axe, 1), new Object[] { " BM", "BPB", "TB ", 'B', ModItems.ingot_bismuth, 'M', ModItems.ingot_meteorite, 'P', ModItems.starmetal_axe, 'T', W.bolt() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.bismuth_axe, 1), new Object[] { " BM", "BPB", "TB ", 'B', BI.ingot(), 'M', ModItems.ingot_meteorite, 'P', ModItems.starmetal_axe, 'T', W.bolt() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.volcanic_axe, 1), new Object[] { " BM", "BPB", "TB ", 'B', ModItems.gem_volcanic, 'M', ModItems.ingot_meteorite, 'P', ModItems.starmetal_axe, 'T', W.bolt() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.chlorophyte_axe, 1), new Object[] { " SD", "APS", "FA ", 'S', ModItems.blades_steel, 'D', ModItems.powder_chlorophyte, 'A', FIBER.ingot(), 'P', ModItems.bismuth_axe, 'F', DURA.bolt() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.chlorophyte_axe, 1), new Object[] { " SD", "APS", "FA ", 'S', ModItems.blades_steel, 'D', ModItems.powder_chlorophyte, 'A', FIBER.ingot(), 'P', ModItems.volcanic_axe, 'F', DURA.bolt() }); @@ -111,7 +110,7 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.oil_detector, 1), new Object[] { "W I", "WCI", "PPP", 'W', GOLD.wireFine(), 'I', CU.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG), 'P', STEEL.plate() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.turret_chip, 1), new Object[] { "WWW", "CPC", "WWW", 'W', GOLD.wireFine(), 'P', ANY_PLASTIC.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.survey_scanner, 1), new Object[] { "SWS", " G ", "PCP", 'W', GOLD.wireFine(), 'P', ANY_PLASTIC.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'S', STEEL.plate(), 'G', GOLD.ingot() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.geiger_counter, 1), new Object[] { "GPP", "WCS", "WBB", 'W', GOLD.wireFine(), 'P', ANY_RUBBER.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'G', GOLD.ingot(), 'S', STEEL.plate(), 'B', ModItems.ingot_beryllium }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.geiger_counter, 1), new Object[] { "GPP", "WCS", "WBB", 'W', GOLD.wireFine(), 'P', ANY_RUBBER.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'G', GOLD.ingot(), 'S', STEEL.plate(), 'B', BE.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.dosimeter, 1), new Object[] { "WGW", "WCW", "WBW", 'W', KEY_PLANKS, 'G', KEY_ANYPANE, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE), 'B', BE.ingot() }); CraftingManager.addShapelessAuto(new ItemStack(ModBlocks.geiger), new Object[] { ModItems.geiger_counter }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.digamma_diagnostic), new Object[] { ModItems.geiger_counter, PO210.billet(), ASBESTOS.ingot() }); diff --git a/src/main/java/com/hbm/entity/item/EntityMovingConveyorObject.java b/src/main/java/com/hbm/entity/item/EntityMovingConveyorObject.java index 228c8230a..a2175a581 100644 --- a/src/main/java/com/hbm/entity/item/EntityMovingConveyorObject.java +++ b/src/main/java/com/hbm/entity/item/EntityMovingConveyorObject.java @@ -1,5 +1,9 @@ package com.hbm.entity.item; +import java.util.List; + +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.standard.ExplosionEffectTiny; import com.hbm.lib.Library; import com.hbm.util.fauxpointtwelve.BlockPos; @@ -76,6 +80,21 @@ public abstract class EntityMovingConveyorObject extends Entity { if(this.ticksExisted <= 5) { return; } + + // cram check every 20s + if((ticksExisted + this.getEntityId()) % 400 == 0) { + List objs = worldObj.getEntitiesWithinAABB(EntityMovingConveyorObject.class, this.boundingBox.expand(0.125, 0.125, 0.125)); + if(objs.size() >= 25) { + for(EntityMovingConveyorObject obj : objs) obj.setDead(); + ExplosionVNT vnt = new ExplosionVNT(worldObj, posX, posY + 0.125, posZ, 1, this); + vnt.setSFX(new ExplosionEffectTiny()); + vnt.explode(); + int x = (int) Math.floor(posX); + int y = (int) Math.floor(posY); + int z = (int) Math.floor(posZ); + if(worldObj.getBlock(x, y, z) instanceof IConveyorBelt) worldObj.func_147480_a(x, y, z, false); + } + } int blockX = (int) Math.floor(posX); int blockY = (int) Math.floor(posY); diff --git a/src/main/java/com/hbm/entity/item/EntityMovingItem.java b/src/main/java/com/hbm/entity/item/EntityMovingItem.java index 364aafc29..16c9aa7c4 100644 --- a/src/main/java/com/hbm/entity/item/EntityMovingItem.java +++ b/src/main/java/com/hbm/entity/item/EntityMovingItem.java @@ -122,6 +122,7 @@ public class EntityMovingItem extends EntityMovingConveyorObject implements ICon this.setDead(); EntityItem item = new EntityItem(worldObj, posX + motionX * 2, posY + motionY * 2, posZ + motionZ * 2, this.getItemStack()); + item.lifespan = 60 * 20; item.motionX = this.motionX * 2; item.motionY = 0.1; item.motionZ = this.motionZ * 2; diff --git a/src/main/java/com/hbm/entity/mob/EntityFBI.java b/src/main/java/com/hbm/entity/mob/EntityFBI.java index c1f29e7a4..3480c0c60 100644 --- a/src/main/java/com/hbm/entity/mob/EntityFBI.java +++ b/src/main/java/com/hbm/entity/mob/EntityFBI.java @@ -160,9 +160,7 @@ public class EntityFBI extends EntityMob implements IRangedAttackMob { canDestroy.add(ModBlocks.crate_iron); canDestroy.add(ModBlocks.crate_steel); canDestroy.add(ModBlocks.machine_diesel); - canDestroy.add(ModBlocks.machine_rtg_grey); - canDestroy.add(ModBlocks.machine_minirtg); - canDestroy.add(ModBlocks.machine_powerrtg); + canDestroy.add(ModBlocks.machine_rtg); canDestroy.add(ModBlocks.machine_cyclotron); canDestroy.add(Blocks.chest); canDestroy.add(Blocks.trapped_chest); diff --git a/src/main/java/com/hbm/entity/mob/EntityMaskMan.java b/src/main/java/com/hbm/entity/mob/EntityMaskMan.java index 64e1658c0..c29a6ce1d 100644 --- a/src/main/java/com/hbm/entity/mob/EntityMaskMan.java +++ b/src/main/java/com/hbm/entity/mob/EntityMaskMan.java @@ -92,25 +92,18 @@ public class EntityMaskMan extends EntityMob implements IBossDisplayData, IRadia } @Override - public void onDeath(DamageSource p_70645_1_) { - super.onDeath(p_70645_1_); + public void onDeath(DamageSource source) { + super.onDeath(source); - List players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, this.boundingBox.expand(50, 50, 50)); + List players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, this.boundingBox.expand(100, 100, 100)); for(EntityPlayer player : players) { player.triggerAchievement(MainRegistry.bossMaskman); } } - @Override - public boolean isAIEnabled() { - return true; - } - - @Override - protected boolean canDespawn() { - return false; - } + @Override public boolean isAIEnabled() { return true; } + @Override protected boolean canDespawn() { return false; } @Override protected void dropFewItems(boolean bool, int i) { diff --git a/src/main/java/com/hbm/entity/mob/ai/EntityAIMaskmanMinigun.java b/src/main/java/com/hbm/entity/mob/ai/EntityAIMaskmanMinigun.java index c794a1d3b..f0dca734a 100644 --- a/src/main/java/com/hbm/entity/mob/ai/EntityAIMaskmanMinigun.java +++ b/src/main/java/com/hbm/entity/mob/ai/EntityAIMaskmanMinigun.java @@ -1,7 +1,7 @@ package com.hbm.entity.mob.ai; -import com.hbm.entity.projectile.EntityBulletBaseNT; -import com.hbm.handler.BulletConfigSyncingUtil; +import com.hbm.entity.projectile.EntityBulletBaseMK4; +import com.hbm.items.weapon.sedna.factory.XFactory762mm; import net.minecraft.entity.EntityCreature; import net.minecraft.entity.EntityLivingBase; @@ -9,51 +9,51 @@ import net.minecraft.entity.ai.EntityAIBase; import net.minecraft.util.Vec3; public class EntityAIMaskmanMinigun extends EntityAIBase { - + private EntityCreature owner; - private EntityLivingBase target; - int delay; - int timer; + private EntityLivingBase target; + int delay; + int timer; public EntityAIMaskmanMinigun(EntityCreature owner, boolean checkSight, boolean nearbyOnly, int delay) { this.owner = owner; this.delay = delay; - timer = delay; + this.timer = delay; } @Override public boolean shouldExecute() { - - EntityLivingBase entity = this.owner.getAttackTarget(); - if(entity == null) { - return false; - - } else { - this.target = entity; - double dist = Vec3.createVectorHelper(target.posX - owner.posX, target.posY - owner.posY, target.posZ - owner.posZ).lengthVector(); - return dist > 5 && dist < 10; - } + EntityLivingBase entity = this.owner.getAttackTarget(); + + if(entity == null || !entity.isEntityAlive()) { + return false; + } else { + this.target = entity; + double dist = Vec3.createVectorHelper(target.posX - owner.posX, target.posY - owner.posY, target.posZ - owner.posZ).lengthVector(); + return dist > 5 && dist < 10; + } } - - @Override - public boolean continueExecuting() { - return this.shouldExecute() || !this.owner.getNavigator().noPath(); - } @Override - public void updateTask() { - + public boolean continueExecuting() { + return this.shouldExecute() || !this.owner.getNavigator().noPath(); + } + + @Override + public void updateTask() { + timer--; - + + // TEST + if(target != null) this.owner.getLookHelper().setLookPositionWithEntity(this.target, 15F, 15F); + if(timer <= 0) { timer = delay; - EntityBulletBaseNT bullet = new EntityBulletBaseNT(owner.worldObj, BulletConfigSyncingUtil.MASKMAN_BULLET, owner, target, 1.0F, 0); + EntityBulletBaseMK4 bullet = new EntityBulletBaseMK4(this.owner, XFactory762mm.r762_fmj, 5F, 0.075F, -1.5, -1.5, 0); owner.worldObj.spawnEntityInWorld(bullet); owner.playSound("hbm:weapon.calShoot", 1.0F, 1.0F); } - - this.owner.rotationYaw = this.owner.rotationYawHead; - } + } } diff --git a/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphid.java b/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphid.java index ac2f90e7d..95d1e6578 100644 --- a/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphid.java +++ b/src/main/java/com/hbm/entity/mob/glyphid/EntityGlyphid.java @@ -223,6 +223,13 @@ public class EntityGlyphid extends EntityMob implements IResistanceProvider { @Override protected void updateEntityActionState() { super.updateEntityActionState(); + + // re-scan for new targets every so often + // every third glyphid does not do this, so you cannot "juggle" hordes on purpose + if(this.getEntityId() % 3 > 0 && (this.getEntityId() + this.ticksExisted) % 100 == 0) { + Entity newTarget = this.findPlayerToAttack(); + if(newTarget != null) this.setTarget(newTarget); + } if(!this.isPotionActive(Potion.blindness)) { if (!this.hasPath()) { diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java index 02970ee35..c272786aa 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseNT.java @@ -5,12 +5,6 @@ import java.util.ArrayList; import java.util.List; import com.hbm.blocks.bomb.BlockDetonatable; -import com.hbm.entity.effect.EntityCloudFleijaRainbow; -import com.hbm.entity.effect.EntityEMPBlast; -import com.hbm.entity.logic.EntityNukeExplosionMK3; -import com.hbm.entity.logic.EntityNukeExplosionMK5; -import com.hbm.explosion.ExplosionLarge; -import com.hbm.explosion.ExplosionNukeGeneric; import com.hbm.explosion.vanillant.ExplosionVNT; import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard; import com.hbm.explosion.vanillant.standard.BlockMutatorFire; @@ -25,7 +19,6 @@ import com.hbm.handler.threading.PacketThreading; import com.hbm.main.MainRegistry; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.potion.HbmPotion; -import com.hbm.util.ArmorUtil; import com.hbm.util.BobMathUtil; import com.hbm.util.Tuple.Pair; @@ -34,7 +27,6 @@ import cpw.mods.fml.relauncher.ReflectionHelper; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; @@ -182,29 +174,6 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet return; } - if(worldObj.isRemote && config.style == BulletConfiguration.STYLE_TAU) { - if(trailNodes.isEmpty()) { - this.ignoreFrustumCheck = true; - trailNodes.add(new Pair(Vec3.createVectorHelper(-motionX * 2, -motionY * 2, -motionZ * 2), 0D)); - } else { - trailNodes.add(new Pair(Vec3.createVectorHelper(0, 0, 0), 1D)); - } - } - - if(worldObj.isRemote && this.config.blackPowder && this.ticksExisted == 1) { - - for(int i = 0; i < 15; i++) { - double mod = rand.nextDouble(); - this.worldObj.spawnParticle("smoke", this.posX, this.posY, this.posZ, - (this.motionX + rand.nextGaussian() * 0.05) * mod, - (this.motionY + rand.nextGaussian() * 0.05) * mod, - (this.motionZ + rand.nextGaussian() * 0.05) * mod); - } - - double mod = 0.5; - this.worldObj.spawnParticle("flame", this.posX + this.motionX * mod, this.posY + this.motionY * mod, this.posZ + this.motionZ * mod, 0, 0, 0); - } - if(!worldObj.isRemote) { if(config.maxAge == 0) { @@ -251,7 +220,7 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet boolean hRic = rand.nextInt(100) < config.HBRC; boolean doesRic = config.doesRicochet && hRic; - if(!config.isSpectral && !doesRic) { + if(!doesRic) { this.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord); this.onBlockImpact(mop.blockX, mop.blockY, mop.blockZ, mop.sideHit); } @@ -293,7 +262,6 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet worldObj.playSoundAtEntity(this, "hbm:weapon.gBounce", 1.0F, 1.0F); this.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord); - onRicochet(mop.blockX, mop.blockY, mop.blockZ); //worldObj.setBlock((int) Math.floor(posX), (int) Math.floor(posY), (int) Math.floor(posZ), Blocks.dirt); @@ -304,10 +272,6 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet } } - /*this.posX += (mop.hitVec.xCoord - this.posX) * 0.6; - this.posY += (mop.hitVec.yCoord - this.posY) * 0.6; - this.posZ += (mop.hitVec.zCoord - this.posZ) * 0.6;*/ - this.motionX *= config.bounceMod; this.motionY *= config.bounceMod; this.motionZ *= config.bounceMod; @@ -380,7 +344,7 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet config.bntImpact.behaveBlockHit(this, bX, bY, bZ, sideHit); if(!worldObj.isRemote) { - if(!config.liveAfterImpact && !config.isSpectral && bY > -1 && !this.inGround) this.setDead(); + if(bY > -1 && !this.inGround) this.setDead(); if(!config.doesPenetrate && bY == -1) this.setDead(); } @@ -394,24 +358,6 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet if(worldObj.rand.nextInt(3) == 0 && worldObj.getBlock((int)posX, (int)posY, (int)posZ - 1) == Blocks.air) worldObj.setBlock((int)posX, (int)posY, (int)posZ - 1, Blocks.fire); } - if(config.emp > 0) - ExplosionNukeGeneric.empBlast(this.worldObj, (int)(this.posX + 0.5D), (int)(this.posY + 0.5D), (int)(this.posZ + 0.5D), config.emp); - - if(config.emp > 3) { - if (!this.worldObj.isRemote) { - - EntityEMPBlast cloud = new EntityEMPBlast(this.worldObj, config.emp); - cloud.posX = this.posX; - cloud.posY = this.posY + 0.5F; - cloud.posZ = this.posZ; - - this.worldObj.spawnEntityInWorld(cloud); - } - } - - if(config.jolt > 0 && !worldObj.isRemote) - ExplosionLarge.jolt(worldObj, posX, posY, posZ, config.jolt, 150, 0.25); - if(config.explosive > 0 && !worldObj.isRemote) { //worldObj.newExplosion(this.thrower, posX, posY, posZ, config.explosive, config.incendiary > 0, config.blockDamage); ExplosionVNT vnt = new ExplosionVNT(worldObj, posX, posY, posZ, config.explosive, this.thrower); @@ -424,32 +370,6 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet vnt.explode(); } - if(config.shrapnel > 0 && !worldObj.isRemote) - ExplosionLarge.spawnShrapnels(worldObj, posX, posY, posZ, config.shrapnel); - - if(config.rainbow > 0 && !worldObj.isRemote) { - EntityNukeExplosionMK3 ex = EntityNukeExplosionMK3.statFacFleija(worldObj, posX, posY, posZ, config.rainbow); - if(!ex.isDead) { - this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "random.explode", 100.0f, this.worldObj.rand.nextFloat() * 0.1F + 0.9F); - worldObj.spawnEntityInWorld(ex); - - EntityCloudFleijaRainbow cloud = new EntityCloudFleijaRainbow(this.worldObj, config.rainbow); - cloud.posX = this.posX; - cloud.posY = this.posY; - cloud.posZ = this.posZ; - this.worldObj.spawnEntityInWorld(cloud); - } - } - - if(config.nuke > 0 && !worldObj.isRemote) { - worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, config.nuke, posX, posY, posZ)); - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "muke"); - if(MainRegistry.polaroidID == 11 || rand.nextInt(100) == 0) data.setBoolean("balefire", true); - PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, posX, posY + 0.5, posZ), new TargetPoint(dimension, posX, posY, posZ, 250)); - worldObj.playSoundEffect(posX, posY, posZ, "hbm:weapon.mukeExplosion", 15.0F, 1.0F); - } - if(config.destroysBlocks && !worldObj.isRemote) { if(block.getBlockHardness(worldObj, bX, bY, bZ) <= 120) worldObj.func_147480_a(bX, bY, bZ, false); @@ -463,30 +383,15 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet } } - //for when a bullet dies by hitting a block - private void onRicochet(int bX, int bY, int bZ) { - - if(config.bntRicochet != null) - config.bntRicochet.behaveBlockRicochet(this, bX, bY, bZ); - } - //for when a bullet dies by hitting an entity private void onEntityImpact(Entity e) { onEntityHurt(e); onBlockImpact(-1, -1, -1, -1); - - if(config.bntHit != null) - config.bntHit.behaveEntityHit(this, e); - - //this.setDead(); } //for when a bullet hurts an entity, not necessarily dying private void onEntityHurt(Entity e) { - if(config.bntHurt != null) - config.bntHurt.behaveEntityHurt(this, e); - if(config.incendiary > 0 && !worldObj.isRemote) { e.setFire(config.incendiary); } @@ -501,19 +406,6 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet ((EntityLivingBase)e).addPotionEffect(new PotionEffect(effect)); } } - - if(config.instakill && e instanceof EntityLivingBase && !worldObj.isRemote) { - - if(!(e instanceof EntityPlayer && ((EntityPlayer)e).capabilities.isCreativeMode)) - ((EntityLivingBase)e).setHealth(0.0F); - } - - if(config.caustic > 0 && e instanceof EntityPlayer){ - ArmorUtil.damageSuit((EntityPlayer)e, 0, config.caustic); - ArmorUtil.damageSuit((EntityPlayer)e, 1, config.caustic); - ArmorUtil.damageSuit((EntityPlayer)e, 2, config.caustic); - ArmorUtil.damageSuit((EntityPlayer)e, 3, config.caustic); - } } @Override @@ -521,11 +413,6 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet return this.config.doesPenetrate; } - @Override - public boolean isSpectral() { - return this.config.isSpectral; - } - @Override public int selfDamageDelay() { return this.config.selfDamageDelay; diff --git a/src/main/java/com/hbm/explosion/ExplosionBalefire.java b/src/main/java/com/hbm/explosion/ExplosionBalefire.java index 9df326909..1e40b08f1 100644 --- a/src/main/java/com/hbm/explosion/ExplosionBalefire.java +++ b/src/main/java/com/hbm/explosion/ExplosionBalefire.java @@ -127,53 +127,4 @@ public class ExplosionBalefire } } } - - /*private void breakColumn(int x, int z) - { - int dist = this.radius2 - (x * x + z * z); - if (dist > 0) - { - int pX = posX + x; - int pZ = posZ + z; - - int y = worldObj.getHeightValue(pX, pZ); - float strength = (float)dist / (float) this.radius; - - while(y > 0) { - - if(strength <= 10) { - if(worldObj.rand.nextInt(10) == 0) { - worldObj.setBlock(pX, y + 1, pZ, ModBlocks.balefire); - - if(worldObj.getBlock(pX, y, pZ) == ModBlocks.block_schrabidium_cluster) - worldObj.setBlock(pX, y, pZ, ModBlocks.block_euphemium_cluster, worldObj.getBlockMetadata(pX, y, pZ), 3); - } - - if(worldObj.getBlock(pX, y, pZ) == Blocks.stone) - worldObj.setBlock(pX, y, pZ, ModBlocks.sellafield_slaked); - if(worldObj.getBlock(pX, y - 1, pZ) == Blocks.stone) - worldObj.setBlock(pX, y - 1, pZ, ModBlocks.sellafield_slaked); - if(worldObj.getBlock(pX, y - 2, pZ) == Blocks.stone) - worldObj.setBlock(pX, y - 2, pZ, ModBlocks.sellafield_slaked); - if(worldObj.getBlock(pX, y - 3, pZ) == Blocks.stone) - worldObj.setBlock(pX, y - 3, pZ, ModBlocks.sellafield_slaked); - if(worldObj.getBlock(pX, y - 4, pZ) == Blocks.stone) - worldObj.setBlock(pX, y - 4, pZ, ModBlocks.sellafield_slaked); - - return; - } - - float hardness = worldObj.getBlock(pX, y, pZ).getBlockHardness(worldObj, pX, y, pZ); - - if(worldObj.getBlock(pX, y, pZ).getMaterial().isLiquid()) - hardness = Blocks.air.getBlockHardness(worldObj, pX, y + 1, pZ); - - strength -= hardness; - - worldObj.setBlockToAir(pX, y, pZ); - - y--; - } - } - }*/ } diff --git a/src/main/java/com/hbm/extprop/HbmPlayerProps.java b/src/main/java/com/hbm/extprop/HbmPlayerProps.java index 292c04412..29983c7df 100644 --- a/src/main/java/com/hbm/extprop/HbmPlayerProps.java +++ b/src/main/java/com/hbm/extprop/HbmPlayerProps.java @@ -25,35 +25,43 @@ public class HbmPlayerProps implements IExtendedEntityProperties { public static final String key = "NTM_EXT_PLAYER"; public EntityPlayer player; - public boolean hasReceivedBook = false; - + /* Toggles for keybind */ public boolean enableHUD = true; public boolean enableBackpack = true; public boolean enableMagnet = true; + /** Keybind tracking */ private boolean[] keysPressed = new boolean[EnumKeybind.values().length]; + + /* Dashes for bismuth armor/cloud in a bottle */ public boolean dashActivated = true; - - public static final int dashCooldownLength = 5; public int dashCooldown = 0; - public int totalDashCount = 0; public int stamina = 0; + public static final int dashCooldownLength = 5; - public static final int plinkCooldownLength = 10; + /** Cooldown for armor plinking noise when canceling damage */ public int plinkCooldown = 0; + public static final int plinkCooldownLength = 10; + /** Shield infusion */ public float shield = 0; public float maxShield = 0; public int lastDamage = 0; public static final float shieldCap = 100; + /** Latnern repair/destroy count */ public int reputation; + /** Hack for allowing ladders on multiblocks */ public boolean isOnLadder = false; + /** Pulling the pin on a grenade - it's a player prop instead of an NBT trait */ public int grenadeDeployment; + + /** Maskman timer */ + public int maskManTimer = 0; public HbmPlayerProps(EntityPlayer player) { this.player = player; @@ -187,7 +195,6 @@ public class HbmPlayerProps implements IExtendedEntityProperties { public void init(Entity entity, World world) { } public void serialize(ByteBuf buf) { - buf.writeBoolean(this.hasReceivedBook); buf.writeFloat(this.shield); buf.writeFloat(this.maxShield); buf.writeBoolean(this.enableBackpack); @@ -199,7 +206,6 @@ public class HbmPlayerProps implements IExtendedEntityProperties { public void deserialize(ByteBuf buf) { if(buf.readableBytes() > 0) { - this.hasReceivedBook = buf.readBoolean(); this.shield = buf.readFloat(); this.maxShield = buf.readFloat(); this.enableBackpack = buf.readBoolean(); @@ -216,7 +222,6 @@ public class HbmPlayerProps implements IExtendedEntityProperties { NBTTagCompound props = new NBTTagCompound(); - props.setBoolean("hasReceivedBook", hasReceivedBook); props.setFloat("shield", shield); props.setFloat("maxShield", maxShield); props.setBoolean("enableBackpack", enableBackpack); @@ -224,6 +229,7 @@ public class HbmPlayerProps implements IExtendedEntityProperties { props.setBoolean("enableHUD", enableHUD); props.setInteger("reputation", reputation); props.setBoolean("isOnLadder", isOnLadder); + props.setInteger("maskManTimer", maskManTimer); nbt.setTag("HbmPlayerProps", props); } @@ -235,7 +241,6 @@ public class HbmPlayerProps implements IExtendedEntityProperties { NBTTagCompound props = (NBTTagCompound) nbt.getTag("HbmPlayerProps"); if(props != null) { - this.hasReceivedBook = props.getBoolean("hasReceivedBook"); this.shield = props.getFloat("shield"); this.maxShield = props.getFloat("maxShield"); this.enableBackpack = props.getBoolean("enableBackpack"); @@ -243,6 +248,7 @@ public class HbmPlayerProps implements IExtendedEntityProperties { this.enableHUD = props.getBoolean("enableHUD"); this.reputation = props.getInteger("reputation"); this.isOnLadder = props.getBoolean("isOnLadder"); + this.maskManTimer = props.getInteger("maskManTimer"); } } } diff --git a/src/main/java/com/hbm/handler/BossSpawnHandler.java b/src/main/java/com/hbm/handler/BossSpawnHandler.java index 756d1f1d8..1e5d82382 100644 --- a/src/main/java/com/hbm/handler/BossSpawnHandler.java +++ b/src/main/java/com/hbm/handler/BossSpawnHandler.java @@ -1,8 +1,12 @@ package com.hbm.handler; +import java.util.List; import java.util.Random; import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockPedestal; +import com.hbm.blocks.generic.BlockPedestal.PedestalEntry; +import com.hbm.blocks.generic.BlockPedestal.PedestalEntryType; import com.hbm.config.GeneralConfig; import com.hbm.config.MobConfig; import com.hbm.config.WorldConfig; @@ -13,6 +17,7 @@ import com.hbm.entity.mob.EntityMaskMan; import com.hbm.entity.mob.EntityRADBeast; import com.hbm.entity.projectile.EntityMeteor; import com.hbm.extprop.HbmLivingProps; +import com.hbm.extprop.HbmPlayerProps; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; import com.hbm.util.ContaminationUtil; @@ -29,6 +34,7 @@ import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.Vec3; +import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; import net.minecraftforge.event.ForgeEventFactory; @@ -40,38 +46,49 @@ public class BossSpawnHandler { public static void rollTheDice(World world) { /* - * Spawns every 3 hours with a 33% chance if + * Spawns every 20 minutes if * - the player is 3 blocks below the surface * - the player has at least 50 RAD * - the player has either crafted or placed an ore acidizer before */ - if(MobConfig.enableMaskman) { - - if(world.getTotalWorldTime() % MobConfig.maskmanDelay == 0) { - - if(world.rand.nextInt(MobConfig.maskmanChance) == 0 && !world.playerEntities.isEmpty() && world.provider.isSurfaceWorld()) { //33% chance only if there is a player online - - EntityPlayer player = (EntityPlayer) world.playerEntities.get(world.rand.nextInt(world.playerEntities.size())); //choose a random player - int id = Item.getIdFromItem(Item.getItemFromBlock(ModBlocks.machine_crystallizer)); - - StatBase statCraft = StatList.objectCraftStats[id]; - StatBase statPlace = StatList.objectUseStats[id]; - - if(!(player instanceof EntityPlayerMP)) return; - EntityPlayerMP playerMP = (EntityPlayerMP) player; - - boolean acidizerStat = !GeneralConfig.enableStatReRegistering || (statCraft != null && playerMP.func_147099_x().writeStat(statCraft) > 0)|| (statPlace != null && playerMP.func_147099_x().writeStat(statPlace) > 0); - - if(acidizerStat && ContaminationUtil.getRads(player) >= MobConfig.maskmanMinRad && (world.getHeightValue((int)player.posX, (int)player.posZ) > player.posY + 3 || !MobConfig.maskmanUnderground)) { //if the player has more than 50 RAD and is underground - - player.addChatComponentMessage(new ChatComponentText("The mask man is about to claim another victim.").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); - + if(MobConfig.enableMaskman && world.getTotalWorldTime() % 20 == 0 && world.provider.isSurfaceWorld() && world.difficultySetting != EnumDifficulty.PEACEFUL) { + + for(Object o : world.playerEntities) { + if(!(o instanceof EntityPlayerMP)) return; + EntityPlayerMP player = (EntityPlayerMP) o; + + int id = Item.getIdFromItem(Item.getItemFromBlock(ModBlocks.machine_crystallizer)); + StatBase statCraft = StatList.objectCraftStats[id]; + StatBase statPlace = StatList.objectUseStats[id]; + + boolean acidizerStat = !GeneralConfig.enableStatReRegistering || (statCraft != null && player.func_147099_x().writeStat(statCraft) > 0)|| (statPlace != null && player.func_147099_x().writeStat(statPlace) > 0); + boolean hasRads = ContaminationUtil.getRads(player) >= MobConfig.maskmanMinRad; + boolean underground = world.getHeightValue((int) Math.floor(player.posX), (int) Math.floor(player.posZ)) > player.posY + 3 || !MobConfig.maskmanUnderground; + + if(acidizerStat && hasRads && underground) { + HbmPlayerProps data = HbmPlayerProps.getData(player); + + data.maskManTimer++; + + if(data.maskManTimer == MobConfig.maskmanDelay - 60) { + player.addChatComponentMessage(new ChatComponentText("The mask man draws near.").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); + } + + if(data.maskManTimer >= MobConfig.maskmanDelay) { + data.maskManTimer = 0; + double spawnX = player.posX + world.rand.nextGaussian() * 20; double spawnZ = player.posZ + world.rand.nextGaussian() * 20; - double spawnY = world.getHeightValue((int)spawnX, (int)spawnZ); - - trySpawn(world, (float)spawnX, (float)spawnY, (float)spawnZ, new EntityMaskMan(world)); + double spawnY = world.getHeightValue((int) Math.floor(spawnX), (int) Math.floor(spawnZ)); + if(trySpawn(world, (float) spawnX, (float) spawnY, (float) spawnZ, new EntityMaskMan(world))) { + player.addChatComponentMessage(new ChatComponentText("The mask man is about to claim another victim.").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); + } else { + player.addChatComponentMessage(new ChatComponentText("Seems like mask man couldn't come today.").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.BLUE))); + } } + + } else { + HbmPlayerProps.getData(player).maskManTimer = 0; } } } @@ -169,8 +186,7 @@ public class BossSpawnHandler { } } - private static void trySpawn(World world, float x, float y, float z, EntityLiving e) { - + private static boolean trySpawn(World world, float x, float y, float z, EntityLiving e) { e.setLocationAndAngles(x, y, z, world.rand.nextFloat() * 360.0F, 0.0F); Result canSpawn = ForgeEventFactory.canEntitySpawn(e, world, x, y, z); @@ -179,7 +195,10 @@ public class BossSpawnHandler { world.spawnEntityInWorld(e); ForgeEventFactory.doSpecialSpawn(e, world, x, y, z); e.onSpawnWithEgg(null); + return true; } + + return false; } public static void markFBI(EntityPlayer player) { @@ -216,9 +235,22 @@ public class BossSpawnHandler { } } } + + // only check if either charm is not present + if(!repell || strike) { + int x = (int) Math.floor(p.posX); + int z = (int) Math.floor(p.posZ); + + List entries = BlockPedestal.getEntriesForDimension(world.provider.dimensionId); + if(entries != null) for(PedestalEntry entry : entries) { + if(Math.abs(entry.pos.getX() - x) <= 100 && Math.abs(entry.pos.getZ() - z) <= 100) { + if(entry.type == PedestalEntryType.CHARM_OF_PROTECTION) repell = true; + if(entry.type == PedestalEntryType.METEORITE_CHARM) strike = false; + } + } + } - if(strike) - spawnMeteorAtPlayer(p, repell); + if(strike) spawnMeteorAtPlayer(p, repell); } } } diff --git a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java index bf9cddaa0..893eaa866 100644 --- a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java +++ b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java @@ -16,7 +16,6 @@ public class BulletConfigSyncingUtil { public static int TURBINE = i++; - public static int MASKMAN_BULLET = i++; public static int MASKMAN_ORB = i++; public static int MASKMAN_BOLT = i++; public static int MASKMAN_ROCKET = i++; @@ -32,7 +31,6 @@ public class BulletConfigSyncingUtil { configSet.put(TURBINE, GunEnergyFactory.getTurbineConfig()); - configSet.put(MASKMAN_BULLET, GunNPCFactory.getMaskmanBullet()); configSet.put(MASKMAN_ORB, GunNPCFactory.getMaskmanOrb()); configSet.put(MASKMAN_BOLT, GunNPCFactory.getMaskmanBolt()); configSet.put(MASKMAN_ROCKET, GunNPCFactory.getMaskmanRocket()); diff --git a/src/main/java/com/hbm/handler/BulletConfiguration.java b/src/main/java/com/hbm/handler/BulletConfiguration.java index c2b269b27..f17400d9e 100644 --- a/src/main/java/com/hbm/handler/BulletConfiguration.java +++ b/src/main/java/com/hbm/handler/BulletConfiguration.java @@ -4,32 +4,24 @@ import java.util.List; import com.hbm.entity.projectile.EntityBulletBaseNT; import com.hbm.entity.projectile.EntityBulletBaseNT.*; -import com.hbm.handler.guncfg.BulletConfigFactory; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; -import com.hbm.particle.SpentCasing; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; import net.minecraft.util.DamageSource; import net.minecraft.util.EntityDamageSourceIndirect; -import net.minecraft.util.EnumChatFormatting; @Deprecated public class BulletConfiguration implements Cloneable { //what item this specific configuration consumes public ComparableStack ammo; - //how many ammo units one item restores - public int ammoCount = 1; //how fast the bullet is (in sanics per second, or sps) public float velocity; //spread of bullets in gaussian range public float spread; - //weapon durability reduced (centered around 10) - public int wear; //greatest amount of pellets created each shot public int bulletsMin; //least amount of pellets created each shot @@ -60,39 +52,16 @@ public class BulletConfiguration implements Cloneable { //whether or not the bullet should penetrate mobs public boolean doesPenetrate; - //disables collisions with blocks entirely - public boolean isSpectral; //whether or not the bullet should break glass public boolean doesBreakGlass; - //bullets still call the impact function when hitting blocks but do not get destroyed - public boolean liveAfterImpact; - - //creates a "muzzle flash" and a ton of smoke with every projectile spawned - public boolean blackPowder = false; //bullet effects public List effects; public int incendiary; - public int emp; public boolean blockDamage = true; public float explosive; - public double jolt; - public int rainbow; - public int nuke; - public int shrapnel; - public int chlorine; public int leadChance; - public int caustic; public boolean destroysBlocks; - public boolean instakill; - /*public IBulletHurtBehavior bHurt; - public IBulletHitBehavior bHit; - public IBulletRicochetBehavior bRicochet; - public IBulletImpactBehavior bImpact; - public IBulletUpdateBehavior bUpdate;*/ - public IBulletHurtBehaviorNT bntHurt; - public IBulletHitBehaviorNT bntHit; - public IBulletRicochetBehaviorNT bntRicochet; public IBulletImpactBehaviorNT bntImpact; public IBulletUpdateBehaviorNT bntUpdate; @@ -104,17 +73,6 @@ public class BulletConfiguration implements Cloneable { public int plink; //vanilla particle FX public String vPFX = ""; - public SpentCasing spentCasing; - - //energy projectiles - //power consumed per shot - public int dischargePerShot; - //unlocalised firing mode name - public String modeName; - //firing mode text colour - public EnumChatFormatting chatColour = EnumChatFormatting.WHITE; - //firing rate - public int firingRate; public String damageType = ModDamageSource.s_bullet; public boolean dmgProj = true; @@ -122,23 +80,14 @@ public class BulletConfiguration implements Cloneable { public boolean dmgExplosion = false; public boolean dmgBypass = false; - public static final int STYLE_NONE = -1; public static final int STYLE_NORMAL = 0; - public static final int STYLE_PISTOL = 1; public static final int STYLE_FLECHETTE = 2; - public static final int STYLE_PELLET = 3; public static final int STYLE_BOLT = 4; - public static final int STYLE_FOLLY = 5; public static final int STYLE_ROCKET = 6; - public static final int STYLE_STINGER = 7; public static final int STYLE_GRENADE = 10; - public static final int STYLE_BF = 11; public static final int STYLE_ORB = 12; public static final int STYLE_METEOR = 13; - public static final int STYLE_APDS = 14; public static final int STYLE_BLADE = 15; - public static final int STYLE_TAU = 17; - public static final int STYLE_LEADBURSTER = 18; public static final int PLINK_NONE = 0; public static final int PLINK_BULLET = 1; @@ -149,10 +98,7 @@ public class BulletConfiguration implements Cloneable { public static final int BOLT_LACUNAE = 0; public static final int BOLT_NIGHTMARE = 1; public static final int BOLT_LASER = 2; - public static final int BOLT_ZOMG = 3; public static final int BOLT_WORM = 4; - public static final int BOLT_GLASS_CYAN = 5; - public static final int BOLT_GLASS_BLUE = 6; public BulletConfiguration setToBolt(int trail) { @@ -172,37 +118,6 @@ public class BulletConfiguration implements Cloneable { return this; } - public BulletConfiguration getChlorophyte() { - this.bntUpdate = BulletConfigFactory.getHomingBehavior(30, 180); - this.bntHurt = BulletConfigFactory.getPenHomingBehavior(); - this.dmgMin *= 2F; - this.dmgMax *= 2F; - this.wear *= 0.5; - this.velocity *= 0.3; - this.doesRicochet = false; - this.doesPenetrate = true; - this.vPFX = "greendust"; - - if(this.spentCasing != null) { - int[] colors = this.spentCasing.getColors(); - this.spentCasing = this.spentCasing.clone(); - - if(colors != null && colors.length > 0) { - int[] colorClone = new int[colors.length]; - for(int i = 0; i < colors.length; i++) colorClone[i] = colors[i]; - colorClone[colorClone.length - 1] = 0x659750; // <- standard chlorophyte coloring in last place - this.spentCasing.setColor(colorClone).register(this.spentCasing.getName() + "Cl"); - } - } - - return this; - } - - public BulletConfiguration setToHoming(ItemStack ammo) { - this.ammo = new ComparableStack(ammo); - return getChlorophyte(); - } - public BulletConfiguration accuracyMod(float mod) { this.spread *= mod; diff --git a/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java b/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java index 83332e52a..1040f0c0a 100644 --- a/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java @@ -23,7 +23,6 @@ public class BulletConfigFactory { bullet.velocity = 5.0F; bullet.spread = defaultSpread; - bullet.wear = 10; bullet.bulletsMin = 1; bullet.bulletsMax = 1; bullet.gravity = 0D; @@ -49,7 +48,6 @@ public class BulletConfigFactory { bullet.velocity = 2.0F; bullet.spread = defaultSpread; - bullet.wear = 10; bullet.bulletsMin = 1; bullet.bulletsMax = 1; bullet.gravity = 0.005D; @@ -75,7 +73,6 @@ public class BulletConfigFactory { bullet.velocity = 2.0F; bullet.spread = defaultSpread; - bullet.wear = 10; bullet.bulletsMin = 1; bullet.bulletsMax = 1; bullet.gravity = 0.035D; diff --git a/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java b/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java index aa33eba4f..995625114 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java @@ -33,7 +33,6 @@ public class GunNPCFactory { bullet.ammo = new ComparableStack(ModItems.coin_maskman); bullet.velocity = 0.25F; bullet.spread = 0.000F; - bullet.wear = 10; bullet.bulletsMin = 1; bullet.bulletsMax = 1; bullet.dmgMin = 100; @@ -85,7 +84,6 @@ public class GunNPCFactory { bullet.spread = 0.0F; bullet.dmgMin = 15; bullet.dmgMax = 20; - bullet.wear = 10; bullet.leadChance = 0; bullet.explosive = 0.5F; bullet.setToBolt(BulletConfiguration.BOLT_LACUNAE); @@ -95,22 +93,6 @@ public class GunNPCFactory { return bullet; } - public static BulletConfiguration getMaskmanBullet() { - - BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig(); - - bullet.ammo = new ComparableStack(ModItems.coin_maskman); - bullet.spread = 0.0F; - bullet.dmgMin = 5; - bullet.dmgMax = 10; - bullet.wear = 10; - bullet.leadChance = 15; - bullet.style = BulletConfiguration.STYLE_FLECHETTE; - bullet.vPFX = "bluedust"; - - return bullet; - } - public static BulletConfiguration getMaskmanTracer() { BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig(); @@ -119,7 +101,6 @@ public class GunNPCFactory { bullet.spread = 0.0F; bullet.dmgMin = 15; bullet.dmgMax = 20; - bullet.wear = 10; bullet.leadChance = 0; bullet.setToBolt(BulletConfiguration.BOLT_NIGHTMARE); bullet.vPFX = "reddust"; diff --git a/src/main/java/com/hbm/handler/nei/PressRecipeHandler.java b/src/main/java/com/hbm/handler/nei/PressRecipeHandler.java index f0b2adefb..0dc48dddf 100644 --- a/src/main/java/com/hbm/handler/nei/PressRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/PressRecipeHandler.java @@ -41,9 +41,11 @@ public class PressRecipeHandler extends TemplateRecipeHandler implements ICompat return "pressing"; } public LinkedList transferRectsRec = new LinkedList(); - public LinkedList transferRectsGui = new LinkedList(); + public LinkedList transferRectsPress = new LinkedList(); + public LinkedList transferRectsEPress = new LinkedList(); public LinkedList> guiRec = new LinkedList>(); - public LinkedList> guiGui = new LinkedList>(); + public LinkedList> guiPress = new LinkedList>(); + public LinkedList> guiEPress = new LinkedList>(); public class SmeltingSet extends TemplateRecipeHandler.CachedRecipe { PositionedStack input; @@ -130,21 +132,24 @@ public class PressRecipeHandler extends TemplateRecipeHandler implements ICompat @Override public Class getGuiClass() { - // return GUIMachineShredder.class; return null; } @Override public void loadTransferRects() { - transferRectsGui = new LinkedList(); - guiGui = new LinkedList>(); + transferRectsPress = new LinkedList(); + transferRectsEPress = new LinkedList(); + guiPress = new LinkedList>(); + guiEPress = new LinkedList>(); transferRects.add(new RecipeTransferRect(new Rectangle(74 + 6, 23, 24, 18), "pressing")); - transferRectsGui.add(new RecipeTransferRect(new Rectangle(74 + 6 + 18, 23, 24, 18), "pressing")); - guiGui.add(GUIMachinePress.class); - guiGui.add(GUIMachineEPress.class); + transferRectsPress.add(new RecipeTransferRect(new Rectangle(74 + 6 + 18, 23, 24, 18), "pressing")); + transferRectsEPress.add(new RecipeTransferRect(new Rectangle(13 + 6 + 18, 23, 24, 18), "pressing")); + guiPress.add(GUIMachinePress.class); + guiEPress.add(GUIMachineEPress.class); RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); - RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); + RecipeTransferRectHandler.registerRectsToGuis(guiPress, transferRectsPress); + RecipeTransferRectHandler.registerRectsToGuis(guiEPress, transferRectsEPress); } @Override diff --git a/src/main/java/com/hbm/handler/nei/RTGRecipeHandler.java b/src/main/java/com/hbm/handler/nei/RTGRecipeHandler.java index ed76b9d91..8f1a767e2 100644 --- a/src/main/java/com/hbm/handler/nei/RTGRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/RTGRecipeHandler.java @@ -9,7 +9,7 @@ public class RTGRecipeHandler extends NEIUniversalHandler { public RTGRecipeHandler() { super("RTG", new ItemStack[] { - new ItemStack(ModBlocks.machine_rtg_grey), + new ItemStack(ModBlocks.machine_rtg), new ItemStack(ModBlocks.machine_difurnace_rtg_off) }, ItemRTGPellet.getRecipeMap()); } diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index f3b7bb742..32fa4d16c 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -320,7 +320,7 @@ public class OreDictManager { public static final DictFrame ANY_CONCRETE = new DictFrame("Concrete"); //no any prefix means that any has to be appended with the any() or anys() getters, registering works with the any (i.e. no shape) setter public static final DictGroup ANY_TAR = new DictGroup("Tar", KEY_OIL_TAR, KEY_COAL_TAR, KEY_CRACK_TAR, KEY_WOOD_TAR); /** Any special post-RBMK gating material, namely bismuth and arsenic */ - public static final DictFrame ANY_BISMOID = new DictFrame("AnyBismoid"); + public static final DictGroup ANY_BISMOID = new DictGroup("AnyBismoid", BI, AS); public static final DictFrame ANY_ASH = new DictFrame("Ash"); @@ -501,7 +501,6 @@ public class OreDictManager { for(int i = 0; i < 16; i++) { ANY_CONCRETE.any(new ItemStack(ModBlocks.concrete_colored, 1, i)); } for(int i = 0; i < 16; i++) { ANY_CONCRETE.any(new ItemStack(ModBlocks.concrete_colored_ext, 1, i)); } ANY_COKE .gem(fromAll(coke, EnumCokeType.class)).block(fromAll(block_coke, EnumCokeType.class)); - ANY_BISMOID .ingot(ingot_bismuth, ingot_arsenic).nugget(nugget_bismuth, nugget_arsenic).block(block_bismuth); ANY_ASH .any(fromOne(ModItems.powder_ash, EnumAshType.WOOD), fromOne(ModItems.powder_ash, EnumAshType.COAL), fromOne(ModItems.powder_ash, EnumAshType.MISC), fromOne(ModItems.powder_ash, EnumAshType.FLY), fromOne(ModItems.powder_ash, EnumAshType.SOOT)); /* @@ -666,6 +665,7 @@ public class OreDictManager { .addPrefix(LIGHTBARREL, true).addPrefix(HEAVYBARREL, true).addPrefix(LIGHTRECEIVER, true).addPrefix(HEAVYRECEIVER, true); ANY_BISMOIDBRONZE.addPrefix(INGOT, true).addPrefix(CASTPLATE, true).addPrefix(LIGHTBARREL, true).addPrefix(HEAVYBARREL, true).addPrefix(LIGHTRECEIVER, true).addPrefix(HEAVYRECEIVER, true); ANY_TAR.addPrefix(ANY, false); + ANY_BISMOID.addPrefix(NUGGET, true).addPrefix(INGOT, true).addPrefix(BLOCK, true); } private static boolean recursionBrake = false; diff --git a/src/main/java/com/hbm/inventory/SlotPattern.java b/src/main/java/com/hbm/inventory/SlotPattern.java index a6957c7ac..317424214 100644 --- a/src/main/java/com/hbm/inventory/SlotPattern.java +++ b/src/main/java/com/hbm/inventory/SlotPattern.java @@ -16,10 +16,10 @@ public class SlotPattern extends Slot { public SlotPattern(IInventory inv, int index, int x, int y) { super(inv, index, x, y); } - - public SlotPattern(IInventory inv, int index, int x, int y, boolean allowStackSize) { - super(inv, index, x, y); - this.allowStackSize = allowStackSize; + + public SlotPattern allowStackSize() { + this.allowStackSize = true; + return this; } @Override @@ -29,7 +29,7 @@ public class SlotPattern extends Slot { @Override public int getSlotStackLimit() { - return 1; + return allowStackSize ? 64 : 1; } @Override @@ -37,7 +37,7 @@ public class SlotPattern extends Slot { if (stack != null) { stack = stack.copy(); - if (!allowStackSize) + if(!allowStackSize) stack.stackSize = 1; } super.putStack(stack); diff --git a/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java b/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java index 2c8b0438b..8dc57f397 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java +++ b/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java @@ -24,7 +24,7 @@ public class ContainerAutocrafter extends ContainerBase { this.addSlotToContainer(new SlotPattern(tedf, j + i * 3, 44 + j * 18, 22 + i * 18)); } } - this.addSlotToContainer(new SlotPattern(tedf, 9, 116, 40, true)); + this.addSlotToContainer(new SlotPattern(tedf, 9, 116, 40).allowStackSize()); /* RECIPE */ addSlots(tedf,10, 44, 86, 3, 3); diff --git a/src/main/java/com/hbm/inventory/container/ContainerElectricFurnace.java b/src/main/java/com/hbm/inventory/container/ContainerElectricFurnace.java index 593b1feb5..995454958 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerElectricFurnace.java +++ b/src/main/java/com/hbm/inventory/container/ContainerElectricFurnace.java @@ -22,20 +22,20 @@ public class ContainerElectricFurnace extends Container { diFurnace = tedf; - this.addSlotToContainer(new Slot(tedf, 0, 56, 53)); - this.addSlotToContainer(new Slot(tedf, 1, 56, 17)); - this.addSlotToContainer(new SlotSmelting(invPlayer.player, tedf, 2, 116, 35)); + this.addSlotToContainer(new Slot(tedf, 0, 152, 54)); + this.addSlotToContainer(new Slot(tedf, 1, 20, 35)); + this.addSlotToContainer(new SlotSmelting(invPlayer.player, tedf, 2, 80, 35)); //Upgrades - this.addSlotToContainer(new SlotUpgrade(tedf, 3, 147, 34)); + this.addSlotToContainer(new SlotUpgrade(tedf, 3, 111, 34)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { - this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 104 + i * 18)); } } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 162)); } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineEPress.java b/src/main/java/com/hbm/inventory/container/ContainerMachineEPress.java index 020eb7ac4..4f6a38ae8 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineEPress.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineEPress.java @@ -23,24 +23,24 @@ private TileEntityMachineEPress nukeBoy; nukeBoy = tedf; //Battery - this.addSlotToContainer(new Slot(tedf, 0, 44, 53)); + this.addSlotToContainer(new Slot(tedf, 0, 152, 54)); //Stamp - this.addSlotToContainer(new Slot(tedf, 1, 80, 17)); + this.addSlotToContainer(new Slot(tedf, 1, 19, 15)); //Input - this.addSlotToContainer(new Slot(tedf, 2, 80, 53)); + this.addSlotToContainer(new Slot(tedf, 2, 19, 51)); //Output - this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 3, 140, 35)); + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 3, 79, 33)); //Upgrade - this.addSlotToContainer(new SlotUpgrade(tedf, 4, 44, 21)); + this.addSlotToContainer(new SlotUpgrade(tedf, 4, 111, 32)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { - this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 104 + i * 18)); } } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 162)); } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineOilWell.java b/src/main/java/com/hbm/inventory/container/ContainerMachineOilWell.java index 17e749105..716a32ee0 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineOilWell.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineOilWell.java @@ -19,28 +19,27 @@ public class ContainerMachineOilWell extends Container { well = tedf; // Battery - this.addSlotToContainer(new Slot(tedf, 0, 8, 53)); + this.addSlotToContainer(new Slot(tedf, 0, 8, 58)); // Canister Input - this.addSlotToContainer(new Slot(tedf, 1, 80, 17)); + this.addSlotToContainer(new Slot(tedf, 1, 94, 22)); // Canister Output - this.addSlotToContainer(new SlotTakeOnly(tedf, 2, 80, 53)); + this.addSlotToContainer(new SlotTakeOnly(tedf, 2, 94, 58)); // Gas Input - this.addSlotToContainer(new Slot(tedf, 3, 125, 17)); + this.addSlotToContainer(new Slot(tedf, 3, 130, 22)); // Gas Output - this.addSlotToContainer(new SlotTakeOnly(tedf, 4, 125, 53)); + this.addSlotToContainer(new SlotTakeOnly(tedf, 4, 130, 58)); //Upgrades - this.addSlotToContainer(new Slot(tedf, 5, 152, 17)); - this.addSlotToContainer(new Slot(tedf, 6, 152, 35)); - this.addSlotToContainer(new Slot(tedf, 7, 152, 53)); + this.addSlotToContainer(new Slot(tedf, 5, 156, 36)); + this.addSlotToContainer(new Slot(tedf, 6, 156, 54)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { - this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 12 + j * 18, 108 + i * 18)); } } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + this.addSlotToContainer(new Slot(invPlayer, i, 12 + i * 18, 166)); } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachinePress.java b/src/main/java/com/hbm/inventory/container/ContainerMachinePress.java index 8fda99d52..86f096a4c 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachinePress.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachinePress.java @@ -33,12 +33,12 @@ public class ContainerMachinePress extends Container { for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { - this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 120 + i * 18)); + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 132 + i * 18)); } } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 178)); + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 190)); } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageAccess.java b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageAccess.java index bcd99eaf0..f012f0445 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageAccess.java +++ b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageAccess.java @@ -3,59 +3,507 @@ package com.hbm.inventory.container; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.LinkedList; import java.util.List; +import java.util.Locale; +import java.util.Map.Entry; import com.hbm.inventory.SlotNonRetarded; +import com.hbm.main.MainRegistry; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.ContainerNBTCommsPacket; import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageAccess; -import com.hbm.util.ItemStackUtil; +import com.hbm.util.EnumUtil; +import com.hbm.util.InventoryUtil; import api.hbm.ntl.StackCache; import api.hbm.ntl.StackCache.CacheSlot; +import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; -public class ContainerPneumoStorageAccess extends Container { +public class ContainerPneumoStorageAccess extends Container implements ICustomPayloadReceiver { protected TileEntityPneumoStorageAccess access; protected InventoryPneumoStorageAccess inventory; + protected EntityPlayer player; + protected String searchString = ""; + + public static boolean detailedSearch = false; + + /** On the server, this is used to find changes in the system and then send them to the client. On the client, this is just to keep track of all items. */ + protected LinkedHashMap cachedEntries = new LinkedHashMap(); + /** Server to client queue, contains NBT tags that represents deltas yet to be sent to the client */ + public LinkedList s2cQueue = new LinkedList(); + + public void setSorter(Comparator sorter) { + this.listingStart = 0; + this.sorter = sorter; + this.rebuildClientIndex(); + } + + public void setSearchString(String search) { + this.listingStart = 0; + this.searchString = search.toLowerCase(Locale.US); + this.rebuildClientIndex(); + } + + /** Used to temporarily store the previous CacheSlot contents to calculate deltas with (i.e. detect changes) */ + public static class CacheSlotDummy { + + public final ItemStack displayStack; + public long stacksize; + public final int itemId; + public final int meta; + public final NBTTagCompound nbt; + + public CacheSlotDummy(ItemStack displayStack, long stacksize) { + this.displayStack = displayStack; + this.stacksize = stacksize; + this.itemId = Item.getIdFromItem(displayStack.getItem()); + this.meta = displayStack.getItemDamage(); + if(displayStack.hasTagCompound()) this.nbt = (NBTTagCompound) displayStack.stackTagCompound.copy(); + else this.nbt = null; + } + + public CacheSlotDummy(CacheSlot original) { + this(original.displayStack.copy(), original.stacksize); + } + } + + public static final int GRID_SIZE = 6 * 8; + public static final int DELTAS_PER_MSG = 6 * 8; + public static final int SLOT_CLICK_ID_REFRESH = -666; + + public int listingStart = 0; + public int listingSize = 0; + + public int getStackCount() { + return listingSize; + } + + /** Serverside, creates a new delta for a new item stack */ + public void pushNewItem(ItemStack zeroStack, long amount) { + NBTTagCompound data = new NBTTagCompound(); + data.setByte("type", (byte) DeltaType.NEW_TYPE.ordinal()); + zeroStack.writeToNBT(data); + data.setLong("amount", amount); + s2cQueue.add(data); + } + + /** Serverside, creates a new delta for an amount update */ + public void updateCount(long hash, long amount) { + NBTTagCompound data = new NBTTagCompound(); + data.setByte("type", (byte) DeltaType.COUNT_CHANGE.ordinal()); + data.setLong("hash", hash); + data.setLong("amount", amount); + s2cQueue.add(data); + } + + /** Serverside, bunches up deltas into NBTTagLists and sends them, 48 (DELTAS_PER_MSG) at a time */ + public void processDeltasAndSync(EntityPlayerMP playerMP) { + if(s2cQueue.isEmpty()) return; + + NBTTagList list = null; + + while(!s2cQueue.isEmpty()) { + if(list == null) list = new NBTTagList(); + list.appendTag(s2cQueue.removeFirst()); + if(list.tagCount() >= DELTAS_PER_MSG) { bonVoyage(list, playerMP); list = null; } + } + + if(list != null) bonVoyage(list, playerMP); + } + + /** Wraps the NBTTagList into a master compound tag and sends it to the client */ + public void bonVoyage(NBTTagList list, EntityPlayerMP playerMP) { + NBTTagCompound masterTag = new NBTTagCompound(); + masterTag.setTag("list", list); + PacketDispatcher.wrapper.sendTo(new ContainerNBTCommsPacket(playerMP.currentWindowId, masterTag), playerMP); + } + + /** Compares the original access stack cache with the one we have buffered to detect changes and pushes them to the s2c sending queue */ + public void checkAndSyncCache() { + if(this.access.cache == null || this.access.cache.hasExpired) return; + + for(Entry entry : this.access.cache.cacheSlots.entrySet()) { + + Long hash = entry.getKey(); + if(hash == StackCache.getNullIdentity()) continue; + + CacheSlotDummy existingCache = this.cachedEntries.get(hash); + CacheSlot properCache = entry.getValue(); + + // if the previous entries already contain this type, check for amount change + if(existingCache != null) { + if(existingCache.stacksize != properCache.stacksize) { + this.updateCount(hash, properCache.stacksize); + existingCache.stacksize = properCache.stacksize; + } + // if not, add that type to our index + } else { + existingCache = new CacheSlotDummy(properCache); + existingCache.stacksize = properCache.stacksize; + this.cachedEntries.put(hash, existingCache); + this.pushNewItem(existingCache.displayStack, existingCache.stacksize); + } + } + + if(player instanceof EntityPlayerMP) processDeltasAndSync((EntityPlayerMP) this.player); + } public ContainerPneumoStorageAccess(InventoryPlayer invPlayer, TileEntityPneumoStorageAccess access) { this.access = access; this.inventory = new InventoryPneumoStorageAccess(access); + this.player = invPlayer.player; - for(int i = 0; i < 6; i++) { - for(int j = 0; j < 8; j++) { - this.addSlotToContainer(new SlotNonRetarded(inventory, j + i * 8, 8 + j * 18, 17 + i * 18)); - } + int hOffset = 34; + + for(int i = 0; i < 6; i++) for(int j = 0; j < 8; j++) { + this.addSlotToContainer(new SlotPneumo(inventory, j + i * 8, 8 + j * 18 + hOffset, 17 + i * 18)); } - for(int i = 0; i < 3; i++) { - for(int j = 0; j < 9; j++) { - this.addSlotToContainer(new SlotNonRetarded(invPlayer, j + i * 9 + 9, 8 + j * 18, 169 + i * 18)); - } + for(int i = 0; i < 3; i++) for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new SlotNonRetarded(invPlayer, j + i * 9 + 9, 8 + j * 18 + hOffset, 169 + i * 18)); } for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new SlotNonRetarded(invPlayer, i, 8 + i * 18, 227)); + this.addSlotToContainer(new SlotNonRetarded(invPlayer, i, 8 + i * 18 + hOffset, 227)); + } + } + + @Override + public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) { + if(mode == 6) return null; + + if(index == SLOT_CLICK_ID_REFRESH) { + this.listingStart = mode; + this.detectAndSendChanges(); + return null; + } + + boolean client = player.worldObj.isRemote; + boolean leftClick = button == 0 && mode == 0; + boolean rightClick = button == 1 && mode == 0; + boolean shiftClick = button == 0 && mode == 1; + + if(index >= 0 && index < GRID_SIZE) { + if(!client) return null; + SlotPneumo slot = (SlotPneumo) this.getSlot(index); + long hash = StackCache.getStackIdentity(slot.getStack()); + ItemStack held = player.inventory.getItemStack(); + long heldHash = StackCache.getStackIdentity(held); + if(leftClick) { + if(held != null && hash != heldHash) held = null; + else if(held != null && hash == heldHash) { + held.stackSize += slot.amount; + held.stackSize = Math.min(held.stackSize, held.getMaxStackSize()); + } else if(held == null && slot.getHasStack()) { + held = slot.getStack().copy(); + held.stackSize = (int) Math.min(slot.amount, held.getMaxStackSize()); + } + this.player.inventory.setItemStack(held); + sendClickToServer(ClickType.LEFT_CLICK, hash); + return null; + } + if(rightClick) { + if(held != null && hash != heldHash) held.stackSize--; + else if(held != null && hash == heldHash) { + held.stackSize += 1; + held.stackSize = Math.min(held.stackSize, held.getMaxStackSize()); + } else if(held == null && slot.getHasStack()) { + held = slot.getStack().copy(); + held.stackSize = 1; + } + if(held != null && held.stackSize <= 0) held = null; + this.player.inventory.setItemStack(held); + sendClickToServer(ClickType.RIGHT_CLICK, hash); + return null; + } + if(shiftClick) { sendClickToServer(ClickType.SHIFT_CLICK, hash); return null; } + + // shift clicking an item from the player inv to the storage + } else if(index >= GRID_SIZE && index < this.inventorySlots.size()) { + + Slot slot = this.getSlot(index); + + if(shiftClick && slot.getHasStack()) { + ItemStack stack = slot.getStack().copy(); + if(this.access.cache == null || this.access.cache.hasExpired) return null; + StackCache cache = this.access.cache; + int remainder = (int) cache.addItemsAndReturnQuantity(stack, stack.stackSize); + slot.decrStackSize(stack.stackSize - remainder); + if(remainder <= 0) slot.putStack(null); + slot.onSlotChanged(); + detectAndSendChanges(); + return null; // technically not needed but we don't have to run 500,000 lines of code that ends up doing nothing + } } - inventory.updateListing(); - this.detectAndSendChanges(); + return super.slotClick(index, button, mode, player); + } + + public void sendClickToServer(ClickType type, long hash) { + + NBTTagCompound data = new NBTTagCompound(); + data.setByte("type", (byte) type.ordinal()); + data.setLong("hash", hash); + PacketDispatcher.wrapper.sendToServer(new ContainerNBTCommsPacket(this.windowId, data)); + } + + public long[] previousStackSizes = new long[GRID_SIZE]; + + @Override + public void detectAndSendChanges() { + + // skip the first 6*8 slots, i.e. all the ones visible in the access grid + for(int i = GRID_SIZE; i < this.inventorySlots.size(); i++) { + ItemStack stack0 = ((Slot) this.inventorySlots.get(i)).getStack(); + ItemStack stack1 = (ItemStack) this.inventoryItemStacks.get(i); + + if(!ItemStack.areItemStacksEqual(stack1, stack0)) { + stack1 = stack0 == null ? null : stack0.copy(); + this.inventoryItemStacks.set(i, stack1); + + for(int j = 0; j < this.crafters.size(); ++j) { + ((ICrafting) this.crafters.get(j)).sendSlotContents(this, i, stack1); + } + } + } + + boolean isServer = !this.access.getWorldObj().isRemote; + + if(isServer) { + checkAndSyncCache(); + } else { + rebuildClientIndex(); + } } @Override public boolean canInteractWith(EntityPlayer player) { return access.getDistanceFrom(player.posX, player.posY, player.posZ) <= 15 * 15; } + + /** For S2C to send deltas updating the available items */ + public static enum DeltaType { + NEW_TYPE, + COUNT_CHANGE; + } + + public static enum ClickType { + LEFT_CLICK, + RIGHT_CLICK, + SHIFT_CLICK + } + + @Override + public void acceptData(Side side, int windowId, NBTTagCompound data) { + if(windowId != this.windowId) return; + + if(side == Side.CLIENT) { + NBTTagList list = data.getTagList("list", 10); + + for(int i = 0; i < list.tagCount(); i++) { + NBTTagCompound line = list.getCompoundTagAt(i); + DeltaType type = EnumUtil.grabEnumSafely(DeltaType.class, line.getByte("type")); + + if(type == DeltaType.NEW_TYPE) { + ItemStack stack = ItemStack.loadItemStackFromNBT(line); + long amount = line.getLong("amount"); + long hash = StackCache.getStackIdentity(stack); + CacheSlotDummy dummy = new CacheSlotDummy(stack, amount); + this.cachedEntries.put(hash, dummy); + + } else if(type == DeltaType.COUNT_CHANGE) { + long hash = line.getLong("hash"); + CacheSlotDummy dummy = this.cachedEntries.get(hash); + if(dummy != null) dummy.stacksize = line.getLong("amount"); + } + } + + rebuildClientIndex(); + + } else { + if(this.access.cache == null || this.access.cache.hasExpired) return; + ClickType type = EnumUtil.grabEnumSafely(ClickType.class, data.getByte("type")); + long hash = data.getLong("hash"); + CacheSlotDummy cache = this.cachedEntries.get(hash); + ItemStack held = this.player.inventory.getItemStack(); + long heldHash = StackCache.getStackIdentity(held); + + // left click + if(type == ClickType.LEFT_CLICK || type == ClickType.RIGHT_CLICK) { + + // if we drop an item onto a different stack, or no stack at all, deposit + if(hash != heldHash && held != null) { + int toDeposit = type == ClickType.LEFT_CLICK ? held.stackSize : 1; + held.stackSize -= toDeposit; + int leftover = (int) this.access.cache.addItemsAndReturnQuantity(held, toDeposit); + held.stackSize += leftover; + this.player.inventory.setItemStack(null); + if(held.stackSize > 0) InventoryUtil.tryAddItemToInventory(player.inventory.mainInventory, held); + detectAndSendChanges(); + return; + } + + // if our hand is empty or we have the same type, withdraw + if(cache != null && (held == null || hash == heldHash)) { + ItemStack stack = cache.displayStack.copy(); + int alreadyHeld = held == null ? 0 : held.stackSize; + int capacity = stack.getMaxStackSize() - alreadyHeld; + if(type == ClickType.RIGHT_CLICK && capacity > 1) capacity = 1; + int toGrab = (int) Math.min(capacity, cache.stacksize); + int grabbed = (int) this.access.cache.consumeItemsAndReturnQuantity(stack, toGrab); + stack.stackSize = alreadyHeld + grabbed; + this.player.inventory.setItemStack(stack); + detectAndSendChanges(); + return; + } + } + + if(type == ClickType.SHIFT_CLICK && cache != null) { + ItemStack stack = cache.displayStack.copy(); + int originalStacksize = (int) Math.min(stack.getMaxStackSize(), cache.stacksize); + stack.stackSize = originalStacksize; + ItemStack ret = InventoryUtil.tryAddItemToInventory(player.inventory.mainInventory, stack); + int remainder = ret == null ? 0 : ret.stackSize; + int itemsUsed = originalStacksize - remainder; + this.access.cache.consumeItemsAndReturnQuantity(stack, itemsUsed); + detectAndSendChanges(); + return; + } + } + } + + public void rebuildClientIndex() { + + List cacheSlots = new ArrayList(this.cachedEntries.size()); + cacheSlots.addAll(this.cachedEntries.values()); + cacheSlots.removeIf(x -> { return x.stacksize <= 0; }); + + if(this.searchString != null && !this.searchString.isEmpty()) { + if(!detailedSearch) { + cacheSlots.removeIf(x -> { + return !x.displayStack.getDisplayName().toLowerCase(Locale.US).contains(searchString); + }); + } else { + cacheSlots.removeIf(x -> { + boolean contains = x.displayStack.getDisplayName().toLowerCase(Locale.US).contains(searchString); + List toolTip = new ArrayList(); + if(!contains) { + x.displayStack.getItem().addInformation(x.displayStack, MainRegistry.proxy.me(), toolTip, MainRegistry.proxy.advancedTooltips()); + for(String string : toolTip) { + if(string.toLowerCase(Locale.US).contains(searchString)) { + contains = true; + break; + } + } + } + return !contains; + }); + } + } + + listingSize = cacheSlots.size(); + Collections.sort(cacheSlots, this.sorter); + int size = cacheSlots.size(); + + int offset = listingStart * 8; + + for(int i = 0; i < inventory.slots.length; i++) { + int grabIndex = offset + i; + if(grabIndex < size) { + CacheSlotDummy cacheSlot = cacheSlots.get(grabIndex); + SlotPneumo slot = (SlotPneumo) this.inventorySlots.get(i); + if(cacheSlot.displayStack != null) { + slot.putStack(cacheSlot.displayStack.copy()); + slot.amount = cacheSlot.stacksize; + } else { + slot.putStack(null); + slot.amount = 0; + } + } else { + inventory.slots[i] = null; + } + } + } + + public static final Comparator SORT_BY_STACK_SIZE = new Comparator() { + @Override + public int compare(CacheSlotDummy o1, CacheSlotDummy o2) { + if(o1.stacksize > o2.stacksize) return -1; if(o1.stacksize < o2.stacksize) return 1; + if(o1.itemId < o2.itemId) return -1; if(o1.itemId > o2.itemId) return 1; + if(o1.meta < o2.meta) return -1; if(o1.meta > o2.meta) return 1; + if(o1.nbt == null && o2.nbt != null) return -1; if(o1.nbt != null && o2.nbt == null) return 1; + return 0; + } + }; + + public static final Comparator SORT_BY_ID = new Comparator() { + @Override + public int compare(CacheSlotDummy o1, CacheSlotDummy o2) { + if(o1.itemId < o2.itemId) return -1; if(o1.itemId > o2.itemId) return 1; + if(o1.meta < o2.meta) return -1; if(o1.meta > o2.meta) return 1; + if(o1.stacksize > o2.stacksize) return -1; if(o1.stacksize < o2.stacksize) return 1; + if(o1.nbt == null && o2.nbt != null) return -1; if(o1.nbt != null && o2.nbt == null) return 1; + return 0; + } + }; + + public static final Comparator SORT_BY_INTERNAL = new Comparator() { + @Override + public int compare(CacheSlotDummy o1, CacheSlotDummy o2) { + String name1 = o1.displayStack.getItem().getUnlocalizedName(o1.displayStack); + String name2 = o2.displayStack.getItem().getUnlocalizedName(o2.displayStack); + int compare = name1.compareToIgnoreCase(name2); + if(compare != 0) return compare; + return SORT_BY_ID.compare(o1, o2); + } + }; + + public static final Comparator SORT_BY_LOCALIZED = new Comparator() { + @Override + public int compare(CacheSlotDummy o1, CacheSlotDummy o2) { + String name1 = o1.displayStack.getItem().getItemStackDisplayName(o1.displayStack); + String name2 = o2.displayStack.getItem().getItemStackDisplayName(o2.displayStack); + int compare = name1.compareToIgnoreCase(name2); + if(compare != 0) return compare; + return SORT_BY_ID.compare(o1, o2); + } + }; + + protected static Comparator sorter = SORT_BY_STACK_SIZE; @Override public ItemStack transferStackInSlot(EntityPlayer player, int index) { return null; } + public static class SlotPneumo extends SlotNonRetarded { + + public long amount; + + public SlotPneumo(IInventory inventory, int id, int x, int y) { + super(inventory, id, x, y); + } + + @Override + public boolean canTakeStack(EntityPlayer player) { + return true; + } + } + /** This inventory instance only exists to prepare the contents of a StackCache in such a way that we can use it in a container. */ public static class InventoryPneumoStorageAccess implements IInventory { @@ -66,42 +514,12 @@ public class ContainerPneumoStorageAccess extends Container { this.slots = new ItemStack[getSizeInventory()]; this.cache = access.cache; } - - public void updateListing() { // DEMO - if(this.cache == null) return; - List cacheSlots = new ArrayList(cache.cacheSlots.size()); - cacheSlots.addAll(cache.cacheSlots.values()); - cacheSlots.removeIf(x -> { return x.stacksize <= 0; }); - Collections.sort(cacheSlots, SORT_BY_STACK_SIZE); - int size = cacheSlots.size(); - - for(int i = 0; i < slots.length; i++) { - if(i < size) { - CacheSlot cache = cacheSlots.get(i); - if(cache.displayStack != null) { - slots[i] = cache.displayStack.copy(); - ItemStackUtil.addTooltipToStack(slots[i], "x" + cache.stacksize, "in " + cache.monitors.size() + " stacks"); - } - } - } - } - - public static final Comparator SORT_BY_STACK_SIZE = new Comparator() { - @Override - public int compare(CacheSlot o1, CacheSlot o2) { - if(o1.stacksize > o2.stacksize) return 1; if(o1.stacksize < o2.stacksize) return -1; - if(o1.itemId < o2.itemId) return 1; if(o1.itemId > o2.itemId) return -1; - if(o1.meta < o2.meta) return 1; if(o1.meta > o2.meta) return -1; - if(o1.nbt == null && o2.nbt != null) return 1; if(o1.nbt != null && o2.nbt == null) return -1; - return 0; - } - }; - @Override public int getSizeInventory() { return 6 * 9; } + @Override public int getSizeInventory() { return GRID_SIZE; } @Override public ItemStack getStackInSlot(int slot) { return slots[slot]; } - @Override public int getInventoryStackLimit() { return 64; } - + @Override public int getInventoryStackLimit() { return 1; } @Override public ItemStack decrStackSize(int slot, int amount) { return null; } + @Override public void setInventorySlotContents(int slot, ItemStack stack) { this.slots[slot] = stack; } @Override public ItemStack getStackInSlotOnClosing(int slot) { @@ -113,22 +531,11 @@ public class ContainerPneumoStorageAccess extends Container { return null; } - @Override - public void setInventorySlotContents(int slot, ItemStack stack) { - this.slots[slot] = stack; - } - @Override public String getInventoryName() { return "null"; } @Override public boolean hasCustomInventoryName() { return false; } @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return false; } - - @Override - public void markDirty() { - - } - + @Override public void markDirty() { } @Override public boolean isUseableByPlayer(EntityPlayer player) { return true; } - @Override public void openInventory() { } @Override public void closeInventory() { } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageExporter.java b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageExporter.java new file mode 100644 index 000000000..4e80cbb46 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageExporter.java @@ -0,0 +1,73 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotPattern; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageExporter; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerPneumoStorageExporter extends ContainerBase { + + public ContainerPneumoStorageExporter(InventoryPlayer invPlayer, TileEntityPneumoStorageExporter exporter) { + super(invPlayer, exporter); + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new SlotPattern(exporter, i, 17 + (i % 3) * 18, 17 + (i / 3) * 18).allowStackSize()); + } + + addTakeOnlySlots(exporter, 9, 80, 17, 3, 3); + playerInv(invPlayer, 103); + } + + @Override + public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) { + + //L/R: 0 + //M3: 3 + //SHIFT: 1 + //DRAG: 5 + + if(index < 0 || index >= 9) { + return super.slotClick(index, button, mode, player); + } + + Slot slot = this.getSlot(index); + ItemStack ret = null; + ItemStack held = player.inventory.getItemStack(); + + if(slot.getHasStack()) ret = slot.getStack().copy(); + slot.putStack(held); + return ret; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack slotOriginal = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack slotStack = slot.getStack(); + slotOriginal = slotStack.copy(); + + if(index <= tile.getSizeInventory() - 1) { + if(!this.mergeItemStack(slotStack, tile.getSizeInventory(), this.inventorySlots.size(), true)) { + return null; + } + } else { + return null; + } + + if(slotStack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + + slot.onPickupFromSlot(player, slotStack); + } + + return slotOriginal; + } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageImporter.java b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageImporter.java new file mode 100644 index 000000000..4260b87d2 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageImporter.java @@ -0,0 +1,15 @@ +package com.hbm.inventory.container; + +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageImporter; + +import net.minecraft.entity.player.InventoryPlayer; + +public class ContainerPneumoStorageImporter extends ContainerBase { + + public ContainerPneumoStorageImporter(InventoryPlayer invPlayer, TileEntityPneumoStorageImporter importer) { + super(invPlayer, importer); + + addSlots(importer, 0, 62, 17, 3, 3); + playerInv(invPlayer, 103); + } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageMono.java b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageMono.java new file mode 100644 index 000000000..2848dd059 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageMono.java @@ -0,0 +1,51 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotPattern; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageMono; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerPneumoStorageMono extends ContainerBase { + + public ContainerPneumoStorageMono(InventoryPlayer invPlayer, TileEntityPneumoStorageMono storage) { + super(invPlayer, storage); + + for(int i = 0; i < 3; i++) { + this.addSlotToContainer(new SlotPattern(storage, i, 8, 17 + i * 18)); + } + + playerInv(invPlayer, 99); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slot) { + return null; + } + + @Override + public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) { + + //L/R: 0 + //M3: 3 + //SHIFT: 1 + //DRAG: 5 + + if(index < 0 || index >= 3) { + return super.slotClick(index, button, mode, player); + } + + Slot slot = this.getSlot(index); + TileEntityPneumoStorageMono mono = (TileEntityPneumoStorageMono) this.tile; + if(mono.amounts[index] > 0 && slot.getHasStack()) return null; + + ItemStack ret = null; + ItemStack held = player.inventory.getItemStack(); + + if(slot.getHasStack()) ret = slot.getStack().copy(); + slot.putStack(held); + return ret; + } +} diff --git a/src/main/java/com/hbm/inventory/container/ICustomPayloadReceiver.java b/src/main/java/com/hbm/inventory/container/ICustomPayloadReceiver.java new file mode 100644 index 000000000..f0045c2ab --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ICustomPayloadReceiver.java @@ -0,0 +1,9 @@ +package com.hbm.inventory.container; + +import cpw.mods.fml.relauncher.Side; +import net.minecraft.nbt.NBTTagCompound; + +public interface ICustomPayloadReceiver { + + public void acceptData(Side side, int windowsId, NBTTagCompound data); +} diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 18f7908cc..99d05b0ac 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -412,7 +412,7 @@ public class Fluids { CONCRETE = new FluidType("CONCRETE", 0xA2A2A2, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); DHC = new FluidType("DHC", 0xD2AFFF, 0, 0, 0, EnumSymbol.NONE).addTraits(GASEOUS); AIRBLAST = new FluidType("AIRBLAST", 0xFFDADA, 0, 3, 0, EnumSymbol.NONE).setTemp(1_200).addTraits(GASEOUS); - FLUE = new FluidType(155, "FLUE", 0x131313, 1, 4, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0xFF4545, 0xFFE97F)).addTraits(new FT_Flammable(10_000), GASEOUS, new FT_Polluting().burn(PollutionType.SOOT, SOOT_GAS).release(PollutionType.SOOT, SOOT_GAS * 25)); + FLUE = new FluidType(155, "FLUE", 0x131313, 1, 4, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0xFF4545, 0xFFE97F)).addTraits(new FT_Flammable(25_000), GASEOUS, new FT_Polluting().burn(PollutionType.SOOT, SOOT_GAS).release(PollutionType.SOOT, SOOT_GAS * 25)); // ^ ^ ^ ^ ^ ^ ^ ^ //ADD NEW FLUIDS HERE diff --git a/src/main/java/com/hbm/inventory/gui/GUICrystallizer.java b/src/main/java/com/hbm/inventory/gui/GUICrystallizer.java index f94527ed6..f5b86037e 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICrystallizer.java +++ b/src/main/java/com/hbm/inventory/gui/GUICrystallizer.java @@ -44,7 +44,7 @@ public class GUICrystallizer extends GuiInfoContainer { protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.acidomatic.hasCustomInventoryName() ? this.acidomatic.getInventoryName() : I18n.format(this.acidomatic.getInventoryName()); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } diff --git a/src/main/java/com/hbm/inventory/gui/GUIDiode.java b/src/main/java/com/hbm/inventory/gui/GUIDiode.java new file mode 100644 index 000000000..2b7fa3609 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIDiode.java @@ -0,0 +1,95 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.input.Keyboard; + +import com.hbm.blocks.network.CableDiode.TileEntityDiode; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; +import com.hbm.util.EnumUtil; + +import api.hbm.energymk2.IEnergyReceiverMK2.ConnectionPriority; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; + +@SideOnly(Side.CLIENT) +public class GUIDiode extends GuiScreen { + + protected final TileEntityDiode diode; + + private GuiTextField textThroughput; + private GuiButton buttonPriority; + private int priority; + + public GUIDiode(TileEntityDiode diode) { + this.diode = diode; + this.priority = diode.priority.ordinal(); + } + + @Override + public void initGui() { + Keyboard.enableRepeatEvents(true); + + textThroughput = new GuiTextField(fontRendererObj, this.width / 2 - 150, 100, 90, 20); + textThroughput.setText("" + diode.limit); + textThroughput.setMaxStringLength(11); + + buttonPriority = new GuiButton(0, this.width / 2 + 20, 100, 90, 20, diode.priority.name()); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + drawDefaultBackground(); + + drawString(fontRendererObj, "Throughput:", this.width / 2 - 150, 80, 0xA0A0A0); + drawString(fontRendererObj, "(max. 10,000,000,000 HE)", this.width / 2 - 150, 90, 0xA0A0A0); + textThroughput.drawTextBox(); + + drawString(fontRendererObj, "Priority:", this.width / 2 + 20, 80, 0xA0A0A0); + buttonPriority.drawButton(mc, mouseX, mouseY); + + super.drawScreen(mouseX, mouseY, partialTicks); + } + + @Override + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + + NBTTagCompound data = new NBTTagCompound(); + data.setByte("priority", (byte) priority); + + try { data.setLong("limit", Long.parseLong(textThroughput.getText())); } catch(Exception ex) {} + + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, diode.xCoord, diode.yCoord, diode.zCoord)); + } + + @Override + protected void keyTyped(char typedChar, int keyCode) { + super.keyTyped(typedChar, keyCode); + if(textThroughput.textboxKeyTyped(typedChar, keyCode)) return; + + if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) { + this.mc.thePlayer.closeScreen(); + } + } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) { + super.mouseClicked(mouseX, mouseY, mouseButton); + textThroughput.mouseClicked(mouseX, mouseY, mouseButton); + + if(buttonPriority.mousePressed(mc, mouseX, mouseY)) { + this.priority++; + if(priority >= ConnectionPriority.values().length) priority = 0; + buttonPriority.displayString = EnumUtil.grabEnumSafely(ConnectionPriority.class, priority).name(); + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + } + } + + @Override public boolean doesGuiPauseGame() { return false; } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java b/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java index 98e11de61..9e7160305 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java +++ b/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java @@ -41,7 +41,7 @@ public class GUIFusionTorus extends GuiInfoContainer { torus.coolantTanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 188, guiTop + 46, 16, 52); torus.coolantTanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 206, guiTop + 46, 16, 52); - FusionRecipe recipe = (FusionRecipe) FusionRecipes.INSTANCE.recipeNameMap.get(this.torus.fusionModule.recipe); + FusionRecipe recipe = (FusionRecipe) this.torus.fusionModule.getRecipe(); if(recipe != null) { drawCustomInfoStat(mouseX, mouseY, guiLeft + 43, guiTop + 115, 18, 18, mouseX, mouseY, EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + BobMathUtil.getShortNumber(torus.klystronEnergy) + "KyU / " + BobMathUtil.getShortNumber(recipe.ignitionTemp) + "KyU"); @@ -70,7 +70,7 @@ public class GUIFusionTorus extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - if(this.checkClick(x, y, 43, 80, 18, 18)) GUIScreenRecipeSelector.openSelector(FusionRecipes.INSTANCE, torus, torus.fusionModule.recipe, 0, ItemBlueprints.grabPool(torus.slots[1]), this); + if(this.checkClick(x, y, 43, 80, 18, 18)) GUIScreenRecipeSelector.openSelector(FusionRecipes.INSTANCE, torus, torus.fusionModule.getRecipeName(), 0, ItemBlueprints.grabPool(torus.slots[1]), this); } @Override @@ -103,7 +103,7 @@ public class GUIFusionTorus extends GuiInfoContainer { drawTexturedModalRect(guiLeft + 98, guiTop + 91, 0, 250, j, 6); } - FusionRecipe recipe = FusionRecipes.INSTANCE.recipeNameMap.get(torus.fusionModule.recipe); + FusionRecipe recipe = (FusionRecipe) torus.fusionModule.getRecipe(); // power LED if(recipe != null && torus.power >= recipe.power) drawTexturedModalRect(guiLeft + 160, guiTop + 115, 246, 14, 8, 8); diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyFactory.java b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyFactory.java index 11f7db844..d08490d19 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyFactory.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyFactory.java @@ -47,8 +47,8 @@ public class GUIMachineAssemblyFactory extends GuiInfoContainer { this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 234, guiTop + 18, 16, 92, assembler.power, assembler.maxPower); for(int i = 0; i < 4; i++) if(guiLeft + 6 + (i % 2) * 109 <= mouseX && guiLeft + 6 + (i % 2) * 109 + 18 > mouseX && guiTop + 53 + (i / 2) * 56 < mouseY && guiTop + 53 + (i / 2) * 56 + 18 >= mouseY) { - if(this.assembler.assemblerModule[i].recipe != null && AssemblyMachineRecipes.INSTANCE.recipeNameMap.containsKey(this.assembler.assemblerModule[i].recipe)) { - GenericRecipe recipe = (GenericRecipe) AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(this.assembler.assemblerModule[i].recipe); + if(this.assembler.assemblerModule[i].getRecipeName() != null && AssemblyMachineRecipes.INSTANCE.recipeNameMap.containsKey(this.assembler.assemblerModule[i].getRecipeName())) { + GenericRecipe recipe = this.assembler.assemblerModule[i].getRecipe(); GUIElements.drawHoveringTextRecipe(recipe.print(), mouseX, mouseY, this.fontRendererObj, itemRender, this.width, this.height); } else { this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); @@ -60,7 +60,7 @@ public class GUIMachineAssemblyFactory extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - for(int i = 0; i < 4; i++) if(this.checkClick(x, y, 6 + (i % 2) * 109, 53 + (i / 2) * 56, 18, 18)) GUIScreenRecipeSelector.openSelector(AssemblyMachineRecipes.INSTANCE, assembler, assembler.assemblerModule[i].recipe, i, ItemBlueprints.grabPool(assembler.slots[4 + i * 14]), this); + for(int i = 0; i < 4; i++) if(this.checkClick(x, y, 6 + (i % 2) * 109, 53 + (i / 2) * 56, 18, 18)) GUIScreenRecipeSelector.openSelector(AssemblyMachineRecipes.INSTANCE, assembler, assembler.assemblerModule[i].getRecipeName(), i, ItemBlueprints.grabPool(assembler.slots[4 + i * 14]), this); } @Override @@ -87,7 +87,7 @@ public class GUIMachineAssemblyFactory extends GuiInfoContainer { } for(int g = 0; g < 4; g++) { - GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assembler.assemblerModule[g].recipe); + GenericRecipe recipe = assembler.assemblerModule[g].getRecipe(); /// LEFT LED if(assembler.didProcess[g]) { @@ -105,7 +105,7 @@ public class GUIMachineAssemblyFactory extends GuiInfoContainer { } for(int g = 0; g < 4; g++) { - GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assembler.assemblerModule[g].recipe); + GenericRecipe recipe = assembler.assemblerModule[g].getRecipe(); this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 7 + (g % 2) * 109, 54 + (g / 2) * 56); diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java index 0e5f8184c..bcb51491b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineAssemblyMachine.java @@ -42,8 +42,8 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer { this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, assembler.power, assembler.maxPower); if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { - if(this.assembler.assemblerModule.recipe != null && AssemblyMachineRecipes.INSTANCE.recipeNameMap.containsKey(this.assembler.assemblerModule.recipe)) { - GenericRecipe recipe = (GenericRecipe) AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(this.assembler.assemblerModule.recipe); + if(this.assembler.assemblerModule.getRecipeName() != null && AssemblyMachineRecipes.INSTANCE.recipeNameMap.containsKey(this.assembler.assemblerModule.getRecipeName())) { + GenericRecipe recipe = this.assembler.assemblerModule.getRecipe(); GUIElements.drawHoveringTextRecipe(recipe.print(), mouseX, mouseY, this.fontRendererObj, itemRender, this.width, this.height); } else { this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); @@ -55,7 +55,7 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(AssemblyMachineRecipes.INSTANCE, assembler, assembler.assemblerModule.recipe, 0, ItemBlueprints.grabPool(assembler.slots[1]), this); + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(AssemblyMachineRecipes.INSTANCE, assembler, assembler.assemblerModule.getRecipeName(), 0, ItemBlueprints.grabPool(assembler.slots[1]), this); } @Override @@ -77,10 +77,10 @@ public class GUIMachineAssemblyMachine extends GuiInfoContainer { if(assembler.assemblerModule.progress > 0) { int j = (int) Math.ceil(70 * assembler.assemblerModule.progress); - drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); + drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61 + (assembler.assemblerModule.restrictedMode ? 16 : 0), j, 16); } - GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assembler.assemblerModule.recipe); + GenericRecipe recipe = assembler.assemblerModule.getRecipe(); /// LEFT LED if(assembler.didProcess) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java index 885411e82..e20b94d4f 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalFactory.java @@ -47,8 +47,8 @@ public class GUIMachineChemicalFactory extends GuiInfoContainer { this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 224, guiTop + 18, 16, 68, chemplant.power, chemplant.maxPower); for(int i = 0; i < 4; i++) if(guiLeft + 74 <= mouseX && guiLeft + 74 + 18 > mouseX && guiTop + 19 + i * 22 < mouseY && guiTop + 19 + i * 22 + 18 >= mouseY) { - if(this.chemplant.chemplantModule[i].recipe != null && ChemicalPlantRecipes.INSTANCE.recipeNameMap.containsKey(this.chemplant.chemplantModule[i].recipe)) { - GenericRecipe recipe = (GenericRecipe) ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.chemplant.chemplantModule[i].recipe); + if(this.chemplant.chemplantModule[i].getRecipeName() != null && ChemicalPlantRecipes.INSTANCE.recipeNameMap.containsKey(this.chemplant.chemplantModule[i].getRecipeName())) { + GenericRecipe recipe = this.chemplant.chemplantModule[i].getRecipe(); GUIElements.drawHoveringTextRecipe(recipe.print(), mouseX, mouseY, this.fontRendererObj, itemRender, this.width, this.height); } else { this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); @@ -60,7 +60,7 @@ public class GUIMachineChemicalFactory extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - for(int i = 0; i < 4; i++) if(this.checkClick(x, y, 74, 19 + i * 22, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule[i].recipe, i, ItemBlueprints.grabPool(chemplant.slots[4 + i * 7]), this); + for(int i = 0; i < 4; i++) if(this.checkClick(x, y, 74, 19 + i * 22, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule[i].getRecipeName(), i, ItemBlueprints.grabPool(chemplant.slots[4 + i * 7]), this); } @Override @@ -87,7 +87,7 @@ public class GUIMachineChemicalFactory extends GuiInfoContainer { } for(int g = 0; g < 4; g++) { - GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule[g].recipe); + GenericRecipe recipe = chemplant.chemplantModule[g].getRecipe(); /// LEFT LED if(chemplant.didProcess[g]) { @@ -105,7 +105,7 @@ public class GUIMachineChemicalFactory extends GuiInfoContainer { } for(int g = 0; g < 4; g++) { // not a great way of doing it but at least we eliminate state leak bullshit - GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule[g].recipe); + GenericRecipe recipe = chemplant.chemplantModule[g].getRecipe(); this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 75, 20 + g * 22); diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java index bc63a81b5..018e780f0 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java @@ -43,8 +43,8 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, chemplant.power, chemplant.maxPower); if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { - if(this.chemplant.chemplantModule.recipe != null && ChemicalPlantRecipes.INSTANCE.recipeNameMap.containsKey(this.chemplant.chemplantModule.recipe)) { - GenericRecipe recipe = (GenericRecipe) ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(this.chemplant.chemplantModule.recipe); + if(this.chemplant.chemplantModule.getRecipe() != null && ChemicalPlantRecipes.INSTANCE.recipeNameMap.containsKey(this.chemplant.chemplantModule.getRecipeName())) { + GenericRecipe recipe = this.chemplant.chemplantModule.getRecipe(); GUIElements.drawHoveringTextRecipe(recipe.print(), mouseX, mouseY, this.fontRendererObj, itemRender, this.width, this.height); } else { this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); @@ -56,7 +56,7 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule.recipe, 0, ItemBlueprints.grabPool(chemplant.slots[1]), this); + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(ChemicalPlantRecipes.INSTANCE, chemplant, chemplant.chemplantModule.getRecipeName(), 0, ItemBlueprints.grabPool(chemplant.slots[1]), this); } @Override @@ -78,10 +78,10 @@ public class GUIMachineChemicalPlant extends GuiInfoContainer { if(chemplant.chemplantModule.progress > 0) { int j = (int) Math.ceil(70 * chemplant.chemplantModule.progress); - drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); + drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61 + (chemplant.chemplantModule.restrictedMode ? 16 : 0), j, 16); } - GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule.recipe); + GenericRecipe recipe = chemplant.chemplantModule.getRecipe(); /// LEFT LED if(chemplant.didProcess) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineCyclotron.java b/src/main/java/com/hbm/inventory/gui/GUIMachineCyclotron.java index 29cf1d2a1..546bd8570 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineCyclotron.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineCyclotron.java @@ -47,7 +47,7 @@ public class GUIMachineCyclotron extends GuiInfoContainer { protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.cyclotron.hasCustomInventoryName() ? this.cyclotron.getInventoryName() : I18n.format(this.cyclotron.getInventoryName()); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(name, 79 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 15, this.ySize - 96 + 2, 4210752); } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineEPress.java b/src/main/java/com/hbm/inventory/gui/GUIMachineEPress.java index 383d5bb3d..006461313 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineEPress.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineEPress.java @@ -12,7 +12,7 @@ import net.minecraft.util.ResourceLocation; public class GUIMachineEPress extends GuiInfoContainer { - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_epress.png"); + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_electric_press.png"); private TileEntityMachineEPress press; public GUIMachineEPress(InventoryPlayer invPlayer, TileEntityMachineEPress tedf) { @@ -20,21 +20,21 @@ public class GUIMachineEPress extends GuiInfoContainer { press = tedf; this.xSize = 176; - this.ySize = 166; + this.ySize = 186; } @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 17, guiTop + 69 - 52, 16, 52, press.power, press.maxPower); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 52 - 34, 16, 34, press.power, press.maxPower); } @Override protected void drawGuiContainerForegroundLayer( int i, int j) { String name = this.press.hasCustomInventoryName() ? this.press.getInventoryName() : I18n.format(this.press.getInventoryName()); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(name, 89 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } @@ -44,10 +44,10 @@ public class GUIMachineEPress extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - int i = (int) (press.power * 52 / press.maxPower); - drawTexturedModalRect(guiLeft + 17, guiTop + 69 - i, 176, 52 - i, 16, i); + int i = (int) (press.power * 34 / press.maxPower); + drawTexturedModalRect(guiLeft + 152, guiTop + 52 - i, 176, 34 - i, 16, i); int k = (int) (press.renderPress * 16 / press.maxPress); - this.drawTexturedModalRect(guiLeft + 79, guiTop + 35, 192, 0, 18, k); + this.drawTexturedModalRect(guiLeft + 18, guiTop + 33, 192, 0, 18, k); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java b/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java index bfb80de4b..e685553cf 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineElectricFurnace.java @@ -15,35 +15,35 @@ import com.hbm.util.i18n.I18nUtil; public class GUIMachineElectricFurnace extends GuiInfoContainer { - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/GUIElectricFurnace.png"); - private TileEntityMachineElectricFurnace diFurnace; + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_electric_furnace.png"); + private TileEntityMachineElectricFurnace furnace; - public GUIMachineElectricFurnace(InventoryPlayer invPlayer, TileEntityMachineElectricFurnace tedf) { - super(new ContainerElectricFurnace(invPlayer, tedf)); - diFurnace = tedf; + public GUIMachineElectricFurnace(InventoryPlayer invPlayer, TileEntityMachineElectricFurnace furnace) { + super(new ContainerElectricFurnace(invPlayer, furnace)); + this.furnace = furnace; this.xSize = 176; - this.ySize = 166; + this.ySize = 186; } @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 20, guiTop + 69 - 52, 16, 52, diFurnace.power, diFurnace.maxPower); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 52 - 34, 16, 34, furnace.power, furnace.maxPower); String[] upgradeText = new String[3]; upgradeText[0] = I18nUtil.resolveKey("desc.gui.upgrade"); upgradeText[1] = I18nUtil.resolveKey("desc.gui.upgrade.speed"); upgradeText[2] = I18nUtil.resolveKey("desc.gui.upgrade.power"); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 151, guiTop + 19, 8, 8, mouseX, mouseY, upgradeText); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 115, guiTop + 19, 8, 8, mouseX, mouseY, upgradeText); } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName()); + String name = this.furnace.hasCustomInventoryName() ? this.furnace.getInventoryName() : I18n.format(this.furnace.getInventoryName()); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } @@ -58,22 +58,23 @@ public class GUIMachineElectricFurnace extends GuiInfoContainer { //if initial ZE is still present, it'll be used instead //works so that container packets can still be used //efficiency! - if(diFurnace.isInvalid() && diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord) instanceof TileEntityMachineElectricFurnace) - diFurnace = (TileEntityMachineElectricFurnace) diFurnace.getWorldObj().getTileEntity(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord); + if(furnace.isInvalid() && furnace.getWorldObj().getTileEntity(furnace.xCoord, furnace.yCoord, furnace.zCoord) instanceof TileEntityMachineElectricFurnace) + furnace = (TileEntityMachineElectricFurnace) furnace.getWorldObj().getTileEntity(furnace.xCoord, furnace.yCoord, furnace.zCoord); - if(diFurnace.hasPower()) { - int i = (int)diFurnace.getPowerScaled(52); - drawTexturedModalRect(guiLeft + 20, guiTop + 69 - i, 200, 52 - i, 16, i); + if(furnace.hasPower()) { + int p = (int) furnace.getPowerScaled(34); + drawTexturedModalRect(guiLeft + 152, guiTop + 52 - p, 176, 64 - p, 16, p); } - if(diFurnace.getWorldObj().getBlock(diFurnace.xCoord, diFurnace.yCoord, diFurnace.zCoord) == ModBlocks.machine_electric_furnace_on) { - drawTexturedModalRect(guiLeft + 56, guiTop + 35, 176, 0, 16, 16); + if(furnace.getWorldObj().getBlock(furnace.xCoord, furnace.yCoord, furnace.zCoord) == ModBlocks.machine_electric_furnace_on) { + drawTexturedModalRect(guiLeft + 45, guiTop + 20, 192, 12, 18, 16); + drawTexturedModalRect(guiLeft + 46, guiTop + 47, 192, 28, 18, 16); } - int j1 = diFurnace.getProgressScaled(24); - drawTexturedModalRect(guiLeft + 79, guiTop + 34, 176, 17, j1 + 1, 17); + int p = furnace.getProgressScaled(28); + drawTexturedModalRect(guiLeft + 43, guiTop + 36, 176, 0, p, 12); - this.drawInfoPanel(guiLeft + 151, guiTop + 19, 8, 8, 8); + this.drawInfoPanel(guiLeft + 115, guiTop + 19, 8, 8, 8); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineOilWell.java b/src/main/java/com/hbm/inventory/gui/GUIMachineOilWell.java index 91e00e52d..dfb32841c 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineOilWell.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineOilWell.java @@ -21,19 +21,19 @@ public class GUIMachineOilWell extends GuiInfoContainer { super(new ContainerMachineOilWell(invPlayer, tedf)); derrick = tedf; - this.xSize = 176; - this.ySize = 166; + this.xSize = 184; + this.ySize = 190; } @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - derrick.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 62, guiTop + 69 - 52, 16, 52); - derrick.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 107, guiTop + 69 - 52, 16, 52); + derrick.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 76, guiTop + 74 - 52, 16, 52); + derrick.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 112, guiTop + 74 - 52, 16, 52); if(derrick.tanks.length >= 3) { - derrick.tanks[2].renderTankInfo(this, mouseX, mouseY, guiLeft + 40, guiTop + 37, 6, 32); + derrick.tanks[2].renderTankInfo(this, mouseX, mouseY, guiLeft + 54, guiTop + 45, 6, 32); } String[] upgradeText = new String[4]; @@ -41,17 +41,17 @@ public class GUIMachineOilWell extends GuiInfoContainer { upgradeText[1] = I18nUtil.resolveKey("desc.gui.upgrade.speed"); upgradeText[2] = I18nUtil.resolveKey("desc.gui.upgrade.power"); upgradeText[3] = I18nUtil.resolveKey("desc.gui.upgrade.afterburner"); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 156, guiTop + 3, 8, 8, mouseX, mouseY, upgradeText); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 160, guiTop + 21, 8, 8, mouseX, mouseY, upgradeText); - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 17, 16, 34, derrick.power, derrick.getMaxPower()); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 22, 16, 34, derrick.power, derrick.getMaxPower()); } @Override protected void drawGuiContainerForegroundLayer( int i, int j) { String name = this.derrick.hasCustomInventoryName() ? this.derrick.getInventoryName() : I18n.format(this.derrick.getInventoryName()); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); - this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + this.fontRendererObj.drawString(name, 126 - this.fontRendererObj.getStringWidth(name) / 2, 10, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 12, this.ySize - 96 + 2, 4210752); } @Override @@ -61,24 +61,24 @@ public class GUIMachineOilWell extends GuiInfoContainer { drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); int i = (int)(derrick.getPower() * 34 / derrick.getMaxPower()); - drawTexturedModalRect(guiLeft + 8, guiTop + 51 - i, 176, 34 - i, 16, i); + drawTexturedModalRect(guiLeft + 8, guiTop + 56 - i, 184, 34 - i, 16, i); int k = derrick.indicator; if(k != 0) - drawTexturedModalRect(guiLeft + 35, guiTop + 17, 176 + (k - 1) * 16, 52, 16, 16); + drawTexturedModalRect(guiLeft + 50, guiTop + 19, 184 + (k - 1) * 14, 34, 14, 14); if(derrick.tanks.length < 3) { - drawTexturedModalRect(guiLeft + 34, guiTop + 36, 192, 0, 18, 34); + drawTexturedModalRect(guiLeft + 48, guiTop + 44, 200, 0, 18, 34); } - derrick.tanks[0].renderTank(guiLeft + 62, guiTop + 69, this.zLevel, 16, 52); - derrick.tanks[1].renderTank(guiLeft + 107, guiTop + 69, this.zLevel, 16, 52); + derrick.tanks[0].renderTank(guiLeft + 76, guiTop + 74, this.zLevel, 16, 52); + derrick.tanks[1].renderTank(guiLeft + 112, guiTop + 74, this.zLevel, 16, 52); if(derrick.tanks.length > 2) { - derrick.tanks[2].renderTank(guiLeft + 40, guiTop + 69, this.zLevel, 6, 32); + derrick.tanks[2].renderTank(guiLeft + 54, guiTop + 77, this.zLevel, 6, 32); } - this.drawInfoPanel(guiLeft + 156, guiTop + 3, 8, 8, 8); + this.drawInfoPanel(guiLeft + 160, guiTop + 21, 8, 8, 8); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java b/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java index 2ae922c50..b6f48cbeb 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachinePUREX.java @@ -44,8 +44,8 @@ public class GUIMachinePUREX extends GuiInfoContainer { this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, purex.power, purex.maxPower); if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { - if(this.purex.purexModule.recipe != null && PUREXRecipes.INSTANCE.recipeNameMap.containsKey(this.purex.purexModule.recipe)) { - GenericRecipe recipe = (GenericRecipe) PUREXRecipes.INSTANCE.recipeNameMap.get(this.purex.purexModule.recipe); + if(this.purex.purexModule.getRecipe() != null && PUREXRecipes.INSTANCE.recipeNameMap.containsKey(this.purex.purexModule.getRecipe())) { + GenericRecipe recipe = this.purex.purexModule.getRecipe(); GUIElements.drawHoveringTextRecipe(recipe.print(), mouseX, mouseY, this.fontRendererObj, itemRender, this.width, this.height); } else { this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); @@ -57,7 +57,7 @@ public class GUIMachinePUREX extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(PUREXRecipes.INSTANCE, purex, purex.purexModule.recipe, 0, ItemBlueprints.grabPool(purex.slots[1]), this); + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(PUREXRecipes.INSTANCE, purex, purex.purexModule.getRecipeName(), 0, ItemBlueprints.grabPool(purex.slots[1]), this); } @Override @@ -82,7 +82,7 @@ public class GUIMachinePUREX extends GuiInfoContainer { drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); } - GenericRecipe recipe = PUREXRecipes.INSTANCE.recipeNameMap.get(purex.purexModule.recipe); + GenericRecipe recipe = purex.purexModule.getRecipe(); /// LEFT LED if(purex.didProcess) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachinePlasmaForge.java b/src/main/java/com/hbm/inventory/gui/GUIMachinePlasmaForge.java index 2516072f7..98b9f663c 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachinePlasmaForge.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachinePlasmaForge.java @@ -47,15 +47,15 @@ public class GUIMachinePlasmaForge extends GuiInfoContainer { this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 62, forge.power, forge.maxPower); if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 80 < mouseY && guiTop + 80 + 18 >= mouseY) { - if(this.forge.plasmaModule.recipe != null && PlasmaForgeRecipes.INSTANCE.recipeNameMap.containsKey(this.forge.plasmaModule.recipe)) { - GenericRecipe recipe = (GenericRecipe) PlasmaForgeRecipes.INSTANCE.recipeNameMap.get(this.forge.plasmaModule.recipe); + if(this.forge.plasmaModule.getRecipeName() != null && PlasmaForgeRecipes.INSTANCE.recipeNameMap.containsKey(this.forge.plasmaModule.getRecipeName())) { + GenericRecipe recipe = this.forge.plasmaModule.getRecipe(); GUIElements.drawHoveringTextRecipe(recipe.print(), mouseX, mouseY, this.fontRendererObj, itemRender, this.width, this.height); } else { this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); } } - PlasmaForgeRecipe recipe = (PlasmaForgeRecipe) PlasmaForgeRecipes.INSTANCE.recipeNameMap.get(forge.plasmaModule.recipe); + PlasmaForgeRecipe recipe = (PlasmaForgeRecipe) forge.plasmaModule.getRecipe(); if(recipe != null) { drawCustomInfoStat(mouseX, mouseY, guiLeft + 25, guiTop + 115, 18, 18, mouseX, mouseY, EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + BobMathUtil.getShortNumber(forge.plasmaEnergySync) + "TU / " + BobMathUtil.getShortNumber(recipe.ignitionTemp) + "TU"); @@ -102,7 +102,7 @@ public class GUIMachinePlasmaForge extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - if(this.checkClick(x, y, 7, 80, 18, 18)) GUIScreenRecipeSelector.openSelector(PlasmaForgeRecipes.INSTANCE, forge, forge.plasmaModule.recipe, 0, ItemBlueprints.grabPool(forge.slots[1]), this); + if(this.checkClick(x, y, 7, 80, 18, 18)) GUIScreenRecipeSelector.openSelector(PlasmaForgeRecipes.INSTANCE, forge, forge.plasmaModule.getRecipeName(), 0, ItemBlueprints.grabPool(forge.slots[1]), this); } @Override @@ -127,7 +127,7 @@ public class GUIMachinePlasmaForge extends GuiInfoContainer { drawTexturedModalRect(guiLeft + 62, guiTop + 81, 176, 62, j, 16); } - PlasmaForgeRecipe recipe = (PlasmaForgeRecipe) PlasmaForgeRecipes.INSTANCE.recipeNameMap.get(forge.plasmaModule.recipe); + PlasmaForgeRecipe recipe = (PlasmaForgeRecipe) forge.plasmaModule.getRecipe(); /// LEFT LED if(forge.didProcess) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachinePrecAss.java b/src/main/java/com/hbm/inventory/gui/GUIMachinePrecAss.java index 53d04d6f7..aa5a400cf 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachinePrecAss.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachinePrecAss.java @@ -42,8 +42,8 @@ public class GUIMachinePrecAss extends GuiInfoContainer { this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, assembler.power, assembler.maxPower); if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 125 < mouseY && guiTop + 125 + 18 >= mouseY) { - if(this.assembler.assemblerModule.recipe != null && PrecAssRecipes.INSTANCE.recipeNameMap.containsKey(this.assembler.assemblerModule.recipe)) { - GenericRecipe recipe = (GenericRecipe) PrecAssRecipes.INSTANCE.recipeNameMap.get(this.assembler.assemblerModule.recipe); + if(this.assembler.assemblerModule.getRecipeName() != null && PrecAssRecipes.INSTANCE.recipeNameMap.containsKey(this.assembler.assemblerModule.getRecipeName())) { + GenericRecipe recipe = this.assembler.assemblerModule.getRecipe(); GUIElements.drawHoveringTextRecipe(recipe.print(), mouseX, mouseY, this.fontRendererObj, itemRender, this.width, this.height); } else { this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); @@ -55,7 +55,7 @@ public class GUIMachinePrecAss extends GuiInfoContainer { protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(PrecAssRecipes.INSTANCE, assembler, assembler.assemblerModule.recipe, 0, ItemBlueprints.grabPool(assembler.slots[1]), this); + if(this.checkClick(x, y, 7, 125, 18, 18)) GUIScreenRecipeSelector.openSelector(PrecAssRecipes.INSTANCE, assembler, assembler.assemblerModule.getRecipeName(), 0, ItemBlueprints.grabPool(assembler.slots[1]), this); } @Override @@ -80,7 +80,7 @@ public class GUIMachinePrecAss extends GuiInfoContainer { drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); } - GenericRecipe recipe = PrecAssRecipes.INSTANCE.recipeNameMap.get(assembler.assemblerModule.recipe); + GenericRecipe recipe = assembler.assemblerModule.getRecipe(); /// LEFT LED if(assembler.didProcess) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachinePress.java b/src/main/java/com/hbm/inventory/gui/GUIMachinePress.java index a9c306d77..d0d6a64c6 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachinePress.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachinePress.java @@ -14,7 +14,7 @@ import net.minecraft.util.ResourceLocation; public class GUIMachinePress extends GuiInfoContainer { - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_press.png"); + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_press.png"); private TileEntityMachinePress press; public GUIMachinePress(InventoryPlayer invPlayer, TileEntityMachinePress tedf) { @@ -22,7 +22,7 @@ public class GUIMachinePress extends GuiInfoContainer { press = tedf; this.xSize = 176; - this.ySize = 202; + this.ySize = 214; } @Override @@ -37,7 +37,7 @@ public class GUIMachinePress extends GuiInfoContainer { protected void drawGuiContainerForegroundLayer( int i, int j) { String name = this.press.hasCustomInventoryName() ? this.press.getInventoryName() : I18n.format(this.press.getInventoryName()); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 5, 0xffffff); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } @@ -48,11 +48,11 @@ public class GUIMachinePress extends GuiInfoContainer { drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); if(press.burnTime >= 20) { - this.drawTexturedModalRect(guiLeft + 27, guiTop + 36, 0, 202, 14, 14); + this.drawTexturedModalRect(guiLeft + 26, guiTop + 36, 0, 214, 14, 14); } int k = (int) (press.renderPress * 16 / press.maxPress); - this.drawTexturedModalRect(guiLeft + 79, guiTop + 35, 14, 202, 18, k); + this.drawTexturedModalRect(guiLeft + 79, guiTop + 35, 15, 214, 18, k); double i = (double) press.speed / (double) press.maxSpeed; GUIElements.drawSmoothGauge(guiLeft + 34, guiTop + 25, this.zLevel, i, 5, 2, 1, 0x7f0000); diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineRTG.java b/src/main/java/com/hbm/inventory/gui/GUIMachineRTG.java index 90ca0759b..a0ebfe680 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineRTG.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineRTG.java @@ -52,7 +52,7 @@ public class GUIMachineRTG extends GuiInfoContainer { protected void drawGuiContainerForegroundLayer( int i, int j) { String name = this.rtg.hasCustomInventoryName() ? this.rtg.getInventoryName() : I18n.format(this.rtg.getInventoryName()); - this.fontRendererObj.drawString(name, 13 ,7, 10925486); + this.fontRendererObj.drawString(name, 60 - this.fontRendererObj.getStringWidth(name) / 2, 7, 10925486); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineShredder.java b/src/main/java/com/hbm/inventory/gui/GUIMachineShredder.java index d7df00134..5bf8b7259 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineShredder.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineShredder.java @@ -13,7 +13,7 @@ import net.minecraft.util.ResourceLocation; public class GUIMachineShredder extends GuiInfoContainer { - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_shredder.png"); + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_shredder.png"); private TileEntityMachineShredder diFurnace; public GUIMachineShredder(InventoryPlayer invPlayer, TileEntityMachineShredder tedf) { @@ -45,7 +45,7 @@ public class GUIMachineShredder extends GuiInfoContainer { protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName()); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(name, 106 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java index 66a3b7152..e196aed5d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineTurbineGas.java @@ -3,6 +3,7 @@ package com.hbm.inventory.gui; import java.util.ArrayList; import java.util.List; +import com.hbm.inventory.gui.element.GUIElements; import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineTurbineGas; @@ -25,96 +26,95 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; public class GUIMachineTurbineGas extends GuiInfoContainer { - + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/generators/gui_turbinegas.png"); - private static ResourceLocation gauge_tex = new ResourceLocation(RefStrings.MODID + ":textures/gui/gauges/button_big.png"); private TileEntityMachineTurbineGas turbinegas; - + int yStart; int slidStart; - + public GUIMachineTurbineGas(InventoryPlayer invPlayer, TileEntityMachineTurbineGas te) { super(new ContainerMachineTurbineGas(invPlayer, te)); turbinegas = te; - + this.xSize = 176; this.ySize = 223; } - + //@Override protected void mouseClicked(int x, int y, int i) { - + super.mouseClicked(x, y, i); - + slidStart = turbinegas.powerSliderPos; yStart = y; - + if(Math.sqrt(Math.pow((x - guiLeft - 88), 2) + Math.pow((y - guiTop - 40), 2)) <= 8) { //start-stop circular button - + if(turbinegas.counter == 0 || turbinegas.counter == 579) { - + int state = turbinegas.state - 1; //offline(0) to startup(-1), online(1) to offline(0) - + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); - + NBTTagCompound data = new NBTTagCompound(); data.setInteger("state", state); PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, turbinegas.xCoord, turbinegas.yCoord, turbinegas.zCoord)); } - else + else return; - } - + } + if(turbinegas.state == 1 && x > guiLeft + 74 && x <= guiLeft + 74 + 29 && y >= guiTop + 86 && y < guiTop + 86 + 13) { //auto mode button - + boolean automode = !turbinegas.autoMode; mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); - + NBTTagCompound data = new NBTTagCompound(); data.setBoolean("autoMode", automode); PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, turbinegas.xCoord, turbinegas.yCoord, turbinegas.zCoord)); } - + if(turbinegas.state == 1 && (guiTop + 97 - slidStart) <= yStart && (guiTop + 103 - slidStart) > yStart && guiLeft + 36 < x && guiLeft + 52 >= x) { //power slider - + NBTTagCompound data = new NBTTagCompound(); data.setBoolean("autoMode", false); //if you click the slider with automode on, turns off automode PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, turbinegas.xCoord, turbinegas.yCoord, turbinegas.zCoord)); mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); } } - + @Override protected void mouseClickMove(int x, int y, int p_146273_3_, long p_146273_4_) { - + super.mouseClickMove(x, y, p_146273_3_, p_146273_4_); - + int slidPos = turbinegas.powerSliderPos; - + if(!turbinegas.autoMode && turbinegas.state == 1 && guiLeft + 36 < x && guiLeft + 52 >= x && guiTop + 37 < y && guiTop + 103 >= y) { //area in which the slider can move - + if((guiTop + 97 - slidStart) <= yStart && (guiTop + 103 - slidStart) > yStart) { slidPos = guiTop + 100 - y; - - if(slidPos > 60) + + if(slidPos > 60) slidPos = 60; else if(slidPos < 0) slidPos = 0; - + NBTTagCompound data = new NBTTagCompound(); data.setDouble("slidPos", slidPos); PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, turbinegas.xCoord, turbinegas.yCoord, turbinegas.zCoord)); } } } - + @Override public void drawScreen(int mouseX, int mouseY, float f) { - + super.drawScreen(mouseX, mouseY, f); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 108, 142, 16, turbinegas.power, turbinegas.getMaxPower()); - + if(turbinegas.state == 1) { double consumption = turbinegas.fuelMaxCons.containsKey(turbinegas.tanks[0].getTankType()) ? turbinegas.fuelMaxCons.get(turbinegas.tanks[0].getTankType()) : 5D; this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Fuel consumption: " + 20 * (consumption * 0.05D + consumption * turbinegas.throttle / 100) + " mb/s"}); @@ -122,20 +122,20 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { else { this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 36, guiTop + 36, 16, 66, mouseX, mouseY, new String[] {"Generator offline"}); } - + if(turbinegas.temp >= 20) this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: " + (turbinegas.temp) + "°C"}); else this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 133, guiTop + 23, 8, 72, mouseX, mouseY, new String[] {"Temperature: 20°C"}); - + turbinegas.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 16, 16, 48); turbinegas.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 70, 16, 32); turbinegas.tanks[2].renderTankInfo(this, mouseX, mouseY, guiLeft + 147, guiTop + 61, 16, 36); turbinegas.tanks[3].renderTankInfo(this, mouseX, mouseY, guiLeft + 147, guiTop + 21, 16, 36); - + String[] info = I18nUtil.resolveKeyArray("desc.gui.turbinegas.automode"); this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 34, 16, 16, guiLeft - 8, guiTop + 44 + 16, info); - + List fuels = new ArrayList(); fuels.add(I18nUtil.resolveKey("desc.gui.turbinegas.fuels")); for(FluidType type : Fluids.getInNiceOrder()) { @@ -144,25 +144,25 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { } } this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 34 + 16, 16, 16, guiLeft - 8, guiTop + 44 + 16, fuels); - + String[] warning = I18nUtil.resolveKeyArray("desc.gui.turbinegas.warning"); if(turbinegas.tanks[0].getFill() < 5000 || turbinegas.tanks[1].getFill() < 1000) this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 34 + 32, 16, 16, guiLeft - 8, guiTop + 44 + 16, warning); } - + @Override protected void drawGuiContainerBackgroundLayer(float iinterpolation, int x, int y) { - + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); //the main thing - + if(turbinegas.autoMode) drawTexturedModalRect(guiLeft + 74, guiTop + 86, 194, 11, 29, 13); //auto mode button else drawTexturedModalRect(guiLeft + 74, guiTop + 86, 194, 24, 29, 13); - + switch(turbinegas.state) { case 0: drawTexturedModalRect(guiLeft + 80, guiTop + 32, 178, 38, 16, 16); //red button @@ -178,36 +178,36 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { default: break; } - + drawTexturedModalRect(guiLeft + 36, guiTop + 97 - turbinegas.powerSliderPos, 178, 0, 16, 6); //power slider - + int power = (int) (turbinegas.power * 142 / turbinegas.maxPower); //power storage drawTexturedModalRect(guiLeft + 26, guiTop + 109, 0, 223, power, 16); - - drawRPMGauge(turbinegas.rpm); + + GUIElements.drawSmoothTextureModalCircle(guiLeft + 64, guiTop + 16, this.zLevel, 176, 64, 48, 48, (double) turbinegas.rpm / 100); drawThermometer(turbinegas.temp); - + this.drawInfoPanel(guiLeft - 16, guiTop + 34, 16, 16, 3); //info this.drawInfoPanel(guiLeft - 16, guiTop + 34 + 16, 16, 16, 2); //fuels if((turbinegas.tanks[0].getFill()) < 5000 || turbinegas.tanks[1].getFill() < 1000) this.drawInfoPanel(guiLeft - 16, guiTop + 34 + 32, 16, 16, 7); if(turbinegas.tanks[0].getFill() == 0 || turbinegas.tanks[1].getFill() == 0) this.drawInfoPanel(guiLeft - 16, guiTop + 34 + 32, 16, 16, 6); - + turbinegas.tanks[0].renderTank(guiLeft + 8, guiTop + 65, this.zLevel, 16, 48); turbinegas.tanks[1].renderTank(guiLeft + 8, guiTop + 103, this.zLevel, 16, 32); turbinegas.tanks[2].renderTank(guiLeft + 147, guiTop + 98, this.zLevel, 16, 36); turbinegas.tanks[3].renderTank(guiLeft + 147, guiTop + 58, this.zLevel, 16, 36); } - + int numberToDisplay = 0; //for startup - int digitNumber = 0; + int digitNumber = 0; int exponent = 0; - + public void displayStartup() { - + if(numberToDisplay < 8888888 && turbinegas.counter < 60) { //48 frames needed to complete - + digitNumber++; if(digitNumber == 9) { digitNumber = 1; @@ -215,66 +215,66 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { } numberToDisplay += Math.pow(10, exponent); } - + if(turbinegas.counter > 50) numberToDisplay = 0; - + drawPowerMeterDisplay(numberToDisplay); } - + protected void drawPowerMeterDisplay(int number) { //display code - + int firstDigitX = 65; int firstDigitY = 62; - + int[] digit = new int[7]; - + for(int i = 6; i >= 0; i--) { //creates an array of digits that represent the numbers - + digit[i] = (int) (number % 10); - + number = number / 10; - + drawTexturedModalRect(guiLeft + firstDigitX + i * 7, guiTop + 9 + firstDigitY, 194 + digit[i] * 5, 0, 5, 11); } - + int uselessZeros = 0; - + for(int i = 0; i < 6; i++) { //counts how much zeros there are before the number, to display 57 instead of 000057 - + if(digit[i] == 0) uselessZeros++; else break; } - + for(int i = 0; i < uselessZeros; i++) { //turns off the useless zeros - + drawTexturedModalRect(guiLeft + firstDigitX + i * 7, guiTop + 9 + firstDigitY, 244, 0, 5, 11); } } - + protected void drawThermometer(int temp) { - + int xPos = guiLeft + 136; int yPos = guiTop + 28; - + int width = 2; int height = 64; - + int maxTemp = 800; - + double uMin = (176D / 256D); double uMax = (178D / 256D); double vMin = ((64D - 64 * temp / maxTemp) / 256D); double vMax = (64D / 256D); - + GL11.glEnable(GL11.GL_BLEND); - + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - + Tessellator tessellator = Tessellator.instance; - + tessellator.startDrawingQuads(); tessellator.addVertexWithUV(xPos, yPos + height, this.zLevel, uMin, vMax); tessellator.addVertexWithUV(xPos + width, yPos + height, this.zLevel, uMax, vMax); @@ -284,41 +284,41 @@ public class GUIMachineTurbineGas extends GuiInfoContainer { GL11.glDisable(GL11.GL_BLEND); } - - protected void drawRPMGauge(int position) { - - int xPos = guiLeft + 64; - int yPos = guiTop + 16; - - int squareSideLenght = 48; - - double uMin = (48D / 4848D) * position; - double uMax = (48D / 4848D) * (position + 1); - double vMin = 0D; - double vMax = 1D; - - GL11.glEnable(GL11.GL_BLEND); - - Minecraft.getMinecraft().getTextureManager().bindTexture(gauge_tex); //long boi - - Tessellator tessellator = Tessellator.instance; - - tessellator.startDrawingQuads(); - tessellator.addVertexWithUV(xPos, yPos + squareSideLenght, this.zLevel, uMin, vMax); - tessellator.addVertexWithUV(xPos + squareSideLenght, yPos + squareSideLenght, this.zLevel, uMax, vMax); - tessellator.addVertexWithUV(xPos + squareSideLenght, yPos, this.zLevel,uMax, vMin); - tessellator.addVertexWithUV(xPos, yPos, this.zLevel, uMin, vMin); - tessellator.draw(); - GL11.glDisable(GL11.GL_BLEND); - } - +// protected void drawRPMGauge(int position) { +// +// int xPos = guiLeft + 64; +// int yPos = guiTop + 16; +// +// int squareSideLenght = 48; +// +// double uMin = (48D / 4848D) * position; +// double uMax = (48D / 4848D) * (position + 1); +// double vMin = 0D; +// double vMax = 1D; +// +// GL11.glEnable(GL11.GL_BLEND); +// +// Minecraft.getMinecraft().getTextureManager().bindTexture(gauge_tex); //long boi +// +// Tessellator tessellator = Tessellator.instance; +// +// tessellator.startDrawingQuads(); +// tessellator.addVertexWithUV(xPos, yPos + squareSideLenght, this.zLevel, uMin, vMax); +// tessellator.addVertexWithUV(xPos + squareSideLenght, yPos + squareSideLenght, this.zLevel, uMax, vMax); +// tessellator.addVertexWithUV(xPos + squareSideLenght, yPos, this.zLevel,uMax, vMin); +// tessellator.addVertexWithUV(xPos, yPos, this.zLevel, uMin, vMin); +// tessellator.draw(); +// +// GL11.glDisable(GL11.GL_BLEND); +// } + @Override protected void drawGuiContainerForegroundLayer(int i, int j) { //useless piece of shit, at least for now String name = this.turbinegas.hasCustomInventoryName() ? this.turbinegas.getInventoryName() : I18n.format(this.turbinegas.getInventoryName()); - + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 94, 4210752); } -} \ No newline at end of file +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageAccess.java b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageAccess.java index d86dd8f30..0a904dada 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageAccess.java +++ b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageAccess.java @@ -2,58 +2,216 @@ package com.hbm.inventory.gui; import java.util.List; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import static com.hbm.inventory.gui.element.GUIElements.*; import com.hbm.inventory.container.ContainerPneumoStorageAccess; +import com.hbm.inventory.container.ContainerPneumoStorageAccess.SlotPneumo; import com.hbm.inventory.gui.element.GUIElements; import com.hbm.lib.RefStrings; import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageAccess; +import com.hbm.util.BobMathUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; public class GUIPneumoStorageAccess extends GuiInfoContainer { private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_pneumatic_access.png"); protected TileEntityPneumoStorageAccess access; + protected ContainerPneumoStorageAccess container; + protected GuiTextField search; + + protected int scrollIndex = 0; + protected int scrollBounds = 1; + protected boolean wasClicking = false; + protected boolean draggingScroll = false; + protected boolean wasMouseinGUI = false; + + protected static int sorting = 0; + protected static boolean startFocussed = false; public GUIPneumoStorageAccess(InventoryPlayer invPlayer, TileEntityPneumoStorageAccess access) { super(new ContainerPneumoStorageAccess(invPlayer, access)); + this.container = (ContainerPneumoStorageAccess) this.inventorySlots; this.access = access; - this.xSize = 176; + this.xSize = 176 + 34; this.ySize = 251; } + + @Override + public void initGui() { + super.initGui(); + + Keyboard.enableRepeatEvents(true); + search = new GuiTextField(this.fontRendererObj, guiLeft + 45 + 34, guiTop + 127, 86, 12); + search.setTextColor(0xffffff); + search.setDisabledTextColour(0xa0a0a0); + search.setEnableBackgroundDrawing(false); + search.setMaxStringLength(50); + search.setText(""); + + if(this.startFocussed) search.setFocused(true); + } @Override public void drawScreen(int x, int y, float interp) { + + this.wasMouseinGUI = this.checkClick(x, y, 0, 0, xSize, ySize); + + this.scrollBounds = (int) Math.ceil(container.getStackCount() / 8D - 6D); + if(this.scrollBounds < 1) this.scrollBounds = 1; + if(this.scrollIndex < 0) this.setScroll(0); + if(this.scrollIndex > scrollBounds) this.setScroll(scrollBounds); + + boolean isClicking = Mouse.isButtonDown(0); + if(!isClicking) this.draggingScroll = false; + + if(!wasClicking && isClicking && guiLeft + 153 + 34 <= x && guiLeft + 153 + 34 + 14 > x && guiTop + 16 < y && guiTop + 16 + 108 >= y) { + draggingScroll = true; + } + + if(draggingScroll) { + int range = 92; // 106 scroll bar size, -7 pixels on top and bottom + int sY = MathHelper.clamp_int(y - guiTop - 24, 0, 92); + double scrollFrac = (double) sY / (double) range; + int row = (int) Math.round(scrollBounds * scrollFrac); + this.setScroll(row); + } + + this.wasClicking = isClicking; + super.drawScreen(x, y, interp); + + //TODO localization + this.drawCustomInfoStat(x, y, guiLeft + 7, guiTop + 7, 18, 18, x, y, "Sorting: " + EnumChatFormatting.YELLOW + "Amount"); + this.drawCustomInfoStat(x, y, guiLeft + 7, guiTop + 25, 18, 18, x, y, "Sorting: " + EnumChatFormatting.YELLOW + "Item ID"); + this.drawCustomInfoStat(x, y, guiLeft + 7, guiTop + 43, 18, 18, x, y, "Sorting: " + EnumChatFormatting.YELLOW + "Name"); + this.drawCustomInfoStat(x, y, guiLeft + 7, guiTop + 61, 18, 18, x, y, "Sorting: " + EnumChatFormatting.YELLOW + "Internal Name"); + + this.drawCustomInfoStat(x, y, guiLeft + 7, guiTop + 79, 18, 18, x, y, "Focus search by default: " + (this.startFocussed ? EnumChatFormatting.GREEN + "ON" : EnumChatFormatting.RED + "OFF")); + this.drawCustomInfoStat(x, y, guiLeft + 7, guiTop + 97, 18, 18, x, y, "Inlude tooltips in search: " + (this.container.detailedSearch ? EnumChatFormatting.GREEN + "ON" : EnumChatFormatting.RED + "OFF")); } @Override protected void mouseClicked(int x, int y, int i) { super.mouseClicked(x, y, i); + + if(this.checkClick(x, y, 7, 7, 18, 18)) { this.click(); this.sorting = 0; this.scrollIndex = 0; this.container.setSorter(this.container.SORT_BY_STACK_SIZE); } + if(this.checkClick(x, y, 7, 25, 18, 18)) { this.click(); this.sorting = 1; this.scrollIndex = 0; this.container.setSorter(this.container.SORT_BY_ID); } + if(this.checkClick(x, y, 7, 43, 18, 18)) { this.click(); this.sorting = 2; this.scrollIndex = 0; this.container.setSorter(this.container.SORT_BY_LOCALIZED); } + if(this.checkClick(x, y, 7, 61, 18, 18)) { this.click(); this.sorting = 3; this.scrollIndex = 0; this.container.setSorter(this.container.SORT_BY_INTERNAL); } + + if(this.checkClick(x, y, 7, 79, 18, 18)) { this.click(); this.startFocussed = !this.startFocussed; } + if(this.checkClick(x, y, 7, 97, 18, 18)) { this.click(); this.container.detailedSearch = !this.container.detailedSearch; container.setSearchString(search.getText()); } + + search.mouseClicked(x, y, i); + } + + @Override + public void handleMouseInput() { + + int scrollDir = Mouse.getEventDWheel(); + + if(scrollDir != 0 && wasMouseinGUI) { + + if(scrollDir > 0) scrollDir = 1; + if(scrollDir < 0) scrollDir = -1; + this.setScroll(this.getScroll() - scrollDir); + return; + } + + super.handleMouseInput(); } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = "container.pneumpStorageAccess"; + String name = I18n.format("container.pneumoStorageAccess"); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 5, 4210752); - this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + this.fontRendererObj.drawString(name, 34 + 176 / 2 - this.fontRendererObj.getStringWidth(name) / 2, 5, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 34 + 8, this.ySize - 96 + 2, 4210752); + + GL11.glPushMatrix(); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_DEPTH_TEST); + double scale = 0.5D; + GL11.glScaled(scale, scale, 1); + + for(Object o : this.inventorySlots.inventorySlots) { + if(!(o instanceof SlotPneumo)) continue; + SlotPneumo pneumoSlot = (SlotPneumo) o; + if(pneumoSlot.getHasStack()) { + String label = BobMathUtil.getShortNumber(pneumoSlot.amount); + int ix = (int) ((pneumoSlot.xDisplayPosition + 16) / scale) - this.fontRendererObj.getStringWidth(label); + int iy = (int) ((pneumoSlot.yDisplayPosition + 16) / scale) - this.fontRendererObj.FONT_HEIGHT; + this.fontRendererObj.drawStringWithShadow(label, ix, iy, -1); + } + } + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glPopMatrix(); + + RenderHelper.enableGUIStandardItemLighting(); } @Override protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + drawTexturedModalRect(guiLeft + 34, guiTop, 0, 0, 176, ySize); + + drawTexturedModalRect(guiLeft, guiTop, 176, 15, 32, 122); + + drawTexturedModalRect(guiLeft + 7, guiTop + 7 + this.sorting * 18, 208, 0, 18, 18); + if(this.startFocussed) drawTexturedModalRect(guiLeft + 7, guiTop + 79, 208, 18, 18, 18); + if(this.container.detailedSearch) drawTexturedModalRect(guiLeft + 7, guiTop + 97, 208, 18, 18, 18); + + drawTexturedModalRect(guiLeft + 34 + getScrollBarXPos(), guiTop + getScrollBarYPos(), draggingScroll ? 188 : 176, 0, 12, 15); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 2, 0); + search.drawTextBox(); + GL11.glPopMatrix(); + } + + public int getScrollBarXPos() { + return 154; + } + + public int getScrollBarYPos() { + int scrollArea = 106 - 15; // bar height minus the scroll knob's height + double scrollProgress = (double) container.listingStart / (double) scrollBounds; + if(scrollProgress > 1) { + scrollProgress = 1; + this.setScroll(scrollBounds); + refreshContainer(); + } + int scrollYPos = 17 + (int) (scrollProgress * scrollArea); + return scrollYPos; + } + + public int getScroll() { + return MathHelper.clamp_int(scrollIndex, 0, scrollBounds); + } + + public void setScroll(int scroll) { + int prevScroll = getScroll(); + this.scrollIndex = MathHelper.clamp_int(scroll, 0, scrollBounds); + if(prevScroll != this.scrollIndex) refreshContainer(); + } + + public void refreshContainer() { + this.mc.playerController.windowClick(this.inventorySlots.windowId, ContainerPneumoStorageAccess.SLOT_CLICK_ID_REFRESH, 0, this.scrollIndex, this.mc.thePlayer); } @Override @@ -72,4 +230,22 @@ public class GUIPneumoStorageAccess extends GuiInfoContainer { if(font == null) font = this.fontRendererObj; GUIElements.drawHoveringText(list, x, y, font, itemRender, width, height, STANDARD_HEADER_OFFSET, STANDARD_LINE_DIST, STANDARD_COLOR_BACKGROUND, STANDARD_COLOR_BACKGROUND, 0xD57C4F, 0xAB4223); } + + @Override + protected void keyTyped(char c, int b) { + + if(search.textboxKeyTyped(c, b)) { + this.scrollIndex = 0; + container.setSearchString(search.getText()); + return; + } + + super.keyTyped(c, b); + } + + @Override + public void onGuiClosed() { + super.onGuiClosed(); + Keyboard.enableRepeatEvents(false); + } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageClutter.java b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageClutter.java index 39ebd6863..595d31075 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageClutter.java +++ b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageClutter.java @@ -3,8 +3,10 @@ package com.hbm.inventory.gui; import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerPneumoStorageClutter; +import com.hbm.inventory.gui.element.GUIElements; import com.hbm.lib.RefStrings; import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageClutter; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoTube; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; @@ -27,11 +29,15 @@ public class GUIPneumoStorageClutter extends GuiInfoContainer { @Override public void drawScreen(int x, int y, float interp) { super.drawScreen(x, y, interp); + + this.drawCustomInfoStat(x, y, guiLeft + 174, guiTop + 36, 20, 8, x, y, "Compressor: " + storage.compair.getPressure() + " PU", "Max range: " + TileEntityPneumoTube.getRangeFromPressure(storage.compair.getPressure()) + "m"); } @Override protected void mouseClicked(int x, int y, int i) { super.mouseClicked(x, y, i); + + clickSendFlag(storage, x, y, 174, 36, 20, 8, "pressure"); } @Override @@ -47,5 +53,8 @@ public class GUIPneumoStorageClutter extends GuiInfoContainer { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + drawTexturedModalRect(guiLeft + 174 + 4 * (storage.compair.getPressure() - 1), guiTop + 36, 200, 0, 4, 8); + GUIElements.drawSmoothGauge(guiLeft + 184, guiTop + 25, this.zLevel, (double) storage.compair.getFill() / (double) storage.compair.getMaxFill(), 5, 2, 1, 0xCA6C43, 0xAB4223); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageExporter.java b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageExporter.java new file mode 100644 index 000000000..3a0164a54 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageExporter.java @@ -0,0 +1,83 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerPneumoStorageExporter; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageExporter; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; + +public class GUIPneumoStorageExporter extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_pneumatic_exporter.png"); + private TileEntityPneumoStorageExporter importer; + + public GUIPneumoStorageExporter(InventoryPlayer invPlayer, TileEntityPneumoStorageExporter importer) { + super(new ContainerPneumoStorageExporter(invPlayer, importer)); + this.importer = importer; + + this.xSize = 176; + this.ySize = 185; + } + + @Override + public void drawScreen(int x, int y, float interp) { + super.drawScreen(x, y, interp); + + this.drawCustomInfoStat(x, y, guiLeft + 142, guiTop + 16, 18, 18, x, y, "Request mode: " + EnumChatFormatting.YELLOW + (this.importer.continuousRequest ? "Continuous" : "By request")); + + this.drawCustomInfoStat(x, y, guiLeft + 142, guiTop + 34, 18, 18, x, y, "Request type: " + EnumChatFormatting.YELLOW + ( + this.importer.requestMode == this.importer.MODE_AS_MUCH_AS_POSSIBLE ? "As much as possible" : + this.importer.requestMode == this.importer.MODE_FULL_STACK ? "Only full stacks" : "Only full requests" + )); + + if(this.importer.rorConfiguredMode) { + String[] label = new String[10]; + label[0] = "Filter type: " + EnumChatFormatting.YELLOW + "RoR configured"; + for(int i = 0; i < 9; i++) { + boolean hasFilter = this.importer.rorFilters[i][0] != 0 && this.importer.rorFilters[i][2] > 0; + label[i + 1] = "Slot " + (i + 1) + ": " + (!hasFilter ? "None" : ("Item #" + this.importer.rorFilters[i][0] + " with Meta " + this.importer.rorFilters[i][1] + " x" + this.importer.rorFilters[i][2])); + } + this.drawCustomInfoStat(x, y, guiLeft + 142, guiTop + 52, 18, 18, x, y, label); + } else { + this.drawCustomInfoStat(x, y, guiLeft + 142, guiTop + 52, 18, 18, x, y, "Filter type: " + EnumChatFormatting.YELLOW + "Manually configured"); + } + } + + @Override + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + clickSendFlag(importer, x, y, 142, 16, 18, 18, "continuous"); + clickSendFlag(importer, x, y, 142, 34, 18, 18, "request"); + clickSendFlag(importer, x, y, 142, 52, 18, 18, "ror"); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.importer.hasCustomInventoryName() ? this.importer.getInventoryName() : I18n.format(this.importer.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 5, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + if(this.importer.rorConfiguredMode) { + drawTexturedModalRect(guiLeft + 142, guiTop + 52, xSize, 18, 18, 18); + drawTexturedModalRect(guiLeft + 14, guiTop + 14, 77, 14, 58, 58); + } + if(!this.importer.continuousRequest) drawTexturedModalRect(guiLeft + 142, guiTop + 16, xSize, 0, 18, 18); + if(this.importer.requestMode == importer.MODE_FULL_STACK) drawTexturedModalRect(guiLeft + 142, guiTop + 34, xSize + 18, 0, 18, 18); + if(this.importer.requestMode == importer.MODE_FULL_REQUEST) drawTexturedModalRect(guiLeft + 142, guiTop + 34, xSize + 18, 18, 18, 18); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageImporter.java b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageImporter.java new file mode 100644 index 000000000..79f7fbcc1 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageImporter.java @@ -0,0 +1,42 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerPneumoStorageImporter; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageImporter; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIPneumoStorageImporter extends GuiContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_pneumatic_importer.png"); + private TileEntityPneumoStorageImporter importer; + + public GUIPneumoStorageImporter(InventoryPlayer invPlayer, TileEntityPneumoStorageImporter importer) { + super(new ContainerPneumoStorageImporter(invPlayer, importer)); + this.importer = importer; + + this.xSize = 176; + this.ySize = 185; + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.importer.hasCustomInventoryName() ? this.importer.getInventoryName() : I18n.format(this.importer.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 5, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageMono.java b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageMono.java new file mode 100644 index 000000000..a4c0fd348 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageMono.java @@ -0,0 +1,77 @@ +package com.hbm.inventory.gui; + +import java.util.Locale; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerPneumoStorageMono; +import com.hbm.inventory.gui.element.GUIElements; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageMono; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoTube; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIPneumoStorageMono extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_pneumatic_mono.png"); + protected TileEntityPneumoStorageMono storage; + + public GUIPneumoStorageMono(InventoryPlayer invPlayer, TileEntityPneumoStorageMono storage) { + super(new ContainerPneumoStorageMono(invPlayer, storage)); + this.storage = storage; + + this.xSize = 200; + this.ySize = 181; + } + + @Override + public void drawScreen(int x, int y, float interp) { + super.drawScreen(x, y, interp); + + this.drawCustomInfoStat(x, y, guiLeft + 174, guiTop + 36, 20, 8, x, y, "Compressor: " + storage.compair.getPressure() + " PU", "Max range: " + TileEntityPneumoTube.getRangeFromPressure(storage.compair.getPressure()) + "m"); + } + + @Override + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + clickSendFlag(storage, x, y, 174, 36, 20, 8, "pressure"); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.storage.hasCustomInventoryName() ? this.storage.getInventoryName() : I18n.format(this.storage.getInventoryName()); + + this.fontRendererObj.drawString(name, 176 / 2 - this.fontRendererObj.getStringWidth(name) / 2, 5, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + + for(int k = 0; k < 3; k++) { + if(this.storage.slots[k] != null) { + int amount = this.storage.amounts[k]; + String percent = " (" + (((int) (amount * 1000D / (double) storage.CAPACITY)) / 10D) + "%)"; + this.fontRendererObj.drawString(String.format(Locale.US, "%,d", amount) + percent, 50, 22 + k * 18, 0x000000); + } + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + for(int i = 0; i < 3; i++) { + if(this.storage.slots[i] != null) { + int bar = this.storage.amounts[i] * 124 / this.storage.CAPACITY; + drawTexturedModalRect(guiLeft + 44, guiTop + 17 + i * 18, 0, 181, bar, 16); + } + } + + drawTexturedModalRect(guiLeft + 174 + 4 * (storage.compair.getPressure() - 1), guiTop + 36, 200, 0, 4, 8); + GUIElements.drawSmoothGauge(guiLeft + 184, guiTop + 25, this.zLevel, (double) storage.compair.getFill() / (double) storage.compair.getMaxFill(), 5, 2, 1, 0xCA6C43, 0xAB4223); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIPneumoTube.java b/src/main/java/com/hbm/inventory/gui/GUIPneumoTube.java index aa9f968d3..409e522f1 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIPneumoTube.java +++ b/src/main/java/com/hbm/inventory/gui/GUIPneumoTube.java @@ -8,17 +8,13 @@ import com.hbm.inventory.container.ContainerPneumoTube; import com.hbm.inventory.gui.element.GUIElements; import com.hbm.lib.RefStrings; import com.hbm.module.ModulePatternMatcher; -import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.network.pneumatic.TileEntityPneumoTube; import com.hbm.uninos.networkproviders.PneumaticNetwork; import net.minecraft.client.Minecraft; -import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; @@ -68,22 +64,13 @@ public class GUIPneumoTube extends GuiInfoContainer { super.mouseClicked(x, y, i); if(!endpointOnly) { - click(x, y, 7, 52, 18, 18, "redstone"); - click(x, y, 6, 36, 20, 8, "pressure"); - click(x, y, 151, 16, 18, 18, "receive"); - click(x, y, 151, 52, 18, 18, "send"); + clickSendFlag(tube, x, y, 7, 52, 18, 18, "redstone"); + clickSendFlag(tube, x, y, 6, 36, 20, 8, "pressure"); + clickSendFlag(tube, x, y, 151, 16, 18, 18, "receive"); + clickSendFlag(tube, x, y, 151, 52, 18, 18, "send"); } - click(x, y, 128, 30, 14, 26, "whitelist"); - } - - public void click(int x, int y, int left, int top, int sizeX, int sizeY, String name) { - if(checkClick(x, y, left, top, sizeX, sizeY)) { - mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); - NBTTagCompound data = new NBTTagCompound(); - data.setBoolean(name, true); - PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, tube.xCoord, tube.yCoord, tube.zCoord)); - } + clickSendFlag(tube, x, y, 128, 30, 14, 26, "whitelist"); } @Override diff --git a/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java b/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java index 7c3184bc4..299785a2a 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java @@ -65,7 +65,7 @@ public class GUIRadioRec extends GuiScreen { private void drawGuiContainerForegroundLayer(int x, int y) { - String name = I18nUtil.resolveKey("container.radio"); + String name = I18nUtil.resolveKey("container.radiorec"); this.fontRendererObj.drawString(name, this.guiLeft + this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, this.guiTop + 6, 4210752); if(guiLeft + 137 <= x && guiLeft + 137 + 18 > x && guiTop + 17 < y && guiTop + 17 + 18 >= y) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java b/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java index 25072180d..aa0948990 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java +++ b/src/main/java/com/hbm/inventory/gui/GUIReactorZirnox.java @@ -1,5 +1,6 @@ package com.hbm.inventory.gui; +import com.hbm.inventory.gui.element.GUIElements; import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerReactorZirnox; @@ -39,10 +40,10 @@ public class GUIReactorZirnox extends GuiInfoContainer { zirnox.water.renderTankInfo(this, mouseX, mouseY, guiLeft + 178, guiTop + 108, 18, 12); this.drawCustomInfo(this, mouseX, mouseY, guiLeft + 160, guiTop + 33, 18, 17, new String[] { "Temperature:", " " + Math.round((zirnox.heat) * 0.00001 * 780 + 20) + "°C" }); this.drawCustomInfo(this, mouseX, mouseY, guiLeft + 178, guiTop + 33, 18, 17, new String[] { "Pressure:", " " + Math.round((zirnox.pressure) * 0.00001 * 30) + " bar" }); - + String[] coolantText = I18nUtil.resolveKeyArray("desc.gui.zirnox.coolant"); this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, coolantText); - + String[] pressureText = I18nUtil.resolveKeyArray("desc.gui.zirnox.pressure"); this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16 + 16, pressureText); @@ -92,20 +93,12 @@ public class GUIReactorZirnox extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - int s = zirnox.getGaugeScaled(6, 0); - drawTexturedModalRect(guiLeft + 160, guiTop + 108, 238, 0 + 12 * s, 18, 12); + GUIElements.drawSmoothLinearGauge(guiLeft + 162, guiTop + 114, this.zLevel, (double) zirnox.steam.getFill() / zirnox.steam.getMaxFill(), 2, 5, 0.75, 14, 0, 0x7F0000); + GUIElements.drawSmoothLinearGauge(guiLeft + 144, guiTop + 114, this.zLevel, (double) zirnox.carbonDioxide.getFill() / zirnox.carbonDioxide.getMaxFill(), 2, 5, 0.75, 14, 0, 0x7F0000); + GUIElements.drawSmoothLinearGauge(guiLeft + 180, guiTop + 114, this.zLevel, (double) zirnox.water.getFill() / zirnox.water.getMaxFill(), 2, 5, 0.75, 14, 0, 0x7F0000); - int c = zirnox.getGaugeScaled(6, 1); - drawTexturedModalRect(guiLeft + 142, guiTop + 108, 238, 0 + 12 * c, 18, 12); - - int w = zirnox.getGaugeScaled(6, 2); - drawTexturedModalRect(guiLeft + 178, guiTop + 108, 238, 0 + 12 * w, 18, 12); - - int h = zirnox.getGaugeScaled(12, 3); - drawTexturedModalRect(guiLeft + 160, guiTop + 33, 220, 0 + 18 * h, 18, 17); - - int p = zirnox.getGaugeScaled(12, 4); - drawTexturedModalRect(guiLeft + 178, guiTop + 33, 220, 0 + 18 * p, 18, 17); + GUIElements.drawSmoothGauge(guiLeft + 169, guiTop + 42, this.zLevel, (double) zirnox.heat/100000, 5, 2, 1, 0x7F0000); + GUIElements.drawSmoothGauge(guiLeft + 187, guiTop + 42, this.zLevel, (double) zirnox.pressure/100000, 5, 2, 1, 0x7F0000); if(zirnox.isOn) { for(int x = 0; x < 4; x++) @@ -127,4 +120,4 @@ public class GUIReactorZirnox extends GuiInfoContainer { this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 32 + 16, 16, 16, 6); } -} \ No newline at end of file +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKDisplay.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKDisplay.java index 71583b47f..a97c4b9cc 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKDisplay.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKDisplay.java @@ -51,7 +51,7 @@ public class GUIScreenRBMKDisplay extends GuiScreen { label[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 73 + oY + i * 54, 85 - oX * 2, 14); GUIScreenRBMKKeyPad.setupTextFieldStandard(label[i], 30, display.displays[i].label); rtty[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 55 + oY + i * 54, 85 - oX * 2, 14); - GUIScreenRBMKKeyPad.setupTextFieldStandard(rtty[i], 10, display.displays[i].rtty); + GUIScreenRBMKKeyPad.setupTextFieldStandard(rtty[i], GUIScreenRadioTorch.MAX_CHAN_LENGTH, display.displays[i].rtty); active[i] = display.displays[i].active; polling[i] = display.displays[i].polling; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKGauge.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKGauge.java index f734d5b2e..d83fcdbd0 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKGauge.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKGauge.java @@ -56,7 +56,7 @@ public class GUIScreenRBMKGauge extends GuiScreen { label[i] = new GuiTextField(this.fontRendererObj, guiLeft + 175 + oX, guiTop + 55 + oY + i * 36, 72 - oX * 2, 14); GUIScreenRBMKKeyPad.setupTextFieldStandard(label[i], 15, gauge.gauges[i].label); rtty[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 73 + oY + i * 36, 72 - oX * 2, 14); - GUIScreenRBMKKeyPad.setupTextFieldStandard(rtty[i], 10, gauge.gauges[i].rtty); + GUIScreenRBMKKeyPad.setupTextFieldStandard(rtty[i], GUIScreenRadioTorch.MAX_CHAN_LENGTH, gauge.gauges[i].rtty); min[i] = new GuiTextField(this.fontRendererObj, guiLeft + 121 + oX, guiTop + 73 + oY + i * 36, 52 - oX * 2, 14); GUIScreenRBMKKeyPad.setupTextFieldStandard(min[i], 32, gauge.gauges[i].min + ""); max[i] = new GuiTextField(this.fontRendererObj, guiLeft + 195 + oX, guiTop + 73 + oY + i * 36, 52 - oX * 2, 14); diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKGraph.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKGraph.java index c8803228e..a478dcb7f 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKGraph.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKGraph.java @@ -51,7 +51,7 @@ public class GUIScreenRBMKGraph extends GuiScreen { label[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 73 + oY + i * 54, 72 - oX * 2, 14); GUIScreenRBMKKeyPad.setupTextFieldStandard(label[i], 30, graph.graphs[i].label); rtty[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 55 + oY + i * 54, 72 - oX * 2, 14); - GUIScreenRBMKKeyPad.setupTextFieldStandard(rtty[i], 10, graph.graphs[i].rtty); + GUIScreenRBMKKeyPad.setupTextFieldStandard(rtty[i], GUIScreenRadioTorch.MAX_CHAN_LENGTH, graph.graphs[i].rtty); min[i] = new GuiTextField(this.fontRendererObj, guiLeft + 175 + oX, guiTop + 55 + oY + i * 54, 72 - oX * 2, 14); GUIScreenRBMKKeyPad.setupTextFieldStandard(min[i], 15, graph.graphs[i].minBound ? graph.graphs[i].min + "" : ""); max[i] = new GuiTextField(this.fontRendererObj, guiLeft + 175 + oX, guiTop + 73 + oY + i * 54, 72 - oX * 2, 14); diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKIndicator.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKIndicator.java index ca4e7474c..5e9425127 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKIndicator.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKIndicator.java @@ -56,7 +56,7 @@ public class GUIScreenRBMKIndicator extends GuiScreen { label[i] = new GuiTextField(this.fontRendererObj, guiLeft + 175 + oX, guiTop + 37 + oY + i * 36, 72 - oX * 2, 14); GUIScreenRBMKKeyPad.setupTextFieldStandard(label[i], 15, indicator.indicators[i].label); rtty[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 55 + oY + i * 36, 72 - oX * 2, 14); - GUIScreenRBMKKeyPad.setupTextFieldStandard(rtty[i], 10, indicator.indicators[i].rtty); + GUIScreenRBMKKeyPad.setupTextFieldStandard(rtty[i], GUIScreenRadioTorch.MAX_CHAN_LENGTH, indicator.indicators[i].rtty); min[i] = new GuiTextField(this.fontRendererObj, guiLeft + 121 + oX, guiTop + 55 + oY + i * 36, 52 - oX * 2, 14); GUIScreenRBMKKeyPad.setupTextFieldStandard(min[i], 32, indicator.indicators[i].min + ""); max[i] = new GuiTextField(this.fontRendererObj, guiLeft + 195 + oX, guiTop + 55 + oY + i * 36, 52 - oX * 2, 14); diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKKeyPad.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKKeyPad.java index 204061617..bedb318f7 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKKeyPad.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKKeyPad.java @@ -66,7 +66,7 @@ public class GUIScreenRBMKKeyPad extends GuiScreen { label[i] = new GuiTextField(this.fontRendererObj, guiLeft + 175 + oX, guiTop + 55 + oY + i * 36, 72 - oX * 2, 14); setupTextFieldStandard(label[i], 15, keypad.keys[i].label); rtty[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 73 + oY + i * 36, 72 - oX * 2, 14); - setupTextFieldStandard(rtty[i], 10, keypad.keys[i].rtty); + setupTextFieldStandard(rtty[i], GUIScreenRadioTorch.MAX_CHAN_LENGTH, keypad.keys[i].rtty); cmd[i] = new GuiTextField(this.fontRendererObj, guiLeft + 121 + oX, guiTop + 73 + oY + i * 36, 126 - oX * 2, 14); setupTextFieldStandard(cmd[i], 32, keypad.keys[i].command); diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKLever.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKLever.java index a98861e2f..3f7445309 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKLever.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRBMKLever.java @@ -52,7 +52,7 @@ public class GUIScreenRBMKLever extends GuiScreen { for(int i = 0; i < 2; i++) { rtty[i] = new GuiTextField(this.fontRendererObj, guiLeft + 27 + oX, guiTop + 55 + oY + i * 54, 72 - oX * 2, 14); - GUIScreenRBMKKeyPad.setupTextFieldStandard(rtty[i], 10, lever.levers[i].rtty); + GUIScreenRBMKKeyPad.setupTextFieldStandard(rtty[i], GUIScreenRadioTorch.MAX_CHAN_LENGTH, lever.levers[i].rtty); label[i] = new GuiTextField(this.fontRendererObj, guiLeft + 175 + oX, guiTop + 55 + oY + i * 54, 72 - oX * 2, 14); GUIScreenRBMKKeyPad.setupTextFieldStandard(label[i], 15, lever.levers[i].label); cmdOn[i] = new GuiTextField(this.fontRendererObj, guiLeft + 45 + oX, guiTop + 73 + oY + i * 54, 81 - oX * 2, 14); diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioAUTOCAL.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioAUTOCAL.java index ebf3220b8..febe5c862 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioAUTOCAL.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioAUTOCAL.java @@ -1,434 +1,518 @@ -package com.hbm.inventory.gui; - -import java.awt.Desktop; -import java.io.File; -import java.io.PrintWriter; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.Arrays; - -import org.lwjgl.opengl.GL11; - -import com.hbm.lib.RefStrings; -import com.hbm.main.MainRegistry; -import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.toserver.NBTControlPacket; -import com.hbm.tileentity.network.TileEntityRadioAUTOCAL; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.audio.PositionedSoundRecord; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; - -public class GUIScreenRadioAUTOCAL extends GuiScreen { - - protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_rtty_autocal.png"); - protected TileEntityRadioAUTOCAL autocal; - - protected int xSize = 170; - protected int ySize = 138; - protected int guiLeft; - protected int guiTop; - - public GUIScreenRadioAUTOCAL(TileEntityRadioAUTOCAL autocal) { - this.autocal = autocal; - } - - @Override - public void initGui() { - super.initGui(); - this.guiLeft = (this.width - this.xSize) / 2; - this.guiTop = (this.height - this.ySize) / 2; - } - - @Override - public void drawScreen(int mouseX, int mouseY, float f) { - this.drawDefaultBackground(); - this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); - GL11.glDisable(GL11.GL_LIGHTING); - this.drawGuiContainerForegroundLayer(mouseX, mouseY); - GL11.glEnable(GL11.GL_LIGHTING); - } - - @Override - protected void mouseClicked(int x, int y, int i) { - super.mouseClicked(x, y, i); - - NBTTagCompound data = null; - - if(checkClick(x, y, 8, 36, 18, 18)) { data = new NBTTagCompound(); data.setBoolean("on", true); } - if(checkClick(x, y, 28, 36, 18, 18)) { data = new NBTTagCompound(); data.setBoolean("ignore", true); } - if(checkClick(x, y, 48, 36, 18, 18)) { data = new NBTTagCompound(); data.setBoolean("auto", true); } - - // open folder and generate new script file - if(checkClick(x, y, 104, 36, 18, 18)) { - try { - File uploadFolder = new File(MainRegistry.configDir.getParentFile(), "hbmComputerUpload"); - File script = new File(uploadFolder, "script.txt"); - if(!uploadFolder.exists()) uploadFolder.mkdir(); - if(!script.exists()) script.createNewFile(); - script.setExecutable(false); - Desktop.getDesktop().browse(script.toURI()); - } catch(Throwable ex) { MainRegistry.logger.error("Couldn't open link", ex); } - } - - // open folder and generate new doc file - if(checkClick(x, y, 144, 36, 18, 18)) { - try { - File uploadFolder = new File(MainRegistry.configDir.getParentFile(), "hbmComputerUpload"); - File doc = new File(uploadFolder, "documentation.md"); - if(!uploadFolder.exists()) uploadFolder.mkdir(); - if(!doc.exists()) { - doc.createNewFile(); - try { - PrintWriter printer = new PrintWriter(doc, StandardCharsets.US_ASCII.name()); - for(String line : DOCS) printer.println(line); - printer.close(); - } catch(Throwable e) { } - } - Desktop.getDesktop().browse(doc.toURI()); - } catch(Throwable ex) { MainRegistry.logger.error("Couldn't open link", ex); } - } - - if(checkClick(x, y, 84, 36, 18, 18)) { - try { - File uploadFolder = new File(MainRegistry.configDir.getParentFile(), "hbmComputerUpload"); - File script = new File(uploadFolder, "script.txt"); - if(!uploadFolder.exists()) uploadFolder.mkdir(); - if(!script.exists()) { - script.createNewFile(); - script.setExecutable(false); - return; - } - /*FileReader reader = new FileReader(script); - BufferedReader buffer = new BufferedReader(reader); - String[] lines = buffer.lines().toArray(String[]::new); - buffer.close(); - // this is going to blow the fuck up once we hit the max packet size, but let's ignore that for now - data = new NBTTagCompound(); - StringBuilder builder = new StringBuilder(); - for(int l = 0; l < lines.length; l++) { - builder.append(lines[i]); - if(l < lines.length - 1) builder.append("\n"); // yeah why the fuck not - } - data.setString("payload", builder.toString());*/ - byte[] bytes = Files.readAllBytes(Paths.get(script.toURI())); - data = new NBTTagCompound(); - data.setString("payload", new String(bytes, StandardCharsets.UTF_8)); - - } catch(Throwable ex) { } - } - - // this thing can both upload and download files so let's be careful about this - // the upload is simple, it's just text that is handled by the AUTOCAL, so doing anything malicious isn't more likely than with any other package - // download is iffy, because we take text from the server, fully user-definable, and save it to disk. it's stored as a txt so accudentally running it - // or getting it to run itself, should it be a malicious script, is unlikely. still, we want to minimized the chances as much as we can - // option 1: set file attribute to disallow running (i.e. disable executable perm) - // option 2: add fluff that would break scripts, however they might work. we can't change the actual lines because we want the script to be edited, - // but we can add some extra crap that would either halt common scripting langs entirely or at least disrupt them into not functioning - // option 3: enforce validation so only MS-ES1 script can be received by the client. this means that info such as comments or incorrectly written commands - // are lost, however this is the safest way because it becomes impossible to send malicious code, but it also interferes with regular user operation more - - if(data != null) { - mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); - PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, autocal.xCoord, autocal.yCoord, autocal.zCoord)); - } - } - - protected boolean checkClick(int x, int y, int left, int top, int sizeX, int sizeY) { - return guiLeft + left <= x && guiLeft + left + sizeX > x && guiTop + top < y && guiTop + top + sizeY >= y; - } - - private void drawGuiContainerForegroundLayer(int x, int y) { - - for(int i = 0; i < autocal.history.length; i++) { - String line = autocal.history[i]; - if(line == null || line.isEmpty()) continue; - this.fontRendererObj.drawString(line, guiLeft + 7, guiTop + 73 + i * 10, 0x00ff00); - } - - if(checkClick(x, y, 8, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.RED + "ON/OFF"}), x, y); - if(checkClick(x, y, 28, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.RED + "Ignore Errors", "Skips instructions that error,", "leaving the computer turned on.", "May cause unintended behavior", "and inconsistencies."}), x, y); - if(checkClick(x, y, 48, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.RED + "Automatic Reboot", "Restarts the computer automatically when", "the program stops due to an error", "or after finishing."}), x, y); - - if(checkClick(x, y, 84, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.BLUE + "Upload Program"}), x, y); - if(checkClick(x, y, 104, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.BLUE + "Open Program File"}), x, y); - if(checkClick(x, y, 124, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.BLUE + "Download Program", EnumChatFormatting.RED + "Currently unsupported!"}), x, y); - if(checkClick(x, y, 144, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.BLUE + "Open Documentation"}), x, y); - } - - private void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - - if(autocal.isOn) drawTexturedModalRect(guiLeft + 8, guiTop + 36, xSize, 0, 18, 18); - if(!autocal.ignoreError) drawTexturedModalRect(guiLeft + 28, guiTop + 36, xSize, 18, 18, 18); - if(!autocal.autoReboot) drawTexturedModalRect(guiLeft + 48, guiTop + 36, xSize, 36, 18, 18); - } - - @Override - protected void keyTyped(char c, int b) { - if(b == 1 || b == Minecraft.getMinecraft().gameSettings.keyBindInventory.getKeyCode()) { - Minecraft.getMinecraft().thePlayer.closeScreen(); - } - } - - @Override public boolean doesGuiPauseGame() { return false; } - - - public static final String[] DOCS = new String[] { - "# AUTOCAL - The Automatic Calculator", - "", - "## About this document", - "This documentation is designed to be understandable even by people with no programming background. This documentation extends to the AUTOCAL unit as well as the MS-ES1 script language it is programmed with.", - "", - "Read this document carefully as all the described concepts are vital for using the AUTOCAL unit.", - "", - "## About AUTOCAL", - "The AUTOCAL automatic calculator is a basic machine that reads a script, line by line, and performs actions based on those lines. This means it can be programmed with behavior, doing math, and handling signals. It communicated with the outside world exclusively using Redstone-over-Radio (RoR) signals, allowing RoR to supply it with values to be processed, and returning RoR signals to be displayed or for controlling RoR receiving devices.", - "", - "The first button is the on/off switch. Turning the AUTOCAL unit on will start the script at the first line. If the script concludes, an error is encountered (without the \"ignore errors\" setting enabled), the `shutdown` command is used or no program is loaded to begin with, the unit will automatically power down.", - "", - "The second button is the \"ignore errors\" setting. The red X means the setting is disabled, if an error is encountered in the program (an unrecognized command, missing or incorrect parameters, anything the script isn't meant to handle) then the unit will shut off. Otherwise, the erroring instruction is simply skipped. This may cause undefined or unexpected behavior, however in certain circumstances this doesn't matter. It's advised to keep this turned off, as it makes it easier to find obvious errors in the script.", - "", - "The third button is the \"automatic reboot\" setting. If the unit is powered down, no matter the reason, it will automatically try to start again. This allows for a simple \"loop\" where the same script is repeated every time it ends by simply rebooting the AUTOCAL unit at the end. Do note that doing so will delete all saved variables, more on how variables work later.", - "", - "The fourth button is for uploading the script. The script is in the minecraft's install folder, under the `hbmComputerUpload` folder, named `script.txt`. Clicking this button will send the contents of this script file to the AUTOCAL unit.", - "", - "The fifth button is for opening the script file. If no script file exists yet, the folder and empty script will be created.", - "", - "The sixth button is for downloading a script file. The existing `script.txt` is deleted and replaced with the script that is loaded onto the AUTOCAL unit.", - "", - "The simple workflow of programming an AUTOCAL unit is therefore using button #5 to open the file, writing the program, using #4 to flash the program to the AUTOCAL unit, and then using the first button to turn it on.", - "", - "## About MS-ES1", - "The script read by AUTOCAL units is written in *Machine Script - Equestrian Standard, Version 1*, or MS-ES1. MS-ES1 features named variables, value comparison, (conditional) jumping, evaluation of mathematical expressions and reading/writing of RoR signals. The speed at which lines are processed is defined by the *clock speed*, which can be defined in the script. The amount describes the number of lines processed per tick, i.e. the default clock speed of 1 means 20 lines are processed per second (there are 20 ticks in one second). The maximum clock speed is determined by the server config value `AUTOCAL_MAX_CLOCK` (default is 20, i.e. 400 per second).", - "", - "Example: `/ntmserver set AUTOCAL_MAX_CLOCK 10` -> Sets the max clock speed to 10.", - "", - "## About the Buffer", - "The buffer is a single \"slot\" of information that can be used for many commands. Some commands produce an output which is saved to the buffer, some commands modify the contents of the buffer, and some commands use the buffer's contents. The buffer's contents can also be saved permanently as a named variable, and named variables can be written back into the buffer again if needed. The buffer persists as long as the AUTOCAL unit is running, should it restart or shut down, the buffer's contents are lost.", - "", - "## About Variables", - "MS-ES1 allows named variables to be saved for later use. There is no limit to how many variables can be saved. All variables are text (\"Strings\"), however depending on the command and context, that text may be interpreted as a number (both full and decimal). Variables, much like the buffer, are also stored as long as the program is running, if the AUTOCAL unit shuts down, all stored variables are lost.", - "", - "## About Variable Substitution", - "Many commands allow for *variable substitution*, i.e. a specific format can be used to insert the contents of a variable (or multiple!) into a parameter. This allows for the quick use of variables, or multiple variables in the same statement. Substitution is defined by `$variable name$`, where this text is replaced with the value of a variable called \"variable name\".", - "", - "Example: `eval $val1$ + $val2$` assuming `val1` is 4 and `val2` is 8 would resolve to `eval 4 + 8`.", - "", - "Special case: The contents of the buffer can also be accessed using substitution using `$buffer$`. Consequently, a variable also named \"buffer\" can **not** be accessed using variable substitution at all.", - "", - "## About Redstone-over-Radio", - "RoR has a specific limitation: A signal cannot be sent on the same channel within the same game tick. Subsequent signals on the same channel in the same tick will overwrite the previous one, with the exception of numeric (whole number) signals which are added together (e.g. sending \"5\" and \"7\" in the same tick creates a signal \"12\"). Since the AUTOCAL unit's clock speed allows it to theoretically send multiple signals on the same channel on the same tick, it might be necessary to *end* the operation for this tick even though there's still clock cycles left to do. This can be done with the `endtick` command.", - "", - "## The Script (Commands)", - "", - "### Comments", - "Lines that start with `# ` (hashtag + space) are comments, and therefore ignored. If the AUTOCAL encounters such a line, it is skipped, not using up the clock cycle.", - "", - "Example: `# This is a comment` -> A line that does nothing, but can still be useful to explain and annotate other commands.", - "", - "### nop", - "`nop` (no operation) is an operation that consumes one clock cycle, but does not have any other effect. This is only useful in special cases where clock cycle timing is somehow important.", - "", - "### clockspeed", - "`clockspeed ` sets the AUTOCAL's clock speed (i.e. amount of lines processed per tick). This can be changed at any point in the script, but usually it is most useful to start the script by defining the clock speed.", - "", - "Example: `clockspeed 5` -> Sets the AUTOCAL's clock speed to five lines per tick (100 lines per second).", - "", - "### dest", - "`dest ` creates a jump destination. Using the various jumping conditions, we can cause the AUTOCAL to return back (or forward) to this point. If a destination is reached not by jumping but simply by reading the next line, it will not use up a clock cycle, just like a comment. Destinations need unique names, if multiple destinations exist with the same name, then the latter ones will overwrite the former ones.", - "", - "Example: `dest start` -> Creates a destination point named \"start\", any jump instruction using \"start\" will cause the script to return to this point.", - "", - "### jmp", - "`jmp ` will cause the program to skip to the destination with the supplied name. The jump will always be performed when the script reaches this instruction. Supports variable substitution!", - "", - "Example: `jmp start` -> Jumps to the destination point named \"start\".", - "Example: `jmp $dest$` -> Jumps to the destination point with the same name as the contents of the variable \"dest\".", - "", - "### jmpif", - "`jmpif ` will cause the program to skip to the destination with the supplied name, if the buffer's content is `true`. Otherwise, the program will just proceed to the next line, like any other instruction. Supports variable substitution!", - "", - "Example:", - "`jmpif skip`", - "`nop`", - "`dest skip`", - "`nop`", - "", - "-> If the buffer is `true`, then the program will jump to the destination point named \"skip\" and only run the second `nop`. Otherwise, both the first and second `nop` will run.", - "", - "### jmpnot", - "`jmpnot ` will cause the program to skip to the destination with the supplied name, if the buffer's content is **not** `true`. This is basically the inverse of `jmpif`. Only exists for some convenience for people who are used to more traditional languages' `if` statements. Supports variable substitution!", - "", - "Example:", - "`jmpnot skip` <- if", - "`nop` <- then", - "`jmp end`", - "`dest skip`", - "`nop` <- else", - "`dest end` <- end", - "", - "-> By using two jumps, one conditional and one fixed, we can emulate the structure of an `if/else` block. If the buffer's content is `true`, the first `nop` runs. Otherwise, the second `nop` is run. The second jump (`jmp end`) lets us skip over the \"else\" part of the script after running the \"then\" part.", - "", - "### endtick", - "`endtick` stops the script until the next game tick. This is important when sending multiple RoR signals on the same channel in a row, since a channel in the same tick can only hold one signal.", - "", - "### shutdown", - "`shutdown` will turn the AUTOCAL unit off. If the AUTOCAL is set up to automatically reboot, this effectively restarts the script from scratch, voiding all saved variables and the buffer. If not, then the AUTOCAL unit will stay off until manually restarted.", - "", - "### load", - "`load ` will take the value of a variable with the supplied name and copy it to the buffer. Many commands work directly out of the buffer, so next to variable substitution, this is the only way of actually accessing the contents of a variable.", - "", - "Example: `load val` -> Assuming that the variable \"val\" contains the value `5`, then the buffer's value is now overwritten with that `5`.", - "", - "### save", - "`save ` will take the value of the buffer and save it to a variable with the supplied name. This is the only way of actually changing variables, and saving values for later use besides the buffer.", - "", - "Example: `save val` -> Assuming that the buffer contains the value `12`, this will create a new variable named \"val\" with the value of `12`.", - "", - "### buffer", - "`buffer ` will write the supplied value directly to the buffer. This means that commands that require buffer values can be supplied with values directly from the code.", - "", - "Example:", - "`buffer Horseshoe`", - "`save item`", - "", - "-> Will buffer the value `Horseshoe` and then save it to the variable called \"item\".", - "", - "### eval", - "`eval [statement]` will evaluate the supplied statement as a mathematical expression. In short, anything NTM's calculator can make sense of (the one you open with N by default), this function can do the same. The statement is optional, if no statement is supplied, then it will try to use the buffer's contents as the statement. `eval` produces **decimal** values and not whole number **integers**, so for use in RoR signals, the output needs to be rounded! The result of the calculation is then saved to the buffer. Supports variable substitution!", - "", - "Example: `eval 4 + 5` -> Calculates \"4+5\" and saves `9` to the buffer.", - "Example: `eval $val$ / 2` -> Takes the value of \"val\" and divides it by 2, saving the result to the buffer.", - "", - "Example:", - "`load calc`", - "`eval`", - "", - "-> Will write the value of \"calc\" to the buffer, and then treat it as a mathematical expression. If we assume \"calc\" to be `5+2` then `eval` will end up writing `7` to the buffer.", - "", - "### evalr", - "`evalr [statement]` is identical to `eval`, however it will round the result to the nearest whole number. Whole numbers are important for RoR, since gauges, numeric displays and logic receivers can only handle whole numbers, and not decimals.", - "", - "### rounddown / floor", - "`rounddown` or `floor` will try to interpret the buffer's content as a decimal, and round it **down** to the next lower integer, writing the result to the buffer again.", - "", - "Example: `rounddown` -> Assuming the buffer's value is `4.2`, the buffer's new value will be `4`.", - "Example: `rounddown` -> Assuming the buffer's value is `4.6`, the buffer's new value will be `4`.", - "", - "### roundup / ceil", - "`roundup` or `ceil` will try to interpret the buffer's content as a decimal, and round it **up** to the next higher integer, writing the result to the buffer again.", - "", - "Example: `roundup` -> Assuming the buffer's value is `4.2`, the buffer's new value will be `5`.", - "Example: `roundup` -> Assuming the buffer's value is `4.6`, the buffer's new value will be `5`.", - "", - "### round / nearest", - "`round` or `nearest` will try to interpret the buffer's content as a decimal, and round it to the **closest** integer, writing the result to the buffer again.", - "", - "Example: `round` -> Assuming the buffer's value is `4.2`, the buffer's new value will be `4`.", - "Example: `round` -> Assuming the buffer's value is `4.6`, the buffer's new value will be `5`.", - "", - "### concat", - "`concat ` works similarly to `buffer `, however it accepts variable substitution. This means that the text of multiple variables can be combined.", - "", - "Example: `concat $first$ and $second$` -> Assuming the variable \"first\" to be `Cats` and \"second\" to be `dogs`, then the result saved to the buffer is `Cats and dogs`.", - "", - "### eq", - "`eq ` - equals, will try to compare the buffer to the supplied value. The buffer will be set to `true` if the values are equal and `false` otherwise. Supports variable substitution!", - "", - "Example: `eq Brick` -> If the buffer is `Brick`, then it is set to `true`, otherwise it becomes `false`.", - "Example: `eq $comp$` -> If the buffer's value is equal to the value of the variable \"comp\", then it is set to `true`, otherwise it becomes `false`.", - "", - "### gtb", - "`gtb ` - greater than buffer, will try to compare the buffer to the supplied value. The buffer will be set to `true` if the supplied numerical value is greater and `false` otherwise. Supports variable substitution!", - "", - "Example: `gtb 4` -> If the buffer is `3` or lower, then it is set to `true`, otherwise it becomes `false`.", - "Example: `gtb $comp$` -> If the buffer lower than the value of \"comp\", then it is set to `true`, otherwise it becomes `false`.", - "", - "### ltb", - "`ltb ` - less than buffer, will try to compare the buffer to the supplied value. The buffer will be set to `true` if the supplied numerical value is lower and `false` otherwise. Supports variable substitution!", - "", - "Example: `ltb 4` -> If the buffer is `5` or higher, then it is set to `true`, otherwise it becomes `false`.", - "Example: `ltb $comp$` -> If the buffer higher than the value of \"comp\", then it is set to `true`, otherwise it becomes `false`.", - "", - "### geb", - "`geb ` - greater than or equal buffer.", - "", - "### leb", - "`leb ` - less than or equal buffer.", - "", - "### send", - "`send ` will send a Redstone-over-Radio signal over the supplied channel, with the signal's value being the current buffer's value. Sending repeatedly over the same channel requires waiting for a full game tick, so using `endtick` after sending is advised. Supports variable substitution!", - "", - "Example:", - "`buffer Hello!`", - "`send transmission`", - "", - "-> Will send the RoR signal `Hello!` on the channel \"transmission\".", - "", - "Example:", - "`buffer SOS`", - "`send $target$`", - "", - "-> Will send the RoR signal \"SOS\" to the channel saved in the variable \"target\".", - "", - "### listen ", - "`listen ` will listen in on the supplied RoR channel and write the signal to the buffer. Will detect all signals, even expired ones, and one just ones sent in the previous tick, so picking up a signal doesn't mean it's new information. Supports variable substitution!", - "", - "Example:", - "`listen input`", - "`eval $buffer$ * 100`", - "`send output`", - "", - "-> Will take the signal from the RoR channel \"input\", multiply it by 100, and send that value on the channel \"output\".", - "", - "## Advanced", - "", - "### Conditional Branches", - "Basic if/else conditions are the bread and butter of most programming. If we want to change the behavior based on different values, we need to compare, and then conditional jump.", - "", - "This example creates a script that processed a number \"val\" based on how high it is. 4 and below are multiplied by 2, otherwise it is divided by 2:", - "", - "`buffer 4` <- buffer `4` for comparison", - "`gtb $val$` <- is \"val\" greater than our buffer?", - "`jmpnot else` <- if not, jump to \"else\"", - "`eval $val$ / 2` <- if it is, divide by 2", - "`save val` <- ...and save to \"val\"", - "`jmp end` <- now jump to \"end\" to skip our \"else\" block", - "`dest else` <- else...", - "`eval $val$ * 2` <- multiply by 2", - "`save val` <- ...and save to val", - "`dest end` <- no matter which branch we took, we always end up here", - "", - "### Methods", - "People who are used to high languages will already know this concept, reusable parts of code with a set of parameters and an optional return value. For this we will use a few variables and a set of jumps in order to be able to use this piece of code from anywhere:", - "", - "This example implements a basic lerp (linear interpolation) function.", - "", - "`dest lerp`", - "`eval $a$ + ($b$ - $a$) * $i$`", - "`save result`", - "`jmp $return$`", - "", - "This function requires the variables \"a\", \"b\" and \"i\" as parameters and saves the result to the variable \"result\". We can now access this function like such:", - "", - "`buffer 4` <- first we set up our parameters to be used in the function", - "`save a`", - "`buffer 7`", - "`save b`", - "`buffer 0.6`", - "`save i`", - "`buffer returnhere` <- then we define the name of the return point", - "`save return`", - "`jmp lerp` <- call the function", - "`dest returnhere` <- once the function concludes, we are back here", - "", - "At the end of it all, the variable \"result\" now has the desired value.", - }; -} +package com.hbm.inventory.gui; + +import java.awt.Desktop; +import java.io.File; +import java.io.PrintWriter; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.net.URI; +import java.util.Arrays; + +import org.lwjgl.Sys; +import org.lwjgl.opengl.GL11; + +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; +import com.hbm.tileentity.network.TileEntityRadioAUTOCAL; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; + +public class GUIScreenRadioAUTOCAL extends GuiScreen { + + protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_rtty_autocal.png"); + protected TileEntityRadioAUTOCAL autocal; + + protected int xSize = 170; + protected int ySize = 138; + protected int guiLeft; + protected int guiTop; + + public GUIScreenRadioAUTOCAL(TileEntityRadioAUTOCAL autocal) { + this.autocal = autocal; + } + + private void browse(URI uri) throws IOException { + // workaround for Java not supporting all platforms, mostly for Linux + if (Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) { + Desktop.getDesktop().browse(uri); + } else { + if (Sys.getVersion().charAt(0) == '3') { + // probably a LWJGL3ify user, open the folder instead since that somehow seems to work + File uploadFolder = new File(MainRegistry.configDir.getParentFile(), "hbmComputerUpload"); + if (uploadFolder.exists()) Sys.openURL(uploadFolder.toString()); + } else { + Sys.openURL(uri.toString()); + } + } + } + + @Override + public void initGui() { + super.initGui(); + this.guiLeft = (this.width - this.xSize) / 2; + this.guiTop = (this.height - this.ySize) / 2; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + + if(this.autocal == null || this.autocal.isInvalid()) { + Minecraft.getMinecraft().thePlayer.closeScreen(); + return; + } + + this.drawDefaultBackground(); + this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); + GL11.glDisable(GL11.GL_LIGHTING); + this.drawGuiContainerForegroundLayer(mouseX, mouseY); + GL11.glEnable(GL11.GL_LIGHTING); + } + + @Override + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + NBTTagCompound data = null; + + if(checkClick(x, y, 8, 36, 18, 18)) { data = new NBTTagCompound(); data.setBoolean("on", true); } + if(checkClick(x, y, 28, 36, 18, 18)) { data = new NBTTagCompound(); data.setBoolean("ignore", true); } + if(checkClick(x, y, 48, 36, 18, 18)) { data = new NBTTagCompound(); data.setBoolean("auto", true); } + + // open folder and generate new script file + if(checkClick(x, y, 104, 36, 18, 18)) { + try { + File uploadFolder = new File(MainRegistry.configDir.getParentFile(), "hbmComputerUpload"); + File script = new File(uploadFolder, "script.txt"); + if(!uploadFolder.exists()) uploadFolder.mkdir(); + if(!script.exists()) script.createNewFile(); + script.setExecutable(false); + browse(script.toURI()); + } catch(Throwable ex) { MainRegistry.logger.error("Couldn't open link", ex); } + } + + // open folder and generate new doc file + if(checkClick(x, y, 144, 36, 18, 18)) { + try { + File uploadFolder = new File(MainRegistry.configDir.getParentFile(), "hbmComputerUpload"); + File doc = new File(uploadFolder, "documentation_v1.1.md"); + if(!uploadFolder.exists()) uploadFolder.mkdir(); + if(!doc.exists()) { + doc.createNewFile(); + try { + PrintWriter printer = new PrintWriter(doc, StandardCharsets.US_ASCII.name()); + for(String line : DOCS) printer.println(line); + printer.close(); + } catch(Throwable e) { } + } + browse(doc.toURI()); + } catch(Throwable ex) { MainRegistry.logger.error("Couldn't open link", ex); } + } + + if(checkClick(x, y, 84, 36, 18, 18)) { + try { + File uploadFolder = new File(MainRegistry.configDir.getParentFile(), "hbmComputerUpload"); + File script = new File(uploadFolder, "script.txt"); + if(!uploadFolder.exists()) uploadFolder.mkdir(); + if(!script.exists()) { + script.createNewFile(); + script.setExecutable(false); + return; + } + + byte[] bytes = Files.readAllBytes(Paths.get(script.toURI())); + data = new NBTTagCompound(); + data.setString("payload", new String(bytes, StandardCharsets.UTF_8)); + + } catch(Throwable ex) { } + } + + // this thing can both upload and download files so let's be careful about this + // the upload is simple, it's just text that is handled by the AUTOCAL, so doing anything malicious isn't more likely than with any other package + // download is iffy, because we take text from the server, fully user-definable, and save it to disk. it's stored as a txt so accudentally running it + // or getting it to run itself, should it be a malicious script, is unlikely. still, we want to minimized the chances as much as we can + // option 1: set file attribute to disallow running (i.e. disable executable perm) + // option 2: add fluff that would break scripts, however they might work. we can't change the actual lines because we want the script to be edited, + // but we can add some extra crap that would either halt common scripting langs entirely or at least disrupt them into not functioning + // option 3: enforce validation so only MS-ES1 script can be received by the client. this means that info such as comments or incorrectly written commands + // are lost, however this is the safest way because it becomes impossible to send malicious code, but it also interferes with regular user operation more + + if(data != null) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, autocal.xCoord, autocal.yCoord, autocal.zCoord)); + } + } + + protected boolean checkClick(int x, int y, int left, int top, int sizeX, int sizeY) { + return guiLeft + left <= x && guiLeft + left + sizeX > x && guiTop + top < y && guiTop + top + sizeY >= y; + } + + private void drawGuiContainerForegroundLayer(int x, int y) { + + for(int i = 0; i < autocal.history.length; i++) { + String line = autocal.history[i]; + if(line == null || line.isEmpty()) continue; + this.fontRendererObj.drawString(line, guiLeft + 7, guiTop + 73 + i * 10, 0x00ff00); + } + + if(checkClick(x, y, 8, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.RED + "ON/OFF"}), x, y); + if(checkClick(x, y, 28, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.RED + "Ignore Errors", "Skips instructions that error,", "leaving the computer turned on.", "May cause unintended behavior", "and inconsistencies."}), x, y); + if(checkClick(x, y, 48, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.RED + "Automatic Reboot", "Restarts the computer automatically when", "the program stops due to an error", "or after finishing."}), x, y); + + if(checkClick(x, y, 84, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.BLUE + "Upload Program"}), x, y); + if(checkClick(x, y, 104, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.BLUE + "Open Program File"}), x, y); + if(checkClick(x, y, 124, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.BLUE + "Download Program", EnumChatFormatting.RED + "Currently unsupported!"}), x, y); + if(checkClick(x, y, 144, 36, 18, 18)) this.func_146283_a(Arrays.asList(new String[] {EnumChatFormatting.BLUE + "Open Documentation"}), x, y); + } + + private void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + if(autocal.isOn) drawTexturedModalRect(guiLeft + 8, guiTop + 36, xSize, 0, 18, 18); + if(!autocal.ignoreError) drawTexturedModalRect(guiLeft + 28, guiTop + 36, xSize, 18, 18, 18); + if(!autocal.autoReboot) drawTexturedModalRect(guiLeft + 48, guiTop + 36, xSize, 36, 18, 18); + } + + @Override + protected void keyTyped(char c, int b) { + if(b == 1 || b == Minecraft.getMinecraft().gameSettings.keyBindInventory.getKeyCode()) { + Minecraft.getMinecraft().thePlayer.closeScreen(); + } + } + + @Override public boolean doesGuiPauseGame() { return false; } + + + public static final String[] DOCS = new String[] { + "# AUTOCAL - The Automatic Calculator", + "", + "## About this document", + "This documentation is designed to be understandable even by people with no programming background. This documentation extends to the AUTOCAL unit as well as the MS-ES1 script language it is programmed with.", + "", + "Read this document carefully as all the described concepts are vital for using the AUTOCAL unit.", + "", + "## About AUTOCAL", + "The AUTOCAL automatic calculator is a basic machine that reads a script, line by line, and performs actions based on those lines. This means it can be programmed with behavior, doing math, and handling signals. It communicated with the outside world exclusively using Redstone-over-Radio (RoR) signals, allowing RoR to supply it with values to be processed, and returning RoR signals to be displayed or for controlling RoR receiving devices.", + "", + "The first button is the on/off switch. Turning the AUTOCAL unit on will start the script at the first line. If the script concludes, an error is encountered (without the \"ignore errors\" setting enabled), the `shutdown` command is used or no program is loaded to begin with, the unit will automatically power down.", + "", + "The second button is the \"ignore errors\" setting. The red X means the setting is disabled, if an error is encountered in the program (an unrecognized command, missing or incorrect parameters, anything the script isn't meant to handle) then the unit will shut off. Otherwise, the erroring instruction is simply skipped. This may cause undefined or unexpected behavior, however in certain circumstances this doesn't matter. It's advised to keep this turned off, as it makes it easier to find obvious errors in the script.", + "", + "The third button is the \"automatic reboot\" setting. If the unit is powered down, no matter the reason, it will automatically try to start again. This allows for a simple \"loop\" where the same script is repeated every time it ends by simply rebooting the AUTOCAL unit at the end. Do note that doing so will delete all saved variables, more on how variables work later.", + "", + "The fourth button is for uploading the script. The script is in the minecraft's install folder, under the `hbmComputerUpload` folder, named `script.txt`. Clicking this button will send the contents of this script file to the AUTOCAL unit.", + "", + "The fifth button is for opening the script file. If no script file exists yet, the folder and empty script will be created.", + "", + "The sixth button is for downloading a script file. The existing `script.txt` is deleted and replaced with the script that is loaded onto the AUTOCAL unit.", + "", + "The simple workflow of programming an AUTOCAL unit is therefore using button #5 to open the file, writing the program, using #4 to flash the program to the AUTOCAL unit, and then using the first button to turn it on.", + "", + "## About MS-ES1", + "The script read by AUTOCAL units is written in *Machine Script - Equestrian Standard, Version 1*, or MS-ES1. MS-ES1 features named variables, value comparison, (conditional) jumping, evaluation of mathematical expressions and reading/writing of RoR signals. The speed at which lines are processed is defined by the *clock speed*, which can be defined in the script. The amount describes the number of lines processed per tick, i.e. the default clock speed of 1 means 20 lines are processed per second (there are 20 ticks in one second). The maximum clock speed is determined by the server config value `AUTOCAL_MAX_CLOCK` (default is 20, i.e. 400 per second).", + "", + "Example: `/ntmserver set AUTOCAL_MAX_CLOCK 10` -> Sets the max clock speed to 10.", + "", + "## About MS-ES v1.1", + "MS-ES v1.1 (or MS-ES1 FEID, \"First Extended Instruction Set\") is the second released version of the AUTOCAL's script interpreter. It features various useful additions such as text splitting, substrings, a stack-based buffer and world time grabbing. The stack for example allows for a call stack, which means that functions that were jumped to can now be nested without having to save the most recent jumping points in dedicated variables. The string split and substring operations now allow for reversing concat operations and potentially grabbing individual coordinates out of combined coordinate strings. A single RoR send operation can now send serialized data (i.e. multiple values in a single text string) which can now finally be de-serialized again.", + "", + "Programs witten in MS-ES1 are largely compatible with MS-ES1.1 interpreters, however, MS-ES1.1 now imposes a character limit of 256 on buffered values.", + "", + "## About the Buffer", + "The buffer is a single \"slot\" of information that can be used for many commands. Some commands produce an output which is saved to the buffer, some commands modify the contents of the buffer, and some commands use the buffer's contents. The buffer's contents can also be saved permanently as a named variable, and named variables can be written back into the buffer again if needed. The buffer persists as long as the AUTOCAL unit is running, should it restart or shut down, the buffer's contents are lost.", + "", + "## About the Stack (v1.1)", + "The stack functions similar to the buffer, as in there is only one single stack that can be accessed per AUTOCAL unit, and it can save arbitrary text data. The difference being, while the buffer can only store one value, the stack can store a list of up to 256 values. Values on a stack follow the last-in-first-out principle, i.e. the most recently added values are read first. The stack supports `push` (adding new elements), `pop` (reading and removing elements) and `peek` (reading but not removing elements).", + "", + "## About Variables", + "MS-ES1 allows named variables to be saved for later use. There is no limit to how many variables can be saved. All variables are text (\"Strings\"), however depending on the command and context, that text may be interpreted as a number (both full and decimal). Variables, much like the buffer, are also stored as long as the program is running, if the AUTOCAL unit shuts down, all stored variables are lost.", + "", + "## About Variable Substitution", + "Many commands allow for *variable substitution*, i.e. a specific format can be used to insert the contents of a variable (or multiple!) into a parameter. This allows for the quick use of variables, or multiple variables in the same statement. Substitution is defined by `$variable name$`, where this text is replaced with the value of a variable called \"variable name\".", + "", + "Example: `eval $val1$ + $val2$` assuming `val1` is 4 and `val2` is 8 would resolve to `eval 4 + 8`.", + "", + "Special case: The contents of the buffer can also be accessed using substitution using `$buffer$`. Consequently, a variable also named \"buffer\" can **not** be accessed using variable substitution at all.", + "", + "## About Redstone-over-Radio", + "RoR has a specific limitation: A signal cannot be sent on the same channel within the same game tick. Subsequent signals on the same channel in the same tick will overwrite the previous one, with the exception of numeric (whole number) signals which are added together (e.g. sending \"5\" and \"7\" in the same tick creates a signal \"12\"). Since the AUTOCAL unit's clock speed allows it to theoretically send multiple signals on the same channel on the same tick, it might be necessary to *end* the operation for this tick even though there's still clock cycles left to do. This can be done with the `endtick` command.", + "", + "## The Script (Commands)", + "", + "### Comments", + "Lines that start with `# ` (hashtag + space) are comments, and therefore ignored. If the AUTOCAL encounters such a line, it is skipped, not using up the clock cycle.", + "", + "Example: `# This is a comment` -> A line that does nothing, but can still be useful to explain and annotate other commands.", + "", + "### nop", + "`nop` (no operation) is an operation that consumes one clock cycle, but does not have any other effect. This is only useful in special cases where clock cycle timing is somehow important.", + "", + "### clockspeed", + "`clockspeed ` sets the AUTOCAL's clock speed (i.e. amount of lines processed per tick). This can be changed at any point in the script, but usually it is most useful to start the script by defining the clock speed.", + "", + "Example: `clockspeed 5` -> Sets the AUTOCAL's clock speed to five lines per tick (100 lines per second).", + "", + "### dest", + "`dest ` creates a jump destination. Using the various jumping conditions, we can cause the AUTOCAL to return back (or forward) to this point. If a destination is reached not by jumping but simply by reading the next line, it will not use up a clock cycle, just like a comment. Destinations need unique names, if multiple destinations exist with the same name, then the latter ones will overwrite the former ones.", + "", + "Example: `dest start` -> Creates a destination point named \"start\", any jump instruction using \"start\" will cause the script to return to this point.", + "", + "### jmp", + "`jmp ` will cause the program to skip to the destination with the supplied name. The jump will always be performed when the script reaches this instruction. Supports variable substitution!", + "", + "Example: `jmp start` -> Jumps to the destination point named \"start\".", + "Example: `jmp $dest$` -> Jumps to the destination point with the same name as the contents of the variable \"dest\".", + "", + "### jmpif", + "`jmpif ` will cause the program to skip to the destination with the supplied name, if the buffer's content is `true`. Otherwise, the program will just proceed to the next line, like any other instruction. Supports variable substitution!", + "", + "Example:", + "`jmpif skip`", + "`nop`", + "`dest skip`", + "`nop`", + "", + "-> If the buffer is `true`, then the program will jump to the destination point named \"skip\" and only run the second `nop`. Otherwise, both the first and second `nop` will run.", + "", + "### jmpnot", + "`jmpnot ` will cause the program to skip to the destination with the supplied name, if the buffer's content is **not** `true`. This is basically the inverse of `jmpif`. Only exists for some convenience for people who are used to more traditional languages' `if` statements. Supports variable substitution!", + "", + "Example:", + "`jmpnot skip` <- if", + "`nop` <- then", + "`jmp end`", + "`dest skip`", + "`nop` <- else", + "`dest end` <- end", + "", + "-> By using two jumps, one conditional and one fixed, we can emulate the structure of an `if/else` block. If the buffer's content is `true`, the first `nop` runs. Otherwise, the second `nop` is run. The second jump (`jmp end`) lets us skip over the \"else\" part of the script after running the \"then\" part.", + "", + "### endtick", + "`endtick` stops the script until the next game tick. This is important when sending multiple RoR signals on the same channel in a row, since a channel in the same tick can only hold one signal.", + "", + "### shutdown", + "`shutdown` will turn the AUTOCAL unit off. If the AUTOCAL is set up to automatically reboot, this effectively restarts the script from scratch, voiding all saved variables and the buffer. If not, then the AUTOCAL unit will stay off until manually restarted.", + "", + "### load", + "`load ` will take the value of a variable with the supplied name and copy it to the buffer. Many commands work directly out of the buffer, so next to variable substitution, this is the only way of actually accessing the contents of a variable.", + "", + "Example: `load val` -> Assuming that the variable \"val\" contains the value `5`, then the buffer's value is now overwritten with that `5`.", + "", + "### save", + "`save ` will take the value of the buffer and save it to a variable with the supplied name. This is the only way of actually changing variables, and saving values for later use besides the buffer.", + "", + "Example: `save val` -> Assuming that the buffer contains the value `12`, this will create a new variable named \"val\" with the value of `12`.", + "", + "### buffer", + "`buffer ` will write the supplied value directly to the buffer. This means that commands that require buffer values can be supplied with values directly from the code.", + "", + "Example:", + "`buffer Horseshoe`", + "`save item`", + "", + "-> Will buffer the value `Horseshoe` and then save it to the variable called \"item\".", + "", + "### push (v1.1)", + "`push [value]` will add the supplied value to the stack. If no value is supplied, it will write the buffer's contents to the stack instead. Do note that the stack can only hold up to 256 values! Supports variable substitution!", + "", + "### pop (v1.1)", + "`pop` will remove the most recently added value from the stack and write it to the buffer.", + "", + "### peek (v1.1)", + "`peek` will write the most recently added value from the stack to the buffer, but without removing it from the stack like `pop` would.", + "", + "### eval", + "`eval [statement]` will evaluate the supplied statement as a mathematical expression. In short, anything NTM's calculator can make sense of (the one you open with N by default), this function can do the same. The statement is optional, if no statement is supplied, then it will try to use the buffer's contents as the statement. `eval` produces **decimal** values and not whole number **integers**, so for use in RoR signals, the output needs to be rounded! The result of the calculation is then saved to the buffer. Supports variable substitution!", + "", + "Example: `eval 4 + 5` -> Calculates \"4+5\" and saves `9` to the buffer.", + "Example: `eval $val$ / 2` -> Takes the value of \"val\" and divides it by 2, saving the result to the buffer.", + "", + "Example:", + "`load calc`", + "`eval`", + "", + "-> Will write the value of \"calc\" to the buffer, and then treat it as a mathematical expression. If we assume \"calc\" to be `5+2` then `eval` will end up writing `7` to the buffer.", + "", + "### evalr", + "`evalr [statement]` is identical to `eval`, however it will round the result to the nearest whole number. Whole numbers are important for RoR, since gauges, numeric displays and logic receivers can only handle whole numbers, and not decimals.", + "", + "### rounddown / floor", + "`rounddown` or `floor` will try to interpret the buffer's content as a decimal, and round it **down** to the next lower integer, writing the result to the buffer again.", + "", + "Example: `rounddown` -> Assuming the buffer's value is `4.2`, the buffer's new value will be `4`.", + "Example: `rounddown` -> Assuming the buffer's value is `4.6`, the buffer's new value will be `4`.", + "", + "### roundup / ceil", + "`roundup` or `ceil` will try to interpret the buffer's content as a decimal, and round it **up** to the next higher integer, writing the result to the buffer again.", + "", + "Example: `roundup` -> Assuming the buffer's value is `4.2`, the buffer's new value will be `5`.", + "Example: `roundup` -> Assuming the buffer's value is `4.6`, the buffer's new value will be `5`.", + "", + "### round / nearest", + "`round` or `nearest` will try to interpret the buffer's content as a decimal, and round it to the **closest** integer, writing the result to the buffer again.", + "", + "Example: `round` -> Assuming the buffer's value is `4.2`, the buffer's new value will be `4`.", + "Example: `round` -> Assuming the buffer's value is `4.6`, the buffer's new value will be `5`.", + "", + "### concat", + "`concat ` works similarly to `buffer `, however it accepts variable substitution. This means that the text of multiple variables can be combined.", + "", + "Example: `concat $first$ and $second$` -> Assuming the variable \"first\" to be `Cats` and \"second\" to be `dogs`, then the result saved to the buffer is `Cats and dogs`.", + "", + "### eq", + "`eq ` - equals, will try to compare the buffer to the supplied value. The buffer will be set to `true` if the values are equal and `false` otherwise. Supports variable substitution!", + "", + "Example: `eq Brick` -> If the buffer is `Brick`, then it is set to `true`, otherwise it becomes `false`.", + "Example: `eq $comp$` -> If the buffer's value is equal to the value of the variable \"comp\", then it is set to `true`, otherwise it becomes `false`.", + "", + "### gtb", + "`gtb ` - greater than buffer, will try to compare the buffer to the supplied value. The buffer will be set to `true` if the supplied numerical value is greater and `false` otherwise. Supports variable substitution!", + "", + "Example: `gtb 4` -> If the buffer is `3` or lower, then it is set to `true`, otherwise it becomes `false`.", + "Example: `gtb $comp$` -> If the buffer lower than the value of \"comp\", then it is set to `true`, otherwise it becomes `false`.", + "", + "### ltb", + "`ltb ` - less than buffer, will try to compare the buffer to the supplied value. The buffer will be set to `true` if the supplied numerical value is lower and `false` otherwise. Supports variable substitution!", + "", + "Example: `ltb 4` -> If the buffer is `5` or higher, then it is set to `true`, otherwise it becomes `false`.", + "Example: `ltb $comp$` -> If the buffer higher than the value of \"comp\", then it is set to `true`, otherwise it becomes `false`.", + "", + "### geb", + "`geb ` - greater than or equal buffer.", + "", + "### leb", + "`leb ` - less than or equal buffer.", + "", + "### splitter (v1.1)", + "`splitter ` sets the splitter character (or text) which is used for splitting operations. This value exists once per AUTOCAL, similar to the clockspeed. By default, the splitter is set to `;`. Supports variable substitution!", + "", + "### split (v1.1)", + "`split ` will split the buffer's contents, grab the fragment with the desired index, and write its contents to the buffer.", + "", + "Example:", + "`buffer cats;and;dogs`", + "`split 3`", + "", + "-> Will buffer the value of the third fragment, being `dogs`.", + "", + "### splitcount (v1.1)", + "`splitcount` will split the buffer's contents, count the number of fragments created, and write that value to the buffer.", + "", + "Example:", + "`buffer cats;and;dogs;and;birds`", + "`splitcount`", + "", + "-> Will buffer the number of fragments, being `5`.", + "", + "### length (v1.1)", + "`length` will count the number of characters in the buffer's stored text, and write that value to the buffer.", + "", + "Example:", + "`buffer cats and dogs`", + "`lenght`", + "", + "-> Will buffer the number of characters in `cats and dogs`, being `13`.", + "", + "### first (v1.1)", + "`first ` will grab the first x characters from the buffer and write them to the buffer. This is a substring operation that always starts at the first letter.", + "", + "Example:", + "`buffer cats and dogs`", + "`first 4`", + "", + "-> Will buffer the first four characters of the buffer, `cats`.", + "", + "### last (v1.1)", + "`last ` will grab the last x characters from the buffer and write them to the buffer. This is a substring operation that always ends at the last letter.", + "", + "Example:", + "`buffer cats and dogs`", + "`last 4`", + "", + "-> Will buffer the last four characters of the buffer, `dogs`.", + "", + "### send", + "`send ` will send a Redstone-over-Radio signal over the supplied channel, with the signal's value being the current buffer's value. Sending repeatedly over the same channel requires waiting for a full game tick, so using `endtick` after sending is advised. Supports variable substitution!", + "", + "Example:", + "`buffer Hello!`", + "`send transmission`", + "", + "-> Will send the RoR signal `Hello!` on the channel \"transmission\".", + "", + "Example:", + "`buffer SOS`", + "`send $target$`", + "", + "-> Will send the RoR signal \"SOS\" to the channel saved in the variable \"target\".", + "", + "### listen ", + "`listen ` will listen in on the supplied RoR channel and write the signal to the buffer. Will detect all signals, even expired ones, and one just ones sent in the previous tick, so picking up a signal doesn't mean it's new information. Supports variable substitution!", + "", + "Example:", + "`listen input`", + "`eval $buffer$ * 100`", + "`send output`", + "", + "-> Will take the signal from the RoR channel \"input\", multiply it by 100, and send that value on the channel \"output\".", + "", + "### poll (v1.1)", + "`poll ` will listen to the supplied RoR channel and write the signal to the buffer. Unlike `listen`, it will only detect signals from the last tick. Supports variable substitution!", + "", + "### worldtime (v1.1)", + "`worldtime` will save the amount of ticks since world creation to the buffer. If the result is saved to a variable, it can be compared later, allowing for precise and clockspeed-agnostic timers.", + "", + "## Advanced", + "", + "### Conditional Branches", + "Basic if/else conditions are the bread and butter of most programming. If we want to change the behavior based on different values, we need to compare, and then conditional jump.", + "", + "This example creates a script that processed a number \"val\" based on how high it is. 4 and below are multiplied by 2, otherwise it is divided by 2:", + "", + "`buffer 4` <- buffer `4` for comparison", + "`gtb $val$` <- is \"val\" greater than our buffer?", + "`jmpnot else` <- if not, jump to \"else\"", + "`eval $val$ / 2` <- if it is, divide by 2", + "`save val` <- ...and save to \"val\"", + "`jmp end` <- now jump to \"end\" to skip our \"else\" block", + "`dest else` <- else...", + "`eval $val$ * 2` <- multiply by 2", + "`save val` <- ...and save to val", + "`dest end` <- no matter which branch we took, we always end up here", + "", + "### Methods", + "People who are used to high languages will already know this concept, reusable parts of code with a set of parameters and an optional return value. For this we will use a few variables and a set of jumps in order to be able to use this piece of code from anywhere:", + "", + "This example implements a basic lerp (linear interpolation) function.", + "", + "`dest lerp`", + "`eval $a$ + ($b$ - $a$) * $i$`", + "`save result`", + "`jmp $return$`", + "", + "This function requires the variables \"a\", \"b\" and \"i\" as parameters and saves the result to the variable \"result\". We can now access this function like such:", + "", + "`buffer 4` <- first we set up our parameters to be used in the function", + "`save a`", + "`buffer 7`", + "`save b`", + "`buffer 0.6`", + "`save i`", + "`buffer returnhere` <- then we define the name of the return point", + "`save return`", + "`jmp lerp` <- call the function", + "`dest returnhere` <- once the function concludes, we are back here", + "", + "At the end of it all, the variable \"result\" now has the desired value.", + }; +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorch.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorch.java index 9300e8e60..5bc1a99da 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorch.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorch.java @@ -20,6 +20,8 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; public class GUIScreenRadioTorch extends GuiScreen { + + public static final int MAX_CHAN_LENGTH = 15; protected ResourceLocation texture; protected static final ResourceLocation textureSender = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_rtty_sender.png"); @@ -61,7 +63,7 @@ public class GUIScreenRadioTorch extends GuiScreen { this.frequency.setTextColor(0x00ff00); this.frequency.setDisabledTextColour(0x00ff00); this.frequency.setEnableBackgroundDrawing(false); - this.frequency.setMaxStringLength(10); + this.frequency.setMaxStringLength(MAX_CHAN_LENGTH); this.frequency.setText(radio.channel == null ? "" : radio.channel); this.remap = new GuiTextField[16]; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchController.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchController.java index fc86a1213..16ac83d4a 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchController.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchController.java @@ -58,7 +58,7 @@ public class GUIScreenRadioTorchController extends GuiScreen { this.frequency.setTextColor(0x00ff00); this.frequency.setDisabledTextColour(0x00ff00); this.frequency.setEnableBackgroundDrawing(false); - this.frequency.setMaxStringLength(10); + this.frequency.setMaxStringLength(GUIScreenRadioTorch.MAX_CHAN_LENGTH); this.frequency.setText(rtty.channel == null ? "" : rtty.channel); } diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchLogic.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchLogic.java index 565d86110..ef019650e 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchLogic.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchLogic.java @@ -52,7 +52,7 @@ public class GUIScreenRadioTorchLogic extends GuiScreen { this.frequency.setTextColor(0x00ff00); this.frequency.setDisabledTextColour(0x00ff00); this.frequency.setEnableBackgroundDrawing(false); - this.frequency.setMaxStringLength(10); + this.frequency.setMaxStringLength(GUIScreenRadioTorch.MAX_CHAN_LENGTH); this.frequency.setText(logic.channel == null ? "" : logic.channel); this.map = new GuiTextField[16]; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchReader.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchReader.java index 5e241a318..f08fff277 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchReader.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioTorchReader.java @@ -59,7 +59,7 @@ public class GUIScreenRadioTorchReader extends GuiScreen { this.frequencies[i].setTextColor(0x00ff00); this.frequencies[i].setDisabledTextColour(0x00ff00); this.frequencies[i].setEnableBackgroundDrawing(false); - this.frequencies[i].setMaxStringLength(15); + this.frequencies[i].setMaxStringLength(GUIScreenRadioTorch.MAX_CHAN_LENGTH); this.frequencies[i].setText(rtty.channels[i] == null ? "" : rtty.channels[i]); this.names[i] = new GuiTextField(this.fontRendererObj, guiLeft + 119 + oX, guiTop + 53 + i * 18 + oY, 126 - oX * 2, 14); diff --git a/src/main/java/com/hbm/inventory/gui/GUIWatz.java b/src/main/java/com/hbm/inventory/gui/GUIWatz.java index 835c84f4d..c7d4dfd3d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIWatz.java +++ b/src/main/java/com/hbm/inventory/gui/GUIWatz.java @@ -6,7 +6,6 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerWatz; import com.hbm.inventory.gui.element.GUIElements; -import com.hbm.inventory.gui.element.GUIElements.Gauge; import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; @@ -28,11 +27,11 @@ public class GUIWatz extends GuiInfoContainer { public GUIWatz(InventoryPlayer invPlayer, TileEntityWatz watz) { super(new ContainerWatz(invPlayer, watz)); this.watz = watz; - + this.xSize = 176; this.ySize = 229; } - + @Override public void drawScreen(int x, int y, float interp) { super.drawScreen(x, y, interp); @@ -44,11 +43,11 @@ public class GUIWatz extends GuiInfoContainer { watz.tanks[1].renderTankInfo(this, x, y, guiLeft + 148, guiTop + 23, 6, 45); watz.tanks[2].renderTankInfo(this, x, y, guiLeft + 154, guiTop + 23, 6, 45); } - + @Override protected void drawGuiContainerForegroundLayer(int i, int j) { this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 93, 4210752); - + double scale = 1.25; String flux = String.format(Locale.US, "%,.1f", watz.fluxDisplay); GL11.glScaled(1 / scale, 1 / scale, 1); @@ -76,7 +75,7 @@ public class GUIWatz extends GuiInfoContainer { GL11.glColor4f(1.0F, col, col, 1.0F); drawTexturedModalRect(guiLeft, guiTop, 0, 0, 131, 122); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - + drawTexturedModalRect(guiLeft + 131, guiTop, 131, 0, 36, 122); drawTexturedModalRect(guiLeft, guiTop + 130, 0, 130, xSize, 99); drawTexturedModalRect(guiLeft + 126, guiTop + 31, 176, 31, 9, 60); @@ -85,8 +84,8 @@ public class GUIWatz extends GuiInfoContainer { if(watz.isOn) drawTexturedModalRect(guiLeft + 147, guiTop + 8, 176, 0, 8, 8); if(watz.isLocked) drawTexturedModalRect(guiLeft + 142, guiTop + 70, 210, 0, 18, 18); - - GUIElements.renderGauge(Gauge.ROUND_SMALL, guiLeft + 13, guiTop + 100, this.zLevel, 1 - col); + + GUIElements.drawSmoothGauge(guiLeft + 22, guiTop + 109, this.zLevel, (double) 1 - col, 5, 2, 1, 0x7F0000); watz.tanks[0].renderTank(guiLeft + 143, guiTop + 69, this.zLevel, 4, 43); watz.tanks[1].renderTank(guiLeft + 149, guiTop + 69, this.zLevel, 4, 43); diff --git a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java index c966dd9f4..d74792b31 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java +++ b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java @@ -182,14 +182,14 @@ public abstract class GuiInfoContainer extends GuiContainer implements INEIGuiHa this.zLevel = 0.0F; itemRender.zLevel = 0.0F; } - + public static final ItemStack TEMPLATE_FOLDER = new ItemStack(ModItems.template_folder); - + /** Standardsized item rendering from GUIScreenRecipeSelector */ public void renderItem(ItemStack stack, int x, int y) { renderItem(stack, x, y, 100F); } - + public void renderItem(ItemStack stack, int x, int y, float layer) { FontRenderer font = stack.getItem().getFontRenderer(stack); if(font == null) font = fontRendererObj; @@ -323,15 +323,26 @@ public abstract class GuiInfoContainer extends GuiContainer implements INEIGuiHa GL11.glEnable(GL12.GL_RESCALE_NORMAL); } } - + public void click() { mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); } - + + public void clickSendFlag(TileEntity tile, int x, int y, int left, int top, int sizeX, int sizeY, String name) { + if(checkClick(x, y, left, top, sizeX, sizeY)) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + NBTTagCompound data = new NBTTagCompound(); + data.setBoolean(name, true); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, tile.xCoord, tile.yCoord, tile.zCoord)); + } + } + ///NEI drag and drop support @Override @Optional.Method(modid = "NotEnoughItems") public boolean handleDragNDrop(GuiContainer gui, int x, int y, ItemStack stack, int button) { + // BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! BALD! + if(gui instanceof GuiInfoContainer && stack != null){ Slot slot = getSlotAtPosition(x,y); if(slot instanceof SlotPattern){ diff --git a/src/main/java/com/hbm/inventory/gui/element/GUIElements.java b/src/main/java/com/hbm/inventory/gui/element/GUIElements.java index c30aa81c4..721d8d68f 100644 --- a/src/main/java/com/hbm/inventory/gui/element/GUIElements.java +++ b/src/main/java/com/hbm/inventory/gui/element/GUIElements.java @@ -21,7 +21,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; public class GUIElements { - + @Deprecated public static enum Gauge { ROUND_SMALL("small_round", 18, 18, 13); ResourceLocation texture; @@ -33,7 +33,7 @@ public class GUIElements { this.count = count; } } - + @Deprecated public static void renderGauge(Gauge gauge, double x, double y, double z, double progress) { Minecraft.getMinecraft().renderEngine.bindTexture(gauge.texture); int frameNum = (int) Math.round((gauge.count - 1) * progress); @@ -47,7 +47,7 @@ public class GUIElements { tess.addVertexWithUV(x, y, z, 0, frameOffset); tess.draw(); } - + public static void drawSmoothGauge(int x, int y, double z, double progress, double tipLength, double backLength, double backSide, int color) { drawSmoothGauge(x, y, z, progress, tipLength, backLength, backSide, color, 0x000000); } @@ -55,12 +55,12 @@ public class GUIElements { private static Vec3NT tip = new Vec3NT(); private static Vec3NT left = new Vec3NT(); private static Vec3NT right = new Vec3NT(); - + public static void drawSmoothGauge(int x, int y, double z, double progress, double tipLength, double backLength, double backSide, int color, int colorOuter) { GL11.glDisable(GL11.GL_TEXTURE_2D); - + progress = MathHelper.clamp_double(progress, 0, 1); - + float angle = (float) Math.toRadians(-progress * 270 - 45); tip.setComponents(0, tipLength, 0); left.setComponents(backSide, -backLength, 0); @@ -69,7 +69,7 @@ public class GUIElements { tip.rotateAroundZ(angle); left.rotateAroundZ(angle); right.rotateAroundZ(angle); - + Tessellator tess = Tessellator.instance; tess.startDrawing(GL11.GL_TRIANGLES); tess.setColorOpaque_I(colorOuter); @@ -82,11 +82,147 @@ public class GUIElements { tess.addVertex(x + left.xCoord, y + left.yCoord, z); tess.addVertex(x + right.xCoord, y + right.yCoord, z); tess.draw(); - + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glEnable(GL11.GL_TEXTURE_2D); } + public static void drawSmoothLinearGauge(int x, int y, double z, double progress, double tipLength, double backLength, double backSide, double scale, float rotation, int color) { + drawSmoothLinearGauge(x, y, z, progress, tipLength, backLength, backSide, scale, rotation, color, 0x000000); + } + + private static Vec3NT Bleft = new Vec3NT(); + private static Vec3NT Bright = new Vec3NT(); + + public static void drawSmoothLinearGauge(int x, int y, double z, double progress, double tipLength, double backLength, double backSide, double scale, float rotation, int color, int colorOuter) { + GL11.glDisable(GL11.GL_TEXTURE_2D); + + scale = Math.max(scale, 1); + progress = MathHelper.clamp_double(progress, 0, 1) * scale; + + tip.setComponents(0, -tipLength, 0); + right.setComponents(-backSide, 0, 0); + Bright.setComponents(-backSide, backLength, 0); + Bleft.setComponents(backSide, backLength, 0); + left.setComponents(backSide, 0, 0); + + float angle = (float) Math.toRadians(-rotation); + + tip.rotateAroundZ(angle); + right.rotateAroundZ(angle); + Bright.rotateAroundZ(angle); + Bleft.rotateAroundZ(angle); + left.rotateAroundZ(angle); + + double deltaX = progress * MathHelper.cos(angle); + double deltaY = progress * MathHelper.sin(angle); + + Tessellator tess = Tessellator.instance; + tess.startDrawing(GL11.GL_POLYGON); + tess.setColorOpaque_I(colorOuter); + double mult = 1.5; + tess.addVertex(x + deltaX + tip.xCoord * mult, y + deltaY + tip.yCoord * mult, z); + tess.addVertex(x + deltaX + right.xCoord * mult, y + deltaY + right.yCoord * mult, z); + tess.addVertex(x + deltaX + Bright.xCoord * mult, y + deltaY + Bright.yCoord, z); + tess.addVertex(x + deltaX + Bleft.xCoord * mult, y + deltaY + Bleft.yCoord, z); + tess.addVertex(x + deltaX + left.xCoord * mult, y + deltaY + left.yCoord * mult, z); + tess.draw(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + tess.startDrawing(GL11.GL_POLYGON); + tess.setColorOpaque_I(color); + tess.addVertex(x + deltaX + tip.xCoord, y + deltaY + tip.yCoord, z); + tess.addVertex(x + deltaX + right.xCoord, y + deltaY + right.yCoord, z); + tess.addVertex(x + deltaX + Bright.xCoord, y + deltaY + Bright.yCoord, z); + tess.addVertex(x + deltaX + Bleft.xCoord, y + deltaY + Bleft.yCoord, z); + tess.addVertex(x + deltaX + left.xCoord, y + deltaY + left.yCoord, z); + tess.draw(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + public static void drawSmoothTextureModalCircle(int xDraw, int yDraw, float zDraw, int xStart, int yStart, int xDelta, int yDelta, double progress) { + float var7 = 0.00390625F; + float var8 = 0.00390625F; + + progress = MathHelper.clamp_double(progress, 0, 1); + float angle = (float) (-progress * 270.0); + double theta = Math.toRadians(angle - 135); + int addons = 0; + double xTarget = 0; + double yTarget = 0; + + // addons is just a numeric flag for how many fixed point to add, to generate the triangles + if (angle >= -180 && angle < -90) { + addons = 1; + } else if (angle >= -270 && angle < -180) { + addons = 2; + } + + // the abysmal control under here is responsible for the positioning of the last point + // basically this whole function makes this shape: + // + - - - - - - - - - - - + + // | \ * * * * * * * * * / | + // | * \ * * * * * * * / * | + // | * * \ * * * * * / * * | + // | * * * \ * * * / * * * | + // | * * * * \ * / * * * * | + // | * * * * * + * * * * * | + // | * * * * / \ * * * * | + // | * * * / \ * * * | + // | * * / \ * * | + // | * / \ * | + // | / \ | + // + - - - - - - - - - - - + + // the "/, \" are the sides, "+" points and "*" rendered part (lower triangle isn't shown) + if (angle >= -90) { + xTarget = -1; + yTarget = -Math.tan(theta); + } else if (angle > -135 && angle < -90) { + xTarget = Math.tan(Math.PI/2 - theta); + yTarget = 1; + } else if (angle > -180 && angle < -135) { + xTarget = Math.tan(Math.PI/2 - theta); + yTarget = 1; + } else if (angle <= -180) { + xTarget = 1; + yTarget = Math.tan(theta); + } else if (angle == -135) { + xTarget = 0; + yTarget = 1; + } + + double xMid = (double) xDelta / 2; + double yMid = (double) yDelta / 2; + + xTarget *= xMid; + yTarget *= yMid; + + Tessellator tess = Tessellator.instance; + + tess.startDrawing(GL11.GL_TRIANGLES); // i should've used GL_POLYGON yes i know, too bad im either too retarded to understand it or OpenGL makes it funky, i already tried + tess.addVertexWithUV(xDraw, yDraw + yDelta, zDraw, ((float) (xStart) * var7), ((float) (yStart + yDelta) * var8)); + tess.addVertexWithUV(xDraw + xMid, yDraw + yMid, zDraw, (float) (xStart + xMid) * var7, (float) (yStart + yMid) * var8); + if (addons == 2 || addons == 1) { + tess.addVertexWithUV(xDraw, yDraw, zDraw, (float) (xStart) * var7, (float) (yStart) * var8); + tess.draw(); + tess.startDrawing(GL11.GL_TRIANGLES); + tess.addVertexWithUV(xDraw, yDraw, zDraw, (float) (xStart) * var7, (float) (yStart) * var8); + tess.addVertexWithUV(xDraw + xMid, yDraw + yMid, zDraw, (float) (xStart + xMid) * var7, (float) (yStart + yMid) * var8); + } + if (addons == 2) { + tess.addVertexWithUV(xDraw + xDelta, yDraw, zDraw, (float) (xStart + xDelta) * var7, (float) (yStart) * var8); + tess.draw(); + tess.startDrawing(GL11.GL_TRIANGLES); + tess.addVertexWithUV(xDraw + xDelta, yDraw, (double) zDraw, (float) (xStart + xDelta) * var7, (float) (yStart) * var8); + tess.addVertexWithUV(xDraw + xMid, yDraw + yMid, zDraw, (float) (xStart + xMid) * var7, (float) (yStart + yMid) * var8); + } + tess.addVertexWithUV(xDraw + xTarget + xMid, yDraw - yTarget + yMid, zDraw, (float) (xStart + xTarget + xMid) * var7, (float) (yStart - yTarget + yMid) * var8); + tess.draw(); + } + public static final int STANDARD_COLOR_BACKGROUND = -0xFEFFFF0; public static final int STANDARD_COLOR_LINE0 = 0x505000FF; public static final int STANDARD_COLOR_LINE1 = (STANDARD_COLOR_LINE0 & 0xFEFEFE) >> 1 | STANDARD_COLOR_LINE0 & -0xFEFEFE; @@ -114,7 +250,7 @@ public class GUIElements { } public static void drawHoveringText(List lines, int x, int y, FontRenderer font, RenderItem itemRender, int guiWidth, int guiHeight, int headerOffset, int lineDist, int colBG0, int colBG1, int colLine0, int colLine1) { - + if(!lines.isEmpty()) { GL11.glDisable(GL12.GL_RESCALE_NORMAL); RenderHelper.disableStandardItemLighting(); @@ -154,7 +290,7 @@ public class GUIElements { drawGradientRect(boundX - 3, boundY - 3, boundX + width + 3, boundY + height + 3, colBG0, colBG1); drawGradientRect(boundX - 4, boundY - 3, boundX - 3, boundY + height + 3, colBG0, colBG1); drawGradientRect(boundX + width + 3, boundY - 3, boundX + width + 4, boundY + height + 3, colBG0, colBG1); - + drawGradientRect(boundX - 3, boundY - 3 + 1, boundX - 3 + 1, boundY + height + 3 - 1, colLine0, colLine1); drawGradientRect(boundX + width + 2, boundY - 3 + 1, boundX + width + 3, boundY + height + 3 - 1, colLine0, colLine1); drawGradientRect(boundX - 3, boundY - 3, boundX + width + 3, boundY - 3 + 1, colLine0, colLine0); @@ -163,7 +299,7 @@ public class GUIElements { for(int i = 0; i < lines.size(); ++i) { String line = (String) lines.get(i); font.drawStringWithShadow(line, boundX, boundY, -1); - + if(i == 0) boundY += headerOffset; boundY += lineDist; } @@ -175,7 +311,7 @@ public class GUIElements { GL11.glEnable(GL12.GL_RESCALE_NORMAL); } } - + /** Colors don't use the RGBA, but rather ARGB (evil route) */ protected static void drawGradientRect(int x0, int y0, int x1, int y1, int col0, int col1) { float a0 = (float) (col0 >> 24 & 255) / 255F; diff --git a/src/main/java/com/hbm/inventory/material/NTMMaterial.java b/src/main/java/com/hbm/inventory/material/NTMMaterial.java index 7f15f1bed..56c1a1aa1 100644 --- a/src/main/java/com/hbm/inventory/material/NTMMaterial.java +++ b/src/main/java/com/hbm/inventory/material/NTMMaterial.java @@ -5,6 +5,7 @@ import java.util.Locale; import java.util.Set; import com.hbm.inventory.OreDictManager.DictFrame; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -50,6 +51,10 @@ public class NTMMaterial { return "hbmmat." + this.names[0].toLowerCase(Locale.US); } + public String getLocalizedName() { + return I18nUtil.resolveKey(getUnlocalizedName()); + } + public NTMMaterial setConversion(NTMMaterial mat, int in, int out) { this.smeltsInto = mat; this.convIn = in; diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index cb22a3c3c..4b34d1d84 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -58,7 +58,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { @Override public void registerDefaults() { boolean no528 = !GeneralConfig.enable528; - + // plates and ingots String autoPlate = "autoswitch.plates"; this.register(new GenericRecipe("ass.plateiron").setup(60, 100).outputItems(new ItemStack(ModItems.plate_iron, 1)).inputItems(new OreDictStack(IRON.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); @@ -74,7 +74,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.plateweaponsteel").setup(60, 100).outputItems(new ItemStack(ModItems.plate_weaponsteel, 1)).inputItems(new OreDictStack(WEAPONSTEEL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); this.register(new GenericRecipe("ass.platesaturnite").setup(60, 100).outputItems(new ItemStack(ModItems.plate_saturnite, 1)).inputItems(new OreDictStack(BIGMT.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); this.register(new GenericRecipe("ass.platedura").setup(60, 100).outputItems(new ItemStack(ModItems.plate_dura_steel, 1)).inputItems(new OreDictStack(DURA.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); - + this.register(new GenericRecipe("ass.platemixed").setup(50, 100).outputItems(new ItemStack(ModItems.plate_mixed, 4)) .inputItems(new OreDictStack(CU.plate(), 2), new ComparableStack(ModItems.neutron_reflector, 1), new OreDictStack(BIGMT.plate(), 1))); this.register(new GenericRecipe("ass.dalekanium").setup(200, 100).outputItems(new ItemStack(ModItems.plate_dalekanium, 1)) @@ -118,7 +118,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(ASBESTOS.ingot(), 1), new ComparableStack(Items.string, 8))); this.register(new GenericRecipe("ass.filtercoal").setup(50, 100).outputItems(new ItemStack(ModItems.filter_coal, 1)) .inputItems(new OreDictStack(COAL.dust(), 4), new ComparableStack(Items.string, 2), new ComparableStack(Items.paper, 1))); - + // crafting parts if(!GeneralConfig.enable528) { // precass otherwise this.register(new GenericRecipe("ass.chip").setup(50, 250).outputItems(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP)) @@ -218,7 +218,8 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.plateWelded(), 4), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(STEEL.bolt(), 16), new OreDictStack(KEY_GREEN, 4))); this.register(new GenericRecipe("ass.silohatchlarge").setup(300, 100).outputItems(new ItemStack(ModBlocks.silo_hatch_large, 1)) .inputItems(new OreDictStack(STEEL.plateWelded(), 6), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 2), new OreDictStack(STEEL.bolt(), 16), new OreDictStack(KEY_GREEN, 8))); - + this.register(new GenericRecipe("ass.cargodoor").setup(200, 100).outputItems(new ItemStack(ModBlocks.cargo_door, 1)) + .inputItems(new ComparableStack(ModBlocks.steel_beam, 32), new OreDictStack(STEEL.plate(), 4), new OreDictStack(DURA.bolt(), 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(KEY_GRAY, 1))); // decoration this.register(new GenericRecipe("ass.capnuka").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.NUKA)) .inputItems(new ComparableStack(ModItems.cap_nuka, 64), new ComparableStack(ModItems.cap_nuka, 64))); @@ -238,10 +239,13 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2))); this.register(new GenericRecipe("ass.assembler").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_assembly_machine, 1)) - .inputItems(new OreDictStack(STEEL.ingot(), 4), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG))); + .inputItems(new OreDictStack(STEEL.ingot(), 4), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.chemplant").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_plant, 1)) .inputItems(new OreDictStack(STEEL.ingot(), 8), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.pipe(), 2), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.coil_tungsten, 2), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ANALOG))); + this.register(new GenericRecipe("ass.chemplantAlt").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_plant, 1)) + .inputItems(new OreDictStack(DURA.plate(), 8), new OreDictStack(CU.pipe(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 5, EnumExpensiveType.STEEL_PLATING), new OreDictStack(CU.pipe(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.purex").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_purex, 1)) .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(RUBBER.pipe(), 8), new OreDictStack(PB.plateCast(), 4), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.LEAD_PLATING), new OreDictStack(STEEL.shell(), 4), new OreDictStack(RUBBER.pipe(), 12), new ComparableStack(ModItems.motor_desh, 3), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.CIRCUIT))); @@ -264,7 +268,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.electrolyzer").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_electrolyser, 1)) .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate(), 16), new OreDictStack(TI.shell(), 3), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModItems.ingot_firebrick, 16), new ComparableStack(ModItems.coil_copper, 16), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(TI.shell(), 3), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModItems.ingot_firebrick, 16), new ComparableStack(ModItems.coil_copper, 16), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.CIRCUIT))); - this.register(new GenericRecipe("ass.rtg").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_rtg_grey, 1)) + this.register(new GenericRecipe("ass.rtg").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_rtg, 1)) .inputItems(new ComparableStack(ModItems.rtg_unit, 3), new OreDictStack(STEEL.plate(), 4), new OreDictStack(MINGRADE.wireFine(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4))); this.register(new GenericRecipe("ass.derrick").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_well, 1)) .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(CU.plateCast(), 2), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.drill_titanium, 1)) @@ -398,7 +402,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(TI.shell(), 8), new OreDictStack(DURA.pipe(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.turbine_tungsten, 1), new OreDictStack(GOLD.wireDense(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal())) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.turbine_tungsten, 3), new OreDictStack(GOLD.wireDense(), 16), new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.gasturbine").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_turbinegas, 1)) - .inputItems(new OreDictStack(STEEL.shell(), 10), new OreDictStack(GOLD.wireDense(), 12), new OreDictStack(DURA.pipe(), 4),new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.turbine_tungsten, 1), new ComparableStack(ModItems.ingot_rubber, 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal())) + .inputItems(new OreDictStack(STEEL.shell(), 10), new OreDictStack(GOLD.wireDense(), 12), new OreDictStack(DURA.pipe(), 4),new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.turbine_tungsten, 1), new OreDictStack(RUBBER.ingot(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal())) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(GOLD.wireDense(), 16), new OreDictStack(DURA.pipe(), 16), new ComparableStack(ModItems.turbine_tungsten, 2), new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.hephaestus").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_hephaestus, 1)) .inputItems(new OreDictStack(STEEL.pipe(), 12), new OreDictStack(STEEL.ingot(), 24), new OreDictStack(CU.plate(), 24), new OreDictStack(NB.ingot(), 4), new OreDictStack(RUBBER.ingot(), 12), new ComparableStack(ModBlocks.glass_quartz, 16)) @@ -488,6 +492,11 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_HARDPLASTIC.ingot(), 24), new OreDictStack(GOLD.wireDense(), 32), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.COMPUTER)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "chip_quantum")); + // pile + this.register(new GenericRecipe("ass.pileblock").setup(20, 250).outputItems(new ItemStack(ModBlocks.pile_brick, 1)) + .inputItems(new OreDictStack(KEY_PLANKS, 1), new OreDictStack(GRAPHITE.ingot(), 4), new OreDictStack(STEEL.bolt(), 2)) + .inputItemsEx(new OreDictStack(KEY_PLANKS, 1), new OreDictStack(GRAPHITE.ingot(), 8), new OreDictStack(STEEL.plate(), 1))); + // reactors this.register(new GenericRecipe("ass.breedingreactor").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_reactor_breeding, 1)) .inputItems(new ComparableStack(ModItems.reactor_core, 1), new OreDictStack(STEEL.ingot(), 12), new OreDictStack(PB.plate(), 16), new ComparableStack(ModBlocks.reinforced_glass, 4), new OreDictStack(ASBESTOS.ingot(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new ComparableStack(ModItems.crt_display, 1)) @@ -542,7 +551,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.pwrneutronsource").setup(200, 500).outputItems(new ItemStack(ModBlocks.pwr_neutron_source, 1)) .inputItems(new OreDictStack(ZR.plateWelded(), 1), new ComparableStack(ModItems.billet_ra226be, 3)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ZR.plateWelded(), 1), new ComparableStack(ModItems.billet_ra226be, 3))); - + // fusion reactor this.register(new GenericRecipe("ass.fusioncore").setup(600, 100).outputItems(new ItemStack(ModBlocks.struct_torus_core, 1)) .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(ANY_HARDPLASTIC.ingot(), 32), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BISMOID)) @@ -584,7 +593,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(BSCCO.wireDense(), 32), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.FERRO_PLATING), new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.PLASTIC), new OreDictStack(BSCCO.wireDense(), 32), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.COMPUTER)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); - + // watz this.register(new GenericRecipe("ass.watzrod").setup(200, 100).outputItems(new ItemStack(ModBlocks.watz_element, 3)) .inputItems(new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(ZR.ingot(), 2), new OreDictStack(BIGMT.ingot(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4)) diff --git a/src/main/java/com/hbm/inventory/recipes/BlastFurnaceRecipesNT.java b/src/main/java/com/hbm/inventory/recipes/BlastFurnaceRecipesNT.java index 0fbc79920..4309c6043 100644 --- a/src/main/java/com/hbm/inventory/recipes/BlastFurnaceRecipesNT.java +++ b/src/main/java/com/hbm/inventory/recipes/BlastFurnaceRecipesNT.java @@ -63,8 +63,11 @@ public class BlastFurnaceRecipesNT extends GenericRecipes { .inputItems(new OreDictStack(CO.ingot()), new ComparableStack(ModItems.meteorite_sword_hardened, 1)) .outputItems(new ItemStack(ModItems.meteorite_sword_alloyed, 1))); + this.register((BlastFurnaceRecipe) new BlastFurnaceRecipe("blast.meteor").setDuration(600) + .inputItems(new OreDictStack(CO.ingot()), new ComparableStack(ModItems.powder_meteorite, 1)) + .outputItems(new ItemStack(ModItems.ingot_meteorite, 1))); this.register((BlastFurnaceRecipe) new BlastFurnaceRecipe("blast.starmetal").setDuration(600) - .inputItems(new OreDictStack(BIGMT.ingot()), new ComparableStack(ModItems.powder_meteorite, 1)) + .inputItems(new OreDictStack(BIGMT.ingot()), new ComparableStack(ModItems.ingot_meteorite, 1)) .outputItems(new ItemStack(ModItems.ingot_starmetal, 1))); this.register((BlastFurnaceRecipe) new BlastFurnaceRecipe("blast.paa").setDuration(600) diff --git a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java index b8b9b5e43..fdc31be9c 100644 --- a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java @@ -14,12 +14,10 @@ import com.hbm.config.GeneralConfig; import com.hbm.handler.imc.IMCCentrifuge; import static com.hbm.inventory.OreDictManager.*; import com.hbm.inventory.OreDictManager.DictFrame; -import com.hbm.inventory.OreDictManager; import com.hbm.inventory.RecipesCommon; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; -import com.hbm.inventory.material.MaterialShapes; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ItemEnums; import com.hbm.items.ItemEnums.EnumAshType; @@ -131,7 +129,7 @@ public class CentrifugeRecipes extends SerializableRecipe { new ItemStack(ModItems.nugget_solinium, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreRareEarth"), new ItemStack[] { + recipes.put(new OreDictStack(RAREEARTH.ore()), new ItemStack[] { new ItemStack(ModItems.powder_desh_mix, 1), new ItemStack(ModItems.nugget_zirconium, 1), new ItemStack(ModItems.nugget_zirconium, 1), @@ -149,7 +147,7 @@ public class CentrifugeRecipes extends SerializableRecipe { lbs ? new ItemStack(ModItems.nugget_ra226, 2) : new ItemStack(ModItems.nugget_ra226, 1), new ItemStack(Blocks.gravel, 1) }); - for(String ore : OreDictManager.TH232.all(MaterialShapes.ORE)) recipes.put(new OreDictStack(ore), new ItemStack[] { + recipes.put(new OreDictStack(TH232.ore()), new ItemStack[] { new ItemStack(ModItems.powder_thorium, 1), new ItemStack(ModItems.powder_thorium, 1), new ItemStack(ModItems.powder_uranium, 1), diff --git a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipe.java b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipe.java index 65d4fa4b4..4c73a4289 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipe.java @@ -41,8 +41,8 @@ public class CrucibleRecipe extends GenericRecipe { @Override public List print() { List list = new ArrayList(); - list.add(EnumChatFormatting.YELLOW + this.getLocalizedName()); + header(list); input(list); output(list); diff --git a/src/main/java/com/hbm/inventory/recipes/ElectrolyserFluidRecipes.java b/src/main/java/com/hbm/inventory/recipes/ElectrolyserFluidRecipes.java index 93ebcf84b..3a207828c 100644 --- a/src/main/java/com/hbm/inventory/recipes/ElectrolyserFluidRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ElectrolyserFluidRecipes.java @@ -29,7 +29,7 @@ public class ElectrolyserFluidRecipes extends SerializableRecipe { recipes.put(Fluids.VITRIOL, new ElectrolysisRecipe(1_000, new FluidStack(Fluids.SULFURIC_ACID, 500), new FluidStack(Fluids.CHLORINE, 500), new ItemStack(ModItems.powder_iron), new ItemStack(ModItems.ingot_mercury))); recipes.put(Fluids.SLOP, new ElectrolysisRecipe(1_000, new FluidStack(Fluids.MERCURY, 250), new FluidStack(Fluids.NONE, 0), new ItemStack(ModItems.niter, 2), new ItemStack(ModItems.powder_limestone, 2), new ItemStack(ModItems.sulfur))); recipes.put(Fluids.REDMUD, new ElectrolysisRecipe(450, new FluidStack(Fluids.MERCURY, 150), new FluidStack(Fluids.LYE, 50), new ItemStack(ModItems.powder_titanium, 3), new ItemStack(ModItems.powder_iron, 3), new ItemStack(ModItems.powder_aluminium, 2))); - recipes.put(Fluids.ALUMINA, new ElectrolysisRecipe(200, new FluidStack(Fluids.CARBONDIOXIDE, 100), new FluidStack(Fluids.NONE, 0),40, new ItemStack(ModItems.powder_aluminium, 7), new ItemStack(ModItems.fluorite, 2))); + recipes.put(Fluids.ALUMINA, new ElectrolysisRecipe(200, new FluidStack(Fluids.CARBONDIOXIDE, 100), new FluidStack(Fluids.NONE, 0), 40, new ItemStack(ModItems.powder_aluminium, 7), new ItemStack(ModItems.fluorite, 2))); recipes.put(Fluids.POTASSIUM_CHLORIDE, new ElectrolysisRecipe(250, new FluidStack(Fluids.CHLORINE, 125), new FluidStack(Fluids.NONE, 0), new ItemStack(ModItems.dust))); recipes.put(Fluids.CALCIUM_CHLORIDE, new ElectrolysisRecipe(250, new FluidStack(Fluids.CHLORINE, 125), new FluidStack(Fluids.CALCIUM_SOLUTION, 125))); diff --git a/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java index e578f6fee..939647898 100644 --- a/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java @@ -47,9 +47,6 @@ public class MachineRecipes { public ArrayList getBatteries() { ArrayList fuels = new ArrayList(); - fuels.add(new ItemStack(ModItems.battery_potato)); - fuels.add(new ItemStack(ModItems.battery_potatos)); - fuels.add(new ItemStack(ModItems.energy_core)); for(EnumBatteryPack num : EnumBatteryPack.values()) fuels.add(new ItemStack(ModItems.battery_pack, 1, num.ordinal())); for(EnumBatterySC num : EnumBatterySC.values()) fuels.add(new ItemStack(ModItems.battery_sc, 1, num.ordinal())); fuels.add(new ItemStack(ModItems.battery_creative)); diff --git a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java index 3b2434994..68f03ae6b 100644 --- a/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PUREXRecipes.java @@ -43,9 +43,21 @@ public class PUREXRecipes extends GenericRecipes { this.register((PUREXRecipe) new PUREXRecipe("purex.uzh").setup(600, 1_000) .inputItems(new ComparableStack(ModItems.billet_uranium_fuel), new OreDictStack(ZR.billet(), 3)) - .inputFluids(new FluidStack(Fluids.NITRIC_ACID, 1000), new FluidStack(Fluids.HYDROGEN, 4000)) + .inputFluids(new FluidStack(Fluids.NITRIC_ACID, 1_000), new FluidStack(Fluids.HYDROGEN, 4000)) .outputItems(new ItemStack(ModItems.billet_uzh, 4))); + this.register((PUREXRecipe) new PUREXRecipe("purex.flashgold").setup(600, 1_000) + .inputItems(new OreDictStack(AU198.billet()), + new ComparableStack(ModItems.pellet_charged)) + .inputFluids(new FluidStack(Fluids.AMAT, 1_000)) + .outputItems(new ItemStack(ModItems.billet_balefire_gold, 2))); + + this.register((PUREXRecipe) new PUREXRecipe("purex.flashlead").setup(600, 1_000) + .inputItems(new OreDictStack(PB209.billet()), + new ComparableStack(ModItems.billet_balefire_gold)) + .inputFluids(new FluidStack(Fluids.AMAT, 1_000)) + .outputItems(new ItemStack(ModItems.billet_flashlead, 1))); + //CP-1 String autoPile = "autoswitch.pile"; this.register((PUREXRecipe) new PUREXRecipe("purex.pilepu").setup(40, pilePower).setNameWrapper("purex.recycle").setGroup(autoPile, this) diff --git a/src/main/java/com/hbm/inventory/recipes/PlasmaForgeRecipe.java b/src/main/java/com/hbm/inventory/recipes/PlasmaForgeRecipe.java index 4637b8bd0..8183f941c 100644 --- a/src/main/java/com/hbm/inventory/recipes/PlasmaForgeRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/PlasmaForgeRecipe.java @@ -23,8 +23,8 @@ public class PlasmaForgeRecipe extends GenericRecipe { public List print() { List list = new ArrayList(); - list.add(EnumChatFormatting.YELLOW + this.getLocalizedName()); + header(list); autoSwitch(list); duration(list); power(list); diff --git a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java index 6fd6e61e3..92285ffbf 100644 --- a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java @@ -173,7 +173,6 @@ public class ShredderRecipes extends SerializableRecipe { ShredderRecipes.setRecipe(Blocks.tnt, new ItemStack(Items.gunpowder, Compat.isModLoaded(Compat.MOD_GT6) ? 4 : 5)); ShredderRecipes.setRecipe(DictFrame.fromOne(ModBlocks.stone_resource, EnumStoneType.LIMESTONE), new ItemStack(ModItems.powder_limestone, 4)); ShredderRecipes.setRecipe(ModBlocks.stone_gneiss, new ItemStack(ModItems.powder_lithium_tiny, 1)); - ShredderRecipes.setRecipe(ModItems.powder_lapis, new ItemStack(ModItems.powder_cobalt_tiny, 1)); ShredderRecipes.setRecipe(ModItems.fragment_neodymium, new ItemStack(ModItems.powder_neodymium_tiny, 1)); ShredderRecipes.setRecipe(ModItems.fragment_cobalt, new ItemStack(ModItems.powder_cobalt_tiny, 1)); ShredderRecipes.setRecipe(ModItems.fragment_niobium, new ItemStack(ModItems.powder_niobium_tiny, 1)); @@ -213,11 +212,13 @@ public class ShredderRecipes extends SerializableRecipe { List logs = OreDictionary.getOres("logWood"); List planks = OreDictionary.getOres("plankWood"); List saplings = OreDictionary.getOres("treeSapling"); + List lapis = OreDictionary.getOres("dustLapis"); for(ItemStack log : logs) ShredderRecipes.setRecipe(log, new ItemStack(ModItems.powder_sawdust, 4)); for(ItemStack plank : planks) ShredderRecipes.setRecipe(plank, new ItemStack(ModItems.powder_sawdust, 1)); for(ItemStack sapling : saplings) ShredderRecipes.setRecipe(sapling, new ItemStack(Items.stick, 1)); - + for(ItemStack dust : lapis) ShredderRecipes.setRecipe(dust, new ItemStack(ModItems.powder_cobalt_tiny, 1)); + for(EnumBedrockOre ore : EnumBedrockOre.values()) { int i = ore.ordinal(); ShredderRecipes.setRecipe(new ItemStack(ModItems.ore_bedrock, 1, i), new ItemStack(ModItems.ore_enriched, 1, i)); diff --git a/src/main/java/com/hbm/inventory/recipes/SolderingRecipes.java b/src/main/java/com/hbm/inventory/recipes/SolderingRecipes.java index 5f03dcd54..dd88e66f6 100644 --- a/src/main/java/com/hbm/inventory/recipes/SolderingRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/SolderingRecipes.java @@ -118,7 +118,7 @@ public class SolderingRecipes extends SerializableRecipe { new ComparableStack(ModItems.circuit, lbsm ? 8 : 16, EnumCircuitType.CAPACITOR_TANTALIUM)}, new AStack[] { new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER_CHASSIS), - new ComparableStack(ModItems.upgrade_speed_1)}, + new OreDictStack(RUBBER.ingot(), 4)}, new AStack[] { new OreDictStack(PB.wireFine(), 16)} )); @@ -130,7 +130,7 @@ public class SolderingRecipes extends SerializableRecipe { new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ATOMIC_CLOCK)}, new AStack[] { new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER_CHASSIS), - new ComparableStack(ModItems.upgrade_speed_3)}, + new OreDictStack(ANY_HARDPLASTIC.ingot(), 4)}, new AStack[] { new OreDictStack(PB.wireFine(), 24)} )); @@ -142,7 +142,7 @@ public class SolderingRecipes extends SerializableRecipe { new ComparableStack(ModItems.circuit, lbsm ? 1 : 8, EnumCircuitType.ATOMIC_CLOCK)}, new AStack[] { new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER_ADVANCED), - new ComparableStack(ModItems.upgrade_overdrive_1)}, + new ComparableStack(ModItems.upgrade_speed_3)}, new AStack[] { new OreDictStack(PB.wireFine(), 32)} )); diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index 959dc6be2..5f0e52e54 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -731,7 +731,7 @@ public class AnvilRecipes extends SerializableRecipe { } ).setTier(2)); constructionRecipes.add(new AnvilConstructionRecipe( - new ComparableStack(ModBlocks.machine_bat9000, 1, 1), + new ComparableStack(ModBlocks.machine_bat9000, 1), new AnvilOutput[] { new AnvilOutput(new ItemStack(ModItems.plate_welded, 4, Mats.MAT_TCALLOY.id)), new AnvilOutput(new ItemStack(ModItems.plate_steel, 16)) @@ -967,19 +967,6 @@ public class AnvilRecipes extends SerializableRecipe { new AnvilOutput(new ItemStack(ModItems.circuit, 1, EnumCircuitType.BASIC.ordinal())), new AnvilOutput(new ItemStack(ModItems.circuit, 1, EnumCircuitType.BASIC.ordinal()), 0.5F), }).setTier(4)); - constructionRecipes.add(new AnvilConstructionRecipe( - new ComparableStack(ModItems.pile_rod_plutonium), new AnvilOutput[] { - new AnvilOutput(new ItemStack(ModItems.billet_pu_mix, 2)), - new AnvilOutput(new ItemStack(ModItems.billet_uranium, 1)), - new AnvilOutput(new ItemStack(ModItems.plate_iron, 2)) - }).setTier(2)); - constructionRecipes.add(new AnvilConstructionRecipe( - new ComparableStack(ModItems.pile_rod_pu239), new AnvilOutput[] { - new AnvilOutput(new ItemStack(ModItems.billet_pu239, 1)), //Might need to be cut to 3 nuggets, but a full billet is nice and round - new AnvilOutput(new ItemStack(ModItems.billet_pu_mix, 1)), - new AnvilOutput(new ItemStack(ModItems.billet_uranium, 1)), - new AnvilOutput(new ItemStack(ModItems.plate_iron, 2)) - }).setTier(2)); } else { constructionRecipes.add(new AnvilConstructionRecipe( diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 40ee9bf27..4f8a49eb5 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; +import org.lwjgl.input.Keyboard; + import com.hbm.config.GeneralConfig; import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.AStack; @@ -148,8 +150,8 @@ public class GenericRecipe { public List print() { List list = new ArrayList(); - list.add(EnumChatFormatting.YELLOW + this.getLocalizedName()); + header(list); autoSwitch(list); duration(list); power(list); @@ -159,6 +161,11 @@ public class GenericRecipe { return list; } + protected void header(List list) { + list.add(EnumChatFormatting.YELLOW + this.getLocalizedName()); + if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) list.add(EnumChatFormatting.DARK_GRAY + "Internal: " + this.getInternalName()); + } + protected void autoSwitch(List list) { if(this.autoSwitchGroup != null) { String[] lines = I18nUtil.resolveKeyArray("autoswitch", I18nUtil.resolveKey(this.autoSwitchGroup)); diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 6bc4d93e1..6fee43971 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -48,7 +48,7 @@ public abstract class GenericRecipes extends Serializab /** Blueprint pool name to list of recipe names that are part of this pool */ public static HashMap> blueprintPools = new HashMap(); /** Name to recipe map for all recipes that are part of pools for lookup */ - public static HashMap pooledBlueprints = new HashMap(); + public static HashMap nameToRecipeGlobal = new HashMap(); /** Groups for auto switch functionality (changes recipe automatically based on first solid input) */ public HashMap> autoSwitchGroups = new HashMap(); @@ -68,7 +68,6 @@ public abstract class GenericRecipes extends Serializab blueprintPools.put(pool, list); } list.add(recipe.name); - pooledBlueprints.put(recipe.name, recipe); } /** Adds a recipe to an auto switch group (recipe can switch based on first solid input) */ @@ -81,7 +80,7 @@ public abstract class GenericRecipes extends Serializab public static void clearPools() { blueprintPools.clear(); - pooledBlueprints.clear(); + nameToRecipeGlobal.clear(); } @Override @@ -100,6 +99,7 @@ public abstract class GenericRecipes extends Serializab this.recipeOrderedList.add(recipe); if(recipeNameMap.containsKey(recipe.name)) throw new IllegalStateException("Recipe " + recipe.name + " has been registered with a duplicate ID!"); this.recipeNameMap.put(recipe.name, recipe); + nameToRecipeGlobal.put(recipe.name, recipe); } @Override diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 7eab23d58..aeae45ce9 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -188,19 +188,19 @@ public class ModItems { public static Item ingot_mercury; //It's to prevent any ambiguity, as it was treated as a full ingot in the past anyway public static Item bottle_mercury; - public static Item ore_byproduct; //byproduct of variable purity and quantity, can be treated as a nugget, might require shredding or acidizing, depends on the type + @Deprecated public static Item ore_byproduct; - public static Item ore_bedrock; - public static Item ore_centrifuged; - public static Item ore_cleaned; - public static Item ore_separated; - public static Item ore_purified; - public static Item ore_nitrated; - public static Item ore_nitrocrystalline; - public static Item ore_deepcleaned; - public static Item ore_seared; - //public static Item ore_radcleaned; - public static Item ore_enriched; //final stage + @Deprecated public static Item ore_bedrock; + @Deprecated public static Item ore_centrifuged; + @Deprecated public static Item ore_cleaned; + @Deprecated public static Item ore_separated; + @Deprecated public static Item ore_purified; + @Deprecated public static Item ore_nitrated; + @Deprecated public static Item ore_nitrocrystalline; + @Deprecated public static Item ore_deepcleaned; + @Deprecated public static Item ore_seared; + @Deprecated public static Item ore_enriched; //final stage + public static Item bedrock_ore_base; public static Item bedrock_ore; public static Item bedrock_ore_fragment; @@ -973,13 +973,15 @@ public class ModItems { public static Item waste_plate_ra226be; public static Item waste_plate_pu238be; - public static Item pile_rod_uranium; - public static Item pile_rod_pu239; - public static Item pile_rod_plutonium; - public static Item pile_rod_source; - public static Item pile_rod_boron; - public static Item pile_rod_lithium; - public static Item pile_rod_detector; + @Deprecated public static Item pile_rod_uranium; + @Deprecated public static Item pile_rod_pu239; + @Deprecated public static Item pile_rod_plutonium; + @Deprecated public static Item pile_rod_source; + @Deprecated public static Item pile_rod_boron; + @Deprecated public static Item pile_rod_lithium; + @Deprecated public static Item pile_rod_detector; + + public static Item pile_rod; public static Item plate_fuel_u233; public static Item plate_fuel_u235; @@ -1547,7 +1549,6 @@ public class ModItems { public static Item battery_potatos; public static Item hev_battery; public static Item fusion_core; - @Deprecated public static Item energy_core; public static Item fuse; //by using these in crafting table recipes, i'm running the risk of making my recipes too greg-ian (which i don't like) //in the event that i forget about the meaning of the word "sparingly", please throw a brick at my head @@ -1793,9 +1794,6 @@ public class ModItems { public static Item starmetal_hoe; public static Item smashing_hammer; public static Item centri_stick; - public static Item drax; - public static Item drax_mk2; - public static Item drax_mk3; public static Item bismuth_pickaxe; public static Item bismuth_axe; public static Item volcanic_pickaxe; @@ -2295,18 +2293,18 @@ public class ModItems { ingot_mud = new Item().setUnlocalizedName("ingot_mud").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_mud"); ingot_cft = new Item().setUnlocalizedName("ingot_cft").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_cft"); - ore_byproduct = new ItemByproduct().setUnlocalizedName("ore_byproduct").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":byproduct"); + ore_byproduct = new ItemByproduct().setUnlocalizedName("ore_byproduct").setCreativeTab(null).setTextureName(RefStrings.MODID + ":byproduct"); - ore_bedrock = new ItemBedrockOre().setUnlocalizedName("ore_bedrock").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_bedrock"); - ore_centrifuged = new ItemBedrockOre().setUnlocalizedName("ore_centrifuged").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_centrifuged"); - ore_cleaned = new ItemBedrockOre().setUnlocalizedName("ore_cleaned").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_cleaned"); - ore_separated = new ItemBedrockOre().setUnlocalizedName("ore_separated").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_separated"); - ore_purified = new ItemBedrockOre().setUnlocalizedName("ore_purified").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_purified"); - ore_nitrated = new ItemBedrockOre().setUnlocalizedName("ore_nitrated").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_nitrated"); - ore_nitrocrystalline = new ItemBedrockOre().setUnlocalizedName("ore_nitrocrystalline").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_nitrocrystalline"); - ore_deepcleaned = new ItemBedrockOre().setUnlocalizedName("ore_deepcleaned").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_deepcleaned"); - ore_seared = new ItemBedrockOre().setUnlocalizedName("ore_seared").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_seared"); - ore_enriched = new ItemBedrockOre().setUnlocalizedName("ore_enriched").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ore_enriched"); + ore_bedrock = new ItemBedrockOre().setUnlocalizedName("ore_bedrock").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ore_bedrock"); + ore_centrifuged = new ItemBedrockOre().setUnlocalizedName("ore_centrifuged").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ore_centrifuged"); + ore_cleaned = new ItemBedrockOre().setUnlocalizedName("ore_cleaned").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ore_cleaned"); + ore_separated = new ItemBedrockOre().setUnlocalizedName("ore_separated").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ore_separated"); + ore_purified = new ItemBedrockOre().setUnlocalizedName("ore_purified").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ore_purified"); + ore_nitrated = new ItemBedrockOre().setUnlocalizedName("ore_nitrated").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ore_nitrated"); + ore_nitrocrystalline = new ItemBedrockOre().setUnlocalizedName("ore_nitrocrystalline").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ore_nitrocrystalline"); + ore_deepcleaned = new ItemBedrockOre().setUnlocalizedName("ore_deepcleaned").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ore_deepcleaned"); + ore_seared = new ItemBedrockOre().setUnlocalizedName("ore_seared").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ore_seared"); + ore_enriched = new ItemBedrockOre().setUnlocalizedName("ore_enriched").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ore_enriched"); bedrock_ore_base = new ItemBedrockOreBase().setUnlocalizedName("bedrock_ore_base").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bedrock_ore_new"); bedrock_ore = new ItemBedrockOreNew().setUnlocalizedName("bedrock_ore").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bedrock_ore_new"); bedrock_ore_fragment = new ItemAutogen(MaterialShapes.FRAGMENT).aot(Mats.MAT_BISMUTH, "bedrock_ore_fragment_bismuth").setUnlocalizedName("bedrock_ore_fragment").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bedrock_ore_fragment"); @@ -3002,13 +3000,15 @@ public class ModItems { waste_plate_ra226be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_ra226be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_ra226be"); waste_plate_pu238be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu238be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_pu238be"); - pile_rod_uranium = new ItemPileRod().setUnlocalizedName("pile_rod_uranium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_uranium"); - pile_rod_pu239 = new ItemPileRod().setUnlocalizedName("pile_rod_pu239").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_pu239"); - pile_rod_plutonium = new ItemPileRod().setUnlocalizedName("pile_rod_plutonium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_plutonium"); - pile_rod_source = new ItemPileRod().setUnlocalizedName("pile_rod_source").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_source"); - pile_rod_boron = new ItemPileRod().setUnlocalizedName("pile_rod_boron").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_boron"); - pile_rod_lithium = new ItemPileRod().setUnlocalizedName("pile_rod_lithium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_lithium"); - pile_rod_detector = new ItemPileRod().setUnlocalizedName("pile_rod_detector").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod_detector"); + pile_rod_uranium = new ItemPileRod().setUnlocalizedName("pile_rod_uranium").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_uranium"); + pile_rod_pu239 = new ItemPileRod().setUnlocalizedName("pile_rod_pu239").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_pu239"); + pile_rod_plutonium = new ItemPileRod().setUnlocalizedName("pile_rod_plutonium").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_plutonium"); + pile_rod_source = new ItemPileRod().setUnlocalizedName("pile_rod_source").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_source"); + pile_rod_boron = new ItemPileRod().setUnlocalizedName("pile_rod_boron").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_boron"); + pile_rod_lithium = new ItemPileRod().setUnlocalizedName("pile_rod_lithium").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_lithium"); + pile_rod_detector = new ItemPileRod().setUnlocalizedName("pile_rod_detector").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_detector"); + + pile_rod = new ItemPileRodMK2().setUnlocalizedName("pile_rod").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pile_rod"); plate_fuel_u233 = new ItemPlateFuel(2200000).setFunction(FunctionEnum.SQUARE_ROOT, 50).setUnlocalizedName("plate_fuel_u233").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_u233"); plate_fuel_u235 = new ItemPlateFuel(2200000).setFunction(FunctionEnum.SQUARE_ROOT, 40).setUnlocalizedName("plate_fuel_u235").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":plate_fuel_u235"); @@ -3704,7 +3704,6 @@ public class ModItems { battery_potatos = new ItemPotatos(500000, 0, 100).setUnlocalizedName("battery_potatos").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_potatos"); hev_battery = new ItemFusionCore(150000).setUnlocalizedName("hev_battery").setMaxStackSize(4).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":hev_battery"); fusion_core = new ItemFusionCore(2500000).setUnlocalizedName("fusion_core").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fusion_core"); - energy_core = new ItemBattery(10000000, 0, 1000).setUnlocalizedName("energy_core").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":energy_core"); fuse = new ItemCustomLore().setUnlocalizedName("fuse").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fuse"); screwdriver = new ItemTooling(ToolType.SCREWDRIVER, 100).setUnlocalizedName("screwdriver"); screwdriver_desh = new ItemTooling(ToolType.SCREWDRIVER, 0).setUnlocalizedName("screwdriver_desh"); @@ -4133,31 +4132,6 @@ public class ModItems { .addAbility(IToolHarvestAbility.CENTRIFUGE, 0).setMaxDamage(50).setUnlocalizedName("centri_stick").setTextureName(RefStrings.MODID + ":centri_stick"); smashing_hammer = new ItemToolAbility(12F, -0.1, MainRegistry.tMatSteel, EnumToolType.MINER) .addAbility(IToolHarvestAbility.SHREDDER, 0).setMaxDamage(2500).setUnlocalizedName("smashing_hammer").setTextureName(RefStrings.MODID + ":smashing_hammer"); - drax = new ItemToolAbilityPower(10F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 500000000, 100000, 5000) - .addAbility(IToolHarvestAbility.SMELTER, 0) - .addAbility(IToolHarvestAbility.SHREDDER, 0) - .addAbility(IToolHarvestAbility.LUCK, 1) - .addAbility(IToolAreaAbility.HAMMER, 1) - .addAbility(IToolAreaAbility.HAMMER_FLAT, 1) - .addAbility(IToolAreaAbility.RECURSION, 2).setUnlocalizedName("drax").setCreativeTab(null).setTextureName(RefStrings.MODID + ":drax"); - drax_mk2 = new ItemToolAbilityPower(15F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 1000000000, 250000, 7500) - .addAbility(IToolHarvestAbility.SMELTER, 0) - .addAbility(IToolHarvestAbility.SHREDDER, 0) - .addAbility(IToolHarvestAbility.CENTRIFUGE, 0) - .addAbility(IToolHarvestAbility.LUCK, 2) - .addAbility(IToolAreaAbility.HAMMER, 2) - .addAbility(IToolAreaAbility.HAMMER_FLAT, 2) - .addAbility(IToolAreaAbility.RECURSION, 4).setUnlocalizedName("drax_mk2").setCreativeTab(null).setTextureName(RefStrings.MODID + ":drax_mk2"); - drax_mk3 = new ItemToolAbilityPower(20F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 2500000000L, 500000, 10000) - .addAbility(IToolHarvestAbility.SMELTER, 0) - .addAbility(IToolHarvestAbility.SHREDDER, 0) - .addAbility(IToolHarvestAbility.CENTRIFUGE, 0) - .addAbility(IToolHarvestAbility.CRYSTALLIZER, 0) - .addAbility(IToolHarvestAbility.SILK, 0) - .addAbility(IToolHarvestAbility.LUCK, 3) - .addAbility(IToolAreaAbility.HAMMER, 3) - .addAbility(IToolAreaAbility.HAMMER_FLAT, 3) - .addAbility(IToolAreaAbility.RECURSION, 5).setUnlocalizedName("drax_mk3").setCreativeTab(null).setTextureName(RefStrings.MODID + ":drax_mk3"); ToolMaterial matBismuth = EnumHelper.addToolMaterial("HBM_BISMUTH", 4, 0, 50F, 0.0F, 200).setRepairItem(new ItemStack(ModItems.ingot_bismuth)); bismuth_pickaxe = new ItemToolAbility(15F, 0, matBismuth, EnumToolType.MINER) @@ -5173,7 +5147,6 @@ public class ModItems { GameRegistry.registerItem(battery_potatos, battery_potatos.getUnlocalizedName()); GameRegistry.registerItem(hev_battery, hev_battery.getUnlocalizedName()); GameRegistry.registerItem(fusion_core, fusion_core.getUnlocalizedName()); - GameRegistry.registerItem(energy_core, energy_core.getUnlocalizedName()); //Folders GameRegistry.registerItem(blueprints, blueprints.getUnlocalizedName()); @@ -5388,6 +5361,8 @@ public class ModItems { GameRegistry.registerItem(pile_rod_boron, pile_rod_boron.getUnlocalizedName()); GameRegistry.registerItem(pile_rod_lithium, pile_rod_lithium.getUnlocalizedName()); GameRegistry.registerItem(pile_rod_detector, pile_rod_detector.getUnlocalizedName()); + + GameRegistry.registerItem(pile_rod, pile_rod.getUnlocalizedName()); //Plate Fuels GameRegistry.registerItem(plate_fuel_u233, plate_fuel_u233.getUnlocalizedName()); @@ -5929,9 +5904,6 @@ public class ModItems { GameRegistry.registerItem(dnt_sword, dnt_sword.getUnlocalizedName()); GameRegistry.registerItem(smashing_hammer, smashing_hammer.getUnlocalizedName()); GameRegistry.registerItem(centri_stick, centri_stick.getUnlocalizedName()); - GameRegistry.registerItem(drax, drax.getUnlocalizedName()); - GameRegistry.registerItem(drax_mk2, drax_mk2.getUnlocalizedName()); - GameRegistry.registerItem(drax_mk3, drax_mk3.getUnlocalizedName()); GameRegistry.registerItem(bismuth_pickaxe, bismuth_pickaxe.getUnlocalizedName()); GameRegistry.registerItem(bismuth_axe, bismuth_axe.getUnlocalizedName()); GameRegistry.registerItem(volcanic_pickaxe, volcanic_pickaxe.getUnlocalizedName()); @@ -5939,7 +5911,8 @@ public class ModItems { GameRegistry.registerItem(chlorophyte_pickaxe, chlorophyte_pickaxe.getUnlocalizedName()); GameRegistry.registerItem(chlorophyte_axe, chlorophyte_axe.getUnlocalizedName()); GameRegistry.registerItem(mese_pickaxe, mese_pickaxe.getUnlocalizedName()); - GameRegistry.registerItem(mese_axe, mese_axe.getUnlocalizedName()); GameRegistry.registerItem(matchstick, matchstick.getUnlocalizedName()); + GameRegistry.registerItem(mese_axe, mese_axe.getUnlocalizedName()); + GameRegistry.registerItem(matchstick, matchstick.getUnlocalizedName()); GameRegistry.registerItem(balefire_and_steel, balefire_and_steel.getUnlocalizedName()); GameRegistry.registerItem(crowbar, crowbar.getUnlocalizedName()); GameRegistry.registerItem(wrench, wrench.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/armor/ArmorFSB.java b/src/main/java/com/hbm/items/armor/ArmorFSB.java index f64a07456..24d7bfa11 100644 --- a/src/main/java/com/hbm/items/armor/ArmorFSB.java +++ b/src/main/java/com/hbm/items/armor/ArmorFSB.java @@ -222,19 +222,12 @@ public class ArmorFSB extends ItemArmor implements IArmorDisableModel { ItemStack armor = player.inventory.armorInventory[i]; - if(armor == null || !(armor.getItem() instanceof ArmorFSB)) - return false; - - if(((ArmorFSB) armor.getItem()).getArmorMaterial() != chestplate.getArmorMaterial()) - return false; - - if(!((ArmorFSB) armor.getItem()).isArmorEnabled(armor)) - return false; + if(armor == null || !(armor.getItem() instanceof ArmorFSB)) return false; + if(((ArmorFSB) armor.getItem()).getArmorMaterial() != chestplate.getArmorMaterial()) return false; + if(!((ArmorFSB) armor.getItem()).isArmorEnabled(armor)) return false; } - return true; } - return false; } @@ -251,16 +244,11 @@ public class ArmorFSB extends ItemArmor implements IArmorDisableModel { ItemStack armor = player.inventory.armorInventory[i]; - if(armor == null || !(armor.getItem() instanceof ArmorFSB)) - return false; - - if(((ArmorFSB) armor.getItem()).getArmorMaterial() != chestplate.getArmorMaterial()) - return false; + if(armor == null || !(armor.getItem() instanceof ArmorFSB)) return false; + if(((ArmorFSB) armor.getItem()).getArmorMaterial() != chestplate.getArmorMaterial()) return false; } - return true; } - return false; } diff --git a/src/main/java/com/hbm/items/armor/ArmorFSBPowered.java b/src/main/java/com/hbm/items/armor/ArmorFSBPowered.java index bfc6ba444..33ed1dc58 100644 --- a/src/main/java/com/hbm/items/armor/ArmorFSBPowered.java +++ b/src/main/java/com/hbm/items/armor/ArmorFSBPowered.java @@ -26,7 +26,6 @@ public class ArmorFSBPowered extends ArmorFSB implements IBatteryItem { this.chargeRate = chargeRate; this.consumption = consumption; this.drain = drain; - this.setMaxDamage(1); } @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/hbm/items/armor/ItemModDefuser.java b/src/main/java/com/hbm/items/armor/ItemModDefuser.java index fafc290f1..ea7426817 100644 --- a/src/main/java/com/hbm/items/armor/ItemModDefuser.java +++ b/src/main/java/com/hbm/items/armor/ItemModDefuser.java @@ -42,10 +42,11 @@ public class ItemModDefuser extends ItemArmorMod { List creepers = entity.worldObj.getEntitiesWithinAABB(EntityCreeper.class, entity.boundingBox.expand(5, 5, 5)); - for(EntityCreeper creeper : creepers) defuse(creeper, entity, true); + for(EntityCreeper creeper : creepers) castrateCreeper(creeper, entity, true); } - public static boolean defuse(EntityCreeper creeper, EntityLivingBase entity, boolean dropItem) { + /** my bualls */ + public static boolean castrateCreeper(EntityCreeper creeper, EntityLivingBase entity, boolean dropItem) { creeper.setCreeperState(-1); creeper.getDataWatcher().updateObject(18, new Byte((byte) 0)); @@ -66,7 +67,7 @@ public class ItemModDefuser extends ItemArmorMod { if(dropItem) { creeper.worldObj.playSoundEffect(creeper.posX, creeper.posY, creeper.posZ, "hbm:item.pinBreak", 1.0F, 1.0F); creeper.dropItem(ModItems.safety_fuse, 1); - creeper.attackEntityFrom(DamageSource.causeMobDamage(entity), 1.0F); + creeper.attackEntityFrom(entity != null ? DamageSource.causeMobDamage(entity) : DamageSource.magic, 1.0F); creeper.addPotionEffect(new PotionEffect(Potion.weakness.id, 0, 200)); } creeper.getEntityData().setBoolean("hfr_defused", true); diff --git a/src/main/java/com/hbm/items/armor/ItemModMilk.java b/src/main/java/com/hbm/items/armor/ItemModMilk.java index 1985c6b17..5350516f6 100644 --- a/src/main/java/com/hbm/items/armor/ItemModMilk.java +++ b/src/main/java/com/hbm/items/armor/ItemModMilk.java @@ -38,11 +38,9 @@ public class ItemModMilk extends ItemArmorMod { public void modUpdate(EntityLivingBase entity, ItemStack armor) { List ints = new ArrayList(); - Iterator iterator = ((Collection) entity.getActivePotionEffects()).iterator(); while(iterator.hasNext()) { - PotionEffect eff = (PotionEffect) iterator.next(); if(HbmPotion.getIsBadEffect(Potion.potionTypes[eff.getPotionID()])) { @@ -50,8 +48,6 @@ public class ItemModMilk extends ItemArmorMod { } } - for(Integer i : ints) { - entity.removePotionEffect(i); - } + for(Integer i : ints) entity.removePotionEffect(i); } } diff --git a/src/main/java/com/hbm/items/machine/ItemBattery.java b/src/main/java/com/hbm/items/machine/ItemBattery.java index bc35e2803..f3c840fd3 100644 --- a/src/main/java/com/hbm/items/machine/ItemBattery.java +++ b/src/main/java/com/hbm/items/machine/ItemBattery.java @@ -2,7 +2,6 @@ package com.hbm.items.machine; import java.util.List; -import com.hbm.items.ModItems; import com.hbm.util.BobMathUtil; import api.hbm.energymk2.IBatteryItem; @@ -10,7 +9,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -30,30 +28,15 @@ public class ItemBattery extends Item implements IBatteryItem { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { long charge = maxCharge; + if(itemstack.hasTagCompound()) charge = getCharge(itemstack); - if(itemstack.getItem() != ModItems.fusion_core && itemstack.getItem() != ModItems.energy_core) { - list.add("Energy stored: " + BobMathUtil.getShortNumber(charge) + "/" + BobMathUtil.getShortNumber(maxCharge) + "HE"); - } else { - String charge1 = BobMathUtil.getShortNumber((charge * 100) / this.maxCharge); - list.add("Charge: " + charge1 + "%"); - list.add("(" + BobMathUtil.getShortNumber(charge) + "/" + BobMathUtil.getShortNumber(maxCharge) + "HE)"); - } + list.add("Energy stored: " + BobMathUtil.getShortNumber(charge) + "/" + BobMathUtil.getShortNumber(maxCharge) + "HE"); list.add("Charge rate: " + BobMathUtil.getShortNumber(chargeRate) + "HE/t"); list.add("Discharge rate: " + BobMathUtil.getShortNumber(dischargeRate) + "HE/t"); } - @Override - public EnumRarity getRarity(ItemStack p_77613_1_) { - - if(this == ModItems.fusion_core || this == ModItems.energy_core) { - return EnumRarity.uncommon; - } - - return EnumRarity.common; - } - public void chargeBattery(ItemStack stack, long i) { if(stack.getItem() instanceof ItemBattery) { if(stack.hasTagCompound()) { diff --git a/src/main/java/com/hbm/items/machine/ItemBatterySC.java b/src/main/java/com/hbm/items/machine/ItemBatterySC.java index 691b60b1a..db2fc8a6f 100644 --- a/src/main/java/com/hbm/items/machine/ItemBatterySC.java +++ b/src/main/java/com/hbm/items/machine/ItemBatterySC.java @@ -6,6 +6,7 @@ import com.hbm.items.ItemEnumMulti; import com.hbm.main.MainRegistry; import com.hbm.util.BobMathUtil; import com.hbm.util.EnumUtil; +import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IBatteryItem; import net.minecraft.entity.player.EntityPlayer; @@ -58,5 +59,9 @@ public class ItemBatterySC extends ItemEnumMulti implements IBatteryItem { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { EnumBatterySC pack = EnumUtil.grabEnumSafely(EnumBatterySC.class, stack.getItemDamage()); if(pack.power > 0) list.add(EnumChatFormatting.YELLOW + "Discharge rate: " + BobMathUtil.getShortNumber(pack.power) + "HE/t"); + + for(String line : I18nUtil.resolveKeyArray(this.getUnlocalizedName() + ".desc")) { + list.add(EnumChatFormatting.RED + line); + } } } diff --git a/src/main/java/com/hbm/items/machine/ItemBlueprints.java b/src/main/java/com/hbm/items/machine/ItemBlueprints.java index fc6c960ac..07be9a219 100644 --- a/src/main/java/com/hbm/items/machine/ItemBlueprints.java +++ b/src/main/java/com/hbm/items/machine/ItemBlueprints.java @@ -121,7 +121,7 @@ public class ItemBlueprints extends Item { } for(String name : pool) { - GenericRecipe recipe = GenericRecipes.pooledBlueprints.get(name); + GenericRecipe recipe = GenericRecipes.nameToRecipeGlobal.get(name); if(recipe != null) { list.add(recipe.getLocalizedName()); } diff --git a/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java b/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java new file mode 100644 index 000000000..2fd4fc344 --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemPileRodMK2.java @@ -0,0 +1,90 @@ +package com.hbm.items.machine; + +import com.hbm.items.ItemEnumMulti; +import com.hbm.util.BobMathUtil; +import com.hbm.util.EnumUtil; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class ItemPileRodMK2 extends ItemEnumMulti { + + /* _____ + * / \ + * \_____/ + * | | + * | | + * | | + * | | + * \_____/ + * + * Not terribly sophisticated, + * it's a cylinder. + */ + + public static final String KEY_NBT_DEPLETION = "depletion"; + + public ItemPileRodMK2() { + super(EnumPileRod.class, true, true); + } + + public static enum EnumPileRod { + RA226BE(1D), + PO210BE(1D), + ZR( 0D, 0D, 0D), + NU( 1D, 1_000D, 1D), + RGP( 1D, 1_000D, 1D), + PU239( 1D, 1_000D, 1D), + WASTE( 1D, 1_000D, 1D); + + public double reactionMult = 1.0D; + public double life = 1_000D; + public double heatMult = 1.0D; + public double neutronSource = 0D; + + private EnumPileRod(double neutronSource) { + this.neutronSource = neutronSource; + this.reactionMult = 0; + this.life = 0; + this.heatMult = 0; + } + + private EnumPileRod(double reaction, double life, double heat) { + this.reactionMult = reaction; + this.life = life; + this.heatMult = heat; + } + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return getDurabilityForDisplay(stack) > 0D; + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + EnumPileRod rod = EnumUtil.grabEnumSafely(EnumPileRod.class, stack.getItemDamage()); + double life = rod.life; + if(life <= 0) return 0D; + return getDepletion(stack) / life; + } + + public static double getDepletion(ItemStack stack) { + if(!stack.hasTagCompound()) return 0D; + return stack.stackTagCompound.getDouble(KEY_NBT_DEPLETION); + } + + public static void setDepletion(ItemStack stack, double depletion) { + if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); + stack.stackTagCompound.setDouble(KEY_NBT_DEPLETION, depletion); + } + + public static double getReactivity(ItemStack stack, double inFlux) { + EnumPileRod rod = EnumUtil.grabEnumSafely(EnumPileRod.class, stack.getItemDamage()); + double outFlux = rod.neutronSource; + if(rod.reactionMult > 0) { + outFlux += BobMathUtil.squirt(inFlux) * rod.reactionMult; + } + return outFlux; + } +} diff --git a/src/main/java/com/hbm/items/special/ItemStarterKit.java b/src/main/java/com/hbm/items/special/ItemStarterKit.java index 8be4b13ef..bd9cc77e7 100644 --- a/src/main/java/com/hbm/items/special/ItemStarterKit.java +++ b/src/main/java/com/hbm/items/special/ItemStarterKit.java @@ -108,7 +108,7 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.reactor_research, 4)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_turbine, 4)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_radgen, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_rtg_grey, 1)); + player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_rtg, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_assembly_machine, 3)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_chemical_plant, 2)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_fluidtank, 1)); diff --git a/src/main/java/com/hbm/items/tool/ItemAnchorRemote.java b/src/main/java/com/hbm/items/tool/ItemAnchorRemote.java index 0ebd77c33..65a72b7ef 100644 --- a/src/main/java/com/hbm/items/tool/ItemAnchorRemote.java +++ b/src/main/java/com/hbm/items/tool/ItemAnchorRemote.java @@ -3,7 +3,6 @@ package com.hbm.items.tool; import java.util.List; import com.hbm.blocks.ModBlocks; -import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBattery; import com.hbm.main.NTMSounds; import com.hbm.util.BobMathUtil; @@ -20,21 +19,10 @@ public class ItemAnchorRemote extends ItemBattery { } @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { - + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { long charge = maxCharge; - - if(itemstack.hasTagCompound()) - charge = getCharge(itemstack); - - if(itemstack.getItem() != ModItems.fusion_core && itemstack.getItem() != ModItems.energy_core) { - list.add("Energy stored: " + BobMathUtil.getShortNumber(charge) + "/" + BobMathUtil.getShortNumber(maxCharge) + "HE"); - } else { - String charge1 = BobMathUtil.getShortNumber((charge * 100) / this.maxCharge); - list.add("Charge: " + charge1 + "%"); - list.add("(" + BobMathUtil.getShortNumber(charge) + "/" + BobMathUtil.getShortNumber(maxCharge) + "HE)"); - } - + if(stack.hasTagCompound()) charge = getCharge(stack); + list.add("Energy stored: " + BobMathUtil.getShortNumber(charge) + "/" + BobMathUtil.getShortNumber(maxCharge) + "HE"); list.add("Charge rate: " + BobMathUtil.getShortNumber(chargeRate) + "HE/t"); } diff --git a/src/main/java/com/hbm/items/tool/ItemDefuser.java b/src/main/java/com/hbm/items/tool/ItemDefuser.java index 9a1aa6d9b..c2a04c3b9 100644 --- a/src/main/java/com/hbm/items/tool/ItemDefuser.java +++ b/src/main/java/com/hbm/items/tool/ItemDefuser.java @@ -27,7 +27,7 @@ public class ItemDefuser extends ItemTooling { public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity) { if(entity instanceof EntityCreeper) { - return ItemModDefuser.defuse((EntityCreeper) entity, player, true); + return ItemModDefuser.castrateCreeper((EntityCreeper) entity, player, true); } if(entity instanceof EntityGlyphidNuclear) { diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index 20ee810dd..7239e799c 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -140,26 +140,10 @@ public class HbmWorldGen implements IWorldGenerator { DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.limestoneSpawn, 16, 25, 30, ModBlocks.stone_resource, EnumStoneType.LIMESTONE.ordinal()); - if(WorldConfig.newBedrockOres) { - - if(rand.nextInt(10) == 0) { - int randPosX = i + rand.nextInt(2) + 8; - int randPosZ = j + rand.nextInt(2) + 8; - - BedrockOre.generateAuto(world, randPosX, randPosZ); - } - - } else { - - if(rand.nextInt(3) == 0) { - @SuppressWarnings("unchecked") - WeightedRandomGeneric item = (WeightedRandomGeneric) WeightedRandom.getRandomItem(rand, BedrockOre.weightedOres); - BedrockOreDefinition def = item.get(); - - int randPosX = i + rand.nextInt(2) + 8; - int randPosZ = j + rand.nextInt(2) + 8; - BedrockOre.generate(world, randPosX, randPosZ, def.stack, def.acid, def.color, def.tier); - } + if(rand.nextInt(10) == 0) { + int randPosX = i + rand.nextInt(2) + 8; + int randPosZ = j + rand.nextInt(2) + 8; + BedrockOre.generateAuto(world, randPosX, randPosZ); } if(GeneralConfig.enable528ColtanSpawn) { diff --git a/src/main/java/com/hbm/lib/ModDamageSource.java b/src/main/java/com/hbm/lib/ModDamageSource.java index df39c8958..eeb0a528b 100644 --- a/src/main/java/com/hbm/lib/ModDamageSource.java +++ b/src/main/java/com/hbm/lib/ModDamageSource.java @@ -43,7 +43,6 @@ public class ModDamageSource extends DamageSource { public static DamageSource vacuum = (new DamageSource("vacuum")).setDamageIsAbsolute().setDamageBypassesArmor(); public static DamageSource overdose = (new DamageSource("overdose")).setDamageIsAbsolute().setDamageBypassesArmor(); public static DamageSource microwave = (new DamageSource("microwave")).setDamageIsAbsolute().setDamageBypassesArmor(); - public static DamageSource nitan = (new DamageSource("nitan")).setDamageIsAbsolute().setDamageBypassesArmor().setDamageAllowedInCreativeMode();; public static final String s_bullet = "revolverBullet"; public static final String s_emplacer = "chopperBullet"; diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 6fb156cc0..7edfe0a91 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5719)"; + public static final String VERSION = "1.0.27 BETA (5758)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 8309e41c6..71d29a399 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -80,6 +80,7 @@ import com.hbm.tileentity.machine.*; import com.hbm.tileentity.machine.albion.*; import com.hbm.tileentity.machine.fusion.*; import com.hbm.tileentity.machine.oil.*; +import com.hbm.tileentity.machine.pile.*; import com.hbm.tileentity.machine.rbmk.*; import com.hbm.tileentity.machine.storage.*; import com.hbm.tileentity.network.*; @@ -189,6 +190,9 @@ public class ClientProxy extends ServerProxy { GunFactoryClient.init(); } + @Override + public boolean advancedTooltips() { return Minecraft.getMinecraft().gameSettings.advancedItemTooltips; } + @Override public void registerTileEntitySpecialRenderer() { //test crap @@ -304,7 +308,6 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineCrystallizer.class, new RenderCrystallizer()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMicrowave.class, new RenderMicrowave()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineRTG.class, new RenderRTG()); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineMiniRTG.class, new RenderRTG()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFF.class, new RenderForceField()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityForceField.class, new RenderMachineForceField()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineFENSU.class, new RenderFENSU()); @@ -373,6 +376,10 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryBasin.class, new RenderFoundry()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryMold.class, new RenderFoundry()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineStrandCaster.class, new RenderStrandCaster()); + //CHICAGO PILE + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPileLoader.class, new RenderPileLoader()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPileVent.class, new RenderPileVent()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPileControl.class, new RenderPileControl()); //ZIRNOX ClientRegistry.bindTileEntitySpecialRenderer(TileEntityReactorZirnox.class, new RenderZirnox()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityZirnoxDestroyed.class, new RenderZirnoxDestroyed()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index b8830e883..9f25e38bc 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -248,7 +248,6 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.red_pylon_medium_steel, 2), new Object[] { "CCW", "IIW", " S", 'C', ModItems.coil_copper, 'W', STEEL.pipe(), 'I', ModItems.plate_polymer, 'S', KEY_COBBLESTONE }); addShapelessAuto(new ItemStack(ModBlocks.red_pylon_medium_steel_transformer, 1), new Object[] { ModBlocks.red_pylon_medium_steel, ModItems.plate_polymer, ModItems.coil_copper }); addRecipeAuto(new ItemStack(ModBlocks.machine_wood_burner, 1), new Object[] { "PPP", "CFC", "I I" , 'P', STEEL.plate(), 'C', ModItems.coil_copper, 'I', IRON.ingot(), 'F', Blocks.furnace}); - addRecipeAuto(new ItemStack(ModBlocks.machine_turbine, 1), new Object[] { "SMS", "PTP", "SMS", 'S', STEEL.ingot(), 'T', ModItems.turbine_titanium, 'M', ModItems.coil_copper, 'P', ANY_PLASTIC.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.machine_converter_he_rf, 1), new Object[] { "RRR", "WWW", "III", 'R', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CAPACITOR), 'W', REDSTONE.dust(), 'I', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.machine_converter_rf_he, 1), new Object[] { "RRR", "WWW", "III", 'R', REDSTONE.dust(), 'W', MINGRADE.wireFine(), 'I', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.crate_iron, 1), new Object[] { "PPP", "I I", "III", 'P', IRON.plate(), 'I', IRON.ingot() }); @@ -704,11 +703,10 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.ams_catalyst_dineutronium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_hagalaz, ModItems.rune_hagalaz, ModItems.rune_thurisaz, ModItems.rune_thurisaz, DNT.dust(), DNT.dust(), DNT.dust(), DNT.dust() }); addRecipeAuto(new ItemStack(ModBlocks.barrel_plastic, 1), new Object[] { "IPI", "I I", "IPI", 'I', ModItems.plate_polymer, 'P', AL.plate() }); addRecipeAuto(new ItemStack(ModBlocks.barrel_steel, 1), new Object[] { "IPI", "I I", "IPI", 'I', STEEL.plate(), 'P', STEEL.ingot() }); - addRecipeAuto(new ItemStack(ModBlocks.barrel_tcalloy, 1), new Object[] { "IPI", "I I", "IPI", 'I', "ingotTcAlloy", 'P', TI.plate() }); - addRecipeAuto(new ItemStack(ModBlocks.barrel_antimatter, 1), new Object[] { "IPI", "I I", "IPI", 'I', BIGMT.plate(), 'P', ModItems.coil_gold_torus }); + addRecipeAuto(new ItemStack(ModBlocks.barrel_tcalloy, 1), new Object[] { "IPI", "I I", "IPI", 'I', TCALLOY.ingot(), 'P', TI.plate() }); + addRecipeAuto(new ItemStack(ModBlocks.barrel_antimatter, 1), new Object[] { "IPI", "I I", "IPI", 'I', BIGMT.plate(), 'P', BSCCO.wireDense() }); addRecipeAuto(new ItemStack(ModBlocks.tesla, 1), new Object[] { "CCC", "PIP", "WTW", 'C', ModItems.coil_copper, 'I', IRON.ingot(), 'P', ANY_PLASTIC.ingot(), 'T', ModBlocks.machine_transformer, 'W', KEY_PLANKS }); addRecipeAuto(new ItemStack(ModBlocks.struct_watz_core, 1), new Object[] { "CBC", "BHB", "CBC", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'B', ANY_RESISTANTALLOY.plateCast(), 'H', ModBlocks.watz_cooler }); - addShapelessAuto(new ItemStack(ModItems.energy_core), new Object[] { ModItems.fusion_core, ModItems.fuse }); addRecipeAuto(new ItemStack(ModItems.catalytic_converter, 1), new Object[] { "PCP", "PBP", "PCP", 'P', ANY_HARDPLASTIC.ingot(), 'C', CO.dust(), 'B', ANY_BISMOID.ingot() }); addRecipeAuto(new ItemStack(ModItems.upgrade_nullifier, 1), new Object[] { "SPS", "PUP", "SPS", 'S', STEEL.plate(), 'P', ModItems.powder_fire, 'U', ModItems.upgrade_template }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index c01312845..9ffb9ebc0 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -606,6 +606,7 @@ public class MainRegistry { Compat.handleRailcraftNonsense(); SuicideThreadDump.register(); CommandReloadClient.register(); + CommandWikiRender.register(); //ExplosionTests.runTest(); } @@ -667,6 +668,7 @@ public class MainRegistry { event.registerServerCommand(new CommandReloadServer()); event.registerServerCommand(new CommandLocate()); event.registerServerCommand(new CommandCustomize()); + event.registerServerCommand(new CommandWikiRender()); // TODO: make this shitfuck be clientside event.registerServerCommand(new CommandReapNetworks()); ArcFurnaceRecipes.registerFurnaceSmeltables(); // because we have to wait for other mods to take their merry ass time to register recipes } @@ -1629,6 +1631,12 @@ public class MainRegistry { ignoreMappings.add("hbm:item.coil_advanced_alloy"); ignoreMappings.add("hbm:item.coil_advanced_torus"); ignoreMappings.add("hbm:item.blades_advanced_alloy"); + ignoreMappings.add("hbm:tile.machine_minirtg"); + ignoreMappings.add("hbm:tile.machine_powerrtg"); + ignoreMappings.add("hbm:item.energy_core"); + ignoreMappings.add("hbm:item.drax"); + ignoreMappings.add("hbm:item.drax_mk2"); + ignoreMappings.add("hbm:item.drax_mk3"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index e4d50949d..a6f3cb7fe 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -5,6 +5,7 @@ import com.google.common.collect.Multimap; import com.hbm.blocks.IStepTickReceiver; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockAshes; +import com.hbm.blocks.generic.BlockPedestal; import com.hbm.config.GeneralConfig; import com.hbm.config.MobConfig; import com.hbm.config.RadiationConfig; @@ -508,7 +509,7 @@ public class ModEventHandler { public void onLivingUpdate(LivingUpdateEvent event) { if(event.entityLiving instanceof EntityCreeper && event.entityLiving.getEntityData().getBoolean("hfr_defused")) { - ItemModDefuser.defuse((EntityCreeper) event.entityLiving, null, false); + ItemModDefuser.castrateCreeper((EntityCreeper) event.entityLiving, null, false); } ItemStack[] prevArmor = event.entityLiving.previousEquipment; @@ -586,12 +587,15 @@ public class ModEventHandler { @SubscribeEvent public void worldTick(WorldTickEvent event) { + + World world = event.world; + long time = world.getTotalWorldTime(); - if(event.world != null && !event.world.isRemote) { + if(world != null && !world.isRemote) { if(reference != null) { - for(Object player : event.world.playerEntities) { - if(((EntityPlayer) player).ridingEntity != null && event.world.getTotalWorldTime() % (1 * 60 * 20) == 0) { + for(Object player : world.playerEntities) { + if(((EntityPlayer) player).ridingEntity != null && time % (1 * 60 * 20) == 0) { ((EntityPlayer) player).mountEntity(null); didSit = true; } @@ -605,7 +609,7 @@ public class ModEventHandler { int tickrate = Math.max(1, ServerConfig.ITEM_HAZARD_DROP_TICKRATE.get()); - if(event.world.getTotalWorldTime() % tickrate == 0) { + if(time % tickrate == 0) { List loadedEntityList = new ArrayList(); loadedEntityList.addAll(event.world.loadedEntityList); // ConcurrentModificationException my balls @@ -618,13 +622,17 @@ public class ModEventHandler { } } - EntityRailCarBase.updateMotion(event.world); + EntityRailCarBase.updateMotion(world); + } + + if(time % 20 == 0) { + BlockPedestal.checkPedestalEntries(world.provider.dimensionId, time); } } if(event.phase == Phase.START) { - BossSpawnHandler.rollTheDice(event.world); - TimedGenerator.automaton(event.world, 100); + BossSpawnHandler.rollTheDice(world); + TimedGenerator.automaton(world, 100); } } diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 8347de40f..fc2f13c3a 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -61,7 +61,7 @@ public class ResourceManager { //Landmines public static final IModelCustom mine_ap = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/ap_mine.obj")).asVBO(); public static final IModelCustom mine_marelet = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/marelet.obj")).asVBO(); - public static final IModelCustom mine_fat = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/mine_fat.obj")); + public static final IModelCustom mine_fat = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/bombs/mine_fat.obj")); public static final IModelCustom mine_naval = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/bombs/naval_mine.obj")).asVBO(); //Oil Pumps @@ -362,13 +362,15 @@ public class ResourceManager { public static final ResourceLocation pheo_label_106 = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/vault/label_106.png"); public static final ResourceLocation pheo_label_111 = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/vault/label_111.png"); public static IModelCustomNamed pheo_vault_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/vault_door.obj")).asVBO(); + public static IModelCustomNamed pheo_cargo_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/cargo_door.obj")).asVBO(); + public static final ResourceLocation pheo_cargo_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/cargo_door.png"); //Doors public static final ResourceLocation silo_hatch_tex = new ResourceLocation(RefStrings.MODID, "textures/models/doors/silo_hatch.png"); public static IModelCustomNamed silo_hatch = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/doors/silo_hatch.obj")).asVBO(); public static final ResourceLocation silo_hatch_large_tex = new ResourceLocation(RefStrings.MODID, "textures/models/doors/silo_hatch_large.png"); public static IModelCustomNamed silo_hatch_large = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/doors/silo_hatch_large.obj")).asVBO(); - + //Vending Machine public static final IModelCustom vending_machine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/vending_machine.obj")).noSmooth().asVBO(); @@ -392,6 +394,11 @@ public class ResourceManager { public static final IModelCustom siege_ufo = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/mobs/siege_ufo.obj")); public static final IModelCustom glyphid = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/mobs/glyphid.obj")); public static final IModelCustom drone = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/mobs/quadcopter.obj")); + + //PILE + public static final IModelCustom pile_loader = new HFRWavefrontObject("models/pile/pile_loader.obj").asVBO(); + public static final IModelCustom pile_vent = new HFRWavefrontObject("models/pile/pile_vent.obj").asVBO(); + public static final IModelCustom pile_control = new HFRWavefrontObject("models/pile/pile_control.obj").asVBO(); //ZIRNOX public static final IModelCustom zirnox = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/zirnox.obj")).asVBO(); @@ -467,7 +474,7 @@ public class ResourceManager { //public static final ResourceLocation mine_he_tex = new ResourceLocation(RefStrings.MODID, "textures/models/mine_he.png"); public static final ResourceLocation mine_marelet_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/mine_marelet.png"); public static final ResourceLocation mine_shrap_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/mine_shrapnel.png"); - public static final ResourceLocation mine_fat_tex = new ResourceLocation(RefStrings.MODID, "textures/models/mine_fat.png"); + public static final ResourceLocation mine_fat_tex = new ResourceLocation(RefStrings.MODID, "textures/models/bombs/mine_fat.png"); public static final ResourceLocation mine_naval_tex = new ResourceLocation(RefStrings.MODID, "textures/models/NMine.png"); @@ -672,8 +679,6 @@ public class ResourceManager { //RTG public static final ResourceLocation rtg_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rtg.png"); - public static final ResourceLocation rtg_cell_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rtg_cell.png"); - public static final ResourceLocation rtg_polonium_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rtg_polonium.png"); //Waste Drum public static final ResourceLocation waste_drum_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/drum_gray.png"); @@ -784,7 +789,7 @@ public class ResourceManager { //Elevator public static final ResourceLocation cargo_elevator_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/elevator.png"); - + //Vault Door public static final ResourceLocation vault_cog_tex = new ResourceLocation(RefStrings.MODID, "textures/models/vault_cog.png"); public static final ResourceLocation vault_frame_tex = new ResourceLocation(RefStrings.MODID, "textures/models/vault_frame.png"); @@ -841,6 +846,11 @@ public class ResourceManager { public static final ResourceLocation glyphid_scout_tex = new ResourceLocation(RefStrings.MODID, "textures/entity/glyphid_scout.png"); public static final ResourceLocation glyphid_nuclear_tex = new ResourceLocation(RefStrings.MODID, "textures/entity/glyphid_nuclear.png"); public static final ResourceLocation glyphid_digger_tex = new ResourceLocation(RefStrings.MODID, "textures/entity/glyphid_digger.png"); + + //PILE + public static final ResourceLocation pile_loader_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pile/pile_loader.png"); + public static final ResourceLocation pile_vent_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pile/pile_vent.png"); + public static final ResourceLocation pile_control_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pile/pile_control.png"); //ZIRNOX public static final ResourceLocation zirnox_tex = new ResourceLocation(RefStrings.MODID, "textures/models/zirnox.png"); @@ -859,7 +869,7 @@ public class ResourceManager { //Pipes public static final ResourceLocation pipe_anchor_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/pipe_anchor.png"); public static final ResourceLocation fluid_pump_tex = new ResourceLocation(RefStrings.MODID, "textures/models/network/fluid_diode.png"); - + //Barrels public static ResourceLocation barrel_plastic_tex = new ResourceLocation(RefStrings.MODID, "textures/blocks/barrel_plastic.png"); public static ResourceLocation barrel_steel_tex = new ResourceLocation(RefStrings.MODID, "textures/blocks/barrel_steel.png"); diff --git a/src/main/java/com/hbm/main/ServerProxy.java b/src/main/java/com/hbm/main/ServerProxy.java index bd7ca8782..da3b0f27c 100644 --- a/src/main/java/com/hbm/main/ServerProxy.java +++ b/src/main/java/com/hbm/main/ServerProxy.java @@ -72,6 +72,8 @@ public class ServerProxy { public EntityPlayer me() { return null; } + + public boolean advancedTooltips() { return false; } public boolean isVanished(Entity e) { return false; diff --git a/src/main/java/com/hbm/module/IParse.java b/src/main/java/com/hbm/module/IParse.java index df96547ee..bc29bdd7f 100644 --- a/src/main/java/com/hbm/module/IParse.java +++ b/src/main/java/com/hbm/module/IParse.java @@ -15,12 +15,59 @@ public interface IParse { public NBTTagCompound variables = new NBTTagCompound(); public HashMap jmp = new HashMap(); - public String buffer = ""; + public static final int MAX_BUFFER_LENGTH = 256; + public static final int MAX_STACK_SIZE = 256; + + private String buffer = ""; + private String[] stack = new String[MAX_STACK_SIZE]; + private int stackSize = 0; + public String splitString = ";"; public int clockSpeed = 1; public int current = 0; public ParseContext(World world) { this.world = world; + + for(int i = 0; i < MAX_STACK_SIZE; i++) stack[i] = ""; + } + + public String readBuffer() { + return this.buffer; + } + + /** Sets the buffer and imposes length restrictions. Returns true if successful, and false if truncation has taken place. */ + public boolean writeBuffer(String buffer) { + + if(buffer.length() > MAX_BUFFER_LENGTH) { + this.buffer = buffer.substring(0, MAX_BUFFER_LENGTH); + return false; + } + + this.buffer = buffer; + return true; + } + + public boolean push(String line) { + if(stackSize >= MAX_STACK_SIZE) return false; + if(line.length() > MAX_BUFFER_LENGTH) line = line.substring(0, MAX_BUFFER_LENGTH); + stack[stackSize] = line; + stackSize++; + return true; + } + + public String pop() { + if(stackSize <= 0) return null; + if(stackSize > MAX_STACK_SIZE) stackSize = MAX_STACK_SIZE; + String ret = stack[stackSize - 1]; + stack[stackSize - 1] = ""; + stackSize--; + return ret; + } + + public String peek() { + if(stackSize <= 0) return null; + if(stackSize > MAX_STACK_SIZE) stackSize = MAX_STACK_SIZE; + return stack[stackSize - 1]; } public void turnOff() { @@ -29,6 +76,30 @@ public interface IParse { this.buffer = ""; if(!this.variables.hasNoTags()) this.variables = new NBTTagCompound(); } + + // NBT R/W is now in control of the CTX, meaning additions to the AUTOCAL runtime should be a lot easier + public void readFromNBT(NBTTagCompound nbt, String[] script, IParse parser) { + current = nbt.getInteger("current"); + clockSpeed = nbt.getInteger("clockSpeed"); + buffer = nbt.getString("buffer"); + splitString = nbt.getString("splitString"); + variables = nbt.getCompoundTag("variables"); + + stackSize = nbt.getInteger("stackSize"); + for(int i = 0; i < MAX_STACK_SIZE; i++) stack[i] = nbt.getString("st" + i); + for(int i = 0; i < script.length; i++) parser.generateJumpPoints(this, script[i], i); + } + + public void writeToNBT(NBTTagCompound nbt) { + nbt.setInteger("current", current); + nbt.setInteger("clockSpeed", clockSpeed); + nbt.setString("buffer", buffer); + nbt.setString("splitString", splitString); + nbt.setTag("variables", variables); + + nbt.setInteger("stackSize", stackSize); + for(int i = 0; i < MAX_STACK_SIZE; i++) nbt.setString("st" + i, stack[i]); + } } public static enum EnumStatementReturn { @@ -45,6 +116,8 @@ public interface IParse { /** Skips the instruction, doesn't use up a clock cycle */ SKIP, /** General undefined behavior */ - UNDEFINED + UNDEFINED, + /** Stack ran full */ + STACK_EXCEEDED } } diff --git a/src/main/java/com/hbm/module/ParseMSES1.java b/src/main/java/com/hbm/module/ParseMSES1.java index 453cb1ea3..c79e367f7 100644 --- a/src/main/java/com/hbm/module/ParseMSES1.java +++ b/src/main/java/com/hbm/module/ParseMSES1.java @@ -48,7 +48,7 @@ public class ParseMSES1 implements IParse { // sets the script index to the jump point, if the buffer is the string 'true' if(lower.startsWith("jmpif ")) { if(line.length() <= 6) return EnumStatementReturn.PARAMETER_ERROR; - if(!ctx.buffer.equals("true")) return EnumStatementReturn.OK; + if(!ctx.readBuffer().equals("true")) return EnumStatementReturn.OK; String jmpKey = substitute(ctx, line.substring(6), false); if(ctx.jmp.containsKey(jmpKey)) { ctx.current = ctx.jmp.get(jmpKey); @@ -60,7 +60,7 @@ public class ParseMSES1 implements IParse { // sets the script index to the jump point, if the buffer is the NOT 'true' if(lower.startsWith("jmpnot ")) { if(line.length() <= 7) return EnumStatementReturn.PARAMETER_ERROR; - if(ctx.buffer.equals("true")) return EnumStatementReturn.OK; + if(ctx.readBuffer().equals("true")) return EnumStatementReturn.OK; String jmpKey = substitute(ctx, line.substring(7), false); if(ctx.jmp.containsKey(jmpKey)) { ctx.current = ctx.jmp.get(jmpKey); @@ -82,21 +82,21 @@ public class ParseMSES1 implements IParse { // loads the requested variable into the buffer if(lower.startsWith("load ")) { if(line.length() <= 5) return EnumStatementReturn.PARAMETER_ERROR; - ctx.buffer = ctx.variables.getString(line.substring(5)); + ctx.writeBuffer(ctx.variables.getString(line.substring(5))); return EnumStatementReturn.OK; } // saves the buffer with the specified name if(lower.startsWith("save ")) { - if(line.length() <= 5 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; - ctx.variables.setString(line.substring(5), ctx.buffer); + if(line.length() <= 5 || ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + ctx.variables.setString(line.substring(5), ctx.readBuffer()); return EnumStatementReturn.OK; } // stores the specified value in the buffer if(lower.startsWith("buffer ")) { if(line.length() <= 7) return EnumStatementReturn.PARAMETER_ERROR; - ctx.buffer = line.substring(7); + ctx.writeBuffer(line.substring(7)); return EnumStatementReturn.OK; } @@ -106,7 +106,18 @@ public class ParseMSES1 implements IParse { String statement = substitute(ctx, line.substring(5), true); try { double result = Calculator.evaluateExpression(statement); - ctx.buffer = "" + result; + ctx.writeBuffer("" + result); + } catch(Throwable ex) { return EnumStatementReturn.PARAMETER_ERROR; } + return EnumStatementReturn.OK; + } + + // runs the calculation from the buffer, allows string substitution, saves result to buffer + if(lower.equals("eval")) { + if(ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + String statement = substitute(ctx, ctx.readBuffer(), true); + try { + double result = Calculator.evaluateExpression(statement); + ctx.writeBuffer("" + result); } catch(Throwable ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; } @@ -117,115 +128,115 @@ public class ParseMSES1 implements IParse { String statement = substitute(ctx, line.substring(6), true); try { double result = Calculator.evaluateExpression(statement); - ctx.buffer = "" + (int) Math.round(result); + ctx.writeBuffer("" + (int) Math.round(result)); } catch(Throwable ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; } - // runs the calculation from the buffer, allows string substitution, saves result to buffer + // runs the calculation from the buffer, allows string substitution, saves rounded result to buffer if(lower.equals("evalr")) { - if(ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; - String statement = substitute(ctx, ctx.buffer, true); + if(ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + String statement = substitute(ctx, ctx.readBuffer(), true); try { double result = Calculator.evaluateExpression(statement); - ctx.buffer = "" + (int) Math.round(result); + ctx.writeBuffer("" + (int) Math.round(result)); } catch(Throwable ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; } // rounds the buffer down to the nearest integer if(lower.equals("rounddown") || lower.equals("floor")) { - if(ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + if(ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; try { - double d = Double.parseDouble(ctx.buffer); - ctx.buffer = "" + (int) Math.floor(d); + double d = Double.parseDouble(ctx.readBuffer()); + ctx.writeBuffer("" + (int) Math.floor(d)); } catch(Exception ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; } // rounds the buffer up to the nearest integer if(lower.equals("roundup") || lower.equals("ceil")) { - if(ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + if(ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; try { - double d = Double.parseDouble(ctx.buffer); - ctx.buffer = "" + (int) Math.ceil(d); + double d = Double.parseDouble(ctx.readBuffer()); + ctx.writeBuffer("" + (int) Math.ceil(d)); } catch(Exception ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; } // rounds the buffer to the nearest integer (.5 cutoff rule) if(lower.equals("round") || lower.equals("nearest")) { - if(ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + if(ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; try { - double d = Double.parseDouble(ctx.buffer); - ctx.buffer = "" + (int) Math.round(d); + double d = Double.parseDouble(ctx.readBuffer()); + ctx.writeBuffer("" + (int) Math.round(d)); } catch(Exception ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; } // concatenate, same as buffer but evaluates $var$ substitutions if(lower.startsWith("concat ")) { - if(line.length() <= 7 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + if(line.length() <= 7 || ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; String concat = substitute(ctx, line.substring(7), false); - ctx.buffer = concat; + ctx.writeBuffer(concat); return EnumStatementReturn.OK; } // compares the buffer with a value, allows substitutions if(lower.startsWith("eq ")) { - if(line.length() <= 3 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; - ctx.buffer = ctx.buffer.equals(substitute(ctx, line.substring(3), false)) ? "true" : "false"; + if(line.length() <= 3 || ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + ctx.writeBuffer(ctx.readBuffer().equals(substitute(ctx, line.substring(3), false)) ? "true" : "false"); return EnumStatementReturn.OK; } // greater than buffer if(lower.startsWith("gtb ")) { - if(line.length() <= 3 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + if(line.length() <= 4 || ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; try { - double buffer = Double.parseDouble(ctx.buffer); - double val = Double.parseDouble(line.substring(3)); - ctx.buffer = val > buffer ? "true" : "false"; + double buffer = Double.parseDouble(ctx.readBuffer()); + double val = Double.parseDouble(substitute(ctx, line.substring(4), false)); + ctx.writeBuffer(val > buffer ? "true" : "false"); } catch(Exception ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; } // lower than buffer if(lower.startsWith("ltb ")) { - if(line.length() <= 3 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + if(line.length() <= 4 || ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; try { - double buffer = Double.parseDouble(ctx.buffer); - double val = Double.parseDouble(line.substring(3)); - ctx.buffer = val < buffer ? "true" : "false"; + double buffer = Double.parseDouble(ctx.readBuffer()); + double val = Double.parseDouble(substitute(ctx, line.substring(4), false)); + ctx.writeBuffer(val < buffer ? "true" : "false"); } catch(Exception ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; } // greater than or equal buffer if(lower.startsWith("geb ")) { - if(line.length() <= 3 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + if(line.length() <= 4 || ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; try { - double buffer = Double.parseDouble(ctx.buffer); - double val = Double.parseDouble(line.substring(3)); - ctx.buffer = val >= buffer ? "true" : "false"; + double buffer = Double.parseDouble(ctx.readBuffer()); + double val = Double.parseDouble(substitute(ctx, line.substring(4), false)); + ctx.writeBuffer(val >= buffer ? "true" : "false"); } catch(Exception ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; } // lower than or equal buffer if(lower.startsWith("leb ")) { - if(line.length() <= 3 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + if(line.length() <= 4 || ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; try { - double buffer = Double.parseDouble(ctx.buffer); - double val = Double.parseDouble(line.substring(3)); - ctx.buffer = val <= buffer ? "true" : "false"; + double buffer = Double.parseDouble(ctx.readBuffer()); + double val = Double.parseDouble(substitute(ctx, line.substring(4), false)); + ctx.writeBuffer(val <= buffer ? "true" : "false"); } catch(Exception ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; } // sends an RoR signal using the buffer's contents as the message over the supplied channel if(lower.startsWith("send ")) { - if(line.length() <= 5 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; - RTTYSystem.broadcast(ctx.world, substitute(ctx, line.substring(5), false), ctx.buffer); + if(line.length() <= 5 || ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + RTTYSystem.broadcast(ctx.world, substitute(ctx, line.substring(5), false), ctx.readBuffer()); return EnumStatementReturn.OK; } @@ -233,7 +244,7 @@ public class ParseMSES1 implements IParse { if(lower.startsWith("listen ")) { if(line.length() <= 7) return EnumStatementReturn.PARAMETER_ERROR; RTTYChannel chan = RTTYSystem.listen(ctx.world, substitute(ctx, line.substring(7), false)); - if(chan != null) ctx.buffer = chan.signal + ""; + if(chan != null) ctx.writeBuffer(chan.signal + ""); return EnumStatementReturn.OK; } @@ -253,10 +264,15 @@ public class ParseMSES1 implements IParse { if(!readingVar) { readingVar = true; } else { - if("buffer".equals(var)) { - joined.append(ctx.buffer); + String varName = var.toString(); + if("buffer".equals(varName)) { + String variable = ctx.readBuffer(); + if(forceNumber && variable.isEmpty()) variable = "0"; + joined.append(variable); + var.delete(0, var.length()); + readingVar = false; } else { - String variable = ctx.variables.getString(var.toString()); + String variable = ctx.variables.getString(varName); if(forceNumber && variable.isEmpty()) variable = "0"; joined.append(variable); var.delete(0, var.length()); diff --git a/src/main/java/com/hbm/module/ParseMSES1Ext1.java b/src/main/java/com/hbm/module/ParseMSES1Ext1.java new file mode 100644 index 000000000..fa730889e --- /dev/null +++ b/src/main/java/com/hbm/module/ParseMSES1Ext1.java @@ -0,0 +1,132 @@ +package com.hbm.module; + +import java.util.Locale; +import java.util.regex.Pattern; + +import com.hbm.tileentity.network.RTTYSystem; +import com.hbm.tileentity.network.RTTYSystem.RTTYChannel; + +/** + * MSES1-FEIS: Machine Script, Equestrian Standard - First Extended Instruction Set (v1.1) + * + * Additions compared to v1 Standard: + * * Support for splitter chars, splitting and split count + * * Support for the stack, a secondary buffer that can push, pop and peek + * * Support for getting string length and substring using first and last + * * Support for listening only to recent RoR signals using poll + * + * @author hbm + */ +public class ParseMSES1Ext1 extends ParseMSES1 { + + @Override + public EnumStatementReturn eval(ParseContext ctx, String line) { + String lower = line.toLowerCase(Locale.US); + + // sets the splitter char + if(lower.startsWith("splitter ")) { + if(line.length() <= 9) return EnumStatementReturn.PARAMETER_ERROR; + String splitter = substitute(ctx, line.substring(9), false); + ctx.splitString = splitter; + return EnumStatementReturn.OK; + } + + // grabs a fragment based on index + if(lower.startsWith("split ")) { + if(line.length() <= 6) return EnumStatementReturn.PARAMETER_ERROR; + try { + String statement = substitute(ctx, line.substring(6), true); + int index = Integer.parseInt(statement); + if(index < 1) return EnumStatementReturn.PARAMETER_ERROR; + String[] frags = ctx.readBuffer().split(Pattern.quote(ctx.splitString)); + if(index > frags.length) return EnumStatementReturn.PARAMETER_ERROR; + ctx.writeBuffer(frags[index - 1]); + return EnumStatementReturn.OK; + } catch(Throwable ex) { return EnumStatementReturn.PARAMETER_ERROR; } + } + + // counts the amount of fragments in this string + if(lower.equals("splitcount")) { + if(ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + String[] frags = ctx.readBuffer().split(Pattern.quote(ctx.splitString)); + ctx.writeBuffer(frags.length + ""); + return EnumStatementReturn.OK; + } + + // pushes the buffer to stack + if(lower.equals("push")) { + if(ctx.readBuffer().isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + boolean succ = ctx.push(ctx.readBuffer()); + return succ ? EnumStatementReturn.OK : EnumStatementReturn.STACK_EXCEEDED; + } + + // pushes the supplied value (or variable) to stack + if(lower.startsWith("push ")) { + if(line.length() <= 5) return EnumStatementReturn.PARAMETER_ERROR; + boolean succ = ctx.push(substitute(ctx, line.substring(5), false)); + return succ ? EnumStatementReturn.OK : EnumStatementReturn.STACK_EXCEEDED; + } + + // removes the most recent element from stack and writes it to the buffer + if(lower.equals("pop")) { + String val = ctx.pop(); + if(val == null) return EnumStatementReturn.UNDEFINED; + ctx.writeBuffer(val); + return EnumStatementReturn.OK; + } + + // writes the most recent element to the buffer + if(lower.equals("peek")) { + String val = ctx.peek(); + if(val == null) return EnumStatementReturn.UNDEFINED; + ctx.writeBuffer(val); + return EnumStatementReturn.OK; + } + + // figures out buffer string's length + if(lower.equals("length")) { + ctx.writeBuffer("" + ctx.readBuffer().length()); + return EnumStatementReturn.OK; + } + + // grabs the first x characters from the buffer and writes them back to the buffer + if(lower.startsWith("first ")) { + if(line.length() <= 6) return EnumStatementReturn.PARAMETER_ERROR; + try { + int length = Integer.parseInt(line.substring(6)); + int max = ctx.readBuffer().length(); + if(length > max) length = max; + ctx.writeBuffer(ctx.readBuffer().substring(0, length)); + return EnumStatementReturn.OK; + } catch(Exception x) { return EnumStatementReturn.PARAMETER_ERROR; } + } + + // grabs the last x characters from the buffer and writes them back to the buffer + if(lower.startsWith("last ")) { + if(line.length() <= 5) return EnumStatementReturn.PARAMETER_ERROR; + try { + int length = Integer.parseInt(line.substring(5)); + int max = ctx.readBuffer().length(); + if(length > max) length = max; + ctx.writeBuffer(ctx.readBuffer().substring(max - length, max)); + return EnumStatementReturn.OK; + } catch(Exception x) { return EnumStatementReturn.PARAMETER_ERROR; } + } + + // listens to an RoR signal using the supplied channel name and saves it to the buffer + if(lower.startsWith("poll ")) { + if(line.length() <= 5) return EnumStatementReturn.PARAMETER_ERROR; + RTTYChannel chan = RTTYSystem.listen(ctx.world, substitute(ctx, line.substring(5), false)); + if(chan != null && chan.timeStamp >= ctx.world.getTotalWorldTime() - 1) ctx.writeBuffer(chan.signal + ""); + return EnumStatementReturn.OK; + } + + // writes the total world time to the buffer + if(lower.equals("worldtime")) { + ctx.writeBuffer("" + ctx.world.getTotalWorldTime()); + return EnumStatementReturn.OK; + } + + return super.eval(ctx, line); + } +} diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineBase.java b/src/main/java/com/hbm/module/machine/ModuleMachineBase.java index 311a236fa..d75608786 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachineBase.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineBase.java @@ -25,11 +25,12 @@ public abstract class ModuleMachineBase { public FluidTank[] inputTanks; public FluidTank[] outputTanks; // running vars - public String recipe = "null"; + protected String recipe = "null"; public double progress; // return signals public boolean didProcess = false; public boolean markDirty = false; + public boolean restrictedMode = false; public ModuleMachineBase(int index, IEnergyHandlerMK2 battery, ItemStack[] slots) { this.index = index; @@ -114,6 +115,7 @@ public abstract class ModuleMachineBase { } public void process(GenericRecipe recipe, double speed, double power) { + if(this.restrictedMode) speed *= 0.25; // RoR controlled machines have a speed penalty this.battery.setPower(this.battery.getPower() - (power == 1 ? recipe.power : (long) (recipe.power * power))); double step = Math.min(speed / recipe.duration, 1D); // can't do more than one recipe per tick, might look into that later @@ -167,11 +169,20 @@ public abstract class ModuleMachineBase { this.markDirty = true; } + + public String getRecipeName() { + return this.recipe; + } public GenericRecipe getRecipe() { return (GenericRecipe) getRecipeSet().recipeNameMap.get(this.recipe); } + public void setRecipe(String name, boolean ror) { + this.recipe = name; + this.restrictedMode = ror; + } + public abstract GenericRecipes getRecipeSet(); public void update(double speed, double power, boolean extraCondition, ItemStack blueprint) { @@ -232,21 +243,25 @@ public abstract class ModuleMachineBase { public void serialize(ByteBuf buf) { buf.writeDouble(progress); + buf.writeBoolean(restrictedMode); ByteBufUtils.writeUTF8String(buf, recipe); } public void deserialize(ByteBuf buf) { this.progress = buf.readDouble(); + this.restrictedMode = buf.readBoolean(); this.recipe = ByteBufUtils.readUTF8String(buf); } public void readFromNBT(NBTTagCompound nbt) { this.progress = nbt.getDouble("progress" + index); this.recipe = nbt.getString("recipe" + index); + this.restrictedMode = nbt.getBoolean("restrictedMode"); } public void writeToNBT(NBTTagCompound nbt) { nbt.setDouble("progress" + index, progress); nbt.setString("recipe" + index, recipe); + nbt.setBoolean("restrictedMode", restrictedMode); } } diff --git a/src/main/java/com/hbm/packet/PacketDispatcher.java b/src/main/java/com/hbm/packet/PacketDispatcher.java index 65ef19982..460912a3a 100644 --- a/src/main/java/com/hbm/packet/PacketDispatcher.java +++ b/src/main/java/com/hbm/packet/PacketDispatcher.java @@ -69,6 +69,9 @@ public class PacketDispatcher { wrapper.registerMessage(HeldItemNBTPacket.Handler.class, HeldItemNBTPacket.class, i++, Side.CLIENT); //Syncs muzzle flashes of SEDNA guns for clients from other entities/players wrapper.registerMessage(MuzzleFlashPacket.Handler.class, MuzzleFlashPacket.class, i++, Side.CLIENT); + //Sends custom container-bound payload between client and server, dual-use capable + wrapper.registerMessage(ContainerNBTCommsPacket.Handler.class, ContainerNBTCommsPacket.class, i++, Side.CLIENT); + wrapper.registerMessage(ContainerNBTCommsPacket.Handler.class, ContainerNBTCommsPacket.class, i++, Side.SERVER); } } diff --git a/src/main/java/com/hbm/packet/toclient/ContainerNBTCommsPacket.java b/src/main/java/com/hbm/packet/toclient/ContainerNBTCommsPacket.java new file mode 100644 index 000000000..2b4bbed2a --- /dev/null +++ b/src/main/java/com/hbm/packet/toclient/ContainerNBTCommsPacket.java @@ -0,0 +1,51 @@ +package com.hbm.packet.toclient; + +import com.hbm.inventory.container.ICustomPayloadReceiver; +import com.hbm.main.MainRegistry; +import com.hbm.util.BufferUtil; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; + +public class ContainerNBTCommsPacket implements IMessage { + + int windowId; + NBTTagCompound data; + + public ContainerNBTCommsPacket() { } + + public ContainerNBTCommsPacket(int windowId, NBTTagCompound data) { + this.windowId = windowId; + this.data = data; + } + + @Override + public void fromBytes(ByteBuf buf) { + this.windowId = buf.readInt(); + this.data = BufferUtil.readNBT(buf); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(this.windowId); + BufferUtil.writeNBT(buf, this.data); + } + + public static class Handler implements IMessageHandler { + + @Override + public IMessage onMessage(ContainerNBTCommsPacket m, MessageContext ctx) { + + EntityPlayer player = ctx.side.isClient() ? MainRegistry.proxy.me() : ctx.getServerHandler().playerEntity; + if(player.openContainer instanceof ICustomPayloadReceiver) { + ICustomPayloadReceiver cus = (ICustomPayloadReceiver) player.openContainer; + cus.acceptData(ctx.side, m.windowId, m.data); + } + return null; + } + } +} diff --git a/src/main/java/com/hbm/packet/toserver/AuxButtonPacket.java b/src/main/java/com/hbm/packet/toserver/AuxButtonPacket.java index 7183c202b..00f7d6ea5 100644 --- a/src/main/java/com/hbm/packet/toserver/AuxButtonPacket.java +++ b/src/main/java/com/hbm/packet/toserver/AuxButtonPacket.java @@ -5,7 +5,6 @@ import com.hbm.entity.mob.EntityDuck; import com.hbm.interfaces.NotableComments; import com.hbm.items.weapon.ItemCustomMissilePart.PartSize; import com.hbm.tileentity.TileEntityMachineBase; -import com.hbm.tileentity.TileEntityTickingBase; import com.hbm.tileentity.bomb.TileEntityLaunchTable; import com.hbm.tileentity.machine.TileEntityCoreEmitter; import com.hbm.tileentity.machine.TileEntityCoreStabilizer; @@ -146,10 +145,6 @@ public class AuxButtonPacket implements IMessage { TileEntityMachineBase base = (TileEntityMachineBase)te; base.handleButtonPacket(m.value, m.id); } - if(te instanceof TileEntityTickingBase) { - TileEntityTickingBase base = (TileEntityTickingBase)te; - base.handleButtonPacket(m.value, m.id); - } //why make new packets when you can just abuse and uglify the existing ones? if(te == null && m.value == 999) { diff --git a/src/main/java/com/hbm/potion/HbmPotion.java b/src/main/java/com/hbm/potion/HbmPotion.java index c1189b8b6..0e03d6458 100644 --- a/src/main/java/com/hbm/potion/HbmPotion.java +++ b/src/main/java/com/hbm/potion/HbmPotion.java @@ -176,7 +176,7 @@ public class HbmPotion extends Potion { public static boolean getIsBadEffect(Potion potion) { try { - Field isBadEffect = ReflectionHelper.findField(Potion.class, "isBadEffect", "field_76418_K"); + Field isBadEffect = ReflectionHelper.findField(Potion.class, "isBadEffect", "field_76418_K"); //TODO: use an AT for this boolean ret = isBadEffect.getBoolean(potion); return ret; diff --git a/src/main/java/com/hbm/render/block/ct/CTContext.java b/src/main/java/com/hbm/render/block/ct/CTContext.java index d028d2933..74f3b4108 100644 --- a/src/main/java/com/hbm/render/block/ct/CTContext.java +++ b/src/main/java/com/hbm/render/block/ct/CTContext.java @@ -96,7 +96,7 @@ public class CTContext { int ibl = b | l | cornerType(cons[3], cons[5], cons[6]); int ibr = b | r | cornerType(cons[4], cons[7], cons[6]); - faces[i] = new CTFace(world, x, y, z, (IBlockCT)block, itl, itr, ibl, ibr); + faces[i] = new CTFace(world, x, y, z, i, (IBlockCT)block, itl, itr, ibl, ibr); } } @@ -152,6 +152,7 @@ public class CTContext { int x; int y; int z; + int side; IBlockCT ct; int index_tl; int index_tr; @@ -160,11 +161,12 @@ public class CTContext { public CTFace() { } - public CTFace(IBlockAccess world, int x, int y, int z, IBlockCT block, int i, int j, int k, int l) { + public CTFace(IBlockAccess world, int x, int y, int z, int side, IBlockCT block, int i, int j, int k, int l) { this.world = world; this.x = x; this.y = y; this.z = z; + this.side = side; this.ct = block; this.index_tl = i; this.index_tr = j; @@ -172,9 +174,9 @@ public class CTContext { this.index_br = l; } - public IIcon getTopLeft() { return ct.getFragments(world, x, y, z)[index_tl]; } - public IIcon getTopRight() { return ct.getFragments(world, x, y, z)[index_tr]; } - public IIcon getBottomLeft() { return ct.getFragments(world, x, y, z)[index_bl]; } - public IIcon getBottomRight() { return ct.getFragments(world, x, y, z)[index_br]; } + public IIcon getTopLeft() { return ct.getFragments(world, x, y, z, side)[index_tl]; } + public IIcon getTopRight() { return ct.getFragments(world, x, y, z, side)[index_tr]; } + public IIcon getBottomLeft() { return ct.getFragments(world, x, y, z, side)[index_bl]; } + public IIcon getBottomRight() { return ct.getFragments(world, x, y, z, side)[index_br]; } } } diff --git a/src/main/java/com/hbm/render/block/ct/IBlockCT.java b/src/main/java/com/hbm/render/block/ct/IBlockCT.java index c672784c0..0dfdb717f 100644 --- a/src/main/java/com/hbm/render/block/ct/IBlockCT.java +++ b/src/main/java/com/hbm/render/block/ct/IBlockCT.java @@ -7,7 +7,7 @@ import net.minecraft.world.IBlockAccess; public interface IBlockCT { - public IIcon[] getFragments(IBlockAccess world, int x, int y, int z); + public IIcon[] getFragments(IBlockAccess world, int x, int y, int z, int side); public default boolean canConnect(IBlockAccess world, int x, int y, int z, Block block) { return this == block; diff --git a/src/main/java/com/hbm/render/entity/projectile/RenderBullet.java b/src/main/java/com/hbm/render/entity/projectile/RenderBullet.java index 492b62051..748556702 100644 --- a/src/main/java/com/hbm/render/entity/projectile/RenderBullet.java +++ b/src/main/java/com/hbm/render/entity/projectile/RenderBullet.java @@ -3,17 +3,12 @@ package com.hbm.render.entity.projectile; import java.util.Random; import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL12; -import com.hbm.entity.projectile.EntityBulletBaseNT; -import com.hbm.entity.projectile.IBulletBase; import com.hbm.handler.BulletConfiguration; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; -import com.hbm.render.model.ModelBullet; import com.hbm.render.util.RenderSparks; -import com.hbm.util.Tuple.Pair; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; @@ -22,20 +17,12 @@ import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.Vec3; -@Deprecated +@Deprecated // the entire old bullet system should finally fucking die i hate it public class RenderBullet extends Render { - private ModelBullet bullet; - - public RenderBullet() { - bullet = new ModelBullet(); - } - @Override public void doRender(Entity bullet, double x, double y, double z, float f0, float f1) { @@ -54,21 +41,14 @@ public class RenderBullet extends Render { GL11.glEnable(GL11.GL_CULL_FACE); switch(style) { - case BulletConfiguration.STYLE_NONE: break; case BulletConfiguration.STYLE_NORMAL: renderBullet(trail); break; - case BulletConfiguration.STYLE_PISTOL: renderPistol(trail); break; case BulletConfiguration.STYLE_BOLT: renderDart(trail, bullet.getEntityId()); break; case BulletConfiguration.STYLE_FLECHETTE: renderFlechette(); break; - case BulletConfiguration.STYLE_FOLLY: renderBullet(trail); break; - case BulletConfiguration.STYLE_PELLET: renderBuckshot(); break; case BulletConfiguration.STYLE_ROCKET: renderRocket(trail); break; case BulletConfiguration.STYLE_GRENADE: renderGrenade(trail); break; case BulletConfiguration.STYLE_ORB: renderOrb(trail); break; case BulletConfiguration.STYLE_METEOR: renderMeteor(trail); break; - case BulletConfiguration.STYLE_APDS: renderAPDS(); break; case BulletConfiguration.STYLE_BLADE: renderBlade(); break; - case BulletConfiguration.STYLE_TAU: renderTau(bullet, trail, f1); break; - case BulletConfiguration.STYLE_LEADBURSTER: renderLeadburster(bullet, f1); break; default: renderBullet(trail); break; } @@ -78,48 +58,13 @@ public class RenderBullet extends Render { private void renderBullet(int type) { - if (type == 2) { - bindTexture(new ResourceLocation(RefStrings.MODID + ":textures/models/emplacer.png")); - bullet.renderAll(0.0625F); - } else if (type == 1) { - bindTexture(new ResourceLocation(RefStrings.MODID + ":textures/models/tau.png")); - bullet.renderAll(0.0625F); - } else if (type == 0) { - - GL11.glScaled(0.5, 0.5, 0.5); - GL11.glRotated(90, 0, 0, 1); - GL11.glRotated(90, 0, 1, 0); - - GL11.glShadeModel(GL11.GL_SMOOTH); - bindTexture(ResourceManager.bullet_rifle_tex); - ResourceManager.projectiles.renderPart("BulletRifle"); - GL11.glShadeModel(GL11.GL_FLAT); - } - - } - - private void renderPistol(int type) { - GL11.glScaled(0.5, 0.5, 0.5); GL11.glRotated(90, 0, 0, 1); GL11.glRotated(90, 0, 1, 0); GL11.glShadeModel(GL11.GL_SMOOTH); - bindTexture(ResourceManager.bullet_pistol_tex); - ResourceManager.projectiles.renderPart("BulletPistol"); - GL11.glShadeModel(GL11.GL_FLAT); - - } - - private void renderBuckshot() { - - GL11.glScaled(0.5, 0.5, 0.5); - GL11.glRotated(90, 0, 0, 1); - GL11.glRotated(90, 0, 1, 0); - - GL11.glShadeModel(GL11.GL_SMOOTH); - bindTexture(ResourceManager.buckshot_tex); - ResourceManager.projectiles.renderPart("Buckshot"); + bindTexture(ResourceManager.bullet_rifle_tex); + ResourceManager.projectiles.renderPart("BulletRifle"); GL11.glShadeModel(GL11.GL_FLAT); } @@ -216,18 +161,6 @@ public class RenderBullet extends Render { GL11.glShadeModel(GL11.GL_FLAT); } - private void renderAPDS() { - - GL11.glScaled(2, 2, 2); - GL11.glRotated(90, 0, 0, 1); - GL11.glRotated(90, 0, 1, 0); - - GL11.glShadeModel(GL11.GL_SMOOTH); - bindTexture(ResourceManager.flechette_tex); - ResourceManager.projectiles.renderPart("Flechette"); - GL11.glShadeModel(GL11.GL_FLAT); - } - private void renderDart(int style, int eID) { float red = 1F; @@ -239,15 +172,6 @@ public class RenderBullet extends Render { case BulletConfiguration.BOLT_NIGHTMARE: red = 1F; green = 1F; blue = 0F; break; case BulletConfiguration.BOLT_LACUNAE: red = 0.25F; green = 0F; blue = 0.75F; break; case BulletConfiguration.BOLT_WORM: red = 0F; green = 1F; blue = 0F; break; - case BulletConfiguration.BOLT_GLASS_CYAN: red = 0F; green = 1F; blue = 1F; break; - case BulletConfiguration.BOLT_GLASS_BLUE: red = 0F; green = 0F; blue = 1F; break; - - case BulletConfiguration.BOLT_ZOMG: - Random rand = new Random(eID * eID); - red = rand.nextInt(2) * 0.6F; - green = rand.nextInt(2) * 0.6F; - blue = rand.nextInt(2) * 0.6F; - break; } GL11.glPushMatrix(); @@ -397,134 +321,8 @@ public class RenderBullet extends Render { GL11.glPopMatrix(); } - private void renderTau(Entity bullet, int trail, float interp) { - - Tessellator tessellator = Tessellator.instance; - - float scale = 0.125F; - - double pX = bullet.prevPosX + (bullet.posX - bullet.prevPosX) * interp; - double pY = bullet.prevPosY + (bullet.posY - bullet.prevPosY) * interp; - double pZ = bullet.prevPosZ + (bullet.posZ - bullet.prevPosZ) * interp; - - IBulletBase iface = (IBulletBase) bullet; - - if(iface.prevY() == 0) { - iface.prevX(pX); - iface.prevY(pY); - iface.prevZ(pZ); - } - - double deltaX = iface.prevX() - pX; - double deltaY = iface.prevY() - pY; - double deltaZ = iface.prevZ() - pZ; - - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - double dX = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double)interp; - double dY = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double)interp; - double dZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double)interp; - - GL11.glPopMatrix(); - GL11.glPushMatrix(); - GL11.glTranslated(pX - dX, pY - dY, pZ - dZ); - - float r = 1F; - float g = 0.5F; - float b = 0F; - - if(trail == 1) { - r = 1; - g = 1; - b = 1; - } - - for(Pair pair : iface.nodes()) { - Vec3 pos = pair.getKey(); - - double mult = 1D; - pos.xCoord += deltaX * mult; - pos.yCoord += deltaY * mult; - pos.zCoord += deltaZ * mult; - } - - tessellator.startDrawingQuads(); - tessellator.setNormal(0F, 1F, 0F); - - for(int i = 0; i < iface.nodes().size() - 1; i++) { - final Pair node = iface.nodes().get(i), past = iface.nodes().get(i + 1); - final Vec3 nodeLoc = node.getKey(), pastLoc = past.getKey(); - float nodeAlpha = node.getValue().floatValue(); - float pastAlpha = past.getValue().floatValue(); - - double timeAlpha = Math.max(2D - bullet.ticksExisted * 0.2, 0D); - nodeAlpha *= timeAlpha; - pastAlpha *= timeAlpha; - float outerAlpha = 0.25F; - - if(nodeAlpha == 0 && pastAlpha == 0) { - break; - } - - tessellator.setNormal(0F, 1F, 0F); - tessellator.setColorRGBA_F(r, g, b, nodeAlpha); - tessellator.addVertex(nodeLoc.xCoord, nodeLoc.yCoord, nodeLoc.zCoord); - tessellator.setColorRGBA_F(r, g, b, nodeAlpha * outerAlpha); - tessellator.addVertex(nodeLoc.xCoord, nodeLoc.yCoord + scale, nodeLoc.zCoord); - tessellator.setColorRGBA_F(r, g, b, pastAlpha * outerAlpha); - tessellator.addVertex(pastLoc.xCoord, pastLoc.yCoord + scale, pastLoc.zCoord); - tessellator.setColorRGBA_F(r, g, b, pastAlpha); - tessellator.addVertex(pastLoc.xCoord, pastLoc.yCoord, pastLoc.zCoord); - - tessellator.setColorRGBA_F(r, g, b, nodeAlpha); - tessellator.addVertex(nodeLoc.xCoord, nodeLoc.yCoord, nodeLoc.zCoord); - tessellator.setColorRGBA_F(r, g, b, nodeAlpha * outerAlpha); - tessellator.addVertex(nodeLoc.xCoord, nodeLoc.yCoord - scale, nodeLoc.zCoord); - tessellator.setColorRGBA_F(r, g, b, pastAlpha * outerAlpha); - tessellator.addVertex(pastLoc.xCoord, pastLoc.yCoord - scale, pastLoc.zCoord); - tessellator.setColorRGBA_F(r, g, b, pastAlpha); - tessellator.addVertex(pastLoc.xCoord, pastLoc.yCoord, pastLoc.zCoord); - } - - GL11.glColor3f(1F, 1F, 1F); - GL11.glDepthMask(true); - GL11.glAlphaFunc(GL11.GL_GREATER, 0F); - GL11.glEnable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_TEXTURE_2D); - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glShadeModel(GL11.GL_SMOOTH); - tessellator.draw(); - GL11.glShadeModel(GL11.GL_FLAT); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_TEXTURE_2D); - GL11.glDisable(GL11.GL_BLEND); - GL11.glAlphaFunc(GL11.GL_GEQUAL, 0.1F); - - iface.prevX(pX); - iface.prevY(pY); - iface.prevZ(pZ); - } - - private void renderLeadburster(Entity bullet, float interp) { - EntityBulletBaseNT bulletnt = (EntityBulletBaseNT) bullet; - GL11.glPushMatrix(); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL12.GL_RESCALE_NORMAL); - GL11.glRotated(90, 0, 0, -1); - double scale = 0.05; - GL11.glScaled(scale, scale, scale); - bindTexture(ResourceManager.leadburster_tex); - ResourceManager.leadburster.renderPart("Based"); - if(bulletnt.getStuckIn() != -1) { - GL11.glRotated((bullet.ticksExisted + interp) * -18, 0, 1, 0); - } - ResourceManager.leadburster.renderPart("Based.001"); - ResourceManager.leadburster.renderPart("Backlight"); - GL11.glPopMatrix(); - } - @Override protected ResourceLocation getEntityTexture(Entity p_110775_1_) { return new ResourceLocation(RefStrings.MODID + ":textures/models/bullet.png"); } - } diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java index 9160ac8cf..578119be5 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java +++ b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java @@ -43,7 +43,8 @@ public class ItemRenderLibrary { renderers.put(Item.getItemFromBlock(ModBlocks.machine_cyclotron), new ItemRenderBase() { public void renderInventory() { - GL11.glScaled(2.25, 2.25, 2.25); + GL11.glTranslated(0, -1, 0); + GL11.glScaled(2.75, 2.75, 2.75); } public void renderCommon() { GL11.glShadeModel(GL11.GL_SMOOTH); diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibraryDoors.java b/src/main/java/com/hbm/render/item/ItemRenderLibraryDoors.java index cbb097cd7..e4fb22b3f 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderLibraryDoors.java +++ b/src/main/java/com/hbm/render/item/ItemRenderLibraryDoors.java @@ -33,7 +33,7 @@ public class ItemRenderLibraryDoors { ResourceLocation doorTex = ResourceManager.pheo_vault_door_3; ResourceLocation labelTex = ResourceManager.pheo_label_101; - + switch(index) { case 1: labelTex = ResourceManager.pheo_label_87; break; case 2: labelTex = ResourceManager.pheo_label_106; break; @@ -42,14 +42,14 @@ public class ItemRenderLibraryDoors { case 5: doorTex = ResourceManager.pheo_vault_door_s; labelTex = ResourceManager.pheo_label_2; break; case 6: doorTex = ResourceManager.pheo_vault_door_s; labelTex = ResourceManager.pheo_label_99; break; } - + bindTexture(doorTex); ResourceManager.pheo_vault_door.renderPart("Door"); bindTexture(labelTex); ResourceManager.pheo_vault_door.renderPart("Label"); } }); - + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.secure_access_door), new ItemRenderBase(){ public void renderInventory() { GL11.glTranslated(0, -3.75, 0); @@ -63,7 +63,7 @@ public class ItemRenderLibraryDoors { GL11.glShadeModel(GL11.GL_FLAT); } }); - + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.fire_door), new ItemRenderBase(){ public void renderInventory() { GL11.glTranslated(0, -3, 0); @@ -77,7 +77,7 @@ public class ItemRenderLibraryDoors { GL11.glShadeModel(GL11.GL_FLAT); } }); - + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.sliding_blast_door), new ItemRenderBase(){ public void renderInventory() { GL11.glTranslated(0, -2.75, 0); @@ -104,7 +104,7 @@ public class ItemRenderLibraryDoors { GL11.glShadeModel(GL11.GL_FLAT); } }); - + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.water_door), new ItemRenderBase(){ public void renderInventory() { GL11.glTranslated(0, -4, 0); @@ -118,7 +118,7 @@ public class ItemRenderLibraryDoors { GL11.glShadeModel(GL11.GL_FLAT); } }); - + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.silo_hatch), new ItemRenderBase(){ public void renderInventory() { GL11.glTranslated(0, -2, 0); @@ -137,7 +137,7 @@ public class ItemRenderLibraryDoors { GL11.glShadeModel(GL11.GL_FLAT); } }); - + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.silo_hatch_large), new ItemRenderBase(){ public void renderInventory() { GL11.glTranslated(0, -2, 0); @@ -157,7 +157,7 @@ public class ItemRenderLibraryDoors { GL11.glShadeModel(GL11.GL_FLAT); } }); - + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.qe_containment), new ItemRenderBase(){ public void renderInventory() { GL11.glTranslated(0, -3.5, 0); @@ -170,7 +170,7 @@ public class ItemRenderLibraryDoors { GL11.glShadeModel(GL11.GL_FLAT); } }); - + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.qe_sliding_door), new ItemRenderBase(){ public void renderInventory() { GL11.glTranslated(0, -3, 0); @@ -221,6 +221,22 @@ public class ItemRenderLibraryDoors { bindTexture(ResourceManager.blast_door_slider_tex); ResourceManager.blast_door_slider.renderAll(); bindTexture(ResourceManager.blast_door_block_tex); ResourceManager.blast_door_block.renderAll(); }}); + ItemRenderLibrary.renderers.put(Item.getItemFromBlock(ModBlocks.cargo_door), new ItemRenderBase(){ + public void renderInventory() { + GL11.glTranslated(0, -4, 0); + GL11.glScaled(4, 4, 4); + } + public void renderCommon() { + bindTexture(ResourceManager.pheo_cargo_door_tex); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glScaled(0.9, 0.9, 0.9); + GL11.glTranslated(0, 0.3, 0); + ResourceManager.pheo_cargo_door.renderPart("Frame"); + ResourceManager.pheo_cargo_door.renderPart("DoorTop"); + ResourceManager.pheo_cargo_door.renderPart("DoorBot"); + GL11.glShadeModel(GL11.GL_FLAT); + } + }); } private static void bindTexture(ResourceLocation res) { diff --git a/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java b/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java index 06cdbf265..1bb80d9f0 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java +++ b/src/main/java/com/hbm/render/tileentity/RenderAssemblyFactory.java @@ -4,7 +4,6 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; -import com.hbm.inventory.recipes.AssemblyMachineRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; @@ -162,7 +161,7 @@ public class RenderAssemblyFactory extends TileEntitySpecialRenderer implements GL11.glRotated(90, 0, 1, 0); GL11.glTranslated(0, 1.0625, 0); - GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assemfac.assemblerModule[i].recipe); + GenericRecipe recipe = assemfac.assemblerModule[i].getRecipe(); if(recipe != null) { ItemStack stack = recipe.getIcon(); stack.stackSize = 1; diff --git a/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java b/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java index 17eba939c..9b7407644 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java +++ b/src/main/java/com/hbm/render/tileentity/RenderAssemblyMachine.java @@ -4,7 +4,6 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; -import com.hbm.inventory.recipes.AssemblyMachineRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; @@ -99,7 +98,7 @@ public class RenderAssemblyMachine extends TileEntitySpecialRenderer implements GL11.glShadeModel(GL11.GL_FLAT); - GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assembler.assemblerModule.recipe); + GenericRecipe recipe = assembler.assemblerModule.getRecipe(); if(recipe != null && MainRegistry.proxy.me().getDistanceSq(tileEntity.xCoord + 0.5, tileEntity.yCoord + 1, tileEntity.zCoord + 0.5) < 35 * 35) { GL11.glRotated(90, 0, 1, 0); diff --git a/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java b/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java index bd7657a69..4581d0475 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java +++ b/src/main/java/com/hbm/render/tileentity/RenderChemicalPlant.java @@ -7,7 +7,6 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.FluidStack; -import com.hbm.inventory.recipes.ChemicalPlantRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.main.ResourceManager; import com.hbm.render.item.ItemRenderBase; @@ -39,7 +38,7 @@ public class RenderChemicalPlant extends TileEntitySpecialRenderer implements II TileEntityMachineChemicalPlant chemplant = (TileEntityMachineChemicalPlant) tileEntity; float anim = chemplant.prevAnim + (chemplant.anim - chemplant.prevAnim) * interp; - GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplant.chemplantModule.recipe); + GenericRecipe recipe = chemplant.chemplantModule.getRecipe(); bindTexture(ResourceManager.chemical_plant_tex); ResourceManager.chemical_plant.renderPart("Base"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderEPress.java b/src/main/java/com/hbm/render/tileentity/RenderEPress.java index cf8915ef8..dc8f818b0 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderEPress.java +++ b/src/main/java/com/hbm/render/tileentity/RenderEPress.java @@ -80,14 +80,10 @@ public class RenderEPress extends TileEntitySpecialRenderer { GL11.glRotatef(180, 0F, 1F, 0F); switch(tileentity.getBlockMetadata() - BlockDummyable.offset) { - case 2: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 4: - GL11.glRotatef(0, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(180, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(180, 0F, 1F, 0F); break; } GL11.glRotatef(90, 0F, 1F, 0F); diff --git a/src/main/java/com/hbm/render/tileentity/RenderFusionPlasmaForge.java b/src/main/java/com/hbm/render/tileentity/RenderFusionPlasmaForge.java index 53cceadc8..9f50fc801 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderFusionPlasmaForge.java +++ b/src/main/java/com/hbm/render/tileentity/RenderFusionPlasmaForge.java @@ -5,7 +5,6 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.fluid.Fluids; -import com.hbm.inventory.recipes.PlasmaForgeRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; @@ -62,7 +61,7 @@ public class RenderFusionPlasmaForge extends TileEntitySpecialRenderer implement bindTexture(ResourceManager.fusion_plasma_forge_tex); ResourceManager.fusion_plasma_forge.renderPart("Body"); - GenericRecipe recipe = PlasmaForgeRecipes.INSTANCE.recipeNameMap.get(forge.plasmaModule.recipe); + GenericRecipe recipe = forge.plasmaModule.getRecipe(); renderPlasma(forge); renderItem(forge, recipe, interp); diff --git a/src/main/java/com/hbm/render/tileentity/RenderLandmine.java b/src/main/java/com/hbm/render/tileentity/RenderLandmine.java index d2889e9e7..e84d97175 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderLandmine.java +++ b/src/main/java/com/hbm/render/tileentity/RenderLandmine.java @@ -51,8 +51,10 @@ public class RenderLandmine extends TileEntitySpecialRenderer { } if(block == ModBlocks.mine_fat) { GL11.glScaled(0.25D, 0.25D, 0.25D); + GL11.glShadeModel(GL11.GL_SMOOTH); bindTexture(ResourceManager.mine_fat_tex); ResourceManager.mine_fat.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); } if(block == ModBlocks.mine_naval) { GL11.glScaled(1D, 1D, 1D); diff --git a/src/main/java/com/hbm/render/tileentity/RenderPileControl.java b/src/main/java/com/hbm/render/tileentity/RenderPileControl.java new file mode 100644 index 000000000..f3c248a22 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderPileControl.java @@ -0,0 +1,38 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; +import com.hbm.tileentity.machine.pile.TileEntityPileControl; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +public class RenderPileControl extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glShadeModel(GL11.GL_SMOOTH); + + switch(te.getBlockMetadata() % 4) { + case 0: GL11.glRotated(90, 0, 1, 0); break; + case 1: GL11.glRotated(270, 0, 1, 0); break; + case 2: GL11.glRotated(180, 0, 1, 0); break; + case 3: GL11.glRotated(0, 0, 1, 0); break; + } + + TileEntityPileControl control = (TileEntityPileControl) te; + double level = control.lastLevel + (control.level - control.lastLevel) * interp; + + bindTexture(ResourceManager.pile_control_tex); + ResourceManager.pile_control.renderPart("Base"); + GL11.glTranslated(0, level * 0.75, 0); + ResourceManager.pile_control.renderPart("Rod"); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderPileLoader.java b/src/main/java/com/hbm/render/tileentity/RenderPileLoader.java new file mode 100644 index 000000000..35f557bb5 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderPileLoader.java @@ -0,0 +1,84 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.machine.pile.BlockPileDevice; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.pile.TileEntityPileLoader; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderPileLoader extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glShadeModel(GL11.GL_SMOOTH); + + switch(te.getBlockMetadata() % 4) { + case 0: GL11.glRotated(90, 0, 1, 0); break; + case 1: GL11.glRotated(270, 0, 1, 0); break; + case 2: GL11.glRotated(180, 0, 1, 0); break; + case 3: GL11.glRotated(0, 0, 1, 0); break; + } + + TileEntityPileLoader loader = (TileEntityPileLoader) te; + double position = loader.lastLevel + (loader.level - loader.lastLevel) * interp; + + bindTexture(ResourceManager.pile_loader_tex); + ResourceManager.pile_loader.renderPart("Loader"); + GL11.glPushMatrix(); { + GL11.glTranslated(-0.1875, 0.5, 0); + GL11.glRotated(position * 90, 0, 0, 1); + GL11.glTranslated(0.1875, -0.5, 0); + ResourceManager.pile_loader.renderPart("Lever"); + } GL11.glPopMatrix(); + + GL11.glTranslated(position * -0.5, 0, 0); + ResourceManager.pile_loader.renderPart("Slider"); + if(loader.syncStack != null) ResourceManager.pile_loader.renderPart("Rod"); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.pile_device); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -3.5, 0); + double scale = 5; + GL11.glScaled(scale, scale, scale); + } + public void renderCommonWithStack(ItemStack item) { + GL11.glScaled(2, 2, 2); + GL11.glShadeModel(GL11.GL_SMOOTH); + if(item.getItemDamage() == BlockPileDevice.ITEM_META_LOADER) { + bindTexture(ResourceManager.pile_loader_tex); + ResourceManager.pile_loader.renderAll(); + } + if(item.getItemDamage() == BlockPileDevice.ITEM_META_VENT) { + bindTexture(ResourceManager.pile_vent_tex); + ResourceManager.pile_vent.renderAll(); + } + if(item.getItemDamage() == BlockPileDevice.ITEM_META_CONTROL) { + bindTexture(ResourceManager.pile_control_tex); + ResourceManager.pile_control.renderAll(); + } + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderPileVent.java b/src/main/java/com/hbm/render/tileentity/RenderPileVent.java new file mode 100644 index 000000000..88fa636c1 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderPileVent.java @@ -0,0 +1,38 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; +import com.hbm.tileentity.machine.pile.TileEntityPileVent; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +public class RenderPileVent extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glShadeModel(GL11.GL_SMOOTH); + + switch(te.getBlockMetadata() % 4) { + case 0: GL11.glRotated(90, 0, 1, 0); break; + case 1: GL11.glRotated(270, 0, 1, 0); break; + case 2: GL11.glRotated(180, 0, 1, 0); break; + case 3: GL11.glRotated(0, 0, 1, 0); break; + } + + TileEntityPileVent vent = (TileEntityPileVent) te; + float rot = vent.lastFan + (vent.fan - vent.lastFan) * interp; + + bindTexture(ResourceManager.pile_vent_tex); + ResourceManager.pile_vent.renderPart("Pipe"); + GL11.glRotated(rot, 0, 1, 0); + ResourceManager.pile_vent.renderPart("Fan"); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderPrecAss.java b/src/main/java/com/hbm/render/tileentity/RenderPrecAss.java index de84b54a4..e7a6cc2b3 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPrecAss.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPrecAss.java @@ -4,7 +4,6 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; -import com.hbm.inventory.recipes.PrecAssRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; @@ -71,7 +70,7 @@ public class RenderPrecAss extends TileEntitySpecialRenderer implements IItemRen GL11.glShadeModel(GL11.GL_FLAT); - GenericRecipe recipe = PrecAssRecipes.INSTANCE.recipeNameMap.get(assembler.assemblerModule.recipe); + GenericRecipe recipe = assembler.assemblerModule.getRecipe(); if(recipe != null && MainRegistry.proxy.me().getDistanceSq(tileEntity.xCoord + 0.5, tileEntity.yCoord + 1, tileEntity.zCoord + 0.5) < 35 * 35) { GL11.glRotated(90, 0, 1, 0); diff --git a/src/main/java/com/hbm/render/tileentity/RenderRBMKGauge.java b/src/main/java/com/hbm/render/tileentity/RenderRBMKGauge.java index 0b8052969..55503d662 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderRBMKGauge.java +++ b/src/main/java/com/hbm/render/tileentity/RenderRBMKGauge.java @@ -74,8 +74,8 @@ public class RenderRBMKGauge extends TileEntitySpecialRenderer { int height = font.FONT_HEIGHT; double lineScale = 0.0025D; - String lineLower = unit.min <= 10_000 ? unit.min + "" : BobMathUtil.getShortNumber(unit.min); - String lineUpper = unit.max <= 10_000 ? unit.max + "" : BobMathUtil.getShortNumber(unit.max); + String lineLower = Math.abs(unit.min) <= 10_000 ? unit.min + "" : BobMathUtil.getShortNumber(unit.min); + String lineUpper = Math.abs(unit.max) <= 10_000 ? unit.max + "" : BobMathUtil.getShortNumber(unit.max); for(int j = 0; j < 2; j++) { GL11.glPushMatrix(); diff --git a/src/main/java/com/hbm/render/tileentity/RenderRTG.java b/src/main/java/com/hbm/render/tileentity/RenderRTG.java index 71198573c..d9d0c0de1 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderRTG.java +++ b/src/main/java/com/hbm/render/tileentity/RenderRTG.java @@ -2,7 +2,6 @@ package com.hbm.render.tileentity; import org.lwjgl.opengl.GL11; -import com.hbm.blocks.ModBlocks; import com.hbm.lib.Library; import com.hbm.main.ResourceManager; @@ -13,48 +12,43 @@ public class RenderRTG extends TileEntitySpecialRenderer { @Override public void renderTileEntityAt(TileEntity te, double x, double y, double z, float inter) { - - GL11.glPushMatrix(); - GL11.glTranslated(x + 0.5D, y, z + 0.5D); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); + + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); GL11.glRotatef(180, 0F, 1F, 0F); - - if(te.getBlockType() == ModBlocks.machine_rtg_grey) - bindTexture(ResourceManager.rtg_tex); - else if(te.getBlockType() == ModBlocks.machine_powerrtg) - bindTexture(ResourceManager.rtg_polonium_tex); - else - bindTexture(ResourceManager.rtg_cell_tex); - - ResourceManager.rtg.renderPart("Gen"); - - int ix = te.xCoord; - int iy = te.yCoord; - int iz = te.zCoord; - if(Library.canConnect(te.getWorldObj(), ix + 1, iy, iz, Library.POS_X)) - ResourceManager.rtg.renderPart("Connector"); - - if(Library.canConnect(te.getWorldObj(), ix - 1, iy, iz, Library.NEG_X)) { - GL11.glRotatef(180, 0F, 1F, 0F); - ResourceManager.rtg.renderPart("Connector"); - GL11.glRotatef(-180, 0F, 1F, 0F); - } - - if(Library.canConnect(te.getWorldObj(), ix, iy, iz - 1, Library.NEG_Z)) { - GL11.glRotatef(90, 0F, 1F, 0F); - ResourceManager.rtg.renderPart("Connector"); - GL11.glRotatef(-90, 0F, 1F, 0F); - } - - if(Library.canConnect(te.getWorldObj(), ix, iy, iz + 1, Library.POS_Z)) { - GL11.glRotatef(-90, 0F, 1F, 0F); - ResourceManager.rtg.renderPart("Connector"); - GL11.glRotatef(90, 0F, 1F, 0F); - } + bindTexture(ResourceManager.rtg_tex); - GL11.glPopMatrix(); + ResourceManager.rtg.renderPart("Gen"); + + int ix = te.xCoord; + int iy = te.yCoord; + int iz = te.zCoord; + + if(Library.canConnect(te.getWorldObj(), ix + 1, iy, iz, Library.POS_X)) + ResourceManager.rtg.renderPart("Connector"); + + if(Library.canConnect(te.getWorldObj(), ix - 1, iy, iz, Library.NEG_X)) { + GL11.glRotatef(180, 0F, 1F, 0F); + ResourceManager.rtg.renderPart("Connector"); + GL11.glRotatef(-180, 0F, 1F, 0F); + } + + if(Library.canConnect(te.getWorldObj(), ix, iy, iz - 1, Library.NEG_Z)) { + GL11.glRotatef(90, 0F, 1F, 0F); + ResourceManager.rtg.renderPart("Connector"); + GL11.glRotatef(-90, 0F, 1F, 0F); + } + + if(Library.canConnect(te.getWorldObj(), ix, iy, iz + 1, Library.POS_Z)) { + GL11.glRotatef(-90, 0F, 1F, 0F); + ResourceManager.rtg.renderPart("Connector"); + GL11.glRotatef(90, 0F, 1F, 0F); + } + + GL11.glPopMatrix(); } } diff --git a/src/main/java/com/hbm/render/tileentity/door/RenderCargoDoor.java b/src/main/java/com/hbm/render/tileentity/door/RenderCargoDoor.java new file mode 100644 index 000000000..dfc25ec6e --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/door/RenderCargoDoor.java @@ -0,0 +1,55 @@ +package com.hbm.render.tileentity.door; + +import java.nio.DoubleBuffer; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; +import com.hbm.tileentity.DoorDecl; +import com.hbm.tileentity.TileEntityDoorGeneric; + +import net.minecraft.client.Minecraft; +import net.minecraft.util.MathHelper; + +public class RenderCargoDoor implements IRenderDoors { + + public static final RenderCargoDoor INSTANCE = new RenderCargoDoor(); + + @Override + public void render(TileEntityDoorGeneric door, DoubleBuffer buf) { + + Minecraft.getMinecraft().getTextureManager().bindTexture(DoorDecl.CARGO_DOOR.getSkinFromIndex(door.getSkinIndex())); + + double botMove = 0; + double topMove = 0; + + if (door.state == door.STATE_OPEN) { + botMove = 2.0; + topMove = 1.0; + } + + if (door.currentAnimation != null) { + double botProgress = MathHelper.clamp_double(IRenderDoors.getRelevantTransformation("BOT", door.currentAnimation)[1], 0, 1); + double topProgress = MathHelper.clamp_double(IRenderDoors.getRelevantTransformation("TOP", door.currentAnimation)[1], 0, 1); + botMove = botProgress * 2.0; + topMove = topProgress * 1.0; + } + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0, 0); + + ResourceManager.pheo_cargo_door.renderPart("Frame"); + + GL11.glPushMatrix(); + GL11.glTranslated(0, topMove, 0); + ResourceManager.pheo_cargo_door.renderPart("DoorTop"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, botMove, 0); + ResourceManager.pheo_cargo_door.renderPart("DoorBot"); + GL11.glPopMatrix(); + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/tileentity/DoorDecl.java b/src/main/java/com/hbm/tileentity/DoorDecl.java index 606fa5e54..f56176c2a 100644 --- a/src/main/java/com/hbm/tileentity/DoorDecl.java +++ b/src/main/java/com/hbm/tileentity/DoorDecl.java @@ -641,6 +641,56 @@ public abstract class DoorDecl { }; + public static final DoorDecl CARGO_DOOR = new DoorDecl() { + + @Override public String getCloseSoundLoop() { return "hbm:door.garage_move"; } + @Override public String getCloseSoundEnd() { return "hbm:door.garage_stop"; } + @Override public String getOpenSoundEnd() { return "hbm:door.garage_stop"; } + @Override public String getOpenSoundLoop() { return "hbm:door.garage_move"; } + @Override public float getSoundVolume() { return 2; } + + @Override + public IRenderDoors getSEDNARenderer() { + return RenderCargoDoor.INSTANCE; + } + + @Override + public BusAnimation getBusAnimation(byte state, byte skinIndex) { + int half = this.timeToOpen() * 25; + if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation() + .addBus("BOT", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, half * 2)) + .addBus("TOP", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 0, 0, half).addPos(0, 1, 0, half)); + if(state == TileEntityDoorGeneric.STATE_CLOSING) return new BusAnimation() + .addBus("BOT", new BusAnimationSequence().setPos(0, 1, 0).addPos(0, 0, 0, half * 2)) + .addBus("TOP", new BusAnimationSequence().setPos(0, 1, 0).addPos(0, 1, 0, half).addPos(0, 0, 0, half)); + return null; + } + + @Override public int timeToOpen() { return 60; } + + @Override public int[][] getDoorOpenRanges() { return new int[][] { { -1, -1, 0, 3, 3, 1 } }; } + @Override public int[] getDimensions() { return new int[] { 2, 0, 0, 0, 1, 1 }; } + + @Override + public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { + if(!open) return AxisAlignedBB.getBoundingBox(0, 0, 0.375, 1, 1, 0.625); + if(y > 1) return AxisAlignedBB.getBoundingBox(0, 0.25, 0.375, 1, 1, 0.625); + else if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 0.375, 1, forCollision ? 0 : 0.125, 0.625); + return super.getBlockBound(x, y, z, open, forCollision); + } + + public ResourceLocation[] skins; + + @Override + public ResourceLocation[] getSEDNASkins() { + if(skins == null) skins = new ResourceLocation[] { + ResourceManager.pheo_cargo_door_tex + }; + return skins; + } + + @Override public int getSkinCount() { return 1; } + }; // TODO: bash drillgon to death for making this method like that, and for fucking up the documentation, like genuinely what the fuck is this /** Format: x, y, z, tangent amount 1 (how long the door would be if it moved up), tangent amount 2 (door places blocks in this direction), axis (0-x, diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index b007be844..5801d7bd4 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -15,11 +15,6 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { void nextMode(int i); - /* - default ModulePatternMatcher getMatcher(){ - - }*/ - @Override default void receiveControl(NBTTagCompound data) { if(data.hasKey("slot")) { @@ -44,11 +39,11 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { } /** * Used for the copy tool - * @return The start and end (start inclusive, end exclusive) of the filter slots of the TE + * @return The start and end (start inclusive, end exclusive) of the filter slots of the TE // seven, what the fuck? */ int[] getFilterSlots(); - @Override + @Override default NBTTagCompound getSettings(World world, int x, int y, int z) { IInventory inv = (IInventory) this; NBTTagCompound nbt = new NBTTagCompound(); diff --git a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java index 0e828407d..ffda38e6b 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java +++ b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java @@ -47,6 +47,7 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase { @Override public void updateEntity() { + if(this.getBlockMetadata() < 12) return; if(getDoorType().onDoorUpdate() != null) { getDoorType().onDoorUpdate().accept(this); @@ -242,18 +243,18 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase { } if(doorType.getOpenSoundLoop() != null) { - audio = MainRegistry.proxy.getLoopedSound(doorType.getOpenSoundLoop(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); + audio = MainRegistry.proxy.getLoopedSound(doorType.getOpenSoundLoop(), xCoord, yCoord, zCoord, getVolume(), 10F, 1F); audio.startSound(); } if(doorType.getOpenSoundStart() != null) { - worldObj.playSound(xCoord, yCoord, zCoord, doorType.getOpenSoundStart(), doorType.getSoundVolume(), 1F, false); + worldObj.playSound(xCoord, yCoord, zCoord, doorType.getOpenSoundStart(), getVolume(), 1F, false); } if(doorType.getSoundLoop2() != null) { if(audio2 != null) audio2.stopSound(); - audio2 = MainRegistry.proxy.getLoopedSound(doorType.getSoundLoop2(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); + audio2 = MainRegistry.proxy.getLoopedSound(doorType.getSoundLoop2(), xCoord, yCoord, zCoord, getVolume(), 10F, 1F); audio2.startSound(); } } @@ -264,18 +265,18 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase { } if(doorType.getCloseSoundLoop() != null) { - audio = MainRegistry.proxy.getLoopedSound(doorType.getCloseSoundLoop(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); + audio = MainRegistry.proxy.getLoopedSound(doorType.getCloseSoundLoop(), xCoord, yCoord, zCoord, getVolume(), 10F, 1F); audio.startSound(); } if(doorType.getCloseSoundStart() != null) { - worldObj.playSound(xCoord, yCoord, zCoord, doorType.getCloseSoundStart(), doorType.getSoundVolume(), 1F, false); + worldObj.playSound(xCoord, yCoord, zCoord, doorType.getCloseSoundStart(), getVolume(), 1F, false); } if(doorType.getSoundLoop2() != null) { if(audio2 != null) audio2.stopSound(); - audio2 = MainRegistry.proxy.getLoopedSound(doorType.getSoundLoop2(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); + audio2 = MainRegistry.proxy.getLoopedSound(doorType.getSoundLoop2(), xCoord, yCoord, zCoord, getVolume(), 10F, 1F); audio2.startSound(); } } @@ -293,13 +294,13 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase { if(this.state == STATE_OPENING && state == STATE_OPEN) { // Door finished transitioning to open if(doorType.getOpenSoundEnd() != null) { - worldObj.playSound(xCoord, yCoord, zCoord, doorType.getOpenSoundEnd(), doorType.getSoundVolume(), 1F, false); + worldObj.playSound(xCoord, yCoord, zCoord, doorType.getOpenSoundEnd(), getVolume(), 1F, false); } } if(this.state == STATE_CLOSING && state == STATE_CLOSED) { // Door finished transitioning to closed if(doorType.getCloseSoundEnd() != null) { - worldObj.playSound(xCoord, yCoord, zCoord, doorType.getCloseSoundEnd(), doorType.getSoundVolume(), 1F, false); + worldObj.playSound(xCoord, yCoord, zCoord, doorType.getCloseSoundEnd(), getVolume(), 1F, false); } } @@ -312,6 +313,10 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase { } } } + + public float getVolume() { + return getVolume(doorType.getSoundVolume()); + } public int getSkinIndex() { return skinIndex; diff --git a/src/main/java/com/hbm/tileentity/TileEntityTickingBase.java b/src/main/java/com/hbm/tileentity/TileEntityTickingBase.java index 0381ef795..dd082bf11 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityTickingBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityTickingBase.java @@ -1,11 +1,12 @@ package com.hbm.tileentity; +import com.hbm.interfaces.NotableComments; + +@NotableComments public abstract class TileEntityTickingBase extends TileEntityLoadedBase { public TileEntityTickingBase() { } - public abstract String getInventoryName(); - //abstracting this method forces child classes to implement it //so i don't have to remember the fucking method name //was it update? onUpdate? updateTile? did it have any args? @@ -13,7 +14,4 @@ public abstract class TileEntityTickingBase extends TileEntityLoadedBase { @Override public abstract void updateEntity(); - @Deprecated - public void handleButtonPacket(int value, int meta) { } - } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index f0b1c29e8..ad13bb825 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -57,9 +57,7 @@ import com.hbm.tileentity.machine.pile.*; import com.hbm.tileentity.machine.rbmk.*; import com.hbm.tileentity.machine.storage.*; import com.hbm.tileentity.network.*; -import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageAccess; -import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageClutter; -import com.hbm.tileentity.network.pneumatic.TileEntityPneumoTube; +import com.hbm.tileentity.network.pneumatic.*; import com.hbm.tileentity.turret.*; import com.hbm.util.Compat; @@ -179,7 +177,6 @@ public class TileMappings { put(TileEntityMachineMiningLaser.class, "tileentity_mining_laser"); put(TileEntityNukeBalefire.class, "tileentity_nuke_fstbmb"); put(TileEntityMicrowave.class, "tileentity_microwave"); - put(TileEntityMachineMiniRTG.class, "tileentity_mini_rtg"); put(TileEntityBlockICF.class, "tileentity_block_icf"); put(TileEntityICFPress.class, "tileentity_icf_press"); put(TileEntityICFController.class, "tileentity_icf_controller"); @@ -391,6 +388,12 @@ public class TileMappings { put(TileEntityPileSource.class, "tileentity_pile_source"); put(TileEntityPileBreedingFuel.class, "tileentity_pile_breedingfuel"); put(TileEntityPileNeutronDetector.class, "tileentity_pile_neutrondetector"); + + put(TileEntityPileCore.class, "tileentity_pile_core"); + put(TileEntityPileBaseMK2.class, "tileentity_pile_block"); + put(TileEntityPileLoader.class, "tileentity_pile_loader"); + put(TileEntityPileVent.class, "tileentity_pile_vent"); + put(TileEntityPileControl.class, "tileentity_pile_control"); } private static void putRBMK() { @@ -475,6 +478,9 @@ public class TileMappings { put(TileEntityPneumoTubePaintable.class, "tileentity_pneumatic_tube_paintable"); put(TileEntityPneumoStorageAccess.class, "tileentity_pneumatic_storage_access"); put(TileEntityPneumoStorageClutter.class, "tileentity_pneumatic_storage_clutter"); + put(TileEntityPneumoStorageMono.class, "tileentity_pneumatic_storage_mono"); + put(TileEntityPneumoStorageImporter.class, "tileentity_pneumatic_storage_importer"); + put(TileEntityPneumoStorageExporter.class, "tileentity_pneumatic_storage_exporter"); put(TileEntityRadioTorchSender.class, "tileentity_rtty_sender"); put(TileEntityRadioTorchReceiver.class, "tileentity_rtty_rec"); @@ -507,10 +513,6 @@ public class TileMappings { private static void put(Class clazz, String... names) { map.put(clazz, names); - /*if((IFluidSource.class.isAssignableFrom(clazz) || IFluidAcceptor.class.isAssignableFrom(clazz)) && !IFluidConnector.class.isAssignableFrom(clazz)) { - LoggingUtil.errorWithHighlight(clazz.getCanonicalName() + " implements the old interfaces but not IFluidConnector!"); - }*/ - if(IConfigurableMachine.class.isAssignableFrom(clazz)) { configurables.add((Class) clazz); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java index 4e9c74c5c..bedb9d993 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java @@ -278,9 +278,11 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn ElectrolysisRecipe recipe = ElectrolyserFluidRecipes.recipes.get(tanks[0].getTankType()); if(recipe == null) return false; + tanks[1].setTankType(recipe.output1.type); + tanks[2].setTankType(recipe.output2.type); if(recipe.amount > tanks[0].getFill()) return false; - if(recipe.output1.type == tanks[1].getTankType() && recipe.output1.fill + tanks[1].getFill() > tanks[1].getMaxFill()) return false; - if(recipe.output2.type == tanks[2].getTankType() && recipe.output2.fill + tanks[2].getFill() > tanks[2].getMaxFill()) return false; + if(recipe.output1.fill + tanks[1].getFill() > tanks[1].getMaxFill()) return false; + if(recipe.output2.fill + tanks[2].getFill() > tanks[2].getMaxFill()) return false; if(recipe.byproduct != null) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java index bdeb8bedd..4706bae84 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java @@ -244,8 +244,8 @@ public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implem PREFIX_VALUE + "fuel", PREFIX_VALUE + "burnRate", PREFIX_VALUE + "state", - PREFIX_FUNCTION + "setState" + NAME_SEPARATOR + "active", - PREFIX_FUNCTION + "setBurnRate" + NAME_SEPARATOR + "rate" + PREFIX_FUNCTION + "setstate" + NAME_SEPARATOR + "active", + PREFIX_FUNCTION + "setburnrate" + NAME_SEPARATOR + "rate" }; } @@ -253,29 +253,23 @@ public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implem public String provideRORValue(String name) { if((PREFIX_VALUE + "heat").equals(name)) return "" + heatEnergy; if((PREFIX_VALUE + "fuel").equals(name)) return "" + tank.getFill(); - if((PREFIX_VALUE + "burnRate").equals(name)) return "" + setting; + if((PREFIX_VALUE + "burnrate").equals(name)) return "" + setting; if((PREFIX_VALUE + "state").equals(name)) return isOn ? "1" : "0"; return null; } @Override public String runRORFunction(String name, String[] params) { - if((PREFIX_FUNCTION + "setState").equals(name)) { + if((PREFIX_FUNCTION + "setstate").equals(name)) { this.isOn = params[0].equals("1"); this.markChanged(); return null; } - if((PREFIX_FUNCTION + "setBurnRate").equals(name)) { - try { - int rate = Integer.parseInt(params[0]); - if(rate < 1) rate = 1; - if(rate > 10) rate = 10; - this.setting = rate; - this.markChanged(); - return null; - } catch (NumberFormatException e) { - return "Invalid number"; - } + if((PREFIX_FUNCTION + "setburnrate").equals(name)) { + int rate = IRORInteractive.parseInt(params[0], 1, 10); + this.setting = rate; + this.markChanged(); + return null; } return null; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityICFController.java b/src/main/java/com/hbm/tileentity/machine/TileEntityICFController.java index 7d9795b15..eaa04d873 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityICFController.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityICFController.java @@ -102,11 +102,6 @@ public class TileEntityICFController extends TileEntityTickingBase implements IE this.ports.addAll(ports); } - @Override - public String getInventoryName() { - return "container.icfController"; - } - @Override public void updateEntity() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java index 20b1e4a33..c7010af97 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java @@ -12,7 +12,6 @@ import com.hbm.inventory.container.ContainerMachineAssemblyFactory; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineAssemblyFactory; -import com.hbm.inventory.recipes.AssemblyMachineRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; @@ -33,6 +32,7 @@ import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import api.hbm.redstoneoverradio.IRORValueProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -47,7 +47,7 @@ import net.minecraftforge.common.util.ForgeDirection; // TODO: make a base class because 90% of this is just copy pasted from the chemfac @NotableComments -public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider, IProxyDelegateProvider, IConditionalInvAccess { +public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider, IProxyDelegateProvider, IConditionalInvAccess, IRORValueProvider { public FluidTank[] allTanks; public FluidTank[] inputTanks; @@ -158,7 +158,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl long nextMaxPower = 0; for(int i = 0; i < 4; i++) { - GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assemblerModule[i].recipe); + GenericRecipe recipe = assemblerModule[i].getRecipe(); if(recipe != null) { nextMaxPower += recipe.power * 100; } @@ -374,7 +374,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl int index = data.getInteger("index"); String selection = data.getString("selection"); if(index >= 0 && index < 4) { - this.assemblerModule[index].recipe = selection; + this.assemblerModule[index].setRecipe(selection, false); this.markChanged(); } } @@ -722,4 +722,34 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl RETIRE, // return to null position for carriage transit WAIT // either waiting for or in the middle of carriage transit } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "progress1", + PREFIX_VALUE + "progress2", + PREFIX_VALUE + "progress3", + PREFIX_VALUE + "progress4", + PREFIX_VALUE + "recipe1", + PREFIX_VALUE + "recipe2", + PREFIX_VALUE + "recipe3", + PREFIX_VALUE + "recipe4", + PREFIX_VALUE + "anyactive", + PREFIX_VALUE + "active1", + PREFIX_VALUE + "active2", + PREFIX_VALUE + "active3", + PREFIX_VALUE + "active4", + }; + } + + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "anyactive").equals(name)) return "" + ((this.didProcess[0] || this.didProcess[1] || this.didProcess[2] || this.didProcess[3]) ? 1 : 0); + for(int i = 0; i < 4; i++) { + if((PREFIX_VALUE + "progress" + i).equals(name)) return "" + (int) Math.round(this.assemblerModule[i].progress * 100); + if((PREFIX_VALUE + "recipe" + i).equals(name)) return this.assemblerModule[i].getRecipeName(); + if((PREFIX_VALUE + "active" + i).equals(name)) return "" + (this.didProcess[i] ? 1 : 0); + } + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java index 721cd9031..486dbe8c4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyMachine.java @@ -11,7 +11,6 @@ import com.hbm.inventory.container.ContainerMachineAssemblyMachine; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineAssemblyMachine; -import com.hbm.inventory.recipes.AssemblyMachineRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; @@ -30,6 +29,8 @@ import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import api.hbm.redstoneoverradio.IRORInteractive; +import api.hbm.redstoneoverradio.IRORValueProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -41,7 +42,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider { +public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider, IRORValueProvider, IRORInteractive { public FluidTank inputTank; public FluidTank outputTank; @@ -88,7 +89,7 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl if(!worldObj.isRemote) { - GenericRecipe recipe = AssemblyMachineRecipes.INSTANCE.recipeNameMap.get(assemblerModule.recipe); + GenericRecipe recipe = assemblerModule.getRecipe(); if(recipe != null) { this.maxPower = recipe.power * 100; } @@ -303,7 +304,7 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl int index = data.getInteger("index"); String selection = data.getString("selection"); if(index == 0) { - this.assemblerModule.recipe = selection; + this.assemblerModule.setRecipe(selection, false); this.markChanged(); } } @@ -482,4 +483,34 @@ public class TileEntityMachineAssemblyMachine extends TileEntityMachineBase impl }; } } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "progress", + PREFIX_VALUE + "recipe", + PREFIX_VALUE + "active", + PREFIX_FUNCTION + "setrecipe" + NAME_SEPARATOR + "name", + }; + } + + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "progress").equals(name)) return "" + (int) Math.round(this.assemblerModule.progress * 100); + if((PREFIX_VALUE + "recipe").equals(name)) return this.assemblerModule.getRecipeName(); + if((PREFIX_VALUE + "active").equals(name)) return "" + (this.didProcess ? 1 : 0); + return null; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if((PREFIX_FUNCTION + "setrecipe").equals(name) && params.length == 1) { + this.assemblerModule.setRecipe(params[0], true); + this.markChanged(); + return null; + } + + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBlastFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBlastFurnace.java index bd67f3358..08225588b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBlastFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBlastFurnace.java @@ -46,7 +46,7 @@ public class TileEntityMachineBlastFurnace extends TileEntityMachineBase impleme public int fuel; public static final int FUEL_COAL = 200 * 8; public static final int FUEL_RATE = 200 * 4; // half coal per operation - public static final int MAX_FUEL = FUEL_COAL * 16; // 16 pieces of coal + public static final int MAX_FUEL = FUEL_COAL * 24; // 24 pieces of coal, can also fit a bit more than a coal coke block public static final int FLUE_GAS = 100; // per finished operation, not per tick public ModuleBurnTime burnModule = new ModuleBurnTime() @@ -56,7 +56,7 @@ public class TileEntityMachineBlastFurnace extends TileEntityMachineBase impleme super(5); this.tanks = new FluidTank[2]; this.tanks[0] = new FluidTank(Fluids.AIRBLAST, 4_000); - this.tanks[1] = new FluidTank(Fluids.FLUE, 1_000); // TEMP + this.tanks[1] = new FluidTank(Fluids.FLUE, 1_000); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java index 8f0e8a905..7e2a170b8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalFactory.java @@ -10,7 +10,6 @@ import com.hbm.inventory.container.ContainerMachineChemicalFactory; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineChemicalFactory; -import com.hbm.inventory.recipes.ChemicalPlantRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; @@ -31,6 +30,7 @@ import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import api.hbm.redstoneoverradio.IRORValueProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -43,7 +43,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineChemicalFactory extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider, IProxyDelegateProvider, IConditionalInvAccess { +public class TileEntityMachineChemicalFactory extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider, IProxyDelegateProvider, IConditionalInvAccess, IRORValueProvider { public FluidTank[] allTanks; public FluidTank[] inputTanks; @@ -158,7 +158,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl long nextMaxPower = 0; for(int i = 0; i < 4; i++) { - GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplantModule[i].recipe); + GenericRecipe recipe = chemplantModule[i].getRecipe(); if(recipe != null) { nextMaxPower += recipe.power * 100; } @@ -400,7 +400,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl int index = data.getInteger("index"); String selection = data.getString("selection"); if(index >= 0 && index < 4) { - this.chemplantModule[index].recipe = selection; + this.chemplantModule[index].setRecipe(selection, false); this.markChanged(); } } @@ -480,4 +480,34 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl @Override public FluidTank[] getAllTanks() { return TileEntityMachineChemicalFactory.this.getAllTanks(); } } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "progress1", + PREFIX_VALUE + "progress2", + PREFIX_VALUE + "progress3", + PREFIX_VALUE + "progress4", + PREFIX_VALUE + "recipe1", + PREFIX_VALUE + "recipe2", + PREFIX_VALUE + "recipe3", + PREFIX_VALUE + "recipe4", + PREFIX_VALUE + "anyactive", + PREFIX_VALUE + "active1", + PREFIX_VALUE + "active2", + PREFIX_VALUE + "active3", + PREFIX_VALUE + "active4", + }; + } + + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "anyactive").equals(name)) return "" + ((this.didProcess[0] || this.didProcess[1] || this.didProcess[2] || this.didProcess[3]) ? 1 : 0); + for(int i = 0; i < 4; i++) { + if((PREFIX_VALUE + "progress" + i).equals(name)) return "" + (int) Math.round(this.chemplantModule[i].progress * 100); + if((PREFIX_VALUE + "recipe" + i).equals(name)) return this.chemplantModule[i].getRecipeName(); + if((PREFIX_VALUE + "active" + i).equals(name)) return "" + (this.didProcess[i] ? 1 : 0); + } + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index b4c730928..8c52695e9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -10,7 +10,6 @@ import com.hbm.inventory.container.ContainerMachineChemicalPlant; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineChemicalPlant; -import com.hbm.inventory.recipes.ChemicalPlantRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; @@ -29,6 +28,8 @@ import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import api.hbm.redstoneoverradio.IRORInteractive; +import api.hbm.redstoneoverradio.IRORValueProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -40,7 +41,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider { +public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider, IRORValueProvider, IRORInteractive { public FluidTank[] inputTanks; public FluidTank[] outputTanks; @@ -86,7 +87,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem if(!worldObj.isRemote) { - GenericRecipe recipe = ChemicalPlantRecipes.INSTANCE.recipeNameMap.get(chemplantModule.recipe); + GenericRecipe recipe = chemplantModule.getRecipe(); if(recipe != null) { this.maxPower = recipe.power * 100; } @@ -278,7 +279,7 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem int index = data.getInteger("index"); String selection = data.getString("selection"); if(index == 0) { - this.chemplantModule.recipe = selection; + this.chemplantModule.setRecipe(selection, false); this.markChanged(); } } @@ -326,4 +327,34 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implem upgrades.put(UpgradeType.OVERDRIVE, 3); return upgrades; } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "progress", + PREFIX_VALUE + "recipe", + PREFIX_VALUE + "active", + PREFIX_FUNCTION + "setrecipe" + NAME_SEPARATOR + "name", + }; + } + + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "progress").equals(name)) return "" + (int) Math.round(this.chemplantModule.progress * 100); + if((PREFIX_VALUE + "recipe").equals(name)) return this.chemplantModule.getRecipeName(); + if((PREFIX_VALUE + "active").equals(name)) return "" + (this.didProcess ? 1 : 0); + return null; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if((PREFIX_FUNCTION + "setrecipe").equals(name) && params.length == 1) { + this.chemplantModule.setRecipe(params[0], true); + this.markChanged(); + return null; + } + + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java index edad59cd9..e6214bb64 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java @@ -484,8 +484,8 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin PREFIX_VALUE + "power", PREFIX_VALUE + "fuel", PREFIX_VALUE + "efficiency", - PREFIX_FUNCTION + "setState" + NAME_SEPARATOR + "state", - PREFIX_FUNCTION + "setThrottle" + NAME_SEPARATOR + "throttle" + PREFIX_FUNCTION + "setstate" + NAME_SEPARATOR + "state", + PREFIX_FUNCTION + "setthrottle" + NAME_SEPARATOR + "throttle" }; } @@ -509,7 +509,7 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin @Override public String runRORFunction(String name, String[] params) { - if ((PREFIX_FUNCTION + "setState").equals(name) && params.length > 0) { + if ((PREFIX_FUNCTION + "setstate").equals(name) && params.length > 0) { try { int val = Integer.parseInt(params[0]); this.isOn = (val == 1); @@ -517,7 +517,7 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin } catch (NumberFormatException e) {} return null; } - if ((PREFIX_FUNCTION + "setThrottle").equals(name) && params.length > 0) { + if ((PREFIX_FUNCTION + "setthrottle").equals(name) && params.length > 0) { try { int val = Integer.parseInt(params[0]); if (val < 0) val = 0; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java index 4dc4df595..0becdf9fc 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java @@ -147,10 +147,7 @@ public class TileEntityMachineEPress extends TileEntityMachineBase implements IE super.serialize(buf); buf.writeLong(power); buf.writeInt(press); - if (slots[2] == null) - buf.writeShort(-1); // indicate that the NBT doesn't actually exist to avoid null pointer errors. - else - BufferUtil.writeNBT(buf, slots[2].stackTagCompound); + BufferUtil.writeItemStack(buf, slots[2]); } @Override @@ -158,9 +155,7 @@ public class TileEntityMachineEPress extends TileEntityMachineBase implements IE super.deserialize(buf); this.power = buf.readLong(); this.syncPress = buf.readInt(); - - NBTTagCompound stack = BufferUtil.readNBT(buf); - this.syncStack = ItemStack.loadItemStackFromNBT(stack); + this.syncStack = BufferUtil.readItemStack(buf); this.turnProgress = 2; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java index cb1798c91..8ecc1a189 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java @@ -183,6 +183,8 @@ public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase im public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); lastPowerTarget = nbt.getLong("lastPowerTarget"); + flywheel_energy = nbt.getLong("flywheel_energy"); + maxPower = nbt.getLong("maxPower"); spin = nbt.getDouble("spin"); } @@ -190,6 +192,8 @@ public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase im public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setLong("lastPowerTarget", lastPowerTarget); + nbt.setLong("flywheel_energy", flywheel_energy); + nbt.setLong("maxPower", maxPower); nbt.setDouble("spin", spin); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiniRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiniRTG.java deleted file mode 100644 index ba194d48d..000000000 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiniRTG.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.hbm.tileentity.machine; - -import com.hbm.blocks.ModBlocks; -import com.hbm.tileentity.TileEntityLoadedBase; -import com.hbm.util.CompatEnergyControl; - -import api.hbm.energymk2.IEnergyProviderMK2; -import api.hbm.tile.IInfoProviderEC; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -public class TileEntityMachineMiniRTG extends TileEntityLoadedBase implements IEnergyProviderMK2, IInfoProviderEC { - - public long power; - boolean tact = false; - - @Override - public void updateEntity() { - - if(!worldObj.isRemote) { - - power += this.getOutput(); - - if(power > getMaxPower()) - power = getMaxPower(); - - for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { - this.tryProvide(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); - } - } - } - - public long getOutput() { - if(this.getBlockType() == ModBlocks.machine_powerrtg) return 2_500; - return 700; - } - - @Override - public long getMaxPower() { - if(this.getBlockType() == ModBlocks.machine_powerrtg) return 50_000; - return 1_400; - } - - @Override - public long getPower() { - return power; - } - - @Override - public void setPower(long i) { - power = i; - } - - - @Override - public void provideExtraInfo(NBTTagCompound data) { - data.setBoolean(CompatEnergyControl.B_ACTIVE, true); - data.setDouble(CompatEnergyControl.D_OUTPUT_HE, this.getOutput()); - } -} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java index 0aca4f5b6..0181ac59a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePUREX.java @@ -10,7 +10,6 @@ import com.hbm.inventory.container.ContainerMachinePUREX; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachinePUREX; -import com.hbm.inventory.recipes.PUREXRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; @@ -26,6 +25,7 @@ import com.hbm.util.i18n.I18nUtil; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import api.hbm.redstoneoverradio.IRORValueProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -37,7 +37,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachinePUREX extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider { +public class TileEntityMachinePUREX extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IControlReceiver, IGUIProvider, IRORValueProvider { public FluidTank[] inputTanks; public FluidTank[] outputTanks; @@ -80,7 +80,7 @@ public class TileEntityMachinePUREX extends TileEntityMachineBase implements IEn if(!worldObj.isRemote) { - GenericRecipe recipe = PUREXRecipes.INSTANCE.recipeNameMap.get(purexModule.recipe); + GenericRecipe recipe = purexModule.getRecipe(); if(recipe != null) { this.maxPower = recipe.power * 100; } @@ -235,7 +235,7 @@ public class TileEntityMachinePUREX extends TileEntityMachineBase implements IEn int index = data.getInteger("index"); String selection = data.getString("selection"); if(index == 0) { - this.purexModule.recipe = selection; + this.purexModule.setRecipe(selection, false); this.markChanged(); } } @@ -283,4 +283,21 @@ public class TileEntityMachinePUREX extends TileEntityMachineBase implements IEn upgrades.put(UpgradeType.OVERDRIVE, 3); return upgrades; } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "progress", + PREFIX_VALUE + "recipe", + PREFIX_VALUE + "active", + }; + } + + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "progress").equals(name)) return "" + (int) Math.round(this.purexModule.progress * 100); + if((PREFIX_VALUE + "recipe").equals(name)) return this.purexModule.getRecipeName(); + if((PREFIX_VALUE + "active").equals(name)) return "" + (this.didProcess ? 1 : 0); + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePrecAss.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePrecAss.java index b8429c2e5..c441bff3e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePrecAss.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePrecAss.java @@ -10,7 +10,6 @@ import com.hbm.inventory.container.ContainerMachinePrecAss; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachinePrecAss; -import com.hbm.inventory.recipes.PrecAssRecipes; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; @@ -93,7 +92,7 @@ public class TileEntityMachinePrecAss extends TileEntityMachineBase implements I if(!worldObj.isRemote) { - GenericRecipe recipe = PrecAssRecipes.INSTANCE.recipeNameMap.get(assemblerModule.recipe); + GenericRecipe recipe = assemblerModule.getRecipe(); if(recipe != null) { this.maxPower = recipe.power * 100; } @@ -352,7 +351,7 @@ public class TileEntityMachinePrecAss extends TileEntityMachineBase implements I int index = data.getInteger("index"); String selection = data.getString("selection"); if(index == 0) { - this.assemblerModule.recipe = selection; + this.assemblerModule.setRecipe(selection, false); this.markChanged(); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineThresher.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineThresher.java index ffc71f2be..43d329614 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineThresher.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineThresher.java @@ -9,6 +9,7 @@ import com.hbm.handler.threading.PacketThreading; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.items.ModItems; +import com.hbm.lib.Library; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; import com.hbm.main.NTMSounds; @@ -85,6 +86,7 @@ public class TileEntityMachineThresher extends TileEntityLoadedBase implements I trySubscribe(tank.getTankType(), worldObj, xCoord + rot.offsetX, yCoord, zCoord + rot.offsetZ, rot); trySubscribe(tank.getTankType(), worldObj, xCoord - rot.offsetX, yCoord, zCoord - rot.offsetZ, rot.getOpposite()); + trySubscribe(tank.getTankType(), worldObj, xCoord, yCoord - 1, zCoord, Library.NEG_Y); } if(isOn && !isSuspended) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index 47040e264..51c726fd5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -737,16 +737,16 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement PREFIX_VALUE + "turbinespeed", PREFIX_VALUE + "output", PREFIX_VALUE + "state", - PREFIX_VALUE + "autoMode", + PREFIX_VALUE + "automode", PREFIX_VALUE + "temp", PREFIX_VALUE + "power", PREFIX_VALUE + "fuel", PREFIX_VALUE + "lubricant", PREFIX_VALUE + "water", PREFIX_VALUE + "steam", - PREFIX_FUNCTION + "setAuto" + NAME_SEPARATOR + "auto", - PREFIX_FUNCTION + "setThrottle" + NAME_SEPARATOR + "percent", - PREFIX_FUNCTION + "setState" + NAME_SEPARATOR + "state" + PREFIX_FUNCTION + "setauto" + NAME_SEPARATOR + "auto", + PREFIX_FUNCTION + "setthrottle" + NAME_SEPARATOR + "percent", + PREFIX_FUNCTION + "setstate" + NAME_SEPARATOR + "state" }; } @@ -756,7 +756,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement if((PREFIX_VALUE + "turbinespeed").equals(name)) return "" + this.rpm; if((PREFIX_VALUE + "output").equals(name)) return "" + (int) (this.instantPowerOutput * 20); if((PREFIX_VALUE + "state").equals(name)) return "" + this.state; - if((PREFIX_VALUE + "autoMode").equals(name)) return "" + (this.autoMode ? 1 : 0); + if((PREFIX_VALUE + "automode").equals(name)) return "" + (this.autoMode ? 1 : 0); if((PREFIX_VALUE + "temp").equals(name)) return "" + this.temp; if((PREFIX_VALUE + "power").equals(name)) return "" + this.power; if((PREFIX_VALUE + "fuel").equals(name)) return "" + tanks[0].getFill(); @@ -768,7 +768,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement @Override public String runRORFunction(String name, String[] params) { - if((PREFIX_FUNCTION + "setAuto").equals(name) && params.length > 0) { + if((PREFIX_FUNCTION + "setauto").equals(name) && params.length > 0) { try { int val = Integer.parseInt(params[0]); this.autoMode = (val == 1); @@ -776,7 +776,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement } catch(NumberFormatException e) {} return null; } - if((PREFIX_FUNCTION + "setThrottle").equals(name) && params.length > 0) { + if((PREFIX_FUNCTION + "setthrottle").equals(name) && params.length > 0) { try { int percent = Integer.parseInt(params[0]); if(percent < 0) percent = 0; @@ -786,7 +786,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement } catch(NumberFormatException e) {} return null; } - if((PREFIX_FUNCTION + "setState").equals(name) && params.length > 0) { + if((PREFIX_FUNCTION + "setstate").equals(name) && params.length > 0) { try { int newState = Integer.parseInt(params[0]); if(newState == 1) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java index 2e6f1bc82..4ecf97689 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java @@ -216,6 +216,12 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG if(this.rodTarget > this.rodLevel) this.rodLevel++; if(this.rodTarget < this.rodLevel) this.rodLevel--; + double multiplier = 1D; + + if(tanks[0].getTankType().hasTrait(FT_PWRModerator.class)) { + multiplier = tanks[0].getTankType().getTrait(FT_PWRModerator.class).getMultiplier(); + } + int newFlux = this.sourceCount * 20; if(typeLoaded != -1 && amountLoaded > 0) { @@ -227,6 +233,10 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG double totalOutput = outputPerRod * amountLoaded * usedRods; double totalHeatOutput = totalOutput * fuel.heatEmission; + if(tanks[0].getFill() > 0) { + totalHeatOutput *= multiplier; + } + this.coreHeat += totalHeatOutput; newFlux += totalOutput; @@ -266,8 +276,8 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG this.flux = newFlux; - if(tanks[0].getTankType().hasTrait(FT_PWRModerator.class) && tanks[0].getFill() > 0) { - this.flux *= tanks[0].getTankType().getTrait(FT_PWRModerator.class).getMultiplier(); + if(tanks[0].getFill() > 0) { + this.flux *= multiplier; } if(this.coreHeat > this.coreHeatCapacity) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java index 51a4a8e11..93293c4d9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java @@ -270,7 +270,8 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC // function of SHS produced per tick // (heat - 10256)/100000 * steamFill (max efficiency at 14b) * 25 * 5 (should get rid of any rounding errors) if(this.heat > 10256) { - int cycle = (int)((((float)heat - 10256F) / (float)maxHeat) * Math.min(((float)carbonDioxide.getFill() / 14000F), 1F) * 25F * 5F); + float mult = 7.5F; // was 5 originally + int cycle = (int)((((float)heat - 10256F) / (float)maxHeat) * Math.min(((float)carbonDioxide.getFill() / 14000F), 1F) * 25F * mult); this.output = cycle; water.setFill(water.getFill() - cycle); @@ -615,8 +616,8 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC PREFIX_VALUE + "steam", PREFIX_VALUE + "co2", PREFIX_VALUE + "state", - PREFIX_FUNCTION + "setState" + NAME_SEPARATOR + "active (0 or 1)", - PREFIX_FUNCTION + "ventCO2" + PREFIX_FUNCTION + "setstate" + NAME_SEPARATOR + "active (0 or 1)", + PREFIX_FUNCTION + "ventco2" }; } @@ -633,7 +634,7 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC @Override public String runRORFunction(String name, String[] params) { - if((PREFIX_FUNCTION + "setState").equals(name) && params.length > 0) { + if((PREFIX_FUNCTION + "setstate").equals(name) && params.length > 0) { if(redstonePowered) return null; try { int val = Integer.parseInt(params[0]); @@ -642,7 +643,7 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC } catch(NumberFormatException e) {} return null; } - if ((PREFIX_FUNCTION + "ventCO2").equals(name)) { + if ((PREFIX_FUNCTION + "ventco2").equals(name)) { int fill = this.carbonDioxide.getFill(); this.carbonDioxide.setFill(Math.max(fill - 1000, 0)); this.markDirty(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarMirror.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarMirror.java index f921d04ad..34a710a5e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarMirror.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarMirror.java @@ -18,11 +18,6 @@ public class TileEntitySolarMirror extends TileEntityTickingBase { public int tZ; public boolean isOn; - @Override - public String getInventoryName() { - return null; - } - @Override public void updateEntity() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java index c1d1317b4..7e4e27ce8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java @@ -35,12 +35,10 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import api.hbm.redstoneoverradio.IRORInteractive; import api.hbm.redstoneoverradio.IRORValueProvider; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; -import li.cil.oc.api.network.SimpleComponent; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -54,7 +52,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityWatz extends TileEntityMachineBase implements IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IFluidCopiable, CompatHandler.OCComponent, IRORValueProvider, IRORInteractive { +public class TileEntityWatz extends TileEntityMachineBase implements IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IFluidCopiable, CompatHandler.OCComponent, IRORValueProvider { public FluidTank[] tanks; public FluidTank[] sharedTanks; @@ -664,12 +662,6 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand return ROR; } - @Override - public String runRORFunction(String name, String[] params) { - // TODO Auto-generated method stub - return null; - } - @Override public String provideRORValue(String name) { if((PREFIX_VALUE + "heat").equals(name)) return "" + this.heat; diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionPlasmaForge.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionPlasmaForge.java index 9d8cf978c..1b49f2dc4 100644 --- a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionPlasmaForge.java +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionPlasmaForge.java @@ -16,7 +16,6 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachinePlasmaForge; import com.hbm.inventory.recipes.PlasmaForgeRecipe; -import com.hbm.inventory.recipes.PlasmaForgeRecipes; import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; @@ -34,6 +33,7 @@ import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluidmk2.IFluidStandardReceiverMK2; +import api.hbm.redstoneoverradio.IRORValueProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -45,7 +45,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implements IFusionPowerReceiver, IEnergyReceiverMK2, IFluidStandardReceiverMK2, IControlReceiver, IGUIProvider { +public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implements IFusionPowerReceiver, IEnergyReceiverMK2, IFluidStandardReceiverMK2, IControlReceiver, IGUIProvider, IRORValueProvider { public FluidTank inputTank; @@ -156,7 +156,7 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement if(receiverNode != null && receiverNode.hasValidNet()) receiverNode.net.addReceiver(this); if(providerNode != null && providerNode.hasValidNet()) providerNode.net.addProvider(this); // technically unused, but good to have when we do something else with the plasma nets - PlasmaForgeRecipe recipe = (PlasmaForgeRecipe) PlasmaForgeRecipes.INSTANCE.recipeNameMap.get(plasmaModule.recipe); + PlasmaForgeRecipe recipe = (PlasmaForgeRecipe) plasmaModule.getRecipe(); if(recipe != null) this.maxPower = recipe.power * 100; this.maxPower = BobMathUtil.max(this.power, this.maxPower, 100_000); @@ -364,7 +364,7 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement int index = data.getInteger("index"); String selection = data.getString("selection"); if(index == 0) { - this.plasmaModule.recipe = selection; + this.plasmaModule.setRecipe(selection, false); this.markChanged(); } } @@ -593,4 +593,25 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement double[] newPos = positions[rand.nextInt(positions.length)]; for(int i = 0; i < newPos.length; i++) arm.targetAngles[i] = newPos[i]; } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "progress", + PREFIX_VALUE + "recipe", + PREFIX_VALUE + "active", + PREFIX_VALUE + "booster", + PREFIX_VALUE + "plasma", + }; + } + + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "progress").equals(name)) return "" + (int) Math.round(this.plasmaModule.progress * 100); + if((PREFIX_VALUE + "recipe").equals(name)) return this.plasmaModule.getRecipeName(); + if((PREFIX_VALUE + "active").equals(name)) return "" + (this.didProcess ? 1 : 0); + if((PREFIX_VALUE + "booster").equals(name)) return "" + this.booster; + if((PREFIX_VALUE + "plasma").equals(name)) return "" + this.plasmaEnergy; + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java index 9208fab1f..08992ef16 100644 --- a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java @@ -27,6 +27,7 @@ import com.hbm.util.BobMathUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; +import api.hbm.redstoneoverradio.IRORInteractive; import api.hbm.redstoneoverradio.IRORValueProvider; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; @@ -46,7 +47,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityFusionTorus extends TileEntityCooledBase implements IGUIProvider, IControlReceiver, SimpleComponent, CompatHandler.OCComponent, IRORValueProvider { +public class TileEntityFusionTorus extends TileEntityCooledBase implements IGUIProvider, IControlReceiver, SimpleComponent, CompatHandler.OCComponent, IRORValueProvider, IRORInteractive { public boolean didProcess = false; @@ -473,7 +474,7 @@ public class TileEntityFusionTorus extends TileEntityCooledBase implements IGUIP int index = data.getInteger("index"); String selection = data.getString("selection"); if(index == 0) { - this.fusionModule.recipe = selection; + this.fusionModule.setRecipe(selection, false); this.markChanged(); } } @@ -589,7 +590,11 @@ public class TileEntityFusionTorus extends TileEntityCooledBase implements IGUIP public String[] getFunctionInfo() { return new String[] { PREFIX_VALUE + "plasma", - PREFIX_VALUE + "consumption" + PREFIX_VALUE + "consumption", + PREFIX_VALUE + "progress", + PREFIX_VALUE + "recipe", + PREFIX_VALUE + "active", + PREFIX_VALUE + "temp", }; } @@ -597,6 +602,22 @@ public class TileEntityFusionTorus extends TileEntityCooledBase implements IGUIP public String provideRORValue(String name) { if((PREFIX_VALUE + "plasma").equals(name)) return "" + this.plasmaEnergy; if((PREFIX_VALUE + "consumption").equals(name)) return "" + (int) (this.fuelConsumption * 100); + if((PREFIX_VALUE + "progress").equals(name)) return "" + (int) Math.round(this.fusionModule.progress * 100); + if((PREFIX_VALUE + "recipe").equals(name)) return this.fusionModule.getRecipeName(); + if((PREFIX_VALUE + "active").equals(name)) return "" + (this.didProcess ? 1 : 0); + if((PREFIX_VALUE + "temp").equals(name)) return "" + (int) this.temperature; + return null; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if((PREFIX_FUNCTION + "setrecipe").equals(name) && params.length == 1) { + this.fusionModule.setRecipe(params[0], false); + this.markChanged(); + return null; + } + return null; } } diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java index 80bc476ab..34d4753f2 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java @@ -10,6 +10,7 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; +@Deprecated public abstract class TileEntityPileBase extends TileEntity { @Override diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBaseMK2.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBaseMK2.java new file mode 100644 index 000000000..e96cc420d --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBaseMK2.java @@ -0,0 +1,76 @@ +package com.hbm.tileentity.machine.pile; + +import com.hbm.tileentity.TileEntityTickingBase; +import com.hbm.util.Compat; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; + +/** Base class for all tile entities used by the Chicago Pile, except for the core tile. */ +public class TileEntityPileBaseMK2 extends TileEntityTickingBase { + + public TileEntityPileCore cachedCore; + public int coreX; + public int coreY = -999; + public int coreZ; + + public TileEntityPileBaseMK2 setCore(int x, int y, int z) { + this.coreX = x; + this.coreY = y; + this.coreZ = z; + return this; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + if(coreY >= 0) { + + TileEntityPileCore controller = getCore(); + + if((controller == null || controller.isInvalid()) && worldObj.getChunkProvider().chunkExists(coreX >> 4, coreZ >> 4)) { + this.getBlockType().breakBlock(worldObj, xCoord, yCoord, zCoord, this.getBlockType(), this.getBlockMetadata()); + } + } + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + coreX = nbt.getInteger("cX"); + coreY = nbt.getInteger("cY"); + coreZ = nbt.getInteger("cZ"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("cX", coreX); + nbt.setInteger("cY", coreY); + nbt.setInteger("cZ", coreZ); + } + + @Override + public void markDirty() { + if(this.worldObj != null) { + this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } + } + + public TileEntityPileCore getCore() { + if(cachedCore != null && !cachedCore.isInvalid()) return cachedCore; + + if(worldObj.getChunkProvider().chunkExists(coreX >> 4, coreZ >> 4)) { + + TileEntity tile = Compat.getTileStandard(worldObj, coreX, coreY, coreZ); + if(tile instanceof TileEntityPileCore) { + TileEntityPileCore core = (TileEntityPileCore) tile; + cachedCore = core; + return core; + } + } + return null; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBreedingFuel.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBreedingFuel.java index c1f775e0e..8bb298049 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBreedingFuel.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBreedingFuel.java @@ -6,6 +6,7 @@ import com.hbm.config.GeneralConfig; import api.hbm.block.IPileNeutronReceiver; import net.minecraft.nbt.NBTTagCompound; +@Deprecated public class TileEntityPileBreedingFuel extends TileEntityPileBase implements IPileNeutronReceiver { public int neutrons; diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileControl.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileControl.java new file mode 100644 index 000000000..e01a7ad67 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileControl.java @@ -0,0 +1,132 @@ +package com.hbm.tileentity.machine.pile; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.machine.pile.BlockPile; +import com.hbm.tileentity.machine.pile.TileEntityPileCore.PileChannel; +import com.hbm.util.Compat; + +import api.hbm.redstoneoverradio.IRORInteractive; +import io.netty.buffer.ByteBuf; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityPileControl extends TileEntityPileDeviceBase implements IRORInteractive { + + public double syncLevel; + public double level; + public double lastLevel; + + public int turnProgress; + + public double targetLevel; + public static final double SPEED = 1D / 60D; // full traverse takes 3s + public boolean wasRedstone; + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + boolean canMove = false; + + if(worldObj.getBlock(xCoord, yCoord - 1, zCoord) == ModBlocks.pile_block && worldObj.getBlockMetadata(xCoord, yCoord - 1, zCoord) == BlockPile.META_CONTROL) { + + TileEntity tile = Compat.getTileStandard(worldObj, xCoord, yCoord - 1, zCoord); + + if(tile instanceof TileEntityPileBaseMK2) { + TileEntityPileBaseMK2 pile = (TileEntityPileBaseMK2) tile; + TileEntityPileCore core = pile.getCore(); + + if(core != null) { + PileChannel controlChan = core.getControlChannel(xCoord, yCoord - 1, zCoord); + + if(controlChan != null) { + canMove = true; + this.chanNum = core.getControlChannelNum(controlChan); + controlChan.control = this.level; + } + } + } + } + + if(canMove && this.level != this.targetLevel) { + if(Math.abs(level - targetLevel) <= SPEED) { + this.level = this.targetLevel; + } else if(level < targetLevel) { + this.level += SPEED; + } else if(level > targetLevel) { + this.level -= SPEED; + } + } + + ForgeDirection dir = this.getOrientation(); + boolean redstone = worldObj.getIndirectPowerOutput(xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ, dir.getOpposite().ordinal()); + + if(redstone && !wasRedstone) this.setTarget(1D); + if(!redstone && wasRedstone) this.setTarget(0D); + + this.wasRedstone = redstone; + + this.networkPackNT(100); + + } else { + + this.lastLevel = this.level; + + if(this.turnProgress > 0) { + this.level = this.level + ((this.syncLevel - this.level) / (double) this.turnProgress); + --this.turnProgress; + } else { + this.level = this.syncLevel; + } + } + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeDouble(this.level); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + double lastSync = this.syncLevel; + this.syncLevel = buf.readDouble(); + + if(this.syncLevel != lastSync) this.turnProgress = 2; + } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_FUNCTION + "setrods" + NAME_SEPARATOR + "percent", + PREFIX_FUNCTION + "extendrods" + NAME_SEPARATOR + "percent" + }; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if((PREFIX_FUNCTION + "setrods").equals(name) && params.length > 0) { + int percent = IRORInteractive.parseInt(params[0], 0, 100); + this.setTarget(percent / 100D); + this.markChanged(); + return null; + } + + if((PREFIX_FUNCTION + "extendrods").equals(name) && params.length > 0) { + int percent = IRORInteractive.parseInt(params[0], -100, 100); + this.setTarget(MathHelper.clamp_double(this.targetLevel + percent / 100D, 0D, 1D)); + this.markChanged(); + return null; + } + + return null; + } + + public void setTarget(double target) { + this.targetLevel = target; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java new file mode 100644 index 000000000..a92e97f8d --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileCore.java @@ -0,0 +1,357 @@ +package com.hbm.tileentity.machine.pile; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.machine.MachinePWRController; +import com.hbm.blocks.machine.pile.BlockPile; +import com.hbm.interfaces.NotableComments; +import com.hbm.main.NTMSounds; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.AuxParticlePacketNT; +import com.hbm.tileentity.TileEntityTickingBase; +import com.hbm.util.fauxpointtwelve.DirPos; + +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.common.util.ForgeDirection; + +@NotableComments +public class TileEntityPileCore extends TileEntityTickingBase { + + /* + * ____,__,___ + * |\ I, I, \ + * | \ I I \ + * -- \___________\ + * |--| | + * -- | U U U | + * \--| X | + * \ | U U U | + * \|___________| + * + * BEHOLD + * THE CUBE + */ + + /** + * Orientation is kind of important now. The "direction" the pile is facing in is now decided + * by the side the core is on, i.e. the side it was assembled from. Any channel that goes along + * with the orientation is automatically considered a fuel channel. Any channel perpendicular + * to the orientation is for ventilation. Vertical channels are always for control rods. + */ + public PileOrientation orientation = PileOrientation.NEITHER; + + public int height; + public int width; + public int depth; + + public List fuelChannels = new ArrayList(); + public List ventilationChannels = new ArrayList(); + public List controlChannels = new ArrayList(); + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + height = nbt.getInteger("height"); + width = nbt.getInteger("width"); + depth = nbt.getInteger("depth"); + + int fuelCount = nbt.getByte("fc"); + int ventCount = nbt.getByte("vc"); + int contCount = nbt.getByte("cc"); + + fuelChannels.clear(); + ventilationChannels.clear(); + controlChannels.clear(); + + for(int i = 0; i < fuelCount; i++) fuelChannels.add(readChannelFromNBT(nbt, "f" + i)); + for(int i = 0; i < ventCount; i++) ventilationChannels.add(readChannelFromNBT(nbt, "v" + i)); + for(int i = 0; i < contCount; i++) controlChannels.add(readChannelFromNBT(nbt, "c" + i)); + } + + public PileChannel getFuelChannel(int x, int y, int z) { return getChannel(x, y, z, fuelChannels); } + public PileChannel getVentilationChannel(int x, int y, int z) { return getChannel(x, y, z, ventilationChannels); } + public PileChannel getControlChannel(int x, int y, int z) { return getChannel(x, y, z, controlChannels); } + + public PileChannel getChannel(int x, int y, int z, List list) { + for(PileChannel channel : list) if(channel.entry.compare(x, y, z)) return channel; + return null; + } + + public int getFuelChannelNum(PileChannel chan) { return getChannelNum(chan, fuelChannels); } + public int getVentilationChannelNum(PileChannel chan) { return getChannelNum(chan, ventilationChannels); } + public int getControlChannelNum(PileChannel chan) { return getChannelNum(chan, controlChannels); } + + public int getChannelNum(PileChannel chan, List list) { + return list.indexOf(chan); // more reliable when channels change and not that big of a deal because we have lists in single digit length + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("height", height); + nbt.setInteger("width", width); + nbt.setInteger("depth", depth); + + int fuelCount = fuelChannels.size(); + int ventCount = ventilationChannels.size(); + int contCount = controlChannels.size(); + + nbt.setByte("fc", (byte) fuelCount); + nbt.setByte("vc", (byte) ventCount); + nbt.setByte("cc", (byte) contCount); + + for(int i = 0; i < fuelCount; i++) fuelChannels.get(i).writeChannelToNBT(nbt, "f" + i); + for(int i = 0; i < ventCount; i++) ventilationChannels.get(i).writeChannelToNBT(nbt, "v" + i); + for(int i = 0; i < contCount; i++) controlChannels.get(i).writeChannelToNBT(nbt, "c" + i); + } + + public TileEntityPileCore setupSize(int h, int w, int d) { + this.height = h; + this.width = w; + this.depth = d; + return this; + } + + public List getChannelList(PileChannelType type) { + if(type == PileChannelType.FUEL) return this.fuelChannels; + if(type == PileChannelType.VENTILATION) return this.ventilationChannels; + return this.controlChannels; + } + + public boolean drillChannel(int x, int y, int z, ForgeDirection dir, EntityPlayer player) { + int startMeta = worldObj.getBlockMetadata(x, y, z); + PileChannelType type = PileChannelType.getChannelType(dir, orientation); + + int size = + type == PileChannelType.CONTROL ? height : + type == PileChannelType.FUEL ? depth : width; + + List list = getChannelList(type); + + if(startMeta == BlockPile.META_FUEL_IN || startMeta == BlockPile.META_AIR_IN || startMeta == BlockPile.META_CONTROL) { + for(int i = 0; i < list.size(); i++) { + PileChannel chan = list.get(i); + if(chan.entry.compare(x, y, z) && chan.entry.getDir() == dir) { + list.remove(i); + for(int j = 0; j < size; j++) { + int iX = x + dir.offsetX * j; + int iY = y + dir.offsetY * j; + int iZ = z + dir.offsetZ * j; + worldObj.setBlockMetadataWithNotify(iX, iY, iZ, BlockPile.META_DUMMY, 3); + } + worldObj.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, NTMSounds.VANILLA_PLINK, 1F, 0.75F); + return true; + } + } + } + + boolean error = false; + for(int i = 0; i < size; i++) { + int iX = x + dir.offsetX * i; + int iY = y + dir.offsetY * i; + int iZ = z + dir.offsetZ * i; + if(worldObj.getBlock(iX, iY, iZ) != ModBlocks.pile_block) { MachinePWRController.sendError(worldObj, iX, iY, iZ, "Foreign block in reactor", player); error = true; } + int meta = worldObj.getBlockMetadata(iX, iY, iZ); + if(meta == BlockPile.META_EDGE) { MachinePWRController.sendError(worldObj, iX, iY, iZ, "Cannot drill along edge", player); error = true; } + else if(meta == BlockPile.META_CORE) { MachinePWRController.sendError(worldObj, iX, iY, iZ, "Cannot intersect core", player); error = true; } + else if(meta == BlockPile.META_CHANNEL) { MachinePWRController.sendError(worldObj, iX, iY, iZ, "Cannot intersect channel", player); error = true; } + else if(meta != BlockPile.META_DUMMY) { MachinePWRController.sendError(worldObj, iX, iY, iZ, "Cannot intersect channel IO", player); error = true; } + } + + if(error) return false; + + for(int i = 0; i < size; i++) { + int iX = x + dir.offsetX * i; + int iY = y + dir.offsetY * i; + int iZ = z + dir.offsetZ * i; + if(i == 0) { + if(type == PileChannelType.FUEL) worldObj.setBlockMetadataWithNotify(iX, iY, iZ, BlockPile.META_FUEL_IN, 3); + if(type == PileChannelType.VENTILATION) worldObj.setBlockMetadataWithNotify(iX, iY, iZ, BlockPile.META_AIR_IN, 3); + if(type == PileChannelType.CONTROL) worldObj.setBlockMetadataWithNotify(iX, iY, iZ, BlockPile.META_CONTROL, 3); + } else if(i == size - 1) { + if(type == PileChannelType.FUEL) worldObj.setBlockMetadataWithNotify(iX, iY, iZ, BlockPile.META_FUEL_OUT, 3); + if(type == PileChannelType.VENTILATION) worldObj.setBlockMetadataWithNotify(iX, iY, iZ, BlockPile.META_AIR_OUT, 3); + if(type == PileChannelType.CONTROL) worldObj.setBlockMetadataWithNotify(iX, iY, iZ, BlockPile.META_CONTROL, 3); + } else { + worldObj.setBlockMetadataWithNotify(iX, iY, iZ, BlockPile.META_CHANNEL, 3); + } + } + + list.add(new PileChannel(x, y, z, dir, size, type)); + + worldObj.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, NTMSounds.VANILLA_PLINK, 1F, 1.25F); + this.markChanged(); + + return true; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + for(PileChannel chan : this.ventilationChannels) { + if(chan.air <= 0) continue; + + int toUse = (int) Math.ceil(chan.air * 5D / 1_000); + chan.air -= toUse; + + if(worldObj.getTotalWorldTime() % 3 != 0) continue; + + double x = chan.entry.getX() + 0.5 + chan.entry.getDir().offsetX * (this.width - 0.375); + double y = chan.entry.getY() + 0.5; + double z = chan.entry.getZ() + 0.5 + chan.entry.getDir().offsetZ * (this.width - 0.375); + Random rand = worldObj.rand; + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "tower"); + data.setFloat("lift", 1F); + data.setFloat("base", 0.125F + rand.nextFloat() * 0.125F); + data.setFloat("max", 1F); + data.setFloat("strafe", 0.0025F); + data.setBoolean("noWind", true); + data.setInteger("life", 20 + worldObj.rand.nextInt(30)); + data.setInteger("color", 0xa0a0a0); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x, y, z), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 150)); + } + } + } + + public void destroy() { + worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.pile_brick); + } + + public static enum PileOrientation { + NORTH_SOUTH, + EAST_WEST, + NEITHER; + + public static PileOrientation getOrientation(ForgeDirection dir) { + if(dir == ForgeDirection.NORTH || dir == ForgeDirection.SOUTH) return NORTH_SOUTH; + if(dir == ForgeDirection.EAST || dir == ForgeDirection.WEST) return EAST_WEST; + return NEITHER; + } + } + + public class PileChannel { // originally called "PileHole", however i didn't want it sounding too sexual + + public final DirPos entry; // first channel block plus direction it faces inward + public final int length; // length of the channel, always equal to the h/w/d size of that axis + public final PileChannelType type; + + public final ItemStack[] rods; + public double heat = 0D; + public int air; + public double control = 1D; // pulled out by default, unlike me who never pulls out + + public PileChannel(int x, int y, int z, ForgeDirection dir) { + this.entry = new DirPos(x, y, z, dir); + this.type = PileChannelType.getChannelType(dir, orientation); + this.length = + type == PileChannelType.CONTROL ? height : + type == PileChannelType.FUEL ? depth : width; + + this.rods = new ItemStack[length]; + } + + public PileChannel(int x, int y, int z, ForgeDirection dir, int length, PileChannelType type) { + this.entry = new DirPos(x, y, z, dir); + this.type = type; + this.length = length; + this.rods = new ItemStack[length]; + } + + public void writeChannelToNBT(NBTTagCompound nbt, String name) { + nbt.setInteger(name + "_x", entry.getX()); + nbt.setInteger(name + "_y", entry.getY()); + nbt.setInteger(name + "_z", entry.getZ()); + nbt.setByte(name + "_d", (byte) entry.getDir().ordinal()); + + if(type == type.FUEL) { + NBTTagList list = new NBTTagList(); + for(int i = 0; i < rods.length; i++) { + if(rods[i] != null) { + NBTTagCompound nbt1 = new NBTTagCompound(); + nbt1.setByte("slot", (byte)i); + rods[i].writeToNBT(nbt1); + list.appendTag(nbt1); + } + } + nbt.setTag("items", list); + } + } + + public void loadItem(ItemStack stack) { + if(stack == null) return; + if(rods.length <= 0) { dropItem(stack, -1); return; } + + for(int i = 0; i < rods.length; i++) { + if(rods[i] == null) { + rods[i] = stack; + return; + + } else { + ItemStack prev = rods[i]; + rods[i] = stack; + stack = prev; + } + } + + if(stack != null) dropItem(stack, length); + } + + public void dropItem(ItemStack stack, int depth) { + int x = entry.getX() + entry.getDir().offsetX * depth; + int y = entry.getY(); + int z = entry.getZ() + entry.getDir().offsetZ * depth; + + EntityItem item = new EntityItem(worldObj, x + 0.5, y + 0.5, z + 0.5, stack); + worldObj.spawnEntityInWorld(item); + } + } + + public PileChannel readChannelFromNBT(NBTTagCompound nbt, String name) { + int x = nbt.getInteger(name + "_x"); + int y = nbt.getInteger(name + "_y"); + int z = nbt.getInteger(name + "_z"); + ForgeDirection dir = ForgeDirection.getOrientation(nbt.getByte(name + "_d")); + + PileChannel chan = new PileChannel(x, y, z, dir); + + if(chan.type == chan.type.FUEL) { + NBTTagList list = nbt.getTagList("fuel", 10); + for(int i = 0; i < list.tagCount(); i++) { + NBTTagCompound nbt1 = list.getCompoundTagAt(i); + byte b0 = nbt1.getByte("slot"); + if(b0 >= 0 && b0 < chan.rods.length) { + chan.rods[b0] = ItemStack.loadItemStackFromNBT(nbt1); + } + } + } + + return chan; + } + + public static enum PileChannelType { + FUEL, VENTILATION, CONTROL; + + public static PileChannelType getChannelType(ForgeDirection channelDir, PileOrientation pileOrientation) { + + if(channelDir == ForgeDirection.UP || channelDir == ForgeDirection.DOWN) { + return PileChannelType.CONTROL; + } else if(PileOrientation.getOrientation(channelDir) == pileOrientation) { + return PileChannelType.FUEL; + } else { + return PileChannelType.VENTILATION; + } + } + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileDeviceBase.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileDeviceBase.java new file mode 100644 index 000000000..1d0ada371 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileDeviceBase.java @@ -0,0 +1,27 @@ +package com.hbm.tileentity.machine.pile; + +import com.hbm.tileentity.TileEntityTickingBase; + +import io.netty.buffer.ByteBuf; +import net.minecraftforge.common.util.ForgeDirection; + +public abstract class TileEntityPileDeviceBase extends TileEntityTickingBase { + + public int chanNum; + + public ForgeDirection getOrientation() { + return ForgeDirection.getOrientation(this.getBlockMetadata() % 4 + 2); + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeInt(this.chanNum); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.chanNum = buf.readInt(); + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java index c5480f753..d1e9f97b6 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileFuel.java @@ -10,6 +10,7 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; +@Deprecated public class TileEntityPileFuel extends TileEntityPileBase implements IPileNeutronReceiver { public int heat; diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileLoader.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileLoader.java new file mode 100644 index 000000000..503d7684e --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileLoader.java @@ -0,0 +1,172 @@ +package com.hbm.tileentity.machine.pile; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.machine.pile.BlockPile; +import com.hbm.items.ModItems; +import com.hbm.main.NTMSounds; +import com.hbm.tileentity.machine.pile.TileEntityPileCore.PileChannel; +import com.hbm.util.Compat; + +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityPileLoader extends TileEntityPileDeviceBase implements ISidedInventory{ + + public double syncLevel; + public double level; + public double lastLevel; + + public int turnProgress; + + public static final double SPEED = 1D / 7D; + + public boolean loading = false; + public int delay = 0; + public ItemStack syncStack; + public ItemStack stack; + public boolean wasRedstone; + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + ForgeDirection dir = getOrientation(); + PileChannel fuelChan = null; + + int x = xCoord - dir.offsetX; + int y = yCoord; + int z = zCoord - dir.offsetZ; + + if(worldObj.getBlock(x, y, z) == ModBlocks.pile_block && worldObj.getBlockMetadata(x, y, z) == BlockPile.META_FUEL_IN) { + TileEntity tile = Compat.getTileStandard(worldObj, x, y, z); + + if(tile instanceof TileEntityPileBaseMK2) { + TileEntityPileBaseMK2 pile = (TileEntityPileBaseMK2) tile; + TileEntityPileCore core = pile.getCore(); + + if(core != null) { + fuelChan = core.getFuelChannel(x, y, z); + + if(fuelChan != null) { + this.chanNum = core.getFuelChannelNum(fuelChan); + } + } + } + } + + boolean redstone = worldObj.getIndirectPowerOutput(xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ, dir.getOpposite().ordinal()); + if(redstone && !wasRedstone && this.delay <= 0 && this.level <= 0) this.loading = true; + this.wasRedstone = redstone; + + if(this.delay > 0) { + this.delay--; + } else { + + if(loading) { + + if(this.level == 0) worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, NTMSounds.GUN_BOLT_OPEN, this.getVolume(1F), 1F); + + this.level += SPEED; + if(this.level >= 1D) { + this.level = 1D; + this.loading = false; + this.delay = 5; + } + } else { + + if(this.level == 1) { + worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, NTMSounds.GUN_BOLT_OPEN, this.getVolume(1F), 0.75F); + if(fuelChan != null) { + fuelChan.loadItem(stack); + this.setInventorySlotContents(0, null); + } + } + + if(this.level > 0D) { + this.level -= SPEED; + if(this.level < 0D) this.level = 0D; + } + } + } + + this.networkPackNT(35); + + } else { + + this.lastLevel = this.level; + + if(this.turnProgress > 0) { + this.level = this.level + ((this.syncLevel - this.level) / (double) this.turnProgress); + --this.turnProgress; + } else { + this.level = this.syncLevel; + } + } + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeDouble(this.level); + if(this.stack != null) { + buf.writeInt(Item.getIdFromItem(this.stack.getItem())); + buf.writeShort(this.stack.getItemDamage()); + } else { + buf.writeInt(-1); + } + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + double lastSync = this.syncLevel; + this.syncLevel = buf.readDouble(); + int itemId = buf.readInt(); + if(itemId != -1) this.syncStack = new ItemStack(Item.getItemById(itemId), 1, buf.readShort()); + else this.syncStack = null; + + if(this.syncLevel != lastSync) this.turnProgress = 2; + } + + public static boolean isItemLoadable(ItemStack stack) { + return stack.getItem() == ModItems.pile_rod; + } + + @Override + public ItemStack decrStackSize(int slot, int amount) { + if(amount == 1 && this.stack != null) { + ItemStack ret = stack.copy(); + this.setInventorySlotContents(0, null); + return ret; + } + return null; + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) { + this.stack = stack; + this.markDirty(); + } + + @Override public int getSizeInventory() { return 1; } + @Override public ItemStack getStackInSlot(int slot) { return stack; } + @Override public ItemStack getStackInSlotOnClosing(int slot) { return null; } + @Override public String getInventoryName() { return "NULL"; } + @Override public boolean hasCustomInventoryName() { return false; } + @Override public int getInventoryStackLimit() { return 1; } + + @Override public boolean isUseableByPlayer(EntityPlayer player) { return false; } + @Override public void openInventory() { } + @Override public void closeInventory() { } + + @Override public int[] getAccessibleSlotsFromSide(int side) { return new int[] {0}; } + @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return isItemLoadable(stack); } + @Override public boolean canInsertItem(int slot, ItemStack stack, int side) { return isItemLoadable(stack); } + @Override public boolean canExtractItem(int slot, ItemStack stack, int side) { return false; } +} diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileNeutronDetector.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileNeutronDetector.java index c05f164fd..977653142 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileNeutronDetector.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileNeutronDetector.java @@ -6,6 +6,7 @@ import com.hbm.blocks.machine.pile.BlockGraphiteNeutronDetector; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +@Deprecated public class TileEntityPileNeutronDetector extends TileEntity implements IPileNeutronReceiver { public int lastNeutrons; diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileSource.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileSource.java index 6b38b7875..cb5cf84ea 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileSource.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileSource.java @@ -2,6 +2,7 @@ package com.hbm.tileentity.machine.pile; import com.hbm.blocks.ModBlocks; +@Deprecated public class TileEntityPileSource extends TileEntityPileBase { @Override diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java new file mode 100644 index 000000000..149c4bec4 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileVent.java @@ -0,0 +1,102 @@ +package com.hbm.tileentity.machine.pile; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.machine.pile.BlockPile; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.tileentity.machine.pile.TileEntityPileCore.PileChannel; +import com.hbm.util.BobMathUtil; +import com.hbm.util.Compat; + +import api.hbm.fluidmk2.IFluidStandardReceiverMK2; +import io.netty.buffer.ByteBuf; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityPileVent extends TileEntityPileDeviceBase implements IFluidStandardReceiverMK2 { + + public FluidTank compair; + public boolean isActive = false; + + public float fan; + public float lastFan; + + public TileEntityPileVent() { + this.compair = new FluidTank(Fluids.AIR, 4_000).withPressure(1); + } + + @Override public FluidTank[] getAllTanks() { return new FluidTank[] {compair}; } + @Override public FluidTank[] getReceivingTanks() { return new FluidTank[] {compair}; } + + @Override + public boolean canConnect(FluidType type, ForgeDirection dir) { + if(type != compair.getTankType()) return false; + ForgeDirection conDir = getOrientation(); + return dir == conDir; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + ForgeDirection dir = getOrientation(); + this.trySubscribe(compair.getTankType(), worldObj, xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ, dir); + + this.isActive = false; + + int x = xCoord - dir.offsetX; + int y = yCoord; + int z = zCoord - dir.offsetZ; + + if(worldObj.getBlock(x, y, z) == ModBlocks.pile_block && worldObj.getBlockMetadata(x, y, z) == BlockPile.META_AIR_IN) { + TileEntity tile = Compat.getTileStandard(worldObj, x, y, z); + + if(tile instanceof TileEntityPileBaseMK2) { + TileEntityPileBaseMK2 pile = (TileEntityPileBaseMK2) tile; + TileEntityPileCore core = pile.getCore(); + + if(core != null) { + PileChannel ventChan = core.getVentilationChannel(x, y, z); + + if(ventChan != null) { + this.chanNum = core.getVentilationChannelNum(ventChan); + int toFill = BobMathUtil.min(compair.getFill(), 1_000 - ventChan.air); + ventChan.air += toFill; + this.compair.setFill(this.compair.getFill() - toFill); + this.isActive = toFill > 0; + } + } + } + } + + this.networkPackNT(35); + + } else { + + this.lastFan = fan; + if(this.isActive) { + this.fan += 45; + if(worldObj.rand.nextInt(20) == 0) worldObj.spawnParticle("cloud", xCoord + 0.5, yCoord + 1, zCoord + 0.5, 0, 0.05, 0); + } + + if(this.fan >= 360) { + this.lastFan -= 360; + this.fan -= 360; + } + } + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBoolean(this.isActive); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.isActive = buf.readBoolean(); + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKTerminal.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKTerminal.java index 493ff0a21..cf9dce471 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKTerminal.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKTerminal.java @@ -12,6 +12,7 @@ import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.tileentity.network.RTTYSystem; import com.hbm.util.BufferUtil; +import api.hbm.redstoneoverradio.IRORInteractive; import cpw.mods.fml.common.Optional; import io.netty.buffer.ByteBuf; import li.cil.oc.api.machine.Arguments; @@ -24,7 +25,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityRBMKTerminal extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityRBMKTerminal extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver, SimpleComponent, CompatHandler.OCComponent, IRORInteractive { public String[] history = new String[17]; public String channel = ""; @@ -249,4 +250,46 @@ public class TileEntityRBMKTerminal extends TileEntityLoadedBase implements IGUI markDirty(); return new Object[] {true}; } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_FUNCTION + "clear", + PREFIX_FUNCTION + "write" + NAME_SEPARATOR + "text", + PREFIX_FUNCTION + "set" + NAME_SEPARATOR + "text", + PREFIX_FUNCTION + "submit" + NAME_SEPARATOR + "command", + }; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if((PREFIX_FUNCTION + "clear").equals(name)) { + for(int i = 0; i < history.length; i++) history[i] = ""; + this.markChanged(); + return null; + } + + String allParams = String.join(" ", params); + + if((PREFIX_FUNCTION + "write").equals(name)) { + this.push(allParams); + this.markChanged(); + return null; + } + + if(name.startsWith(PREFIX_FUNCTION + "set")) { + int line = IRORInteractive.parseInt(name.substring(PREFIX_FUNCTION.length() + 3), 1, 17) - 1; + this.history[line] = allParams; + this.markChanged(); + return null; + } + + if((PREFIX_FUNCTION + "submit").equals(name)) { + this.eval(allParams); + return null; + } + + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index d57e98720..cc6c1011a 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -294,4 +294,3 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU return new int[] {0, 9}; } } - diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityFluidCounterValve.java b/src/main/java/com/hbm/tileentity/network/TileEntityFluidCounterValve.java index 285b49ce0..9ccbc2508 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityFluidCounterValve.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityFluidCounterValve.java @@ -140,7 +140,7 @@ public class TileEntityFluidCounterValve extends TileEntityPipeBaseNT implements PREFIX_VALUE + "value", PREFIX_VALUE + "state", PREFIX_FUNCTION + "reset", - PREFIX_FUNCTION + "setState" + NAME_SEPARATOR + "state", + PREFIX_FUNCTION + "setstate" + NAME_SEPARATOR + "state", }; } @@ -149,7 +149,7 @@ public class TileEntityFluidCounterValve extends TileEntityPipeBaseNT implements if(name.equals(PREFIX_FUNCTION + "reset")) { counter = 0; markDirty(); - } else if(name.equals(PREFIX_FUNCTION + "setState")) { + } else if(name.equals(PREFIX_FUNCTION + "setstate")) { setState(IRORInteractive.parseInt(params[0], 0, 1)); } return null; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioAUTOCAL.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioAUTOCAL.java index 17a835664..b0d991443 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioAUTOCAL.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioAUTOCAL.java @@ -5,7 +5,7 @@ import com.hbm.inventory.gui.GUIScreenRadioAUTOCAL; import com.hbm.module.IParse; import com.hbm.module.IParse.EnumStatementReturn; import com.hbm.module.IParse.ParseContext; -import com.hbm.module.ParseMSES1; +import com.hbm.module.ParseMSES1Ext1; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityTickingBase; import com.hbm.util.BufferUtil; @@ -28,16 +28,11 @@ public class TileEntityRadioAUTOCAL extends TileEntityTickingBase implements ICo public boolean autoReboot = false; public String[] script = new String[0]; - public IParse msesv1 = new ParseMSES1(); + public IParse msesv1ext = new ParseMSES1Ext1(); public ParseContext ctx; public String[] history = new String[] {"", "", "", "", "", ""}; - @Override - public String getInventoryName() { - return "container.autocal"; - } - @Override public void updateEntity() { @@ -67,15 +62,16 @@ public class TileEntityRadioAUTOCAL extends TileEntityTickingBase implements ICo int index = this.ctx.current; this.ctx.current ++; String line = this.script[index]; - EnumStatementReturn ret = msesv1.eval(ctx, line); + EnumStatementReturn ret = msesv1ext.eval(ctx, line); if(ret != EnumStatementReturn.SKIP) pushMsg(index + ": " + line); - this.history[0] = "Buffer: " + ctx.buffer; + this.history[0] = "Buffer: " + ctx.readBuffer(); if(ret == EnumStatementReturn.END_TICK) break; if(ret == EnumStatementReturn.SHUTDOWN) this.stop("Program requested shutdown"); if(!this.ignoreError) { if(ret == EnumStatementReturn.UNRECOGNIZED_COMMAND) this.stop("Unrecognized command"); if(ret == EnumStatementReturn.PARAMETER_ERROR) this.stop("Parameter error"); if(ret == EnumStatementReturn.UNDEFINED) this.stop("Undefined behavior"); + if(ret == EnumStatementReturn.STACK_EXCEEDED) this.stop("Stack exceeded capacity"); } if(ret == EnumStatementReturn.SKIP) i--; } catch(Exception ex) { @@ -129,19 +125,14 @@ public class TileEntityRadioAUTOCAL extends TileEntityTickingBase implements ICo this.ignoreError = nbt.getBoolean("ignoreError"); this.autoReboot = nbt.getBoolean("autoReboot"); - this.ctx = new ParseContext(null); - this.ctx.current = nbt.getInteger("current"); - this.ctx.clockSpeed = nbt.getInteger("clockSpeed"); - this.ctx.buffer = nbt.getString("buffer"); - NBTTagList lineList = nbt.getTagList("script", 8); this.script = new String[lineList.tagList.size()]; for(int i = 0; i < script.length; i++) { this.script[i] = lineList.getStringTagAt(i); - this.msesv1.generateJumpPoints(ctx, script[i], i); } - - this.ctx.variables = nbt.getCompoundTag("variables"); + + this.ctx = new ParseContext(null); + this.ctx.readFromNBT(nbt, script, msesv1ext); } @Override @@ -151,17 +142,14 @@ public class TileEntityRadioAUTOCAL extends TileEntityTickingBase implements ICo nbt.setBoolean("isOn", isOn); nbt.setBoolean("ignoreError", ignoreError); nbt.setBoolean("autoReboot", autoReboot); - - nbt.setInteger("current", ctx.current); - nbt.setInteger("clockSpeed", ctx.clockSpeed); - nbt.setString("buffer", ctx.buffer); NBTTagList lineList = new NBTTagList(); for(String line : this.script) { lineList.appendTag(new NBTTagString(line)); } nbt.setTag("script", lineList); - nbt.setTag("variables", this.ctx.variables); + + this.ctx.writeToNBT(nbt); } @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } @@ -186,7 +174,7 @@ public class TileEntityRadioAUTOCAL extends TileEntityTickingBase implements ICo this.script = data.getString("payload").split("\n"); for(int i = 0; i < script.length; i++) { script[i] = script[i].trim(); - this.msesv1.generateJumpPoints(ctx, script[i], i); + this.msesv1ext.generateJumpPoints(ctx, script[i], i); } if(this.isOn) stop("Script has changed"); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchReader.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchReader.java index 15e0465e9..2a4f9453b 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchReader.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchReader.java @@ -1,5 +1,7 @@ package com.hbm.tileentity.network; +import java.util.Locale; + import com.hbm.interfaces.IControlReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.BufferUtil; @@ -44,7 +46,7 @@ public class TileEntityRadioTorchReader extends TileEntityLoadedBase implements if(channel == null || channel.isEmpty()) continue; if(name == null || name.isEmpty()) continue; - String value = prov.provideRORValue(IRORValueProvider.PREFIX_VALUE + name); + String value = prov.provideRORValue(IRORValueProvider.PREFIX_VALUE + name.toLowerCase(Locale.US)); if(value == null) continue; if(polling || !value.equals(previous)) { diff --git a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumaticMachineBase.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumaticMachineBase.java new file mode 100644 index 000000000..681739cf4 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumaticMachineBase.java @@ -0,0 +1,69 @@ +package com.hbm.tileentity.network.pneumatic; + +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoTube.PneumaticNode; +import com.hbm.uninos.UniNodespace; +import com.hbm.uninos.networkproviders.PneumaticNetworkProvider; +import com.hbm.util.fauxpointtwelve.BlockPos; + +import api.hbm.ntl.IPneumaticConnector; +import api.hbm.ntl.StackCache; + +public abstract class TileEntityPneumaticMachineBase extends TileEntityMachineBase implements IPneumaticConnector, IGUIProvider { + + protected PneumaticNode node; + public StackCache cache; + + public TileEntityPneumaticMachineBase(int slotCount) { + super(slotCount); + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(this.node == null || this.node.expired) { + if(this.cache != null) this.cache.dissolveCache(); + + this.node = (PneumaticNode) UniNodespace.getNode(worldObj, xCoord, yCoord, zCoord, PneumaticNetworkProvider.THE_PROVIDER); + + if(this.node == null || this.node.expired) { + this.node = (PneumaticNode) new PneumaticNode(new BlockPos(xCoord, yCoord, zCoord)).setStandardConnections(xCoord, yCoord, zCoord); + UniNodespace.createNode(worldObj, this.node); + } + } + + if(this.cache == null || this.cache.hasExpired) { + this.cache = new StackCache(xCoord, yCoord, zCoord); + } + + if(this.node != null && this.node.hasValidNet()) { + this.node.net.addStackCache(cache); + } + } + } + + @Override + public void invalidate() { + super.invalidate(); + + if(!worldObj.isRemote && this.node != null) { + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, PneumaticNetworkProvider.THE_PROVIDER); + } + + if(this.cache != null) this.cache.dissolveCache(); + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + + if(!worldObj.isRemote && this.node != null) { + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, PneumaticNetworkProvider.THE_PROVIDER); + } + + if(this.cache != null) this.cache.dissolveCache(); + } +} diff --git a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumaticStorageBase.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumaticStorageBase.java new file mode 100644 index 000000000..8c62229e6 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumaticStorageBase.java @@ -0,0 +1,183 @@ +package com.hbm.tileentity.network.pneumatic; + +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoTube.PneumaticNode; +import com.hbm.uninos.UniNodespace; +import com.hbm.uninos.networkproviders.PneumaticNetwork; +import com.hbm.uninos.networkproviders.PneumaticNetworkProvider; +import com.hbm.util.fauxpointtwelve.BlockPos; + +import api.hbm.fluidmk2.IFluidStandardReceiverMK2; +import api.hbm.ntl.IPneumaticConnector; +import api.hbm.ntl.ISlotMonitorProvider; +import api.hbm.ntl.SlotMonitor; +import api.hbm.ntl.StackCache; +import api.hbm.ntl.StackCache.CacheSlot; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +public abstract class TileEntityPneumaticStorageBase extends TileEntityMachineBase implements IPneumaticConnector, IFluidStandardReceiverMK2, ISlotMonitorProvider, IControlReceiver, IGUIProvider { + + public FluidTank compair; + public SlotMonitor[] monitors; + + protected PneumaticNode node; + protected boolean wasAvailable = false; + + public TileEntityPneumaticStorageBase(int slots) { + super(slots); + this.compair = new FluidTank(Fluids.AIR, 4_000).withPressure(1); + this.monitors = new SlotMonitor[slots]; + + for(int i = 0; i < monitors.length; i++) this.monitors[i] = new SlotMonitor(i, this); + } + + @Override + public boolean hasPermission(EntityPlayer player) { + return this.isUseableByPlayer(player); + } + + @Override + public void receiveControl(NBTTagCompound data) { + + if(data.hasKey("pressure")) { + int pressure = this.compair.getPressure() + 1; + if(pressure > 5) pressure = 1; + this.compair.setTankType(Fluids.AIR); + this.compair.withPressure(pressure); + for(SlotMonitor monitor : this.monitors) monitor.availabilityHasChanged(); + } + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + boolean isAvailable = this.isAvailable(); + + if(isAvailable != wasAvailable) { + this.wasAvailable = isAvailable; + for(SlotMonitor monitor : monitors) monitor.availabilityHasChanged(); + } + + if(this.node == null || this.node.expired) { + this.node = (PneumaticNode) UniNodespace.getNode(worldObj, xCoord, yCoord, zCoord, PneumaticNetworkProvider.THE_PROVIDER); + + if(this.node == null || this.node.expired) { + this.node = (PneumaticNode) new PneumaticNode(new BlockPos(xCoord, yCoord, zCoord)).setStandardConnections(xCoord, yCoord, zCoord); + UniNodespace.createNode(worldObj, this.node); + } + } + + if(node != null && !node.expired && node.hasValidNet()) { + this.node.net.storages.add(this); + } + + if(worldObj.getTotalWorldTime() % 10 == 0) for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + this.trySubscribe(compair.getTankType(), worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); + } + + if(this.compair.getFill() > 0) { + int consumption = (int) Math.ceil(this.compair.getFill() * 9 / this.compair.getMaxFill()) + 1; + this.compair.setFill(Math.max(this.compair.getFill() - consumption, 0)); + } + + this.updateMonitors(); + this.networkPackNT(15); + } + } + + public boolean isAvailable() { + return this.isLoaded && !this.isInvalid() && this.compair.getFill() > 0; + } + + @Override + public void invalidate() { + super.invalidate(); + + if(!worldObj.isRemote) { + + for(SlotMonitor monitor : this.monitors) { + for(CacheSlot cache : monitor.viewedBy) cache.removeMonitor(monitor); + } + + if(this.node != null) { + + if(node.hasValidNet()) { + this.node.net.storages.remove(this); + } + + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, PneumaticNetworkProvider.THE_PROVIDER); + } + } + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + + for(SlotMonitor monitor : this.monitors) { + for(CacheSlot cache : monitor.viewedBy) cache.removeMonitor(monitor); + } + + if(node != null && node.hasValidNet()) { + this.node.net.storages.remove(this); + } + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + compair.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + compair.deserialize(buf); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.compair.readFromNBT(nbt, "tank"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + this.compair.writeToNBT(nbt, "tank"); + } + + @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return true; } + + @Override public FluidTank[] getAllTanks() { return new FluidTank[] {compair}; } + @Override public FluidTank[] getReceivingTanks() { return new FluidTank[] {compair}; } + + @Override public SlotMonitor[] getMonitors() { return monitors; } + @Override public ItemStack getSlotAt(int index) { return this.getStackInSlot(index); } + + @Override + public PneumaticNetwork getRelevantNetwork() { + if(this.node == null || this.node.expired || !this.node.hasValidNet()) return null; + return this.node.net; + } + + @Override + public boolean isAvailableToCache(StackCache cache) { + if(!isAvailable()) return false; + int range = TileEntityPneumoTube.getRangeFromPressure(this.compair.getPressure()); + int dX = xCoord - cache.x; + int dY = yCoord - cache.y; + int dZ = zCoord - cache.z; + return dX * dX + dY * dY + dZ * dZ <= range * range; + } +} diff --git a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageAccess.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageAccess.java index 140b396de..f138d180d 100644 --- a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageAccess.java +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageAccess.java @@ -14,7 +14,6 @@ import api.hbm.ntl.StackCache; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; public class TileEntityPneumoStorageAccess extends TileEntityLoadedBase implements IPneumaticConnector, IGUIProvider { @@ -69,12 +68,6 @@ public class TileEntityPneumoStorageAccess extends TileEntityLoadedBase implemen if(this.cache != null) this.cache.dissolveCache(); } - @Override - public boolean canConnectPneumatic(ForgeDirection dir) { - ForgeDirection selfdir = ForgeDirection.getOrientation(getBlockMetadata()); - return dir == selfdir.getOpposite(); - } - @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerPneumoStorageAccess(player.inventory, this); } @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPneumoStorageAccess(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageClutter.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageClutter.java index 0159fdaf7..cc7b1f798 100644 --- a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageClutter.java +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageClutter.java @@ -1,42 +1,22 @@ package com.hbm.tileentity.network.pneumatic; +import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerPneumoStorageClutter; -import com.hbm.inventory.fluid.Fluids; -import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIPneumoStorageClutter; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.TileEntityMachineBase; -import com.hbm.tileentity.network.pneumatic.TileEntityPneumoTube.PneumaticNode; -import com.hbm.uninos.UniNodespace; -import com.hbm.uninos.networkproviders.PneumaticNetwork; -import com.hbm.uninos.networkproviders.PneumaticNetworkProvider; -import com.hbm.util.fauxpointtwelve.BlockPos; import api.hbm.fluidmk2.IFluidStandardReceiverMK2; import api.hbm.ntl.IPneumaticConnector; import api.hbm.ntl.ISlotMonitorProvider; -import api.hbm.ntl.SlotMonitor; -import api.hbm.ntl.StackCache; -import api.hbm.ntl.StackCache.CacheSlot; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -public class TileEntityPneumoStorageClutter extends TileEntityMachineBase implements IPneumaticConnector, IFluidStandardReceiverMK2, ISlotMonitorProvider, IGUIProvider { - - public FluidTank compair; - public SlotMonitor[] monitors; - - protected PneumaticNode node; - protected boolean wasAvailable = false; +public class TileEntityPneumoStorageClutter extends TileEntityPneumaticStorageBase implements IPneumaticConnector, IFluidStandardReceiverMK2, ISlotMonitorProvider, IControlReceiver, IGUIProvider { public TileEntityPneumoStorageClutter() { super(6 * 9); - this.compair = new FluidTank(Fluids.AIR, 4_000).withPressure(1); - this.monitors = new SlotMonitor[6 * 9]; - - for(int i = 0; i < monitors.length; i++) this.monitors[i] = new SlotMonitor(i, this); } @Override @@ -44,79 +24,6 @@ public class TileEntityPneumoStorageClutter extends TileEntityMachineBase implem return "container.pneumoStorageClutter"; } - @Override - public void updateEntity() { - - if(!worldObj.isRemote) { - - boolean isAvailable = this.isAvailable(); - - if(isAvailable != wasAvailable) { - this.wasAvailable = isAvailable; - for(SlotMonitor monitor : monitors) monitor.availabilityHasChanged(); - } - - if(this.node == null || this.node.expired) { - this.node = (PneumaticNode) UniNodespace.getNode(worldObj, xCoord, yCoord, zCoord, PneumaticNetworkProvider.THE_PROVIDER); - - if(this.node == null || this.node.expired) { - this.node = (PneumaticNode) new PneumaticNode(new BlockPos(xCoord, yCoord, zCoord)).setStandardConnections(xCoord, yCoord, zCoord); - UniNodespace.createNode(worldObj, this.node); - } - } - - if(node != null && !node.expired && node.hasValidNet()) { - this.node.net.storages.add(this); - } - - this.updateMonitors(); - this.networkPackNT(15); - } - } - - public boolean isAvailable() { - return this.isLoaded && !this.isInvalid(); - } - - @Override - public void invalidate() { - super.invalidate(); - - if(!worldObj.isRemote) { - - for(SlotMonitor monitor : this.monitors) { - for(CacheSlot cache : monitor.viewedBy) cache.removeMonitor(monitor); - } - - if(this.node != null) { - - if(node.hasValidNet()) { - this.node.net.storages.remove(this); - } - - UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, PneumaticNetworkProvider.THE_PROVIDER); - } - } - } - - @Override - public void onChunkUnload() { - super.onChunkUnload(); - - for(SlotMonitor monitor : this.monitors) { - for(CacheSlot cache : monitor.viewedBy) cache.removeMonitor(monitor); - } - - if(node != null && node.hasValidNet()) { - this.node.net.storages.remove(this); - } - } - - @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return true; } - - @Override public FluidTank[] getAllTanks() { return new FluidTank[] {compair}; } - @Override public FluidTank[] getReceivingTanks() { return new FluidTank[] {compair}; } - @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerPneumoStorageClutter(player.inventory, this); @@ -126,19 +33,39 @@ public class TileEntityPneumoStorageClutter extends TileEntityMachineBase implem public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPneumoStorageClutter(player.inventory, this); } - - @Override public SlotMonitor[] getMonitors() { return monitors; } - @Override public ItemStack getSlotAt(int index) { return this.getStackInSlot(index); } + @Override public long getAmountAt(int index) { ItemStack stack = getSlotAt(index); return stack != null ? stack.stackSize : 0; } + @Override public boolean allowTypeSetting() { return true; } @Override - public PneumaticNetwork getRelevantNetwork() { - if(this.node == null || this.node.expired || !this.node.hasValidNet()) return null; - return this.node.net; + public long useUpItem(int index, long amount) { + ItemStack stack = slots[index]; + if(stack != null) { + int toRemove = (int) Math.min(stack.stackSize, amount); + this.decrStackSize(index, toRemove); + return amount - toRemove; + } + return amount; } @Override - public boolean isAvailableToCache(StackCache cache) { - return this.isLoaded && !this.isInvalid(); + public long addItem(int index, long amount) { + ItemStack stack = slots[index]; + if(stack != null) { + int capacity = Math.min(stack.getMaxStackSize(), this.getInventoryStackLimit()); + int toAdd = (int) Math.min(amount, capacity - stack.stackSize); + stack.stackSize += toAdd; + return amount - toAdd; + } + return amount; + } + + @Override + public long setupType(int index, ItemStack zeroStack, long amount) { + int capacity = Math.min(zeroStack.getMaxStackSize(), this.getInventoryStackLimit()); + int finalSize = (int) Math.min(amount, capacity); + slots[index] = zeroStack.copy(); + slots[index].stackSize = finalSize; + return amount - finalSize; } } diff --git a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageExporter.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageExporter.java new file mode 100644 index 000000000..d67affd4a --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageExporter.java @@ -0,0 +1,385 @@ +package com.hbm.tileentity.network.pneumatic; + +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.container.ContainerPneumoStorageExporter; +import com.hbm.inventory.gui.GUIPneumoStorageExporter; +import com.hbm.tileentity.IControlReceiverFilter; +import com.hbm.tileentity.network.RTTYSystem; +import com.hbm.util.BobMathUtil; + +import api.hbm.ntl.StackCache; +import api.hbm.ntl.StackCache.CacheSlot; +import api.hbm.redstoneoverradio.IRORInteractive; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class TileEntityPneumoStorageExporter extends TileEntityPneumaticMachineBase implements IRORInteractive, IControlReceiver, IControlReceiverFilter { + + /** If requests should be pulled repeatedly every tick */ + public boolean continuousRequest = false; + /** If ROR configuration has taken place, ignore manually defined filters entirely */ + public boolean rorConfiguredMode = false; + /** What strategy to use for handling request filters */ + public int requestMode = 0; + /** Item ID and meta pairs with amount for RoR controlled filters */ + public short[][] rorFilters = new short[9][3]; + /** Delay for non-forced (i.e. continuous request) grabs, if not successful */ + public int slotDelay[] = new int[9]; + public static final int SLOT_DELAY = 10; + + /** Each slot individually tries to pull as much as it can of the configured item */ + public static final int MODE_AS_MUCH_AS_POSSIBLE = 0; + /** Each slot individually tries to pull the exact quantity configured */ + public static final int MODE_FULL_STACK = 1; + /** All request slots try to pull the desired quantities simultaneously */ + public static final int MODE_FULL_REQUEST = 2; + + public boolean lastRedstone = false; + + public int[] SLOT_ACCESS = new int[] {9, 10, 11, 12, 13, 14, 15, 16, 17}; + + public TileEntityPneumoStorageExporter() { + super(18); + } + + @Override + public String getName() { + return "container.pneumoStorageExporter"; + } + + @Override public boolean canExtractItem(int slot, ItemStack itemStack, int side) { return slot >= 9; } + @Override public int[] getAccessibleSlotsFromSide(int side) { return SLOT_ACCESS; } + + @Override + public void updateEntity() { + super.updateEntity(); + + if(!worldObj.isRemote) { + + for(int i = 0; i < 9; i++) { + if(slotDelay[i] > 0) slotDelay[i]--; + } + + boolean redstone = worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord); + + if(continuousRequest) { + this.doRequest(false); + } else { + if(redstone && !lastRedstone) this.doRequest(true); + } + + this.lastRedstone = redstone; + + this.networkPackNT(15); + } + } + + public void doRequest(boolean force) { + + if(this.requestMode != MODE_FULL_REQUEST) { + // handle all filters individually + for(int i = 0; i < 9; i++) if(!requestSlot(i, force)) this.slotDelay[i] = SLOT_DELAY; + } else { + + // check filter delay if forced pulls aren't active + if(!force) for(int i = 0; i < 9; i++) { + short[] filter = this.getFilter(i); + if(filter != null && slotDelay[i] > 0) return; + } + + // check if filter demands are met and space is free + for(int i = 0; i < 9; i++) { + short[] filter = this.getFilter(i); + if(filter == null) continue; + + int itemId = filter[0]; + Item item = Item.getItemById(itemId); + int meta = filter[1]; + int requestSize = filter[2]; + + int existingSize = 0; + ItemStack existingStack = slots[i + 9]; + + if(existingStack != null) { + if(existingStack.getItem() == item && existingStack.getItemDamage() == meta && !existingStack.hasTagCompound()) { + existingSize = existingStack.stackSize; + } else { + this.slotDelay[i] = SLOT_DELAY; + return; + } + } + + ItemStack newStack = new ItemStack(item, 1, meta); + int capacityLeft = newStack.getMaxStackSize() - existingSize; + + if(capacityLeft < requestSize || getAvailability(itemId, meta) < requestSize) { + this.slotDelay[i] = SLOT_DELAY; + return; + } + } + + // everything is good, pull items. continues should not happen, but are in place nonetheless + for(int i = 0; i < 9; i++) { + short[] filter = this.getFilter(i); + if(filter == null) continue; + + int itemId = filter[0]; + Item item = Item.getItemById(itemId); + int meta = filter[1]; + int requestSize = filter[2]; + + int existingSize = 0; + ItemStack existingStack = slots[i + 9]; + if(existingStack != null) existingSize = existingStack.stackSize; + + ItemStack newStack = new ItemStack(item, 1, meta); + + long hash = StackCache.getStackIdentity(itemId, meta, null); + if(hash == this.cache.getNullIdentity()) continue; // safeguard + + CacheSlot cacheSlot = this.cache.cacheSlots.get(hash); + if(cacheSlot == null) continue; // safeguard + + slots[i + 9] = newStack; + slots[i + 9].stackSize = existingSize + (int) this.cache.consumeItemsAndReturnQuantity(newStack, requestSize); + } + + this.markChanged(); + } + } + + /** Returns false if the slot delay should be reset (unsuccessful) or true of not (successful or delay still active) */ + public boolean requestSlot(int slot, boolean force) { + + if(!force && slotDelay[slot] > 0) return true; + if(this.cache == null || this.cache.hasExpired) return false; + + short[] filter = this.getFilter(slot); + if(filter == null) return false; + + int itemId = filter[0]; + Item item = Item.getItemById(itemId); + int meta = filter[1]; + int requestSize = filter[2]; + + int existingSize = 0; + ItemStack existingStack = slots[slot + 9]; + + if(existingStack != null) { + if(existingStack.getItem() == item && existingStack.getItemDamage() == meta && !existingStack.hasTagCompound()) { + existingSize = existingStack.stackSize; + } else { + return false; + } + } + + ItemStack newStack = new ItemStack(item, 1, meta); + int capacityLeft = newStack.getMaxStackSize() - existingSize; + + // any non-AMAP mode will fail if it can't insert that much before we even check availability from the pneumo sys + if(capacityLeft < requestSize && this.requestMode != MODE_AS_MUCH_AS_POSSIBLE) return false; + long hash = StackCache.getStackIdentity(itemId, meta, null); + if(hash == this.cache.getNullIdentity()) return false; + + CacheSlot cacheSlot = this.cache.cacheSlots.get(hash); + if(cacheSlot == null) return false; + + // any non-AMAP mode will fail if the system doesn't have the requested amount + if(cacheSlot.stacksize < requestSize && this.requestMode != MODE_AS_MUCH_AS_POSSIBLE) return false; + if(cacheSlot.stacksize <= 0) return false; + + int toPull = (int) BobMathUtil.min(requestSize, cacheSlot.stacksize, capacityLeft); + + slots[slot + 9] = newStack; + slots[slot + 9].stackSize = existingSize + (int) this.cache.consumeItemsAndReturnQuantity(newStack, toPull); + this.markChanged(); + + return true; + } + + /** Returns item id, meta and request size for the given filter. Returns null if no filter is specified */ + public short[] getFilter(int slot) { + if(rorConfiguredMode) { + if(Item.getItemById(rorFilters[slot][0]) == null) return null; + return rorFilters[slot]; + } else { + if(slots[slot] != null) { + ItemStack stack = slots[slot]; + return new short[] {(short) Item.getIdFromItem(stack.getItem()), (short) stack.getItemDamage(), (short) stack.stackSize}; + } + return null; + } + } + + public long getAvailability(int item, int meta) { + if(this.cache == null || this.cache.hasExpired) return 0; + long hash = this.cache.getStackIdentity(item, meta, null); + if(hash == this.cache.getNullIdentity()) return 0; + CacheSlot slot = this.cache.cacheSlots.get(hash); + if(slot == null) return 0; + return slot.stacksize; + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBoolean(continuousRequest); + buf.writeBoolean(rorConfiguredMode); + buf.writeByte((byte) requestMode); + for(int i = 0; i < 9; i++) { + buf.writeShort(rorFilters[i][0]); + buf.writeShort(rorFilters[i][1]); + buf.writeShort(rorFilters[i][2]); + } + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.continuousRequest = buf.readBoolean(); + this.rorConfiguredMode = buf.readBoolean(); + this.requestMode = buf.readByte(); + for(int i = 0; i < 9; i++) { + rorFilters[i][0] = buf.readShort(); + rorFilters[i][1] = buf.readShort(); + rorFilters[i][2] = buf.readShort(); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + this.continuousRequest = nbt.getBoolean("continuousRequest"); + this.rorConfiguredMode = nbt.getBoolean("rorConfiguredMode"); + this.requestMode = nbt.getByte("requestMode"); + for(int i = 0; i < 9; i++) { + rorFilters[i][0] = nbt.getShort("filter_" + i + "_0"); + rorFilters[i][1] = nbt.getShort("filter_" + i + "_1"); + rorFilters[i][2] = nbt.getShort("filter_" + i + "_2"); + } + + this.lastRedstone = nbt.getBoolean("lastRedstone"); + this.slotDelay = nbt.getIntArray("slotDelay"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setBoolean("continuousRequest", continuousRequest); + nbt.setBoolean("rorConfiguredMode", rorConfiguredMode); + nbt.setByte("requestMode", (byte) requestMode); + + for(int i = 0; i < 9; i++) { + nbt.setShort("filter_" + i + "_0", (short) rorFilters[i][0]); + nbt.setShort("filter_" + i + "_1", (short) rorFilters[i][1]); + nbt.setShort("filter_" + i + "_2", (short) rorFilters[i][2]); + } + + nbt.setBoolean("lastRedstone", lastRedstone); + nbt.setIntArray("slotDelay", slotDelay); + } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerPneumoStorageExporter(player.inventory, this); } + @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPneumoStorageExporter(player.inventory, this); } + + @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("continuous")) { + this.continuousRequest = !this.continuousRequest; + } + if(data.hasKey("request")) { + this.requestMode++; + if(this.requestMode >= 3) this.requestMode = 0; + } + if(data.hasKey("ror")) { + this.rorConfiguredMode = !this.rorConfiguredMode; + } + if(data.hasKey("slot")) { + setFilterContents(data); + } + this.markChanged(); + } + + @Override + public int[] getFilterSlots() { + return new int[] {0, 9}; + } + + @Override + public void nextMode(int i) { } + + @Override + public void setFilterContents(NBTTagCompound nbt) { + int slot = nbt.getInteger("slot"); + NBTTagCompound stack = nbt.getCompoundTag("stack"); + ItemStack item = ItemStack.loadItemStackFromNBT(stack); + this.setInventorySlotContents(slot, item); + this.markChanged(); + } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_FUNCTION + "setfilter" + NAME_SEPARATOR + "slot" + PARAM_SEPARATOR + "itemid" + PARAM_SEPARATOR + "itemmeta" + PARAM_SEPARATOR + "amount", + PREFIX_FUNCTION + "setcontinuous" + NAME_SEPARATOR + "on/off", + PREFIX_FUNCTION + "request", + PREFIX_FUNCTION + "requestslot" + NAME_SEPARATOR + "slot", + PREFIX_FUNCTION + "checkavailability" + NAME_SEPARATOR + "itemid" + PARAM_SEPARATOR + "itemmeta" + PARAM_SEPARATOR + "returnchannel", + }; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if((PREFIX_FUNCTION + "setfilter").equals(name) && params.length == 4) { + int slot = IRORInteractive.parseInt(params[0], 1, 9) - 1; + int itemId = IRORInteractive.parseInt(params[1], 0, Short.MAX_VALUE); + int meta = IRORInteractive.parseInt(params[2], 0, Short.MAX_VALUE); + int amount = IRORInteractive.parseInt(params[3], 1, 64); + + this.rorFilters[slot][0] = (short) itemId; + this.rorFilters[slot][1] = (short) meta; + this.rorFilters[slot][2] = (short) amount; + this.markChanged(); + return null; + } + + if((PREFIX_FUNCTION + "setcontinuous").equals(name) && params.length == 1) { + if("on".equals(params[0])) this.continuousRequest = true; + if("off".equals(params[0])) this.continuousRequest = false; + this.markChanged(); + return null; + } + + if((PREFIX_FUNCTION + "request").equals(name)) { + this.doRequest(true); + return null; + } + + if((PREFIX_FUNCTION + "requestslot").equals(name) && params.length == 1) { + int slot = IRORInteractive.parseInt(params[0], 1, 9) - 1; + if(!this.requestSlot(slot, true)) this.slotDelay[slot] = SLOT_DELAY; + return null; + } + + if((PREFIX_FUNCTION + "checkavailability").equals(name) && params.length == 3) { + int itemId = IRORInteractive.parseInt(params[0], 0, Short.MAX_VALUE); + int meta = IRORInteractive.parseInt(params[1], 0, Short.MAX_VALUE); + String ret = params[2]; + long availability = this.getAvailability(itemId, meta); + RTTYSystem.broadcast(worldObj, ret, availability + ""); + return null; + } + + return null; + } +} diff --git a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageImporter.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageImporter.java new file mode 100644 index 000000000..60e5544d8 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageImporter.java @@ -0,0 +1,61 @@ +package com.hbm.tileentity.network.pneumatic; + +import com.hbm.inventory.container.ContainerPneumoStorageImporter; +import com.hbm.inventory.gui.GUIPneumoStorageImporter; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class TileEntityPneumoStorageImporter extends TileEntityPneumaticMachineBase { + + public int[] delay = new int[9]; + public int[] SLOT_ACCESS = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8}; + + public TileEntityPneumoStorageImporter() { + super(9); + } + + @Override + public String getName() { + return "container.pneumoStorageImporter"; + } + + @Override + public void setInventorySlotContents(int i, ItemStack stack) { + super.setInventorySlotContents(i, stack); + + if(stack != null) this.delay[i] = Math.max(this.delay[i], 1); + } + + @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return true; } + @Override public int[] getAccessibleSlotsFromSide(int side) { return SLOT_ACCESS; } + + @Override + public void updateEntity() { + super.updateEntity(); + + if(!worldObj.isRemote) { + + if(this.cache != null && !this.cache.hasExpired) for(int i = 0; i < 9; i++) { + if(this.delay[i] > 0) { + this.delay[i]--; + continue; + } + ItemStack stack = slots[i]; + if(stack == null) continue; + + int leftover = (int) this.cache.addItemsAndReturnQuantity(stack, stack.stackSize); + if(leftover == stack.stackSize) { + this.delay[i] = 100; + } else { + this.decrStackSize(i, stack.stackSize - leftover); + } + } + } + } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerPneumoStorageImporter(player.inventory, this); } + @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPneumoStorageImporter(player.inventory, this); } +} diff --git a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageMono.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageMono.java new file mode 100644 index 000000000..c2ad4fd63 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageMono.java @@ -0,0 +1,107 @@ +package com.hbm.tileentity.network.pneumatic; + +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.container.ContainerPneumoStorageMono; +import com.hbm.inventory.gui.GUIPneumoStorageMono; +import com.hbm.tileentity.IControlReceiverFilter; +import com.hbm.tileentity.IGUIProvider; + +import api.hbm.fluidmk2.IFluidStandardReceiverMK2; +import api.hbm.ntl.IPneumaticConnector; +import api.hbm.ntl.ISlotMonitorProvider; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class TileEntityPneumoStorageMono extends TileEntityPneumaticStorageBase implements IPneumaticConnector, IFluidStandardReceiverMK2, ISlotMonitorProvider, IControlReceiver, IGUIProvider, IControlReceiverFilter { + + public static final int CAPACITY = 100_000; + public int[] amounts; + + public TileEntityPneumoStorageMono() { + super(3); + + this.amounts = new int[this.monitors.length]; + } + + @Override + public String getName() { + return "container.pneumoStorageMono"; + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + for(int i = 0; i < amounts.length; i++) buf.writeInt(amounts[i]); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + for(int i = 0; i < amounts.length; i++) amounts[i]= buf.readInt(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.amounts = nbt.getIntArray("amounts"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setIntArray("amounts", amounts); + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerPneumoStorageMono(player.inventory, this); + } + + @Override + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIPneumoStorageMono(player.inventory, this); + } + + @Override public long getAmountAt(int index) { return amounts[index]; } + @Override public boolean allowTypeSetting() { return false; } + + @Override + public void receiveControl(NBTTagCompound data) { + super.receiveControl(data); + + if(data.hasKey("slot")){ + setFilterContents(data); + } + } + + @Override + public long useUpItem(int index, long amount) { + if(amounts[index] <= 0) return amount; + int toRemove = (int) Math.min(amount, amounts[index]); + amounts[index] -= toRemove; + return amount - toRemove; + } + + @Override + public long addItem(int index, long amount) { + int capacity = CAPACITY - amounts[index]; + if(capacity <= 0) return amount; + int toAdd = (int) Math.min(amount, capacity); + amounts[index] += toAdd; + return amount - toAdd; + } + + @Override public long setupType(int index, ItemStack zeroStack, long amount) { return amount; } + + @Override + public void nextMode(int i) { } + + @Override + public int[] getFilterSlots() { + return new int[] {0, 3}; + } +} diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseArtillery.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseArtillery.java index e971b8e6f..863f298e7 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseArtillery.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseArtillery.java @@ -96,13 +96,13 @@ public abstract class TileEntityTurretBaseArtillery extends TileEntityTurretBase @Override public String[] getFunctionInfo() { return new String[] { - PREFIX_FUNCTION + "setActive" + NAME_SEPARATOR + "active (0 or 1)", - PREFIX_FUNCTION + "targetPlayers" + NAME_SEPARATOR + "enabled (0 or 1)", - PREFIX_FUNCTION + "targetAnimals" + NAME_SEPARATOR + "enabled (0 or 1)", - PREFIX_FUNCTION + "targetMobs" + NAME_SEPARATOR + "enabled (0 or 1)", - PREFIX_FUNCTION + "targetMachines" + NAME_SEPARATOR + "enabled (0 or 1)", - PREFIX_FUNCTION + "addWhitelist" + NAME_SEPARATOR + "name", - PREFIX_FUNCTION + "removeWhitelist" + NAME_SEPARATOR + "name", + PREFIX_FUNCTION + "setactive" + NAME_SEPARATOR + "active (0 or 1)", + PREFIX_FUNCTION + "targetplayers" + NAME_SEPARATOR + "enabled (0 or 1)", + PREFIX_FUNCTION + "targetanimals" + NAME_SEPARATOR + "enabled (0 or 1)", + PREFIX_FUNCTION + "targetmobs" + NAME_SEPARATOR + "enabled (0 or 1)", + PREFIX_FUNCTION + "targetmachines" + NAME_SEPARATOR + "enabled (0 or 1)", + PREFIX_FUNCTION + "addwhitelist" + NAME_SEPARATOR + "name", + PREFIX_FUNCTION + "removewhitelist" + NAME_SEPARATOR + "name", PREFIX_FUNCTION + "enqueue" + NAME_SEPARATOR + "x" + PARAM_SEPARATOR + "y" + PARAM_SEPARATOR + "z", }; } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java index 1d75b1679..c9e5e2c8c 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBaseNT.java @@ -1062,40 +1062,40 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple @Override public String[] getFunctionInfo() { return new String[] { - PREFIX_FUNCTION + "setActive" + NAME_SEPARATOR + "active (0 or 1)", - PREFIX_FUNCTION + "targetPlayers" + NAME_SEPARATOR + "enabled (0 or 1)", - PREFIX_FUNCTION + "targetAnimals" + NAME_SEPARATOR + "enabled (0 or 1)", - PREFIX_FUNCTION + "targetMobs" + NAME_SEPARATOR + "enabled (0 or 1)", - PREFIX_FUNCTION + "targetMachines" + NAME_SEPARATOR + "enabled (0 or 1)", - PREFIX_FUNCTION + "addWhitelist" + NAME_SEPARATOR + "name", - PREFIX_FUNCTION + "removeWhitelist" + NAME_SEPARATOR + "name", + PREFIX_FUNCTION + "setactive" + NAME_SEPARATOR + "active (0 or 1)", + PREFIX_FUNCTION + "targetplayers" + NAME_SEPARATOR + "enabled (0 or 1)", + PREFIX_FUNCTION + "targetanimals" + NAME_SEPARATOR + "enabled (0 or 1)", + PREFIX_FUNCTION + "targetmobs" + NAME_SEPARATOR + "enabled (0 or 1)", + PREFIX_FUNCTION + "targetmachines" + NAME_SEPARATOR + "enabled (0 or 1)", + PREFIX_FUNCTION + "addwhitelist" + NAME_SEPARATOR + "name", + PREFIX_FUNCTION + "removewhitelist" + NAME_SEPARATOR + "name", }; } @Override public String runRORFunction(String name, String[] params) { - if((PREFIX_FUNCTION + "setActive").equals(name) && params.length > 0) { + if((PREFIX_FUNCTION + "setactive").equals(name) && params.length > 0) { try { this.isOn = (Integer.parseInt(params[0]) == 1); this.markChanged(); } catch(NumberFormatException e) {} } - if((PREFIX_FUNCTION + "targetPlayers").equals(name) && params.length > 0) { + if((PREFIX_FUNCTION + "targetplayers").equals(name) && params.length > 0) { try { this.targetPlayers = (Integer.parseInt(params[0]) == 1); this.markChanged(); } catch(NumberFormatException e) {} } - if((PREFIX_FUNCTION + "targetAnimals").equals(name) && params.length > 0) { + if((PREFIX_FUNCTION + "targetanimals").equals(name) && params.length > 0) { try { this.targetAnimals = (Integer.parseInt(params[0]) == 1); this.markChanged(); } catch(NumberFormatException e) {} } - if((PREFIX_FUNCTION + "targetMobs").equals(name) && params.length > 0) { + if((PREFIX_FUNCTION + "targetmobs").equals(name) && params.length > 0) { try { this.targetMobs = (Integer.parseInt(params[0]) == 1); this.markChanged(); } catch(NumberFormatException e) {} } - if((PREFIX_FUNCTION + "targetMachines").equals(name) && params.length > 0) { + if((PREFIX_FUNCTION + "targetmachines").equals(name) && params.length > 0) { try { this.targetMachines = (Integer.parseInt(params[0]) == 1); this.markChanged(); } catch(NumberFormatException e) {} } - if((PREFIX_FUNCTION + "addWhitelist").equals(name) && params.length > 0) { + if((PREFIX_FUNCTION + "addwhitelist").equals(name) && params.length > 0) { String playerName = params[0]; List whitelist = this.getWhitelist(); if(!whitelist.contains(playerName)) this.addName(playerName); this.markChanged(); } - if((PREFIX_FUNCTION + "removeWhitelist").equals(name) && params.length > 0) { + if((PREFIX_FUNCTION + "removewhitelist").equals(name) && params.length > 0) { String playerName = params[0]; List whitelist = this.getWhitelist(); if(whitelist.contains(playerName)) this.removeName(whitelist.indexOf(playerName)); diff --git a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java index 53172e368..b2f63b026 100644 --- a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java +++ b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java @@ -54,6 +54,22 @@ public class PneumaticNetwork extends NodeNet { accessors.clear(); storages.clear(); } + + @Override + public void joinNetworks(NodeNet network) { + super.joinNetworks(network); + + PneumaticNetwork net = (PneumaticNetwork) network; + //for(StackCache cache : accessors) cache.dissolveCache(); + + for(Object acc : net.accessors) this.accessors.add((StackCache) acc); + + for(Object connector : net.storages) { + ISlotMonitorProvider monitor = (ISlotMonitorProvider) connector; + this.storages.add((ISlotMonitorProvider) connector); + for(Object acc : net.accessors) monitor.onNewCacheHasJoined((StackCache) acc, this); + } + } public void addReceiver(IInventory inventory, ForgeDirection pipeDir, TileEntityPneumoTube endpoint) { receivers.put(inventory, new Triplet(pipeDir, System.currentTimeMillis(), endpoint)); @@ -118,7 +134,7 @@ public class PneumaticNetwork extends NodeNet { TileEntity tile1 = source instanceof TileEntity ? (TileEntity) source : null; int attempts = 0; - int maxAttempts = receiverList.size(); + int maxAttempts = Math.min(receiverList.size(), 5); // try all receivers for both modes, in an attempts based system. // instead of bailing out of trying after the first failure (which means you have to wait 0.25 seconds), we just try the next one. diff --git a/src/main/java/com/hbm/util/BobMathUtil.java b/src/main/java/com/hbm/util/BobMathUtil.java index a38522a07..5bb09570e 100644 --- a/src/main/java/com/hbm/util/BobMathUtil.java +++ b/src/main/java/com/hbm/util/BobMathUtil.java @@ -193,32 +193,34 @@ public class BobMathUtil { } public static String getShortNumber(long l) { + double res; - String magnitude_letter = ""; + String suffix = ""; + long abs = Math.abs(l); - if(Math.abs(l) >= Math.pow(10, 18)) { + if(abs >= Math.pow(10, 18)) { res = l / Math.pow(10, 18); - magnitude_letter = "E"; + suffix = "E"; } - else if(Math.abs(l) >= Math.pow(10, 15)) { + else if(abs >= Math.pow(10, 15)) { res = l / Math.pow(10, 15); - magnitude_letter = "P"; + suffix = "P"; } - else if(Math.abs(l) >= Math.pow(10, 12)) { + else if(abs >= Math.pow(10, 12)) { res = l / Math.pow(10, 12); - magnitude_letter = "T"; + suffix = "T"; } - else if(Math.abs(l) >= Math.pow(10, 9)) { + else if(abs >= Math.pow(10, 9)) { res = l / Math.pow(10, 9); - magnitude_letter = "G"; + suffix = "G"; } - else if(Math.abs(l) >= Math.pow(10, 6)) { + else if(abs >= Math.pow(10, 6)) { res = l / Math.pow(10, 6); - magnitude_letter = "M"; + suffix = "M"; } - else if(Math.abs(l) >= Math.pow(10, 3)) { + else if(abs >= Math.pow(10, 3)) { res = l / Math.pow(10, 3); - magnitude_letter = "k"; + suffix = "k"; } else { return Long.toString(l); @@ -231,7 +233,7 @@ public class BobMathUtil { res = Math.round(res * 100.0) / 100.0; } - return res + magnitude_letter; + return res + suffix; } /** diff --git a/src/main/java/com/hbm/util/DamageResistanceHandler.java b/src/main/java/com/hbm/util/DamageResistanceHandler.java index 805ab13bc..d153d7f44 100644 --- a/src/main/java/com/hbm/util/DamageResistanceHandler.java +++ b/src/main/java/com/hbm/util/DamageResistanceHandler.java @@ -419,7 +419,11 @@ public class DamageResistanceHandler { LASER, MICROWAVE, SUBATOMIC, - OTHER + OTHER; + + public boolean isApplicable(String name) { + return name.toLowerCase(Locale.US).equals(this.name().toLowerCase(Locale.US)); + } } public static void setup(float dt, float dr) { @@ -471,11 +475,11 @@ public class DamageResistanceHandler { if(source.isExplosion()) return CATEGORY_EXPLOSION; if(source.isFireDamage()) return CATEGORY_FIRE; if(source.isProjectile()) return CATEGORY_PHYSICAL; - if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.LASER.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY; - if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.PLASMA.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY; - if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.MICROWAVE.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY; - if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.SUBATOMIC.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY; - if(source.damageType.toLowerCase(Locale.US).equals(DamageClass.ELECTRIC.name().toLowerCase(Locale.US))) return CATEGORY_ENERGY; + if(DamageClass.LASER.isApplicable(source.damageType)) return CATEGORY_ENERGY; + if(DamageClass.PLASMA.isApplicable(source.damageType)) return CATEGORY_ENERGY; + if(DamageClass.MICROWAVE.isApplicable(source.damageType)) return CATEGORY_ENERGY; + if(DamageClass.SUBATOMIC.isApplicable(source.damageType)) return CATEGORY_ENERGY; + if(DamageClass.ELECTRIC.isApplicable(source.damageType)) return CATEGORY_ENERGY; if(source == DamageSource.cactus) return CATEGORY_PHYSICAL; if(source == ModDamageSource.spikes) return CATEGORY_PHYSICAL; if(source == ModDamageSource.electricity) return CATEGORY_ENERGY; diff --git a/src/main/java/com/hbm/world/feature/BedrockOre.java b/src/main/java/com/hbm/world/feature/BedrockOre.java index 110675609..9c6a0b7a1 100644 --- a/src/main/java/com/hbm/world/feature/BedrockOre.java +++ b/src/main/java/com/hbm/world/feature/BedrockOre.java @@ -3,14 +3,12 @@ package com.hbm.world.feature; import java.util.ArrayList; import java.util.List; -import com.hbm.blocks.BlockEnums.EnumStoneType; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockBedrockOreTE.TileEntityBedrockOre; import com.hbm.config.WorldConfig; import com.hbm.inventory.FluidStack; import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.fluid.Fluids; -import com.hbm.items.ItemEnums.EnumChunkType; import com.hbm.items.ModItems; import com.hbm.items.special.ItemBedrockOreBase; import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre; @@ -25,30 +23,9 @@ import net.minecraft.world.World; public class BedrockOre { - public static List> weightedOres = new ArrayList(); public static List> weightedOresNether = new ArrayList(); public static void init() { - registerBedrockOre(weightedOres, new BedrockOreDefinition(EnumBedrockOre.IRON, 1), WorldConfig.bedrockIronSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(EnumBedrockOre.COPPER, 1), WorldConfig.bedrockCopperSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(EnumBedrockOre.BORAX, 3, new FluidStack(Fluids.SULFURIC_ACID, 500)), WorldConfig.bedrockBoraxSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(EnumBedrockOre.CHLOROCALCITE, 3, new FluidStack(Fluids.SULFURIC_ACID, 500)), WorldConfig.bedrockChlorocalciteSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(EnumBedrockOre.ASBESTOS, 2), WorldConfig.bedrockAsbestosSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(EnumBedrockOre.NIOBIUM, 2, new FluidStack(Fluids.PEROXIDE, 500)), WorldConfig.bedrockNiobiumSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(EnumBedrockOre.NEODYMIUM, 3, new FluidStack(Fluids.PEROXIDE, 500)), WorldConfig.bedrockNeodymiumSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(EnumBedrockOre.TITANIUM, 2, new FluidStack(Fluids.SULFURIC_ACID, 500)), WorldConfig.bedrockTitaniumSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(EnumBedrockOre.TUNGSTEN, 2, new FluidStack(Fluids.PEROXIDE, 500)), WorldConfig.bedrockTungstenSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(EnumBedrockOre.GOLD, 1), WorldConfig.bedrockGoldSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(EnumBedrockOre.URANIUM, 4, new FluidStack(Fluids.SULFURIC_ACID, 500)), WorldConfig.bedrockUraniumSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(EnumBedrockOre.THORIUM, 4, new FluidStack(Fluids.SULFURIC_ACID, 500)), WorldConfig.bedrockThoriumSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(EnumBedrockOre.FLUORITE, 1), WorldConfig.bedrockFluoriteSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(new ItemStack(Items.coal, 8), 1, 0x202020), WorldConfig.bedrockCoalSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(new ItemStack(ModItems.niter, 4), 2, 0x808080, new FluidStack(Fluids.PEROXIDE, 500)), WorldConfig.bedrockNiterSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(new ItemStack(Items.redstone, 4), 1, 0xd01010), WorldConfig.bedrockRedstoneSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(new ItemStack(Items.emerald, 4), 1, 0x3FDD85), WorldConfig.bedrockEmeraldSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(DictFrame.fromOne(ModItems.chunk_ore, EnumChunkType.RARE), 2, 0x8F9999, new FluidStack(Fluids.PEROXIDE, 500)), WorldConfig.bedrockRareEarthSpawn); - registerBedrockOre(weightedOres, new BedrockOreDefinition(DictFrame.fromOne(ModBlocks.stone_resource, EnumStoneType.BAUXITE, 2),1, 0xEF7213), WorldConfig.bedrockBauxiteSpawn); - registerBedrockOre(weightedOresNether, new BedrockOreDefinition(new ItemStack(Items.glowstone_dust, 4), 1, 0xF9FF4D), WorldConfig.bedrockGlowstoneSpawn); registerBedrockOre(weightedOresNether, new BedrockOreDefinition(new ItemStack(ModItems.powder_fire, 4), 1, 0xD7341F), WorldConfig.bedrockPhosphorusSpawn); registerBedrockOre(weightedOresNether, new BedrockOreDefinition(new ItemStack(Items.quartz, 4), 1, 0xF0EFDD), WorldConfig.bedrockQuartzSpawn); diff --git a/src/main/java/com/hbm/world/gen/MapGenChainloader.java b/src/main/java/com/hbm/world/gen/MapGenChainloader.java index 01a605a4c..143b827b6 100644 --- a/src/main/java/com/hbm/world/gen/MapGenChainloader.java +++ b/src/main/java/com/hbm/world/gen/MapGenChainloader.java @@ -116,7 +116,5 @@ public class MapGenChainloader extends MapGenBase { blockMetas = event.metaArray; } } - } - } diff --git a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java index dbf6922fa..051b11d1e 100644 --- a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java +++ b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java @@ -35,43 +35,45 @@ public class NTMWorldGenerator implements IWorldGenerator { boolean regTest = false; - public static boolean isInvalidBiome(BiomeGenBase biome) { - return BiomeDictionary.isBiomeOfType(biome, Type.OCEAN) || BiomeDictionary.isBiomeOfType(biome, Type.RIVER); + /** Includes all biomes tagged as ocean or river */ + public static boolean isWaterBiome(BiomeGenBase biome) { + return BiomeDictionary.isBiomeOfType(biome, Type.WATER); } + /** Includes biomes with little height variation and sparse vegetation, excludes water biomes */ public static boolean isFlatBiome(BiomeGenBase biome) { - return biome.heightVariation <= 0.2F && !isInvalidBiome(biome) && BiomeDictionary.isBiomeOfType(biome, Type.SPARSE); + return biome.heightVariation <= 0.2F && !isWaterBiome(biome) && BiomeDictionary.isBiomeOfType(biome, Type.SPARSE); } public NTMWorldGenerator() { /// SPIRE /// NBTStructure.registerStructure(0, new SpawnCondition("spire") {{ - canSpawn = biome -> biome.heightVariation <= 0.05F && !isInvalidBiome(biome); + canSpawn = biome -> biome.heightVariation <= 0.05F && !isWaterBiome(biome); structure = new JigsawPiece("spire", StructureManager.spire, -1); spawnWeight = StructureConfig.spireSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("features") {{ - canSpawn = biome -> !isInvalidBiome(biome); + canSpawn = biome -> !isWaterBiome(biome); start = d -> new MapGenNTMFeatures.Start(d.getW(), d.getX(), d.getY(), d.getZ()); spawnWeight = StructureConfig.featuresSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("bunker") {{ - canSpawn = biome -> !isInvalidBiome(biome); + canSpawn = biome -> !isWaterBiome(biome); start = d -> new BunkerStart(d.getW(), d.getX(), d.getY(), d.getZ()); spawnWeight = StructureConfig.bunkerSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("vertibird") {{ - canSpawn = biome -> !isInvalidBiome(biome) && BiomeDictionary.isBiomeOfType(biome, Type.SANDY); + canSpawn = biome -> !isWaterBiome(biome) && BiomeDictionary.isBiomeOfType(biome, Type.SANDY); structure = new JigsawPiece("vertibird", StructureManager.vertibird, -3); spawnWeight = StructureConfig.vertibirdSpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("crashed_vertibird") {{ - canSpawn = biome -> !isInvalidBiome(biome) && BiomeDictionary.isBiomeOfType(biome, Type.SANDY); + canSpawn = biome -> !isWaterBiome(biome) && BiomeDictionary.isBiomeOfType(biome, Type.SANDY); structure = new JigsawPiece("crashed_vertibird", StructureManager.crashed_vertibird, -10); spawnWeight = StructureConfig.vertibirdCrashedSpawnWeight; }}); @@ -116,7 +118,7 @@ public class NTMWorldGenerator implements IWorldGenerator { }}); NBTStructure.registerStructure(0, new SpawnCondition("forestchem") {{ - canSpawn = biome -> biome.heightVariation <= 0.3F && !isInvalidBiome(biome); + canSpawn = biome -> biome.heightVariation <= 0.3F && !isWaterBiome(biome); structure = new JigsawPiece("forest_chem", StructureManager.forest_chem, -9); spawnWeight = StructureConfig.forestChemSpawnWeight; }}); @@ -130,7 +132,7 @@ public class NTMWorldGenerator implements IWorldGenerator { }}); NBTStructure.registerStructure(0, new SpawnCondition("forest_post") {{ - canSpawn = biome -> biome.heightVariation <= 0.3F && !isInvalidBiome(biome); + canSpawn = biome -> biome.heightVariation <= 0.3F && !isWaterBiome(biome); structure = new JigsawPiece("forest_post", StructureManager.forest_post, -10); spawnWeight = StructureConfig.forestPostSpawnWeight; }}); @@ -160,13 +162,13 @@ public class NTMWorldGenerator implements IWorldGenerator { }}); NBTStructure.registerStructure(0, new SpawnCondition("plane1") {{ - canSpawn = biome -> biome.heightVariation <= 0.3F && !isInvalidBiome(biome); + canSpawn = biome -> biome.heightVariation <= 0.3F && !isWaterBiome(biome); structure = new JigsawPiece("crashed_plane_1", StructureManager.plane1, -5); spawnWeight = StructureConfig.plane1SpawnWeight; }}); NBTStructure.registerStructure(0, new SpawnCondition("plane2") {{ - canSpawn = biome -> biome.heightVariation <= 0.3F && !isInvalidBiome(biome); + canSpawn = biome -> biome.heightVariation <= 0.3F && !isWaterBiome(biome); structure = new JigsawPiece("crashed_plane_2", StructureManager.plane2, -8); spawnWeight = StructureConfig.plane2SpawnWeight; }}); @@ -190,52 +192,52 @@ public class NTMWorldGenerator implements IWorldGenerator { }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinA") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsA", StructureManager.ntmruinsA, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsASpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinB") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsB", StructureManager.ntmruinsB, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsBSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinC") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsC", StructureManager.ntmruinsC, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsCSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinD") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsD", StructureManager.ntmruinsD, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsDSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinE") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsE", StructureManager.ntmruinsE, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsESpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinF") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsF", StructureManager.ntmruinsF, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsFSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinG") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsG", StructureManager.ntmruinsG, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsGSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinH") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsH", StructureManager.ntmruinsH, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsHSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinI") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsI", StructureManager.ntmruinsI, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsISpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("ruinJ") {{ - canSpawn = biome -> !isInvalidBiome(biome) && biome.canSpawnLightningBolt(); + canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt(); structure = new JigsawPiece("NTMRuinsJ", StructureManager.ntmruinsJ, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsJSpawnWeight : 0; }}); diff --git a/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java index e9ddf68b0..ac8829106 100644 --- a/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java +++ b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java @@ -7,6 +7,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.*; +import java.util.function.Consumer; import java.util.function.Predicate; import com.hbm.config.ServerConfig; @@ -84,9 +85,25 @@ public class NBTStructure { // incredibly shitty system for translating legacy block definitions to new ones @Untested // i can't find a god damn factory - private static Map substitutions = new HashMap() {{ - put("hbm:tile.ore_coal_oil", "coal_ore"); + private static Map substitutions = new HashMap() {{ + put("hbm:tile.ore_coal_oil", new BlockMigration("coal_ore")); }}; + + public static class BlockMigration { + public String block; + public int meta; + // i may have misjudged, migration is only done when the palette is loaded, rendering this basically useless + public Consumer tileEntityTransformerObject; + + public BlockMigration(String block) { this(block, 0, null); } + public BlockMigration(String block, int meta) { this(block, meta, null); } + public BlockMigration(String block, Consumer teto) { this(block, 0, teto); } + public BlockMigration(String block, int meta, Consumer teto) { + this.block = block; + this.meta = meta; + this.tileEntityTransformerObject = teto; + } + } public NBTStructure(ResourceLocation resource) { // Can't use regular resource loading, servers don't know how! @@ -328,13 +345,16 @@ public class NBTStructure { NBTTagCompound p = paletteList.getCompoundTagAt(i); String blockName = p.getString("Name"); + int meta = 0; NBTTagCompound prop = p.getCompoundTag("Properties"); /// BOB PATCH /// - if(substitutions.containsKey(blockName)) blockName = substitutions.get(blockName); + if(substitutions.containsKey(blockName)) { + BlockMigration mig = substitutions.get(blockName); + blockName = mig.block; + meta = mig.meta; + } /// BOB PATCH /// - - int meta = 0; try { meta = Integer.parseInt(prop.getString("meta")); } catch(NumberFormatException ex) { diff --git a/src/main/java/com/hbm/world/generator/TimedGenerator.java b/src/main/java/com/hbm/world/generator/TimedGenerator.java index 9501bbc8d..a9269c8a6 100644 --- a/src/main/java/com/hbm/world/generator/TimedGenerator.java +++ b/src/main/java/com/hbm/world/generator/TimedGenerator.java @@ -3,10 +3,12 @@ package com.hbm.world.generator; import java.util.ArrayList; import java.util.HashMap; +import com.hbm.interfaces.NotableComments; import com.hbm.interfaces.Spaghetti; import net.minecraft.world.World; +@NotableComments @Deprecated @Spaghetti("this class should be destroyed") public class TimedGenerator { @@ -46,7 +48,7 @@ public class TimedGenerator { list.add(job); } - //should i be doing this? probably not, but watch me go + //should i be doing this? probably not, but watch me go // no for the love of fucking god don't do this public interface ITimedJob { public void work(); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 4aa6e7a9f..336065b4e 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -357,6 +357,11 @@ container.paDipole=Dipol container.paQuadrupole=Quad. container.paSource=Teilchenquelle container.plasmaHeater=Plasmaerhitzer +container.pneumoStorageAccess=PLS Zugangsterminal +container.pneumoStorageClutter=PLS Gerümpelkiste +container.pneumoStorageExporter=PLS Exporter +container.pneumoStorageImporter=PLS Importer +container.pneumoStorageMono=PLS Massenspeicher container.pneumoTube=Rohrpost container.press=Befeuerte Presse container.puf6_tank=PuF6 Tank @@ -4571,7 +4576,7 @@ tile.machine_transformer.name=10k-20Hz-Transformator tile.machine_transformer_20.name=10k-1Hz-Transformator tile.machine_transformer_dnt.name=DNT-20Hz-Transformator tile.machine_transformer_dnt_20.name=DNT-1Hz-Transformator -tile.machine_turbine.name=Dampfturbine +tile.machine_turbine.name=Dampfturbine (LEGACY) tile.machine_turbine.desc=Effizienz: 85%% tile.machine_turbinegas.name=Kombizyklus-Gasturbine tile.machine_turbofan.name=Turbofan @@ -4736,6 +4741,11 @@ tile.plant_tall.weed.name=Hanf tile.plasma.name=Plasma tile.plasma_heater.name=Plasmaerhitzer tile.plushie.name=%s Plüschfigur +tile.pneumatic_storage_access.name=Pneumatisches Lagersystem - Zugangsterminal +tile.pneumatic_storage_clutter.name=Pneumatisches Lagersystem - Gerümpelkiste +tile.pneumatic_storage_exporter.name=Pneumatisches Lagersystem - Exporter +tile.pneumatic_storage_importer.name=Pneumatisches Lagersystem - Importer +tile.pneumatic_storage_mono.name=Pneumatisches Lagersystem - Massenspeicher tile.pneumatic_tube.name=Rohrpost tile.pneumatic_tube.desc=Sendted Items mit Druckluft.$Rechtsklick mit Schraubenzieher aktiviert den Eingang.$Shift-Rechtskick mit Schrabuenzieher aktiviert den Ausgang.$Eingänge können konfiguriert und mit Druckluft verbunden werden.$Sendet bis zu einem Stack, vier Mal pro Sekunde. tile.pneumatic_tube_paintable.name=Geschirmte Rohrpost (Färbbar) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d43f47da4..375d2c3c0 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -669,7 +669,7 @@ container.factoryTitanium=Basic Factory container.fluidtank=Tank container.fileCabinet=Filing Cabinet container.forceField=Forcefield Emitter -container.frackingTower=Hydraulic Fracking Tower +container.frackingTower=H.F.T. container.furnaceBrick=Bricked Furnace container.furnaceCombination=Combination Oven container.furnaceIron=Iron Furnace @@ -759,6 +759,11 @@ container.paDipole=Dipole container.paQuadrupole=Quad. container.paSource=Particle Source container.plasmaHeater=Plasma Heater +container.pneumoStorageAccess=PSN Access Terminal +container.pneumoStorageClutter=PSN Clutter Storage +container.pneumoStorageExporter=PSN Exporter +container.pneumoStorageImporter=PSN Importer +container.pneumoStorageMono=PSN Bulk Storage container.pneumoTube=Pneumatic Tube container.press=Burner Press container.puf6_tank=PuF6 Tank @@ -2016,13 +2021,7 @@ item.battery_sc.pu238.name=Plutonium-238 Self-Charging Battery item.battery_sc.ra226.name=Radium-226 Self-Charging Battery item.battery_sc.tc99.name=Technetium-99 Self-Charging Battery item.battery_sc.waste.name=Spent Fuel Self-Charging Battery -item.battery_sc_americium.name=Self-Charging Americium-241 Battery (LEGACY) -item.battery_sc_gold.name=Self-Charging Gold-198 Battery (LEGACY) -item.battery_sc_lead.name=Self-Charging Lead-209 Battery (LEGACY) -item.battery_sc_plutonium.name=Self-Charging Plutonium-238 Battery (LEGACY) -item.battery_sc_polonium.name=Self-Charging Polonium-210 Battery (LEGACY) -item.battery_sc_technetium.name=Self-Charging Technetium-99 Battery (LEGACY) -item.battery_sc_uranium.name=Self-Charging Uranium-238 Battery (LEGACY) +item.battery_sc.desc=Radiovoltaic devices are not suitable for$battery sockets! Power output may$be unreliable, and hazardous arcing$may occur! item.battery_schrabidium.name=Schrabidium Battery (LEGACY) item.battery_schrabidium_cell.name=Schrabidium Power Cell (LEGACY) item.battery_schrabidium_cell_2.name=Double Schrabidium Power Cell (LEGACY) @@ -3289,27 +3288,27 @@ item.meteor_remote.name=Meteorite Remote item.meteorite_sword.name=Meteorite Sword item.meteorite_sword.desc=Forged from a fallen star$Sharper than most terrestrial blades item.meteorite_sword_seared.name=Meteorite Sword (Seared) -item.meteorite_sword.seared.desc=Fire strengthens the blade$Making it even more powerful +item.meteorite_sword_seared.desc=Fire strengthens the blade$Making it even more powerful item.meteorite_sword_reforged.name=Meteorite Sword (Reforged) -item.meteorite_sword.reforged.desc=The sword has been reforged$To rectify past imperfections +item.meteorite_sword_reforged.desc=The sword has been reforged$To rectify past imperfections item.meteorite_sword_hardened.name=Meteorite Sword (Hardened) -item.meteorite_sword.hardened.desc=Extremely high pressure has been used$To harden the blade further +item.meteorite_sword_hardened.desc=Extremely high pressure has been used$To harden the blade further item.meteorite_sword_alloyed.name=Meteorite Sword (Alloyed) -item.meteorite_sword.alloyed.desc=Cobalt fills the fissures$Strengthening the sword +item.meteorite_sword_alloyed.desc=Cobalt fills the fissures$Strengthening the sword item.meteorite_sword_machined.name=Meteorite Sword (Machined) -item.meteorite_sword.machined.desc=Advanced machinery was used$To refine the blade even more +item.meteorite_sword_machined.desc=Advanced machinery was used$To refine the blade even more item.meteorite_sword_treated.name=Meteorite Sword (Treated) -item.meteorite_sword.treated.desc=Chemicals have been applied$Making the sword more powerful +item.meteorite_sword_treated.desc=Chemicals have been applied$Making the sword more powerful item.meteorite_sword_etched.name=Meteorite Sword (Etched) -item.meteorite_sword.etched.desc=Acids clean the material$To make this the perfect sword +item.meteorite_sword_etched.desc=Acids clean the material$To make this the perfect sword item.meteorite_sword_bred.name=Meteorite Sword (Bred) -item.meteorite_sword.bred.desc=Immense heat and radiation$Compress the material +item.meteorite_sword_bred.desc=Immense heat and radiation$Compress the material item.meteorite_sword_irradiated.name=Meteorite Sword (Irradiated) -item.meteorite_sword.irradiated.desc=The power of the Atom$Gives the sword might +item.meteorite_sword_irradiated.desc=The power of the Atom$Gives the sword might item.meteorite_sword_fused.name=Meteorite Sword (Fused) -item.meteorite_sword.fused.desc=This blade has met$With the forces of the stars +item.meteorite_sword_fused.desc=This blade has met$With the forces of the stars item.meteorite_sword_baleful.name=Meteorite Sword (Baleful) -item.meteorite_sword.baleful.desc=This sword has met temperatures$Far beyond what normal material can endure +item.meteorite_sword_baleful.desc=This sword has met temperatures$Far beyond what normal material can endure item.mike_cooling_unit.name=Deuterium Cooling Unit item.mike_core.name=Uranium Coated Deuterium Tank item.mike_deut.name=Deuterium Tank @@ -5209,6 +5208,7 @@ tile.capacitor_niobium.name=Niobium Capacitor (LEGACY) tile.capacitor_schrabidate.name=Schrabidate Capacitor (LEGACY) tile.capacitor_tantalium.name=Tantalum Capacitor (LEGACY) tile.capacitor.desc=Input: Top$Output: Bottom, via Capacitor Bus +tile.cargo_door.name=Cargo Door tile.cargo_elevator.name=Cargo Elevator tile.charge_c4.name=Demolition Charge tile.charge_dynamite.name=Time Bomb @@ -5827,7 +5827,7 @@ tile.machine_transformer.name=10k-20Hz Transformer tile.machine_transformer_20.name=10k-1Hz Transformer tile.machine_transformer_dnt.name=DNT-20Hz Transformer tile.machine_transformer_dnt_20.name=DNT-1Hz Transformer -tile.machine_turbine.name=Steam Turbine +tile.machine_turbine.name=Steam Turbine (LEGACY) tile.machine_turbine.desc=Efficiency: 85%% tile.machine_turbinegas.name=Combined Cycle Gas Turbine tile.machine_turbofan.name=Turbofan @@ -5979,6 +5979,11 @@ tile.pa_source.name=Particle Source tile.pa_source.desc=Requires cooling!$Uses two items to create a particle. tile.part_emitter.name=Deco Particle Emitter tile.pedestal.name=Pedestal +tile.pile_block.name=Chicago Pile +tile.pile_brick.name=Chicago Pile Graphite Bricks +tile.pile_device.control.name=Chicago Pile Control Rod +tile.pile_device.loader.name=Chicago Pile Fuel Loader +tile.pile_device.vent.name=Chicago Pile Vent tile.pink_barrel.name=Kerosene Barrel tile.pink_log.name=Pink Log tile.pink_planks.name=Pink Wood Planks @@ -6002,6 +6007,11 @@ tile.plant_tall.weed.name=Hemp tile.plasma.name=Plasma tile.plasma_heater.name=Plasma Heater tile.plushie.name=%s Plushie +tile.pneumatic_storage_access.name=Pneumatic Storage Network - Access Terminal +tile.pneumatic_storage_clutter.name=Pneumatic Storage Network - Clutter Storage +tile.pneumatic_storage_exporter.name=Pneumatic Storage Network - Exporter +tile.pneumatic_storage_importer.name=Pneumatic Storage Network - Importer +tile.pneumatic_storage_mono.name=Pneumatic Storage Network - Bulk Storage tile.pneumatic_tube.name=Pneumatic Tube tile.pneumatic_tube.desc=Sends items using compressed air.$Right-click with screwdriver to toggle an input.$Shift right-click with screwdriver to toggle an output.$Inputs can be configured, and connected to compressed air.$Sends up to one stack, four times per second. tile.pneumatic_tube_paintable.name=Paintable Pneumatic Tube diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 031af1504..4cbcd6dcd 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -572,7 +572,7 @@ cannery.hadron.math.3=1,000 x 8 x 10KHE = 8,000 x 10KHE = 80MHE cannery.schottky=Диод с частицами Шоттки cannery.schottky.0=Это диод Шоттки для частиц. Он позволяет создавать более сложные конструкции ускорителей частиц и экономить электроэнергию -cannery.schottky.1=По умолчанию он блокирует все частицы и должен быть настроен с помощью отвертки +cannery.schottky.1=По умолчанию он блокирует все частицы и должен быть настроен с помощью отвёртки cannery.schottky.2=Эта сторона теперь будет принимать входящие частицы cannery.schottky.3=А эта будет выбрасывать входящие частицы cannery.schottky.4=Диод теперь имеет два выхода и будет вести себя квантовым образом, создавая виртуальные частицы для каждого выхода @@ -676,12 +676,12 @@ container.fusionBreeder=Размножитель container.fusionKlystron=Клистрон container.fusionTorus=Термоядерный реактор container.gasCentrifuge=Газовая центрифуга -container.gasFlare=Газовая башня +container.gasFlare=Газовый факел container.generator=Ядерный реактор container.hadron=Ускоритель частиц container.heaterFirebox=Топка container.heaterHeatex=Теплообменник -container.heaterOilburner=Жидкостный котёл +container.heaterOilburner=Жидкостный нагреватель container.heaterOven=Нагревательная печь container.hydrotreater=Гидроочиститель container.iGenerator=Промышленный генератор @@ -717,7 +717,7 @@ container.machineMixer=Промышленный миксер container.machinePUREX=Пьюрекс container.machineOreSlopper=П.Б.Р. container.machinePlasmaForge=Плазменная кузница -container.machinePrecAss=Высокоточный сборщик +container.machinePrecAss=Прецизионный сборщик container.machinePyroOven=Пиролизная печь container.machineRefinery=Нефтеперерабатывающий завод container.machineRotaryFurnace=Роторная печь @@ -755,6 +755,11 @@ container.paDipole=Диполь container.paQuadrupole=Квадруполь container.paSource=Источник частиц container.plasmaHeater=Нагреватель плазмы +container.pneumoStorageAccess=Терминал доступа ПСХ +container.pneumoStorageClutter=Буферное хранилище ПСХ +container.pneumoStorageImporter=Импортёр ПСХ +container.pneumoStorageMono=Монохранилище ПСХ +container.pneumoStorageExporter=Экспортёр ПСХ container.pneumoTube=Пневмотруба container.press=Пресс container.puf6_tank=Бочка PuF6 @@ -1605,15 +1610,6 @@ item.ajro_boots.name=Ботинки силовой брони AJR item.ajro_helmet.name=Шлем силовой брони AJR item.ajro_legs.name=Поножи силовой брони AJR item.ajro_plate.name=Нагрудник силовой брони AJR -item.alloy_axe.name=Топор из продвинутого сплава -item.alloy_boots.name=Ботинки из продвинутого сплава -item.alloy_helmet.name=Шлем из продвинутого сплава -item.alloy_hoe.name=Мотыга из продвинутого сплава -item.alloy_legs.name=Поножи из продвинутого сплава -item.alloy_pickaxe.name=Кирка из продвинутого сплава -item.alloy_plate.name=Нагрудник из продвинутого сплава -item.alloy_shovel.name=Лопата из продвинутого сплава -item.alloy_sword.name=Меч из продвинутого сплава item.ammo_arty.name=16-дюймовый артиллерийский снаряд item.ammo_arty_cargo.name=16-дюймовый артиллерийский снаряд для экспресс-доставки item.ammo_arty_chlorine.name=Хлорный 16-дюймовый артиллерийский снаряд @@ -1654,9 +1650,9 @@ item.ammo_shell_apfsds_t.name=240мм APFSTS-T item.ammo_shell_explosive.name=240мм Фугасный снаряд item.ammo_shell_w9.name=240мм Ядерный снаряд W9 item.ammo_secret.bmg50_equestrian.name=Патрон .50 BMG (Разрушитель) -item.ammo_secret.folly_nuke.name=Серебрянная пуля (Ядерная) -item.ammo_secret.folly_sm.name=Серебрянная пуля -item.ammo_secret.g12_equestrian.name=Картечь 12-го калибра (Железнодорожный гвоздь) +item.ammo_secret.folly_nuke.name=Серебряная пуля (Ядерная) +item.ammo_secret.folly_sm.name=Серебряная пуля +item.ammo_secret.g12_equestrian.name=Патрон 12 калибра (Картечь железнодорожный гвоздь) item.ammo_secret.m44_equestrian.name=Патрон .44 магнум (Разрыватель голов) item.ammo_secret.p35_800.name=Патрон .35-800 V9 item.ammo_secret.p35_800_bl.name=Патрон .35-800 V9 (Чёрная Молния) @@ -1667,9 +1663,9 @@ item.ammo_standard.b75_inc.name=.75 болт (Зажигательный) item.ammo_standard.bmg50_ap.name=Патрон .50 BMG (Бронебойный) item.ammo_standard.bmg50_he.name=Патрон .50 BMG (Разрывной) item.ammo_standard.bmg50_du.name=Патрон .50 BMG (Обеднённый уран) -item.ammo_standard.bmg50_fmj.name=Патрон .50 BMG (Цельнометаллическая оболочка) -item.ammo_standard.bmg50_sm.name=Патрон .50 BMG (Звёздный Металл) -item.ammo_standard.bmg50_jhp.name=Патрон .50 BMG (Экспансивный+) +item.ammo_standard.bmg50_fmj.name=Патрон .50 BMG (Оболочечный) +item.ammo_standard.bmg50_sm.name=Патрон .50 BMG (Звёздный металл) +item.ammo_standard.bmg50_jhp.name=Патрон .50 BMG (Полуоболочечный экспансивный) item.ammo_standard.bmg50_sp.name=Патрон .50 BMG (Экспансивный) item.ammo_standard.capacitor.name=Оружейный конденсатор (Стандартный) item.ammo_standard.capacitor_ir.name=Оружейный конденсатор (Коротковолновой) @@ -1683,72 +1679,72 @@ item.ammo_standard.flame_balefire.name=Топливо огнемёта (Жар- item.ammo_standard.flame_diesel.name=Топливо огнемёта (Дизель) item.ammo_standard.flame_gas.name=Топливо огнемёта (Газ) item.ammo_standard.flame_napalm.name=Топливо огнемёта (Напалм) -item.ammo_standard.g10.name=Картечь 10-го калибра -item.ammo_standard.g10_du.name=Урановая картечь 10-го калибра -item.ammo_standard.g10_shrapnel.name=Шрапнельная картечь 10-го калибра -item.ammo_standard.g10_slug.name=Пуля 10-го калибра -item.ammo_standard.g10_explosive.name=Взрывная картечь 10-го калибра -item.ammo_standard.g12.name=Картечь 12-го калибра -item.ammo_standard.g12_anthrax.name=Инъекция сибирской язвы 12-го калибра -item.ammo_standard.g12_bp.name=Картечь 12-го калибра с чёрным порохом -item.ammo_standard.g12_bp_magnum.name=Тяжёлая картечь 12-го калибра с чёрным порохом -item.ammo_standard.g12_bp_slug.name=Пуля 12-го калибра с чёрным порохом -item.ammo_standard.g12_explosive.name=Взрывной снаряд 12-го калибра -item.ammo_standard.g12_flechette.name=Игольчатая картечь 12-го калибра -item.ammo_standard.g12_magnum.name=Тяжёлая картечь 12-го калибра -item.ammo_standard.g12_phosphorus.name=Зажигательная картечь 12-го калибра -item.ammo_standard.g12_slug.name=Пуля 12-го калибра +item.ammo_standard.g10.name=Патрон 10 калибра (Картечь) +item.ammo_standard.g10_du.name=Патрон 10 калибра (Обеднённый уран) +item.ammo_standard.g10_shrapnel.name=Патрон 10 калибра (Шрапнель) +item.ammo_standard.g10_slug.name=Патрон 10 калибра (Пуля) +item.ammo_standard.g10_explosive.name=Патрон 10 калибра (Разрывной) +item.ammo_standard.g12.name=Патрон 12 калибра (Картечь) +item.ammo_standard.g12_anthrax.name=Патрон 12 калибра (Сибирская язва) +item.ammo_standard.g12_bp.name=Патрон 12 калибра (Картечь на дымном порохе) +item.ammo_standard.g12_bp_magnum.name=Патрон 12 калибра (Картечь магнум на дымном порохе) +item.ammo_standard.g12_bp_slug.name=Патрон 12 калибра (Пуля на дымном порохе) +item.ammo_standard.g12_explosive.name=Патрон 12 калибра (Разрывной) +item.ammo_standard.g12_flechette.name=Патрон 12 калибра (Флешетты) +item.ammo_standard.g12_magnum.name=Патрон 12 калибра (Картечь магнум) +item.ammo_standard.g12_phosphorus.name=Патрон 12 калибра (Зажигательный) +item.ammo_standard.g12_slug.name=Патрон 12 калибра (Пуля) item.ammo_standard.g26_flare.name=26мм сигнальная ракета item.ammo_standard.g26_flare_supply.name=26мм сигнальная ракета (Запрос припасов) item.ammo_standard.g26_flare_weapon.name=26мм сигнальная ракета (Запрос оружия) -item.ammo_standard.g40_demo.name=40мм граната (Разрушающая) -item.ammo_standard.g40_he.name=40мм граната (Фугасная) -item.ammo_standard.g40_heat.name=40мм граната (Кумулятивная) -item.ammo_standard.g40_inc.name=40мм граната (Зажигательная) -item.ammo_standard.g40_phosphorus.name=40мм граната (Белый фосфор) -item.ammo_standard.m357_ap.name=Патрон .357 магнум (Бронебойный) -item.ammo_standard.m357_bp.name=Патрон .357 магнум (Чёрный порох) -item.ammo_standard.m357_express.name=Патрон .357 магнум (Высокомощная цельнометаллическая оболочка) -item.ammo_standard.m357_fmj.name=Патрон .357 магнум (Цельнометаллическая оболочка) -item.ammo_standard.m357_jhp.name=Патрон .357 магнум (Экспансивный+) -item.ammo_standard.m357_sp.name=Патрон .357 магнум (Экспансивный) -item.ammo_standard.m44_ap.name=Патрон .44 магнум (Бронебойный) -item.ammo_standard.m44_bp.name=Патрон .44 магнум (Чёрный порох) -item.ammo_standard.m44_express.name=Патрон .44 магнум (Высокомощная цельнометаллическая оболочка) -item.ammo_standard.m44_fmj.name=Патрон .44 магнум (Цельнометаллическая оболочка) -item.ammo_standard.m44_jhp.name=Патрон .44 магнум (Экспансивный+) -item.ammo_standard.m44_sp.name=Патрон .44 магнум (Экспансивный) +item.ammo_standard.g40_demo.name=40-мм граната (Штурмовая) +item.ammo_standard.g40_he.name=40-мм граната (Разрывная) +item.ammo_standard.g40_heat.name=40-мм граната (Кумулятивная) +item.ammo_standard.g40_inc.name=40-мм граната (Зажигательная) +item.ammo_standard.g40_phosphorus.name=40-мм граната (Белый фосфор) +item.ammo_standard.m357_ap.name=Патрон .357 Магнум (Бронебойный) +item.ammo_standard.m357_bp.name=Патрон .357 Магнум (Дымный порох) +item.ammo_standard.m357_express.name=Патрон .357 Магнум (Высокоскоростной оболочечный) +item.ammo_standard.m357_fmj.name=Патрон .357 Магнум (Оболочечный) +item.ammo_standard.m357_jhp.name=Патрон .357 Магнум (Полуоболочечный экспансивный) +item.ammo_standard.m357_sp.name=Патрон .357 Магнум (Экспансивный) +item.ammo_standard.m44_ap.name=Патрон .44 Магнум (Бронебойный) +item.ammo_standard.m44_bp.name=Патрон .44 Магнум (Дымный порох) +item.ammo_standard.m44_express.name=Патрон .44 Магнум (Высокоскоростной оболочечный) +item.ammo_standard.m44_fmj.name=Патрон .44 Магнум (Оболочечный) +item.ammo_standard.m44_jhp.name=Патрон .44 Магнум (Полуоболочечный экспансивный) +item.ammo_standard.m44_sp.name=Патрон .44 Магнум (Экспансивный) item.ammo_standard.nuke_balefire.name=Ядерный минизаряд (Жар-яйцо) -item.ammo_standard.nuke_demo.name=Ядерный минизаряд (Разрушающий) -item.ammo_standard.nuke_high.name=Ядерный минизаряд (Высокомощный) -item.ammo_standard.nuke_hive.name=Ракетный рой -item.ammo_standard.nuke_standard.name=Ядерный минизаряд +item.ammo_standard.nuke_demo.name=Ядерный минизаряд (Штурмовой) +item.ammo_standard.nuke_high.name=Ядерный минизаряд (Повышенной мощности) +item.ammo_standard.nuke_hive.name=Ракетный минизаряд (Ракетный рой) +item.ammo_standard.nuke_standard.name=Ядерный минизаряд (Стандартный) item.ammo_standard.nuke_tots.name=Ядерный минизаряд (Карапузы) item.ammo_standard.p22_ap.name=Патрон .22 LR (Бронебойный) -item.ammo_standard.p22_fmj.name=Патрон .22 LR (Цельнометаллическая оболочка) -item.ammo_standard.p22_jhp.name=Патрон .22 LR (Экспансивный+) +item.ammo_standard.p22_fmj.name=Патрон .22 LR (Оболочечный) +item.ammo_standard.p22_jhp.name=Патрон .22 LR (Полуоболочечный экспансивный) item.ammo_standard.p22_sp.name=Патрон .22 LR (Экспансивный) item.ammo_standard.p45_ap.name=Патрон .45 (Бронебойный) item.ammo_standard.p45_du.name=Патрон .45 (Обеднённый уран) -item.ammo_standard.p45_fmj.name=Патрон .45 (Цельнометаллическая оболочка) -item.ammo_standard.p45_jhp.name=Патрон .45 (Экспансивный+) +item.ammo_standard.p45_fmj.name=Патрон .45 (Оболочечный) +item.ammo_standard.p45_jhp.name=Патрон .45 (Полуоболочечный экспансивный) item.ammo_standard.p45_sp.name=Патрон .45 (Экспансивный) item.ammo_standard.p9_ap.name=Патрон 9мм (Бронебойный) -item.ammo_standard.p9_fmj.name=Патрон 9мм (Цельнометаллическая оболочка) -item.ammo_standard.p9_jhp.name=Патрон 9мм (Экспансивный+) +item.ammo_standard.p9_fmj.name=Патрон 9мм (Оболочечный) +item.ammo_standard.p9_jhp.name=Патрон 9мм (Полуоболочечный экспансивный) item.ammo_standard.p9_sp.name=Патрон 9мм (Экспансивный) item.ammo_standard.r556_ap.name=Патрон 5.56мм (Бронебойный) -item.ammo_standard.r556_fmj.name=Патрон 5.56мм (Цельнометаллическая оболочка) -item.ammo_standard.r556_jhp.name=Патрон 5.56мм (Экспансивный+) +item.ammo_standard.r556_fmj.name=Патрон 5.56мм (Оболочечный) +item.ammo_standard.r556_jhp.name=Патрон 5.56мм (Полуоболочечный экспансивный) item.ammo_standard.r556_sp.name=Патрон 5.56мм (Экспансивный) item.ammo_standard.r762_ap.name=Патрон 7.62мм (Бронебойный) item.ammo_standard.r762_du.name=Патрон 7.62мм (Обеднённый уран) -item.ammo_standard.r762_fmj.name=Патрон 7.62мм (Цельнометаллическая оболочка) +item.ammo_standard.r762_fmj.name=Патрон 7.62мм (Оболочечный) item.ammo_standard.r762_he.name=Патрон 7.62мм (Разрывной) -item.ammo_standard.r762_jhp.name=Патрон 7.62мм (Экспансивный+) +item.ammo_standard.r762_jhp.name=Патрон 7.62мм (Полуоболочечный экспансивный) item.ammo_standard.r762_sp.name=Патрон 7.62мм (Экспансивный) -item.ammo_standard.rocket_demo.name=Ракета (Разрушающая) -item.ammo_standard.rocket_he.name=Ракета (Фугасная) +item.ammo_standard.rocket_demo.name=Ракета (Штурмовая) +item.ammo_standard.rocket_he.name=Ракета (Осколочно-фугасная) item.ammo_standard.rocket_heat.name=Ракета (Кумулятивная) item.ammo_standard.rocket_inc.name=Ракета (Зажигательная) item.ammo_standard.rocket_phosphorus.name=Ракета (Белый фосфор) @@ -1757,11 +1753,6 @@ item.ammo_standard.stone_ap.name=Кремень и порох item.ammo_standard.stone_iron.name=Железный шарик и порох item.ammo_standard.stone_shot.name=Дробь и порох item.ammo_standard.tau_uranium.name=Ящик обеднённого урана-235 -item.ammo_stinger_rocket.name=Ракета-Стингер -item.ammo_stinger_rocket_he.name=Ракета-Стингер (Фугасная) -item.ammo_stinger_rocket_incendiary.name=Ракета-Стингер (Зажигательная) -item.ammo_stinger_rocket_nuclear.name=Ракета-Стингер (Привет) -item.ammo_stinger_rocket_bones.name=Ракета-Стингер (Поиск мобов) item.ams_catalyst_aluminium.name=Алюминиевый реакционный катализатор item.ams_catalyst_beryllium.name=Бериллиевый реакционный катализатор item.ams_catalyst_blank.name=Пустой реакционный катализатор @@ -1881,6 +1872,7 @@ item.battery_sc.pu238.name=Самозарядная батарейка (Плут item.battery_sc.ra226.name=Самозарядная батарейка (Радий-226) item.battery_sc.tc99.name=Самозарядная батарейка (Технеций-99) item.battery_sc.waste.name=Самозарядная батарейка (Ядерные отходы) +item.battery_sc.desc=Радиовольтаический устройства не подходят для$аккумуляторных разъемов! Выходная мощность может$быть нестабильной, и может возникнуть опасное$искрение! item.battery_spark.name=Спарк-батарея item.battery_su.name=Одноразовая батарейка item.battery_su_l.name=Большая одноразовая батарейка @@ -2057,8 +2049,8 @@ item.boy_target.name=Субкритическая цель U235 item.briquette.coal.name=Брикет угля item.briquette.lignite.name=Брикет бурого угля item.briquette.wood.name=Брикет древесных опилок -item.broken_item.name=Сломанный предмет -item.broken_item.prefix=Сломанный %s +item.broken_item.name=Бракованный предмет +item.broken_item.prefix=%s (Бракованный) item.bucket_acid.name=Ведро кислоты item.bucket_mud.name=Ведро токсичных отходов item.bucket_schrabidic_acid.name=Ведро шрабидиевой кислоты @@ -2477,11 +2469,11 @@ item.defuser.name=Высокотехнологичное устройство д item.defuser_gold.name=Золотые кусачки item.demon_core_closed.name=Закрытый Заряд-Демон item.demon_core_open.name=Приостановленный Заряд-Демон -item.desh_axe.name=Топор из рабочего сплава -item.desh_hoe.name=Мотыга из рабочего сплава -item.desh_pickaxe.name=Кирка из рабочего сплава -item.desh_shovel.name=Лопата из рабочего сплава -item.desh_sword.name=Меч из рабочего сплава +item.desh_axe.name=Деш-топор +item.desh_hoe.name=Деш-мотыга +item.desh_pickaxe.name=Деш-кирка +item.desh_shovel.name=Деш-лопата +item.desh_sword.name=Деш-меч item.designator.name=Целеуказатель ближнего действия item.designator_arty_range.name=Артиллерийский целеуказатель item.designator_manual.name=Ручной целеуказатель @@ -2619,11 +2611,11 @@ item.fluid_identifier_multi.name=Мульти-жидкостный иденти item.fluid_identifier_multi.info=Жидкостный идентификатор для: item.fluid_identifier_multi.info2=Второй тип: item.fluid_pack_empty.name=Большой жидкостный контейнер -item.fluid_pack_full.name=%s - упакованно +item.fluid_pack_full.name=%s - упаковано item.fluid_tank_empty.name=Пустой универсальный резервуар для жидкости -item.fluid_tank_full.name=Универсальный резервуар для жидкости: %s +item.fluid_tank_full.name=Универсальный резервуар для жидкости: %s item.fluid_tank_lead_empty.name=Пустой резервуар для опасных материалов -item.fluid_tank_lead_full.name=Резервуар с опасными материалами: %s +item.fluid_tank_lead_full.name=Резервуар с опасными материалами: %s item.fluorite.name=Флюорит item.flywheel_beryllium.name=Бериллиевый маховик item.fmn.name=Таблетка флунитразепама @@ -2718,7 +2710,7 @@ item.grenade_shell.stick.name=Корпус рукояточной гранаты item.grenade_shell.tech.name=Корпус высокотехнологичной гранаты item.grenade_universal.name=Граната item.glyphid_gland.name= Железа глифида -item.glyphid_gland_empty.name= Железа глифида +item.glyphid_gland_empty.name= Пустая железа глифида item.gun_aberrator.name=Пистолет "Aberrator" item.gun_aberrator_eott.name=Пистолеты "Eyes Of The Tempest" item.gun_am180.name=Пистолет-пулемёт .22 LR "American-180 " @@ -2785,7 +2777,7 @@ item.gun_minigun_lacunae.name=Миниган "Lacunae" item.gun_missile_launcher.name=Ракетная пусковая установка item.gun_mk108.name=Автоматический гранатомёт item.gun_n_i_4_n_i.name=Энергетический револьвер "N I 4 N I" -item.gun_pepperbox.name=Револьвер "Pepperbox" +item.gun_pepperbox.name=Многоствольный-пистолет "Pepperbox" item.gun_pa_melee.name=Силовая броня - Контроллер ближнего боя item.gun_pa_ranged.name=Силовая броня - Контроллер дальнего боя item.gun_panzerschreck.name=Гранатомёт "Panzerschreck" @@ -3109,27 +3101,27 @@ item.meteor_remote.name=Устройство для вызова метеори item.meteorite_sword.name=Метеоритовый меч item.meteorite_sword.desc=Выкован из павшей звезды$Острее, чем большинство земных лезвий item.meteorite_sword_seared.name=Метеоритовый меч (Опалённый) -item.meteorite_sword.seared.desc=Огонь укрепляет клинок,$Делая его даже ещё мощнее +item.meteorite_sword_seared.desc=Огонь укрепляет клинок,$Делая его даже ещё мощнее item.meteorite_sword_reforged.name=Метеоритовый меч (Перекованный) -item.meteorite_sword.reforged.desc=Меч был перекован,$Чтобы искоренить прошлые недостатки +item.meteorite_sword_reforged.desc=Меч был перекован,$Чтобы искоренить прошлые недостатки item.meteorite_sword_hardened.name=Метеоритовый меч (Закалённый) -item.meteorite_sword.hardened.desc=Экстремально высокое давление использовано,$Чтобы закаливать этот меч дальше +item.meteorite_sword_hardened.desc=Экстремально высокое давление использовано,$Чтобы закаливать этот меч дальше item.meteorite_sword_alloyed.name=Метеоритовый меч (Легированный) -item.meteorite_sword.alloyed.desc=Кобальт заполняет трещины,$Упрочняя меч +item.meteorite_sword_alloyed.desc=Кобальт заполняет трещины,$Упрочняя меч item.meteorite_sword_machined.name=Метеоритовый меч (Механически обработанный) -item.meteorite_sword.machined.desc=Было использовано передовое оборудование,$Чтобы ещё больше усовершенствовать лезвие +item.meteorite_sword_machined.desc=Было использовано передовое оборудование,$Чтобы ещё больше усовершенствовать лезвие item.meteorite_sword_treated.name=Метеоритовый меч (Обработанный) -item.meteorite_sword.treated.desc=Были применены химикаты,$Делающие меч мощнее +item.meteorite_sword_treated.desc=Были применены химикаты,$Делающие меч мощнее item.meteorite_sword_etched.name=Метеоритовый меч (Гравированный) -item.meteorite_sword.etched.desc=Кислоты очищают материал,$Чтобы получить этот идеальный меч +item.meteorite_sword_etched.desc=Кислоты очищают материал,$Чтобы получить этот идеальный меч item.meteorite_sword_bred.name=Метеоритовый меч (Разведённый) -item.meteorite_sword.bred.desc=Огромные количества тепла и радиации$Сжимают материал +item.meteorite_sword_bred.desc=Огромные количества тепла и радиации$Сжимают материал item.meteorite_sword_irradiated.name=Метеоритовый меч (Облучённый) -item.meteorite_sword.irradiated.desc=Сила Атома$Придает мечу мощи +item.meteorite_sword_irradiated.desc=Сила Атома$Придает мечу мощи item.meteorite_sword_fused.name=Метеоритовый меч (Сплавленный) -item.meteorite_sword.fused.desc=Этот клинок встретился$С силами звёзд +item.meteorite_sword_fused.desc=Этот клинок встретился$С силами звёзд item.meteorite_sword_baleful.name=Метеоритовый меч (Зловещий) -item.meteorite_sword.baleful.desc=Этот меч встретил температуры$Гораздо большие, чем обычный материал может выдержать +item.meteorite_sword_baleful.desc=Этот меч встретил температуры$Гораздо большие, чем обычный материал может выдержать item.mike_cooling_unit.name=Блок охлаждения дейтерия item.mike_core.name=Дейтериевый бак с урановым покрытием item.mike_deut.name=Дейтериевый бак @@ -3656,7 +3648,7 @@ item.pill_herbal.name=Травяная паста item.pill_herbal.desc=Эффективное средство против болезни лёгких $и небольшого радиационного отравления.$Имеет побочные эффекты. item.pill_red.name=Красная таблетка item.pin.name=Отмычка -item.pin.desc="*Немодифицированный* вероятность успешного взлома обычного замка составляет ~10%. +item.pin.desc="*Немодифицированный* вероятность успешного взлома обычного замка составляет ~10%%. item.pipentm.name=Труба (%s) item.pipes_steel.name=Стальные трубы item.pipes_steel.desc=Раскрафт был исключен из-за уклонения от уплаты налогов @@ -3902,7 +3894,7 @@ item.radaway.name=Антирадин item.radaway_flush.name=Супер-антирадин item.radaway_strong.name=Усиленный антирадин item.radx.name=Рад-X -item.radx.desc=Increases radiation resistance by 0.2 (37%) for 3 minutes +item.radx.desc=Даёт повышенное сопративление радиации на 0,2 (37%%) в течение 3-х минут. item.rag.name=Тряпка item.rag.desc=Бросьте в воду, чтобы намочить.$Нажмите ПКМ, чтобы помочиться на тряпку. item.rag_damp.name=Влажная тряпка @@ -4519,7 +4511,7 @@ item.warhead_thermo_exo.name=Экзотермическая боеголовка item.warhead_volcano.name=Тектоническая боеголовка item.waste_mox.name=Обеднённое топливо (МОКС) item.waste_natural_uranium.name=Обеднённое топливо (Природный уран) -tem.waste_plate_mox.name=Обеднённая топливная пластина (МОКС) +item.waste_plate_mox.name=Обеднённая топливная пластина (МОКС) item.waste_plate_pu238be.name=Обеднённая топливная пластина (Плутоний-238-бериллий) item.waste_plate_pu239.name=Обеднённая топливная пластина (Высокообогащённый плутоний-239) item.waste_plate_ra226be.name=Обеднённая топливная пластина (Радий-226-бериллий) @@ -4615,7 +4607,7 @@ item.weapon_mod_special.silencer.name=Глушитель item.weapon_mod_special.skin_saturnite.name=Сатурнитовый корпус item.weapon_mod_special.slowdown.name=Зубчатая передача item.weapon_mod_special.speedloader.name=Спидлоадер -item.weapon_mod_special.speedup.name=Вспомогательный элекртрический двигатель +item.weapon_mod_special.speedup.name=Вспомогательный электрический двигатель item.weapon_mod_special.stack_mag.name=Двухрядный магазин item.weapon_mod_test.damage.name=УЛУЧШЕНИЕ УРОНА item.weapon_mod_test.firerate.name=УЛУЧШЕНИЕ СКОРОСТИ СТРЕЛЬБЫ @@ -5033,6 +5025,7 @@ tile.capacitor_bus.desc=Выходной блок для конденсатор tile.capacitor_copper.name=Старый конденсатор tile.capacitor.desc=Вход: Сверху$Выход: Снизу через шину tile.cargo_elevator.name=Грузовой лифт +tile.cargo_door.name=Грузовая дверь tile.charge_c4.name=Подрывной заряд tile.charge_dynamite.name=Бомба с таймером tile.charge_miner.name=Шахтёрский заряд с таймером @@ -5067,15 +5060,15 @@ tile.cm_engine.desh.name=Моторный блок из деша tile.cm_engine.standard.name=Моторный блок tile.cm_flux.name=Приёмник нейтронного потока tile.cm_heat.name=Теплоприёмник -tile.cm_port.alloy.name=Люк из продвинутого сплава +tile.cm_port.alloy.name=Люк из бронзы tile.cm_port.desh.name=Люк из деша tile.cm_port.steel.name=Люк из стали tile.cm_port.tcalloy.name=Люк из технециевой стали -tile.cm_sheet.alloy.name=Лист из продвинутого сплава +tile.cm_sheet.alloy.name=Лист из бронзы tile.cm_sheet.desh.name=Лист из деша tile.cm_sheet.steel.name=Лист из стали tile.cm_sheet.tcalloy.name=Лист из технециевой стали -tile.cm_tank.alloy.name=Бак из продвинутого сплава +tile.cm_tank.alloy.name=Бак из бронзы tile.cm_tank.desh.name=Бак из деша tile.cm_tank.steel.name=Бак из стали tile.cm_tank.tcalloy.name=Бак из технециевой стали @@ -5128,34 +5121,34 @@ tile.concrete_stairs.name=Ступеньки из бетонной плитки tile.concrete_super.name=Убер-бетон tile.concrete_super_broken.name=Замшелые бетонные обломки tile.conveyor.name=Конвейер -tile.conveyor.desc=Перемещает предметы, упавшие на него$Может вращаться по часовой стрелке с помощью отвертки$Нажмите на отвертку для сгибания +tile.conveyor.desc=Перемещает предметы, упавшие на него$Может вращаться по часовой стрелке с помощью отвёртки$Нажмите на отвёртку для сгибания tile.conveyor_chute.name=Конвейерный желоб tile.conveyor_chute.desc=Перемещает предметы вниз$Самый нижний желоб будет действовать как обычный конвейер tile.conveyor_double.name=Двухполосный конвейер -tile.conveyor_double.desc=Перемещает предметы, опущенные на него$Может поворачиваться по часовой стрелке с помощью отвертки$Нажмите на отвертку для сгибания +tile.conveyor_double.desc=Перемещает предметы, опущенные на него$Может поворачиваться по часовой стрелке с помощью отвёртки$Нажмите на отвёртку для сгибания tile.conveyor_express.name=Быстрый конвейер -tile.conveyor_express.desc=Перемещает предметы, упавшие на него, очень быстро$Может вращаться по часовой стрелке с помощью отвертки$Нажмите на отвертку, чтобы согнуть +tile.conveyor_express.desc=Перемещает предметы, упавшие на него, очень быстро$Может вращаться по часовой стрелке с помощью отвёртки$Нажмите на отвёртку, чтобы согнуть tile.conveyor_lift.name=Конвейерный цепной лифт tile.conveyor_lift.desc=Перемещает предметы вверх$Для правильной работы требуется не менее двух блоков друг на друге tile.conveyor_triple.name=Трёхполосный конвейер -tile.conveyor_triple.desc=Перемещает предметы, упавшие на него$Может вращаться по часовой стрелке с помощью отвертки$Нажмите на отвертку для сгибания +tile.conveyor_triple.desc=Перемещает предметы, упавшие на него$Может вращаться по часовой стрелке с помощью отвёртки$Нажмите на отвёртку для сгибания tile.corium_block.name=Кориум tile.crane_boxer.name=Конвейерный упаковщик -tile.crane_boxer.desc=Загружает настраиваемое количество стопок в ящики, которые перемещаются по конвейерным лентам$Правый клик отверткой для установки входной стороны$Шифтовый клик отверткой для установки выходной стороны$Кликните дважды для установки противоположной стороны +tile.crane_boxer.desc=Загружает настраиваемое количество стопок в ящики, которые перемещаются по конвейерным лентам$Правый клик отвёрткой для установки входной стороны$Шифтовый клик отвёрткой для установки выходной стороны$Кликните дважды для установки противоположной стороны tile.crane_extractor.name=Конвейерный извлекатель -tile.crane_extractor.desc=Забирает предметы из инвентаря и помещает их на конвейерные ленты$Имеет до 9 слотов фильтрации с чёрным и белым списком$Правый клик отверткой для установки выходной стороны$Shift-клик отверткой для установки входной стороны$Кликните дважды для установки противоположной стороны +tile.crane_extractor.desc=Забирает предметы из инвентаря и помещает их на конвейерные ленты$Имеет до 9 слотов фильтрации с чёрным и белым списком$Правый клик отвёрткой для установки выходной стороны$Shift-клик отвёрткой для установки входной стороны$Кликните дважды для установки противоположной стороны tile.crane_grabber.name=Конвейерный сборщик -tile.crane_grabber.desc=Принимает предметы с проходящих конвейеров и помещает их в контейнеры$Принимает предметы только с ближайшей дорожки$Имеет до 9 слотов фильтрации с чёрным и белым списком$Правый клик отверткой для установки стороны входа$Сменный клик отверткой для установки стороны выхода$Кликните дважды для установки противоположной стороны +tile.crane_grabber.desc=Принимает предметы с проходящих конвейеров и помещает их в контейнеры$Принимает предметы только с ближайшей дорожки$Имеет до 9 слотов фильтрации с чёрным и белым списком$Правый клик отвёрткой для установки стороны входа$Сменный клик отвёрткой для установки стороны выхода$Кликните дважды для установки противоположной стороны tile.crane_inserter.name=Конвейерный вставщик -tile.crane_inserter.desc=Принимает предметы с конвейеров и помещает их в контейнеры$Правый щелчок отверткой для установки входной стороны$Shift-щелчок отверткой для установки выходной стороны$Кликните дважды для установки противоположной стороны +tile.crane_inserter.desc=Принимает предметы с конвейеров и помещает их в контейнеры$Правый щелчок отвёрткой для установки входной стороны$Shift-щелчок отвёрткой для установки выходной стороны$Кликните дважды для установки противоположной стороны tile.crane_partitioner.name=Вставщик окислителя tile.crane_partitioner.desc=Принимает и сохраняет до девяти входов рудного окислителя$и освобождает их, если они соответствуют требуемому размеру входа.$Неправильные предметы также сохраняются и должны быть извлечены из стороны. tile.crane_router.name=Конвейерный сортировщик tile.crane_router.desc=Сортирует элемент на основе заданных критериев$Стороны могут быть определены как чёрный список, белый список или подстановочный знак$Стороны подстановочного знака выбираются только в том случае, если ни один другой фильтр не подходит tile.crane_splitter.name=Конвейерный разделитель -tile.crane_splitter.desc=Разделяет предметы и равномерно укладывает их на две конвейерные ленты$Сама является конвейерной лентой, поэтому может напрямую входить в вставщик или сортировщик$Соотношение можно настроить с помощью отвертки +tile.crane_splitter.desc=Разделяет предметы и равномерно укладывает их на две конвейерные ленты$Сама является конвейерной лентой, поэтому может напрямую входить в вставщик или сортировщик$Соотношение можно настроить с помощью отвёртки tile.crane_unboxer.name=Конвейерный распаковщик -tile.crane_unboxer.desc=Приём коробок и извлечение их содержимого$Правый щелчок отверткой для установки выходной стороны$Shift-щелчок отверткой для установки входной стороны$Дважды щелкните для установки противоположной стороны +tile.crane_unboxer.desc=Приём коробок и извлечение их содержимого$Правый щелчок отвёрткой для установки выходной стороны$Shift-щелчок отвёрткой для установки входной стороны$Дважды щелкните для установки противоположной стороны tile.crashed_bomb.name=Неразорвавшаяся бомба tile.crate.name=Ящик снабжения tile.crate_ammo.name=Ящик из звёздного металла @@ -5233,7 +5226,7 @@ tile.dirt_dead.name=Мёртвая земля tile.dirt_oily.name=Пропитанная нефтью земля tile.drill_pipe.name=Бур tile.drone_crate.name=Пассивный ящик для дронов -tile.drone_crate.desc=Погрузочно-разгрузочная точка для транспортных дронов.$Действует как путевая точка, должна быть связана с линкером дронов.$Дроны должны приближаться под большим углом, иначе они застрянут. +tile.drone_crate.desc=Погрузочно-разгрузочная точка для транспортных дронов.$Действует как путевая точка, должна быть связана с соединителем дронов.$Дроны должны приближаться под большим углом, иначе они застрянут. tile.drone_crate_provider.name=Ящик снабжения для дронов tile.drone_crate_provider.desc=Предлагает предметы логистической сети.$Логистические дроны будут пытаться переместить предметы от поставщиков в ящики покупателей. tile.drone_crate_requester.name=Ящик запроса для дронов @@ -5241,7 +5234,7 @@ tile.drone_crate_requester.desc=Запрашивает предметы из л tile.drone_dock.name=Дрон-станция tile.drone_dock.desc=Точка спауна для логистических дронов.$Может обнаруживать поставщиков и заказчиков только в радиусе 5 чанков.$Дроны будут следовать только до 10 путевых точек за соединение. tile.drone_waypoint.name=Путевая точка для дронов -tile.drone_waypoint.desc=Путевая точка для дронов$Используйте линкер транспортного дрона, чтобы задать путь$Нажимайте на каждую путевую точку и крейт последовательно, чтобы создать путь,$ затем нажмите Shift, чтобы очистить сохраненную позицию$ Щелкните ПКМ или Shift, чтобы изменить смещение путевой точки +tile.drone_waypoint.desc=Путевая точка для дронов$Используйте линкер транспортного дрона, чтобы задать путь$Щелкните по каждой путевой точке и контейнеру по очереди, чтобы создать маршрут,$ затем нажмите Shift, чтобы очистить сохраненную позицию$ Щелкните ПКМ или Shift, чтобы изменить смещение путевой точки tile.drone_waypoint_request.name=Логистическая путевая точка для дронов tile.door_bunker.name=Бункерная дверь tile.door_metal.name=Металлическая дверь @@ -5291,12 +5284,12 @@ tile.fluid_duct.name=Универсальная жидкостная труба tile.fluid_duct_box.name=Универсальная жидкостная труба (Boxduct) tile.fluid_duct_exhaust.name=Выхлопная труба tile.fluid_duct_paintable_block_exhaust.name=Окрашиваемая покрытая выхлопная труба -tile.fluid_duct_paintable_block_exhaust.desc=Нажмите ПКМ с твердым блоком, чтобы установить краску$Краску можно убрать отверткой$Текстуру порта можно отключить устройством разминированием$Краску можно скопировать инструментом копирования +tile.fluid_duct_paintable_block_exhaust.desc=Нажмите ПКМ с твердым блоком, чтобы установить краску$Краску можно убрать отвёрткой$Текстуру порта можно отключить устройством разминированием$Краску можно скопировать инструментом копирования tile.fluid_duct_gauge.name=Труба с измерителем потока tile.fluid_duct_gauge.desc=Труба которая показывает сколько жидкости$перемещается внутри сети за тик.$Разделенные сети, соединенные бочками$или резервуары рассматриваются как одна общая сеть. tile.fluid_duct_neo.name=Универсальная жидкостная труба tile.fluid_duct_paintable.name=Окрашиваемая универсальная жидкостная труба -tile.fluid_duct_paintable.desc=Нажмите ПКМ с твердым блоком, чтобы установить краску$Краску можно убрать отверткой$Текстуру порта можно отключить устройством разминированием$Краску можно скопировать инструментом копирования +tile.fluid_duct_paintable.desc=Нажмите ПКМ с твердым блоком, чтобы установить краску$Краску можно убрать отвёрткой$Текстуру порта можно отключить устройством разминированием$Краску можно скопировать инструментом копирования tile.fluid_duct_solid.name=Покрытая универсальная жидкостная труба (Устаревшее) tile.fluid_pump.name=Помпа контроля потока tile.fluid_counter_valve.name=Жидкостный клапан со счётчиком @@ -5414,13 +5407,13 @@ tile.hadron_power_1g.name=Порт питания ускорителя част tile.hadron_power_10g.name=Порт питания ускорителя частиц (10GHE) tile.hazmat.name=Блок защитной ткани tile.heater_electric.name=Электрический нагреватель -tile.heater_electric.desc=Производит тепло, используя энергию.$Принимает тепло снизу, эффективность 85%%.$Можно настроить отверткой +tile.heater_electric.desc=Производит тепло, используя энергию.$Принимает тепло снизу, эффективность 85%%.$Можно настроить отвёрткой tile.heater_firebox.name=Топка tile.heater_firebox.desc=Производит тепло, сжигая твёрдое топливо. tile.heater_heatex.name=Теплообменный нагреватель tile.heater_heatex.desc=Выделяет тепло из горячих жидкостей. -tile.heater_oilburner.name=Жидкостный котёл -tile.heater_oilburner.desc=Производит тепло, сжигая жидкое топливо.$Может быть настроено с помощью отвертки. +tile.heater_oilburner.name=Жидкостный нагреватель +tile.heater_oilburner.desc=Сжигает жидкое топливо для выработки тепла.$Можно настроить с помощью отвёртки. tile.heater_oven.name=Нагревательная печь tile.heater_oven.desc=Производит тепло, сжигая твёрдое топливо.$Принимает тепло снизу с 50%% эффективностью. tile.hev_battery.name=Батарея костюма @@ -5528,13 +5521,8 @@ tile.machine_crystallizer.name=Рудный окислитель tile.machine_cyclotron.name=Циклотрон tile.machine_detector.name=Детектор мощности tile.machine_deuterium_extractor.name=Экстрактор дейтерия -tile.machine_deuterium_tower.name=Колонна экстракции дейтерия +tile.machine_deuterium_tower.name=Башня экстракции дейтерия Гирдлера tile.machine_diesel.name=Дизельный генератор -tile.machine_difurnace_extension.name=Расширитель доменной печи -tile.machine_difurnace_off.name=Доменная печь -tile.machine_difurnace_on.name=Доменная печь -tile.machine_difurnace_rtg_off.name=Ядерная доменная печь -tile.machine_difurnace_rtg_on.name=Ядерная доменная печь tile.machine_drain.name=Сливная труба tile.machine_drill.name=Автоматический горный бур tile.machine_electric_furnace_off.name=Электрическая печь @@ -5544,7 +5532,7 @@ tile.machine_epress.name=Электрический пресс tile.machine_excavator.name=Большой горный бур tile.machine_exposure_chamber.name=Камера облучения частицами tile.machine_fel.name=Лазер на свободных электронах (FEL) -tile.machine_flare.name=Газовая башня +tile.machine_flare.name=Газовый факел tile.machine_fluidtank.name=Цистерна tile.machine_forcefield.name=Излучатель силового поля tile.machine_fraction_tower.name=Ректификационная колонна @@ -5575,7 +5563,7 @@ tile.machine_mixer.name=Промышленный миксер tile.machine_orbus.name=Тяжёлый магнитный контейнер для антиматерии tile.machine_ore_slopper.name=Переработчик бедроковой руды tile.machine_powerrtg.name=ПТ-изотопная ячейка -tile.machine_precass.name=Высокоточный сборщик +tile.machine_precass.name=Прецизионный сборщик tile.machine_press.name=Пресс tile.machine_puf6_tank.name=Бочка гексафторида плутония tile.machine_pumpjack.name=Станок-качалка @@ -5626,14 +5614,13 @@ tile.machine_telelinker.name=Стол телелинка tile.machine_teleporter.name=Телепорт tile.machine_thresher.name=Автоматическая молотилка tile.machine_thresher.desc=Сбор урожая и повторная посадка культур.$Принимает:$-Древесное масло$-Этанол$-Рыбное масло$-Тяжёлую нефть$-Креозот из угольной смолы -tile.machine_thresher.suspended=Suspended +tile.machine_thresher.suspended=Приостановлена tile.machine_tower_large.name=Градирня tile.machine_tower_small.name=Вспомогательная градирня tile.machine_transformer.name=Трансформатор 10k-20Гц tile.machine_transformer_20.name=Трансформатор 10k-1Гц tile.machine_transformer_dnt.name=Трансформатор ДНТ-20Гц tile.machine_transformer_dnt_20.name=Трансформатор ДНТ-1Гц -tile.machine_turbine.name=Паровая турбина tile.machine_turbine.desc=Эффективность: 85%% tile.machine_turbinegas.name=Газовая турбина комбинированного цикла tile.machine_turbofan.name=Турбовентилятор @@ -5679,7 +5666,7 @@ tile.nuke_prototype.name=Прототип tile.nuke_solinium.name=Синий Ополаскиватель tile.nuke_tsar.name=Царь-бомба tile.oc_cable_paintable.name=Окрашиваемый сетевой кабель -tile.oc_cable_paintable.desc=Нажмите ПКМ с твердым блоком, чтобы установить краску$Краску можно убрать отверткой$Текстуру порта можно отключить устройством разминированием$Краску можно скопировать инструментом копирования +tile.oc_cable_paintable.desc=Нажмите ПКМ с твердым блоком, чтобы установить краску$Краску можно убрать отвёрткой$Текстуру порта можно отключить устройством разминированием$Краску можно скопировать инструментом копирования tile.oil_duct.name=Труба для нефти tile.oil_duct_solid.name=Покрытая труба для нефти tile.oil_pipe.name=Труба для извлечения неочищенной нефти @@ -5771,17 +5758,17 @@ tile.ore_uranium_scorched.name=Обожжённая урановая руда tile.ore_verticium.name=Долларовый Зелёный минерал tile.ore_volcano.name=Геотермальный источник tile.ore_weidanium.name=Вейдитит -tile.pa_beamline.name=Канал пучка +tile.pa_beamline.name=Канал пучка (Ускоритель частиц) tile.pa_beamline.desc=Необязательная часть, соединяет разные части ускорителя частиц.$Также позволяет недорого увеличить размер кольца,$для соответствия требованиям диполя к размеру катушки. -tile.pa_detector.name=Детектор частиц +tile.pa_detector.name=Детектор частиц (Ускоритель частиц) tile.pa_detector.desc=Требует охлаждения!$Принимает частицы и выполняет рецепт.$Рецепты могут требовать контейнеры (капсулы для частиц).$Для приёма частицы её расфокус должен быть равен 0. -tile.pa_dipole.name=Дипольные магниты +tile.pa_dipole.name=Дипольные магниты (Ускоритель частиц) tile.pa_dipole.desc=Требует охлаждения!$Перенаправляет частицы на основе их момента.$Имеет выходы ниже порога,$выше порога и только выше порога при поданном сигнале красного камня.$Требует большую катушку для работы. -tile.pa_quadrupole.name=Квадрупольные магниты +tile.pa_quadrupole.name=Квадрупольные магниты (Ускоритель частиц) tile.pa_quadrupole.desc=Требует охлаждения!$Уменьшает расфокус частицы на 100 единиц.$Требует большую катушку для работы -tile.pa_rfc.name=Радиочастотный резонатор +tile.pa_rfc.name=Радиочастотный резонатор (Ускоритель частиц) tile.pa_rfc.desc=Требует охлаждения!$Ускоряет частицы на 100 единиц,$и увеличивает расфокус на 100 единиц.$Частица столкнется при достижении расфокуса в 1000 единиц. -tile.pa_source.name=Источник частиц +tile.pa_source.name=Источник частиц (Ускоритель частиц) tile.pa_source.desc=Требует охлаждения!$Использует два предмета, чтобы создать частицу. tile.part_emitter.name=Декоративный источник частиц tile.pedestal.name=Пьедестал @@ -5808,9 +5795,15 @@ tile.plant_tall.weed.name=Конопля tile.plasma.name=Плазма tile.plasma_heater.name=Нагреватель плазмы tile.plushie.name=Плюшевая игрушка %s +tile.pneumatic_storage_access.name=Пневмосистема хранения - Терминал доступа +tile.pneumatic_storage_clutter.name=Пневмосистема хранения — Буферное хранилище +tile.pneumatic_storage_importer.name=Пневмосистема хранения - Импортёр +tile.pneumatic_storage_mono.name=Пневмосистема хранения - Монохранилище +tile.pneumatic_storage_exporter.name=Пневмосистема хранения - Экспортёр tile.pneumatic_tube.name=Пневмотруба -tile.pneumatic_tube.desc=Пересылает предметы за счёт сжатого воздуха.$ПКМ с отверткой, чтобы переключить вход.$ПКМ с отверткой в присяде, чтобы переключить выход.$Входы могут быть настроены и подключены к источнику сжатого воздуха.$Отсылает вплоть до полного стака четыре раза в секунду. +tile.pneumatic_tube.desc=Пересылает предметы за счёт сжатого воздуха.$ПКМ с отвёрткой, чтобы переключить вход.$ПКМ с отвёрткой в присяде, чтобы переключить выход.$Входы могут быть настроены и подключены к источнику сжатого воздуха.$Отсылает вплоть до полного стака четыре раза в секунду. tile.pneumatic_tube_paintable.name=Окрашиваемая пневмотруба +tile.pneumatic_tube_paintable.desc=Нажмите ПКМ с твердым блоком, чтобы установить краску$Краску можно убрать отвёрткой$Текстуру порта можно отключить устройством разминированием$Краску можно скопировать инструментом копирования tile.pole_satellite_receiver.name=Спутниковая тарелка tile.pole_top.name=Антенна tile.press_preheater.name=Внешний нагреватель пресса @@ -5887,25 +5880,25 @@ tile.rbmk_control_reasim.name=Регулирующие стержни РБМК ( tile.rbmk_control_reasim_auto.name=Автоматические регулирующие стержни РБМК (РеаСим) tile.rbmk_crane_console.name=Консоль крана РБМК tile.rbmk_display.name=Дисплей-панель РБМК -tile.rbmk_display.desc=Может быть подключен с помощью РБМК соединителем.$Отображает сегмент РБМК размером 7x7.$Вид можно поворачивать с помощью отвертки. +tile.rbmk_display.desc=Может быть подключен с помощью РБМК соединителем.$Отображает сегмент РБМК размером 7x7.$Вид можно поворачивать с помощью отвёртки. tile.rbmk_display_blank.name=Редстоун-по-радио пустая панель tile.rbmk_display_blank.desc=Простые панель для расширения консоли управления РпР. tile.rbmk_heater.name=Жидкостный нагреватель РБМК tile.rbmk_indicator.name=Редстоун-по-радио индикаторные лампы -tile.rbmk_indicator.desc=Можно настроить с помощью отвертки.$Устройство может иметь до шести индикаторов$которые загораются, когда значение РпР$попадает в установленный диапазон пороговых значений. +tile.rbmk_indicator.desc=Можно настроить с помощью отвёртки.$Устройство может иметь до шести индикаторов$которые загораются, когда значение РпР$попадает в установленный диапазон пороговых значений. tile.rbmk_key_pad.name=Редстоун-по-радио клавиатура -tile.rbmk_key_pad.desc=Можно настроить с помощью отвертки.$Позволяет установить до четырех различных кнопок, которые$отправляют сигналы РпР при нажатии. +tile.rbmk_key_pad.desc=Можно настроить с помощью отвёртки.$Позволяет установить до четырех различных кнопок, которые$отправляют сигналы РпР при нажатии. tile.rbmk_lever.name=Редстоун-по-радио рычаг -tile.rbmk_lever.desc=Можно настроить с помощью отвертки.$Позволяет установить до двух рычагов,которые отправляют$РпР сигналы в любом положение. +tile.rbmk_lever.desc=Можно настроить с помощью отвёртки.$Позволяет установить до двух рычагов,которые отправляют$РпР сигналы в любом положение. tile.rbmk_gauge.name=Редстоун-по-радио измеритель -tile.rbmk_gauge.desc=Можно настроить с помощью отвертки.$Отображает до четырех измерителей значений из различных$источников сигналов РпР. +tile.rbmk_gauge.desc=Можно настроить с помощью отвёртки.$Отображает до четырех измерителей значений из различных$источников сигналов РпР. tile.rbmk_graph.name=Редстоун-по-радио график -tile.rbmk_graph.desc=Можно настроить с помощью отвертки.$Регистрирует и отображает до двух графиков значений$из разных источников сигналов РпР. +tile.rbmk_graph.desc=Можно настроить с помощью отвёртки.$Регистрирует и отображает до двух графиков значений$из разных источников сигналов РпР. tile.rbmk_loader.name=Паровой проводник РБМК tile.rbmk_loader.desc=Позволяет РБМК иметь внизу соединения для воды и пара$Поместите одну водную трубу под колонной РБМК, затем проводник,$потом подключите паропровод к проводнику. tile.rbmk_moderator.name=Графитовый замедлитель РБМК tile.rbmk_numitron.name=Редстоун-по-радио цифровой дисплей -tile.rbmk_numitron.desc=Можно настроить с помощью отвертки.$Отображает до двух цифровых дисплейных значений$из разных источников сигналов РпР. +tile.rbmk_numitron.desc=Можно настроить с помощью отвёртки$Отображает до двух цифровых дисплейных значений$из разных источников сигналов РпР. tile.rbmk_outgasser.name=Колонна облучения РБМК tile.rbmk_reflector.name=Карбид-вольфрамовый отражатель нейтронов РБМК tile.rbmk_rod.name=Топливный канал РБМК @@ -5913,7 +5906,7 @@ tile.rbmk_rod_mod.name=Замедляющий топливный канал РБ tile.rbmk_rod_reasim.name=Топливный канал РБМК (РеаСим) tile.rbmk_rod_reasim_mod.name=Замедляющий топливный канал РБМК (РеаСим) tile.rbmk_steam_inlet.name=Порт ввода воды РБМК РеаСим -tile.rbmk_steam_inlet.desc=Подает воду в колонны РБМК, если включены ReaSim бойлеры$Подключается к колоннам РБМК сбоку +tile.rbmk_steam_inlet.desc=Подаёт воду в колонны РБМК, если включены ReaSim бойлеры$Подключается к колоннам РБМК сбоку tile.rbmk_steam_outlet.name=Порт вывода пара РБМК РеаСим tile.rbmk_steam_outlet.desc=Извлекает перегретый пар из колонн РБМК, если включены ReaSim бойлеры$Подключается к колоннам РБМК сбоку tile.rbmk_storage.name=Колонна-хранилище РБМК @@ -5989,6 +5982,7 @@ tile.red_cable_classic.name=Провод из красной меди (Стар tile.red_cable_gauge.name=Датчик мощности tile.red_cable_gauge.desc=Кабель, который показывает, сколько энергии$ перемещается по сети за тик.$Разделенные сети, соединенные блоками хранения энергии$рассматриваются как одна общая сеть. tile.red_cable_paintable.name=Окрашиваемый провод из красной меди +tile.red_cable_paintable.desc=Нажмите ПКМ с твердым блоком, чтобы установить краску$Краску можно убрать отвёрткой$Текстуру порта можно отключить устройством разминированием$Краску можно скопировать инструментом копирования tile.red_connector.name=Электрический коннектор tile.red_connector_super.name=Мощный электрический коннектор tile.red_pylon.name=Малый электрический столб @@ -6263,7 +6257,7 @@ turret.on=ВКЛ turret.players=Целиться по игрокам: %s upgrade.acid=Требуется кислота %s -upgrade.burn=Burn %sмб/тик за %sHE +upgrade.burn=Сжигает %sмб/тик за %sHE upgrade.consumption=Потребление %s upgrade.coolantConsumption=Потребление охладителя %s upgrade.delay=Время %s diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 19e2f0a7b..fbc8815cd 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -2318,7 +2318,7 @@ item.debris_fuel.name=RBMK石墨式反应堆燃料块 item.debris_graphite.name=热石墨块 item.debris_metal.name=断裂金属棒 item.debris_shrapnel.name=走道碎片 -item.definitelyfood.name=完全不脏牌军粮 +item.definitelyfood.name=军粮 item.defuser.name=高科技拆弹装置 item.defuser_gold.name=黄金剪线钳 item.demon_core_closed.name=封闭的恶魔核心 @@ -5513,7 +5513,7 @@ tile.turret_fritz.name=重型火焰喷射器炮塔“弗里茨” tile.turret_heavy.name=重型机枪炮塔 tile.turret_himars.name=火箭炮塔“亨利” tile.turret_howard.name=双联守门员近防系统“霍华德” -tile.turret_howard_damaged.name=CIWS双联守门员近防系统 “玛士撒拉” +tile.turret_howard_damaged.name=CIWS双联守门员近防系统 “玛土撒拉” tile.turret_jeremy.name=重炮炮塔“杰里米” tile.turret_light.name=轻型机枪炮塔 tile.turret_maxwell.name=高能微波炮塔 “麦克斯韦” @@ -6377,4 +6377,16 @@ tile.machine_thresher.desc=收割并重新种植作物,$可接受:$-木油$- tile.machine_thresher.suspended=暂停 tile.nospawn=生物不会在这个方块上生成! tile.radio_autocal.name=AUTOCAL自动计算机 -tile.vending_machine.name= 自动售货机 +tile.vending_machine.name=自动售货机 +item.coin_token.name=自动售货机代币 +container.pneumoStorageAccess=PSN访问终端 +container.pneumoStorageClutter=PSN杂项存储 +container.pneumoStorageExporter=PSN导出器 +container.pneumoStorageImporter=PSN导入器 +container.pneumoStorageMono=PSN大宗存储 +tile.pneumatic_storage_access.name=气动存储网络 - 访问终端 +tile.pneumatic_storage_clutter.name=气动存储网络 - 杂项储存 +tile.pneumatic_storage_exporter.name=气动存储网络 - 导出器 +tile.pneumatic_storage_importer.name=气动存储网络 - 导入器 +tile.pneumatic_storage_mono.name=气动存储网络 - 大宗储存 +tile.cargo_door.name=货运大门 diff --git a/src/main/resources/assets/hbm/manual/machine/blastfurnace.json b/src/main/resources/assets/hbm/manual/machine/blastfurnace.json index 4962632e6..7cdffc76b 100644 --- a/src/main/resources/assets/hbm/manual/machine/blastfurnace.json +++ b/src/main/resources/assets/hbm/manual/machine/blastfurnace.json @@ -9,7 +9,7 @@ }, "content": { "en_US": "Simple furnace that can combine two items into one output and an optional byproduct, usually in the form of an alloy. Needed early on as the first source of [[steel|Steel]] and [[red copper|Minecraft Grade Copper]]. Does not accept all furnace fuels, only works with hot burning ones like coal, coke, or solid fuel. Accepts hot air blast which accelerates the process up to three times the recipe's intended speed. Produces flue gas, which can be burned for energy or simply flared.", - "ru_RU": "Простая печь, которая может объединять два элемента в один продукт и дополнительный побочный продукт, обычно в виде сплава. На раннем этапе необходима в качестве первого источника [[стали|Steel]], [[красной меди|Minecraft Grade Copper]] и [[продвинутого сплава|Advanced Alloy]]. Работает не со всеми видами топлива, а только с высокотемпературным, таким как уголь, кокс или твердое топливо. Принимает поток горячего воздуха, который ускоряет процесс до трех раз по сравнению с заданной скоростью рецепта. Производит дымовой газ, который можно сжечь просто так или для получения энергии.", + "ru_RU": "Простая печь, которая может объединять два элемента в один продукт и дополнительный побочный продукт, обычно в виде сплава. На раннем этапе необходима в качестве первого источника [[стали|Steel]], [[красной меди|Minecraft Grade Copper]]. Работает не со всеми видами топлива, а только с высокотемпературным, таким как уголь, кокс или твердое топливо. Принимает поток горячего воздуха, который ускоряет процесс до трех раз по сравнению с заданной скоростью рецепта. Производит дымовой газ, который можно сжечь просто так или для получения энергии.", "zh_CN": "一种能将两种物品结合为一种产物的简单熔炉,产物通常为一种合金。 是游戏前期必需的机器,也是[[钢|Steel]]、[[紫铜|Minecraft Grade Copper]]和[[高级合金|Advanced Alloy]]的最初来源。高炉并不能接受所有熔炉燃料,只接受煤炭、焦炭和岩浆桶等高温 燃料。可以通过在顶部放置高炉烟道来加速,同时提升其效率。" } } diff --git a/src/main/resources/assets/hbm/manual/machine/heatsource.json b/src/main/resources/assets/hbm/manual/machine/heatsource.json index e6f4acf4e..2c695f1f3 100644 --- a/src/main/resources/assets/hbm/manual/machine/heatsource.json +++ b/src/main/resources/assets/hbm/manual/machine/heatsource.json @@ -10,6 +10,6 @@ "content": { "en_US": "Many machines require TU - thermal units - to function. TU is transfered via copper contacts on the undersides of machines, they cannot be connected with pipes or cables.

Machines that can provide heat are:
[[Firebox]]
[[Heating Oven]]
[[Fluid Burner]]
[[Electric Heater]]
[[Heat Exchanging Heater]]

Machines that use TU include, but are not limited to:
[[Stirling Engine]]
[[Combination Oven]]
[[Boiler]]
[[Steel Furnace]]
[[Crucible]]", "zh_CN": "很多机器需要TU——“热量单位”才能工作。TU通过机器底部的铜触点进行传输, 而不能用线缆或管道等传输。

可提供热量的机器包括但不限于:
[[燃烧室|Firebox]]
[[加热炉|Heating Oven]]
[[流体燃烧器|Fluid Burner]]
[[电加热器|Electric Heater]]
[[换热加热器|Heat Exchanging Heater]]

使用TU的机器包括但不限于:
[[斯特林发电机|Stirling Engine]]
[[复式炼焦炉|Combination Oven]]
[[锅炉|Boiler]]
[[钢炉|Steel Furnace]]
[[坩埚|Crucible]]", - "ru_RU": "Для работы многих машин требуются TU — тепловые единицы. Машины передают TU через медные контакты, они не могут быть соединены трубами или проводами.

К устройствам, которые могут подавать тепло, относятся:
[[Топка|Firebox]]
[[Нагревательная печь|Heating Oven]]
[[Жидкостный котёл|Fluid Burner]]
[[Электрический нагреватель|Electric Heater]]
[[Теплообменный нагреватель|Heat Exchanging Heater]]

Вот некоторые примеры машин, использующих TU:
[[Генератор Стирлинга|[Stirling Engine]]
[[Коксовая печь|Combination Oven]]
[[Бойлер|Boiler]]
[[Стальная печь|[Steel Furnace]]
[[Плавильня|Crucible]]" + "ru_RU": "Для работы многих машин требуются TU — тепловые единицы. Машины передают TU через медные контакты, они не могут быть соединены трубами или проводами.

К устройствам, которые могут подавать тепло, относятся:
[[Топка|Firebox]]
[[Нагревательная печь|Heating Oven]]
[[Жидкостная горелка|Fluid Burner]]
[[Электрический нагреватель|Electric Heater]]
[[Теплообменный нагреватель|Heat Exchanging Heater]]

Вот некоторые примеры машин, использующих TU:
[[Генератор Стирлинга|[Stirling Engine]]
[[Коксовая печь|Combination Oven]]
[[Бойлер|Boiler]]
[[Стальная печь|[Steel Furnace]]
[[Литейный тигель|Crucible]]" } } diff --git a/src/main/resources/assets/hbm/manual/machine/oilburner.json b/src/main/resources/assets/hbm/manual/machine/oilburner.json index 7f20c49a4..a8829bd07 100644 --- a/src/main/resources/assets/hbm/manual/machine/oilburner.json +++ b/src/main/resources/assets/hbm/manual/machine/oilburner.json @@ -5,7 +5,7 @@ "title": { "en_US": "Fluid Burner", "zh_CN": "流体燃烧器", - "ru_RU": "Жидкостный котёл" + "ru_RU": "Жидкостная горелка" }, "content": { "en_US": "An [[external heat source|External Heat Source]] powered by flammable fluids, usually derivatives of [[oil|Crude Oil]]. Needs to be turned on in the GUI to function. The flow rate can be increased using a screwdriver, from 1mB/t to 10mB/t.", diff --git a/src/main/resources/assets/hbm/manual/machine/solarboiler.json b/src/main/resources/assets/hbm/manual/machine/solarboiler.json index 784b12884..8f3c7f55f 100644 --- a/src/main/resources/assets/hbm/manual/machine/solarboiler.json +++ b/src/main/resources/assets/hbm/manual/machine/solarboiler.json @@ -3,9 +3,11 @@ "icon": ["hbm:tile.machine_solar_boiler", 1, 0], "trigger": [["hbm:tile.machine_solar_boiler"], ["hbm:tile.solar_mirror"]], "title": { - "en_US": "Solar Tower Boiler" + "en_US": "Solar Tower Boiler", + "ru_RU": "Бойлер солнечной башни" }, "content": { - "en_US": "The solar tower boiler is a simple machine that can turn water into steam. It requires focused sunlight to do so, coming from heliostat mirrors. Right-click the boiler to save its position, then click on the mirrors that should be pointed at this boiler. Mirrors cannot be tilted past 45°, so it is important to put the boiler at an elevated position (hence solar TOWER boiler). In other words: The horizontal distance between the mirrors and the boiler cannot exceed the vertical distance. Consequently, the higher up the boiler is, the more mirrors can be connected to it.

Due to the boiler running off of sunlight, it will not work during the night. But you already knew that. Sunlight is also not very powerful, so in order to bring water to a boil, about a dozen mirrors are required at minimum.

The boiler has no GUI, nor can water be inserted directly, it needs to be supplied via pipes. The resulting steam can then be used in a [[steam engine|Steam Engine]], yielding power and low-pressure steam, which can then be [[condensed|Condenser]] back into usable water." + "en_US": "The solar tower boiler is a simple machine that can turn water into steam. It requires focused sunlight to do so, coming from heliostat mirrors. Right-click the boiler to save its position, then click on the mirrors that should be pointed at this boiler. Mirrors cannot be tilted past 45°, so it is important to put the boiler at an elevated position (hence solar TOWER boiler). In other words: The horizontal distance between the mirrors and the boiler cannot exceed the vertical distance. Consequently, the higher up the boiler is, the more mirrors can be connected to it.

Due to the boiler running off of sunlight, it will not work during the night. But you already knew that. Sunlight is also not very powerful, so in order to bring water to a boil, about a dozen mirrors are required at minimum.

The boiler has no GUI, nor can water be inserted directly, it needs to be supplied via pipes. The resulting steam can then be used in a [[steam engine|Steam Engine]], yielding power and low-pressure steam, which can then be [[condensed|Condenser]] back into usable water.", + "ru_RU": "Бойлер солнечной башни это простое устройство, способное превращать воду в пар. Для работы ему необходим сфокусированный солнечный свет, отражаемый зеркалами-гелиостатами. Щелкните правой кнопкой мыши по бойлеру, чтобы сохранить его положение, а затем нажмите по зеркалам, которые должны быть направлены на этот бойлер. Зеркала невозможно наклонить более чем на 45°, поэтому важно размещать бойлер на возвышении (отсюда и название: бойлер солнечной БАШНИ). Иными словами: горизонтальное расстояние между зеркалами и бойлером не должно превышать вертикальное. Следовательно, чем выше расположен бойлер, тем больше зеркал к нему можно подключить. Поскольку бойлер работает от солнечного света, ночью он функционировать не будет. Но вы это и так знали. Солнечный свет сам по себе не очень мощный, поэтому, чтобы довести воду до кипения, требуется как минимум около десятка зеркал. У бойлера нет графического интерфейса (GUI), и воду в него нельзя залить напрямую — её необходимо подавать по трубам. Полученный пар затем можно использовать в [[паровой двигатель|Steam Engine]], что даст энергию и пар низкого давления, который впоследствии можно [[конденсировать|Condenser]] обратно в пригодную для использования воду." } } diff --git a/src/main/resources/assets/hbm/manual/material/copper.json b/src/main/resources/assets/hbm/manual/material/copper.json index 6128cd97e..767cd16d5 100644 --- a/src/main/resources/assets/hbm/manual/material/copper.json +++ b/src/main/resources/assets/hbm/manual/material/copper.json @@ -10,8 +10,8 @@ }, "content": { "en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.

[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.

[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.

[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.

[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils.", - "uk_UA": "Поширений ресурс. У сирому вигляді здебільшого використовується як конструкційний матеріал, а також у речах, що витримують високі температури (такі як теплопропровідники). Активно використовується в різних сплавах.

[[Червона мідь|Minecraft Grade Copper]] — це сплав, виготовлений з редстоуну, який використовується майже у всіх електричних пристроях.

[[Удосконалений сплав|Advanced Alloy]] — це потужний ранній інструментальний матеріал, який перевершує алмаз.

[[Гарматна бронза|Gunmetal]] — це важливий компонент багатьох видів зброї, а також гільз для боєприпасів.

[[Вісмутова бронза|Bismuth Bronze]] та [[миш'якова бронза|Arsenic Bronze]] — це пост-[[РБМК|RBMK]] матеріали що використовуються в багатьох машинах пізньої версії гри.

[[BSCCO]] — це надпровідник, похідний від [[вісмуту|Bismuth]] необхідний для високорівневих квантових схем та котушок [[прискорювача часток|Particle Accelerator]].", - "ru_RU": "Распространённый ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.

[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.

[[Продвинутый сплав|Advanced Alloy]] — мощный материал для ранних инструментов, превосходящий алмаз.

[[Пушечная бронза|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.

[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.

[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для высокоуровневых квантовых схем и катушек [[ускорителя частиц|Particle Accelerator]].", + "uk_UA": "Поширений ресурс. У сирому вигляді здебільшого використовується як конструкційний матеріал, а також у речах, що витримують високі температури (такі як теплопропровідники). Активно використовується в різних сплавах.

[[Червона мідь|Minecraft Grade Copper]] — це сплав, виготовлений з редстоуну, який використовується майже у всіх електричних пристроях.

[[Гарматна бронза|Gunmetal]] — це важливий компонент багатьох видів зброї, а також гільз для боєприпасів.

[[Вісмутова бронза|Bismuth Bronze]] та [[миш'якова бронза|Arsenic Bronze]] — це пост-[[РБМК|RBMK]] матеріали що використовуються в багатьох машинах пізньої версії гри.

[[BSCCO]] — це надпровідник, похідний від [[вісмуту|Bismuth]] необхідний для високорівневих квантових схем та котушок [[прискорювача часток|Particle Accelerator]].", + "ru_RU": "Распространённый ресурс. В чистом виде в основном используется как конструкционный материал и в вещах, работающих с высокими температурами (как теплопроводник). Широко применяется в различных сплавах.

[[Красная медь|Minecraft Grade Copper]] — это сплав, изготовленный из красного камня, используемый почти во всех электрических устройствах.

[[Пушечная бронза|Gunmetal]] — важный компонент многих видов оружия, а также гильз для боеприпасов.

[[Висмутовая бронза|Bismuth Bronze]] и [[мышьяковая бронза|Arsenic Bronze]] — материалы, доступные после [[РБМК|RBMK]], используемые во многих машинах поздней игры.

[[BSCCO]] — сверхпроводник, производный от [[висмута|Bismuth]], необходимый для высокоуровневых квантовых схем и катушек [[ускорителя частиц|Particle Accelerator]].", "zh_CN": "常见资源。纯铜主要用作结构材料,或在能够承受高温的设备中使用(作热导体); 铜的多种合金用途极广。

[[紫铜|Minecraft Grade Copper]]是红石和铜的合金,几乎所有电力设备都使用紫铜。

[[高级合金|Advanced Alloy]]是前期强力的装备材料,其性能优于钻石。

[[炮铜|Gunmetal]]是制作多种枪炮必不可少的材料,同时也用于制造弹壳。

[[铋青铜|Bismuth Bronze]]和[[砷青铜|Arsenic Bronze]]是 [[RBMK]] 后的材料,用于制作多种后期机器。

[[BSCCO]]是一种由铋衍生的超导体,高等级的量子电路和[[粒子加速器|Particle Accelerator]]线圈都需要BSCCO超导体制作。" } } diff --git a/src/main/resources/assets/hbm/manual/weapon/ap.json b/src/main/resources/assets/hbm/manual/weapon/ap.json index dc4b01078..b489dbc16 100644 --- a/src/main/resources/assets/hbm/manual/weapon/ap.json +++ b/src/main/resources/assets/hbm/manual/weapon/ap.json @@ -13,10 +13,12 @@ ], "title": { "en_US": "Armor Piercing Bullet", - "zh_CN": "穿甲弹" + "zh_CN": "穿甲弹", + "ru_RU": "Бронебойные патроны" }, "content": { "en_US": "AP rounds are similar to FMJ rounds, but using hardened steel jackets and significantly higher powder load. Not only do APs deal more damage and pierce through armor more effectively, but they can also penetrate their target.", - "zh_CN": "穿甲弹(AP)类似全金属被甲弹,但使用硬化钢弹壳且装药略多。穿甲弹不 仅能造成更多伤害,而且能更高效地穿透护甲,还可以穿透目标。" + "zh_CN": "穿甲弹(AP)类似全金属被甲弹,但使用硬化钢弹壳且装药略多。穿甲弹不 仅能造成更多伤害,而且能更高效地穿透护甲,还可以穿透目标。", + "ru_RU": "Бронебойные патроны схожи с оболочечными патронами, но в них используется рубашка из закалённой стали и значительно больший пороховой заряд. Бронебойные пули не только наносят больше урона и эффективнее пробивают броню, но также способны прошивать цель насквозь." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/buckshot.json b/src/main/resources/assets/hbm/manual/weapon/buckshot.json index b8a35f97d..caabef2ff 100644 --- a/src/main/resources/assets/hbm/manual/weapon/buckshot.json +++ b/src/main/resources/assets/hbm/manual/weapon/buckshot.json @@ -7,10 +7,12 @@ ], "title": { "en_US": "Buckshot", - "zh_CN": "鹿弹" + "zh_CN": "鹿弹", + "ru_RU": "Картечь" }, "content": { "en_US": "Standard shot, creates many low-damage pellets with considerable spread. Sometimes it's hard to beat the classics.", - "zh_CN": "标准霰弹,能够射出多个大范围散布的低伤害弹丸。有时鹿弹打不过经典弹药。" + "zh_CN": "标准霰弹,能够射出多个大范围散布的低伤害弹丸。有时鹿弹打不过经典弹药。", + "ru_RU": "Стандартный боеприпас. Создаёт множество наносящих малый урон дробин с внушительным рассеиванием. Классику ничем не заменить." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/buckshotmagnum.json b/src/main/resources/assets/hbm/manual/weapon/buckshotmagnum.json index daf01843b..ea0ecffb5 100644 --- a/src/main/resources/assets/hbm/manual/weapon/buckshotmagnum.json +++ b/src/main/resources/assets/hbm/manual/weapon/buckshotmagnum.json @@ -7,10 +7,12 @@ ], "title": { "en_US": "Magnum Buckshot", - "zh_CN": "马格南鹿弹" + "zh_CN": "马格南鹿弹", + "ru_RU": "Магнум-картечь" }, "content": { "en_US": "Buckshot, but with fewer larger pellets which deal more damage. While black powder magnum shells don't perform that much better compared to buckshot, smokeless powder ones are noticably more powerful. Additionally, magnum buckshot shells have roughly half as much spread as standard buckshot.", - "zh_CN": "弹丸更少且更大,伤害更高的鹿弹。尽管黑火药马格南鹿弹的性能不比普通鹿 弹好很多,但是使用无烟火药的版本性能显著更好。另外,马格南鹿弹的散布 大约是普通鹿弹的一半。" + "zh_CN": "弹丸更少且更大,伤害更高的鹿弹。尽管黑火药马格南鹿弹的性能不比普通鹿 弹好很多,但是使用无烟火药的版本性能显著更好。另外,马格南鹿弹的散布 大约是普通鹿弹的一半。", + "ru_RU": "Картечь, но с меньшим количеством более крупных дробин, которые наносят больше урона. Если магнум-патроны на дымном порохе не сильно превосходят стандартную картечь, то варианты на бездымном порохе ощутимо мощнее. Кроме того, магнум-картечь имеет примерно вдвое меньшее рассеивание по сравнению со стандартной." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/buckshotsharpnel.json b/src/main/resources/assets/hbm/manual/weapon/buckshotsharpnel.json index cd77f1e1a..9965bf11e 100644 --- a/src/main/resources/assets/hbm/manual/weapon/buckshotsharpnel.json +++ b/src/main/resources/assets/hbm/manual/weapon/buckshotsharpnel.json @@ -6,10 +6,12 @@ ], "title": { "en_US": "Shrapnel Buckshot", - "zh_CN": "易跳弹" + "zh_CN": "易跳弹", + "ru_RU": "Шрапнель" }, "content": { "en_US": "A more devious version of standard buckshot, identical in most ways except that the pellets are incredibly bouncy, ricocheting off of most surfaces multiple times. May be hazardous to the user when used in enclosed spaces.", - "zh_CN": "一种更加有弹性的鹿弹,大多数方面与普通鹿弹完全相同,但是弹性极强,能 在绝大多数表面反弹多次。在狭窄区域使用时可能会误伤使用者。" + "zh_CN": "一种更加有弹性的鹿弹,大多数方面与普通鹿弹完全相同,但是弹性极强,能 在绝大多数表面反弹多次。在狭窄区域使用时可能会误伤使用者。", + "ru_RU": "Более коварный вариант стандартной картечи. Практически идентична ей во всём, кроме того, что дробины невероятно прыгучие и многократно рикошетят от большинства поверхностей. Может быть опасной для самого стрелка при использовании в замкнутых пространствах." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/demo.json b/src/main/resources/assets/hbm/manual/weapon/demo.json index f8e796352..932f863c4 100644 --- a/src/main/resources/assets/hbm/manual/weapon/demo.json +++ b/src/main/resources/assets/hbm/manual/weapon/demo.json @@ -8,10 +8,12 @@ ], "title": { "en_US": "Demolition Explosives", - "zh_CN": "破坏者弹药" + "zh_CN": "破坏者弹药", + "ru_RU": "Штурмовой заряд" }, "content": { "en_US": "Demolition explosives are similar to regular high-explosives, however they have a larger splash radius, slightly lower damage, and they break blocks. Not recommended for home defense.", - "zh_CN": "破坏者弹药与普通的高爆弹药相似,但爆炸半径更大且伤害略低,并且会破坏 方块。不建议用于守卫基地。" + "zh_CN": "破坏者弹药与普通的高爆弹药相似,但爆炸半径更大且伤害略低,并且会破坏 方块。不建议用于守卫基地。", + "ru_RU": "Штурмовые заряды похожи на обычные осколочно-фугасные боеприпасы, однако имеют больший радиус поражения, немного меньший урон и разрушают блоки. Не рекомендуется для самообороны дома." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/du.json b/src/main/resources/assets/hbm/manual/weapon/du.json index 58345133f..8f9d0ddc3 100644 --- a/src/main/resources/assets/hbm/manual/weapon/du.json +++ b/src/main/resources/assets/hbm/manual/weapon/du.json @@ -9,10 +9,12 @@ ], "title": { "en_US": "Depleted Uranium Bullet", - "zh_CN": "贫铀弹" + "zh_CN": "贫铀弹", + "ru_RU": "Пуля с обеднённым ураном" }, "content": { "en_US": "Ammunition with depleted uranium in its core. The increased density and higher powder load causes this ammo type to have even better armor-piercing properties than AP ammo. The added punch causes the projectiles to penetrate.

Due to their intended effect being kinetic energy, rather than being poisonous, depleted uranium ammunition is not subject to the Hague Conventions of 1899 regarding use of poisonous projectiles in warfare.", - "zh_CN": "核心部分含有贫化铀的弹药,其更高的密度和装药量使得其具有较穿甲弹更强 的穿甲能力,加强的冲击力也使得其能够穿透目标。

由于贫铀弹被设计为利用其动能而非毒性,其不受1899年海牙公约关于在 战争中使用毒性弹药的条款的约束。" + "zh_CN": "核心部分含有贫化铀的弹药,其更高的密度和装药量使得其具有较穿甲弹更强 的穿甲能力,加强的冲击力也使得其能够穿透目标。

由于贫铀弹被设计为利用其动能而非毒性,其不受1899年海牙公约关于在 战争中使用毒性弹药的条款的约束。", + "ru_RU": "Боеприпас с сердечником из обеднённого урана. Увеличенная плотность и больший пороховой заряд обеспечивают этому типу патронов ещё более высокие бронебойные свойства, чем у стандартных бронебойных. Повышенная пробивная способность позволяет снарядам проходить цели насквозь.

Поскольку их основным поражающим фактором является кинетическая энергия, а не химическое отравление, боеприпасы с обеднённым ураном не подпадают под действие Гаагской конвенции 1899 года о неприменении снарядов, имеющих единственной целью распространять удушающие или вредоносные газы." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/express.json b/src/main/resources/assets/hbm/manual/weapon/express.json index 37bb8e446..1d3fd60a6 100644 --- a/src/main/resources/assets/hbm/manual/weapon/express.json +++ b/src/main/resources/assets/hbm/manual/weapon/express.json @@ -7,10 +7,12 @@ ], "title": { "en_US": "FMJ Express Bullet", - "zh_CN": "额外装药FMJ" + "zh_CN": "额外装药FMJ", + "ru_RU": "Высокоскоростная оболочечная пуля" }, "content": { "en_US": "FMJ Express is a special type of full metal jacket ammo for revolver calibers. Express ammo has the same armor-piercing effects in addition to increased damage. Express projectiles can penetrate their targets, but unlike AP rounds, Express projectiles become weaker on every penetration. Due to the higher powder load in combination with the basic gunmetal casing, Express ammo causes the gun to wear faster.", - "zh_CN": "额外装药FMJ是一种用于转轮手枪弹匣的特殊全金属被甲弹。这种子弹伤害 较高,且具有与全金属被甲弹相同的穿甲效果。这种子弹还可以穿透敌人,但 与穿甲弹不同的是,每穿透一个敌人,子弹的伤害就会降低一些。由于这种子 弹装药量较高,且仍然使用普通炮铜弹壳,其会导致枪械磨损速度加快。" + "zh_CN": "额外装药FMJ是一种用于转轮手枪弹匣的特殊全金属被甲弹。这种子弹伤害 较高,且具有与全金属被甲弹相同的穿甲效果。这种子弹还可以穿透敌人,但 与穿甲弹不同的是,每穿透一个敌人,子弹的伤害就会降低一些。由于这种子 弹装药量较高,且仍然使用普通炮铜弹壳,其会导致枪械磨损速度加快。", + "ru_RU": "Высокоскоростной оболочечный патрон — это особый тип боеприпасов с цельнометаллической оболочкой для револьверных калибров. Данный тип сочетает в себе бронебойные свойства и повышенный урон. Такие снаряды способны проходить цели насквозь, но, в отличие от стандартных бронебойных патронов, их урон падает с каждым новым пробитием. Из-за увеличенного порохового заряда в сочетании с базовой томпаковой гильзой использование патронов класса «Экспресс» ускоряет износ оружия." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/flechettes.json b/src/main/resources/assets/hbm/manual/weapon/flechettes.json index 343ed459e..5b013bd16 100644 --- a/src/main/resources/assets/hbm/manual/weapon/flechettes.json +++ b/src/main/resources/assets/hbm/manual/weapon/flechettes.json @@ -6,10 +6,12 @@ ], "title": { "en_US": "Flechettes", - "zh_CN": "箭形弹" + "zh_CN": "箭形弹", + "ru_RU": "Флешетты" }, "content": { "en_US": "Flechettes are small fin-stabilized projectiles, contrary to buckshot's round pellets. Flechette shells have less spread and better armor-piercing compared to standard buckshot.", - "zh_CN": "箭形弹是小型的鳍形弹药,而非普通鹿弹的圆形弹丸。箭形弹散布更小,且具 有比普通鹿弹更好的穿甲效果。" + "zh_CN": "箭形弹是小型的鳍形弹药,而非普通鹿弹的圆形弹丸。箭形弹散布更小,且具 有比普通鹿弹更好的穿甲效果。", + "ru_RU": "Флешетты представляют собой небольшие стреловидные снаряды с хвостовым оперением, в отличие от круглых дробин стандартной картечи. Патроны с флешеттами имеют меньшее рассеивание и повышенную бронепробиваемость по сравнению с обычной картечью." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/fmj.json b/src/main/resources/assets/hbm/manual/weapon/fmj.json index ef5ad59e8..383bb4956 100644 --- a/src/main/resources/assets/hbm/manual/weapon/fmj.json +++ b/src/main/resources/assets/hbm/manual/weapon/fmj.json @@ -13,10 +13,12 @@ ], "title": { "en_US": "Full Metal Jacket Bullet", - "zh_CN": "全金属被甲弹" + "zh_CN": "全金属被甲弹", + "ru_RU": "Оболочечная пуля" }, "content": { "en_US": "FMJs do not deform when hitting a soft target, meaning they deliver less damage. However, it allows them to pierce armor more effectively. All FMJs have some armor-piercing properties, as well as added damage threshold negation based on the caliber size.", - "zh_CN": "全金属被甲弹(FMJ)在击中较软目标时不会解体,因此造成的伤害较低; 然而其特性使得其能够更高效地穿透护甲。所有种类的全金属被甲弹都有一定 的穿甲能力,以及因口径而异的无视伤害阈值的能力。" + "zh_CN": "全金属被甲弹(FMJ)在击中较软目标时不会解体,因此造成的伤害较低; 然而其特性使得其能够更高效地穿透护甲。所有种类的全金属被甲弹都有一定 的穿甲能力,以及因口径而异的无视伤害阈值的能力。", + "ru_RU": "Оболочечные пули не деформируются при попадании в мягкую цель, из-за чего наносят меньше урона. Однако это позволяет им эффективнее пробивать броню. Все оболочечные патроны обладают базовыми бронебойными свойствами, а также снижают порог защиты цели в зависимости от калибра." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/grenade.json b/src/main/resources/assets/hbm/manual/weapon/grenade.json index 27650e3ee..f1d0a8cef 100644 --- a/src/main/resources/assets/hbm/manual/weapon/grenade.json +++ b/src/main/resources/assets/hbm/manual/weapon/grenade.json @@ -7,10 +7,12 @@ ], "title": { "en_US": "High-Explosives", - "zh_CN": "高爆" + "zh_CN": "高爆", + "ru_RU": "Осколочно-фугасные" }, "content": { "en_US": "Standard ammunition for grenade and rocket launchers. Deals splash damage in a moderate area.", - "zh_CN": "榴弹和火箭弹的标准类型,在中等范围内造成爆炸伤害。" + "zh_CN": "榴弹和火箭弹的标准类型,在中等范围内造成爆炸伤害。", + "ru_RU": "Стандартные боеприпасы для гранатомётов и ракетных установок. Наносят урон по площади в умеренном радиусе." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/he.json b/src/main/resources/assets/hbm/manual/weapon/he.json index 22e04eef7..ac3657f84 100644 --- a/src/main/resources/assets/hbm/manual/weapon/he.json +++ b/src/main/resources/assets/hbm/manual/weapon/he.json @@ -10,10 +10,12 @@ ], "title": { "en_US": "High-Explosive Ammunition", - "zh_CN": "高爆弹药" + "zh_CN": "高爆弹药", + "ru_RU": "Разрывные боеприпасы" }, "content": { "en_US": "As one would expect, explosive ammunition deals explosive damage to its target, and the surroundings in a small radius. The resulting damage is noticably higher than the gun's base damage, at the cost of causing the gun to wear down significantly faster.

Use of explosive projectiles with a weight of less than 400 grams is prohibited by the Saint Petersburg Declaration of 1868.", - "zh_CN": "正如其名,高爆弹药会对目标及其周围小范围的实体造成爆炸伤害。其最终造 成的伤害显著高于枪械的基础伤害,但代价是枪械会加快磨损。

1868年的圣彼得堡宣言禁止了在战争中使用重量低于400克的爆炸弹药。" + "zh_CN": "正如其名,高爆弹药会对目标及其周围小范围的实体造成爆炸伤害。其最终造 成的伤害显著高于枪械的基础伤害,但代价是枪械会加快磨损。

1868年的圣彼得堡宣言禁止了在战争中使用重量低于400克的爆炸弹药。", + "ru_RU": "Как и следовало ожидать, разрывные боеприпасы наносят взрывной урон цели и окружению в небольшом радиусе. Получаемый урон заметно выше базового урона оружия, но ценой значительно более быстрого износа ствола.

Использование разрывных снарядов весом менее 400 граммов запрещено Санкт-Петербургской декларацией 1868 года" } } diff --git a/src/main/resources/assets/hbm/manual/weapon/heat.json b/src/main/resources/assets/hbm/manual/weapon/heat.json index 8ca6b235a..6131ed21a 100644 --- a/src/main/resources/assets/hbm/manual/weapon/heat.json +++ b/src/main/resources/assets/hbm/manual/weapon/heat.json @@ -7,10 +7,12 @@ ], "title": { "en_US": "Shaped Charges", - "zh_CN": "聚能装药" + "zh_CN": "聚能装药", + "ru_RU": "Кумулятивные" }, "content": { "en_US": "Special type of explosive munition with weaker splash damage compared to high-explosives, which deals massive extra damage on direct hit.", - "zh_CN": "特殊的爆炸性弹药,爆炸伤害低于高爆弹药,但直接击中目标时会造成高额 额外伤害。" + "zh_CN": "特殊的爆炸性弹药,爆炸伤害低于高爆弹药,但直接击中目标时会造成高额 额外伤害。", + "ru_RU": "Особый тип разрывных боеприпасов с меньшим уроном по площади по сравнению со стандартными, который наносит огромный дополнительный урон при прямом попадании." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/incendiary.json b/src/main/resources/assets/hbm/manual/weapon/incendiary.json index 4aca16a65..1b437592f 100644 --- a/src/main/resources/assets/hbm/manual/weapon/incendiary.json +++ b/src/main/resources/assets/hbm/manual/weapon/incendiary.json @@ -7,10 +7,12 @@ ], "title": { "en_US": "Incendiary Munitions", - "zh_CN": "燃烧弹" + "zh_CN": "燃烧弹", + "ru_RU": "Зажигательные боеприпасы" }, "content": { "en_US": "Incendiary explosives leave behind lingering fire, which can ignite targets. The afterburn does not last very long, and can be extinguished with water.

Use of incendiary weapons against or near civilians is forbidden by the Geneva Conventions.", - "zh_CN": "燃烧弹会残留下能够点燃目标的持续火焰。燃烧效果持续时间并不长,而且可 以用水扑灭。

日内瓦公约禁止对普通民众或在普通民众附近使用燃烧性武器。" + "zh_CN": "燃烧弹会残留下能够点燃目标的持续火焰。燃烧效果持续时间并不长,而且可 以用水扑灭。

日内瓦公约禁止对普通民众或在普通民众附近使用燃烧性武器。", + "ru_RU": "Зажигательные взрывные боеприпасы оставляют после себя остаточный огонь, который может поджечь цели. Горение длится недолго и может быть потушено водой.

Использование зажигательного оружия против гражданского населения или вблизи него запрещено Женевскими конвенциями." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/jhp.json b/src/main/resources/assets/hbm/manual/weapon/jhp.json index 07a06984c..741091c89 100644 --- a/src/main/resources/assets/hbm/manual/weapon/jhp.json +++ b/src/main/resources/assets/hbm/manual/weapon/jhp.json @@ -13,10 +13,12 @@ ], "title": { "en_US": "Jacketed Hollow Point Bullet", - "zh_CN": "被甲空尖弹" + "zh_CN": "被甲空尖弹", + "ru_RU": "Полуоболочечная экспансивная пуля" }, "content": { "en_US": "JHPs are deforming bullets that cause more damage to soft targets compared to soft point bullets, at the cost of faring worse against armored targets. JHPs also have a higher bonus on headshots.

Due to being expanding projectiles, jacketed hollow points are prohibited for use in warfare under the Hague Conventions of 1899.", - "zh_CN": "被甲空尖弹(JHP)是一种扩张型弹药,相较于软尖弹,其能对较软目标造 成更多伤害,代价是对装甲目标效果极差。被甲空尖弹也具有较高的爆头 伤害加成。

由于属于扩张型弹药,1889年的海牙公约禁止在战争中使用被甲空尖弹。" + "zh_CN": "被甲空尖弹(JHP)是一种扩张型弹药,相较于软尖弹,其能对较软目标造 成更多伤害,代价是对装甲目标效果极差。被甲空尖弹也具有较高的爆头 伤害加成。

由于属于扩张型弹药,1889年的海牙公约禁止在战争中使用被甲空尖弹。", + "ru_RU": "Экспансивные пули с цельнометаллической оболочкой — это деформирующиеся пули, которые наносят больше урона мягким целям по сравнению с пулями с мягким наконечником, но ценой худшей эффективности против бронированных целей. Они также имеют повышенный бонус при попадании в голову.

Поскольку эти пули являются экспансивными, использование экспансивных пуль с цельнометаллической оболочкой в военных действиях запрещено Гаагскими конвенциями 1899 года." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/muke.json b/src/main/resources/assets/hbm/manual/weapon/muke.json index 78be88efa..d991a8fd2 100644 --- a/src/main/resources/assets/hbm/manual/weapon/muke.json +++ b/src/main/resources/assets/hbm/manual/weapon/muke.json @@ -5,11 +5,12 @@ ["hbm:item.ammo_standard", 1, 75] ], "title": { - "en_US": "High Yield Mini Nuke", + "en_US": "Мини-ядерный заряд", "zh_CN": "高当量迷你核弹" }, "content": { "en_US": "nuclear bobm
", - "zh_CN": "熊孩子福利(误)
" + "zh_CN": "熊孩子福利(误)
", + "ru_RU": "Ядерный бумб
" } } diff --git a/src/main/resources/assets/hbm/manual/weapon/powder.json b/src/main/resources/assets/hbm/manual/weapon/powder.json index 2e2eca9ad..60a08c553 100644 --- a/src/main/resources/assets/hbm/manual/weapon/powder.json +++ b/src/main/resources/assets/hbm/manual/weapon/powder.json @@ -8,10 +8,12 @@ ], "title": { "en_US": "Black Powder Ammunition", - "zh_CN": "黑火药弹" + "zh_CN": "黑火药弹", + "ru_RU": "Патроны с дымным порохом" }, "content": { "en_US": "The earliest available type of cartridge, black powder ammo is available for revolver calibers and 12 gauge shells. For revolver calibers, black powder bullets are a variant of soft point bullets. Black powder shells however are available in buckshot, magnum shot and slug variants. Black powder ammo is very cheap, but deals significantly less damage and causes a large cloud of smoke on every shot.", - "zh_CN": "黑火药弹是最早可获取的弹药类型,可用于手枪口径的子弹和12号鹿弹。 对于手枪弹,黑火药弹属于软尖弹的一种;除此之外,鹿弹、马格南子弹和独 头弹也有黑火药变种。黑火药弹成本极低,但造成的伤害也有所降低,并且每 次发射时都会产生大量黑烟。" + "zh_CN": "黑火药弹是最早可获取的弹药类型,可用于手枪口径的子弹和12号鹿弹。 对于手枪弹,黑火药弹属于软尖弹的一种;除此之外,鹿弹、马格南子弹和独 头弹也有黑火药变种。黑火药弹成本极低,但造成的伤害也有所降低,并且每 次发射时都会产生大量黑烟。", + "ru_RU": "Самый ранний из доступных типов патронов. Боеприпасы с дымным порохом доступны для револьверных калибров и ружейных гильз 12-го калибра. В револьверных калибрах пули с дымным порохом представляют собой вариант пуль с мягким наконечником. Однако ружейные патроны с дымным порохом доступны в вариантах с картечью, магнум-картечью и пулевыми снарядами. Боеприпасы с дымным порохом очень дешевы, но наносят значительно меньше урона и создают большое облако дыма при каждом выстреле." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/slug.json b/src/main/resources/assets/hbm/manual/weapon/slug.json index 7e7cf81fd..9ce63a109 100644 --- a/src/main/resources/assets/hbm/manual/weapon/slug.json +++ b/src/main/resources/assets/hbm/manual/weapon/slug.json @@ -8,10 +8,12 @@ ], "title": { "en_US": "Slug", - "zh_CN": "独头弹" + "zh_CN": "独头弹", + "ru_RU": "Пулевой снаряд" }, "content": { "en_US": "A shell type that only holds a single large projectile. Unlike shot, slugs do not have inherent spread, deal the gun's full damage on hit, and have some armor-piercing properties.", - "zh_CN": "一种仅含有一颗大弹丸的弹药。不像霰弹,独头弹不自带散布,击中目标时会 造成枪械的全部伤害,还具有一定的穿甲效果。" + "zh_CN": "一种仅含有一颗大弹丸的弹药。不像霰弹,独头弹不自带散布,击中目标时会 造成枪械的全部伤害,还具有一定的穿甲效果。", + "ru_RU": "Тип ружейного патрона, содержащий всего один крупный поражающий элемент. В отличие от дроби, пули не имеют врождённого разлёта, наносят полный урон оружия при попадании и обладают некоторыми бронебойными свойствами." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/softpoint.json b/src/main/resources/assets/hbm/manual/weapon/softpoint.json index 6f6a24b75..39a00e972 100644 --- a/src/main/resources/assets/hbm/manual/weapon/softpoint.json +++ b/src/main/resources/assets/hbm/manual/weapon/softpoint.json @@ -13,10 +13,13 @@ ], "title": { "en_US": "Soft Point Bullet", - "zh_CN": "软尖弹" + "zh_CN": "软尖弹", + "ru_RU": "Полуоболочечная пуля" }, "content": { "en_US": "The \"default\" ammunition type for most guns. Soft point bullets do not change the gun's base damage, and don't have any armor-piercing properties.

Due to being expanding projectiles, soft points are prohibited for use in warfare under the Hague Conventions of 1899.", - "zh_CN": "“默认”的弹药类型。软尖弹不影响枪械的基础伤害,也不具有穿甲特性。

由于属于扩张型弹药,1889年的海牙公约禁止在战争中使用软尖弹。" + "zh_CN": "“默认”的弹药类型。软尖弹不影响枪械的基础伤害,也不具有穿甲特性。

由于属于扩张型弹药,1889年的海牙公约禁止在战争中使用软尖弹。", + "ru_RU": "Тип боеприпасов \"по умолчанию\" для большинства видов оружия. Полуоболочечные пули не изменяют базовый урон оружия и не обладают какими-либо бронебойными свойствами.

Поскольку эти пули являются деформирующимися, использование полуоболочечных пуль в военных действиях запрещено Гаагскими конвенциями 1899 года." + } } diff --git a/src/main/resources/assets/hbm/manual/weapon/star.json b/src/main/resources/assets/hbm/manual/weapon/star.json index 6127e293b..250f0e3a9 100644 --- a/src/main/resources/assets/hbm/manual/weapon/star.json +++ b/src/main/resources/assets/hbm/manual/weapon/star.json @@ -6,10 +6,12 @@ ], "title": { "en_US": "Starmetal Bullet", - "zh_CN": "星辉弹" + "zh_CN": "星辉弹", + "ru_RU": "Пуля из звёздного металла" }, "content": { "en_US": "Cartridge with extra high powder load using a starmetal projectile. The density and stability of starmetal ensures that this projectile can punch through most armors, at the cost of the gun wearing ten times faster. Can only be used in anti-materiel rifles, as the chamber pressure is so high, it would blow automatic weapons apart.", - "zh_CN": "星辉制成的弹药,同时具有非常高的装药量。星辉金属的密度和稳定性确保了 星辉弹药能够击穿大多数装甲,然而这种弹药会使枪械的磨损速度达到原来的 十倍。由于弹仓压力过大,其会直接损毁掉自动武器,因此只能用于反器材步枪。" + "zh_CN": "星辉制成的弹药,同时具有非常高的装药量。星辉金属的密度和稳定性确保了 星辉弹药能够击穿大多数装甲,然而这种弹药会使枪械的磨损速度达到原来的 十倍。由于弹仓压力过大,其会直接损毁掉自动武器,因此只能用于反器材步枪。", + "ru_RU": "Патрон с увеличенным пороховым зарядом и снарядом из звёздного металла. Плотность и прочность звёздного металла позволяют этой пуле пробивать практически любую броню ценой десятикратного износа оружия. Может использоваться только в крупнокалиберных снайперских винтовках, так как давление в патроннике настолько высокое, что автоматическое оружие просто разорвёт на части." } } diff --git a/src/main/resources/assets/hbm/manual/weapon/wp.json b/src/main/resources/assets/hbm/manual/weapon/wp.json index e626e6dce..76e598b41 100644 --- a/src/main/resources/assets/hbm/manual/weapon/wp.json +++ b/src/main/resources/assets/hbm/manual/weapon/wp.json @@ -8,10 +8,12 @@ ], "title": { "en_US": "White Phosphorus Munitions", - "zh_CN": "白磷弹" + "zh_CN": "白磷弹", + "ru_RU": "Боеприпасы с белым фосфором" }, "content": { "en_US": "White phosphorus ignites easily and is very hard to extinguish, causing significant afterburn damage which cannot be permanently extinguished by water. Lingering fire caused by WP explosions lasts longer than by conventinal incendiary explosives.

Use of incendiary weapons against or near civilians is forbidden by the Geneva Conventions.", - "zh_CN": "白磷极易燃烧且极难熄灭,能够造成显著的灼烧效果,并且不能被水永久扑灭。 白磷弹造成的持续火焰比一般燃烧弹造成的持续时间更长。

日内瓦公约禁止对普通民众或在普通民众附近使用燃烧性武器。" + "zh_CN": "白磷极易燃烧且极难熄灭,能够造成显著的灼烧效果,并且不能被水永久扑灭。 白磷弹造成的持续火焰比一般燃烧弹造成的持续时间更长。

日内瓦公约禁止对普通民众或在普通民众附近使用燃烧性武器。", + "ru_RU": "Белый фосфор легко воспламеняется, и его очень трудно потушить. Он наносит значительный урон от горения, который невозможно окончательно ликвидировать водой. Остаточный огонь, вызванный взрывами белого фосфора, горит дольше, чем от обычных зажигательных взрывчатых веществ.

Использование зажигательного оружия против гражданского населения или вблизи него запрещено Женевскими конвенциями." } } diff --git a/src/main/resources/assets/hbm/models/blocks/barrel.obj b/src/main/resources/assets/hbm/models/blocks/barrel.obj index a9f9119f4..4a3e6f1d9 100644 --- a/src/main/resources/assets/hbm/models/blocks/barrel.obj +++ b/src/main/resources/assets/hbm/models/blocks/barrel.obj @@ -1,50 +1,6 @@ -# Blender v2.82 (sub 7) OBJ File: 'barrel.blend' +# Blender 5.1.2 # www.blender.org mtllib barrel.mtl -o Connector -v 0.500000 0.687500 0.187500 -v 0.500000 0.312500 -0.187500 -v 0.500000 0.687500 -0.187500 -v 0.375000 0.312500 -0.187500 -v 0.375000 0.687500 0.187500 -v 0.375000 0.687500 -0.187500 -v 0.375000 0.312500 0.187500 -v 0.500000 0.312500 0.187500 -vt 0.145833 0.270833 -vt 0.020833 0.395833 -vt 0.020833 0.270833 -vt 0.020833 0.375000 -vt 0.000000 0.250000 -vt 0.020833 0.250000 -vt 0.166667 0.395833 -vt 0.041667 0.416667 -vt 0.041667 0.395833 -vt 0.145833 0.291667 -vt 0.166667 0.416667 -vt 0.145833 0.416667 -vt 0.000000 0.270833 -vt 0.125000 0.250000 -vt 0.125000 0.270833 -vt 0.145833 0.395833 -vt -0.000000 0.375000 -vt 0.166667 0.291667 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 1.0000 -0.0000 -vn 0.0000 -0.0000 -1.0000 -vn 0.0000 -1.0000 0.0000 -usemtl Default_OBJ -s 1 -f 1/1/1 2/2/1 3/3/1 -f 1/4/2 7/5/2 8/6/2 -f 3/7/3 5/8/3 1/9/3 -f 2/10/4 6/11/4 3/12/4 -f 8/13/5 4/14/5 2/15/5 -f 1/1/1 8/16/1 2/2/1 -f 1/4/2 5/17/2 7/5/2 -f 3/7/3 6/11/3 5/8/3 -f 2/10/4 4/18/4 6/11/4 -f 8/13/5 7/5/5 4/14/5 o Barrel v 0.375000 1.000000 0.375000 v 0.375000 0.000000 0.375000 @@ -54,6 +10,12 @@ v -0.375000 0.000000 0.375000 v -0.375000 1.000000 -0.375000 v -0.375000 -0.000000 -0.375000 v 0.375000 1.000000 -0.375000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 vt 0.000000 0.750000 vt 0.000000 0.416667 vt 0.250000 0.416667 @@ -63,32 +25,67 @@ vt 1.000000 0.416667 vt 0.500000 0.750000 vt 0.500000 0.416667 vt 0.250000 0.750000 -vt 0.750000 0.750000 vt 0.750000 1.000000 vt 0.500000 1.000000 -vt 0.500000 0.750000 -vt 0.500000 1.000000 vt 0.250000 1.000000 vt 1.000000 0.750000 -vt 0.500000 0.750000 -vt 0.250000 0.750000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 -1.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 -0.0000 -usemtl Default_OBJ s 1 -f 9/19/6 10/20/6 11/21/6 -f 12/22/7 13/23/7 10/24/7 -f 14/25/8 15/26/8 13/23/8 -f 16/27/9 11/21/9 15/26/9 -f 10/28/10 13/29/10 15/30/10 -f 12/31/11 9/32/11 16/33/11 -f 16/27/6 9/19/6 11/21/6 -f 9/34/7 12/22/7 10/24/7 -f 12/22/8 14/25/8 13/23/8 -f 14/25/9 16/27/9 15/26/9 -f 11/35/10 10/28/10 15/30/10 -f 14/36/11 12/31/11 16/33/11 +usemtl m_2f3dbca4-45a7-429b-31df-58e8185a2095 +f 1/1/1 2/2/1 3/3/1 +f 4/4/2 5/5/2 2/6/2 +f 6/7/3 7/8/3 5/5/3 +f 8/9/4 3/3/4 7/8/4 +f 2/4/5 5/10/5 7/11/5 +f 4/7/6 1/11/6 8/12/6 +f 8/9/1 1/1/1 3/3/1 +f 1/13/2 4/4/2 2/6/2 +f 4/4/3 6/7/3 5/5/3 +f 6/7/4 8/9/4 7/8/4 +f 3/7/5 2/4/5 7/11/5 +f 6/9/6 4/7/6 8/12/6 +o Connector +v 0.500000 0.687500 0.187500 +v 0.500000 0.312500 -0.187500 +v 0.500000 0.687500 -0.187500 +v 0.375000 0.312500 0.187500 +v 0.500000 0.312500 0.187500 +v 0.375000 0.687500 0.187500 +v 0.375000 0.687500 -0.187500 +v 0.375000 0.312500 -0.187500 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 -1.0000 -0.0000 +vt 0.041667 0.375000 +vt 0.166667 0.250000 +vt 0.166667 0.375000 +vt 0.041666 0.375000 +vt 0.000000 0.250000 +vt 0.041666 0.250000 +vt 0.166667 0.375000 +vt 0.041667 0.416667 +vt 0.041667 0.375000 +vt 0.166666 0.250000 +vt 0.208334 0.375000 +vt 0.166666 0.375000 +vt 0.041667 0.250000 +vt 0.166667 0.208333 +vt 0.166667 0.250000 +vt 0.041667 0.250000 +vt 0.000000 0.375000 +vt 0.166667 0.416667 +vt 0.208334 0.250000 +vt 0.041667 0.208333 +s 1 +usemtl m_2f3dbca4-45a7-429b-31df-58e8185a2095 +f 9/14/7 10/15/7 11/16/7 +f 9/17/8 12/18/8 13/19/8 +f 11/20/9 14/21/9 9/22/9 +f 10/23/10 15/24/10 11/25/10 +f 13/26/11 16/27/11 10/28/11 +f 9/14/7 13/29/7 10/15/7 +f 9/17/8 14/30/8 12/18/8 +f 11/20/9 15/31/9 14/21/9 +f 10/23/10 16/32/10 15/24/10 +f 13/26/11 12/33/11 16/27/11 diff --git a/src/main/resources/assets/hbm/models/bombs/mine_fat.obj b/src/main/resources/assets/hbm/models/bombs/mine_fat.obj new file mode 100644 index 000000000..e9993c675 --- /dev/null +++ b/src/main/resources/assets/hbm/models/bombs/mine_fat.obj @@ -0,0 +1,1447 @@ +# Blender 5.1.2 +# www.blender.org +# Made By TheVitya2127 + +o Sphere +v 0.132583 0.367417 -0.656250 +v -0.132583 0.367417 -0.656250 +v -0.132583 0.632582 -0.656250 +v 0.000000 0.062500 -1.093750 +v 0.191342 0.038060 -1.093750 +v 0.000000 -0.000000 -1.093750 +v -0.191342 0.038060 -1.093750 +v -0.167424 0.095803 -0.843750 +v -0.167424 0.095803 -1.093750 +v -0.353554 0.146446 -0.843750 +v -0.191342 0.038060 -0.843750 +v -0.461940 0.308658 -0.843750 +v -0.309359 0.190641 -0.843750 +v -0.461940 0.308658 -1.093750 +v -0.404197 0.332576 -0.843750 +v -0.437500 0.500000 -1.093750 +v -0.500000 0.500000 -1.093750 +v -0.461940 0.691341 -1.093750 +v -0.461940 0.691341 -0.843750 +v -0.404197 0.667424 -1.093750 +v -0.309359 0.809359 -0.843750 +v -0.353554 0.853553 -0.843750 +v -0.167424 0.904197 -0.843750 +v -0.191342 0.961940 -0.843750 +v -0.191342 0.961940 -1.093750 +v 0.000000 0.937500 -1.093750 +v 0.000000 1.000000 -1.093750 +v 0.167424 0.904197 -1.093750 +v 0.191342 0.961940 -1.093750 +v 0.167424 0.904197 -0.843750 +v 0.191342 0.961940 -0.843750 +v 0.309359 0.809359 -0.843750 +v 0.353554 0.853553 -0.843750 +v 0.191342 0.038060 -0.843750 +v 0.167424 0.095802 -1.093750 +v 0.167424 0.095802 -0.843750 +v 0.309359 0.190640 -0.843750 +v 0.404197 0.332576 -0.843750 +v 0.353554 0.146446 -0.843750 +v 0.461940 0.308658 -1.093750 +v 0.404197 0.332576 -1.093750 +v 0.437500 0.500000 -1.093750 +v 0.461940 0.691342 -1.093750 +v 0.404197 0.667424 -1.093750 +v 0.461940 0.691342 -0.843750 +v 0.404197 0.667424 -0.843750 +v 0.191342 0.961940 -0.718750 +v 0.309359 0.809359 -0.718750 +v 0.353554 0.853553 -0.718750 +v 0.000000 1.000000 -0.718750 +v 0.167424 0.904197 -0.718750 +v -0.191342 0.961940 -0.718750 +v 0.000000 0.937500 -0.718750 +v -0.353554 0.853553 -0.718750 +v -0.167424 0.904197 -0.718750 +v -0.461940 0.691341 -0.718750 +v -0.309359 0.809359 -0.718750 +v -0.437500 0.500000 -0.718750 +v -0.404197 0.667424 -0.718750 +v -0.461940 0.308658 -0.718750 +v -0.500000 0.500000 -0.718750 +v -0.309359 0.190641 -0.718750 +v -0.404197 0.332576 -0.718750 +v -0.353554 0.146446 -0.718750 +v -0.167424 0.095803 -0.718750 +v -0.191342 0.038060 -0.718750 +v 0.000000 0.062500 -0.718750 +v 0.000000 -0.000000 -0.718750 +v 0.167424 0.095802 -0.718750 +v 0.353554 0.146446 -0.718750 +v 0.191342 0.038060 -0.718750 +v 0.404197 0.332576 -0.718750 +v 0.309359 0.190640 -0.718750 +v 0.461940 0.308658 -0.718750 +v 0.437500 0.500000 -0.718750 +v 0.461940 0.691342 -0.718750 +v 0.500000 0.500000 -0.718750 +v 0.404197 0.667424 -0.718750 +v 0.031250 0.937500 -0.593750 +v -0.031250 0.937500 -0.843750 +v -0.031250 0.937500 -0.593750 +v -0.031250 0.625000 -0.843750 +v 0.031250 0.625000 -0.593750 +v -0.031250 0.625000 -0.593750 +v -0.031250 0.062500 -0.593750 +v 0.031250 0.062500 -0.843750 +v 0.031250 0.062500 -0.593750 +v 0.031250 0.625000 -0.843750 +v 0.031250 0.937500 -0.843750 +v 0.031250 0.781250 -0.437500 +v 0.031250 0.375000 -0.843750 +v -0.031250 0.375000 -0.593750 +v 0.031250 0.375000 -0.593750 +v -0.031250 0.375000 -0.843750 +v -0.031250 0.062500 -0.843750 +v -0.031250 0.218750 -0.437500 +v 0.437500 0.468750 -0.593750 +v 0.437500 0.531250 -0.843750 +v 0.437500 0.531250 -0.593750 +v 0.125000 0.531250 -0.843750 +v 0.125000 0.468750 -0.593750 +v 0.125000 0.531250 -0.593750 +v -0.437500 0.531250 -0.593750 +v -0.437500 0.468750 -0.843750 +v -0.437500 0.468750 -0.593750 +v 0.125000 0.468750 -0.843750 +v 0.437500 0.468750 -0.843750 +v 0.281250 0.468750 -0.437500 +v -0.125000 0.468750 -0.843750 +v -0.125000 0.531250 -0.593750 +v -0.125000 0.468750 -0.593750 +v -0.125000 0.531250 -0.843750 +v -0.281250 0.531250 -0.437500 +v -0.071754 0.673227 -0.656250 +v 0.000000 0.687500 -0.656250 +v 0.071753 0.673227 -0.656250 +v 0.132583 0.632582 -0.656250 +v 0.173228 0.571753 -0.656250 +v 0.187500 0.500000 -0.656250 +v 0.173228 0.428247 -0.656250 +v 0.071753 0.326772 -0.656250 +v 0.000000 0.312500 -0.656250 +v -0.071754 0.326772 -0.656250 +v -0.173228 0.428247 -0.656250 +v -0.187500 0.500000 -0.656250 +v -0.173228 0.571753 -0.656250 +v -0.404197 0.332576 -1.093750 +v -0.404197 0.667424 -0.843750 +v -0.167424 0.904197 -1.093750 +v 0.461940 0.308658 -0.843750 +v 0.500000 0.500000 -1.093750 +v -0.031250 0.781250 -0.437500 +v 0.031250 0.218750 -0.437500 +v -0.437500 0.531250 -0.843750 +v 0.281250 0.531250 -0.437500 +v -0.281250 0.468750 -0.437500 +v -0.309359 0.809359 -0.343750 +v -0.461940 0.691342 0.031250 +v -0.353554 0.853553 0.031250 +v -0.309359 0.809359 0.406250 +v -0.132583 0.632583 0.718750 +v -0.404197 0.667424 0.406250 +v -0.173228 0.571753 0.718750 +v -0.167424 0.904197 -0.343750 +v -0.191342 0.961940 0.031250 +v 0.000000 0.937500 -0.343750 +v 0.000000 1.000000 0.031250 +v 0.167424 0.904198 -0.343750 +v 0.191342 0.961940 0.031250 +v 0.309359 0.809359 -0.343750 +v 0.353554 0.853553 0.031250 +v 0.404197 0.667424 -0.343750 +v 0.461940 0.691342 0.031250 +v 0.437500 0.500000 -0.343750 +v 0.500000 0.500000 0.031250 +v 0.404197 0.332576 -0.343750 +v 0.461940 0.308658 0.031250 +v 0.309359 0.190640 -0.343750 +v 0.353554 0.146446 0.031250 +v 0.167424 0.095802 -0.343750 +v 0.191342 0.038060 0.031250 +v 0.000000 0.062500 -0.343750 +v 0.000000 0.000000 0.031250 +v -0.191342 0.038060 0.031250 +v -0.353554 0.146446 0.031250 +v -0.167424 0.095803 -0.343750 +v -0.461940 0.308658 0.031250 +v -0.309359 0.190641 -0.343750 +v -0.437500 0.500000 -0.343750 +v -0.500000 0.500000 0.031250 +v -0.404197 0.667424 -0.343750 +v -0.404197 0.332576 -0.343750 +v -0.167424 0.904197 0.406250 +v 0.000000 0.937500 0.406250 +v 0.167424 0.904198 0.406250 +v 0.309359 0.809360 0.406250 +v 0.404197 0.667424 0.406250 +v 0.437500 0.500000 0.406250 +v 0.404197 0.332576 0.406250 +v 0.309359 0.190641 0.406250 +v 0.167424 0.095803 0.406250 +v 0.000000 0.062500 0.406250 +v -0.167424 0.095803 0.406250 +v -0.309359 0.190641 0.406250 +v -0.404197 0.332576 0.406250 +v -0.437500 0.500000 0.406250 +v -0.071754 0.673228 0.718750 +v 0.000000 0.687500 0.718750 +v 0.071753 0.673228 0.718750 +v 0.132583 0.632583 0.718750 +v 0.173228 0.571753 0.718750 +v 0.187500 0.500000 0.718750 +v 0.173228 0.428247 0.718750 +v 0.132583 0.367418 0.718750 +v 0.071753 0.326773 0.718750 +v 0.000000 0.312500 0.718750 +v -0.071754 0.326773 0.718750 +v -0.132583 0.367418 0.718750 +v -0.173228 0.428247 0.718750 +v -0.187500 0.500000 0.718750 +v 0.000000 0.500000 0.843750 +v -0.500000 0.500000 -0.843750 +v 0.500000 0.500000 -0.843750 +v 0.000000 1.000000 -0.843750 +v 0.000000 -0.000000 -0.843750 +v -0.437500 0.500000 -0.843750 +v 0.437500 0.500000 -0.843750 +v 0.000000 0.937500 -0.843750 +v 0.000000 0.062500 -0.843750 +v 0.031250 1.164062 -0.437500 +v 0.250000 0.812500 0.875000 +v 0.375000 0.687500 0.375000 +v 0.250000 0.437500 0.875000 +v 0.375000 0.312500 0.375000 +v -0.250000 0.812500 0.875000 +v -0.375000 0.687500 0.375000 +v -0.250000 0.437500 0.875000 +v -0.375000 0.312500 0.375000 +v 0.156250 0.875000 0.937500 +v 0.156250 0.906250 0.937500 +v 0.187500 0.875000 0.906250 +v 0.187500 0.906250 0.906250 +v 0.187500 0.875000 0.843750 +v 0.187500 0.906250 0.843750 +v 0.156250 0.875000 0.812500 +v 0.156250 0.906250 0.812500 +v 0.093750 0.875000 0.812500 +v 0.093750 0.906250 0.812500 +v 0.062500 0.875000 0.843750 +v 0.062500 0.906250 0.843750 +v 0.062500 0.875000 0.906250 +v 0.062500 0.906250 0.906250 +v 0.093750 0.875000 0.937500 +v 0.093750 0.906250 0.937500 +v 0.141180 0.937500 0.835937 +v 0.108820 0.937500 0.835937 +v 0.125000 0.937500 0.875000 +v 0.085938 0.937500 0.858820 +v 0.085938 0.937500 0.891180 +v 0.141180 0.937500 0.914062 +v 0.164062 0.937500 0.891180 +v 0.108820 0.937500 0.914062 +v 0.164062 0.937500 0.858820 +v -0.109375 0.906250 0.921875 +v -0.109375 1.156250 0.921875 +v -0.078125 0.906250 0.890625 +v -0.078125 1.156250 0.890625 +v -0.078125 0.906250 0.859375 +v -0.078125 1.156250 0.859375 +v -0.109375 0.906250 0.828125 +v -0.109375 1.156250 0.828125 +v -0.140625 0.906250 0.828125 +v -0.140625 1.156250 0.828125 +v -0.171875 0.906250 0.859375 +v -0.171875 1.156250 0.859375 +v -0.171875 0.906250 0.890625 +v -0.171875 1.156250 0.890625 +v -0.140625 0.906250 0.921875 +v -0.140625 1.156250 0.921875 +v 0.031250 0.406250 1.125000 +v 0.031250 0.406250 1.062500 +v 0.031250 0.218750 1.125000 +v 0.031250 0.218750 1.062500 +v -0.093750 0.406250 1.125000 +v -0.093750 0.406250 1.062500 +v -0.093750 0.218750 1.125000 +v -0.093750 0.218750 1.062500 +v 0.250000 0.875000 1.062500 +v 0.250000 0.875000 0.687500 +v 0.250000 0.125000 1.062500 +v 0.250000 0.125000 0.687500 +v -0.250000 0.875000 1.062500 +v -0.250000 0.875000 0.687500 +v -0.250000 0.125000 1.062500 +v -0.250000 0.125000 0.687500 +v 0.000000 0.287995 1.235870 +v 0.000000 0.340822 1.122582 +v 0.000000 0.231351 1.209457 +v 0.000000 0.284178 1.096168 +v -0.062500 0.287995 1.235870 +v -0.062500 0.340822 1.122582 +v -0.062500 0.231351 1.209457 +v -0.062500 0.284178 1.096168 +v -0.078125 1.468750 0.859375 +v -0.078125 1.468750 0.890625 +v -0.078125 1.156250 0.859375 +v -0.078125 1.156250 0.890625 +v 0.031250 1.164062 0.375000 +v 0.031250 1.164062 0.312500 +v 0.031250 0.914062 0.375000 +v 0.031250 0.914062 0.312500 +v -0.031250 1.164062 0.375000 +v -0.031250 1.164062 0.312500 +v -0.031250 0.914062 0.375000 +v -0.031250 0.914062 0.312500 +v 0.031250 1.226562 0.312500 +v -0.031250 1.226562 0.312500 +v -0.031250 1.226562 -0.375000 +v 0.031250 1.226562 -0.375000 +v 0.031250 1.164062 -0.375000 +v -0.031250 1.164062 -0.375000 +v -0.031250 1.164062 -0.437500 +v -0.031250 0.851562 -0.437500 +v 0.031250 0.851562 -0.437500 +v 0.031250 0.851562 -0.375000 +v -0.031250 0.851562 -0.375000 +v -0.125000 0.906250 0.875000 +v -0.093750 0.875000 0.937500 +v -0.093750 0.906250 0.937500 +v -0.062500 0.875000 0.906250 +v -0.062500 0.906250 0.906250 +v -0.062500 0.875000 0.843750 +v -0.062500 0.906250 0.843750 +v -0.093750 0.875000 0.812500 +v -0.093750 0.906250 0.812500 +v -0.156250 0.875000 0.812500 +v -0.156250 0.906250 0.812500 +v -0.187500 0.875000 0.843750 +v -0.187500 0.906250 0.843750 +v -0.187500 0.875000 0.906250 +v -0.187500 0.906250 0.906250 +v -0.156250 0.875000 0.937500 +v -0.156250 0.906250 0.937500 +vn -0.0000 -0.0000 -1.0000 +vn -0.9239 0.3827 -0.0000 +vn 0.3827 -0.9239 -0.0000 +vn 0.3827 0.9239 -0.0000 +vn -0.9239 -0.3827 -0.0000 +vn 0.9239 -0.3827 -0.0000 +vn 0.9239 0.3827 -0.0000 +vn -0.3827 -0.9239 -0.0000 +vn -0.3827 0.9239 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 0.7071 0.7071 +vn -0.0000 -0.7071 0.7071 +vn 0.7071 -0.0000 0.7071 +vn -0.7071 -0.0000 0.7071 +vn -0.6541 0.4371 -0.6173 +vn -0.8206 0.5483 -0.1613 +vn -0.8206 0.5483 0.1613 +vn -0.6541 0.4371 0.6173 +vn -0.5483 0.8206 -0.1613 +vn -0.1925 0.9679 -0.1613 +vn 0.1925 0.9679 -0.1613 +vn 0.5483 0.8206 -0.1613 +vn 0.8206 0.5483 -0.1613 +vn 0.9679 0.1925 -0.1613 +vn 0.9679 -0.1925 -0.1613 +vn 0.8206 -0.5483 -0.1613 +vn 0.5483 -0.8206 -0.1613 +vn 0.1925 -0.9679 -0.1613 +vn -0.1925 -0.9679 -0.1613 +vn -0.5483 -0.8206 -0.1613 +vn -0.8206 -0.5483 -0.1613 +vn -0.9679 -0.1925 -0.1613 +vn -0.9679 0.1925 -0.1613 +vn -0.4371 0.6541 -0.6173 +vn -0.1535 0.7716 -0.6173 +vn 0.1535 0.7716 -0.6173 +vn 0.4371 0.6541 -0.6173 +vn 0.6541 0.4371 -0.6173 +vn 0.7716 0.1535 -0.6173 +vn 0.7716 -0.1535 -0.6173 +vn 0.6541 -0.4371 -0.6173 +vn 0.4371 -0.6541 -0.6173 +vn 0.1535 -0.7716 -0.6173 +vn -0.1535 -0.7716 -0.6173 +vn -0.4371 -0.6541 -0.6173 +vn -0.6541 -0.4371 -0.6173 +vn -0.7716 -0.1535 -0.6173 +vn -0.7716 0.1535 -0.6173 +vn -0.5483 0.8206 0.1613 +vn -0.1925 0.9679 0.1613 +vn 0.1925 0.9679 0.1613 +vn 0.5483 0.8206 0.1613 +vn 0.8206 0.5483 0.1613 +vn 0.9679 0.1925 0.1613 +vn 0.9679 -0.1925 0.1613 +vn 0.8206 -0.5483 0.1613 +vn 0.5483 -0.8206 0.1613 +vn 0.1925 -0.9679 0.1613 +vn -0.1925 -0.9679 0.1613 +vn -0.5483 -0.8206 0.1613 +vn -0.8206 -0.5483 0.1613 +vn -0.9679 -0.1925 0.1613 +vn -0.9679 0.1925 0.1613 +vn -0.4371 0.6541 0.6173 +vn 0.1535 0.7716 0.6173 +vn 0.4371 0.6541 0.6173 +vn 0.6541 0.4371 0.6173 +vn 0.7716 0.1535 0.6173 +vn 0.7716 -0.1535 0.6173 +vn 0.6541 -0.4371 0.6173 +vn 0.4371 -0.6541 0.6173 +vn 0.1535 -0.7716 0.6173 +vn -0.1535 -0.7716 0.6173 +vn -0.4371 -0.6541 0.6173 +vn -0.6541 -0.4371 0.6173 +vn -0.7716 -0.1535 0.6173 +vn -0.7716 0.1535 0.6173 +vn -0.1097 0.5514 0.8270 +vn 0.1097 0.5514 0.8270 +vn 0.3123 0.4674 0.8270 +vn 0.4674 0.3123 0.8270 +vn 0.5514 0.1097 0.8270 +vn 0.5514 -0.1097 0.8270 +vn 0.4674 -0.3123 0.8270 +vn 0.3123 -0.4674 0.8270 +vn 0.1097 -0.5514 0.8270 +vn -0.1097 -0.5514 0.8270 +vn -0.3123 -0.4674 0.8270 +vn -0.4674 -0.3123 0.8270 +vn -0.5514 -0.1097 0.8270 +vn -0.5514 0.1097 0.8270 +vn -0.4674 0.3123 0.8270 +vn -0.3123 0.4674 0.8270 +vn -0.9808 0.1951 -0.0000 +vn 0.9808 -0.1951 -0.0000 +vn -0.9808 -0.1951 -0.0000 +vn 0.9808 0.1951 -0.0000 +vn -0.1951 -0.9808 -0.0000 +vn -0.1951 0.9808 -0.0000 +vn 0.1951 0.9808 -0.0000 +vn 0.1951 -0.9808 -0.0000 +vn -0.5556 0.8315 -0.0000 +vn 0.5556 -0.8315 -0.0000 +vn -0.8315 0.5556 -0.0000 +vn 0.8315 -0.5556 -0.0000 +vn -0.8315 -0.5556 -0.0000 +vn 0.8315 0.5556 -0.0000 +vn -0.5556 -0.8315 -0.0000 +vn 0.5556 0.8315 -0.0000 +vn -0.1535 0.7716 0.6173 +vn 0.9701 -0.0000 0.2425 +vn -0.9701 -0.0000 0.2425 +vn 0.7071 -0.0000 -0.7071 +vn -0.7071 -0.0000 -0.7071 +vn -0.0000 0.6000 -0.8000 +vn -0.5331 0.6569 -0.5331 +vn -0.8000 0.6000 -0.0000 +vn 0.5331 0.6569 0.5331 +vn -0.5331 0.6569 0.5331 +vn -0.0000 0.6000 0.8000 +vn 0.5331 0.6569 -0.5331 +vn 0.8000 0.6000 -0.0000 +vn -0.0000 0.9063 0.4226 +vn -0.0000 -0.9063 -0.4226 +vn -0.0000 -0.4226 0.9063 +vn -0.0000 0.7071 -0.7071 +vt 0.814815 0.374108 +vt 0.885186 0.374108 +vt 0.885186 0.451580 +vt 0.000000 0.220183 +vt 0.050000 0.238532 +vt 0.000000 0.238532 +vt 0.750000 0.238532 +vt 0.800000 0.220183 +vt 0.800000 0.238532 +vt 0.733333 0.477064 +vt 0.750000 0.403670 +vt 0.750000 0.477064 +vt 0.700000 0.311927 +vt 0.750000 0.293578 +vt 0.750000 0.311927 +vt 0.650000 0.311927 +vt 0.700000 0.293578 +vt 0.666667 0.477064 +vt 0.650000 0.403670 +vt 0.666667 0.403670 +vt 0.600000 0.220183 +vt 0.650000 0.238532 +vt 0.600000 0.238532 +vt 0.550000 0.238532 +vt 0.533333 0.403670 +vt 0.550000 0.477064 +vt 0.533333 0.477064 +vt 0.500000 0.293578 +vt 0.550000 0.311927 +vt 0.500000 0.311927 +vt 0.450000 0.293578 +vt 0.450000 0.311927 +vt 0.466667 0.477064 +vt 0.450000 0.403670 +vt 0.466667 0.403670 +vt 0.400000 0.220183 +vt 0.450000 0.238532 +vt 0.400000 0.238532 +vt 0.350000 0.220183 +vt 0.350000 0.238532 +vt 0.350000 0.403670 +vt 0.333333 0.477064 +vt 0.333333 0.403670 +vt 0.300000 0.293578 +vt 0.350000 0.311927 +vt 0.300000 0.311927 +vt 0.066667 0.403670 +vt 0.050000 0.477064 +vt 0.050000 0.403670 +vt 0.100000 0.293578 +vt 0.050000 0.311927 +vt 0.050000 0.293578 +vt 0.150000 0.293578 +vt 0.100000 0.311927 +vt 0.133333 0.477064 +vt 0.150000 0.403670 +vt 0.150000 0.477064 +vt 0.200000 0.220183 +vt 0.150000 0.238532 +vt 0.150000 0.220183 +vt 0.250000 0.238532 +vt 0.250000 0.220183 +vt 0.266667 0.403670 +vt 0.250000 0.477064 +vt 0.250000 0.403670 +vt 0.250000 0.293578 +vt 0.250000 0.311927 +vt 0.350000 0.348624 +vt 0.300000 0.366972 +vt 0.300000 0.348624 +vt 0.400000 0.348624 +vt 0.350000 0.366972 +vt 0.450000 0.348624 +vt 0.400000 0.366972 +vt 0.500000 0.348624 +vt 0.450000 0.366972 +vt 0.550000 0.348624 +vt 0.500000 0.366972 +vt 0.600000 0.366972 +vt 0.550000 0.366972 +vt 0.650000 0.348624 +vt 0.600000 0.348624 +vt 0.700000 0.366972 +vt 0.650000 0.366972 +vt 0.700000 0.348624 +vt 0.750000 0.366972 +vt 0.750000 0.348624 +vt 0.800000 0.366972 +vt 0.000000 0.348624 +vt 0.050000 0.366972 +vt 0.000000 0.366972 +vt 0.100000 0.348624 +vt 0.050000 0.348624 +vt 0.150000 0.366972 +vt 0.100000 0.366972 +vt 0.150000 0.348624 +vt 0.200000 0.366972 +vt 0.250000 0.348624 +vt 0.200000 0.348624 +vt 0.250000 0.366972 +vt 0.900000 0.311927 +vt 0.916667 0.238532 +vt 0.916667 0.311927 +vt 0.816667 0.311927 +vt 0.800000 0.311927 +vt 0.816667 0.238532 +vt 0.900000 0.238532 +vt 0.816667 0.220183 +vt 0.900000 0.220183 +vt 1.000000 0.238532 +vt 1.000000 0.311927 +vt 0.900000 0.357798 +vt 0.869042 0.463455 +vt 0.850000 0.467625 +vt 0.830958 0.463455 +vt 0.814815 0.451580 +vt 0.804028 0.433808 +vt 0.800241 0.412844 +vt 0.804028 0.391880 +vt 0.830958 0.362233 +vt 0.850000 0.358063 +vt 0.869042 0.362233 +vt 0.895972 0.391880 +vt 0.899760 0.412844 +vt 0.895972 0.433808 +vt 0.050000 0.220183 +vt 0.750000 0.220183 +vt 0.733333 0.403670 +vt 0.650000 0.293578 +vt 0.650000 0.477064 +vt 0.650000 0.220183 +vt 0.550000 0.220183 +vt 0.550000 0.403670 +vt 0.550000 0.293578 +vt 0.450000 0.477064 +vt 0.450000 0.220183 +vt 0.350000 0.477064 +vt 0.350000 0.293578 +vt 0.066667 0.477064 +vt 0.150000 0.311927 +vt 0.133333 0.403670 +vt 0.200000 0.238532 +vt 0.266667 0.477064 +vt 0.800000 0.348624 +vt 0.858333 0.357798 +vt 0.958333 0.357798 +vt 0.916667 0.357798 +vt 0.500000 0.596330 +vt 0.516667 0.477064 +vt 0.550000 0.706422 +vt 0.500000 0.706422 +vt 0.500000 0.816514 +vt 0.516667 0.935780 +vt 0.550000 0.816514 +vt 0.533333 0.935780 +vt 0.450000 0.596330 +vt 0.450000 0.706422 +vt 0.400000 0.596330 +vt 0.400000 0.706422 +vt 0.350000 0.596330 +vt 0.350000 0.706422 +vt 0.300000 0.596330 +vt 0.300000 0.706422 +vt 0.250000 0.596330 +vt 0.250000 0.706422 +vt 0.200000 0.596330 +vt 0.200000 0.706422 +vt 0.150000 0.596330 +vt 0.150000 0.706422 +vt 0.100000 0.596330 +vt 0.100000 0.706422 +vt 0.050000 0.596330 +vt 0.050000 0.706422 +vt 0.000000 0.596330 +vt 0.000000 0.706422 +vt 0.750000 0.706422 +vt 0.800000 0.596330 +vt 0.800000 0.706422 +vt 0.700000 0.706422 +vt 0.750000 0.596330 +vt 0.650000 0.706422 +vt 0.700000 0.596330 +vt 0.600000 0.596330 +vt 0.600000 0.706422 +vt 0.550000 0.596330 +vt 0.483333 0.477064 +vt 0.433333 0.477064 +vt 0.416667 0.477064 +vt 0.383333 0.477064 +vt 0.366667 0.477064 +vt 0.316667 0.477064 +vt 0.283333 0.477064 +vt 0.216667 0.477064 +vt 0.183333 0.477064 +vt 0.166667 0.477064 +vt 0.116667 0.477064 +vt 0.083333 0.477064 +vt 0.033333 0.477064 +vt 0.016667 0.477064 +vt 0.766667 0.477064 +vt 0.716667 0.477064 +vt 0.683333 0.477064 +vt 0.650000 0.596330 +vt 0.633333 0.477064 +vt 0.616667 0.477064 +vt 0.583333 0.477064 +vt 0.566667 0.477064 +vt 0.450000 0.816514 +vt 0.400000 0.816514 +vt 0.350000 0.816514 +vt 0.300000 0.816514 +vt 0.250000 0.816514 +vt 0.200000 0.816514 +vt 0.150000 0.816514 +vt 0.100000 0.816514 +vt 0.050000 0.816514 +vt 0.000000 0.816514 +vt 0.750000 0.816514 +vt 0.700000 0.816514 +vt 0.650000 0.816514 +vt 0.600000 0.816514 +vt 0.466667 0.935780 +vt 0.483333 0.935780 +vt 0.383333 0.935780 +vt 0.366667 0.935780 +vt 0.333333 0.935780 +vt 0.316667 0.935780 +vt 0.283333 0.935780 +vt 0.266667 0.935780 +vt 0.233333 0.935780 +vt 0.216667 0.935780 +vt 0.183333 0.935780 +vt 0.166667 0.935780 +vt 0.116667 0.935780 +vt 0.133333 0.935780 +vt 0.083333 0.935780 +vt 0.066667 0.935780 +vt 0.033333 0.935780 +vt 0.016667 0.935780 +vt 0.783333 0.935780 +vt 0.766667 0.935780 +vt 0.733333 0.935780 +vt 0.716667 0.935780 +vt 0.683333 0.935780 +vt 0.666667 0.935780 +vt 0.616667 0.935780 +vt 0.633333 0.935780 +vt 0.583333 0.935780 +vt 0.566667 0.935780 +vt 0.433333 0.935780 +vt 0.425000 1.000000 +vt 0.416667 0.935780 +vt 0.375000 1.000000 +vt 0.325000 1.000000 +vt 0.275000 1.000000 +vt 0.225000 1.000000 +vt 0.175000 1.000000 +vt 0.125000 1.000000 +vt 0.075000 1.000000 +vt 0.025000 1.000000 +vt 0.775000 1.000000 +vt 0.725000 1.000000 +vt 0.675000 1.000000 +vt 0.625000 1.000000 +vt 0.575000 1.000000 +vt 0.525000 1.000000 +vt 0.475000 1.000000 +vt 0.600000 0.311927 +vt 0.200000 0.311927 +vt 0.400000 0.311927 +vt 0.000000 0.311927 +vt 0.600000 0.477064 +vt 0.200000 0.477064 +vt 0.600000 0.403670 +vt 0.200000 0.403670 +vt 0.800000 0.477064 +vt 0.400000 0.403670 +vt 0.400000 0.477064 +vt 0.000000 0.403670 +vt 0.000000 0.477064 +vt 0.500000 0.403670 +vt 0.100000 0.403670 +vt 0.700000 0.403670 +vt 0.300000 0.403670 +vt 0.800000 0.403670 +vt 0.233333 0.477064 +vt 0.783333 0.477064 +vt 0.800000 0.816514 +vt 0.183333 0.055046 +vt 0.116667 0.055046 +vt 0.116667 0.000000 +vt 0.183333 0.000000 +vt 0.250000 0.000000 +vt 0.250000 0.055046 +vt 0.008333 0.000000 +vt 0.012500 0.000000 +vt 0.012500 0.004587 +vt 0.008333 0.004587 +vt 0.010922 0.011468 +vt 0.014583 0.015499 +vt 0.008333 0.018349 +vt 0.020833 0.000000 +vt 0.020833 0.004587 +vt 0.014583 0.021199 +vt 0.025000 0.000000 +vt 0.025000 0.004587 +vt 0.010922 0.025229 +vt 0.033333 0.000000 +vt 0.033333 0.004587 +vt 0.005744 0.025229 +vt 0.037500 0.000000 +vt 0.037500 0.004587 +vt 0.002083 0.021199 +vt 0.045833 0.000000 +vt 0.045833 0.004587 +vt 0.002083 0.015499 +vt 0.050000 0.000000 +vt 0.050000 0.004587 +vt 0.005744 0.011468 +vt 0.000000 0.000000 +vt 0.000000 0.004587 +vt 0.031250 0.009174 +vt 0.027083 0.009174 +vt 0.037500 0.009174 +vt 0.033333 0.009174 +vt 0.043750 0.009174 +vt 0.039583 0.009174 +vt 0.012500 0.009174 +vt 0.008333 0.009174 +vt 0.050000 0.009174 +vt 0.045833 0.009174 +vt 0.006250 0.009174 +vt 0.002083 0.009174 +vt 0.025000 0.009174 +vt 0.020833 0.009174 +vt 0.018750 0.009174 +vt 0.014583 0.009174 +vt 0.237500 0.057339 +vt 0.241667 0.059633 +vt 0.241667 0.096330 +vt 0.237500 0.094037 +vt 0.245833 0.061927 +vt 0.245833 0.098624 +vt 0.250000 0.064220 +vt 0.250000 0.100917 +vt 0.254167 0.066514 +vt 0.254167 0.103211 +vt 0.258333 0.068807 +vt 0.258333 0.105505 +vt 0.262500 0.071101 +vt 0.262500 0.107798 +vt 0.266667 0.073394 +vt 0.266667 0.110092 +vt 0.233333 0.055046 +vt 0.233333 0.091743 +vt 0.150000 0.201835 +vt 0.141667 0.201835 +vt 0.141667 0.174312 +vt 0.150000 0.174312 +vt 0.125000 0.174312 +vt 0.125000 0.201835 +vt 0.116667 0.201835 +vt 0.116667 0.174312 +vt 0.141667 0.211009 +vt 0.125000 0.211009 +vt 0.141667 0.165138 +vt 0.125000 0.165138 +vt 0.166667 0.165138 +vt 0.116667 0.165138 +vt 0.166667 0.055046 +vt 0.050000 0.055046 +vt 0.050000 0.165138 +vt 0.000000 0.165138 +vt 0.000000 0.055046 +vt 0.116667 0.220183 +vt 0.233333 0.165138 +vt 0.191667 0.192661 +vt 0.175000 0.192661 +vt 0.175000 0.183486 +vt 0.191667 0.183486 +vt 0.166667 0.183486 +vt 0.166667 0.192661 +vt 0.150000 0.192661 +vt 0.150000 0.183486 +vt 0.175000 0.211009 +vt 0.166667 0.211009 +vt 0.175000 0.165138 +vt 0.237500 0.155963 +vt 0.233333 0.155963 +vt 0.233333 0.110092 +vt 0.237500 0.110092 +vt 0.291667 0.055046 +vt 0.283333 0.055046 +vt 0.283333 0.018349 +vt 0.291667 0.018349 +vt 0.275000 0.018349 +vt 0.275000 0.055046 +vt 0.266667 0.055046 +vt 0.266667 0.018349 +vt 0.300000 0.055046 +vt 0.300000 0.018349 +vt 0.283333 0.064220 +vt 0.275000 0.064220 +vt 0.291667 0.064220 +vt 0.266667 0.064220 +vt 0.283333 0.165138 +vt 0.275000 0.165138 +vt 0.291667 0.165138 +vt 0.300000 0.165138 +vt 0.300000 0.064220 +vt 0.266667 0.165138 +vt 0.283333 0.174312 +vt 0.275000 0.174312 +vt 0.291667 0.174312 +vt 0.266667 0.174312 +vt 0.283333 0.220183 +vt 0.275000 0.220183 +vt 0.291667 0.220183 +vt 0.300000 0.220183 +vt 0.300000 0.174312 +vt 0.266667 0.220183 +vt 0.008333 0.032110 +vt 0.012500 0.032110 +vt 0.012500 0.036697 +vt 0.008333 0.036697 +vt 0.016667 0.041284 +vt 0.008333 0.045872 +vt 0.020833 0.032110 +vt 0.020833 0.036697 +vt 0.016667 0.050459 +vt 0.025000 0.032110 +vt 0.025000 0.036697 +vt 0.012500 0.055046 +vt 0.033333 0.032110 +vt 0.033333 0.036697 +vt 0.004167 0.055046 +vt 0.037500 0.032110 +vt 0.037500 0.036697 +vt 0.000000 0.050459 +vt 0.045833 0.032110 +vt 0.045833 0.036697 +vt 0.000000 0.041284 +vt 0.050000 0.032110 +vt 0.050000 0.036697 +vt 0.004167 0.036697 +vt 0.000000 0.032110 +vt 0.000000 0.036697 +s 1 +usemtl m_f86c0c72-2b12-0e19-6f50-7a0521a3a0a7 +f 1/1/1 2/2/1 3/3/1 +f 4/4/1 5/5/1 6/6/1 +f 7/7/1 4/8/1 6/9/1 +f 7/10/2 8/11/2 9/12/2 +f 10/13/1 8/14/1 11/15/1 +f 12/16/1 13/17/1 10/13/1 +f 14/18/3 15/19/3 12/20/3 +f 16/21/1 14/22/1 17/23/1 +f 18/24/1 16/21/1 17/23/1 +f 19/25/4 20/26/4 18/27/4 +f 21/28/1 19/29/1 22/30/1 +f 23/31/1 22/30/1 24/32/1 +f 25/33/5 23/34/5 24/35/5 +f 26/36/1 25/37/1 27/38/1 +f 28/39/1 27/38/1 29/40/1 +f 30/41/6 29/42/6 31/43/6 +f 32/44/1 31/45/1 33/46/1 +f 34/47/7 35/48/7 36/49/7 +f 37/50/1 34/51/1 36/52/1 +f 38/53/1 39/54/1 37/50/1 +f 40/55/8 38/56/8 41/57/8 +f 42/58/1 40/59/1 41/60/1 +f 43/61/1 42/58/1 44/62/1 +f 45/63/9 44/64/9 46/65/9 +f 46/66/1 33/46/1 45/67/1 +f 47/68/10 48/69/10 49/70/10 +f 50/71/10 51/72/10 47/68/10 +f 52/73/10 53/74/10 50/71/10 +f 54/75/10 55/76/10 52/73/10 +f 56/77/10 57/78/10 54/75/10 +f 56/77/10 58/79/10 59/80/10 +f 60/81/10 58/79/10 61/82/10 +f 60/81/10 62/83/10 63/84/10 +f 64/85/10 65/86/10 62/83/10 +f 66/87/10 67/88/10 65/86/10 +f 68/89/10 69/90/10 67/91/10 +f 70/92/10 69/90/10 71/93/10 +f 70/92/10 72/94/10 73/95/10 +f 74/96/10 75/97/10 72/94/10 +f 76/98/10 75/97/10 77/99/10 +f 49/70/10 78/100/10 76/98/10 +f 79/101/11 80/102/11 81/103/11 +f 82/9/12 83/104/12 84/105/12 +f 85/101/12 86/102/12 87/103/12 +f 79/101/13 83/104/13 88/106/13 +f 89/107/1 82/108/1 80/109/1 +f 80/102/14 82/110/14 84/111/14 +f 81/103/15 90/112/15 79/101/15 +f 91/9/11 92/104/11 93/105/11 +f 85/101/14 92/104/14 94/106/14 +f 95/107/1 91/108/1 86/109/1 +f 86/102/13 91/110/13 93/111/13 +f 87/103/16 96/112/16 85/101/16 +f 97/101/13 98/102/13 99/103/13 +f 100/9/14 101/104/14 102/105/14 +f 103/101/14 104/102/14 105/103/14 +f 97/101/12 101/104/12 106/106/12 +f 107/107/1 100/108/1 98/109/1 +f 98/102/11 100/110/11 102/111/11 +f 99/103/17 108/112/17 97/101/17 +f 109/9/13 110/104/13 111/105/13 +f 103/101/11 110/104/11 112/106/11 +f 104/109/1 112/106/1 109/108/1 +f 104/102/12 109/110/12 111/111/12 +f 105/103/18 113/112/18 103/101/18 +f 3/3/1 114/113/1 115/114/1 +f 115/114/1 116/115/1 3/3/1 +f 116/115/1 117/116/1 3/3/1 +f 117/116/1 118/117/1 119/118/1 +f 119/118/1 120/119/1 117/116/1 +f 120/119/1 1/1/1 117/116/1 +f 1/1/1 121/120/1 2/2/1 +f 121/120/1 122/121/1 2/2/1 +f 122/121/1 123/122/1 2/2/1 +f 2/2/1 124/123/1 3/3/1 +f 124/123/1 125/124/1 3/3/1 +f 125/124/1 126/125/1 3/3/1 +f 3/3/1 117/116/1 1/1/1 +f 4/4/1 35/126/1 5/5/1 +f 7/7/1 9/127/1 4/8/1 +f 7/10/2 11/128/2 8/11/2 +f 10/13/1 13/17/1 8/14/1 +f 12/16/1 15/129/1 13/17/1 +f 14/18/3 127/130/3 15/19/3 +f 16/21/1 127/131/1 14/22/1 +f 18/24/1 20/132/1 16/21/1 +f 19/25/4 128/133/4 20/26/4 +f 21/28/1 128/134/1 19/29/1 +f 23/31/1 21/28/1 22/30/1 +f 25/33/5 129/135/5 23/34/5 +f 26/36/1 129/136/1 25/37/1 +f 28/39/1 26/36/1 27/38/1 +f 30/41/6 28/137/6 29/42/6 +f 32/44/1 30/138/1 31/45/1 +f 34/47/7 5/139/7 35/48/7 +f 37/50/1 39/54/1 34/51/1 +f 38/53/1 130/140/1 39/54/1 +f 40/55/8 130/141/8 38/56/8 +f 42/58/1 131/142/1 40/59/1 +f 43/61/1 131/142/1 42/58/1 +f 45/63/9 43/143/9 44/64/9 +f 46/66/1 32/44/1 33/46/1 +f 47/68/10 51/72/10 48/69/10 +f 50/71/10 53/74/10 51/72/10 +f 52/73/10 55/76/10 53/74/10 +f 54/75/10 57/78/10 55/76/10 +f 56/77/10 59/80/10 57/78/10 +f 56/77/10 61/82/10 58/79/10 +f 60/81/10 63/84/10 58/79/10 +f 60/81/10 64/85/10 62/83/10 +f 64/85/10 66/87/10 65/86/10 +f 66/87/10 68/144/10 67/88/10 +f 68/89/10 71/93/10 69/90/10 +f 70/92/10 73/95/10 69/90/10 +f 70/92/10 74/96/10 72/94/10 +f 74/96/10 77/99/10 75/97/10 +f 76/98/10 78/100/10 75/97/10 +f 49/70/10 48/69/10 78/100/10 +f 79/101/11 89/107/11 80/102/11 +f 82/9/12 88/106/12 83/104/12 +f 85/101/12 95/107/12 86/102/12 +f 88/106/13 89/107/13 79/101/13 +f 79/101/13 90/145/13 83/104/13 +f 89/107/1 88/106/1 82/108/1 +f 132/146/14 81/103/14 84/111/14 +f 81/103/14 80/102/14 84/111/14 +f 81/103/15 132/147/15 90/112/15 +f 91/9/11 94/106/11 92/104/11 +f 94/106/14 95/107/14 85/101/14 +f 85/101/14 96/145/14 92/104/14 +f 95/107/1 94/106/1 91/108/1 +f 133/146/13 87/103/13 93/111/13 +f 87/103/13 86/102/13 93/111/13 +f 87/103/16 133/147/16 96/112/16 +f 97/101/13 107/107/13 98/102/13 +f 100/9/14 106/106/14 101/104/14 +f 103/101/14 134/107/14 104/102/14 +f 106/106/12 107/107/12 97/101/12 +f 97/101/12 108/145/12 101/104/12 +f 107/107/1 106/106/1 100/108/1 +f 135/146/11 99/103/11 102/111/11 +f 99/103/11 98/102/11 102/111/11 +f 99/103/17 135/147/17 108/112/17 +f 109/9/13 112/106/13 110/104/13 +f 112/106/11 134/107/11 103/101/11 +f 103/101/11 113/145/11 110/104/11 +f 104/109/1 134/107/1 112/106/1 +f 136/146/12 105/103/12 111/111/12 +f 105/103/12 104/102/12 111/111/12 +f 105/103/18 136/147/18 113/112/18 +f 126/27/19 137/148/19 3/149/19 +f 137/148/20 138/150/20 139/151/20 +f 138/150/21 140/152/21 139/151/21 +f 141/153/22 142/154/22 143/155/22 +f 144/156/23 139/151/23 145/157/23 +f 146/158/24 145/157/24 147/159/24 +f 148/160/25 147/159/25 149/161/25 +f 150/162/26 149/161/26 151/163/26 +f 152/164/27 151/163/27 153/165/27 +f 154/166/28 153/165/28 155/167/28 +f 156/168/29 155/167/29 157/169/29 +f 158/170/30 157/169/30 159/171/30 +f 160/172/31 159/171/31 161/173/31 +f 162/174/32 161/173/32 163/175/32 +f 164/176/33 162/177/33 163/178/33 +f 165/179/34 166/180/34 164/176/34 +f 167/181/35 168/182/35 165/179/35 +f 169/183/36 167/181/36 170/184/36 +f 171/185/37 170/184/37 138/150/37 +f 3/186/38 144/156/38 114/33/38 +f 114/187/39 146/158/39 115/188/39 +f 115/189/40 148/160/40 116/190/40 +f 116/42/41 150/162/41 117/191/41 +f 117/192/42 152/164/42 118/143/42 +f 119/193/43 152/164/43 154/166/43 +f 119/194/44 156/168/44 120/195/44 +f 1/196/45 156/168/45 158/170/45 +f 1/197/46 160/172/46 121/139/46 +f 121/198/47 162/174/47 122/199/47 +f 123/200/48 162/177/48 166/180/48 +f 123/10/49 168/182/49 2/201/49 +f 2/202/50 172/203/50 124/18/50 +f 124/204/51 169/183/51 125/205/51 +f 125/206/52 171/185/52 126/207/52 +f 139/151/53 173/208/53 145/157/53 +f 145/157/54 174/209/54 147/159/54 +f 147/159/55 175/210/55 149/161/55 +f 149/161/56 176/211/56 151/163/56 +f 153/165/57 176/211/57 177/212/57 +f 153/165/58 178/213/58 155/167/58 +f 155/167/59 179/214/59 157/169/59 +f 157/169/60 180/215/60 159/171/60 +f 159/171/61 181/216/61 161/173/61 +f 161/173/62 182/217/62 163/175/62 +f 163/178/63 183/218/63 164/176/63 +f 165/179/64 183/218/64 184/219/64 +f 165/179/65 185/220/65 167/181/65 +f 167/181/66 186/221/66 170/184/66 +f 138/150/67 186/221/67 142/154/67 +f 187/222/68 140/152/68 141/223/68 +f 175/210/69 188/224/69 189/225/69 +f 176/211/70 189/226/70 190/227/70 +f 177/212/71 190/228/71 191/229/71 +f 178/213/72 191/230/72 192/231/72 +f 179/214/73 192/232/73 193/233/73 +f 194/234/74 179/214/74 193/235/74 +f 181/216/75 194/236/75 195/237/75 +f 182/217/76 195/238/76 196/239/76 +f 183/218/77 196/240/77 197/241/77 +f 184/219/78 197/242/78 198/243/78 +f 185/220/79 198/244/79 199/245/79 +f 200/246/80 185/220/80 199/247/80 +f 142/154/81 200/248/81 143/249/81 +f 187/250/82 201/251/82 188/252/82 +f 188/224/83 201/253/83 189/225/83 +f 189/226/84 201/254/84 190/227/84 +f 190/228/85 201/255/85 191/229/85 +f 191/230/86 201/256/86 192/231/86 +f 192/232/87 201/257/87 193/233/87 +f 193/235/88 201/258/88 194/234/88 +f 194/236/89 201/259/89 195/237/89 +f 195/238/90 201/260/90 196/239/90 +f 196/240/91 201/261/91 197/241/91 +f 197/242/92 201/262/92 198/243/92 +f 198/244/93 201/263/93 199/245/93 +f 199/247/94 201/264/94 200/246/94 +f 200/248/95 201/265/95 143/249/95 +f 143/155/96 201/266/96 141/153/96 +f 141/223/97 201/267/97 187/222/97 +f 17/23/98 19/29/98 18/24/98 +f 131/142/99 130/140/99 40/59/99 +f 14/22/100 202/268/100 17/23/100 +f 43/61/101 203/269/101 131/142/101 +f 6/9/102 11/15/102 7/7/102 +f 25/37/103 204/270/103 27/38/103 +f 27/38/104 31/45/104 29/40/104 +f 5/5/105 205/271/105 6/6/105 +f 34/51/105 68/89/105 205/271/105 +f 22/30/106 52/73/106 24/32/106 +f 39/54/107 71/93/107 34/51/107 +f 19/29/108 54/75/108 22/30/108 +f 130/140/109 70/92/109 39/54/109 +f 202/268/98 56/77/98 19/29/98 +f 203/269/99 74/96/99 130/140/99 +f 12/16/100 61/82/100 202/268/100 +f 45/67/101 77/99/101 203/269/101 +f 10/13/110 60/81/110 12/16/110 +f 33/46/111 76/98/111 45/67/111 +f 11/15/112 64/85/112 10/13/112 +f 31/45/113 49/70/113 33/46/113 +f 205/105/102 66/87/102 11/15/102 +f 24/32/103 50/71/103 204/270/103 +f 204/270/104 47/68/104 31/45/104 +f 128/133/99 16/272/99 20/26/99 +f 38/56/98 42/273/98 41/57/98 +f 206/274/101 127/130/101 16/272/101 +f 207/275/100 44/64/100 42/273/100 +f 8/11/104 4/276/104 9/12/104 +f 208/277/105 129/135/105 26/278/105 +f 30/41/102 26/278/102 28/137/102 +f 209/279/103 35/48/103 4/280/103 +f 57/78/109 128/133/109 21/281/109 +f 73/95/108 38/56/108 37/282/108 +f 59/80/99 206/274/99 128/133/99 +f 72/94/98 207/275/98 38/56/98 +f 58/79/101 15/19/101 206/274/101 +f 75/97/100 46/65/100 207/275/100 +f 63/84/111 13/283/111 15/19/111 +f 78/100/110 32/284/110 46/65/110 +f 62/83/113 8/11/113 13/283/113 +f 48/69/112 30/41/112 32/284/112 +f 65/86/104 209/285/104 8/11/104 +f 53/74/105 23/34/105 208/277/105 +f 51/72/102 208/277/102 30/41/102 +f 67/91/103 36/49/103 209/279/103 +f 55/76/107 21/281/107 23/34/107 +f 69/90/106 37/282/106 36/49/106 +f 126/27/19 171/185/19 137/148/19 +f 137/148/20 171/185/20 138/150/20 +f 138/150/21 142/154/21 140/152/21 +f 141/153/22 140/152/22 142/154/22 +f 144/156/23 137/148/23 139/151/23 +f 146/158/24 144/156/24 145/157/24 +f 148/160/25 146/158/25 147/159/25 +f 150/162/26 148/160/26 149/161/26 +f 152/164/27 150/162/27 151/163/27 +f 154/166/28 152/164/28 153/165/28 +f 156/168/29 154/166/29 155/167/29 +f 158/170/30 156/168/30 157/169/30 +f 160/172/31 158/170/31 159/171/31 +f 162/174/32 160/172/32 161/173/32 +f 164/176/33 166/180/33 162/177/33 +f 165/179/34 168/182/34 166/180/34 +f 167/181/35 172/203/35 168/182/35 +f 169/183/36 172/203/36 167/181/36 +f 171/185/37 169/183/37 170/184/37 +f 3/186/38 137/148/38 144/156/38 +f 114/187/39 144/156/39 146/158/39 +f 115/189/40 146/158/40 148/160/40 +f 116/42/41 148/160/41 150/162/41 +f 117/192/42 150/162/42 152/164/42 +f 119/193/43 118/286/43 152/164/43 +f 119/194/44 154/166/44 156/168/44 +f 1/196/45 120/55/45 156/168/45 +f 1/197/46 158/170/46 160/172/46 +f 121/198/47 160/172/47 162/174/47 +f 123/200/48 122/287/48 162/177/48 +f 123/10/49 166/180/49 168/182/49 +f 2/202/50 168/182/50 172/203/50 +f 124/204/51 172/203/51 169/183/51 +f 125/206/52 169/183/52 171/185/52 +f 139/151/53 140/152/53 173/208/53 +f 145/157/54 173/208/54 174/209/54 +f 147/159/55 174/209/55 175/210/55 +f 149/161/56 175/210/56 176/211/56 +f 153/165/57 151/163/57 176/211/57 +f 153/165/58 177/212/58 178/213/58 +f 155/167/59 178/213/59 179/214/59 +f 157/169/60 179/214/60 180/215/60 +f 159/171/61 180/215/61 181/216/61 +f 161/173/62 181/216/62 182/217/62 +f 163/178/63 182/288/63 183/218/63 +f 165/179/64 164/176/64 183/218/64 +f 165/179/65 184/219/65 185/220/65 +f 167/181/66 185/220/66 186/221/66 +f 138/150/67 170/184/67 186/221/67 +f 187/222/68 173/208/68 140/152/68 +f 174/209/114 173/208/114 187/250/114 +f 175/210/69 174/209/69 188/224/69 +f 176/211/70 175/210/70 189/226/70 +f 177/212/71 176/211/71 190/228/71 +f 178/213/72 177/212/72 191/230/72 +f 179/214/73 178/213/73 192/232/73 +f 194/234/74 180/215/74 179/214/74 +f 181/216/75 180/215/75 194/236/75 +f 182/217/76 181/216/76 195/238/76 +f 183/218/77 182/288/77 196/240/77 +f 184/219/78 183/218/78 197/242/78 +f 185/220/79 184/219/79 198/244/79 +f 200/246/80 186/221/80 185/220/80 +f 142/154/81 186/221/81 200/248/81 +f 17/23/98 202/268/98 19/29/98 +f 131/142/99 203/269/99 130/140/99 +f 14/22/100 12/16/100 202/268/100 +f 43/61/101 45/67/101 203/269/101 +f 6/9/102 205/105/102 11/15/102 +f 25/37/103 24/32/103 204/270/103 +f 27/38/104 204/270/104 31/45/104 +f 5/5/105 34/51/105 205/271/105 +f 34/51/105 71/93/105 68/89/105 +f 22/30/106 54/75/106 52/73/106 +f 39/54/107 70/92/107 71/93/107 +f 19/29/108 56/77/108 54/75/108 +f 130/140/109 74/96/109 70/92/109 +f 202/268/98 61/82/98 56/77/98 +f 203/269/99 77/99/99 74/96/99 +f 12/16/100 60/81/100 61/82/100 +f 45/67/101 76/98/101 77/99/101 +f 10/13/110 64/85/110 60/81/110 +f 33/46/111 49/70/111 76/98/111 +f 11/15/112 66/87/112 64/85/112 +f 31/45/113 47/68/113 49/70/113 +f 205/105/102 68/144/102 66/87/102 +f 24/32/103 52/73/103 50/71/103 +f 204/270/104 50/71/104 47/68/104 +f 128/133/99 206/274/99 16/272/99 +f 38/56/98 207/275/98 42/273/98 +f 206/274/101 15/19/101 127/130/101 +f 207/275/100 46/65/100 44/64/100 +f 8/11/104 209/285/104 4/276/104 +f 208/277/105 23/34/105 129/135/105 +f 30/41/102 208/277/102 26/278/102 +f 209/279/103 36/49/103 35/48/103 +f 57/78/109 59/80/109 128/133/109 +f 73/95/108 72/94/108 38/56/108 +f 59/80/99 58/79/99 206/274/99 +f 72/94/98 75/97/98 207/275/98 +f 58/79/101 63/84/101 15/19/101 +f 75/97/100 78/100/100 46/65/100 +f 63/84/111 62/83/111 13/283/111 +f 78/100/110 48/69/110 32/284/110 +f 62/83/113 65/86/113 8/11/113 +f 48/69/112 51/72/112 30/41/112 +f 65/86/104 67/88/104 209/285/104 +f 53/74/105 55/76/105 23/34/105 +f 51/72/102 53/74/102 208/277/102 +f 67/91/103 69/90/103 36/49/103 +f 55/76/107 57/78/107 21/281/107 +f 69/90/106 73/95/106 37/282/106 +f 174/209/114 187/250/114 188/252/114 +f 212/289/115 211/290/115 213/291/115 +f 212/289/115 213/291/115 214/292/115 +f 217/293/116 215/294/116 216/289/116 +f 217/293/116 216/289/116 218/292/116 +f 219/295/17 221/296/17 222/297/17 +f 219/295/17 222/297/17 220/298/17 +f 240/299/11 241/300/11 237/301/11 +f 221/296/13 223/302/13 224/303/13 +f 221/296/13 224/303/13 222/297/13 +f 241/300/11 243/304/11 237/301/11 +f 223/302/117 225/305/117 226/306/117 +f 223/302/117 226/306/117 224/303/117 +f 243/304/11 235/307/11 237/301/11 +f 225/305/1 227/308/1 228/309/1 +f 225/305/1 228/309/1 226/306/1 +f 235/307/11 236/310/11 237/301/11 +f 227/308/118 229/311/118 230/312/118 +f 227/308/118 230/312/118 228/309/118 +f 236/310/11 238/313/11 237/301/11 +f 229/311/14 231/314/14 232/315/14 +f 229/311/14 232/315/14 230/312/14 +f 238/313/11 239/316/11 237/301/11 +f 231/314/18 233/317/18 234/318/18 +f 231/314/18 234/318/18 232/315/18 +f 239/316/11 242/319/11 237/301/11 +f 233/320/10 219/295/10 220/298/10 +f 233/320/10 220/298/10 234/321/10 +f 242/319/11 240/299/11 237/301/11 +f 236/322/119 235/323/119 226/306/119 +f 236/322/119 226/306/119 228/309/119 +f 238/324/120 236/325/120 228/309/120 +f 238/324/120 228/309/120 230/312/120 +f 239/326/121 238/327/121 230/312/121 +f 239/326/121 230/312/121 232/315/121 +f 241/328/122 240/329/122 220/298/122 +f 241/328/122 220/298/122 222/297/122 +f 242/330/123 239/331/123 232/315/123 +f 242/330/123 232/315/123 234/318/123 +f 240/332/124 242/333/124 234/321/124 +f 240/332/124 234/321/124 220/298/124 +f 235/334/125 243/335/125 224/303/125 +f 235/334/125 224/303/125 226/306/125 +f 243/336/126 241/337/126 222/297/126 +f 243/336/126 222/297/126 224/303/126 +f 244/338/17 246/339/17 247/340/17 +f 244/338/17 247/340/17 245/341/17 +f 246/339/13 248/342/13 249/343/13 +f 246/339/13 249/343/13 247/340/13 +f 248/342/117 250/344/117 251/345/117 +f 248/342/117 251/345/117 249/343/117 +f 250/344/1 252/346/1 253/347/1 +f 250/344/1 253/347/1 251/345/1 +f 252/346/118 254/348/118 255/349/118 +f 252/346/118 255/349/118 253/347/118 +f 254/348/14 256/350/14 257/351/14 +f 254/348/14 257/351/14 255/349/14 +f 256/350/18 258/352/18 259/353/18 +f 256/350/18 259/353/18 257/351/18 +f 258/354/10 244/338/10 245/341/10 +f 258/354/10 245/341/10 259/355/10 +f 261/356/13 260/357/13 262/358/13 +f 261/356/13 262/358/13 263/359/13 +f 266/360/14 264/361/14 265/362/14 +f 266/360/14 265/362/14 267/363/14 +f 264/361/11 260/357/11 261/364/11 +f 264/361/11 261/364/11 265/365/11 +f 263/366/12 262/358/12 266/360/12 +f 263/366/12 266/360/12 267/367/12 +f 262/358/10 260/357/10 264/361/10 +f 262/358/10 264/361/10 266/360/10 +f 269/368/13 268/369/13 270/290/13 +f 269/368/13 270/290/13 271/370/13 +f 274/371/14 272/372/14 273/373/14 +f 274/371/14 273/373/14 275/374/14 +f 272/372/11 268/369/11 269/375/11 +f 272/372/11 269/375/11 273/126/11 +f 271/291/12 270/290/12 274/371/12 +f 271/291/12 274/371/12 275/317/12 +f 270/290/10 268/369/10 272/372/10 +f 270/290/10 272/372/10 274/371/10 +f 273/376/1 269/368/1 271/370/1 +f 273/376/1 271/370/1 275/354/1 +f 277/377/13 276/378/13 278/379/13 +f 277/377/13 278/379/13 279/380/13 +f 282/381/14 280/382/14 281/383/14 +f 282/381/14 281/383/14 283/384/14 +f 280/382/127 276/378/127 277/385/127 +f 280/382/127 277/385/127 281/386/127 +f 279/387/128 278/379/128 282/381/128 +f 279/387/128 282/381/128 283/368/128 +f 278/379/129 276/378/129 280/382/129 +f 278/379/129 280/382/129 282/381/129 +f 284/388/13 285/389/13 287/390/13 +f 284/388/13 287/390/13 286/391/13 +f 289/392/13 288/393/13 290/394/13 +f 289/392/13 290/394/13 291/395/13 +f 294/396/14 292/397/14 293/398/14 +f 294/396/14 293/398/14 295/399/14 +f 290/394/10 288/393/10 292/397/10 +f 290/394/10 292/397/10 294/396/10 +f 293/400/1 289/392/1 291/395/1 +f 293/400/1 291/395/1 295/401/1 +f 292/397/15 288/393/15 296/402/15 +f 292/397/15 296/402/15 297/403/15 +f 296/404/13 288/393/13 289/392/13 +f 297/405/14 293/398/14 292/397/14 +f 299/406/11 298/407/11 297/403/11 +f 299/406/11 297/403/11 296/402/11 +f 300/408/13 299/406/13 296/402/13 +f 300/408/13 296/402/13 289/404/13 +f 301/409/12 300/408/12 289/404/12 +f 301/409/12 289/404/12 293/410/12 +f 298/407/14 301/411/14 293/405/14 +f 298/407/14 293/405/14 297/403/14 +f 298/407/130 299/406/130 210/412/130 +f 298/407/130 210/412/130 302/413/130 +f 210/412/13 299/408/13 300/414/13 +f 302/413/14 301/415/14 298/411/14 +f 304/416/1 303/417/1 302/413/1 +f 304/416/1 302/413/1 210/412/1 +f 305/418/13 304/416/13 210/412/13 +f 305/418/13 210/412/13 300/414/13 +f 306/419/10 305/418/10 300/414/10 +f 306/419/10 300/414/10 301/420/10 +f 303/417/14 306/421/14 301/415/14 +f 303/417/14 301/415/14 302/413/14 +f 308/422/17 310/423/17 311/424/17 +f 308/422/17 311/424/17 309/425/17 +f 309/424/11 311/426/11 307/427/11 +f 310/423/13 312/428/13 313/429/13 +f 310/423/13 313/429/13 311/424/13 +f 311/426/11 313/430/11 307/427/11 +f 312/428/117 314/431/117 315/432/117 +f 312/428/117 315/432/117 313/429/117 +f 313/430/11 315/433/11 307/427/11 +f 314/431/1 316/434/1 317/435/1 +f 314/431/1 317/435/1 315/432/1 +f 315/433/11 317/436/11 307/427/11 +f 316/434/118 318/437/118 319/438/118 +f 316/434/118 319/438/118 317/435/118 +f 317/436/11 319/439/11 307/427/11 +f 318/437/14 320/440/14 321/441/14 +f 318/437/14 321/441/14 319/438/14 +f 319/439/11 321/442/11 307/427/11 +f 320/440/18 322/443/18 323/444/18 +f 320/440/18 323/444/18 321/441/18 +f 321/442/11 323/445/11 307/427/11 +f 322/446/10 308/422/10 309/425/10 +f 322/446/10 309/425/10 323/447/10 +f 323/445/11 309/424/11 307/427/11 diff --git a/src/main/resources/assets/hbm/models/machines/cyclotron.obj b/src/main/resources/assets/hbm/models/machines/cyclotron.obj index 9f42c3bd2..d98618ed9 100644 --- a/src/main/resources/assets/hbm/models/machines/cyclotron.obj +++ b/src/main/resources/assets/hbm/models/machines/cyclotron.obj @@ -1,2842 +1,5219 @@ -# Blender v2.79 (sub 0) OBJ File: 'cyclotron.blend' +# Blender 4.0.2 # www.blender.org -o B4 -v -2.375000 2.000000 -0.375000 -v -2.375000 1.000000 -0.375000 -v -2.375000 2.000000 0.375000 -v -2.375000 1.000000 0.375000 -v -2.125000 2.000000 -0.375000 -v -2.125000 1.000000 -0.375000 -v -2.125000 2.000000 0.375000 -v -2.125000 1.000000 0.375000 -vt 0.800000 0.833333 -vt 0.200000 0.166667 -vt 0.800000 0.166667 -vt 1.000000 0.833333 -vt 0.200000 0.833333 -vt 0.000000 0.166667 -vt 0.800000 0.000000 -vt 0.200000 1.000000 -vt 1.000000 0.166667 -vt 0.000000 0.833333 -vt 0.200000 0.000000 -vt 0.800000 1.000000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -s off -f 3/1/1 2/2/1 4/3/1 -f 4/3/2 7/4/2 3/1/2 -f 1/5/3 6/6/3 2/2/3 -f 2/2/4 8/7/4 4/3/4 -f 3/1/5 5/8/5 1/5/5 -f 3/1/1 1/5/1 2/2/1 -f 4/3/2 8/9/2 7/4/2 -f 1/5/3 5/10/3 6/6/3 -f 2/2/4 6/11/4 8/7/4 -f 3/1/5 7/12/5 5/8/5 -o B2 -v 0.375000 2.000000 -2.375000 -v 0.375000 1.000000 -2.375000 -v -0.375000 2.000000 -2.375000 -v -0.375000 1.000000 -2.375000 -v 0.375000 2.000000 -2.125000 -v 0.375000 1.000000 -2.125000 -v -0.375000 2.000000 -2.125000 -v -0.375000 1.000000 -2.125000 -vt 0.800000 0.833333 -vt 0.200000 0.166667 -vt 0.800000 0.166667 -vt 1.000000 0.833333 -vt 0.200000 0.833333 -vt 0.000000 0.166667 -vt 0.800000 0.000000 -vt 0.200000 1.000000 -vt 1.000000 0.166667 -vt 0.000000 0.833333 -vt 0.200000 0.000000 -vt 0.800000 1.000000 -vn 0.0000 0.0000 -1.0000 -vn -1.0000 0.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -s off -f 11/13/6 10/14/6 12/15/6 -f 12/15/7 15/16/7 11/13/7 -f 9/17/8 14/18/8 10/14/8 -f 10/14/9 16/19/9 12/15/9 -f 11/13/10 13/20/10 9/17/10 -f 11/13/6 9/17/6 10/14/6 -f 12/15/7 16/21/7 15/16/7 -f 9/17/8 13/22/8 14/18/8 -f 10/14/9 14/23/9 16/19/9 -f 11/13/10 15/24/10 13/20/10 -o B3 -v 2.375000 2.000000 0.375000 -v 2.375000 1.000000 0.375000 -v 2.375000 2.000000 -0.375000 -v 2.375000 1.000000 -0.375000 -v 2.125000 2.000000 0.375000 -v 2.125000 1.000000 0.375000 -v 2.125000 2.000000 -0.375000 -v 2.125000 1.000000 -0.375000 -vt 0.799940 0.833266 -vt 0.200060 0.166733 -vt 0.799940 0.166733 -vt 0.999900 0.833266 -vt 0.200060 0.833267 -vt 0.000100 0.166733 -vt 0.799940 0.000100 -vt 0.799940 0.999900 -vt 0.200060 0.999900 -vt 0.999900 0.166733 -vt 0.000100 0.833267 -vt 0.200060 0.000100 -vn 1.0000 0.0000 0.0000 -vn -0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -s off -f 19/25/11 18/26/11 20/27/11 -f 20/27/12 23/28/12 19/25/12 -f 17/29/13 22/30/13 18/26/13 -f 18/26/14 24/31/14 20/27/14 -f 17/29/15 23/32/15 21/33/15 -f 19/25/11 17/29/11 18/26/11 -f 20/27/12 24/34/12 23/28/12 -f 17/29/13 21/35/13 22/30/13 -f 18/26/14 22/36/14 24/31/14 -f 17/29/15 19/25/15 23/32/15 -o B1 -v -0.375000 2.000000 2.375000 -v -0.375000 1.000000 2.375000 -v 0.375000 2.000000 2.375000 -v 0.375000 1.000000 2.375000 -v -0.375000 2.000000 2.125000 -v -0.375000 1.000000 2.125000 -v 0.375000 2.000000 2.125000 -v 0.375000 1.000000 2.125000 -vt 0.800000 0.833333 -vt 0.200000 0.166667 -vt 0.800000 0.166667 -vt 1.000000 0.833333 -vt 0.200000 0.833333 -vt 0.000000 0.166667 -vt 0.200000 0.000000 -vt 0.800000 0.000000 -vt 0.200000 1.000000 -vt 1.000000 0.166667 -vt 0.000000 0.833333 -vt 0.800000 1.000000 -vn 0.0000 0.0000 1.0000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 -0.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 -0.0000 -s off -f 27/37/16 26/38/16 28/39/16 -f 28/39/17 31/40/17 27/37/17 -f 25/41/18 30/42/18 26/38/18 -f 28/39/19 30/43/19 32/44/19 -f 27/37/20 29/45/20 25/41/20 -f 27/37/16 25/41/16 26/38/16 -f 28/39/17 32/46/17 31/40/17 -f 25/41/18 29/47/18 30/42/18 -f 28/39/19 26/38/19 30/43/19 -f 27/37/20 31/48/20 29/45/20 +mtllib cyclotron.mtl o Body -v -2.500000 0.000000 2.500000 -v -2.500000 0.500000 2.500000 -v -2.500000 0.000000 -2.500000 -v -2.500000 0.500000 -2.500000 -v 2.500000 0.000000 2.500000 -v 2.500000 0.500000 2.500000 -v 2.500000 0.000000 -2.500000 -v 2.500000 0.500000 -2.500000 -v -0.000000 2.500000 -2.500000 -v -0.000000 3.000000 -2.500000 -v 0.956708 2.500000 -2.309699 -v 0.956708 3.000000 -2.309699 -v 1.767767 2.500000 -1.767767 -v 1.767767 3.000000 -1.767767 -v 2.309699 2.500000 -0.956709 -v 2.309699 3.000000 -0.956709 -v 2.500000 2.500000 0.000000 -v 2.500000 3.000000 0.000000 -v 2.309699 2.500000 0.956709 -v 2.309699 3.000000 0.956709 -v 1.767767 2.500000 1.767767 -v 1.767767 3.000000 1.767767 -v 0.956708 2.500000 2.309699 -v 0.956708 3.000000 2.309699 -v 0.000000 2.500000 2.500000 -v 0.000000 3.000000 2.500000 -v -0.956708 2.500000 2.309699 -v -0.956708 3.000000 2.309699 -v -1.767767 2.500000 1.767768 -v -1.767767 3.000000 1.767768 -v -2.309699 2.500000 0.956709 -v -2.309699 3.000000 0.956709 -v -2.500000 2.500000 -0.000000 -v -2.500000 3.000000 -0.000000 -v -2.309699 2.500000 -0.956709 -v -2.309699 3.000000 -0.956709 -v -1.767766 2.500000 -1.767768 -v -1.767766 3.000000 -1.767768 -v -0.956708 2.500000 -2.309699 -v -0.956708 3.000000 -2.309699 -v -0.000000 2.500000 -2.250000 -v 0.861038 2.500000 -2.078729 -v 1.590990 2.500000 -1.590990 -v 2.078729 2.500000 -0.861038 -v 2.250000 2.500000 0.000000 -v 2.078729 2.500000 0.861038 -v 1.590990 2.500000 1.590990 -v 0.861038 2.500000 2.078729 -v 0.000000 2.500000 2.250000 -v -0.861037 2.500000 2.078729 -v -1.590990 2.500000 1.590991 -v -2.078729 2.500000 0.861038 -v -2.250000 2.500000 -0.000000 -v -2.078729 2.500000 -0.861038 -v -1.590990 2.500000 -1.590991 -v -0.861037 2.500000 -2.078729 -v 0.765367 3.000000 -1.847759 -v -0.000000 3.000000 -2.000000 -v 1.414213 3.000000 -1.414214 -v 1.847759 3.000000 -0.765367 -v 2.000000 3.000000 0.000000 -v 1.847759 3.000000 0.765367 -v 1.414213 3.000000 1.414213 -v 0.765367 3.000000 1.847759 -v 0.000000 3.000000 2.000000 -v -0.765367 3.000000 1.847759 -v -1.414213 3.000000 1.414214 -v -1.847759 3.000000 0.765367 -v -2.000000 3.000000 -0.000000 -v -1.847759 3.000000 -0.765367 -v -1.414213 3.000000 -1.414214 -v -0.765366 3.000000 -1.847759 -v 0.765367 2.750000 -1.847759 -v -0.000000 2.750000 -2.000000 -v 1.414213 2.750000 -1.414214 -v 1.847759 2.750000 -0.765367 -v 2.000000 2.750000 0.000000 -v 1.847759 2.750000 0.765367 -v 1.414213 2.750000 1.414213 -v 0.765367 2.750000 1.847759 -v 0.000000 2.750000 2.000000 -v -0.765367 2.750000 1.847759 -v -1.414213 2.750000 1.414214 -v -1.847759 2.750000 0.765367 -v -2.000000 2.750000 -0.000000 -v -1.847759 2.750000 -0.765367 -v -1.414213 2.750000 -1.414214 -v -0.765366 2.750000 -1.847759 -v -0.000000 3.750000 -0.250000 -v 0.176777 3.750000 -0.176777 -v 0.000000 2.750000 -0.500000 -v 0.000000 3.500000 -0.500000 -v 0.353553 2.750000 -0.353553 -v 0.353553 3.500000 -0.353553 -v 0.500000 2.750000 0.000000 -v 0.500000 3.500000 0.000000 -v 0.353553 2.750000 0.353553 -v 0.353553 3.500000 0.353553 -v -0.000000 2.750000 0.500000 -v -0.000000 3.500000 0.500000 -v -0.353553 2.750000 0.353553 -v -0.353553 3.500000 0.353553 -v -0.500000 2.750000 -0.000000 -v -0.500000 3.500000 -0.000000 -v -0.353553 2.750000 -0.353553 -v -0.353553 3.500000 -0.353553 -v 0.250000 3.750000 0.000000 -v 0.176777 3.750000 0.176777 -v -0.000000 3.750000 0.250000 -v -0.176777 3.750000 0.176777 -v -0.250000 3.750000 -0.000000 -v -0.176777 3.750000 -0.176777 -v 1.545028 1.625000 1.721805 -v 1.589740 1.625000 1.704017 -v 1.499066 0.500000 1.675843 -v 1.499066 1.500000 1.675843 -v 1.588490 0.500000 1.640267 -v 1.588490 1.500000 1.640267 -v 1.679379 0.500000 1.679379 -v 1.679379 1.500000 1.679379 -v 1.718490 0.500000 1.770267 -v 1.718490 1.500000 1.770267 -v 1.682914 0.500000 1.859691 -v 1.682914 1.500000 1.859691 -v 1.593490 0.500000 1.895267 -v 1.593490 1.500000 1.895267 -v 1.502602 0.500000 1.856155 -v 1.502602 1.500000 1.856155 -v 1.463490 0.500000 1.765267 -v 1.463490 1.500000 1.765267 -v 1.635185 1.625000 1.723573 -v 1.654740 1.625000 1.769017 -v 1.636952 1.625000 1.813729 -v 1.592240 1.625000 1.831517 -v 1.546796 1.625000 1.811961 -v 1.527241 1.625000 1.766517 -v 1.721805 1.625000 1.545028 -v 1.766517 1.625000 1.527240 -v 1.675843 0.500000 1.499066 -v 1.675843 1.500000 1.499066 -v 1.765267 0.500000 1.463490 -v 1.765267 1.500000 1.463490 -v 1.856155 0.500000 1.502602 -v 1.856155 1.500000 1.502602 -v 1.895267 0.500000 1.593490 -v 1.895267 1.500000 1.593490 -v 1.859691 0.500000 1.682914 -v 1.859691 1.500000 1.682914 -v 1.770267 0.500000 1.718490 -v 1.770267 1.500000 1.718490 -v 1.679379 0.500000 1.679379 -v 1.679379 1.500000 1.679379 -v 1.640267 0.500000 1.588490 -v 1.640267 1.500000 1.588490 -v 1.811961 1.625000 1.546796 -v 1.831517 1.625000 1.592240 -v 1.813729 1.625000 1.636952 -v 1.769017 1.625000 1.654740 -v 1.723573 1.625000 1.635184 -v 1.704017 1.625000 1.589740 -v 1.477544 1.734375 1.616048 -v 1.477544 1.765625 1.616048 -v 1.616047 1.765625 1.477545 -v 1.458407 1.718750 1.635185 -v 1.458407 1.781250 1.635185 -v 1.439270 1.765625 1.654321 -v 1.439270 1.734375 1.654321 -v 1.616047 1.734375 1.477545 -v 1.635184 1.718750 1.458408 -v 1.654321 1.734375 1.439271 -v 1.654321 1.765625 1.439271 -v 1.635184 1.781250 1.458408 -v 1.582902 1.625000 1.797952 -v 1.560805 1.625000 1.775855 -v 1.568893 1.625000 1.745670 -v 1.599078 1.625000 1.737582 -v 1.621175 1.625000 1.759679 -v 1.613087 1.625000 1.789864 -v 1.569580 1.695312 1.784631 -v 1.550443 1.679688 1.765494 -v 1.560011 1.671875 1.736789 -v 1.588717 1.679688 1.727221 -v 1.607853 1.695312 1.746357 -v 1.598285 1.703125 1.775062 -v 1.679378 1.781250 1.502602 -v 1.698515 1.765625 1.483466 -v 1.698515 1.734375 1.483466 -v 1.679378 1.718750 1.502602 -v 1.660242 1.734375 1.521739 -v 1.660242 1.765625 1.521739 -v 1.734621 1.760317 1.557845 -v 1.748233 1.746785 1.533184 -v 1.737185 1.719722 1.522135 -v 1.712524 1.706190 1.535748 -v 1.698911 1.719722 1.560409 -v 1.709960 1.746785 1.571457 -v 1.775061 1.703125 1.598285 -v 1.784630 1.695312 1.569581 -v 1.765493 1.679688 1.550444 -v 1.736788 1.671875 1.560012 -v 1.727220 1.679688 1.588717 -v 1.746356 1.695312 1.607854 -v 1.789864 1.625000 1.613088 -v 1.797952 1.625000 1.582902 -v 1.775855 1.625000 1.560805 -v 1.745669 1.625000 1.568894 -v 1.737581 1.625000 1.599079 -v 1.759678 1.625000 1.621176 -v 1.533183 1.746785 1.748234 -v 1.522135 1.719722 1.737185 -v 1.535747 1.706190 1.712525 -v 1.560408 1.719722 1.698912 -v 1.571457 1.746785 1.709961 -v 1.557844 1.760317 1.734622 -v 1.483465 1.765625 1.698516 -v 1.483465 1.734375 1.698516 -v 1.502602 1.718750 1.679379 -v 1.521738 1.734375 1.660242 -v 1.521738 1.765625 1.660242 -v 1.502602 1.781250 1.679379 -v -1.944544 1.500000 1.414214 -v -1.944544 0.500000 1.414214 -v -1.414214 1.500000 1.944544 -v -1.414214 0.500000 1.944544 -v -1.767767 1.750000 1.237437 -v -1.767767 0.500000 1.237437 -v -1.237437 1.750000 1.767767 -v -1.237437 0.500000 1.767767 -v -0.861037 2.500000 -2.078729 -v -1.590990 2.500000 -1.590991 -v -2.078729 2.500000 -0.861038 -v -2.250000 2.500000 -0.000000 -v -2.078729 2.500000 0.861038 -v -1.590990 2.500000 1.590991 -v -0.861037 2.500000 2.078729 -v 0.000000 2.500000 2.250000 -v 0.861038 2.500000 2.078729 -v 1.590990 2.500000 1.590990 -v 2.078729 2.500000 0.861038 -v 2.250000 2.500000 0.000000 -v 2.078729 2.500000 -0.861038 -v 1.590990 2.500000 -1.590990 -v 0.861038 2.500000 -2.078729 -v -0.000000 2.500000 -2.250000 -v -0.176777 3.750000 -0.176777 -v -0.250000 3.750000 -0.000000 -v -0.176777 3.750000 0.176777 -v -0.000000 3.750000 0.250000 -v 0.176777 3.750000 0.176777 -v 0.250000 3.750000 0.000000 -v -0.353553 3.500000 -0.353553 -v -0.500000 3.500000 -0.000000 -v -0.353553 3.500000 0.353553 -v -0.000000 3.500000 0.500000 -v 0.353553 3.500000 0.353553 -v 0.500000 3.500000 0.000000 -v 0.353553 3.500000 -0.353553 -v 0.000000 3.500000 -0.500000 -v 0.176777 3.750000 -0.176777 -v -0.000000 3.750000 -0.250000 -v 0.499999 3.750000 -0.625000 -v 0.588388 3.750000 -0.588388 -v 0.624999 3.750000 -0.500000 -v 0.588388 3.750000 -0.411612 -v 0.499999 3.750000 -0.375000 -v 0.411611 3.750000 -0.411612 -v 0.374999 3.750000 -0.500000 -v 0.411611 3.750000 -0.588388 -v -0.500001 3.750000 -0.625000 -v -0.411612 3.750000 -0.588388 -v -0.375001 3.750000 -0.500000 -v -0.411612 3.750000 -0.411612 -v -0.500001 3.750000 -0.375000 -v -0.588389 3.750000 -0.411612 -v -0.625001 3.750000 -0.500000 -v -0.588389 3.750000 -0.588388 -v 0.499999 3.750000 0.375000 -v 0.588388 3.750000 0.411612 -v 0.624999 3.750000 0.500000 -v 0.588388 3.750000 0.588388 -v 0.499999 3.750000 0.625000 -v 0.411611 3.750000 0.588388 -v 0.374999 3.750000 0.500000 -v 0.411611 3.750000 0.411612 -v -0.500001 3.750000 0.375000 -v -0.411612 3.750000 0.411612 -v -0.375001 3.750000 0.500000 -v -0.411612 3.750000 0.588388 -v -0.500001 3.750000 0.625000 -v -0.588389 3.750000 0.588388 -v -0.625001 3.750000 0.500000 -v -0.588389 3.750000 0.411612 -v 0.499999 3.250000 -0.375000 -v 0.374999 3.250000 -0.500000 -v -0.375001 3.250000 -0.500000 -v -0.500001 3.250000 -0.375000 -v 0.499999 3.250000 0.375000 -v 0.374999 3.250000 0.500000 -v -0.500001 3.250000 0.375000 -v -0.375001 3.250000 0.500000 -v 0.499999 3.500000 -0.375000 -v 0.374999 3.500000 -0.500000 -v -0.375001 3.500000 -0.500000 -v -0.500001 3.500000 -0.375000 -v 0.499999 3.500000 0.375000 -v 0.374999 3.500000 0.500000 -v -0.500001 3.500000 0.375000 -v -0.375001 3.500000 0.500000 -v 2.500000 0.500000 -1.500000 -v 2.500000 0.500000 -0.500000 -v 2.500000 0.500000 0.500000 -v 2.500000 0.500000 1.500000 -v -2.500000 0.500000 1.500000 -v -2.500000 0.500000 0.500000 -v -2.500000 0.500000 -0.500000 -v -2.500000 0.500000 -1.500000 -v -1.500000 0.500000 -2.500000 -v -0.500000 0.500000 -2.500000 -v 0.500000 0.500000 -2.500000 -v 1.500000 0.500000 -2.500000 -v 1.500000 0.500000 2.500000 -v 0.500000 0.500000 2.500000 -v -0.500000 0.500000 2.500000 -v -1.500000 0.500000 2.500000 -v 2.500000 0.750000 -1.500000 -v 2.500000 0.750000 -0.500000 -v 2.500000 0.750000 0.500000 -v 2.500000 0.750000 1.500000 -v -2.500000 0.750000 1.500000 -v -2.500000 0.750000 0.500000 -v -2.500000 0.750000 -0.500000 -v -2.500000 0.750000 -1.500000 -v -1.500000 0.750000 -2.500000 -v -0.500000 0.750000 -2.500000 -v 0.500000 0.750000 -2.500000 -v 1.500000 0.750000 -2.500000 -v 1.500000 0.750000 2.500000 -v 0.500000 0.750000 2.500000 -v -0.500000 0.750000 2.500000 -v -1.500000 0.750000 2.500000 -v 2.500000 1.000000 -1.250000 -v 2.500000 1.000000 -0.750000 -v 2.500000 1.000000 0.750000 -v 2.500000 1.000000 1.250000 -v -2.500000 1.000000 1.250000 -v -2.500000 1.000000 0.750000 -v -2.500000 1.000000 -0.750000 -v -2.500000 1.000000 -1.250000 -v -1.250000 1.000000 -2.500000 -v -0.750000 1.000000 -2.500000 -v 0.750000 1.000000 -2.500000 -v 1.250000 1.000000 -2.500000 -v 1.250000 1.000000 2.500000 -v 0.750000 1.000000 2.500000 -v -0.750000 1.000000 2.500000 -v -1.250000 1.000000 2.500000 -v -1.500000 0.500000 -2.250000 -v -0.500000 0.500000 -2.250000 -v 0.500000 0.500000 -2.250000 -v 1.500000 0.500000 -2.250000 -v -1.250000 0.750000 -2.250000 -v -0.750000 0.750000 -2.250000 -v 0.750000 0.750000 -2.250000 -v 1.250000 0.750000 -2.250000 -v -1.500000 0.500000 2.250000 -v -0.500000 0.500000 2.250000 -v 0.500000 0.500000 2.250000 -v 1.500000 0.500000 2.250000 -v -1.250000 0.750000 2.250000 -v -0.750000 0.750000 2.250000 -v 0.750000 0.750000 2.250000 -v 1.250000 0.750000 2.250000 -v -2.250000 0.500000 1.500000 -v -2.250000 0.500000 0.500000 -v -2.250000 0.500000 -0.500000 -v -2.250000 0.500000 -1.500000 -v -2.250000 0.750000 1.250000 -v -2.250000 0.750000 0.750000 -v -2.250000 0.750000 -0.750000 -v -2.250000 0.750000 -1.250000 -v 2.250000 0.500000 1.500000 -v 2.250000 0.500000 0.500000 -v 2.250000 0.500000 -0.500000 -v 2.250000 0.500000 -1.500000 +v -1.590990 1.000000 -1.590990 +v -1.590990 2.250000 -1.590990 +v -2.078729 1.000000 -0.861038 +v -2.078729 2.250000 -0.861038 +v -2.250000 1.000000 0.000000 +v -2.250000 2.250000 0.000000 +v -2.078729 1.000000 0.861038 +v -2.078729 2.250000 0.861038 +v -1.590990 1.000000 1.590990 +v -1.590990 2.250000 1.590990 +v -0.861038 1.000000 2.078729 +v -0.861038 2.250000 2.078729 +v 0.000000 1.000000 2.250000 +v 0.000000 2.250000 2.250000 +v 0.861038 1.000000 2.078729 +v 0.861038 2.250000 2.078729 +v 1.590990 1.000000 1.590990 +v 1.590990 2.250000 1.590990 +v 2.078729 1.000000 0.861038 +v 2.078729 2.250000 0.861038 +v 2.250000 1.000000 0.000000 +v 2.250000 2.250000 0.000000 +v 2.078729 1.000000 -0.861038 +v 2.078729 2.250000 -0.861038 +v 1.590990 1.000000 -1.590990 +v 1.590990 2.250000 -1.590990 +v -0.861038 2.250000 -2.078729 +v -0.861038 1.000000 -2.078729 +v 0.861038 1.000000 -2.078729 +v 0.861038 2.250000 -2.078729 +v 0.000000 2.250000 -2.250000 +v 0.000000 1.000000 -2.250000 +v 0.000000 0.250000 -1.931378 +v 0.000000 0.562500 -2.250000 +v 0.000000 3.000000 -1.556378 +v 0.000000 2.687500 -2.250000 +v 0.739106 0.250000 -1.784360 +v 0.861038 0.562500 -2.078729 +v 0.595600 3.000000 -1.437906 +v 0.861038 2.687500 -2.078729 +v 1.365690 0.250000 -1.365690 +v 1.590990 0.562500 -1.590990 +v 1.100525 3.000000 -1.100525 +v 1.590990 2.687500 -1.590990 +v 1.784360 0.250000 -0.739106 +v 2.078729 0.562500 -0.861038 +v 1.437906 3.000000 -0.595600 +v 2.078729 2.687500 -0.861038 +v 1.931378 0.250000 0.000000 +v 2.250000 0.562500 0.000000 +v 1.556378 3.000000 0.000000 +v 2.250000 2.687500 0.000000 +v 1.784360 0.250000 0.739106 +v 2.078729 0.562500 0.861038 +v 1.437906 3.000000 0.595600 +v 2.078729 2.687500 0.861038 +v 1.365690 0.250000 1.365690 +v 1.590990 0.562500 1.590990 +v 1.100525 3.000000 1.100525 +v 1.590990 2.687500 1.590990 +v 0.739106 0.250000 1.784360 +v 0.861038 0.562500 2.078729 +v 0.595600 3.000000 1.437906 +v 0.861038 2.687500 2.078729 +v 0.000000 0.250000 1.931378 +v 0.000000 0.562500 2.250000 +v -0.000000 3.000000 1.556378 +v 0.000000 2.687500 2.250000 +v -0.739106 0.250000 1.784360 +v -0.861038 0.562500 2.078729 +v -0.595600 3.000000 1.437906 +v -0.861038 2.687500 2.078729 +v -1.365690 0.250000 1.365690 +v -1.590990 0.562500 1.590990 +v -1.100525 3.000000 1.100525 +v -1.590990 2.687500 1.590990 +v -1.784360 0.250000 0.739106 +v -2.078729 0.562500 0.861038 +v -1.437906 3.000000 0.595600 +v -2.078729 2.687500 0.861038 +v -1.931378 0.250000 0.000000 +v -2.250000 0.562500 0.000000 +v -1.556378 3.000000 -0.000000 +v -2.250000 2.687500 0.000000 +v -1.784360 0.250000 -0.739106 +v -2.078729 0.562500 -0.861038 +v -1.437906 3.000000 -0.595600 +v -2.078729 2.687500 -0.861038 +v -1.365690 0.250000 -1.365690 +v -1.590990 0.562500 -1.590990 +v -1.100525 3.000000 -1.100525 +v -1.590990 2.687500 -1.590990 +v -0.739106 0.250000 -1.784360 +v -0.861038 0.562500 -2.078729 +v -0.595600 3.000000 -1.437906 +v -0.861038 2.687500 -2.078729 +v -1.458408 2.062500 -1.458408 +v -1.458408 1.187500 -1.458408 +v -1.905502 2.062500 -0.789285 +v -1.905502 1.187500 -0.789285 +v -2.062500 2.062500 0.000000 +v -2.062500 1.187500 0.000000 +v -1.905502 2.062500 0.789285 +v -1.905502 1.187500 0.789285 +v -1.458408 2.062500 1.458408 +v -1.458408 1.187500 1.458408 +v -0.789285 2.062500 1.905502 +v -0.789285 1.187500 1.905502 +v 0.000000 2.062500 2.062500 +v 0.000000 1.187500 2.062500 +v 0.789285 2.062500 1.905502 +v 0.789285 1.187500 1.905502 +v 1.458408 2.062500 1.458408 +v 1.458408 1.187500 1.458408 +v 1.905502 2.062500 0.789285 +v 1.905502 1.187500 0.789285 +v 2.062500 2.062500 0.000000 +v 2.062500 1.187500 0.000000 +v 1.905502 2.062500 -0.789285 +v 1.905502 1.187500 -0.789285 +v 1.458408 2.062500 -1.458408 +v 1.458408 1.187500 -1.458408 +v -0.789285 1.187500 -1.905502 +v -0.789285 2.062500 -1.905502 +v 0.789285 2.062500 -1.905502 +v 0.789285 1.187500 -1.905502 +v 0.000000 1.187500 -2.062500 +v 0.000000 2.062500 -2.062500 +v 0.000000 3.000000 -1.931378 +v 0.739106 3.000000 -1.784360 +v 1.365690 3.000000 -1.365690 +v 1.784360 3.000000 -0.739106 +v 1.931378 3.000000 0.000000 +v 1.784360 3.000000 0.739106 +v 1.365690 3.000000 1.365690 +v 0.739106 3.000000 1.784360 +v 0.000000 3.000000 1.931378 +v -0.739106 3.000000 1.784360 +v -1.365690 3.000000 1.365690 +v -1.784360 3.000000 0.739106 +v -1.931378 3.000000 0.000000 +v -1.784360 3.000000 -0.739106 +v -1.365690 3.000000 -1.365690 +v -0.739106 3.000000 -1.784360 +v 0.000000 2.750000 -1.556378 +v 0.595600 2.750000 -1.437906 +v 1.100525 2.750000 -1.100525 +v 1.437906 2.750000 -0.595600 +v 1.556378 2.750000 0.000000 +v 1.437906 2.750000 0.595600 +v 1.100525 2.750000 1.100525 +v 0.595600 2.750000 1.437906 +v -0.000000 2.750000 1.556378 +v -0.595600 2.750000 1.437906 +v -1.100525 2.750000 1.100525 +v -1.437906 2.750000 0.595600 +v -1.556378 2.750000 -0.000000 +v -1.437906 2.750000 -0.595600 +v -1.100525 2.750000 -1.100525 +v -0.595600 2.750000 -1.437906 +v -0.000000 2.750000 0.000000 +v 0.015239 2.750000 -0.749845 +v 0.015239 3.000000 -0.749845 +v 0.388120 2.750000 -0.641765 +v 0.388120 3.000000 -0.641765 +v 0.657005 2.750000 -0.361725 +v 0.657005 3.000000 -0.361725 +v 0.749845 2.750000 0.015239 +v 0.749845 3.000000 0.015239 +v 0.641765 2.750000 0.388120 +v 0.641765 3.000000 0.388120 +v 0.361725 2.750000 0.657005 +v 0.361725 3.000000 0.657005 +v -0.015239 2.750000 0.749845 +v -0.015239 3.000000 0.749845 +v -0.388120 2.750000 0.641765 +v -0.388120 3.000000 0.641765 +v -0.657005 2.750000 0.361725 +v -0.657005 3.000000 0.361725 +v -0.749845 2.750000 -0.015239 +v -0.749845 3.000000 -0.015239 +v -0.641765 2.750000 -0.388120 +v -0.641765 3.000000 -0.388120 +v -0.361725 2.750000 -0.657005 +v -0.361725 3.000000 -0.657005 +v -0.789284 1.312500 1.905502 +v -0.394642 1.312500 1.984001 +v -1.458407 1.312500 1.458408 +v -0.861037 1.312500 2.078729 +v -0.430518 1.312500 2.164364 +v -0.861037 1.937500 2.078729 +v -1.590990 1.312500 1.590991 +v -1.590990 1.937500 1.590991 +v -2.078729 1.312500 0.861038 +v -2.078729 1.937500 0.861038 +v -1.905501 1.312500 0.789285 +v -2.164364 1.312500 0.430519 +v -1.984001 1.312500 0.394643 +v -2.164364 1.937500 0.430519 +v -1.984001 1.937500 0.394643 +v -1.905501 1.937500 0.789285 +v -1.458407 1.937500 1.458408 +v -0.789284 1.937500 1.905502 +v -0.394642 1.937500 1.984001 +v -0.430518 1.937500 2.164364 +v 1.905502 1.312500 0.789284 +v 1.984001 1.312500 0.394642 +v 1.458408 1.312500 1.458407 +v 2.078729 1.312500 0.861037 +v 2.164364 1.312500 0.430518 +v 2.078729 1.937500 0.861037 +v 1.590991 1.312500 1.590990 +v 1.590991 1.937500 1.590990 +v 0.861038 1.312500 2.078729 +v 0.861038 1.937500 2.078729 +v 0.789285 1.312500 1.905501 +v 0.430519 1.312500 2.164364 +v 0.394643 1.312500 1.984001 +v 0.430519 1.937500 2.164364 +v 0.394643 1.937500 1.984001 +v 0.789285 1.937500 1.905501 +v 1.458408 1.937500 1.458407 +v 1.905502 1.937500 0.789284 +v 1.984001 1.937500 0.394642 +v 2.164364 1.937500 0.430518 +v 0.789284 1.312500 -1.905502 +v 0.394642 1.312500 -1.984001 +v 1.458407 1.312500 -1.458408 +v 0.861037 1.312500 -2.078729 +v 0.430518 1.312500 -2.164365 +v 0.861037 1.937500 -2.078729 +v 1.590990 1.312500 -1.590991 +v 1.590990 1.937500 -1.590991 +v 2.078729 1.312500 -0.861039 +v 2.078729 1.937500 -0.861039 +v 1.905501 1.312500 -0.789285 +v 2.164364 1.312500 -0.430520 +v 1.984001 1.312500 -0.394643 +v 2.164364 1.937500 -0.430520 +v 1.984001 1.937500 -0.394643 +v 1.905501 1.937500 -0.789285 +v 1.458407 1.937500 -1.458408 +v 0.789284 1.937500 -1.905502 +v 0.394642 1.937500 -1.984001 +v 0.430518 1.937500 -2.164365 +v -1.905502 1.312500 -0.789284 +v -1.984001 1.312500 -0.394642 +v -1.458408 1.312500 -1.458407 +v -2.078729 1.312500 -0.861037 +v -2.164365 1.312500 -0.430518 +v -2.078729 1.937500 -0.861037 +v -1.590991 1.312500 -1.590989 +v -1.590991 1.937500 -1.590989 +v -0.861039 1.312500 -2.078729 +v -0.861039 1.937500 -2.078729 +v -0.789285 1.312500 -1.905501 +v -0.430520 1.312500 -2.164364 +v -0.394643 1.312500 -1.984001 +v -0.430520 1.937500 -2.164364 +v -0.394643 1.937500 -1.984001 +v -0.789285 1.937500 -1.905501 +v -1.458408 1.937500 -1.458407 +v -1.905502 1.937500 -0.789284 +v -1.984001 1.937500 -0.394642 +v -2.164365 1.937500 -0.430518 +v -1.500000 0.000000 2.500000 +v -2.500000 0.000000 1.500000 +v -2.095803 0.250000 1.332576 +v -1.332576 0.250000 2.095803 +v -2.500000 0.000000 -1.500000 +v -1.500000 0.000000 -2.500000 +v -1.332576 0.250000 -2.095803 +v -2.095803 0.250000 -1.332576 +v 2.500000 0.000000 1.500000 +v 1.500000 0.000000 2.500000 +v 1.332576 0.250000 2.095803 +v 2.095803 0.250000 1.332576 +v 1.500000 0.000000 -2.500000 +v 2.500000 0.000000 -1.500000 +v 2.095803 0.250000 -1.332576 +v 1.332576 0.250000 -2.095803 +v -1.500000 0.250000 2.500000 +v -2.500000 0.250000 1.500000 +v -2.500000 0.250000 -1.500000 +v -1.500000 0.250000 -2.500000 +v 1.500000 0.250000 -2.500000 +v 2.500000 0.250000 -1.500000 +v 2.500000 0.250000 1.500000 +v 1.500000 0.250000 2.500000 +v -1.332576 0.375000 1.970803 +v -1.970803 0.375000 1.332576 +v -1.970803 0.375000 -1.332576 +v -1.332576 0.375000 -1.970803 +v 1.332576 0.375000 -1.970803 +v 1.970803 0.375000 -1.332576 +v 1.970803 0.375000 1.332576 +v 1.332576 0.375000 1.970803 +v 0.516204 2.739277 -2.274769 +v 0.822699 2.739277 -2.213804 +v 0.440953 3.125000 -1.896458 +v 0.747449 3.125000 -1.835492 +v 0.335645 2.875000 -1.367036 +v 0.642140 2.875000 -1.306071 +v 0.798313 1.375000 -2.091206 +v 0.491818 1.375000 -2.152171 +v 0.491818 2.687500 -2.152171 +v 0.798313 2.687500 -2.091206 +v 0.430852 3.000000 -1.845676 +v 0.737347 3.000000 -1.784710 +v 0.360031 3.000000 -1.489634 +v 0.666526 3.000000 -1.428669 +v 0.360031 2.750000 -1.489634 +v 0.666526 2.750000 -1.428669 +v 0.335645 3.000000 -1.367036 +v 0.360031 3.125000 -1.489634 +v 0.666526 3.125000 -1.428669 +v 0.642140 3.000000 -1.306071 +v 0.822699 1.500000 -2.213804 +v 0.516204 1.500000 -2.274769 +v 0.188284 2.875000 -0.626201 +v 0.506906 2.875000 -0.626201 +v 0.188284 2.750000 -0.626201 +v 0.506906 2.750000 -0.626201 +v 0.188284 2.875000 -0.313701 +v 0.188284 2.750000 -0.313701 +v 0.506906 2.750000 -0.313701 +v 0.506906 2.875000 -0.313701 +v -0.516204 2.739277 2.274769 +v -0.822700 2.739277 2.213804 +v -0.440953 3.125000 1.896457 +v -0.747449 3.125000 1.835492 +v -0.335645 2.875000 1.367036 +v -0.642140 2.875000 1.306071 +v -0.798313 1.375000 2.091206 +v -0.491818 1.375000 2.152171 +v -0.491818 2.687500 2.152171 +v -0.798313 2.687500 2.091206 +v -0.430852 3.000000 1.845676 +v -0.737348 3.000000 1.784710 +v -0.360031 3.000000 1.489634 +v -0.666527 3.000000 1.428669 +v -0.360031 2.750000 1.489634 +v -0.666527 2.750000 1.428669 +v -0.335645 3.000000 1.367036 +v -0.360031 3.125000 1.489634 +v -0.666527 3.125000 1.428669 +v -0.642140 3.000000 1.306071 +v -0.822700 1.500000 2.213804 +v -0.516204 1.500000 2.274769 +v -0.188284 2.875000 0.626201 +v -0.506906 2.875000 0.626201 +v -0.188284 2.750000 0.626201 +v -0.506906 2.750000 0.626201 +v -0.188284 2.875000 0.313701 +v -0.188284 2.750000 0.313701 +v -0.506906 2.750000 0.313701 +v -0.506906 2.875000 0.313701 +v 2.274769 2.739277 0.516204 +v 2.213804 2.739277 0.822700 +v 1.896457 3.125000 0.440953 +v 1.835492 3.125000 0.747449 +v 1.367036 2.875000 0.335645 +v 1.306071 2.875000 0.642141 +v 2.091206 1.375000 0.798313 +v 2.152171 1.375000 0.491818 +v 2.152171 2.687500 0.491818 +v 2.091206 2.687500 0.798313 +v 1.845676 3.000000 0.430852 +v 1.784710 3.000000 0.737348 +v 1.489634 3.000000 0.360031 +v 1.428669 3.000000 0.666527 +v 1.489634 2.750000 0.360031 +v 1.428669 2.750000 0.666527 +v 1.367036 3.000000 0.335645 +v 1.489634 3.125000 0.360031 +v 1.428669 3.125000 0.666527 +v 1.306071 3.000000 0.642141 +v 2.213804 1.500000 0.822700 +v 2.274769 1.500000 0.516204 +v 0.626201 2.875000 0.188284 +v 0.626201 2.875000 0.506906 +v 0.626201 2.750000 0.188284 +v 0.626201 2.750000 0.506906 +v 0.313701 2.875000 0.188284 +v 0.313701 2.750000 0.188284 +v 0.313701 2.750000 0.506906 +v 0.313701 2.875000 0.506906 +v -2.274769 2.739277 -0.516205 +v -2.213804 2.739277 -0.822700 +v -1.896457 3.125000 -0.440954 +v -1.835492 3.125000 -0.747449 +v -1.367036 2.875000 -0.335645 +v -1.306070 2.875000 -0.642141 +v -2.091205 1.375000 -0.798314 +v -2.152171 1.375000 -0.491819 +v -2.152171 2.687500 -0.491819 +v -2.091205 2.687500 -0.798314 +v -1.845675 3.000000 -0.430853 +v -1.784710 3.000000 -0.737348 +v -1.489634 3.000000 -0.360032 +v -1.428668 3.000000 -0.666527 +v -1.489634 2.750000 -0.360032 +v -1.428668 2.750000 -0.666527 +v -1.367036 3.000000 -0.335645 +v -1.489634 3.125000 -0.360032 +v -1.428668 3.125000 -0.666527 +v -1.306070 3.000000 -0.642141 +v -2.213804 1.500000 -0.822700 +v -2.274769 1.500000 -0.516205 +v -0.626201 2.875000 -0.188284 +v -0.626201 2.875000 -0.506906 +v -0.626201 2.750000 -0.188284 +v -0.626201 2.750000 -0.506906 +v -0.313701 2.875000 -0.188284 +v -0.313701 2.750000 -0.188284 +v -0.313701 2.750000 -0.506906 +v -0.313701 2.875000 -0.506906 +v 2.500000 0.250000 1.250000 +v 2.500000 0.750000 1.250000 v 2.250000 0.750000 1.250000 +v 2.500000 0.250000 0.750000 +v 2.500000 0.750000 0.750000 v 2.250000 0.750000 0.750000 +v 1.500000 0.250000 1.250000 +v 1.500000 0.250000 0.750000 +v 2.500000 0.250000 0.250000 +v 2.500000 0.750000 0.250000 +v 2.250000 0.750000 0.250000 +v 2.500000 0.250000 -0.250000 +v 2.500000 0.750000 -0.250000 +v 2.250000 0.750000 -0.250000 +v 1.500000 0.250000 0.250000 +v 1.500000 0.250000 -0.250000 +v 2.500000 0.250000 -0.750000 +v 2.500000 0.750000 -0.750000 v 2.250000 0.750000 -0.750000 +v 2.500000 0.250000 -1.250000 +v 2.500000 0.750000 -1.250000 v 2.250000 0.750000 -1.250000 -v 1.944544 1.500000 -1.414214 -v 1.944544 0.500000 -1.414214 -v 1.414214 1.500000 -1.944544 -v 1.414214 0.500000 -1.944544 -v 1.767767 1.750000 -1.237437 -v 1.767767 0.500000 -1.237437 -v 1.237437 1.750000 -1.767767 -v 1.237437 0.500000 -1.767767 -v -1.545028 1.625000 -1.721805 -v -1.589740 1.625000 -1.704017 -v -1.499066 0.500000 -1.675843 -v -1.499066 1.500000 -1.675843 -v -1.588490 0.500000 -1.640267 -v -1.588490 1.500000 -1.640267 -v -1.679379 0.500000 -1.679378 -v -1.679379 1.500000 -1.679378 -v -1.718490 0.500000 -1.770267 -v -1.718490 1.500000 -1.770267 -v -1.682914 0.500000 -1.859691 -v -1.682914 1.500000 -1.859691 -v -1.593490 0.500000 -1.895267 -v -1.593490 1.500000 -1.895267 -v -1.502602 0.500000 -1.856155 -v -1.502602 1.500000 -1.856155 -v -1.463490 0.500000 -1.765267 -v -1.463490 1.500000 -1.765267 -v -1.635185 1.625000 -1.723573 -v -1.654740 1.625000 -1.769017 -v -1.636952 1.625000 -1.813729 -v -1.592240 1.625000 -1.831517 -v -1.546796 1.625000 -1.811961 -v -1.527241 1.625000 -1.766517 -v -1.721805 1.625000 -1.545028 -v -1.766517 1.625000 -1.527240 -v -1.675843 0.500000 -1.499066 -v -1.675843 1.500000 -1.499066 -v -1.765267 0.500000 -1.463490 -v -1.765267 1.500000 -1.463490 -v -1.856155 0.500000 -1.502602 -v -1.856155 1.500000 -1.502602 -v -1.895267 0.500000 -1.593490 -v -1.895267 1.500000 -1.593490 -v -1.859691 0.500000 -1.682914 -v -1.859691 1.500000 -1.682914 -v -1.770267 0.500000 -1.718490 -v -1.770267 1.500000 -1.718490 -v -1.679379 0.500000 -1.679378 -v -1.679379 1.500000 -1.679378 -v -1.640267 0.500000 -1.588490 -v -1.640267 1.500000 -1.588490 -v -1.811961 1.625000 -1.546796 -v -1.831517 1.625000 -1.592240 -v -1.813729 1.625000 -1.636952 -v -1.769017 1.625000 -1.654740 -v -1.723573 1.625000 -1.635184 -v -1.704017 1.625000 -1.589740 -v -1.477544 1.734375 -1.616048 -v -1.477544 1.765625 -1.616048 -v -1.616047 1.765625 -1.477545 -v -1.458407 1.718750 -1.635185 -v -1.458407 1.781250 -1.635185 -v -1.439270 1.765625 -1.654321 -v -1.439270 1.734375 -1.654321 -v -1.616047 1.734375 -1.477545 -v -1.635184 1.718750 -1.458408 -v -1.654321 1.734375 -1.439271 -v -1.654321 1.765625 -1.439271 -v -1.635184 1.781250 -1.458408 -v -1.582902 1.625000 -1.797952 -v -1.560805 1.625000 -1.775855 -v -1.568893 1.625000 -1.745670 -v -1.599078 1.625000 -1.737582 -v -1.621175 1.625000 -1.759679 -v -1.613087 1.625000 -1.789864 -v -1.569580 1.695312 -1.784631 -v -1.550443 1.679688 -1.765494 -v -1.560011 1.671875 -1.736789 -v -1.588717 1.679688 -1.727221 -v -1.607853 1.695312 -1.746357 -v -1.598285 1.703125 -1.775062 -v -1.679378 1.781250 -1.502602 -v -1.698515 1.765625 -1.483465 -v -1.698515 1.734375 -1.483465 -v -1.679378 1.718750 -1.502602 -v -1.660242 1.734375 -1.521739 -v -1.660242 1.765625 -1.521739 -v -1.734621 1.760317 -1.557845 -v -1.748233 1.746785 -1.533184 -v -1.737185 1.719722 -1.522135 -v -1.712524 1.706190 -1.535748 -v -1.698911 1.719722 -1.560409 -v -1.709960 1.746785 -1.571457 -v -1.775061 1.703125 -1.598285 -v -1.784630 1.695312 -1.569581 -v -1.765493 1.679688 -1.550444 -v -1.736788 1.671875 -1.560012 -v -1.727220 1.679688 -1.588717 -v -1.746356 1.695312 -1.607854 -v -1.789864 1.625000 -1.613088 -v -1.797952 1.625000 -1.582902 -v -1.775855 1.625000 -1.560805 -v -1.745669 1.625000 -1.568893 -v -1.737581 1.625000 -1.599079 -v -1.759678 1.625000 -1.621176 -v -1.533183 1.746785 -1.748234 -v -1.522135 1.719722 -1.737185 -v -1.535747 1.706190 -1.712524 -v -1.560408 1.719722 -1.698912 -v -1.571457 1.746785 -1.709961 -v -1.557844 1.760317 -1.734621 -v -1.483465 1.765625 -1.698515 -v -1.483465 1.734375 -1.698515 -v -1.502602 1.718750 -1.679379 -v -1.521738 1.734375 -1.660242 -v -1.521738 1.765625 -1.660242 -v -1.502602 1.781250 -1.679379 -v -0.000000 2.500000 -2.500000 -v -0.000000 3.000000 -2.500000 -v 0.956708 2.500000 -2.309699 -v 0.956708 3.000000 -2.309699 -v 1.767767 2.500000 -1.767767 -v 1.767767 3.000000 -1.767767 -v 2.309699 2.500000 -0.956709 -v 2.309699 3.000000 -0.956709 -v 2.500000 2.500000 0.000000 -v 2.500000 3.000000 0.000000 -v 2.309699 2.500000 0.956709 -v 2.309699 3.000000 0.956709 -v 1.767767 2.500000 1.767767 -v 1.767767 3.000000 1.767767 -v 0.956708 2.500000 2.309699 -v 0.956708 3.000000 2.309699 -v 0.000000 2.500000 2.500000 -v 0.000000 3.000000 2.500000 -v -0.956708 2.500000 2.309699 -v -0.956708 3.000000 2.309699 -v -1.767767 2.500000 1.767768 -v -1.767767 3.000000 1.767768 -v -2.309699 2.500000 0.956709 -v -2.309699 3.000000 0.956709 -v -2.500000 2.500000 -0.000000 -v -2.500000 3.000000 -0.000000 -v -2.309699 2.500000 -0.956709 -v -2.309699 3.000000 -0.956709 -v -1.767766 2.500000 -1.767768 -v -1.767766 3.000000 -1.767768 -v -0.956708 2.500000 -2.309699 -v -0.956708 3.000000 -2.309699 -v 0.765367 3.000000 -1.847759 -v -0.000000 3.000000 -2.000000 -v 1.414213 3.000000 -1.414214 -v 1.847759 3.000000 -0.765367 -v 2.000000 3.000000 0.000000 -v 1.847759 3.000000 0.765367 -v 1.414213 3.000000 1.414213 -v 0.765367 3.000000 1.847759 -v 0.000000 3.000000 2.000000 -v -0.765367 3.000000 1.847759 -v -1.414213 3.000000 1.414214 -v -1.847759 3.000000 0.765367 -v -2.000000 3.000000 -0.000000 -v -1.847759 3.000000 -0.765367 -v -1.414213 3.000000 -1.414214 -v -0.765366 3.000000 -1.847759 -v 0.765367 2.750000 -1.847759 -v -0.000000 2.750000 -2.000000 -v 1.414213 2.750000 -1.414214 -v 1.847759 2.750000 -0.765367 -v 2.000000 2.750000 0.000000 -v 1.847759 2.750000 0.765367 -v 1.414213 2.750000 1.414213 -v 0.765367 2.750000 1.847759 -v 0.000000 2.750000 2.000000 -v -0.765367 2.750000 1.847759 -v -1.414213 2.750000 1.414214 -v -1.847759 2.750000 0.765367 -v -2.000000 2.750000 -0.000000 -v -1.847759 2.750000 -0.765367 -v -1.414213 2.750000 -1.414214 -v -0.765366 2.750000 -1.847759 -v 0.500000 2.750000 -0.625000 -v 0.588388 2.750000 -0.588388 -v 0.625000 2.750000 -0.500000 -v 0.588388 2.750000 -0.411612 -v 0.500000 2.750000 -0.375000 -v 0.411612 2.750000 -0.411612 -v 0.375000 2.750000 -0.500000 -v 0.411612 2.750000 -0.588388 -v -0.500000 2.750000 -0.625000 -v -0.411612 2.750000 -0.588388 -v -0.375000 2.750000 -0.500000 -v -0.411612 2.750000 -0.411612 -v -0.500000 2.750000 -0.375000 -v -0.588388 2.750000 -0.411612 -v -0.625000 2.750000 -0.500000 -v -0.588388 2.750000 -0.588388 -v 0.500000 2.750000 0.375000 -v 0.588388 2.750000 0.411612 -v 0.625000 2.750000 0.500000 -v 0.588388 2.750000 0.588388 -v 0.500000 2.750000 0.625000 -v 0.411612 2.750000 0.588388 -v 0.375000 2.750000 0.500000 -v 0.411612 2.750000 0.411612 -v -0.500000 2.750000 0.375000 -v -0.411612 2.750000 0.411612 -v -0.375000 2.750000 0.500000 -v -0.411612 2.750000 0.588388 -v -0.500000 2.750000 0.625000 -v -0.588388 2.750000 0.588388 -v -0.625000 2.750000 0.500000 -v -0.588388 2.750000 0.411612 -v 0.499999 3.750000 -0.625000 -v 0.588388 3.750000 -0.588388 -v 0.624999 3.750000 -0.500000 -v 0.588388 3.750000 -0.411612 -v 0.499999 3.750000 -0.375000 -v 0.411611 3.750000 -0.411612 -v 0.374999 3.750000 -0.500000 -v 0.411611 3.750000 -0.588388 -v -0.500001 3.750000 -0.625000 -v -0.411612 3.750000 -0.588388 -v -0.375001 3.750000 -0.500000 -v -0.411612 3.750000 -0.411612 -v -0.500001 3.750000 -0.375000 -v -0.588389 3.750000 -0.411612 -v -0.625001 3.750000 -0.500000 -v -0.588389 3.750000 -0.588388 -v 0.499999 3.750000 0.375000 -v 0.588388 3.750000 0.411612 -v 0.624999 3.750000 0.500000 -v 0.588388 3.750000 0.588388 -v 0.499999 3.750000 0.625000 -v 0.411611 3.750000 0.588388 -v 0.374999 3.750000 0.500000 -v 0.411611 3.750000 0.411612 -v -0.500001 3.750000 0.375000 -v -0.411612 3.750000 0.411612 -v -0.375001 3.750000 0.500000 -v -0.411612 3.750000 0.588388 -v -0.500001 3.750000 0.625000 -v -0.588389 3.750000 0.588388 -v -0.625001 3.750000 0.500000 -v -0.588389 3.750000 0.411612 -v -0.000000 0.500000 -2.250000 -v 0.861038 0.500000 -2.078729 -v 1.590990 0.500000 -1.590990 -v 2.078729 0.500000 -0.861038 -v 2.250000 0.500000 0.000000 -v 2.078729 0.500000 0.861038 -v 1.590990 0.500000 1.590990 -v 0.861038 0.500000 2.078729 -v 0.000000 0.500000 2.250000 -v -0.861037 0.500000 2.078729 -v -1.590990 0.500000 1.590991 -v -2.078729 0.500000 0.861038 -v -2.250000 0.500000 -0.000000 -v -2.078729 0.500000 -0.861038 -v -1.590990 0.500000 -1.590991 -v -0.861037 0.500000 -2.078729 -v -1.545028 1.625000 -1.721805 -v -1.589740 1.625000 -1.704017 -v -1.499066 1.500000 -1.675843 -v -1.588490 1.500000 -1.640267 -v -1.679379 1.500000 -1.679378 -v -1.718490 1.500000 -1.770267 -v -1.682914 1.500000 -1.859691 -v -1.593490 1.500000 -1.895267 -v -1.502602 1.500000 -1.856155 -v -1.463490 1.500000 -1.765267 -v -1.635185 1.625000 -1.723573 -v -1.654740 1.625000 -1.769017 -v -1.636952 1.625000 -1.813729 -v -1.592240 1.625000 -1.831517 -v -1.546796 1.625000 -1.811961 -v -1.527241 1.625000 -1.766517 -v -1.721805 1.625000 -1.545028 -v -1.766517 1.625000 -1.527240 -v -1.675843 1.500000 -1.499066 -v -1.765267 1.500000 -1.463490 -v -1.856155 1.500000 -1.502602 -v -1.895267 1.500000 -1.593490 -v -1.859691 1.500000 -1.682914 -v -1.770267 1.500000 -1.718490 -v -1.679379 1.500000 -1.679378 -v -1.640267 1.500000 -1.588490 -v -1.811961 1.625000 -1.546796 -v -1.831517 1.625000 -1.592240 -v -1.813729 1.625000 -1.636952 -v -1.769017 1.625000 -1.654740 -v -1.723573 1.625000 -1.635184 -v -1.704017 1.625000 -1.589740 -v 1.545028 1.625000 1.721805 -v 1.589740 1.625000 1.704017 -v 1.499066 1.500000 1.675843 -v 1.588490 1.500000 1.640267 -v 1.679379 1.500000 1.679379 -v 1.718490 1.500000 1.770267 -v 1.682914 1.500000 1.859691 -v 1.593490 1.500000 1.895267 -v 1.502602 1.500000 1.856155 -v 1.463490 1.500000 1.765267 -v 1.635185 1.625000 1.723573 -v 1.654740 1.625000 1.769017 -v 1.636952 1.625000 1.813729 -v 1.592240 1.625000 1.831517 -v 1.546796 1.625000 1.811961 -v 1.527241 1.625000 1.766517 -v 1.721805 1.625000 1.545028 -v 1.766517 1.625000 1.527240 -v 1.675843 1.500000 1.499066 -v 1.765267 1.500000 1.463490 -v 1.856155 1.500000 1.502602 -v 1.895267 1.500000 1.593490 -v 1.859691 1.500000 1.682914 -v 1.770267 1.500000 1.718490 -v 1.679379 1.500000 1.679379 -v 1.640267 1.500000 1.588490 -v 1.811961 1.625000 1.546796 -v 1.831517 1.625000 1.592240 -v 1.813729 1.625000 1.636952 -v 1.769017 1.625000 1.654740 -v 1.723573 1.625000 1.635184 -v 1.704017 1.625000 1.589740 -vt 0.222222 0.523810 -vt 0.111111 0.523810 -vt 0.000000 0.476190 -vt 0.222222 0.523810 -vt 0.111111 0.523810 -vt 0.000000 0.476190 -vt 0.222222 0.523810 -vt 0.111111 0.523810 -vt -0.000000 0.476190 -vt 0.222222 0.523810 -vt 0.111111 0.523810 -vt 0.000000 0.476190 -vt 0.555556 -0.000000 -vt 0.000000 0.000000 -vt 0.666667 0.547619 -vt 0.569444 0.595238 -vt 0.555556 0.547619 -vt 0.555556 0.500000 -vt 0.659722 0.476190 -vt 0.666667 0.500000 -vt 0.666667 0.500000 -vt 0.562500 0.476190 -vt 0.659722 0.476190 -vt 0.666667 0.500000 -vt 0.562500 0.476190 -vt 0.659722 0.476190 -vt 0.555556 0.500000 -vt 0.659722 0.476190 -vt 0.666667 0.500000 -vt 0.666667 0.500000 -vt 0.562500 0.476190 -vt 0.659722 0.476190 -vt 0.555556 0.500000 -vt 0.659722 0.476190 -vt 0.666667 0.500000 -vt 0.555556 0.500000 -vt 0.659722 0.476190 -vt 0.666667 0.500000 -vt 0.555556 0.500000 -vt 0.659722 0.476190 -vt 0.666667 0.500000 -vt 0.666667 0.500000 -vt 0.562500 0.476190 -vt 0.659722 0.476190 -vt 0.555556 0.500000 -vt 0.659722 0.476190 -vt 0.666667 0.500000 -vt 0.555556 0.500000 -vt 0.659722 0.476190 -vt 0.666667 0.500000 -vt 0.555556 0.500000 -vt 0.659722 0.476190 -vt 0.666667 0.500000 -vt 0.666667 0.500000 -vt 0.562500 0.476190 -vt 0.659722 0.476190 -vt 0.666667 0.500000 -vt 0.562500 0.476190 -vt 0.659722 0.476190 -vt 0.555556 0.500000 -vt 0.659722 0.476190 -vt 0.666667 0.500000 -vt 0.666667 0.500000 -vt 0.562500 0.476190 -vt 0.659722 0.476190 -vt 0.555556 0.547619 -vt 0.652778 0.595238 -vt 0.569444 0.595238 -vt 0.666667 0.547619 -vt 0.569444 0.595238 -vt 0.555556 0.547619 -vt 0.666667 0.547619 -vt 0.569444 0.595238 -vt 0.555556 0.547619 -vt 0.666667 0.547619 -vt 0.569444 0.595238 -vt 0.555556 0.547619 -vt 0.666667 0.547619 -vt 0.569444 0.595238 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.652778 0.595238 -vt 0.569444 0.595238 -vt 0.666667 0.547619 -vt 0.569444 0.595238 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.652778 0.595238 -vt 0.569444 0.595238 -vt 0.666667 0.547619 -vt 0.569444 0.595238 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.652778 0.595238 -vt 0.569444 0.595238 -vt 0.666667 0.547619 -vt 0.569444 0.595238 -vt 0.555556 0.547619 -vt 0.666667 0.547619 -vt 0.569444 0.595238 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.652778 0.595238 -vt 0.569444 0.595238 -vt 0.555556 0.547619 -vt 0.652778 0.595238 -vt 0.569444 0.595238 -vt 0.555556 0.547619 -vt 0.652778 0.595238 -vt 0.569444 0.595238 -vt 0.777778 0.999975 -vt 0.555585 0.809523 -vt 0.777778 0.619073 -vt 0.958333 0.523810 -vt 0.944444 0.488095 -vt 0.986111 0.476190 -vt 0.708333 0.303571 -vt 0.694444 0.297619 -vt 0.708333 0.297619 -vt 0.750000 0.333333 -vt 0.666667 0.357143 -vt 0.666667 0.333333 -vt 0.819444 0.303571 -vt 0.805556 0.297619 -vt 0.819444 0.297619 -vt 0.750000 0.333333 -vt 0.666667 0.357143 -vt 0.666667 0.333333 -vt 0.750000 0.357143 -vt 0.666667 0.333333 -vt 0.750000 0.333333 -vt 0.750000 0.357143 -vt 0.666667 0.333333 -vt 0.750000 0.333333 -vt 0.666667 0.285714 -vt 0.583333 0.190476 -vt 0.666667 0.190476 -vt 0.694444 0.190476 -vt 0.694444 0.309524 -vt 0.583333 0.285714 -vt 0.555556 0.190476 -vt 0.583333 0.309524 -vt 0.576389 0.428571 -vt 0.583333 0.434524 -vt 0.583333 0.446429 -vt 0.555556 0.446429 -vt 0.562500 0.428571 -vt 0.583333 0.434524 -vt 0.576389 0.428571 -vt 0.583333 0.434524 -vt 0.583333 0.446429 -vt 0.555556 0.446429 -vt 0.562500 0.428571 -vt 0.583333 0.434524 -vt 0.777778 0.333333 -vt 0.888889 0.333333 -vt 0.861111 0.380952 -vt 0.777778 0.333333 -vt 0.888889 0.333333 -vt 0.861111 0.380952 -vt 0.777778 0.333333 -vt 0.888889 0.333333 -vt 0.861111 0.380952 -vt 0.777778 0.333333 -vt 0.888889 0.333333 -vt 0.861111 0.380952 -vt 0.777778 0.333333 -vt 0.888889 0.333333 -vt 0.861111 0.380952 -vt 0.777778 0.333333 -vt 0.888889 0.333333 -vt 0.861111 0.380952 -vt 0.777778 0.333333 -vt 0.888889 0.333333 -vt 0.861111 0.380952 -vt 0.777778 0.333333 -vt 0.888889 0.333333 -vt 0.861111 0.380952 -vt 0.805556 0.404762 -vt 0.777778 0.380952 -vt 0.805556 0.380952 -vt 0.861111 0.404762 -vt 0.888889 0.380952 -vt 0.888889 0.404762 -vt 0.805556 0.404762 -vt 0.777778 0.380952 -vt 0.805556 0.380952 -vt 0.861111 0.404762 -vt 0.888889 0.380952 -vt 0.888889 0.404762 -vt 0.805556 0.404762 -vt 0.777778 0.380952 -vt 0.805556 0.380952 -vt 0.861111 0.404762 -vt 0.888889 0.380952 -vt 0.888889 0.404762 -vt 0.805556 0.404762 -vt 0.777778 0.380952 -vt 0.805556 0.380952 -vt 0.861111 0.404762 -vt 0.888889 0.380952 -vt 0.888889 0.404762 -vt 0.861111 0.404762 -vt 0.888889 0.380952 -vt 0.888889 0.404762 -vt 0.805556 0.404762 -vt 0.805556 0.380952 -vt 0.777778 0.380952 -vt 0.805556 0.404762 -vt 0.777778 0.380952 -vt 0.805556 0.380952 -vt 0.861111 0.404762 -vt 0.888889 0.380952 -vt 0.888889 0.404762 -vt 0.805556 0.404762 -vt 0.777778 0.380952 -vt 0.805556 0.380952 -vt 0.861111 0.404762 -vt 0.888889 0.380952 -vt 0.888889 0.404762 -vt 0.805556 0.404762 -vt 0.777778 0.380952 -vt 0.805556 0.380952 -vt 0.861111 0.404762 -vt 0.888889 0.380952 -vt 0.888889 0.404762 -vt 0.888889 0.357143 -vt 0.916667 0.333333 -vt 0.777778 0.357143 -vt 0.750000 0.333333 -vt 0.777778 0.357143 -vt 0.750000 0.333333 -vt 0.888889 0.357143 -vt 0.916667 0.333333 -vt 0.777778 0.357143 -vt 0.750000 0.333333 -vt 0.888889 0.357143 -vt 0.916667 0.333333 -vt 0.777778 0.357143 -vt 0.750000 0.333333 -vt 0.777778 0.357143 -vt 0.750000 0.333333 -vt 0.888889 0.357143 -vt 0.916667 0.333333 -vt 0.888889 0.357143 -vt 0.916667 0.333333 -vt 0.777778 0.357143 -vt 0.750000 0.333333 -vt 0.777778 0.357143 -vt 0.750000 0.333333 -vt 0.888889 0.357143 -vt 0.916667 0.333333 -vt 0.888889 0.357143 -vt 0.916667 0.333333 -vt 0.777778 0.357143 -vt 0.750000 0.333333 -vt 0.888889 0.357143 -vt 0.916667 0.333333 -vt 0.222222 0.976190 -vt 0.333333 1.000000 -vt 0.222222 1.000000 -vt 0.000000 0.714286 -vt 0.027778 0.809524 -vt 0.000000 0.809524 -vt 0.333333 0.547619 -vt 0.333333 0.523810 -vt 0.555556 0.809524 -vt 0.527778 0.714286 -vt 0.555556 0.714286 -vt 0.527778 0.904762 -vt 0.555556 0.904762 -vt 0.555556 1.000000 -vt 0.111111 0.976190 -vt 0.111111 1.000000 -vt 0.000000 1.000000 -vt 0.027778 0.619048 -vt 0.000000 0.619048 -vt 0.000000 0.523810 -vt 0.444444 0.547619 -vt 0.444444 0.523810 -vt 0.555556 0.523810 -vt 0.888889 0.428571 -vt 0.777778 0.428571 -vt 0.777778 0.428571 -vt 0.888889 0.428571 -vt 0.888889 0.428571 -vt 0.777778 0.428571 -vt 0.888889 0.428571 -vt 0.777778 0.428571 -vt 0.527778 0.809524 -vt 0.027778 0.714286 -vt 0.666667 0.285714 -vt 0.583333 0.190476 -vt 0.666667 0.190476 -vt 0.694444 0.190476 -vt 0.694444 0.309524 -vt 0.583333 0.285714 -vt 0.555556 0.190476 -vt 0.583333 0.309524 -vt 0.708333 0.297619 -vt 0.708333 0.303571 -vt 0.694444 0.303571 -vt 0.819444 0.303571 -vt 0.805556 0.297619 -vt 0.819444 0.297619 -vt 0.555556 0.476190 -vt 0.333333 0.523810 -vt 0.555556 0.523810 -vt 0.444444 0.523810 -vt 0.000000 0.523810 -vt 0.555556 0.476190 -vt 0.333333 0.523810 -vt 0.555556 0.523810 -vt 0.444444 0.523810 -vt 0.000000 0.523810 -vt 0.555556 0.476190 -vt 0.333333 0.523810 -vt 0.555556 0.523810 -vt 0.444444 0.523810 -vt -0.000000 0.523810 -vt 0.555556 0.476190 -vt 0.652778 0.595238 -vt 0.562500 0.476190 -vt 0.555556 0.500000 -vt 0.555556 0.500000 -vt 0.562500 0.476190 -vt 0.555556 0.500000 -vt 0.562500 0.476190 -vt 0.562500 0.476190 -vt 0.562500 0.476190 -vt 0.555556 0.500000 -vt 0.562500 0.476190 -vt 0.562500 0.476190 -vt 0.562500 0.476190 -vt 0.555556 0.500000 -vt 0.555556 0.500000 -vt 0.562500 0.476190 -vt 0.555556 0.500000 -vt 0.666667 0.547619 -vt 0.652778 0.595238 -vt 0.652778 0.595238 -vt 0.652778 0.595238 -vt 0.652778 0.595238 -vt 0.666667 0.547619 -vt 0.652778 0.595238 -vt 0.666667 0.547619 -vt 0.652778 0.595238 -vt 0.666667 0.547619 -vt 0.652778 0.595238 -vt 0.652778 0.595238 -vt 0.666667 0.547619 -vt 0.666667 0.547619 -vt 0.666667 0.547619 -vt 0.862808 0.633570 -vt 0.934892 0.674855 -vt 0.983057 0.736641 -vt 0.999971 0.809524 -vt 0.983057 0.882406 -vt 0.934892 0.944193 -vt 0.862807 0.985478 -vt 0.692748 0.985477 -vt 0.620664 0.944193 -vt 0.572498 0.882406 -vt 0.572498 0.736641 -vt 0.620664 0.674855 -vt 0.692748 0.633570 -vt 1.000000 0.488095 -vt 1.000000 0.511905 -vt 0.986111 0.523810 -vt 0.944444 0.511905 -vt 0.958333 0.476190 -vt 0.708333 0.309524 -vt 0.694444 0.309524 -vt 0.701389 0.309524 -vt 0.694444 0.303571 -vt 0.701389 0.297619 -vt 0.750000 0.357143 -vt 0.819444 0.309524 -vt 0.805556 0.309524 -vt 0.812500 0.309524 -vt 0.805556 0.303571 -vt 0.812500 0.297619 -vt 0.750000 0.357143 -vt 0.666667 0.357143 -vt 0.666667 0.357143 -vt 0.555556 0.309524 -vt 0.666667 0.309524 -vt 0.576389 0.452381 -vt 0.555556 0.434524 -vt 0.562500 0.452381 -vt 0.555556 0.446429 -vt 0.562500 0.428571 -vt 0.583333 0.446429 -vt 0.576389 0.452381 -vt 0.562500 0.452381 -vt 0.555556 0.434524 -vt 0.576389 0.428571 -vt 0.576389 0.452381 -vt 0.555556 0.434524 -vt 0.562500 0.452381 -vt 0.555556 0.446429 -vt 0.562500 0.428571 -vt 0.583333 0.446429 -vt 0.576389 0.452381 -vt 0.562500 0.452381 -vt 0.555556 0.434524 -vt 0.576389 0.428571 -vt 0.777778 0.404762 -vt 0.777778 0.404762 -vt 0.777778 0.404762 -vt 0.777778 0.404762 -vt 0.777778 0.404762 -vt 0.777778 0.404762 -vt 0.777778 0.404762 -vt 0.777778 0.404762 -vt 0.333333 0.976190 -vt 0.222222 0.547619 -vt 0.444444 1.000000 -vt 0.444444 0.976190 -vt 0.000000 0.904762 -vt 0.027778 0.904762 -vt 0.111111 0.547619 -vt 0.555556 0.619048 -vt 0.527778 0.619048 -vt 0.777778 0.428571 -vt 0.888889 0.428571 -vt 0.888889 0.428571 -vt 0.777778 0.428571 -vt 0.777778 0.428571 -vt 0.888889 0.428571 -vt 0.777778 0.428571 -vt 0.888889 0.428571 -vt 0.555556 0.309524 -vt 0.666667 0.309524 -vt 0.708333 0.309524 -vt 0.694444 0.309524 -vt 0.701389 0.309524 -vt 0.694444 0.297619 -vt 0.701389 0.297619 -vt 0.819444 0.309524 -vt 0.805556 0.309524 -vt 0.812500 0.309524 -vt 0.805556 0.303571 -vt 0.812500 0.297619 -vt 0.611111 0.333333 -vt 0.597222 0.428571 -vt 0.597222 0.333333 -vt 0.569444 0.333333 -vt 0.555556 0.428571 -vt 0.555556 0.333333 -vt 0.666667 0.333333 -vt 0.652778 0.428571 -vt 0.652778 0.333333 -vt 0.583333 0.333333 -vt 0.569444 0.428571 -vt 0.569444 0.333333 -vt 0.555556 0.428571 -vt 0.555556 0.333333 -vt 0.597222 0.333333 -vt 0.583333 0.428571 -vt 0.583333 0.333333 -vt 0.569444 0.428571 -vt 0.638889 0.333333 -vt 0.625000 0.428571 -vt 0.625000 0.333333 -vt 0.597222 0.333333 -vt 0.583333 0.428571 -vt 0.652778 0.333333 -vt 0.638889 0.428571 -vt 0.611111 0.333333 -vt 0.597222 0.428571 -vt 0.666667 0.333333 -vt 0.652778 0.428571 -vt 0.625000 0.333333 -vt 0.611111 0.428571 -vt 0.583333 0.333333 -vt 0.569444 0.428571 -vt 0.569444 0.333333 -vt 0.569444 0.333333 -vt 0.555556 0.428571 -vt 0.555556 0.333333 -vt 0.638889 0.333333 -vt 0.625000 0.428571 -vt 0.750000 0.190476 -vt 0.847222 0.000000 -vt 0.847222 0.190476 -vt 0.875000 0.547619 -vt 0.840278 0.476190 -vt 0.875000 0.476190 -vt 0.847222 0.190476 -vt 0.944444 0.000000 -vt 0.944444 0.190476 -vt 0.840278 0.547619 -vt 0.805556 0.476190 -vt 0.555556 0.190476 -vt 0.652778 0.000000 -vt 0.652778 0.190476 -vt 0.805556 0.547619 -vt 0.770833 0.476190 -vt 0.944444 0.000000 -vt 0.944444 0.190476 -vt 0.770833 0.547619 -vt 0.736111 0.476190 -vt 0.555556 0.190476 -vt 0.652778 0.000000 -vt 0.652778 0.190476 -vt 0.736111 0.547619 -vt 0.701389 0.476190 -vt 0.750000 0.000000 -vt 0.750000 0.190476 -vt 0.701389 0.547619 -vt 0.666667 0.476190 -vt 0.750000 0.000000 -vt 0.750000 0.190476 -vt 0.944444 0.547619 -vt 0.909722 0.476190 -vt 0.944444 0.476190 -vt 0.847222 -0.000000 -vt 0.847222 0.190476 -vt 0.909722 0.547619 -vt 0.888889 0.285714 -vt 0.875000 0.190476 -vt 0.888889 0.190476 -vt 0.875000 0.285714 -vt 0.868056 0.297619 -vt 0.861111 0.285714 -vt 0.805556 0.285714 -vt 0.791667 0.190476 -vt 0.805556 0.190476 -vt 0.819444 0.285714 -vt 0.812500 0.297619 -vt 0.805556 0.285714 -vt 0.791667 0.285714 -vt 0.777778 0.190476 -vt 0.902778 0.285714 -vt 0.902778 0.190476 -vt 0.847222 0.285714 -vt 0.861111 0.297619 -vt 0.854167 0.297619 -vt 0.777778 0.285714 -vt 0.763889 0.190476 -vt 0.888889 0.285714 -vt 0.902778 0.297619 -vt 0.895833 0.297619 -vt 0.763889 0.285714 -vt 0.750000 0.190476 -vt 0.916667 0.285714 -vt 0.916667 0.190476 -vt 0.902778 0.285714 -vt 0.916667 0.297619 -vt 0.909722 0.297619 -vt 0.750000 0.285714 -vt 0.736111 0.190476 -vt 0.833333 0.285714 -vt 0.826389 0.297619 -vt 0.736111 0.285714 -vt 0.722222 0.190476 -vt 0.881944 0.297619 -vt 0.722222 0.285714 -vt 0.708333 0.190476 -vt 0.847222 0.297619 -vt 0.840278 0.297619 -vt 0.708333 0.285714 -vt 0.694444 0.190476 -vt 0.875000 0.285714 -vt 0.861111 0.190476 -vt 0.861111 0.285714 -vt 0.847222 0.190476 -vt 0.847222 0.285714 -vt 0.833333 0.190476 -vt 0.833333 0.285714 -vt 0.819444 0.190476 -vt 0.819444 0.285714 -vt 0.805556 0.190476 -vt 0.826389 0.327381 -vt 0.833333 0.333333 -vt 0.826389 0.333333 -vt 0.722222 0.327381 -vt 0.715278 0.333333 -vt 0.715278 0.327381 -vt 0.840278 0.327381 -vt 0.833333 0.327381 -vt 0.701389 0.327381 -vt 0.694444 0.333333 -vt 0.694444 0.327381 -vt 0.812500 0.327381 -vt 0.805556 0.333333 -vt 0.805556 0.327381 -vt 0.819444 0.327381 -vt 0.812500 0.333333 -vt 0.708333 0.327381 -vt 0.708333 0.333333 -vt 0.729167 0.327381 -vt 0.722222 0.333333 -vt 0.847222 0.327381 -vt 0.840278 0.333333 -vt 0.701389 0.333333 -vt 0.819444 0.333333 -vt 0.736111 0.327381 -vt 0.729167 0.333333 -vt 0.833333 0.321429 -vt 0.840278 0.321429 -vt 0.847222 0.321429 -vt 0.812500 0.321429 -vt 0.819444 0.321429 -vt 0.826389 0.315476 -vt 0.826389 0.321429 -vt 0.833333 0.315476 -vt 0.840278 0.315476 -vt 0.805556 0.321429 -vt 0.812500 0.315476 -vt 0.826389 0.309524 -vt 0.833333 0.309524 -vt 0.840278 0.309524 -vt 0.847222 0.315476 -vt 0.805556 0.309524 -vt 0.805556 0.315476 -vt 0.819444 0.309524 -vt 0.819444 0.315476 -vt 0.708333 0.309524 -vt 0.715278 0.315476 -vt 0.708333 0.315476 -vt 0.701389 0.315476 -vt 0.694444 0.315476 -vt 0.701389 0.309524 -vt 0.729167 0.315476 -vt 0.736111 0.309524 -vt 0.736111 0.315476 -vt 0.722222 0.315476 -vt 0.729167 0.309524 -vt 0.715278 0.309524 -vt 0.708333 0.321429 -vt 0.715278 0.321429 -vt 0.701389 0.321429 -vt 0.694444 0.321429 -vt 0.729167 0.321429 -vt 0.736111 0.321429 -vt 0.722222 0.321429 -vt 0.847222 0.000000 -vt 0.847222 0.190476 -vt 0.944444 -0.000000 -vt 0.944444 0.190476 -vt 0.944444 0.000000 -vt 0.944444 0.190476 -vt 0.555556 0.190476 -vt 0.652778 0.000000 -vt 0.652778 0.190476 -vt 0.555556 0.190476 -vt 0.652778 0.000000 -vt 0.652778 0.190476 -vt 0.750000 0.000000 -vt 0.750000 0.190476 -vt 0.750000 0.000000 -vt 0.847222 0.000000 -vt 0.701389 0.547619 -vt 0.729167 0.577381 -vt 0.708333 0.577381 -vt 0.840278 0.547619 -vt 0.812500 0.577381 -vt 0.805556 0.547619 -vt 0.673611 0.577381 -vt 0.666667 0.547619 -vt 0.875000 0.547619 -vt 0.847222 0.577381 -vt 0.770833 0.547619 -vt 0.798611 0.577381 -vt 0.777778 0.577381 -vt 0.944444 0.547619 -vt 0.916667 0.577381 -vt 0.909722 0.547619 -vt 0.736111 0.547619 -vt 0.763889 0.577381 -vt 0.743056 0.577381 -vt 0.881944 0.577381 -vt 0.888889 0.285714 -vt 0.875000 0.190476 -vt 0.888889 0.190476 -vt 0.875000 0.285714 -vt 0.868056 0.297619 -vt 0.861111 0.285714 -vt 0.805556 0.285714 -vt 0.791667 0.190476 -vt 0.805556 0.190476 -vt 0.763889 0.285714 -vt 0.756944 0.297619 -vt 0.750000 0.285714 -vt 0.819444 0.285714 -vt 0.812500 0.297619 -vt 0.805556 0.285714 -vt 0.791667 0.285714 -vt 0.777778 0.190476 -vt 0.902778 0.285714 -vt 0.902778 0.190476 -vt 0.847222 0.285714 -vt 0.861111 0.297619 -vt 0.854167 0.297619 -vt 0.777778 0.285714 -vt 0.763889 0.190476 -vt 0.708333 0.285714 -vt 0.701389 0.297619 -vt 0.694444 0.285714 -vt 0.888889 0.285714 -vt 0.902778 0.297619 -vt 0.895833 0.297619 -vt 0.763889 0.285714 -vt 0.750000 0.190476 -vt 0.916667 0.285714 -vt 0.916667 0.190476 -vt 0.902778 0.285714 -vt 0.916667 0.297619 -vt 0.909722 0.297619 -vt 0.750000 0.285714 -vt 0.736111 0.190476 -vt 0.736111 0.285714 -vt 0.750000 0.297619 -vt 0.743056 0.297619 -vt 0.833333 0.285714 -vt 0.826389 0.297619 -vt 0.736111 0.285714 -vt 0.722222 0.190476 -vt 0.881944 0.297619 -vt 0.722222 0.285714 -vt 0.708333 0.190476 -vt 0.777778 0.285714 -vt 0.791667 0.297619 -vt 0.784722 0.297619 -vt 0.847222 0.297619 -vt 0.840278 0.297619 -vt 0.708333 0.285714 -vt 0.694444 0.190476 -vt 0.875000 0.285714 -vt 0.861111 0.190476 -vt 0.722222 0.285714 -vt 0.736111 0.297619 -vt 0.729167 0.297619 -vt 0.861111 0.285714 -vt 0.847222 0.190476 -vt 0.791667 0.285714 -vt 0.805556 0.297619 -vt 0.798611 0.297619 -vt 0.847222 0.285714 -vt 0.833333 0.190476 -vt 0.770833 0.297619 -vt 0.833333 0.285714 -vt 0.819444 0.190476 -vt 0.715278 0.297619 -vt 0.819444 0.285714 -vt 0.805556 0.190476 -vt 0.826389 0.327381 -vt 0.833333 0.333333 -vt 0.826389 0.333333 -vt 0.715278 0.327381 -vt 0.722222 0.333333 -vt 0.715278 0.333333 -vt 0.840278 0.327381 -vt 0.833333 0.327381 -vt 0.701389 0.327381 -vt 0.694444 0.333333 -vt 0.694444 0.327381 -vt 0.812500 0.327381 -vt 0.805556 0.333333 -vt 0.805556 0.327381 -vt 0.819444 0.327381 -vt 0.812500 0.333333 -vt 0.708333 0.327381 -vt 0.708333 0.333333 -vt 0.729167 0.327381 -vt 0.722222 0.327381 -vt 0.847222 0.327381 -vt 0.840278 0.333333 -vt 0.701389 0.333333 -vt 0.819444 0.333333 -vt 0.736111 0.327381 -vt 0.729167 0.333333 -vt 0.826389 0.321429 -vt 0.840278 0.321429 -vt 0.847222 0.321429 -vt 0.805556 0.321429 -vt 0.812500 0.321429 -vt 0.826389 0.315476 -vt 0.833333 0.321429 -vt 0.833333 0.315476 -vt 0.840278 0.315476 -vt 0.805556 0.315476 -vt 0.812500 0.315476 -vt 0.819444 0.321429 -vt 0.826389 0.309524 -vt 0.833333 0.309524 -vt 0.847222 0.309524 -vt 0.847222 0.315476 -vt 0.812500 0.309524 -vt 0.819444 0.309524 -vt 0.819444 0.315476 -vt 0.708333 0.309524 -vt 0.715278 0.315476 -vt 0.708333 0.315476 -vt 0.701389 0.315476 -vt 0.694444 0.309524 -vt 0.694444 0.315476 -vt 0.729167 0.315476 -vt 0.736111 0.309524 -vt 0.736111 0.315476 -vt 0.722222 0.309524 -vt 0.722222 0.315476 -vt 0.715278 0.309524 -vt 0.708333 0.321429 -vt 0.715278 0.321429 -vt 0.701389 0.321429 -vt 0.694444 0.321429 -vt 0.729167 0.321429 -vt 0.736111 0.321429 -vt 0.722222 0.321429 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.666667 0.547619 -vt 0.555556 0.500000 -vt 0.666667 0.500000 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.652778 0.595238 -vt 0.569444 0.619048 -vt 0.569444 0.595238 -vt 0.555556 0.428571 -vt 0.555556 0.333333 -vt 0.666667 0.333333 -vt 0.652778 0.428571 -vt 0.652778 0.333333 -vt 0.666667 0.333333 -vt 0.652778 0.428571 -vt 0.652778 0.333333 -vt 0.611111 0.428571 -vt 0.638889 0.428571 -vt 0.638889 0.333333 -vt 0.638889 0.428571 -vt 0.638889 0.333333 -vt 0.625000 0.428571 -vt 0.625000 0.333333 -vt 0.625000 0.428571 -vt 0.625000 0.333333 -vt 0.611111 0.428571 -vt 0.611111 0.333333 -vt 0.611111 0.428571 -vt 0.611111 0.333333 -vt 0.597222 0.428571 -vt 0.583333 0.428571 -vt 0.583333 0.333333 -vt 0.597222 0.428571 -vt 0.597222 0.333333 -vt 0.638889 0.428571 -vt 0.569444 0.428571 -vt 0.583333 0.428571 -vt 0.722222 0.285714 -vt 0.715278 0.297619 -vt 0.708333 0.285714 -vt 0.777778 0.285714 -vt 0.770833 0.297619 -vt 0.763889 0.285714 -vt 0.791667 0.285714 -vt 0.805556 0.297619 -vt 0.798611 0.297619 -vt 0.736111 0.297619 -vt 0.729167 0.297619 -vt 0.791667 0.297619 -vt 0.784722 0.297619 -vt 0.736111 0.285714 -vt 0.750000 0.297619 -vt 0.743056 0.297619 -vt 0.701389 0.297619 -vt 0.694444 0.285714 -vt 0.756944 0.297619 -vt 0.750000 0.285714 -vt 0.666667 0.428571 -vt 0.666667 0.428571 -vt 0.555556 0.000000 -vt 0.555556 0.000000 -vt 0.666667 0.547619 -vt 0.875000 0.297619 -vt 0.819444 0.297619 -vt 0.916667 0.285714 -vt 0.833333 0.297619 -vt 0.888889 0.297619 -vt 0.694444 0.285714 -vt 0.805556 0.285714 -vt 0.847222 0.333333 -vt 0.736111 0.333333 -vt 0.847222 0.309524 -vt 0.812500 0.309524 -vt 0.694444 0.309524 -vt 0.722222 0.309524 -vt 0.555556 0.000000 -vt 0.555556 0.000000 -vt 0.833333 0.577381 -vt 0.694444 0.577381 -vt 0.868056 0.577381 -vt 0.937500 0.577381 -vt 0.902778 0.577381 -vt 0.875000 0.297619 -vt 0.763889 0.297619 -vt 0.819444 0.297619 -vt 0.708333 0.297619 -vt 0.916667 0.285714 -vt 0.833333 0.297619 -vt 0.888889 0.297619 -vt 0.694444 0.285714 -vt 0.805556 0.285714 -vt 0.777778 0.297619 -vt 0.722222 0.297619 -vt 0.805556 0.285714 -vt 0.847222 0.333333 -vt 0.736111 0.333333 -vt 0.840278 0.309524 -vt 0.805556 0.309524 -vt 0.701389 0.309524 -vt 0.729167 0.309524 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.555556 0.547619 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.652778 0.619048 -vt 0.666667 0.428571 -vt 0.666667 0.428571 -vt 0.722222 0.297619 -vt 0.777778 0.297619 -vt 0.805556 0.285714 -vt 0.708333 0.297619 -vt 0.763889 0.297619 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn -0.7071 0.0000 0.7071 -vn 0.7071 0.0000 0.7071 -vn -0.7071 0.0000 -0.7071 -vn -0.5000 0.7071 0.5000 -vn 0.5774 0.5774 -0.5774 -vn 0.7071 0.7071 0.0000 -vn 0.5774 0.5774 0.5774 -vn -0.5774 0.5774 -0.5774 -vn 0.0000 0.7071 -0.7071 -vn -0.7071 0.7071 0.0000 -vn -0.5774 0.5774 0.5774 -vn 0.0000 0.7071 0.7071 -vn 0.7071 0.0000 -0.7071 +v 1.500000 0.250000 -0.750000 +v 1.500000 0.250000 -1.250000 +v -1.250000 0.250000 2.500000 +v -1.250000 0.750000 2.500000 +v -1.250000 0.750000 2.250000 +v -0.750000 0.250000 2.500000 +v -0.750000 0.750000 2.500000 +v -0.750000 0.750000 2.250000 +v -1.250000 0.250000 1.500000 +v -0.750000 0.250000 1.500000 +v -0.250000 0.250000 2.500000 +v -0.250000 0.750000 2.500000 +v -0.250000 0.750000 2.250000 +v 0.250000 0.250000 2.500000 +v 0.250000 0.750000 2.500000 +v 0.250000 0.750000 2.250000 +v -0.250000 0.250000 1.500000 +v 0.250000 0.250000 1.500000 +v 0.750000 0.250000 2.500000 +v 0.750000 0.750000 2.500000 +v 0.750000 0.750000 2.250000 +v 1.250000 0.250000 2.500000 +v 1.250000 0.750000 2.500000 +v 1.250000 0.750000 2.250000 +v 0.750000 0.250000 1.500000 +v 1.250000 0.250000 1.500000 +v -2.500000 0.250000 -1.249999 +v -2.500000 0.750000 -1.249999 +v -2.250000 0.750000 -1.249999 +v -2.500000 0.250000 -0.749999 +v -2.500000 0.750000 -0.749999 +v -2.250000 0.750000 -0.749999 +v -1.500000 0.250000 -1.250000 +v -1.500000 0.250000 -0.750000 +v -2.500000 0.250000 -0.249999 +v -2.500000 0.750000 -0.249999 +v -2.250000 0.750000 -0.249999 +v -2.500000 0.250000 0.250001 +v -2.500000 0.750000 0.250001 +v -2.250000 0.750000 0.250001 +v -1.500000 0.250000 -0.250000 +v -1.500000 0.250000 0.250000 +v -2.500000 0.250000 0.750001 +v -2.500000 0.750000 0.750001 +v -2.250000 0.750000 0.750001 +v -2.499999 0.250000 1.250001 +v -2.499999 0.750000 1.250001 +v -2.249999 0.750000 1.250001 +v -1.500000 0.250000 0.750000 +v -1.500000 0.250000 1.250000 +v 1.250000 0.250000 -2.500000 +v 1.250000 0.750000 -2.500000 +v 1.250000 0.750000 -2.250000 +v 0.750000 0.250000 -2.500000 +v 0.750000 0.750000 -2.500000 +v 0.750000 0.750000 -2.250000 +v 1.250000 0.250000 -1.500000 +v 0.750000 0.250000 -1.500000 +v 0.249999 0.250000 -2.500000 +v 0.249999 0.750000 -2.500000 +v 0.250000 0.750000 -2.250000 +v -0.250001 0.250000 -2.500000 +v -0.250001 0.750000 -2.500000 +v -0.250000 0.750000 -2.250000 +v 0.250000 0.250000 -1.500000 +v -0.250000 0.250000 -1.500000 +v -0.750000 0.250000 -2.500000 +v -0.750000 0.750000 -2.500000 +v -0.750000 0.750000 -2.250000 +v -1.250000 0.250000 -2.499999 +v -1.250000 0.750000 -2.499999 +v -1.250000 0.750000 -2.249999 +v -0.750000 0.250000 -1.500000 +v -1.250000 0.250000 -1.500000 +v 0.675716 1.687500 2.115592 +v 0.762406 1.650888 2.098348 +v 0.589026 1.650888 2.132836 +v 0.675716 1.687500 2.115592 +v 0.767456 1.661612 2.123739 +v 0.594077 1.661612 2.158226 +v 0.675716 1.687500 2.115592 +v 0.769549 1.687500 2.134256 +v 0.596168 1.687500 2.168744 +v 0.675717 2.375000 2.115592 +v 0.769549 2.375000 2.134256 +v 0.596169 2.375000 2.168743 +v 0.711625 2.463388 2.108449 +v 0.780067 2.400888 2.132164 +v 0.657469 2.525889 2.156550 +v 0.798316 2.500000 2.091206 +v 0.805458 2.411612 2.127114 +v 0.805459 2.588389 2.127114 +v 0.859615 2.500000 2.079012 +v 0.866757 2.411612 2.114920 +v 0.866758 2.588389 2.114920 +v 0.859614 2.500000 2.079013 +v 0.879955 2.411612 2.109454 +v 0.879955 2.588389 2.109454 +v 1.589567 2.499999 1.591275 +v 1.609907 2.411611 1.621716 +v 1.609907 2.588387 1.621715 +v 1.589567 2.499999 1.591275 +v 1.620008 2.411611 1.611615 +v 1.620008 2.588387 1.611614 +v 1.832630 2.499998 1.227507 +v 1.863071 2.411610 1.247847 +v 1.863071 2.588387 1.247847 +v 1.832630 2.499998 1.227507 +v 1.868538 2.411610 1.220364 +v 1.868538 2.588387 1.220364 +v 1.832630 2.499998 1.227507 +v 1.852970 2.411610 1.197065 +v 1.852970 2.588387 1.197065 +v 1.902076 2.624998 1.123573 +v 1.951182 2.588387 1.050081 +v 1.955228 2.624998 1.203120 +v 2.041918 2.588387 1.185877 +v 1.936563 2.624998 1.296953 +v 2.010056 2.588387 1.346059 +v 1.693501 2.624999 1.660721 +v 1.766993 2.588387 1.709826 +v 1.659013 2.624999 1.695208 +v 1.708119 2.588387 1.768701 +v 0.929061 2.625000 2.182946 +v 0.978167 2.588388 2.256439 +v 0.884001 2.625000 2.201610 +v 0.901245 2.588388 2.288301 +v 0.822702 2.625000 2.213804 +v 0.839946 2.588388 2.300494 +v 0.649322 2.551777 2.248291 +v 0.691956 2.525889 2.329930 +v 0.577505 2.375000 2.262576 +v 0.630657 2.375000 2.342123 +v 0.577504 1.687500 2.262576 +v 0.630656 1.687500 2.342124 +v 0.570361 1.599112 2.226668 +v 0.618463 1.536612 2.280825 +v 0.553118 1.562500 2.139978 +v 0.589026 1.474112 2.132836 +v 0.675716 1.437500 2.115592 +v 0.762406 1.474112 2.098348 +v 0.710203 1.510723 2.288972 +v 0.791843 1.536612 2.246337 +v 0.724488 1.687500 2.360788 +v 0.804036 1.687500 2.307636 +v 0.724489 2.375000 2.360788 +v 0.804037 2.375000 2.307636 +v 0.760398 2.463389 2.353645 +v 0.814554 2.400888 2.305544 +v 0.847088 2.500000 2.336402 +v 0.839945 2.411612 2.300494 +v 0.908387 2.500000 2.324208 +v 0.901244 2.411612 2.288301 +v 0.998507 2.500000 2.286880 +v 0.978166 2.411612 2.256439 +v 1.728460 2.499999 1.799142 +v 1.708119 2.411611 1.768701 +v 1.797434 2.499999 1.730167 +v 1.766993 2.411611 1.709827 +v 2.040497 2.499998 1.366399 +v 2.010055 2.411610 1.346059 +v 2.077826 2.499998 1.178734 +v 2.041918 2.411610 1.185877 +v 1.971522 2.499998 1.019639 +v 1.951182 2.411610 1.050081 +v 1.902076 2.374998 1.123573 +v 1.955228 2.374998 1.203120 +v 1.936563 2.374998 1.296953 +v 1.693501 2.374999 1.660721 +v 1.659013 2.374999 1.695208 +v 0.929061 2.375000 2.182946 +v 0.884001 2.375000 2.201610 +v 0.822702 2.375000 2.213804 +v 0.822702 2.375000 2.213803 +v 0.822701 2.375000 2.213803 +v 0.822701 1.687500 2.213804 +v 0.815558 1.599112 2.177896 +v 0.798314 1.562500 2.091206 +v 1.904307 1.562500 1.122080 +v 1.855201 1.599112 1.195572 +v 1.953413 1.599112 1.048588 +v 1.904307 1.562500 1.122080 +v 1.876726 1.588388 1.209955 +v 1.974938 1.588388 1.062970 +v 1.904307 1.562500 1.122080 +v 1.885642 1.562500 1.215913 +v 1.983854 1.562500 1.068928 +v 1.904306 0.875000 1.122081 +v 1.885641 0.875000 1.215913 +v 1.983854 0.875000 1.068929 +v 1.883965 0.786612 1.152522 +v 1.879684 0.849112 1.224830 +v 1.949130 0.724111 1.120896 +v 1.834860 0.750000 1.226015 +v 1.865301 0.838388 1.246355 +v 1.865301 0.661612 1.246356 +v 1.765413 0.750000 1.329949 +v 1.795855 0.838388 1.350289 +v 1.795855 0.661612 1.350290 +v 1.765414 0.750000 1.329948 +v 1.772556 0.838388 1.365856 +v 1.772556 0.661612 1.365857 +v 1.765414 0.750000 1.329948 +v 1.745073 0.838389 1.360390 +v 1.745073 0.661612 1.360390 +v 1.695967 0.625000 1.433882 +v 1.646861 0.661612 1.507374 +v 1.789799 0.625000 1.452547 +v 1.807043 0.661612 1.539237 +v 1.869347 0.625000 1.399395 +v 1.942839 0.661612 1.448501 +v 1.938793 0.625000 1.295462 +v 2.012286 0.661611 1.344568 +v 2.037005 0.698223 1.148477 +v 2.096115 0.724111 1.219108 +v 2.077686 0.875000 1.087593 +v 2.130838 0.875000 1.167141 +v 2.077687 1.562500 1.087593 +v 2.130839 1.562500 1.167140 +v 2.047245 1.650888 1.067252 +v 2.078871 1.713388 1.132417 +v 1.973753 1.687500 1.018146 +v 1.953413 1.775888 1.048588 +v 1.904307 1.812500 1.122080 +v 1.855201 1.775888 1.195572 +v 2.051291 1.739277 1.220292 +v 1.980660 1.713388 1.279401 +v 2.112174 1.562500 1.260973 +v 2.032627 1.562500 1.314125 +v 2.112173 0.875000 1.260974 +v 2.032626 0.875000 1.314125 +v 2.091833 0.786611 1.291415 +v 2.026669 0.849112 1.323042 +v 2.042727 0.750000 1.364908 +v 2.012286 0.838389 1.344567 +v 1.973281 0.750000 1.468842 +v 1.942840 0.838389 1.448501 +v 1.814186 0.750000 1.575145 +v 1.807044 0.838389 1.539237 +v 1.626521 0.750000 1.537816 +v 1.646862 0.838389 1.507374 +v 1.695967 0.875000 1.433882 +v 1.789800 0.875000 1.452547 +v 1.869347 0.875000 1.399395 +v 1.938793 0.875000 1.295461 +v 1.938793 0.875000 1.295461 +v 1.938793 0.875000 1.295461 +v 1.938794 1.562500 1.295460 +v 1.908353 1.650888 1.275120 +v 1.834861 1.687500 1.226014 +v 2.115592 1.687500 -0.675716 +v 2.098348 1.650888 -0.762406 +v 2.132836 1.650888 -0.589026 +v 2.115592 1.687500 -0.675716 +v 2.123739 1.661612 -0.767457 +v 2.158226 1.661612 -0.594077 +v 2.115592 1.687500 -0.675716 +v 2.134256 1.687500 -0.769549 +v 2.168744 1.687500 -0.596169 +v 2.115592 2.375000 -0.675717 +v 2.134256 2.375000 -0.769550 +v 2.168743 2.375000 -0.596170 +v 2.108449 2.463388 -0.711625 +v 2.132164 2.400888 -0.780067 +v 2.156550 2.525889 -0.657469 +v 2.091206 2.500000 -0.798316 +v 2.127114 2.411612 -0.805458 +v 2.127114 2.588389 -0.805459 +v 2.079012 2.500000 -0.859615 +v 2.114920 2.411612 -0.866757 +v 2.114920 2.588389 -0.866758 +v 2.079013 2.500000 -0.859615 +v 2.109454 2.411612 -0.879955 +v 2.109454 2.588389 -0.879955 +v 1.591274 2.499999 -1.589567 +v 1.621716 2.411611 -1.609907 +v 1.621715 2.588387 -1.609908 +v 1.591274 2.499999 -1.589567 +v 1.611615 2.411611 -1.620009 +v 1.611614 2.588387 -1.620009 +v 1.227507 2.499998 -1.832630 +v 1.247847 2.411610 -1.863071 +v 1.247847 2.588387 -1.863071 +v 1.227507 2.499998 -1.832630 +v 1.220364 2.411610 -1.868538 +v 1.220364 2.588387 -1.868538 +v 1.227507 2.499998 -1.832630 +v 1.197065 2.411610 -1.852970 +v 1.197065 2.588387 -1.852970 +v 1.123573 2.624998 -1.902076 +v 1.050080 2.588387 -1.951182 +v 1.203120 2.624998 -1.955228 +v 1.185876 2.588387 -2.041918 +v 1.296953 2.624998 -1.936563 +v 1.346059 2.588387 -2.010056 +v 1.660721 2.624999 -1.693501 +v 1.709826 2.588387 -1.766993 +v 1.695208 2.624999 -1.659014 +v 1.768700 2.588387 -1.708120 +v 2.182946 2.625000 -0.929061 +v 2.256439 2.588388 -0.978167 +v 2.201610 2.625000 -0.884001 +v 2.288301 2.588388 -0.901245 +v 2.213804 2.625000 -0.822702 +v 2.300494 2.588388 -0.839946 +v 2.248291 2.551777 -0.649322 +v 2.329930 2.525889 -0.691957 +v 2.262576 2.375000 -0.577505 +v 2.342123 2.375000 -0.630657 +v 2.262576 1.687500 -0.577504 +v 2.342124 1.687500 -0.630656 +v 2.226668 1.599112 -0.570362 +v 2.280825 1.536612 -0.618463 +v 2.139978 1.562500 -0.553118 +v 2.132836 1.474112 -0.589026 +v 2.115592 1.437500 -0.675716 +v 2.098348 1.474112 -0.762406 +v 2.288972 1.510723 -0.710204 +v 2.246337 1.536612 -0.791843 +v 2.360788 1.687500 -0.724489 +v 2.307636 1.687500 -0.804036 +v 2.360788 2.375000 -0.724490 +v 2.307636 2.375000 -0.804037 +v 2.353645 2.463389 -0.760398 +v 2.305544 2.400888 -0.814554 +v 2.336402 2.500000 -0.847088 +v 2.300494 2.411612 -0.839945 +v 2.324208 2.500000 -0.908387 +v 2.288301 2.411612 -0.901244 +v 2.286880 2.500000 -0.998507 +v 2.256439 2.411612 -0.978166 +v 1.799142 2.499999 -1.728460 +v 1.768700 2.411611 -1.708119 +v 1.730167 2.499999 -1.797435 +v 1.709827 2.411611 -1.766993 +v 1.366399 2.499998 -2.040497 +v 1.346059 2.411610 -2.010055 +v 1.178734 2.499998 -2.077826 +v 1.185877 2.411610 -2.041918 +v 1.019639 2.499998 -1.971522 +v 1.050081 2.411610 -1.951182 +v 1.123573 2.374998 -1.902076 +v 1.203120 2.374998 -1.955228 +v 1.296953 2.374998 -1.936563 +v 1.660721 2.374999 -1.693501 +v 1.695208 2.374999 -1.659013 +v 2.182946 2.375000 -0.929061 +v 2.201610 2.375000 -0.884001 +v 2.213804 2.375000 -0.822702 +v 2.213803 2.375000 -0.822702 +v 2.213803 2.375000 -0.822702 +v 2.213804 1.687500 -0.822701 +v 2.177896 1.599112 -0.815558 +v 2.091206 1.562500 -0.798314 +v 1.122080 1.562500 -1.904307 +v 1.195572 1.599112 -1.855201 +v 1.048588 1.599112 -1.953413 +v 1.122080 1.562500 -1.904307 +v 1.209955 1.588388 -1.876726 +v 1.062970 1.588388 -1.974938 +v 1.122080 1.562500 -1.904307 +v 1.215913 1.562500 -1.885642 +v 1.068928 1.562500 -1.983854 +v 1.122081 0.875000 -1.904306 +v 1.215913 0.875000 -1.885641 +v 1.068929 0.875000 -1.983854 +v 1.152522 0.786612 -1.883965 +v 1.224829 0.849112 -1.879684 +v 1.120896 0.724111 -1.949130 +v 1.226015 0.750000 -1.834860 +v 1.246355 0.838388 -1.865301 +v 1.246356 0.661612 -1.865301 +v 1.329949 0.750000 -1.765413 +v 1.350289 0.838388 -1.795855 +v 1.350289 0.661612 -1.795855 +v 1.329948 0.750000 -1.765414 +v 1.365856 0.838388 -1.772556 +v 1.365857 0.661612 -1.772556 +v 1.329948 0.750000 -1.765414 +v 1.360390 0.838389 -1.745073 +v 1.360390 0.661612 -1.745073 +v 1.433882 0.625000 -1.695967 +v 1.507374 0.661612 -1.646861 +v 1.452547 0.625000 -1.789799 +v 1.539237 0.661612 -1.807043 +v 1.399395 0.625000 -1.869347 +v 1.448501 0.661612 -1.942839 +v 1.295462 0.625000 -1.938793 +v 1.344568 0.661611 -2.012286 +v 1.148477 0.698223 -2.037005 +v 1.219108 0.724111 -2.096115 +v 1.087593 0.875000 -2.077686 +v 1.167141 0.875000 -2.130838 +v 1.087593 1.562500 -2.077687 +v 1.167140 1.562500 -2.130839 +v 1.067252 1.650888 -2.047245 +v 1.132417 1.713388 -2.078871 +v 1.018146 1.687500 -1.973753 +v 1.048588 1.775888 -1.953413 +v 1.122080 1.812500 -1.904307 +v 1.195572 1.775888 -1.855201 +v 1.220292 1.739277 -2.051291 +v 1.279401 1.713388 -1.980660 +v 1.260973 1.562500 -2.112174 +v 1.314125 1.562500 -2.032627 +v 1.260973 0.875000 -2.112173 +v 1.314125 0.875000 -2.032626 +v 1.291415 0.786611 -2.091833 +v 1.323042 0.849112 -2.026669 +v 1.364908 0.750000 -2.042727 +v 1.344567 0.838389 -2.012286 +v 1.468842 0.750000 -1.973281 +v 1.448501 0.838389 -1.942840 +v 1.575145 0.750000 -1.814186 +v 1.539237 0.838389 -1.807044 +v 1.537816 0.750000 -1.626521 +v 1.507374 0.838389 -1.646862 +v 1.433882 0.875000 -1.695968 +v 1.452546 0.875000 -1.789800 +v 1.399395 0.875000 -1.869347 +v 1.295461 0.875000 -1.938793 +v 1.295461 0.875000 -1.938793 +v 1.295461 0.875000 -1.938793 +v 1.295460 1.562500 -1.938794 +v 1.275120 1.650888 -1.908353 +v 1.226014 1.687500 -1.834861 +v -0.675716 1.687500 -2.115592 +v -0.762406 1.650888 -2.098348 +v -0.589026 1.650888 -2.132836 +v -0.675716 1.687500 -2.115592 +v -0.767457 1.661612 -2.123739 +v -0.594077 1.661612 -2.158226 +v -0.675716 1.687500 -2.115592 +v -0.769549 1.687500 -2.134256 +v -0.596169 1.687500 -2.168744 +v -0.675717 2.375000 -2.115592 +v -0.769550 2.375000 -2.134256 +v -0.596170 2.375000 -2.168743 +v -0.711626 2.463388 -2.108449 +v -0.780067 2.400888 -2.132164 +v -0.657469 2.525889 -2.156550 +v -0.798316 2.500000 -2.091205 +v -0.805458 2.411612 -2.127113 +v -0.805459 2.588389 -2.127113 +v -0.859615 2.500000 -2.079012 +v -0.866757 2.411612 -2.114920 +v -0.866758 2.588389 -2.114920 +v -0.859615 2.500000 -2.079013 +v -0.879955 2.411612 -2.109454 +v -0.879955 2.588389 -2.109453 +v -1.589567 2.499999 -1.591274 +v -1.609908 2.411611 -1.621716 +v -1.609908 2.588387 -1.621715 +v -1.589567 2.499999 -1.591274 +v -1.620009 2.411611 -1.611614 +v -1.620009 2.588387 -1.611614 +v -1.832630 2.499998 -1.227507 +v -1.863071 2.411610 -1.247847 +v -1.863071 2.588387 -1.247847 +v -1.832630 2.499998 -1.227507 +v -1.868538 2.411610 -1.220364 +v -1.868538 2.588387 -1.220364 +v -1.832630 2.499998 -1.227506 +v -1.852970 2.411610 -1.197065 +v -1.852970 2.588387 -1.197065 +v -1.902076 2.624998 -1.123573 +v -1.951182 2.588387 -1.050080 +v -1.955228 2.624998 -1.203120 +v -2.041918 2.588387 -1.185876 +v -1.936564 2.624998 -1.296953 +v -2.010056 2.588387 -1.346058 +v -1.693501 2.624999 -1.660720 +v -1.766993 2.588387 -1.709826 +v -1.659014 2.624999 -1.695208 +v -1.708120 2.588387 -1.768700 +v -0.929061 2.625000 -2.182946 +v -0.978167 2.588388 -2.256438 +v -0.884001 2.625000 -2.201610 +v -0.901245 2.588388 -2.288300 +v -0.822702 2.625000 -2.213803 +v -0.839946 2.588388 -2.300493 +v -0.649322 2.551777 -2.248291 +v -0.691957 2.525889 -2.329930 +v -0.577505 2.375000 -2.262576 +v -0.630657 2.375000 -2.342123 +v -0.577504 1.687500 -2.262576 +v -0.630656 1.687500 -2.342124 +v -0.570362 1.599112 -2.226668 +v -0.618463 1.536612 -2.280825 +v -0.553118 1.562500 -2.139978 +v -0.589026 1.474112 -2.132836 +v -0.675716 1.437500 -2.115592 +v -0.762406 1.474112 -2.098348 +v -0.710204 1.510723 -2.288972 +v -0.791843 1.536612 -2.246337 +v -0.724489 1.687500 -2.360788 +v -0.804036 1.687500 -2.307636 +v -0.724490 2.375000 -2.360788 +v -0.804037 2.375000 -2.307636 +v -0.760398 2.463389 -2.353645 +v -0.814555 2.400888 -2.305544 +v -0.847089 2.500000 -2.336401 +v -0.839946 2.411612 -2.300493 +v -0.908388 2.500000 -2.324208 +v -0.901245 2.411612 -2.288301 +v -0.998507 2.500000 -2.286880 +v -0.978167 2.411612 -2.256438 +v -1.728460 2.499999 -1.799142 +v -1.708119 2.411611 -1.768700 +v -1.797435 2.499999 -1.730167 +v -1.766993 2.411611 -1.709827 +v -2.040497 2.499998 -1.366399 +v -2.010056 2.411610 -1.346059 +v -2.077826 2.499998 -1.178734 +v -2.041918 2.411610 -1.185877 +v -1.971522 2.499998 -1.019639 +v -1.951182 2.411610 -1.050081 +v -1.902076 2.374998 -1.123573 +v -1.955228 2.374998 -1.203120 +v -1.936563 2.374998 -1.296953 +v -1.693501 2.374999 -1.660720 +v -1.659013 2.374999 -1.695208 +v -0.929061 2.375000 -2.182946 +v -0.884001 2.375000 -2.201610 +v -0.822702 2.375000 -2.213803 +v -0.822702 2.375000 -2.213803 +v -0.822702 2.375000 -2.213803 +v -0.822701 1.687500 -2.213803 +v -0.815558 1.599112 -2.177895 +v -0.798314 1.562500 -2.091205 +v -1.904307 1.562500 -1.122080 +v -1.855201 1.599112 -1.195572 +v -1.953413 1.599112 -1.048588 +v -1.904307 1.562500 -1.122080 +v -1.876726 1.588388 -1.209955 +v -1.974938 1.588388 -1.062970 +v -1.904307 1.562500 -1.122080 +v -1.885643 1.562500 -1.215912 +v -1.983854 1.562500 -1.068928 +v -1.904306 0.875000 -1.122081 +v -1.885642 0.875000 -1.215913 +v -1.983854 0.875000 -1.068929 +v -1.883966 0.786612 -1.152522 +v -1.879684 0.849112 -1.224829 +v -1.949130 0.724111 -1.120896 +v -1.834860 0.750000 -1.226015 +v -1.865301 0.838388 -1.246355 +v -1.865302 0.661612 -1.246356 +v -1.765414 0.750000 -1.329948 +v -1.795855 0.838388 -1.350289 +v -1.795855 0.661612 -1.350289 +v -1.765414 0.750000 -1.329948 +v -1.772556 0.838388 -1.365856 +v -1.772556 0.661612 -1.365857 +v -1.765414 0.750000 -1.329948 +v -1.745074 0.838389 -1.360390 +v -1.745073 0.661612 -1.360390 +v -1.695967 0.625000 -1.433882 +v -1.646861 0.661612 -1.507374 +v -1.789799 0.625000 -1.452546 +v -1.807043 0.661612 -1.539237 +v -1.869347 0.625000 -1.399395 +v -1.942840 0.661612 -1.448501 +v -1.938793 0.625000 -1.295461 +v -2.012286 0.661611 -1.344567 +v -2.037005 0.698223 -1.148476 +v -2.096115 0.724111 -1.219108 +v -2.077686 0.875000 -1.087593 +v -2.130838 0.875000 -1.167141 +v -2.077687 1.562500 -1.087592 +v -2.130839 1.562500 -1.167140 +v -2.047245 1.650888 -1.067252 +v -2.078872 1.713388 -1.132416 +v -1.973753 1.687500 -1.018146 +v -1.953413 1.775888 -1.048588 +v -1.904307 1.812500 -1.122080 +v -1.855201 1.775888 -1.195572 +v -2.051291 1.739277 -1.220292 +v -1.980660 1.713388 -1.279401 +v -2.112175 1.562500 -1.260972 +v -2.032627 1.562500 -1.314124 +v -2.112174 0.875000 -1.260973 +v -2.032626 0.875000 -1.314125 +v -2.091833 0.786611 -1.291415 +v -2.026669 0.849112 -1.323041 +v -2.042727 0.750000 -1.364908 +v -2.012286 0.838389 -1.344567 +v -1.973281 0.750000 -1.468842 +v -1.942840 0.838389 -1.448501 +v -1.814186 0.750000 -1.575145 +v -1.807044 0.838389 -1.539236 +v -1.626521 0.750000 -1.537816 +v -1.646862 0.838389 -1.507374 +v -1.695968 0.875000 -1.433882 +v -1.789800 0.875000 -1.452546 +v -1.869347 0.875000 -1.399395 +v -1.938794 0.875000 -1.295461 +v -1.938794 0.875000 -1.295461 +v -1.938793 0.875000 -1.295461 +v -1.938794 1.562500 -1.295460 +v -1.908353 1.650888 -1.275120 +v -1.834861 1.687500 -1.226014 +v -2.115592 1.687500 0.675716 +v -2.098348 1.650888 0.762406 +v -2.132836 1.650888 0.589026 +v -2.115592 1.687500 0.675716 +v -2.123739 1.661612 0.767457 +v -2.158226 1.661612 0.594077 +v -2.115592 1.687500 0.675716 +v -2.134256 1.687500 0.769549 +v -2.168744 1.687500 0.596169 +v -2.115592 2.375000 0.675717 +v -2.134256 2.375000 0.769550 +v -2.168743 2.375000 0.596170 +v -2.108449 2.463388 0.711626 +v -2.132164 2.400888 0.780067 +v -2.156550 2.525889 0.657469 +v -2.091205 2.500000 0.798316 +v -2.127113 2.411612 0.805458 +v -2.127113 2.588389 0.805459 +v -2.079012 2.500000 0.859615 +v -2.114920 2.411612 0.866758 +v -2.114920 2.588389 0.866758 +v -2.079013 2.500000 0.859615 +v -2.109454 2.411612 0.879955 +v -2.109453 2.588389 0.879956 +v -1.591274 2.499999 1.589567 +v -1.621715 2.411611 1.609908 +v -1.621715 2.588387 1.609908 +v -1.591274 2.499999 1.589567 +v -1.611614 2.411611 1.620009 +v -1.611614 2.588387 1.620009 +v -1.227507 2.499998 1.832630 +v -1.247847 2.411610 1.863071 +v -1.247846 2.588387 1.863071 +v -1.227507 2.499998 1.832630 +v -1.220364 2.411610 1.868538 +v -1.220363 2.588387 1.868538 +v -1.227506 2.499998 1.832630 +v -1.197065 2.411610 1.852970 +v -1.197065 2.588387 1.852970 +v -1.123572 2.624998 1.902076 +v -1.050080 2.588387 1.951182 +v -1.203120 2.624998 1.955228 +v -1.185876 2.588387 2.041918 +v -1.296953 2.624998 1.936564 +v -1.346058 2.588387 2.010056 +v -1.660720 2.624999 1.693501 +v -1.709826 2.588387 1.766993 +v -1.695208 2.624999 1.659014 +v -1.768700 2.588387 1.708120 +v -2.182946 2.625000 0.929061 +v -2.256438 2.588388 0.978167 +v -2.201610 2.625000 0.884002 +v -2.288300 2.588388 0.901245 +v -2.213803 2.625000 0.822703 +v -2.300493 2.588388 0.839946 +v -2.248291 2.551777 0.649322 +v -2.329930 2.525889 0.691957 +v -2.262576 2.375000 0.577505 +v -2.342123 2.375000 0.630657 +v -2.262576 1.687500 0.577505 +v -2.342124 1.687500 0.630656 +v -2.226668 1.599112 0.570362 +v -2.280825 1.536612 0.618463 +v -2.139978 1.562500 0.553118 +v -2.132836 1.474112 0.589026 +v -2.115592 1.437500 0.675716 +v -2.098348 1.474112 0.762406 +v -2.288972 1.510723 0.710204 +v -2.246337 1.536612 0.791843 +v -2.360788 1.687500 0.724489 +v -2.307636 1.687500 0.804036 +v -2.360788 2.375000 0.724490 +v -2.307636 2.375000 0.804037 +v -2.353645 2.463389 0.760399 +v -2.305544 2.400888 0.814555 +v -2.336401 2.500000 0.847089 +v -2.300493 2.411612 0.839946 +v -2.324208 2.500000 0.908388 +v -2.288301 2.411612 0.901245 +v -2.286880 2.500000 0.998507 +v -2.256438 2.411612 0.978167 +v -1.799141 2.499999 1.728460 +v -1.768700 2.411611 1.708119 +v -1.730167 2.499999 1.797435 +v -1.709826 2.411611 1.766993 +v -1.366399 2.499998 2.040497 +v -1.346059 2.411610 2.010056 +v -1.178734 2.499998 2.077826 +v -1.185877 2.411610 2.041918 +v -1.019639 2.499998 1.971522 +v -1.050081 2.411610 1.951182 +v -1.123572 2.374998 1.902076 +v -1.203120 2.374998 1.955228 +v -1.296953 2.374998 1.936563 +v -1.660720 2.374999 1.693501 +v -1.695208 2.374999 1.659014 +v -2.182946 2.375000 0.929061 +v -2.201610 2.375000 0.884001 +v -2.213803 2.375000 0.822702 +v -2.213803 2.375000 0.822702 +v -2.213803 2.375000 0.822702 +v -2.213803 1.687500 0.822701 +v -2.177895 1.599112 0.815558 +v -2.091205 1.562500 0.798315 +v -1.122080 1.562500 1.904307 +v -1.195572 1.599112 1.855201 +v -1.048588 1.599112 1.953413 +v -1.122080 1.562500 1.904307 +v -1.209955 1.588388 1.876726 +v -1.062970 1.588388 1.974938 +v -1.122080 1.562500 1.904307 +v -1.215912 1.562500 1.885643 +v -1.068928 1.562500 1.983854 +v -1.122080 0.875000 1.904306 +v -1.215913 0.875000 1.885642 +v -1.068928 0.875000 1.983854 +v -1.152522 0.786612 1.883966 +v -1.224829 0.849112 1.879684 +v -1.120896 0.724111 1.949130 +v -1.226015 0.750000 1.834860 +v -1.246355 0.838388 1.865301 +v -1.246355 0.661612 1.865302 +v -1.329948 0.750000 1.765414 +v -1.350289 0.838388 1.795855 +v -1.350289 0.661612 1.795855 +v -1.329948 0.750000 1.765414 +v -1.365856 0.838388 1.772556 +v -1.365857 0.661612 1.772556 +v -1.329948 0.750000 1.765414 +v -1.360390 0.838389 1.745074 +v -1.360390 0.661612 1.745073 +v -1.433881 0.625000 1.695967 +v -1.507374 0.661612 1.646861 +v -1.452546 0.625000 1.789800 +v -1.539236 0.661612 1.807043 +v -1.399395 0.625000 1.869347 +v -1.448501 0.661612 1.942840 +v -1.295461 0.625000 1.938793 +v -1.344567 0.661611 2.012286 +v -1.148476 0.698223 2.037005 +v -1.219108 0.724111 2.096115 +v -1.087593 0.875000 2.077686 +v -1.167140 0.875000 2.130838 +v -1.087592 1.562500 2.077687 +v -1.167140 1.562500 2.130839 +v -1.067252 1.650888 2.047245 +v -1.132416 1.713388 2.078872 +v -1.018146 1.687500 1.973753 +v -1.048588 1.775888 1.953413 +v -1.122080 1.812500 1.904307 +v -1.195572 1.775888 1.855201 +v -1.220292 1.739277 2.051291 +v -1.279401 1.713388 1.980660 +v -1.260972 1.562500 2.112175 +v -1.314124 1.562500 2.032627 +v -1.260973 0.875000 2.112174 +v -1.314125 0.875000 2.032626 +v -1.291415 0.786611 2.091833 +v -1.323041 0.849112 2.026669 +v -1.364908 0.750000 2.042727 +v -1.344567 0.838389 2.012286 +v -1.468841 0.750000 1.973281 +v -1.448501 0.838389 1.942840 +v -1.575145 0.750000 1.814186 +v -1.539236 0.838389 1.807044 +v -1.537816 0.750000 1.626521 +v -1.507374 0.838389 1.646862 +v -1.433882 0.875000 1.695968 +v -1.452546 0.875000 1.789800 +v -1.399395 0.875000 1.869347 +v -1.295461 0.875000 1.938794 +v -1.295461 0.875000 1.938794 +v -1.295461 0.875000 1.938793 +v -1.295460 1.562500 1.938794 +v -1.275120 1.650888 1.908353 +v -1.226014 1.687500 1.834861 +vn -0.3827 -0.0000 -0.9239 +vn -0.0000 -0.0000 -1.0000 +vn 0.7071 -0.0000 -0.7071 +vn 0.9239 -0.0000 -0.3827 +vn 1.0000 -0.0000 -0.0000 +vn 0.9239 -0.0000 0.3827 +vn 0.7071 -0.0000 0.7071 +vn 0.3827 -0.0000 0.9239 +vn -0.0000 -0.0000 1.0000 +vn -0.3827 -0.0000 0.9239 +vn -0.7071 -0.0000 0.7071 +vn -0.9239 -0.0000 0.3827 +vn -1.0000 -0.0000 -0.0000 +vn -0.9239 -0.0000 -0.3827 +vn -0.7071 -0.0000 -0.7071 +vn 0.3827 -0.0000 -0.9239 +vn 0.2680 -0.7139 -0.6469 +vn -0.0000 -0.7139 -0.7002 +vn -0.0000 0.7139 -0.7002 +vn 0.2680 0.7139 -0.6469 +vn 0.4951 -0.7139 -0.4951 +vn 0.4951 0.7139 -0.4951 +vn 0.6469 -0.7139 -0.2680 +vn 0.6469 0.7139 -0.2680 +vn 0.7002 -0.7139 -0.0000 +vn 0.7002 0.7139 -0.0000 +vn 0.6469 -0.7139 0.2680 +vn 0.6469 0.7139 0.2680 +vn 0.4951 -0.7139 0.4951 +vn 0.4951 0.7139 0.4951 +vn 0.2680 -0.7139 0.6469 +vn 0.2680 0.7139 0.6469 +vn -0.0000 -0.7139 0.7002 +vn -0.0000 0.7139 0.7002 +vn -0.2680 -0.7139 0.6469 +vn -0.2680 0.7139 0.6469 +vn -0.4951 -0.7139 0.4951 +vn -0.4951 0.7139 0.4951 +vn -0.6469 -0.7139 0.2680 +vn -0.6469 0.7139 0.2680 +vn -0.7002 -0.7139 -0.0000 +vn -0.7002 0.7139 -0.0000 +vn -0.6469 -0.7139 -0.2680 +vn -0.6469 0.7139 -0.2680 +vn -0.4951 -0.7139 -0.4951 +vn -0.4951 0.7139 -0.4951 +vn -0.2680 -0.7139 -0.6469 +vn -0.2680 0.7139 -0.6469 +vn -0.0000 -0.7071 -0.7071 +vn 0.2706 -0.7071 -0.6533 +vn 0.5000 -0.7071 -0.5000 +vn -0.5000 -0.7071 -0.5000 +vn -0.2706 -0.7071 -0.6533 +vn -0.6533 -0.7071 -0.2706 +vn -0.7071 -0.7071 -0.0000 +vn -0.6533 -0.7071 0.2706 +vn -0.5000 -0.7071 0.5000 +vn -0.2706 -0.7071 0.6533 +vn -0.0000 -0.7071 0.7071 +vn 0.2706 -0.7071 0.6533 +vn 0.5000 -0.7071 0.5000 +vn 0.6533 -0.7071 0.2706 +vn 0.7071 -0.7071 -0.0000 +vn 0.6533 -0.7071 -0.2706 +vn -0.2706 0.7071 -0.6533 +vn -0.0000 0.7071 -0.7071 vn 0.5000 0.7071 -0.5000 -vn 0.3827 0.0000 -0.9239 -vn -0.3827 0.0000 0.9239 -vn -0.3827 0.0000 -0.9239 -vn 0.3827 0.0000 0.9239 -vn -0.9239 0.0000 -0.3827 -vn 0.9999 0.0000 -0.0139 -vn 0.8908 0.4542 -0.0095 -vn 0.6273 0.4613 0.6273 -vn 0.0139 0.0000 -0.9999 -vn -0.8908 0.4542 0.0095 -vn -0.6273 0.4613 -0.6273 -vn -0.0095 0.4542 0.8908 -vn -0.0163 0.4541 0.8908 -vn 0.6324 0.4472 -0.6324 -vn 0.0163 0.4541 -0.8908 -vn 0.0095 0.4542 -0.8908 -vn -0.0139 0.0000 0.9999 -vn -0.6324 0.4472 0.6324 -vn -0.8908 0.4541 0.0163 -vn 0.8908 0.4541 -0.0163 -vn -0.9999 0.0000 0.0139 -vn 0.0887 0.9921 0.0887 -vn 0.6124 0.5000 -0.6124 -vn 0.6501 0.5268 -0.5476 -vn 0.5829 -0.4652 -0.6661 -vn -0.6661 -0.4652 0.5829 -vn -0.0963 -0.9907 -0.0963 -vn -0.5476 0.5268 0.6501 -vn -0.6124 -0.5000 0.6124 -vn -0.6124 0.5000 0.6124 -vn 0.6124 -0.5000 -0.6124 -vn 0.7841 0.4827 -0.3901 -vn 0.4846 -0.3745 -0.7905 -vn -0.3535 -0.8660 -0.3535 -vn -0.7905 -0.3745 0.4846 -vn -0.3901 0.4827 0.7841 -vn 0.6124 0.5000 0.6124 -vn 0.3535 0.8660 0.3535 -vn 0.9284 0.2786 -0.2458 -vn 0.3727 -0.2162 -0.9024 -vn -0.9024 -0.2162 0.3727 -vn 0.6830 0.2588 0.6830 -vn 0.9704 0.1477 -0.1909 -vn 0.3295 -0.1151 -0.9371 -vn -0.6124 -0.5000 -0.6124 -vn -0.6830 -0.2588 -0.6830 -vn -0.1909 0.1477 0.9704 -vn -0.2458 0.2786 0.9284 -vn -0.9371 -0.1151 0.3295 -vn 0.9239 0.0000 0.3827 -vn -0.9239 0.0000 0.3827 -vn 0.9239 0.0000 -0.3827 +vn 0.6533 0.7071 -0.2706 +vn 0.7071 0.7071 -0.0000 +vn 0.6533 0.7071 0.2706 vn 0.5000 0.7071 0.5000 +vn 0.2706 0.7071 0.6533 +vn -0.0000 0.7071 0.7071 +vn -0.2706 0.7071 0.6533 +vn -0.5000 0.7071 0.5000 +vn -0.6533 0.7071 0.2706 +vn -0.7071 0.7071 -0.0000 +vn -0.6533 0.7071 -0.2706 vn -0.5000 0.7071 -0.5000 -vn -0.0887 0.9921 -0.0887 -vn -0.5829 -0.4652 0.6661 -vn -0.6501 0.5268 0.5476 -vn 0.6661 -0.4652 -0.5829 -vn 0.0963 -0.9907 0.0963 -vn 0.5476 0.5268 -0.6501 -vn -0.3535 0.8660 -0.3535 -vn -0.4846 -0.3745 0.7905 -vn 0.3535 -0.8660 0.3535 -vn 0.7905 -0.3745 -0.4846 -vn -0.6124 0.5000 -0.6124 -vn -0.7841 0.4827 0.3901 -vn -0.9284 0.2786 0.2458 -vn -0.3727 -0.2162 0.9024 -vn 0.6124 -0.5000 0.6124 -vn 0.9024 -0.2162 -0.3727 -vn 0.3901 0.4827 -0.7841 -vn -0.6830 0.2588 -0.6830 -vn -0.9704 0.1477 0.1909 -vn 0.6830 -0.2588 0.6830 -vn 0.9371 -0.1151 -0.3295 -vn 0.1909 0.1477 -0.9704 -vn 0.2458 0.2786 -0.9284 -vn -0.3295 -0.1151 0.9371 -s off -f 347/49/21 348/50/21 35/51/21 -f 351/52/22 352/53/22 39/54/22 -f 343/55/23 344/56/23 37/57/23 -f 355/58/24 356/59/24 33/60/24 -f 39/61/25 33/60/25 35/62/25 -f 52/63/26 95/64/26 54/65/26 -f 49/66/25 76/67/25 47/68/25 -f 57/69/25 82/70/25 81/71/25 -f 67/72/25 87/73/25 86/74/25 -f 45/75/25 74/76/25 43/77/25 -f 53/78/25 80/79/25 79/80/25 -f 65/81/25 84/82/25 63/83/25 -f 51/84/25 77/85/25 49/86/25 -f 61/87/25 82/88/25 59/89/25 -f 69/90/25 88/91/25 87/92/25 -f 47/93/25 75/94/25 45/95/25 -f 57/96/25 80/97/25 55/98/25 -f 43/99/25 73/100/25 41/101/25 -f 65/102/25 86/103/25 85/104/25 -f 51/105/25 79/106/25 78/107/25 -f 63/108/25 83/109/25 61/110/25 -f 71/111/25 73/112/25 88/113/25 -f 64/114/26 99/115/26 100/116/26 -f 72/117/26 90/118/26 42/119/26 -f 48/120/26 93/121/26 50/122/26 -f 58/123/26 98/124/26 60/125/26 -f 68/126/26 103/127/26 70/128/26 -f 46/129/26 89/130/26 91/131/26 -f 54/132/26 96/133/26 56/134/26 -f 66/135/26 100/136/26 101/137/26 -f 50/138/26 94/139/26 52/140/26 -f 62/141/26 98/142/26 99/143/26 -f 70/144/26 104/145/26 72/146/26 -f 46/147/26 92/148/26 48/149/26 -f 58/150/26 96/151/26 97/152/26 -f 44/153/26 90/154/26 89/155/26 -f 68/156/26 101/157/26 102/158/26 -f 115/159/26 111/160/26 107/161/26 -f 143/162/26 141/163/26 139/164/26 -f 163/165/26 166/166/26 164/167/26 -f 330/168/24 340/169/24 332/170/24 -f 187/171/26 190/172/26 188/173/26 -f 325/174/23 337/175/23 329/176/23 -f 339/177/21 328/178/21 331/179/21 -f 335/180/22 326/181/22 327/182/22 -f 255/183/27 254/184/27 256/185/27 -f 255/183/28 260/186/28 259/187/28 -f 253/188/29 258/189/29 254/184/29 -f 255/183/30 257/190/30 253/188/30 -f 296/191/26 295/192/26 294/193/26 -f 306/194/26 304/195/26 302/196/26 -f 312/197/26 311/198/26 310/199/26 -f 322/200/26 320/201/26 318/202/26 -f 348/203/21 347/204/21 379/205/21 -f 346/206/21 345/207/21 377/208/21 -f 356/209/24 355/210/24 387/211/24 -f 354/212/24 353/213/24 385/214/24 -f 344/215/23 343/216/23 375/217/23 -f 342/218/23 341/219/23 373/220/23 -f 352/221/22 351/222/22 383/223/22 -f 350/224/22 349/225/22 381/226/22 -f 412/227/31 364/228/31 380/229/31 -f 379/205/32 412/227/32 380/229/32 -f 411/230/33 363/231/33 407/232/33 -f 410/233/31 362/234/31 378/235/31 -f 377/208/32 410/233/32 378/235/32 -f 409/236/33 361/237/33 405/238/33 -f 401/239/34 372/240/34 388/241/34 -f 402/242/35 388/241/35 387/211/35 -f 402/242/31 371/243/31 398/244/31 -f 403/245/34 370/246/34 386/247/34 -f 404/248/35 386/247/35 385/214/35 -f 404/248/31 369/249/31 400/250/31 -f 418/251/34 359/252/34 414/253/34 -f 375/217/36 417/254/36 376/255/36 -f 417/254/37 360/256/37 376/255/37 -f 419/257/37 358/258/37 374/259/37 -f 420/260/36 374/259/36 373/220/36 -f 420/260/34 357/261/34 416/262/34 -f 396/263/33 368/264/33 384/265/33 -f 383/223/38 396/263/38 384/265/38 -f 395/266/37 367/267/37 391/268/37 -f 394/269/33 366/270/33 382/271/33 -f 381/226/38 394/269/38 382/271/38 -f 393/272/37 365/273/37 389/274/37 -f 367/275/21 351/222/21 391/276/21 -f 366/277/23 390/278/23 350/224/23 -f 364/279/22 408/280/22 348/203/22 -f 357/281/22 341/219/22 416/282/22 -f 368/283/23 392/284/23 352/221/23 -f 359/285/22 343/216/22 414/286/22 -f 358/287/24 415/288/24 342/218/24 -f 360/289/24 413/290/24 344/215/24 -f 369/291/23 353/213/23 400/292/23 -f 371/293/23 355/210/23 398/294/23 -f 370/295/21 399/296/21 354/212/21 -f 372/297/21 397/298/21 356/209/21 -f 361/299/24 345/207/24 405/300/24 -f 363/301/24 347/204/24 407/302/24 -f 362/303/22 406/304/22 346/206/22 -f 365/305/21 349/225/21 389/306/21 -f 390/307/26 351/308/26 350/309/26 -f 346/310/26 407/311/26 347/312/26 -f 399/313/26 355/58/26 354/314/26 -f 342/315/26 414/316/26 343/317/26 -f 416/318/26 341/319/26 40/320/26 -f 389/321/26 349/322/26 36/323/26 -f 405/324/26 345/325/26 34/326/26 -f 400/327/26 353/328/26 38/329/26 -f 400/330/22 403/245/22 404/248/22 -f 395/266/24 392/331/24 396/263/24 -f 418/251/21 413/332/21 417/254/21 -f 416/333/21 419/257/21 420/260/21 -f 389/334/24 394/269/24 393/272/24 -f 411/230/23 408/335/23 412/227/23 -f 405/336/23 410/233/23 409/236/23 -f 402/242/22 397/337/22 401/239/22 -f 414/316/26 415/338/26 406/339/26 -f 423/340/39 422/341/39 424/342/39 -f 423/340/29 428/343/29 427/344/29 -f 421/345/28 426/346/28 422/341/28 -f 423/340/40 425/347/40 421/345/40 -f 448/348/26 447/349/26 451/350/26 -f 471/351/26 474/352/26 472/353/26 -f 35/51/21 33/354/21 346/355/21 -f 33/354/21 34/356/21 345/357/21 -f 345/357/21 346/355/21 33/354/21 -f 346/355/21 347/49/21 35/51/21 -f 348/50/21 36/358/21 35/51/21 -f 39/54/22 35/359/22 350/360/22 -f 35/359/22 36/361/22 349/362/22 -f 349/362/22 350/360/22 35/359/22 -f 350/360/22 351/52/22 39/54/22 -f 352/53/22 40/363/22 39/54/22 -f 37/57/23 39/364/23 342/365/23 -f 39/364/23 40/366/23 341/367/23 -f 341/367/23 342/365/23 39/364/23 -f 342/365/23 343/55/23 37/57/23 -f 344/56/23 38/368/23 37/57/23 -f 33/60/24 37/369/24 354/314/24 -f 37/369/24 38/329/24 353/328/24 -f 353/328/24 354/314/24 37/369/24 -f 354/314/24 355/58/24 33/60/24 -f 356/59/24 34/326/24 33/60/24 -f 39/61/25 37/369/25 33/60/25 -f 52/63/26 94/370/26 95/64/26 -f 49/66/25 77/371/25 76/67/25 -f 57/69/25 59/372/25 82/70/25 -f 67/72/25 69/373/25 87/73/25 -f 45/75/25 75/374/25 74/76/25 -f 53/78/25 55/375/25 80/79/25 -f 65/81/25 85/376/25 84/82/25 -f 51/84/25 78/377/25 77/85/25 -f 61/87/25 83/378/25 82/88/25 -f 69/90/25 71/379/25 88/91/25 -f 47/93/25 76/380/25 75/94/25 -f 57/96/25 81/381/25 80/97/25 -f 43/99/25 74/382/25 73/100/25 -f 65/102/25 67/383/25 86/103/25 -f 51/105/25 53/384/25 79/106/25 -f 63/108/25 84/385/25 83/109/25 -f 71/111/25 41/386/25 73/112/25 -f 64/114/26 62/387/26 99/115/26 -f 72/117/26 104/388/26 90/118/26 -f 48/120/26 92/389/26 93/121/26 -f 58/123/26 97/390/26 98/124/26 -f 68/126/26 102/391/26 103/127/26 -f 46/129/26 44/392/26 89/130/26 -f 54/132/26 95/393/26 96/133/26 -f 66/135/26 64/394/26 100/136/26 -f 50/138/26 93/395/26 94/139/26 -f 62/141/26 60/396/26 98/142/26 -f 70/144/26 103/397/26 104/145/26 -f 46/147/26 91/398/26 92/148/26 -f 58/150/26 56/399/26 96/151/26 -f 44/153/26 42/400/26 90/154/26 -f 68/156/26 66/401/26 101/157/26 -f 107/161/26 105/402/26 106/403/26 -f 106/403/26 120/404/26 107/161/26 -f 120/404/26 119/405/26 107/161/26 -f 119/405/26 118/406/26 115/159/26 -f 118/406/26 117/407/26 115/159/26 -f 117/407/26 116/408/26 115/159/26 -f 115/159/26 114/409/26 113/410/26 -f 113/410/26 112/411/26 111/160/26 -f 111/160/26 110/412/26 109/413/26 -f 109/413/26 108/414/26 107/161/26 -f 115/159/26 113/410/26 111/160/26 -f 111/160/26 109/413/26 107/161/26 -f 107/161/26 119/405/26 115/159/26 -f 139/164/26 122/415/26 121/416/26 -f 121/416/26 144/417/26 143/162/26 -f 143/162/26 142/418/26 141/163/26 -f 141/163/26 140/419/26 139/164/26 -f 139/164/26 121/416/26 143/162/26 -f 163/165/26 146/420/26 168/421/26 -f 146/420/26 145/422/26 168/421/26 -f 168/421/26 167/423/26 163/165/26 -f 167/423/26 166/166/26 163/165/26 -f 166/166/26 165/424/26 164/167/26 -f 330/168/24 338/425/24 340/169/24 -f 187/171/26 170/426/26 192/427/26 -f 170/426/26 169/428/26 192/427/26 -f 192/427/26 191/429/26 187/171/26 -f 191/429/26 190/172/26 187/171/26 -f 190/172/26 189/430/26 188/173/26 -f 325/174/23 333/431/23 337/175/23 -f 339/177/21 336/432/21 328/178/21 -f 335/180/22 334/433/22 326/181/22 -f 255/183/27 253/188/27 254/184/27 -f 255/183/28 256/185/28 260/186/28 -f 253/188/29 257/434/29 258/189/29 -f 255/183/30 259/435/30 257/190/30 -f 294/193/26 293/436/26 298/437/26 -f 293/436/26 300/438/26 298/437/26 -f 300/438/26 299/439/26 298/437/26 -f 298/437/26 297/440/26 294/193/26 -f 297/440/26 296/191/26 294/193/26 -f 302/196/26 301/441/26 308/442/26 -f 308/442/26 307/443/26 302/196/26 -f 307/443/26 306/194/26 302/196/26 -f 306/194/26 305/444/26 304/195/26 -f 304/195/26 303/445/26 302/196/26 -f 310/199/26 309/446/26 314/447/26 -f 309/446/26 316/448/26 314/447/26 -f 316/448/26 315/449/26 314/447/26 -f 314/447/26 313/450/26 310/199/26 -f 313/450/26 312/197/26 310/199/26 -f 318/202/26 317/451/26 324/452/26 -f 324/452/26 323/453/26 318/202/26 -f 323/453/26 322/200/26 318/202/26 -f 322/200/26 321/454/26 320/201/26 -f 320/201/26 319/455/26 318/202/26 -f 347/204/21 363/301/21 379/205/21 -f 379/205/21 380/229/21 348/203/21 -f 380/229/21 364/279/21 348/203/21 -f 345/207/21 361/299/21 377/208/21 -f 377/208/21 378/235/21 346/206/21 -f 378/235/21 362/303/21 346/206/21 -f 355/210/24 371/293/24 387/211/24 -f 387/211/24 388/241/24 356/209/24 -f 388/241/24 372/297/24 356/209/24 -f 353/213/24 369/291/24 385/214/24 -f 385/214/24 386/247/24 354/212/24 -f 386/247/24 370/295/24 354/212/24 -f 343/216/23 359/285/23 375/217/23 -f 375/217/23 376/255/23 344/215/23 -f 376/255/23 360/289/23 344/215/23 -f 341/219/23 357/281/23 373/220/23 -f 373/220/23 374/259/23 342/218/23 -f 374/259/23 358/287/23 342/218/23 -f 351/222/22 367/275/22 383/223/22 -f 383/223/22 384/265/22 352/221/22 -f 384/265/22 368/283/22 352/221/22 -f 349/225/22 365/305/22 381/226/22 -f 381/226/22 382/271/22 350/224/22 -f 382/271/22 366/277/22 350/224/22 -f 412/227/31 408/456/31 364/228/31 -f 379/205/32 411/230/32 412/227/32 -f 411/230/33 379/205/33 363/231/33 -f 410/233/31 406/457/31 362/234/31 -f 377/208/32 409/236/32 410/233/32 -f 409/236/33 377/208/33 361/237/33 -f 401/239/34 397/458/34 372/240/34 -f 402/242/35 401/239/35 388/241/35 -f 402/242/31 387/211/31 371/243/31 -f 403/245/34 399/459/34 370/246/34 -f 404/248/35 403/245/35 386/247/35 -f 404/248/31 385/214/31 369/249/31 -f 418/251/34 375/217/34 359/252/34 -f 375/217/36 418/251/36 417/254/36 -f 417/254/37 413/460/37 360/256/37 -f 419/257/37 415/461/37 358/258/37 -f 420/260/36 419/257/36 374/259/36 -f 420/260/34 373/220/34 357/261/34 -f 396/263/33 392/462/33 368/264/33 -f 383/223/38 395/266/38 396/263/38 -f 395/266/37 383/223/37 367/267/37 -f 394/269/33 390/463/33 366/270/33 -f 381/226/38 393/272/38 394/269/38 -f 393/272/37 381/226/37 365/273/37 -f 390/307/26 391/464/26 351/308/26 -f 346/310/26 406/339/26 407/311/26 -f 399/313/26 398/465/26 355/58/26 -f 342/315/26 415/338/26 414/316/26 -f 40/320/26 352/466/26 392/467/26 -f 392/467/26 416/318/26 40/320/26 -f 36/323/26 348/468/26 408/469/26 -f 408/469/26 389/321/26 36/323/26 -f 34/326/26 356/59/26 397/470/26 -f 397/470/26 405/324/26 34/326/26 -f 38/329/26 344/471/26 413/472/26 -f 413/472/26 400/327/26 38/329/26 -f 400/330/22 399/473/22 403/245/22 -f 395/266/24 391/474/24 392/331/24 -f 418/251/21 414/475/21 413/332/21 -f 416/333/21 415/476/21 419/257/21 -f 389/334/24 390/477/24 394/269/24 -f 411/230/23 407/478/23 408/335/23 -f 405/336/23 406/479/23 410/233/23 -f 402/242/22 398/480/22 397/337/22 -f 392/467/26 391/464/26 416/318/26 -f 391/464/26 390/307/26 415/338/26 -f 416/318/26 391/464/26 415/338/26 -f 390/307/26 389/321/26 408/469/26 -f 390/307/26 408/469/26 407/311/26 -f 390/307/26 407/311/26 415/338/26 -f 407/311/26 406/339/26 415/338/26 -f 406/339/26 405/324/26 397/470/26 -f 398/465/26 399/313/26 406/339/26 -f 399/313/26 400/327/26 414/316/26 -f 406/339/26 399/313/26 414/316/26 -f 406/339/26 397/470/26 398/465/26 -f 400/327/26 413/472/26 414/316/26 -f 423/340/39 421/345/39 422/341/39 -f 423/340/29 424/342/29 428/343/29 -f 421/345/28 425/481/28 426/346/28 -f 423/340/40 427/482/40 425/347/40 -f 447/349/26 430/483/26 452/484/26 -f 430/483/26 429/485/26 452/484/26 -f 452/484/26 451/350/26 447/349/26 -f 451/350/26 450/486/26 448/348/26 -f 450/486/26 449/487/26 448/348/26 -f 471/351/26 454/488/26 476/489/26 -f 454/488/26 453/490/26 476/489/26 -f 476/489/26 475/491/26 471/351/26 -f 475/491/26 474/352/26 471/351/26 -f 474/352/26 473/492/26 472/353/26 +vn 0.2706 0.7071 -0.6533 +vn -0.0000 1.0000 -0.0000 +vn 0.0203 -0.0000 -0.9998 +vn 0.5175 -0.0000 -0.8557 +vn 0.8760 -0.0000 -0.4823 +vn 0.9998 -0.0000 0.0203 +vn 0.8557 -0.0000 0.5175 +vn 0.4823 -0.0000 0.8760 +vn -0.0203 -0.0000 0.9998 +vn -0.5175 -0.0000 0.8557 +vn -0.8760 -0.0000 0.4823 +vn -0.9998 -0.0000 -0.0203 +vn -0.8557 -0.0000 -0.5175 +vn -0.4823 -0.0000 -0.8760 +vn -0.0000 -1.0000 -0.0000 +vn -0.1951 -0.0000 0.9808 +vn -0.9808 -0.0000 0.1951 +vn -0.1951 -0.0000 -0.9808 +vn 0.9808 -0.0000 0.1951 +vn 0.1951 -0.0000 0.9808 +vn 0.1951 -0.0000 -0.9808 +vn 0.9808 -0.0000 -0.1951 +vn -0.9808 -0.0000 -0.1951 +vn 0.5774 0.5774 -0.5774 +vn 0.5774 0.5773 -0.5774 +vn -0.5774 0.5774 0.5774 +vn -0.5774 0.5773 0.5774 +vn 0.5774 0.5774 0.5774 +vn 0.5774 0.5773 0.5774 +vn -0.5774 0.5774 -0.5774 +vn -0.5774 0.5773 -0.5774 +vn 0.1379 0.7071 -0.6935 +vn -0.1379 0.7071 0.6935 +vn -0.1380 0.7071 0.6935 +vn 0.1379 -0.7071 -0.6935 +vn 0.1380 0.7071 -0.6935 +vn -0.1379 -0.7071 0.6935 +vn 0.6935 0.7071 0.1379 +vn -0.6935 0.7071 -0.1379 +vn 0.6935 -0.7071 0.1379 +vn -0.6935 -0.7071 -0.1379 +vn -0.5547 0.8321 -0.0000 +vn -0.0000 0.8321 -0.5547 +vn 0.5547 0.8321 -0.0000 +vn -0.0000 0.8321 0.5547 +vn 0.6661 0.6303 -0.3987 +vn -0.0104 0.9876 -0.1568 +vn 0.6527 0.4617 -0.6006 +vn -0.0377 0.9975 -0.0600 +vn -0.8329 0.4617 -0.3051 +vn -0.1132 0.7168 -0.6880 +vn 0.5809 0.1363 -0.8025 +vn -0.8438 0.1363 -0.5191 +vn -0.2412 0.0196 -0.9703 +vn 0.5191 -0.1363 -0.8438 +vn -0.2600 0.0671 -0.9633 +vn 0.3051 -0.4617 -0.8329 +vn -0.8381 0.1448 -0.5260 +vn -0.0080 -0.6737 -0.7389 +vn -0.6485 0.5294 -0.5470 +vn -0.2140 0.0473 -0.9757 +vn -0.2022 -0.7180 -0.6660 +vn -0.2745 0.7194 -0.6381 +vn 0.5197 0.0747 -0.8511 +vn 0.6052 0.0955 -0.7903 +vn -0.3279 -0.7180 -0.6140 +vn -0.3279 0.7180 -0.6140 +vn -0.3878 0.7249 -0.5693 +vn -0.4418 -0.7180 -0.5379 +vn -0.5799 0.7125 -0.3950 +vn -0.5379 -0.7180 -0.4418 +vn -0.5379 0.7180 -0.4418 +vn -0.6192 -0.2850 -0.7317 +vn -0.6359 -0.7263 -0.2610 +vn -0.8686 -0.4712 -0.1532 +vn -0.6404 -0.7574 0.1274 +vn -0.6359 0.7263 -0.2610 +vn -0.5673 -0.7311 0.3790 +vn -0.5673 0.7311 0.3791 +vn -0.8535 0.0462 0.5191 +vn -0.6404 0.7574 0.1274 +vn 0.0853 0.9947 -0.0570 +vn 0.0930 0.9955 -0.0185 +vn 0.6435 0.6333 -0.4300 +vn 0.0502 0.9987 0.0100 +vn 0.7342 0.6630 -0.1460 +vn 0.5563 0.6942 0.4568 +vn 0.0172 0.9997 0.0172 +vn -0.4418 0.7180 -0.5379 +vn 0.0093 0.9997 0.0225 +vn 0.4568 0.6942 0.5563 +vn 0.2092 0.6942 0.6887 +vn -0.2023 0.7180 -0.6660 +vn -0.1830 0.9824 0.0364 +vn -0.3898 0.5294 0.7535 +vn -0.6935 0.7071 0.1380 +vn -0.5730 0.1448 0.8067 +vn -0.9636 0.1866 0.1917 +vn -0.5260 -0.1448 0.8381 +vn -0.9703 -0.0196 0.2412 +vn -0.9633 -0.0671 0.2600 +vn -0.9679 -0.0948 0.2326 +vn -0.5470 -0.5294 0.6485 +vn -0.7680 0.6303 -0.1134 +vn 0.0747 -0.9239 0.3753 +vn -0.5633 -0.7150 0.4140 +vn 0.7535 -0.5294 0.3898 +vn 0.1379 -0.7071 0.6935 +vn 0.8067 -0.1448 0.5730 +vn 0.1917 -0.1866 0.9636 +vn 0.8025 -0.1363 0.5809 +vn 0.1485 0.0196 0.9887 +vn 0.6006 -0.4617 0.6527 +vn 0.1284 0.0671 0.9894 +vn 0.2754 -0.6737 0.6858 +vn 0.1756 0.0473 0.9833 +vn -0.0094 0.7194 0.6946 +vn 0.2092 -0.6942 0.6887 +vn 0.2881 -0.0000 0.9576 +vn 0.3391 -0.6942 0.6349 +vn 0.4734 -0.0000 0.8809 +vn 0.3391 0.6942 0.6349 +vn 0.4568 -0.6942 0.5563 +vn 0.6326 -0.0000 0.7744 +vn 0.5563 -0.6942 0.4568 +vn 0.7744 -0.0000 0.6326 +vn 0.6785 -0.6794 0.2793 +vn 0.9205 -0.0000 0.3907 +vn 0.6785 0.6794 0.2793 +vn 0.7342 -0.6630 -0.1460 +vn 0.6435 -0.6333 -0.4300 +vn 0.8315 -0.0000 -0.5556 +vn 0.0853 -0.9947 -0.0570 +vn 0.0930 -0.9955 -0.0185 +vn 0.0502 -0.9987 0.0100 +vn 0.0172 -0.9997 0.0172 +vn 0.0093 -0.9997 0.0225 +vn -0.2894 -0.9565 0.0359 +vn -0.0101 -0.9846 -0.1748 +vn 0.9848 -0.1268 -0.1191 +vn 0.9887 -0.0196 -0.1485 +vn 0.9894 -0.0671 -0.1284 +vn 0.9833 -0.0948 -0.1556 +vn 0.6789 -0.7150 0.1669 +vn -0.6233 -0.6303 0.4628 +vn -0.0502 0.9982 -0.0336 +vn -0.8047 -0.4617 0.3732 +vn -0.0100 0.9987 -0.0504 +vn 0.0369 -0.4617 -0.8863 +vn -0.6123 0.6931 -0.3803 +vn -0.9637 -0.1363 0.2296 +vn -0.1567 -0.1363 -0.9782 +vn -0.9782 0.1363 0.1567 +vn -0.8041 -0.0196 -0.5942 +vn -0.7905 -0.0671 -0.6088 +vn -0.8862 0.4618 -0.0368 +vn -0.1652 -0.1448 -0.9756 +vn -0.8195 -0.0473 -0.5711 +vn -0.6796 0.6737 -0.2902 +vn -0.2572 -0.5294 -0.8085 +vn -0.9262 -0.3535 -0.1312 +vn -0.4844 0.7263 -0.4876 +vn -0.4845 -0.7194 -0.4978 +vn 0.5559 -0.2962 0.7767 +vn -0.1274 0.7573 -0.6405 +vn -0.1274 -0.7574 -0.6404 +vn 0.0301 -0.7465 0.6647 +vn 0.1331 0.7311 -0.6692 +vn 0.1331 -0.7311 -0.6691 +vn -0.0200 -0.9947 0.1006 +vn 0.0185 -0.9955 0.0930 +vn -0.1510 -0.6333 0.7591 +vn 0.0284 -0.9987 0.0426 +vn 0.1460 -0.6630 0.7342 +vn -0.4845 -0.7263 -0.4876 +vn 0.6453 -0.7194 0.2571 +vn 0.1036 -0.9824 -0.1551 +vn 0.8454 -0.5294 -0.0718 +vn 0.3928 -0.7071 -0.5879 +vn 0.9645 -0.1448 -0.2207 +vn 0.5458 -0.1866 -0.8169 +vn 0.9756 0.1448 -0.1652 +vn 0.5942 0.0196 -0.8041 +vn 0.8085 0.5294 -0.2572 +vn 0.6088 0.0671 -0.7905 +vn 0.5853 0.0948 -0.8053 +vn 0.1891 -0.6303 -0.7529 +vn 0.5981 0.7150 -0.3620 +vn 0.5879 0.7071 0.3928 +vn -0.1056 0.7150 0.6911 +vn 0.3182 0.9239 0.2126 +vn 0.2207 0.1448 0.9645 +vn 0.8169 0.1866 0.5458 +vn 0.2296 0.1363 0.9637 +vn 0.8567 -0.0196 0.5155 +vn 0.3732 0.4617 0.8047 +vn 0.8650 -0.0671 0.4973 +vn 0.8413 -0.0473 0.5386 +vn 0.5177 0.6794 0.5200 +vn 0.7132 -0.0000 0.7009 +vn 0.5177 -0.6794 0.5200 +vn 0.1460 0.6630 0.7342 +vn -0.1510 0.6333 0.7591 +vn 0.0185 0.9955 0.0930 +vn -0.0200 0.9947 0.1006 +vn 0.0284 0.9987 0.0426 +vn -0.1958 0.9802 0.0285 +vn 0.5282 0.6737 0.5168 +vn -0.4576 0.8872 0.0591 +vn -0.3875 0.7470 0.5402 +vn -0.5155 0.0196 0.8567 +vn -0.4973 0.0671 0.8650 +vn 0.0718 0.5294 0.8454 +vn -0.5200 0.0948 0.8489 +vn -0.3987 0.6303 -0.6661 +vn 0.4349 0.9004 0.0134 +vn -0.6006 0.4617 -0.6527 +vn 0.1147 0.9925 0.0415 +vn -0.3051 0.4617 0.8329 +vn -0.6880 0.7168 0.1132 +vn -0.8025 0.1363 -0.5809 +vn -0.5191 0.1363 0.8438 +vn -0.8438 -0.1363 -0.5191 +vn -0.9703 0.0196 0.2412 +vn -0.9633 0.0671 0.2600 +vn -0.8329 -0.4617 -0.3051 +vn -0.5260 0.1448 0.8381 +vn -0.7389 -0.6737 0.0080 +vn -0.5470 0.5294 0.6485 +vn -0.9757 0.0473 0.2140 +vn -0.7859 -0.0309 -0.6176 +vn -0.6660 -0.7180 0.2022 +vn -0.6381 0.7194 0.2745 +vn -0.6060 -0.0995 -0.7892 +vn -0.6140 -0.7180 0.3279 +vn -0.6140 0.7180 0.3279 +vn -0.5693 0.7250 0.3878 +vn -0.5379 -0.7180 0.4418 +vn -0.3950 0.7125 0.5799 +vn -0.4418 -0.7180 0.5379 +vn -0.4418 0.7180 0.5379 +vn -0.8487 -0.1191 0.5153 +vn -0.2610 -0.7263 0.6359 +vn -0.5972 -0.0586 0.8000 +vn 0.1274 -0.7574 0.6404 +vn -0.2610 0.7263 0.6359 +vn 0.3790 -0.7311 0.5673 +vn 0.3791 0.7311 0.5673 +vn 0.4328 0.2521 0.8655 +vn 0.1274 0.7574 0.6404 +vn -0.0570 0.9947 -0.0853 +vn -0.0185 0.9955 -0.0930 +vn -0.4300 0.6333 -0.6435 +vn 0.2793 0.6794 -0.6785 +vn 0.0100 0.9987 -0.0502 +vn 0.4568 0.6942 -0.5563 +vn 0.0172 0.9997 -0.0172 +vn -0.5379 0.7180 0.4418 +vn 0.0225 0.9997 -0.0093 +vn 0.5563 0.6942 -0.4568 +vn 0.6887 0.6942 -0.2092 +vn -0.6660 0.7180 0.2023 +vn 0.0364 0.9824 0.1830 +vn 0.7535 0.5294 0.3898 +vn 0.1380 0.7071 0.6935 +vn 0.8067 0.1448 0.5730 +vn 0.1917 0.1866 0.9636 +vn 0.8381 -0.1448 0.5260 +vn 0.2412 -0.0196 0.9703 +vn 0.6485 -0.5294 0.5470 +vn 0.2600 -0.0671 0.9633 +vn 0.2326 -0.0948 0.9679 +vn -0.1134 0.6303 0.7680 +vn 0.4140 -0.7150 0.5633 +vn 0.6935 -0.7071 -0.1380 +vn 0.3753 -0.9239 -0.0747 +vn 0.3898 -0.5294 -0.7535 +vn 0.5730 -0.1448 -0.8067 +vn 0.9636 -0.1866 -0.1917 +vn 0.5809 -0.1363 -0.8025 +vn 0.9887 0.0196 -0.1485 +vn 0.6527 -0.4617 -0.6006 +vn 0.9894 0.0671 -0.1284 +vn 0.6858 -0.6737 -0.2754 +vn 0.9833 0.0473 -0.1756 +vn 0.6946 0.7194 0.0094 +vn 0.6887 -0.6942 -0.2092 +vn 0.9576 -0.0000 -0.2881 +vn 0.6349 -0.6942 -0.3391 +vn 0.8809 -0.0000 -0.4734 +vn 0.6349 0.6942 -0.3391 +vn 0.5563 -0.6942 -0.4568 +vn 0.7744 -0.0000 -0.6326 +vn 0.4568 -0.6942 -0.5563 +vn 0.6326 -0.0000 -0.7744 +vn 0.2793 -0.6794 -0.6785 +vn 0.3907 -0.0000 -0.9205 +vn -0.1460 -0.6630 -0.7342 +vn -0.1460 0.6630 -0.7342 +vn -0.4300 -0.6333 -0.6435 +vn -0.5556 -0.0000 -0.8315 +vn -0.0185 -0.9955 -0.0930 +vn -0.0570 -0.9947 -0.0853 +vn 0.0100 -0.9987 -0.0502 +vn 0.0172 -0.9997 -0.0172 +vn 0.0225 -0.9997 -0.0093 +vn 0.1117 -0.9858 0.1257 +vn -0.0452 -0.9544 -0.2951 +vn -0.1895 0.5541 -0.8106 +vn -0.1485 -0.0196 -0.9887 +vn -0.1284 -0.0671 -0.9894 +vn -0.1556 -0.0948 -0.9833 +vn 0.1669 -0.7150 -0.6789 +vn 0.4628 -0.6303 0.6233 +vn -0.0336 0.9982 0.0502 +vn 0.3732 -0.4617 0.8047 +vn -0.0504 0.9987 0.0100 +vn -0.8863 -0.4617 -0.0368 +vn -0.3803 0.6931 0.6123 +vn 0.2296 -0.1363 0.9637 +vn -0.9782 -0.1363 0.1567 +vn 0.1567 0.1363 0.9782 +vn -0.5942 -0.0196 0.8041 +vn -0.6088 -0.0671 0.7905 +vn -0.0369 0.4618 0.8862 +vn -0.9756 -0.1448 0.1652 +vn -0.2902 0.6737 0.6796 +vn -0.8085 -0.5294 0.2572 +vn -0.5711 -0.0473 0.8195 +vn -0.4876 0.7263 0.4844 +vn -0.4978 -0.7194 0.4845 +vn -0.3708 0.9065 0.2017 +vn 0.7230 0.0900 -0.6849 +vn 0.8841 -0.1624 -0.4383 +vn -0.6692 0.7311 -0.1331 +vn -0.6691 -0.7311 -0.1332 +vn 0.1006 -0.9947 0.0200 +vn 0.7591 -0.6333 0.1510 +vn 0.0426 -0.9987 -0.0284 +vn -0.4876 -0.7263 0.4845 +vn 0.2571 -0.7194 -0.6453 +vn -0.1551 -0.9824 -0.1036 +vn -0.0718 -0.5294 -0.8454 +vn -0.5879 -0.7071 -0.3928 +vn -0.2207 -0.1448 -0.9645 +vn -0.8169 -0.1866 -0.5458 +vn -0.1652 0.1448 -0.9756 +vn -0.8041 0.0196 -0.5942 +vn -0.2572 0.5294 -0.8085 +vn -0.7905 0.0671 -0.6088 +vn -0.8053 0.0948 -0.5853 +vn -0.7529 -0.6303 -0.1891 +vn -0.3620 0.7150 -0.5981 +vn 0.3928 0.7071 -0.5879 +vn 0.6911 0.7150 0.1056 +vn 0.2126 0.9239 -0.3182 +vn 0.9645 0.1448 -0.2207 +vn 0.5458 0.1866 -0.8169 +vn 0.9637 0.1363 -0.2296 +vn 0.5155 -0.0196 -0.8567 +vn 0.8047 0.4617 -0.3732 +vn 0.4973 -0.0671 -0.8650 +vn 0.5168 0.6737 -0.5282 +vn 0.5386 -0.0473 -0.8413 +vn 0.5200 0.6794 -0.5177 +vn 0.7009 -0.0000 -0.7132 +vn 0.5200 -0.6794 -0.5177 +vn 0.7591 0.6333 0.1510 +vn 0.1006 0.9947 0.0200 +vn 0.0426 0.9987 -0.0284 +vn -0.0000 0.9348 -0.3552 +vn 0.0887 0.9881 0.1260 +vn 0.5402 0.7470 0.3875 +vn 0.8567 0.0196 0.5155 +vn 0.8650 0.0671 0.4973 +vn 0.8454 0.5294 -0.0718 +vn 0.8489 0.0948 0.5200 +vn -0.6661 0.6303 0.3987 +vn 0.0104 0.9991 0.0420 +vn -0.6527 0.4617 0.6006 +vn 0.0377 0.9966 -0.0730 +vn 0.8329 0.4617 0.3051 +vn 0.1132 0.7168 0.6880 +vn -0.5809 0.1363 0.8025 +vn 0.8438 0.1363 0.5191 +vn 0.2412 0.0196 0.9703 +vn -0.5191 -0.1363 0.8438 +vn 0.2600 0.0671 0.9633 +vn -0.3051 -0.4617 0.8329 +vn 0.8381 0.1448 0.5260 +vn 0.0080 -0.6737 0.7389 +vn 0.6485 0.5294 0.5470 +vn 0.2140 0.0473 0.9757 +vn 0.2022 -0.7180 0.6660 +vn 0.2745 0.7194 0.6381 +vn -0.6388 0.0173 0.7692 +vn -0.8420 -0.0172 0.5391 +vn 0.3279 -0.7180 0.6140 +vn 0.3279 0.7180 0.6140 +vn 0.3878 0.7249 0.5693 +vn 0.4418 -0.7180 0.5379 +vn 0.5799 0.7125 0.3950 +vn 0.5379 -0.7180 0.4418 +vn 0.5379 0.7180 0.4418 +vn 0.5483 -0.0064 0.8363 +vn 0.6359 -0.7263 0.2610 +vn 0.6639 -0.0490 0.7462 +vn 0.6404 -0.7574 -0.1274 +vn 0.6404 0.7574 -0.1274 +vn 0.5673 -0.7311 -0.3790 +vn 0.9987 0.0196 -0.0472 +vn -0.0853 0.9947 0.0570 +vn 0.5673 0.7311 -0.3791 +vn -0.0930 0.9955 0.0185 +vn -0.6435 0.6333 0.4300 +vn -0.6785 0.6794 -0.2793 +vn -0.0502 0.9987 -0.0100 +vn 0.6359 0.7263 0.2610 +vn -0.5563 0.6942 -0.4568 +vn -0.0172 0.9997 -0.0172 +vn 0.4418 0.7180 0.5379 +vn -0.0093 0.9997 -0.0225 +vn -0.4568 0.6942 -0.5563 +vn -0.2092 0.6942 -0.6887 +vn 0.2023 0.7180 0.6660 +vn 0.1830 0.9824 -0.0364 +vn 0.3898 0.5294 -0.7535 +vn 0.6935 0.7071 -0.1380 +vn 0.5730 0.1448 -0.8067 +vn 0.9636 0.1866 -0.1917 +vn 0.5260 -0.1448 -0.8381 +vn 0.9703 -0.0196 -0.2412 +vn 0.9633 -0.0671 -0.2600 +vn 0.9679 -0.0948 -0.2326 +vn 0.5470 -0.5294 -0.6485 +vn 0.7680 0.6303 0.1135 +vn -0.0747 -0.9239 -0.3753 +vn 0.5633 -0.7150 -0.4140 +vn -0.7535 -0.5294 -0.3898 +vn -0.1380 -0.7071 -0.6935 +vn -0.8067 -0.1448 -0.5730 +vn -0.1917 -0.1866 -0.9636 +vn -0.8025 -0.1363 -0.5809 +vn -0.1485 0.0196 -0.9887 +vn -0.6006 -0.4617 -0.6527 +vn -0.1284 0.0671 -0.9894 +vn -0.2754 -0.6737 -0.6858 +vn -0.1756 0.0473 -0.9833 +vn 0.0094 0.7194 -0.6946 +vn -0.2092 -0.6942 -0.6887 +vn -0.2881 -0.0000 -0.9576 +vn -0.3391 -0.6942 -0.6349 +vn -0.4734 -0.0000 -0.8809 +vn -0.3391 0.6942 -0.6349 +vn -0.4568 -0.6942 -0.5563 +vn -0.6326 -0.0000 -0.7744 +vn -0.5563 -0.6942 -0.4568 +vn -0.7744 -0.0000 -0.6326 +vn -0.6785 -0.6794 -0.2793 +vn -0.9205 -0.0000 -0.3907 +vn -0.7342 -0.6630 0.1460 +vn -0.7342 0.6630 0.1460 +vn -0.6435 -0.6333 0.4300 +vn -0.8315 -0.0000 0.5556 +vn -0.0930 -0.9955 0.0185 +vn -0.0853 -0.9947 0.0570 +vn -0.0502 -0.9987 -0.0100 +vn -0.0172 -0.9997 -0.0172 +vn -0.0093 -0.9997 -0.0225 +vn 0.3117 -0.9484 -0.0581 +vn 0.0647 -0.9846 0.1627 +vn -0.6426 -0.1599 0.7493 +vn -0.9887 -0.0196 0.1485 +vn -0.9894 -0.0671 0.1284 +vn -0.9833 -0.0948 0.1556 +vn -0.6789 -0.7150 -0.1669 +vn 0.6233 -0.6303 -0.4628 +vn 0.0502 0.9982 0.0336 +vn 0.8047 -0.4617 -0.3732 +vn 0.0100 0.9987 0.0504 +vn -0.0368 -0.4617 0.8863 +vn 0.6123 0.6931 0.3803 +vn 0.9637 -0.1363 -0.2296 +vn 0.1567 -0.1363 0.9782 +vn 0.9782 0.1363 -0.1567 +vn 0.8041 -0.0196 0.5942 +vn 0.7905 -0.0671 0.6088 +vn 0.8862 0.4618 0.0368 +vn 0.1652 -0.1448 0.9756 +vn 0.8195 -0.0473 0.5711 +vn 0.6796 0.6737 0.2902 +vn 0.2572 -0.5294 0.8085 +vn 0.4845 0.7263 0.4876 +vn 0.4845 -0.7194 0.4978 +vn 0.7503 -0.0099 -0.6610 +vn -0.2831 -0.0644 -0.9569 +vn -0.0201 -0.0892 -0.9958 +vn -0.1331 0.7311 0.6692 +vn -0.1331 -0.7311 0.6691 +vn 0.0200 -0.9947 -0.1006 +vn 0.1510 -0.6333 -0.7591 +vn -0.0284 -0.9987 -0.0426 +vn 0.4845 -0.7263 0.4876 +vn -0.6453 -0.7194 -0.2571 +vn -0.1036 -0.9824 0.1551 +vn -0.8454 -0.5294 0.0718 +vn -0.3928 -0.7071 0.5879 +vn -0.9645 -0.1448 0.2207 +vn -0.5458 -0.1866 0.8169 +vn -0.9756 0.1448 0.1652 +vn -0.5942 0.0196 0.8041 +vn -0.8085 0.5294 0.2572 +vn -0.6088 0.0671 0.7905 +vn -0.5853 0.0948 0.8053 +vn -0.1891 -0.6303 0.7529 +vn -0.5981 0.7150 0.3620 +vn -0.5879 0.7071 -0.3928 +vn -0.3182 0.9239 -0.2126 +vn -0.0718 0.5294 -0.8454 +vn -0.2207 0.1448 -0.9645 +vn -0.8169 0.1866 -0.5458 +vn -0.2296 0.1363 -0.9637 +vn -0.8567 -0.0196 -0.5155 +vn -0.3732 0.4617 -0.8047 +vn -0.8650 -0.0671 -0.4973 +vn -0.5282 0.6737 -0.5168 +vn -0.8413 -0.0473 -0.5386 +vn -0.5177 0.6794 -0.5200 +vn -0.7132 -0.0000 -0.7009 +vn -0.5177 -0.6794 -0.5200 +vn 0.1510 0.6333 -0.7591 +vn 0.0200 0.9947 -0.1006 +vn -0.0284 0.9987 -0.0426 +vn -0.2628 0.9638 -0.0445 +vn 0.4712 -0.8714 -0.1363 +vn 0.4662 0.6003 -0.6499 +vn 0.5155 0.0196 -0.8567 +vn 0.4973 0.0671 -0.8650 +vn 0.5200 0.0948 -0.8489 +vn 0.1056 0.7150 -0.6911 +vn 0.3987 0.6303 0.6661 +vn -0.5024 0.8645 -0.0149 +vn 0.6006 0.4617 0.6527 +vn -0.1234 0.9914 -0.0430 +vn 0.3051 0.4617 -0.8329 +vn 0.6880 0.7168 -0.1132 +vn 0.8025 0.1363 0.5809 +vn 0.5191 0.1363 -0.8438 +vn 0.8438 -0.1363 0.5191 +vn 0.9703 0.0196 -0.2412 +vn 0.9633 0.0671 -0.2600 +vn 0.8329 -0.4618 0.3051 +vn 0.5260 0.1448 -0.8381 +vn 0.7389 -0.6737 -0.0080 +vn 0.5470 0.5294 -0.6485 +vn 0.9757 0.0473 -0.2140 +vn 0.6660 -0.7180 -0.2023 +vn 0.6381 0.7194 -0.2745 +vn 0.9232 0.1887 0.3349 +vn 0.7374 0.6735 0.0505 +vn 0.6140 -0.7180 -0.3279 +vn 0.6140 0.7180 -0.3279 +vn 0.5693 0.7249 -0.3878 +vn 0.5379 -0.7180 -0.4418 +vn 0.3950 0.7125 -0.5799 +vn 0.4418 -0.7180 -0.5379 +vn 0.4418 0.7180 -0.5379 +vn 0.8101 -0.0145 -0.5861 +vn 0.2610 -0.7263 -0.6359 +vn -0.1274 -0.7573 -0.6405 +vn -0.1274 0.7574 -0.6404 +vn 0.6982 0.0784 -0.7116 +vn -0.5755 0.1666 -0.8006 +vn -0.3790 -0.7311 -0.5673 +vn -0.3791 0.7311 -0.5673 +vn 0.0570 0.9947 0.0853 +vn 0.4300 0.6333 0.6435 +vn -0.2793 0.6794 0.6786 +vn -0.0100 0.9987 0.0502 +vn 0.2610 0.7263 -0.6359 +vn -0.4568 0.6942 0.5563 +vn -0.0172 0.9997 0.0172 +vn 0.5379 0.7180 -0.4418 +vn -0.0225 0.9997 0.0093 +vn -0.5563 0.6942 0.4568 +vn -0.6887 0.6942 0.2092 +vn 0.6660 0.7180 -0.2023 +vn -0.0364 0.9824 -0.1830 +vn -0.1380 0.7071 -0.6935 +vn -0.6946 0.7194 -0.0094 +vn -0.8067 0.1448 -0.5730 +vn -0.1917 0.1866 -0.9636 +vn -0.8381 -0.1448 -0.5260 +vn -0.2412 -0.0196 -0.9703 +vn -0.6485 -0.5294 -0.5470 +vn -0.2600 -0.0671 -0.9633 +vn -0.2326 -0.0948 -0.9679 +vn 0.1134 0.6303 -0.7680 +vn -0.3753 -0.9239 0.0747 +vn -0.4140 -0.7150 -0.5633 +vn -0.3898 -0.5294 0.7535 +vn -0.6935 -0.7071 0.1379 +vn -0.5730 -0.1448 0.8067 +vn -0.9636 -0.1866 0.1917 +vn -0.5809 -0.1363 0.8025 +vn -0.9887 0.0196 0.1485 +vn -0.6527 -0.4617 0.6006 +vn -0.9894 0.0671 0.1284 +vn -0.7535 0.5294 -0.3898 +vn -0.6858 -0.6737 0.2754 +vn -0.9833 0.0473 0.1756 +vn -0.6887 -0.6942 0.2092 +vn -0.9576 -0.0000 0.2881 +vn -0.6349 -0.6942 0.3391 +vn -0.8809 -0.0000 0.4734 +vn -0.6349 0.6942 0.3391 +vn -0.5563 -0.6942 0.4568 +vn -0.7744 -0.0000 0.6326 +vn -0.4568 -0.6942 0.5563 +vn -0.6326 -0.0000 0.7744 +vn -0.2793 -0.6794 0.6785 +vn -0.3907 -0.0000 0.9205 +vn 0.4300 -0.6333 0.6435 +vn 0.5556 -0.0000 0.8315 +vn 0.0570 -0.9947 0.0853 +vn -0.0100 -0.9987 0.0502 +vn -0.0172 -0.9997 0.0172 +vn -0.0225 -0.9997 0.0093 +vn -0.0951 -0.9953 0.0209 +vn 0.1359 -0.9891 0.0566 +vn 0.1493 -0.7547 0.6389 +vn 0.1485 -0.0196 0.9887 +vn 0.1284 -0.0671 0.9894 +vn 0.1556 -0.0948 0.9833 +vn -0.1669 -0.7150 0.6789 +vn -0.4628 -0.6303 -0.6233 +vn 0.0336 0.9982 -0.0502 +vn -0.3732 -0.4617 -0.8047 +vn 0.0504 0.9987 -0.0100 +vn 0.8863 -0.4617 0.0368 +vn 0.3803 0.6931 -0.6123 +vn -0.2296 -0.1363 -0.9637 +vn 0.9782 -0.1363 -0.1567 +vn -0.1567 0.1363 -0.9782 +vn 0.5942 -0.0196 -0.8041 +vn 0.6088 -0.0671 -0.7905 +vn 0.0368 0.4618 -0.8862 +vn 0.9756 -0.1448 -0.1652 +vn 0.5711 -0.0473 -0.8195 +vn 0.2902 0.6737 -0.6796 +vn 0.8085 -0.5294 -0.2572 +vn 0.4876 0.7263 -0.4845 +vn 0.4978 -0.7194 -0.4845 +vn 0.6745 0.5755 -0.4625 +vn -0.7275 0.0120 0.6860 +vn -0.8841 -0.1624 0.4383 +vn 0.6692 0.7311 0.1331 +vn 0.6691 -0.7311 0.1332 +vn -0.1006 -0.9947 -0.0200 +vn -0.7591 -0.6333 -0.1510 +vn -0.0426 -0.9987 0.0284 +vn 0.4876 -0.7263 -0.4845 +vn -0.2571 -0.7194 0.6453 +vn 0.1551 -0.9824 0.1036 +vn 0.0718 -0.5294 0.8454 +vn 0.5879 -0.7071 0.3928 +vn 0.2207 -0.1448 0.9645 +vn 0.8169 -0.1866 0.5458 +vn 0.1652 0.1448 0.9756 +vn 0.8041 0.0196 0.5942 +vn 0.2572 0.5294 0.8085 +vn 0.7905 0.0671 0.6088 +vn 0.8053 0.0948 0.5853 +vn 0.7529 -0.6303 0.1891 +vn 0.3620 0.7150 0.5981 +vn -0.3928 0.7071 0.5879 +vn -0.6911 0.7150 -0.1056 +vn -0.2126 0.9239 0.3182 +vn -0.9645 0.1448 0.2207 +vn -0.5458 0.1866 0.8169 +vn -0.9637 0.1363 0.2296 +vn -0.5155 -0.0196 0.8567 +vn -0.8047 0.4617 0.3732 +vn -0.4973 -0.0671 0.8650 +vn -0.5168 0.6737 0.5282 +vn -0.5386 -0.0473 0.8413 +vn -0.5200 0.6794 0.5177 +vn -0.7009 -0.0000 0.7132 +vn -0.5200 -0.6794 0.5177 +vn -0.7591 0.6333 -0.1510 +vn -0.1006 0.9947 -0.0200 +vn -0.0426 0.9987 0.0284 +vn -0.0000 0.9795 -0.2016 +vn -0.0879 0.8879 -0.4515 +vn -0.5402 0.7470 -0.3875 +vn -0.8567 0.0196 -0.5155 +vn -0.8650 0.0671 -0.4973 +vn -0.8454 0.5294 0.0718 +vn -0.8489 0.0948 -0.5200 +vt 0.562500 0.812500 +vt 0.500000 0.781250 +vt 0.562500 0.781250 +vt 0.375000 0.812500 +vt 0.312500 0.781250 +vt 0.375000 0.781250 +vt 0.312500 0.812500 +vt 0.250000 0.781250 +vt 0.250000 0.812500 +vt 0.187500 0.781250 +vt 0.187500 0.812500 +vt 0.125000 0.781250 +vt 0.125000 0.812500 +vt 0.062500 0.781250 +vt 0.062500 0.812500 +vt 0.000000 0.781250 +vt 1.000000 0.812500 +vt 0.937500 0.781250 +vt 1.000000 0.781250 +vt 0.937500 0.812500 +vt 0.875000 0.781250 +vt 0.875000 0.812500 +vt 0.812500 0.781250 +vt 0.812500 0.812500 +vt 0.750000 0.781250 +vt 0.750000 0.812500 +vt 0.687500 0.781250 +vt 0.687500 0.812500 +vt 0.625000 0.781250 +vt 0.625000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.781250 +vt 0.500000 0.651786 +vt 0.437500 0.683036 +vt 0.437500 0.651786 +vt 0.187500 0.870536 +vt 0.125000 0.888393 +vt 0.125000 0.870536 +vt 0.500000 0.812500 +vt 0.500000 0.620536 +vt 0.441925 0.843750 +vt 0.375000 0.651786 +vt 0.437500 0.620536 +vt 0.442655 0.812500 +vt 0.375000 0.843750 +vt 0.369845 0.812500 +vt 0.312500 0.651786 +vt 0.375000 0.620536 +vt 0.316925 0.843750 +vt 0.250000 0.651786 +vt 0.312500 0.620536 +vt 0.317655 0.812500 +vt 0.250000 0.843750 +vt 0.244845 0.812500 +vt 0.187500 0.651786 +vt 0.250000 0.620536 +vt 0.191925 0.843750 +vt 0.125000 0.651786 +vt 0.187500 0.620536 +vt 0.192655 0.812500 +vt 0.125000 0.843750 +vt 0.119845 0.812500 +vt 0.062500 0.651786 +vt 0.125000 0.620536 +vt 0.066925 0.843750 +vt 0.000000 0.651786 +vt 0.062500 0.620536 +vt 0.067655 0.812500 +vt 0.000000 0.843750 +vt -0.005155 0.812500 +vt 0.937500 0.651786 +vt 1.000000 0.620536 +vt 1.000000 0.651786 +vt 0.941925 0.843750 +vt 0.875000 0.651786 +vt 0.937500 0.620536 +vt 0.942655 0.812500 +vt 0.875000 0.843750 +vt 0.869845 0.812500 +vt 0.812500 0.651786 +vt 0.875000 0.620536 +vt 0.816925 0.843750 +vt 0.750000 0.651786 +vt 0.812500 0.620536 +vt 0.817655 0.812500 +vt 0.750000 0.843750 +vt 0.744845 0.812500 +vt 0.687500 0.651786 +vt 0.750000 0.620536 +vt 0.691925 0.843750 +vt 0.625000 0.651786 +vt 0.687500 0.620536 +vt 0.692655 0.812500 +vt 0.625000 0.843750 +vt 0.619845 0.812500 +vt 0.562500 0.651786 +vt 0.625000 0.620536 +vt 0.566925 0.843750 +vt 0.562500 0.620536 +vt 0.567655 0.812500 +vt 0.500000 0.843750 +vt 0.494845 0.812500 +vt 0.437500 0.763393 +vt 0.500000 0.763393 +vt 0.375000 0.763393 +vt 0.625000 0.683036 +vt 0.562500 0.763393 +vt 0.625000 0.763393 +vt 0.687500 0.683036 +vt 0.687500 0.763393 +vt 0.750000 0.683036 +vt 0.750000 0.763393 +vt 0.812500 0.683036 +vt 0.812500 0.763393 +vt 0.875000 0.683036 +vt 0.875000 0.763393 +vt 0.937500 0.683036 +vt 0.937500 0.763393 +vt 1.000000 0.683036 +vt 1.000000 0.763393 +vt 0.062500 0.683036 +vt 0.062500 0.763393 +vt 0.000000 0.763393 +vt 0.125000 0.683036 +vt 0.125000 0.763393 +vt 0.187500 0.683036 +vt 0.187500 0.763393 +vt 0.250000 0.683036 +vt 0.250000 0.763393 +vt 0.312500 0.683036 +vt 0.312500 0.763393 +vt 0.375000 0.683036 +vt 0.562500 0.683036 +vt 0.500000 0.700893 +vt 0.500000 0.683036 +vt 0.562500 0.700893 +vt 0.375000 0.700893 +vt 0.312500 0.700893 +vt 0.250000 0.700893 +vt 0.187500 0.700893 +vt 0.125000 0.700893 +vt 0.062500 0.700893 +vt 0.000000 0.683036 +vt 0.000000 0.700893 +vt 0.937500 0.700893 +vt 1.000000 0.700893 +vt 0.875000 0.700893 +vt 0.812500 0.700893 +vt 0.750000 0.700893 +vt 0.687500 0.700893 +vt 0.625000 0.700893 +vt 0.437500 0.700893 +vt 0.437500 0.870536 +vt 0.500000 0.870536 +vt 0.375000 0.870536 +vt 0.437500 0.843750 +vt 0.312500 0.870536 +vt 0.312500 0.843750 +vt 0.250000 0.870536 +vt 0.187500 0.843750 +vt 0.062500 0.870536 +vt 0.062500 0.843750 +vt 0.937500 0.870536 +vt 1.000000 0.843750 +vt 1.000000 0.870536 +vt 0.875000 0.870536 +vt 0.937500 0.843750 +vt 0.812500 0.870536 +vt 0.812500 0.843750 +vt 0.687500 0.870536 +vt 0.750000 0.870536 +vt 0.625000 0.870536 +vt 0.687500 0.843750 +vt 0.562500 0.870536 +vt 0.562500 0.843750 +vt 0.625000 0.888393 +vt 0.062500 0.888393 +vt 0.562500 0.888393 +vt 0.000000 0.888393 +vt 0.000000 0.870536 +vt 0.437500 0.888393 +vt 0.500000 0.888393 +vt 0.937500 0.888393 +vt 0.375000 0.888393 +vt 0.875000 0.888393 +vt 0.312500 0.888393 +vt 0.812500 0.888393 +vt 0.250000 0.888393 +vt 0.750000 0.888393 +vt 0.187500 0.888393 +vt 0.687500 0.888393 +vt 0.447062 0.888393 +vt 0.490438 0.888393 +vt 0.468750 1.000000 +vt 0.509562 0.888393 +vt 0.552938 0.888393 +vt 0.531250 1.000000 +vt 0.572062 0.888393 +vt 0.615438 0.888393 +vt 0.593750 1.000000 +vt 0.634562 0.888393 +vt 0.677938 0.888393 +vt 0.656250 1.000000 +vt 0.697062 0.888393 +vt 0.740438 0.888393 +vt 0.718750 1.000000 +vt 0.759562 0.888393 +vt 0.802938 0.888393 +vt 0.781250 1.000000 +vt 0.822062 0.888393 +vt 0.865438 0.888393 +vt 0.843750 1.000000 +vt 0.884562 0.888393 +vt 0.927938 0.888393 +vt 0.906250 1.000000 +vt 0.947062 0.888393 +vt 0.990438 0.888393 +vt 0.968750 1.000000 +vt 0.009562 0.888393 +vt 0.052938 0.888393 +vt 0.031250 1.000000 +vt 0.072062 0.888393 +vt 0.115438 0.888393 +vt 0.093750 1.000000 +vt 0.134562 0.888393 +vt 0.177938 0.888393 +vt 0.156250 1.000000 +vt 0.197062 0.888393 +vt 0.240438 0.888393 +vt 0.218750 1.000000 +vt 0.259562 0.888393 +vt 0.302938 0.888393 +vt 0.281250 1.000000 +vt 0.322062 0.888393 +vt 0.365438 0.888393 +vt 0.343750 1.000000 +vt 0.384562 0.888393 +vt 0.427938 0.888393 +vt 0.406250 1.000000 +vt 0.584821 0.241071 +vt 0.558036 0.223214 +vt 0.584821 0.223214 +vt 0.558036 0.241071 +vt 0.531250 0.223214 +vt 0.531250 0.241071 +vt 0.504464 0.223214 +vt 0.504464 0.241071 +vt 0.477679 0.223214 +vt 0.477679 0.241071 +vt 0.450893 0.223214 +vt 0.450893 0.241071 +vt 0.424107 0.223214 +vt 0.745536 0.241071 +vt 0.718750 0.223214 +vt 0.745536 0.223214 +vt 0.718750 0.241071 +vt 0.691964 0.223214 +vt 0.691964 0.241071 +vt 0.665179 0.223214 +vt 0.665179 0.241071 +vt 0.638393 0.223214 +vt 0.912466 0.455357 +vt 0.866071 0.375000 +vt 0.819677 0.455357 +vt 0.638393 0.241071 +vt 0.611607 0.223214 +vt 0.611607 0.241071 +vt 0.937500 0.486607 +vt 0.968750 0.500000 +vt 0.937500 0.500000 +vt 0.875000 0.500000 +vt 0.875000 0.486607 +vt 0.968750 0.544643 +vt 0.937500 0.544643 +vt 0.875000 0.544643 +vt 0.812500 0.500000 +vt 0.812500 0.486607 +vt 0.812500 0.544643 +vt 0.781250 0.500000 +vt 0.781250 0.486607 +vt 0.767857 0.544643 +vt 0.781250 0.544643 +vt 0.812500 0.558036 +vt 0.875000 0.558036 +vt 0.937500 0.558036 +vt 0.968750 0.558036 +vt 0.982143 0.544643 +vt 0.316964 0.241071 +vt 0.102679 0.223214 +vt 0.316964 0.223214 +vt 0.388393 0.526786 +vt 0.406250 0.312500 +vt 0.406250 0.526786 +vt 0.267857 0.169643 +vt 0.075893 0.178571 +vt 0.075893 0.169643 +vt 0.031250 0.312500 +vt 0.013393 0.526786 +vt 0.013393 0.312500 +vt 0.102679 0.598214 +vt 0.316964 0.616071 +vt 0.102679 0.616071 +vt 0.102679 0.241071 +vt 0.000000 0.223214 +vt 0.000000 0.598214 +vt 0.419643 0.616071 +vt 0.316964 0.598214 +vt 0.419643 0.598214 +vt 0.419643 0.241071 +vt 0.477679 0.241071 +vt 0.763393 0.312500 +vt 0.114637 0.269943 +vt 0.031250 0.312500 +vt 0.102679 0.241071 +vt 0.060121 0.514827 +vt 0.102679 0.598214 +vt 0.031250 0.526786 +vt 0.305005 0.569343 +vt 0.388393 0.526786 +vt 0.316964 0.598214 +vt 0.359522 0.324459 +vt 0.316964 0.241071 +vt 0.388393 0.312500 +vt 0.060121 0.324459 +vt 0.305005 0.269943 +vt 0.359522 0.514827 +vt 0.114637 0.569343 +vt 0.069050 0.514827 +vt 0.114637 0.278871 +vt 0.350593 0.324459 +vt 0.267857 0.209821 +vt 0.075893 0.218750 +vt 0.075893 0.209821 +vt 0.071429 0.196429 +vt 0.000000 0.205357 +vt 0.000000 0.196429 +vt 0.071429 0.183036 +vt 0.000000 0.191964 +vt 0.000000 0.183036 +vt 0.267857 0.196429 +vt 0.075893 0.205357 +vt 0.075893 0.196429 +vt 0.267857 0.183036 +vt 0.075893 0.191964 +vt 0.075893 0.183036 +vt 0.343750 0.183036 +vt 0.272321 0.191964 +vt 0.272321 0.183036 +vt 0.343750 0.196429 +vt 0.272321 0.205357 +vt 0.272321 0.196429 +vt 0.835100 0.187500 +vt 0.870815 0.209821 +vt 0.835100 0.209821 +vt 0.875908 0.218750 +vt 0.910993 0.209821 +vt 0.910993 0.218750 +vt 0.870814 0.187500 +vt 0.902064 0.209821 +vt 0.919922 0.187500 +vt 0.973493 0.209821 +vt 0.919922 0.209821 +vt 0.910714 0.272321 +vt 0.888393 0.370536 +vt 0.888393 0.272321 +vt 0.835100 0.218750 +vt 0.927874 0.209821 +vt 0.973493 0.218750 +vt 0.919922 0.218750 +vt 0.745814 0.209821 +vt 0.745814 0.187500 +vt 0.745256 0.187500 +vt 0.831557 0.178571 +vt 0.864392 0.178571 +vt 0.995814 0.218750 +vt 0.902064 0.187500 +vt 0.910993 0.187500 +vt 0.875908 0.178571 +vt 0.910993 0.178571 +vt 0.910714 0.250000 +vt 0.901786 0.258929 +vt 0.901786 0.250000 +vt 0.888393 0.250000 +vt 0.897321 0.258929 +vt 0.888393 0.267857 +vt 0.736886 0.209821 +vt 0.736886 0.187500 +vt 0.745256 0.209821 +vt 0.831557 0.218750 +vt 0.736886 0.218750 +vt 0.973493 0.178571 +vt 0.927874 0.187500 +vt 0.919922 0.178571 +vt 0.995814 0.187500 +vt 0.973493 0.187500 +vt 0.995814 0.209821 +vt 0.799107 0.321429 +vt 0.776786 0.357143 +vt 0.776786 0.321429 +vt 0.767857 0.362236 +vt 0.776786 0.397321 +vt 0.767857 0.397321 +vt 0.799107 0.357143 +vt 0.776786 0.388393 +vt 0.799107 0.406250 +vt 0.776786 0.459821 +vt 0.776786 0.406250 +vt 0.767857 0.321429 +vt 0.776786 0.414202 +vt 0.767857 0.459821 +vt 0.767857 0.406250 +vt 0.776786 0.232143 +vt 0.799107 0.232143 +vt 0.799107 0.231585 +vt 0.808036 0.317885 +vt 0.808036 0.350721 +vt 0.767857 0.482143 +vt 0.799107 0.388393 +vt 0.799107 0.397321 +vt 0.808036 0.362236 +vt 0.808036 0.397321 +vt 0.799107 0.223214 +vt 0.776786 0.231585 +vt 0.767857 0.317885 +vt 0.767857 0.223214 +vt 0.808036 0.459821 +vt 0.799107 0.414202 +vt 0.808036 0.406250 +vt 0.799107 0.482143 +vt 0.799107 0.459821 +vt 0.776786 0.482143 +vt 0.835100 0.098214 +vt 0.870815 0.120536 +vt 0.835100 0.120536 +vt 0.875908 0.129464 +vt 0.910993 0.120536 +vt 0.910993 0.129464 +vt 0.870814 0.098214 +vt 0.902064 0.120536 +vt 0.919922 0.098214 +vt 0.973493 0.120536 +vt 0.919922 0.120536 +vt 0.835100 0.129464 +vt 0.927874 0.120536 +vt 0.973493 0.129464 +vt 0.919922 0.129464 +vt 0.745814 0.120536 +vt 0.745814 0.098214 +vt 0.745256 0.098214 +vt 0.831557 0.089286 +vt 0.864392 0.089286 +vt 0.995814 0.129464 +vt 0.902064 0.098214 +vt 0.910993 0.098214 +vt 0.875908 0.089286 +vt 0.910993 0.089286 +vt 0.736886 0.098214 +vt 0.745256 0.120536 +vt 0.831557 0.129464 +vt 0.736886 0.129464 +vt 0.973493 0.089286 +vt 0.927874 0.098214 +vt 0.919922 0.089286 +vt 0.995814 0.098214 +vt 0.973493 0.098214 +vt 0.995814 0.120536 +vt 0.835100 0.142857 +vt 0.870815 0.165179 +vt 0.835100 0.165179 +vt 0.875908 0.174107 +vt 0.910993 0.165179 +vt 0.910993 0.174107 +vt 0.870814 0.142857 +vt 0.902064 0.165179 +vt 0.919922 0.142857 +vt 0.973493 0.165179 +vt 0.919922 0.165179 +vt 0.835100 0.174107 +vt 0.927874 0.165179 +vt 0.973493 0.174107 +vt 0.919922 0.174107 +vt 0.745814 0.165179 +vt 0.745814 0.142857 +vt 0.745256 0.142857 +vt 0.831557 0.133929 +vt 0.864392 0.133929 +vt 0.995814 0.174107 +vt 0.902064 0.142857 +vt 0.910993 0.142857 +vt 0.875908 0.133929 +vt 0.910993 0.133929 +vt 0.736886 0.165179 +vt 0.736886 0.142857 +vt 0.745256 0.165179 +vt 0.831557 0.174107 +vt 0.736886 0.174107 +vt 0.973493 0.133929 +vt 0.927874 0.142857 +vt 0.919922 0.133929 +vt 0.995814 0.142857 +vt 0.973493 0.142857 +vt 0.995814 0.165179 +vt 0.946429 0.598214 +vt 0.982143 0.562500 +vt 0.982143 0.598214 +vt 0.875000 0.598214 +vt 0.839286 0.562500 +vt 0.875000 0.562500 +vt 0.839286 0.616071 +vt 0.875000 0.616071 +vt 0.821429 0.598214 +vt 0.839286 0.598214 +vt 0.892857 0.598214 +vt 0.946429 0.562500 +vt 0.986596 0.237854 +vt 0.995517 0.238834 +vt 0.986596 0.239815 +vt 0.924127 0.238843 +vt 0.933048 0.239823 +vt 0.924104 0.238847 +vt 0.986596 0.251249 +vt 0.995517 0.252229 +vt 0.986596 0.253209 +vt 0.924105 0.252233 +vt 0.933032 0.253214 +vt 0.924104 0.252240 +vt 0.986607 0.258929 +vt 0.995536 0.308036 +vt 0.986607 0.308036 +vt 0.933036 0.258929 +vt 0.924107 0.308036 +vt 0.924107 0.258929 +vt 0.986602 0.313750 +vt 0.995535 0.318081 +vt 0.986602 0.315712 +vt 0.933034 0.309015 +vt 0.924106 0.318081 +vt 0.924106 0.311385 +vt 0.995535 0.324780 +vt 0.986603 0.329107 +vt 0.986602 0.327145 +vt 0.933034 0.322409 +vt 0.924106 0.331475 +vt 0.924106 0.324780 +vt 0.995536 0.334821 +vt 0.986607 0.339286 +vt 0.986607 0.334821 +vt 0.933036 0.334821 +vt 0.924107 0.339286 +vt 0.924107 0.334821 +vt 0.986546 0.343096 +vt 0.995536 0.343758 +vt 0.986546 0.344404 +vt 0.924106 0.343750 +vt 0.933096 0.344404 +vt 0.924108 0.343759 +vt 0.986607 0.348214 +vt 0.995536 0.410714 +vt 0.986607 0.410714 +vt 0.933036 0.348214 +vt 0.924107 0.410714 +vt 0.924107 0.348214 +vt 0.986546 0.414525 +vt 0.995535 0.415179 +vt 0.986546 0.415833 +vt 0.924106 0.415171 +vt 0.933101 0.415833 +vt 0.924112 0.415179 +vt 0.986607 0.419643 +vt 0.995536 0.455357 +vt 0.986607 0.455357 +vt 0.933036 0.419643 +vt 0.924107 0.455357 +vt 0.924107 0.419643 +vt 0.986612 0.461072 +vt 0.995539 0.462053 +vt 0.986612 0.463034 +vt 0.933034 0.461073 +vt 0.924108 0.462053 +vt 0.924104 0.462047 +vt 0.995539 0.475447 +vt 0.986612 0.476428 +vt 0.986612 0.474466 +vt 0.924104 0.475447 +vt 0.933031 0.476428 +vt 0.924105 0.475454 +vt 0.933031 0.474466 +vt 0.941964 0.478797 +vt 0.941964 0.472101 +vt 0.950891 0.481164 +vt 0.941964 0.458707 +vt 0.950892 0.467770 +vt 0.941964 0.465402 +vt 0.933034 0.463034 +vt 0.950893 0.419643 +vt 0.941964 0.455357 +vt 0.941964 0.419643 +vt 0.933036 0.455357 +vt 0.941966 0.412947 +vt 0.950832 0.418989 +vt 0.941966 0.417411 +vt 0.933101 0.414526 +vt 0.941964 0.348214 +vt 0.950893 0.410714 +vt 0.941964 0.410714 +vt 0.933036 0.410714 +vt 0.950831 0.339939 +vt 0.941964 0.345982 +vt 0.941964 0.341517 +vt 0.933096 0.343096 +vt 0.941964 0.334821 +vt 0.950893 0.339286 +vt 0.941964 0.339286 +vt 0.933036 0.339286 +vt 0.950895 0.322409 +vt 0.941967 0.334823 +vt 0.941967 0.321428 +vt 0.941961 0.334823 +vt 0.933034 0.333842 +vt 0.950895 0.309014 +vt 0.941967 0.321429 +vt 0.941967 0.308034 +vt 0.941961 0.321429 +vt 0.933034 0.320448 +vt 0.950893 0.258929 +vt 0.941964 0.308036 +vt 0.941964 0.258929 +vt 0.933036 0.308036 +vt 0.941964 0.248887 +vt 0.950892 0.257950 +vt 0.941964 0.255583 +vt 0.933032 0.251252 +vt 0.941964 0.235493 +vt 0.950897 0.244556 +vt 0.941964 0.242188 +vt 0.933048 0.237863 +vt 0.959819 0.232149 +vt 0.950897 0.233130 +vt 0.959825 0.232141 +vt 0.968747 0.244547 +vt 0.959825 0.245528 +vt 0.959825 0.245535 +vt 0.968747 0.257942 +vt 0.959825 0.258922 +vt 0.950892 0.246516 +vt 0.959819 0.258931 +vt 0.959821 0.258929 +vt 0.968750 0.308036 +vt 0.959821 0.308036 +vt 0.950893 0.308036 +vt 0.959822 0.311381 +vt 0.968754 0.315712 +vt 0.959822 0.318077 +vt 0.950895 0.320448 +vt 0.959822 0.324776 +vt 0.968754 0.329106 +vt 0.959822 0.331471 +vt 0.950895 0.333842 +vt 0.959821 0.334821 +vt 0.968750 0.339286 +vt 0.959821 0.339286 +vt 0.950893 0.334821 +vt 0.959822 0.339285 +vt 0.968812 0.347560 +vt 0.959822 0.348214 +vt 0.959821 0.339285 +vt 0.950831 0.347560 +vt 0.959821 0.348214 +vt 0.968750 0.410714 +vt 0.959821 0.410714 +vt 0.950893 0.348214 +vt 0.959822 0.410714 +vt 0.968812 0.418989 +vt 0.959822 0.419643 +vt 0.950832 0.411369 +vt 0.959821 0.419643 +vt 0.959821 0.419643 +vt 0.968750 0.455357 +vt 0.959821 0.455357 +vt 0.950893 0.455357 +vt 0.959825 0.455355 +vt 0.968753 0.467769 +vt 0.959825 0.468750 +vt 0.950892 0.456337 +vt 0.959819 0.468750 +vt 0.959825 0.468750 +vt 0.968753 0.481164 +vt 0.959825 0.482145 +vt 0.959819 0.468749 +vt 0.950891 0.469730 +vt 0.968753 0.469730 +vt 0.977680 0.478793 +vt 0.977680 0.472097 +vt 0.977680 0.458703 +vt 0.977680 0.465398 +vt 0.968753 0.456336 +vt 0.977679 0.419643 +vt 0.977679 0.455357 +vt 0.968750 0.419643 +vt 0.977679 0.412947 +vt 0.977679 0.417411 +vt 0.968812 0.411368 +vt 0.977679 0.348214 +vt 0.977679 0.410714 +vt 0.968750 0.348214 +vt 0.977679 0.341518 +vt 0.977679 0.345982 +vt 0.968812 0.339939 +vt 0.977679 0.339286 +vt 0.977679 0.334821 +vt 0.968750 0.334821 +vt 0.977676 0.328126 +vt 0.977675 0.328132 +vt 0.968754 0.327145 +vt 0.977681 0.328126 +vt 0.977676 0.314731 +vt 0.977674 0.314738 +vt 0.968754 0.313750 +vt 0.977682 0.314738 +vt 0.977679 0.308036 +vt 0.977679 0.258929 +vt 0.968750 0.258929 +vt 0.977680 0.248883 +vt 0.977680 0.255579 +vt 0.968747 0.246516 +vt 0.977680 0.235489 +vt 0.977680 0.242184 +vt 0.968747 0.233121 +vt 0.821428 0.364820 +vt 0.812501 0.363839 +vt 0.821428 0.362859 +vt 0.883930 0.363845 +vt 0.874997 0.362858 +vt 0.883924 0.363839 +vt 0.821428 0.351427 +vt 0.812501 0.350446 +vt 0.821428 0.349466 +vt 0.883930 0.350452 +vt 0.874997 0.349465 +vt 0.883924 0.350446 +vt 0.812500 0.343750 +vt 0.821429 0.294643 +vt 0.821429 0.343750 +vt 0.875000 0.343750 +vt 0.883929 0.294643 +vt 0.883929 0.343750 +vt 0.821430 0.288927 +vt 0.812502 0.284598 +vt 0.821430 0.286966 +vt 0.875001 0.293663 +vt 0.883930 0.284598 +vt 0.883930 0.291295 +vt 0.821430 0.275534 +vt 0.812502 0.271205 +vt 0.821430 0.273573 +vt 0.875001 0.280269 +vt 0.883930 0.271205 +vt 0.883930 0.277902 +vt 0.821429 0.267857 +vt 0.812500 0.258929 +vt 0.821429 0.258929 +vt 0.875000 0.267857 +vt 0.883929 0.258929 +vt 0.883929 0.267857 +vt 0.821428 0.253213 +vt 0.812499 0.252225 +vt 0.821428 0.251252 +vt 0.883928 0.252233 +vt 0.875001 0.251252 +vt 0.883929 0.252226 +vt 0.821428 0.239820 +vt 0.812499 0.238832 +vt 0.821428 0.237858 +vt 0.883928 0.238839 +vt 0.875001 0.237858 +vt 0.883929 0.238833 +vt 0.875001 0.239820 +vt 0.866072 0.235491 +vt 0.866072 0.242187 +vt 0.857143 0.233123 +vt 0.866072 0.255581 +vt 0.857143 0.246516 +vt 0.866072 0.248884 +vt 0.875001 0.253213 +vt 0.857143 0.267857 +vt 0.866071 0.258929 +vt 0.866071 0.267857 +vt 0.875000 0.258929 +vt 0.857144 0.280269 +vt 0.866072 0.267857 +vt 0.866072 0.281250 +vt 0.866072 0.281250 +vt 0.875001 0.268837 +vt 0.857143 0.293663 +vt 0.866072 0.281250 +vt 0.866072 0.294643 +vt 0.866072 0.294643 +vt 0.875001 0.282231 +vt 0.857143 0.343750 +vt 0.866071 0.294643 +vt 0.866071 0.343750 +vt 0.875000 0.294643 +vt 0.857143 0.356160 +vt 0.866070 0.347098 +vt 0.866070 0.353793 +vt 0.874997 0.351426 +vt 0.866070 0.367186 +vt 0.857142 0.358124 +vt 0.866070 0.360491 +vt 0.874997 0.364819 +vt 0.857142 0.369554 +vt 0.848215 0.357143 +vt 0.839286 0.369555 +vt 0.848215 0.357143 +vt 0.848215 0.370536 +vt 0.848215 0.357143 +vt 0.839286 0.344730 +vt 0.848215 0.343750 +vt 0.848215 0.343750 +vt 0.857143 0.344730 +vt 0.848214 0.343750 +vt 0.839286 0.294643 +vt 0.848214 0.294643 +vt 0.857143 0.294643 +vt 0.848214 0.291295 +vt 0.839286 0.286966 +vt 0.848214 0.284598 +vt 0.857143 0.282231 +vt 0.839286 0.275534 +vt 0.848214 0.271205 +vt 0.848214 0.277902 +vt 0.857144 0.268837 +vt 0.848214 0.267857 +vt 0.839286 0.258929 +vt 0.848214 0.258929 +vt 0.857143 0.258929 +vt 0.848214 0.258929 +vt 0.839285 0.246516 +vt 0.848214 0.245536 +vt 0.857143 0.257948 +vt 0.848214 0.245536 +vt 0.848214 0.245536 +vt 0.839285 0.233123 +vt 0.848214 0.232143 +vt 0.857143 0.244555 +vt 0.848214 0.232142 +vt 0.830356 0.242187 +vt 0.839285 0.244555 +vt 0.830356 0.235491 +vt 0.830356 0.248884 +vt 0.830356 0.255581 +vt 0.839285 0.257948 +vt 0.830357 0.267857 +vt 0.830357 0.258929 +vt 0.839286 0.267857 +vt 0.830358 0.274553 +vt 0.830359 0.274547 +vt 0.830358 0.274553 +vt 0.839286 0.273573 +vt 0.830358 0.287947 +vt 0.830359 0.287940 +vt 0.839286 0.288927 +vt 0.830358 0.287946 +vt 0.830357 0.294643 +vt 0.830357 0.343750 +vt 0.839286 0.343750 +vt 0.830357 0.353795 +vt 0.830357 0.347098 +vt 0.839286 0.356162 +vt 0.830357 0.360491 +vt 0.830357 0.367188 +vt 0.839286 0.358124 +vt 0.995536 0.258929 +vt 0.995536 0.339286 +vt 0.959819 0.245536 +vt 0.812502 0.277902 +vt 0.812500 0.267857 +vt 0.830357 0.274560 +vt 0.959821 0.410716 +vt 0.866072 0.281250 +vt 0.995540 0.462046 +vt 0.995540 0.475454 +vt 0.959819 0.482145 +vt 0.848215 0.357141 +vt 0.848214 0.258929 +vt 0.000000 0.812500 +vt 0.495575 0.843750 +vt 0.370575 0.843750 +vt 0.245575 0.843750 +vt 0.120575 0.843750 +vt 0.000000 0.620536 +vt 0.995575 0.843750 +vt 0.870575 0.843750 +vt 0.745575 0.843750 +vt 0.620575 0.843750 +vt 1.000000 0.888393 +vt 0.424107 0.241071 +vt 0.839286 0.474966 +vt 0.866071 0.482143 +vt 0.892857 0.474966 +vt 0.919643 0.428571 +vt 0.912466 0.401786 +vt 0.892857 0.382177 +vt 0.839286 0.382177 +vt 0.819677 0.401786 +vt 0.812500 0.428571 +vt 0.968750 0.486607 +vt 0.767857 0.500000 +vt 0.781250 0.558036 +vt 0.982143 0.500000 +vt 0.388393 0.312500 +vt 0.267857 0.178571 +vt 0.031250 0.526786 +vt 0.000000 0.241071 +vt 0.000000 0.616071 +vt 0.419643 0.223214 +vt 0.763393 0.526786 +vt 0.691964 0.598214 +vt 0.477679 0.598214 +vt 0.406250 0.312500 +vt 0.691964 0.241071 +vt 0.350593 0.514827 +vt 0.305005 0.560414 +vt 0.114637 0.560414 +vt 0.069050 0.324459 +vt 0.305005 0.278871 +vt 0.267857 0.218750 +vt 0.071429 0.205357 +vt 0.071429 0.191964 +vt 0.267857 0.205357 +vt 0.267857 0.191964 +vt 0.343750 0.191964 +vt 0.343750 0.205357 +vt 0.910714 0.370536 +vt 0.864392 0.218750 +vt 0.736886 0.178571 +vt 0.835100 0.178571 +vt 0.910714 0.267857 +vt 0.897321 0.250000 +vt 0.995814 0.178571 +vt 0.767857 0.350721 +vt 0.808036 0.223214 +vt 0.808036 0.321429 +vt 0.776786 0.223214 +vt 0.808036 0.482143 +vt 0.864392 0.129464 +vt 0.736886 0.089286 +vt 0.835100 0.089286 +vt 0.736886 0.120536 +vt 0.995814 0.089286 +vt 0.864392 0.174107 +vt 0.736886 0.133929 +vt 0.835100 0.133929 +vt 0.995814 0.133929 +vt 0.767857 0.562500 +vt 0.995540 0.238830 +vt 0.995540 0.252225 +vt 0.995535 0.311385 +vt 0.995535 0.331475 +vt 0.995536 0.343750 +vt 0.995536 0.348214 +vt 0.995536 0.415170 +vt 0.995536 0.419643 +vt 0.941961 0.321428 +vt 0.941961 0.308034 +vt 0.959819 0.245536 +vt 0.959821 0.348214 +vt 0.959819 0.455356 +vt 0.977682 0.328119 +vt 0.977681 0.314731 +vt 0.812500 0.363846 +vt 0.812500 0.350453 +vt 0.812500 0.294643 +vt 0.812502 0.291295 +vt 0.812500 0.252232 +vt 0.812501 0.238839 +vt 0.866072 0.267857 +vt 0.848215 0.370534 +vt 0.848214 0.245536 +vt 0.830357 0.287953 s 1 -f 602/493/39 635/494/23 603/495/23 -f 611/496/23 644/497/28 612/498/28 -f 624/499/29 649/500/22 617/501/22 -f 610/502/39 643/503/23 611/496/23 -f 623/504/21 656/505/29 624/506/29 -f 609/507/22 642/508/39 610/502/39 -f 622/509/27 655/510/21 623/504/21 -f 608/511/29 633/512/22 601/513/22 -f 621/514/24 654/515/27 622/509/27 -f 607/516/21 640/517/29 608/511/29 -f 620/518/28 653/519/24 621/514/24 -f 606/520/27 639/521/21 607/516/21 -f 619/522/23 652/523/28 620/518/28 -f 632/524/29 657/525/22 625/526/22 -f 605/527/24 638/528/27 606/529/27 -f 618/530/39 651/531/23 619/522/23 -f 274/532/39 666/533/41 275/534/41 -f 124/535/22 125/536/39 123/537/22 -f 267/538/42 673/539/24 268/540/24 -f 126/541/39 127/542/23 125/536/39 -f 276/543/22 680/544/43 261/545/43 -f 128/546/23 129/547/28 127/542/23 -f 275/534/41 665/548/22 276/549/22 -f 130/550/28 131/551/24 129/547/28 -f 268/552/24 672/553/44 269/554/44 -f 132/555/24 133/556/27 131/551/24 -f 261/545/43 679/557/29 262/558/29 -f 134/559/27 135/560/21 133/556/27 -f 269/554/44 671/561/28 270/562/28 -f 136/563/21 137/564/29 135/565/21 -f 262/558/29 678/566/45 263/567/45 -f 138/568/29 123/537/22 137/564/29 -f 176/569/39 177/570/46 175/571/39 -f 734/572/47 741/573/48 735/574/48 -f 148/575/29 149/576/49 147/577/29 -f 738/578/50 729/579/51 731/580/51 -f 150/581/49 151/582/39 149/576/49 -f 174/583/49 175/571/39 173/584/49 -f 736/585/52 741/586/48 742/587/53 -f 152/588/39 153/589/46 151/582/39 -f 733/590/54 730/591/55 739/592/54 -f 154/593/46 155/594/28 153/589/46 -f 172/595/29 173/584/49 171/596/29 -f 732/597/56 729/598/51 730/599/55 -f 156/600/28 157/601/57 155/594/28 -f 737/602/58 744/603/59 738/578/50 -f 158/604/57 159/605/27 157/601/57 -f 733/590/54 740/606/60 734/572/47 -f 160/607/27 161/608/61 159/605/27 -f 737/602/58 742/609/53 743/610/58 -f 162/611/61 147/612/29 161/608/61 -f 178/613/46 179/614/28 177/570/46 -f 180/615/28 181/616/57 179/614/28 -f 182/617/57 183/618/27 181/616/57 -f 184/619/27 185/620/61 183/618/27 -f 186/621/61 171/622/29 185/620/61 -f 217/623/62 203/624/63 204/625/26 -f 251/626/64 197/627/26 252/628/62 -f 219/629/65 203/624/63 218/630/64 -f 248/631/66 196/632/25 249/633/67 -f 221/634/66 201/635/25 220/636/67 -f 222/637/68 200/638/69 221/634/66 -f 247/639/68 197/627/26 198/640/70 -f 250/641/65 194/642/63 251/626/64 -f 220/643/67 202/644/71 219/629/65 -f 247/639/68 199/645/69 248/631/66 -f 222/637/68 204/625/26 195/646/70 -f 249/647/67 193/648/71 250/641/65 -f 217/623/62 224/649/72 218/630/64 -f 218/630/64 225/650/73 219/629/65 -f 219/629/65 226/651/74 220/643/67 -f 220/636/67 227/652/75 221/634/66 -f 227/652/75 222/637/68 221/634/66 -f 228/653/76 217/623/62 222/637/68 -f 229/654/77 224/649/72 223/655/78 -f 230/656/79 225/650/73 224/649/72 -f 231/657/80 226/651/74 225/650/73 -f 226/658/74 233/659/81 227/652/75 -f 233/659/81 228/653/76 227/652/75 -f 228/653/76 229/654/77 223/655/78 -f 235/660/82 230/656/79 229/654/77 -f 236/661/83 231/657/80 230/656/79 -f 237/662/84 232/663/85 231/657/80 -f 238/664/86 233/659/81 232/665/85 -f 233/659/81 240/666/87 234/667/88 -f 234/667/88 235/660/82 229/654/77 -f 205/668/87 216/669/77 211/670/88 -f 212/671/81 205/668/87 211/670/88 -f 213/672/85 206/673/89 212/671/81 -f 214/674/80 207/675/86 213/676/85 -f 215/677/79 208/678/84 214/674/80 -f 210/679/82 215/677/79 216/669/77 -f 241/680/76 216/669/77 246/681/78 -f 212/671/81 241/680/76 242/682/75 -f 243/683/74 212/671/81 242/682/75 -f 244/684/73 213/676/85 243/685/74 -f 215/677/79 244/684/73 245/686/72 -f 216/669/77 245/686/72 246/681/78 -f 241/680/76 252/628/62 247/639/68 -f 242/682/75 247/639/68 248/631/66 -f 249/633/67 242/682/75 248/631/66 -f 250/641/65 243/685/74 249/647/67 -f 251/626/64 244/684/73 250/641/65 -f 252/628/62 245/686/72 251/626/64 -f 270/562/28 670/687/90 271/688/90 -f 263/567/45 677/689/21 264/690/21 -f 271/688/90 669/691/23 272/692/23 -f 264/693/21 676/694/91 265/695/91 -f 272/696/23 668/697/92 273/698/92 -f 265/695/91 675/699/27 266/700/27 -f 273/698/92 667/701/39 274/532/39 -f 266/700/27 674/702/42 267/538/42 -f 285/703/30 280/704/38 279/705/30 -f 289/706/40 282/707/32 288/708/32 -f 285/703/30 278/709/36 284/710/36 -f 290/711/35 291/712/40 289/706/40 -f 287/713/93 282/714/32 281/715/93 -f 284/716/36 277/717/94 283/718/94 -f 286/719/38 281/720/93 280/721/38 -f 283/718/94 292/722/35 290/711/35 -f 460/723/27 461/724/61 459/725/27 -f 702/726/50 709/727/51 703/728/51 -f 432/729/28 433/730/57 431/731/28 -f 718/732/47 725/733/48 719/734/48 -f 706/735/47 697/736/48 699/737/48 -f 434/738/57 435/739/27 433/730/57 -f 458/740/57 459/725/27 457/741/57 -f 704/742/56 709/743/51 710/744/55 -f 436/745/27 437/746/61 435/739/27 -f 722/747/50 713/748/51 715/749/51 -f 701/750/58 698/751/53 707/752/58 -f 438/753/61 439/754/29 437/746/61 -f 456/755/28 457/741/57 455/756/28 -f 700/757/52 697/758/48 698/759/53 -f 440/760/29 441/761/49 439/754/29 -f 720/762/52 725/763/48 726/764/53 -f 705/765/54 712/766/60 706/735/47 -f 442/767/49 443/768/39 441/761/49 -f 701/750/58 708/769/59 702/726/50 -f 444/770/39 445/771/46 443/768/39 -f 717/772/54 714/773/55 723/774/54 -f 705/765/54 710/775/55 711/776/54 -f 446/777/46 431/778/28 445/771/46 -f 462/779/61 463/780/29 461/724/61 -f 721/781/58 726/782/53 727/783/58 -f 464/784/29 465/785/49 463/780/29 -f 716/786/56 713/787/51 714/788/55 -f 466/789/49 467/790/39 465/785/49 -f 717/772/54 724/791/60 718/732/47 -f 468/792/39 469/793/46 467/790/39 -f 721/781/58 728/794/59 722/747/50 -f 470/795/46 455/796/28 469/793/46 -f 501/797/95 487/798/70 488/799/26 -f 536/800/95 478/801/70 481/802/26 -f 503/803/96 487/798/70 502/804/97 -f 532/805/98 480/806/25 533/807/99 -f 505/808/98 485/809/25 504/810/99 -f 506/811/100 484/812/71 505/808/98 -f 531/813/100 481/802/26 482/814/63 -f 534/815/96 478/801/70 535/816/97 -f 504/817/99 486/818/69 503/803/96 -f 531/813/100 483/819/71 532/805/98 -f 501/797/95 479/820/63 506/811/100 -f 533/821/99 477/822/69 534/815/96 -f 507/823/101 502/804/97 501/797/95 -f 502/804/97 509/824/102 503/803/96 -f 503/803/96 510/825/103 504/817/99 -f 510/826/103 505/808/98 504/810/99 -f 511/827/104 506/811/100 505/808/98 -f 506/811/100 507/823/101 501/797/95 -f 513/828/105 508/829/106 507/823/101 -f 514/830/107 509/824/102 508/829/106 -f 515/831/108 510/825/103 509/824/102 -f 516/832/109 511/827/104 510/826/103 -f 517/833/110 512/834/111 511/827/104 -f 512/834/111 513/828/105 507/823/101 -f 519/835/112 514/830/107 513/828/105 -f 520/836/113 515/831/108 514/830/107 -f 515/831/108 522/837/114 516/838/109 -f 516/832/109 523/839/115 517/833/110 -f 517/833/110 524/840/116 518/841/117 -f 518/841/117 519/835/112 513/828/105 -f 489/842/116 500/843/105 495/844/117 -f 496/845/110 489/842/116 495/844/117 -f 491/846/114 496/845/110 497/847/109 -f 498/848/108 491/849/114 497/850/109 -f 493/851/113 498/848/108 499/852/107 -f 494/853/112 499/852/107 500/843/105 -f 525/854/111 500/843/105 530/855/101 -f 496/845/110 525/854/111 526/856/104 -f 497/847/109 526/856/104 527/857/103 -f 528/858/102 497/850/109 527/859/103 -f 499/852/107 528/858/102 529/860/106 -f 500/843/105 529/860/106 530/855/101 -f 525/854/111 536/800/95 531/813/100 -f 526/856/104 531/813/100 532/805/98 -f 527/857/103 532/805/98 533/807/99 -f 534/815/96 527/859/103 533/821/99 -f 535/816/97 528/858/102 534/815/96 -f 530/855/101 535/816/97 536/800/95 -f 538/861/22 539/862/41 537/863/22 -f 540/864/41 541/865/39 539/866/41 -f 542/867/39 543/868/92 541/869/39 -f 544/870/92 545/871/23 543/872/92 -f 546/873/23 547/874/90 545/875/23 -f 548/876/90 549/877/28 547/878/90 -f 550/879/28 551/880/44 549/881/28 -f 552/882/44 553/883/24 551/884/44 -f 554/885/24 555/886/42 553/887/24 -f 556/888/42 557/889/27 555/890/42 -f 558/891/27 559/892/91 557/893/27 -f 560/894/91 561/895/21 559/896/91 -f 562/897/21 563/898/45 561/899/21 -f 564/900/45 565/901/29 563/902/45 -f 566/903/29 567/904/43 565/905/29 -f 568/906/43 537/907/22 567/908/43 -f 569/909/42 587/910/27 571/911/27 -f 578/912/41 595/913/39 579/914/39 -f 571/915/27 588/916/91 572/917/91 -f 579/918/39 596/919/92 580/920/92 -f 572/921/91 589/922/21 573/923/21 -f 580/924/92 597/925/23 581/926/23 -f 573/927/21 590/928/45 574/929/45 -f 581/930/23 598/931/90 582/932/90 -f 574/933/45 591/934/29 575/935/29 -f 582/936/90 599/937/28 583/938/28 -f 575/939/29 592/940/43 576/941/43 -f 583/942/28 600/943/44 584/944/44 -f 576/945/43 593/946/22 577/947/22 -f 570/948/24 585/949/42 569/950/42 -f 584/951/44 586/952/24 570/953/24 -f 577/954/22 594/955/41 578/956/41 -f 625/526/22 658/957/39 626/958/39 -f 612/959/28 645/960/24 613/961/24 -f 626/962/39 659/963/23 627/964/23 -f 601/513/22 634/965/39 602/493/39 -f 613/961/24 646/966/27 614/967/27 -f 627/964/23 660/968/28 628/969/28 -f 614/967/27 647/970/21 615/971/21 -f 628/969/28 661/972/24 629/973/24 -f 615/971/21 648/974/29 616/975/29 -f 629/973/24 662/976/27 630/977/27 -f 616/975/29 641/978/22 609/507/22 -f 603/495/23 636/979/28 604/980/28 -f 630/977/27 663/981/21 631/982/21 -f 617/501/22 650/983/39 618/530/39 -f 604/980/28 637/984/24 605/527/24 -f 631/982/21 664/985/29 632/524/29 -f 689/986/54 696/987/60 690/988/47 -f 685/989/58 692/990/59 686/991/50 -f 684/992/52 681/993/48 682/994/53 -f 689/986/54 694/995/55 695/996/54 -f 685/989/58 682/997/53 691/998/58 -f 688/999/56 693/1000/51 694/1001/55 -f 690/988/47 681/1002/48 683/1003/48 -f 686/991/50 693/1004/51 687/1005/51 -f 602/493/39 634/965/39 635/494/23 -f 611/496/23 643/503/23 644/497/28 -f 624/499/29 656/1006/29 649/500/22 -f 610/502/39 642/508/39 643/503/23 -f 623/504/21 655/510/21 656/505/29 -f 609/507/22 641/978/22 642/508/39 -f 622/509/27 654/515/27 655/510/21 -f 608/511/29 640/517/29 633/512/22 -f 621/514/24 653/519/24 654/515/27 -f 607/516/21 639/521/21 640/517/29 -f 620/518/28 652/523/28 653/519/24 -f 606/520/27 638/1007/27 639/521/21 -f 619/522/23 651/531/23 652/523/28 -f 632/524/29 664/985/29 657/525/22 -f 605/527/24 637/984/24 638/528/27 -f 618/530/39 650/983/39 651/531/23 -f 274/532/39 667/701/39 666/533/41 -f 124/535/22 126/541/39 125/536/39 -f 267/538/42 674/702/42 673/539/24 -f 126/541/39 128/546/23 127/542/23 -f 276/543/22 665/1008/22 680/544/43 -f 128/546/23 130/550/28 129/547/28 -f 275/534/41 666/533/41 665/548/22 -f 130/550/28 132/555/24 131/551/24 -f 268/552/24 673/1009/24 672/553/44 -f 132/555/24 134/559/27 133/556/27 -f 261/545/43 680/544/43 679/557/29 -f 134/559/27 136/1010/21 135/560/21 -f 269/554/44 672/553/44 671/561/28 -f 136/563/21 138/568/29 137/564/29 -f 262/558/29 679/557/29 678/566/45 -f 138/568/29 124/535/22 123/537/22 -f 176/569/39 178/613/46 177/570/46 -f 734/572/47 740/1011/60 741/573/48 -f 148/575/29 150/581/49 149/576/49 -f 738/578/50 744/1012/59 729/579/51 -f 150/581/49 152/588/39 151/582/39 -f 174/583/49 176/569/39 175/571/39 -f 736/585/52 735/574/48 741/586/48 -f 152/588/39 154/593/46 153/589/46 -f 733/590/54 732/597/56 730/591/55 -f 154/593/46 156/600/28 155/594/28 -f 172/595/29 174/583/49 173/584/49 -f 732/597/56 731/1013/51 729/598/51 -f 156/600/28 158/604/57 157/601/57 -f 737/602/58 743/1014/58 744/603/59 -f 158/604/57 160/607/27 159/605/27 -f 733/590/54 739/1015/54 740/606/60 -f 160/607/27 162/611/61 161/608/61 -f 737/602/58 736/585/52 742/609/53 -f 162/611/61 148/1016/29 147/612/29 -f 178/613/46 180/615/28 179/614/28 -f 180/615/28 182/617/57 181/616/57 -f 182/617/57 184/619/27 183/618/27 -f 184/619/27 186/621/61 185/620/61 -f 186/621/61 172/1017/29 171/622/29 -f 217/623/62 218/630/64 203/624/63 -f 251/626/64 194/642/63 197/627/26 -f 219/629/65 202/644/71 203/624/63 -f 248/631/66 199/645/69 196/632/25 -f 221/634/66 200/638/69 201/635/25 -f 222/637/68 195/646/70 200/638/69 -f 247/639/68 252/628/62 197/627/26 -f 250/641/65 193/648/71 194/642/63 -f 220/643/67 201/1018/25 202/644/71 -f 247/639/68 198/640/70 199/645/69 -f 222/637/68 217/623/62 204/625/26 -f 249/647/67 196/1019/25 193/648/71 -f 217/623/62 223/655/78 224/649/72 -f 218/630/64 224/649/72 225/650/73 -f 219/629/65 225/650/73 226/651/74 -f 220/636/67 226/658/74 227/652/75 -f 227/652/75 228/653/76 222/637/68 -f 228/653/76 223/655/78 217/623/62 -f 229/654/77 230/656/79 224/649/72 -f 230/656/79 231/657/80 225/650/73 -f 231/657/80 232/663/85 226/651/74 -f 226/658/74 232/665/85 233/659/81 -f 233/659/81 234/667/88 228/653/76 -f 228/653/76 234/667/88 229/654/77 -f 235/660/82 236/661/83 230/656/79 -f 236/661/83 237/662/84 231/657/80 -f 237/662/84 238/1020/86 232/663/85 -f 238/664/86 239/1021/89 233/659/81 -f 233/659/81 239/1021/89 240/666/87 -f 234/667/88 240/666/87 235/660/82 -f 205/668/87 210/679/82 216/669/77 -f 212/671/81 206/673/89 205/668/87 -f 213/672/85 207/1022/86 206/673/89 -f 214/674/80 208/678/84 207/675/86 -f 215/677/79 209/1023/83 208/678/84 -f 210/679/82 209/1023/83 215/677/79 -f 241/680/76 211/670/88 216/669/77 -f 212/671/81 211/670/88 241/680/76 -f 243/683/74 213/672/85 212/671/81 -f 244/684/73 214/674/80 213/676/85 -f 215/677/79 214/674/80 244/684/73 -f 216/669/77 215/677/79 245/686/72 -f 241/680/76 246/681/78 252/628/62 -f 242/682/75 241/680/76 247/639/68 -f 249/633/67 243/683/74 242/682/75 -f 250/641/65 244/684/73 243/685/74 -f 251/626/64 245/686/72 244/684/73 -f 252/628/62 246/681/78 245/686/72 -f 270/562/28 671/561/28 670/687/90 -f 263/567/45 678/566/45 677/689/21 -f 271/688/90 670/687/90 669/691/23 -f 264/693/21 677/1024/21 676/694/91 -f 272/696/23 669/1025/23 668/697/92 -f 265/695/91 676/694/91 675/699/27 -f 273/698/92 668/697/92 667/701/39 -f 266/700/27 675/699/27 674/702/42 -f 285/703/30 286/719/38 280/704/38 -f 289/706/40 291/1026/40 282/707/32 -f 285/703/30 279/1027/30 278/709/36 -f 290/711/35 292/1028/35 291/712/40 -f 287/713/93 288/708/32 282/714/32 -f 284/716/36 278/1029/36 277/717/94 -f 286/719/38 287/713/93 281/720/93 -f 283/718/94 277/1030/94 292/722/35 -f 460/723/27 462/779/61 461/724/61 -f 702/726/50 708/1031/59 709/727/51 -f 432/729/28 434/738/57 433/730/57 -f 718/732/47 724/1032/60 725/733/48 -f 706/735/47 712/1033/60 697/736/48 -f 434/738/57 436/745/27 435/739/27 -f 458/740/57 460/723/27 459/725/27 -f 704/742/56 703/728/51 709/743/51 -f 436/745/27 438/753/61 437/746/61 -f 722/747/50 728/1034/59 713/748/51 -f 701/750/58 700/757/52 698/751/53 -f 438/753/61 440/760/29 439/754/29 -f 456/755/28 458/740/57 457/741/57 -f 700/757/52 699/1035/48 697/758/48 -f 440/760/29 442/767/49 441/761/49 -f 720/762/52 719/734/48 725/763/48 -f 705/765/54 711/1036/54 712/766/60 -f 442/767/49 444/770/39 443/768/39 -f 701/750/58 707/1037/58 708/769/59 -f 444/770/39 446/777/46 445/771/46 -f 717/772/54 716/786/56 714/773/55 -f 705/765/54 704/742/56 710/775/55 -f 446/777/46 432/1038/28 431/778/28 -f 462/779/61 464/784/29 463/780/29 -f 721/781/58 720/762/52 726/782/53 -f 464/784/29 466/789/49 465/785/49 -f 716/786/56 715/1039/51 713/787/51 -f 466/789/49 468/792/39 467/790/39 -f 717/772/54 723/1040/54 724/791/60 -f 468/792/39 470/795/46 469/793/46 -f 721/781/58 727/1041/58 728/794/59 -f 470/795/46 456/1042/28 455/796/28 -f 501/797/95 502/804/97 487/798/70 -f 536/800/95 535/816/97 478/801/70 -f 503/803/96 486/818/69 487/798/70 -f 532/805/98 483/819/71 480/806/25 -f 505/808/98 484/812/71 485/809/25 -f 506/811/100 479/820/63 484/812/71 -f 531/813/100 536/800/95 481/802/26 -f 534/815/96 477/822/69 478/801/70 -f 504/817/99 485/1043/25 486/818/69 -f 531/813/100 482/814/63 483/819/71 -f 501/797/95 488/799/26 479/820/63 -f 533/821/99 480/1044/25 477/822/69 -f 507/823/101 508/829/106 502/804/97 -f 502/804/97 508/829/106 509/824/102 -f 503/803/96 509/824/102 510/825/103 -f 510/826/103 511/827/104 505/808/98 -f 511/827/104 512/834/111 506/811/100 -f 506/811/100 512/834/111 507/823/101 -f 513/828/105 514/830/107 508/829/106 -f 514/830/107 515/831/108 509/824/102 -f 515/831/108 516/838/109 510/825/103 -f 516/832/109 517/833/110 511/827/104 -f 517/833/110 518/841/117 512/834/111 -f 512/834/111 518/841/117 513/828/105 -f 519/835/112 520/836/113 514/830/107 -f 520/836/113 521/1045/118 515/831/108 -f 515/831/108 521/1045/118 522/837/114 -f 516/832/109 522/1046/114 523/839/115 -f 517/833/110 523/839/115 524/840/116 -f 518/841/117 524/840/116 519/835/112 -f 489/842/116 494/853/112 500/843/105 -f 496/845/110 490/1047/115 489/842/116 -f 491/846/114 490/1047/115 496/845/110 -f 498/848/108 492/1048/118 491/849/114 -f 493/851/113 492/1048/118 498/848/108 -f 494/853/112 493/851/113 499/852/107 -f 525/854/111 495/844/117 500/843/105 -f 496/845/110 495/844/117 525/854/111 -f 497/847/109 496/845/110 526/856/104 -f 528/858/102 498/848/108 497/850/109 -f 499/852/107 498/848/108 528/858/102 -f 500/843/105 499/852/107 529/860/106 -f 525/854/111 530/855/101 536/800/95 -f 526/856/104 525/854/111 531/813/100 -f 527/857/103 526/856/104 532/805/98 -f 534/815/96 528/858/102 527/859/103 -f 535/816/97 529/860/106 528/858/102 -f 530/855/101 529/860/106 535/816/97 -f 538/861/22 540/1049/41 539/862/41 -f 540/864/41 542/1050/39 541/865/39 -f 542/867/39 544/1051/92 543/868/92 -f 544/870/92 546/1052/23 545/871/23 -f 546/873/23 548/1053/90 547/874/90 -f 548/876/90 550/1054/28 549/877/28 -f 550/879/28 552/1055/44 551/880/44 -f 552/882/44 554/1056/24 553/883/24 -f 554/885/24 556/1057/42 555/886/42 -f 556/888/42 558/1058/27 557/889/27 -f 558/891/27 560/1059/91 559/892/91 -f 560/894/91 562/1060/21 561/895/21 -f 562/897/21 564/1061/45 563/898/45 -f 564/900/45 566/1062/29 565/901/29 -f 566/903/29 568/1063/43 567/904/43 -f 568/906/43 538/1064/22 537/907/22 -f 569/909/42 585/1065/42 587/910/27 -f 578/912/41 594/1066/41 595/913/39 -f 571/915/27 587/1067/27 588/916/91 -f 579/918/39 595/1068/39 596/919/92 -f 572/921/91 588/1069/91 589/922/21 -f 580/924/92 596/1070/92 597/925/23 -f 573/927/21 589/1071/21 590/928/45 -f 581/930/23 597/1072/23 598/931/90 -f 574/933/45 590/1073/45 591/934/29 -f 582/936/90 598/1074/90 599/937/28 -f 575/939/29 591/1075/29 592/940/43 -f 583/942/28 599/1076/28 600/943/44 -f 576/945/43 592/1077/43 593/946/22 -f 570/948/24 586/1078/24 585/949/42 -f 584/951/44 600/1079/44 586/952/24 -f 577/954/22 593/1080/22 594/955/41 -f 625/526/22 657/525/22 658/957/39 -f 612/959/28 644/1081/28 645/960/24 -f 626/962/39 658/1082/39 659/963/23 -f 601/513/22 633/512/22 634/965/39 -f 613/961/24 645/960/24 646/966/27 -f 627/964/23 659/963/23 660/968/28 -f 614/967/27 646/966/27 647/970/21 -f 628/969/28 660/968/28 661/972/24 -f 615/971/21 647/970/21 648/974/29 -f 629/973/24 661/972/24 662/976/27 -f 616/975/29 648/974/29 641/978/22 -f 603/495/23 635/494/23 636/979/28 -f 630/977/27 662/976/27 663/981/21 -f 617/501/22 649/500/22 650/983/39 -f 604/980/28 636/979/28 637/984/24 -f 631/982/21 663/981/21 664/985/29 -f 689/986/54 695/1083/54 696/987/60 -f 685/989/58 691/1084/58 692/990/59 -f 684/992/52 683/1085/48 681/993/48 -f 689/986/54 688/999/56 694/995/55 -f 685/989/58 684/992/52 682/997/53 -f 688/999/56 687/1005/51 693/1000/51 -f 690/988/47 696/1086/60 681/1002/48 -f 686/991/50 692/1087/59 693/1004/51 +usemtl Texture +f 96/1/1 31/2/2 27/3/1 +f 44/4/3 24/5/4 26/6/3 +f 48/7/4 22/8/5 24/5/4 +f 52/9/5 20/10/6 22/8/5 +f 56/11/6 18/12/7 20/10/6 +f 60/13/7 16/14/8 18/12/7 +f 64/15/8 14/16/9 16/14/8 +f 68/17/9 12/18/10 14/19/9 +f 72/20/10 10/21/11 12/18/10 +f 76/22/11 8/23/12 10/21/11 +f 80/24/12 6/25/13 8/23/12 +f 84/26/13 4/27/14 6/25/13 +f 88/28/14 2/29/15 4/27/14 +f 92/30/15 27/3/1 2/29/15 +f 40/31/16 26/6/3 30/32/16 +f 34/33/2 29/34/16 38/35/16 +f 55/36/14 151/37/15 59/38/15 +f 36/39/2 30/32/16 31/2/2 +f 38/35/17 33/40/18 34/33/18 +f 36/39/19 130/41/20 40/31/20 +f 42/42/21 37/43/17 38/35/17 +f 40/44/20 131/45/22 44/46/22 +f 46/47/23 41/48/21 42/42/21 +f 44/4/22 132/49/24 48/7/24 +f 50/50/25 45/51/23 46/47/23 +f 48/52/24 133/53/26 52/54/26 +f 54/55/27 49/56/25 50/50/25 +f 52/9/26 134/57/28 56/11/28 +f 58/58/29 53/59/27 54/55/27 +f 56/60/28 135/61/30 60/62/30 +f 62/63/31 57/64/29 58/58/29 +f 60/13/30 136/65/32 64/15/32 +f 66/66/33 61/67/31 62/63/31 +f 64/68/32 137/69/34 68/70/34 +f 70/71/35 65/72/33 66/73/33 +f 68/17/34 138/74/36 72/20/36 +f 74/75/37 69/76/35 70/71/35 +f 72/77/36 139/78/38 76/79/38 +f 78/80/39 73/81/37 74/75/37 +f 76/22/38 140/82/40 80/24/40 +f 82/83/41 77/84/39 78/80/39 +f 80/85/40 141/86/42 84/87/42 +f 86/88/43 81/89/41 82/83/41 +f 84/26/42 142/90/44 88/28/44 +f 90/91/45 85/92/43 86/88/43 +f 88/93/44 143/94/46 92/95/46 +f 94/96/47 89/97/45 90/91/45 +f 92/30/46 144/98/48 96/1/48 +f 34/33/18 93/99/47 94/96/47 +f 96/100/48 129/101/19 36/102/19 +f 31/2/49 125/103/50 128/104/49 +f 29/34/16 42/42/3 38/35/16 +f 30/32/50 121/105/51 125/103/50 +f 1/106/15 94/96/1 90/91/15 +f 2/29/52 124/107/53 97/108/52 +f 3/109/14 90/91/15 86/88/14 +f 4/27/54 97/108/52 99/110/54 +f 5/111/13 86/88/14 82/83/13 +f 6/25/55 99/110/54 101/112/55 +f 7/113/12 82/83/13 78/80/12 +f 103/114/56 6/25/55 101/112/55 +f 9/115/11 78/80/12 74/75/11 +f 10/21/57 103/114/56 105/116/57 +f 11/117/10 74/75/11 70/71/10 +f 12/18/58 105/116/57 107/118/58 +f 13/119/9 70/71/10 66/73/9 +f 14/19/59 107/118/58 109/120/59 +f 15/121/8 66/66/9 62/63/8 +f 111/122/60 14/16/59 109/123/59 +f 17/124/7 62/63/8 58/58/7 +f 18/12/61 111/122/60 113/125/61 +f 19/126/6 58/58/7 54/55/6 +f 20/10/62 113/125/61 115/127/62 +f 21/128/5 54/55/6 50/50/5 +f 22/8/63 115/127/62 117/129/63 +f 23/130/4 50/50/5 46/47/4 +f 119/131/64 22/8/63 117/129/63 +f 25/132/3 46/47/4 42/42/3 +f 26/6/51 119/131/64 121/105/51 +f 28/133/1 34/33/2 94/96/1 +f 27/3/53 128/104/49 124/107/53 +f 28/133/65 127/134/66 32/135/66 +f 124/107/1 127/134/2 123/136/1 +f 122/137/67 23/130/68 25/132/67 +f 121/105/3 120/138/4 122/137/3 +f 120/138/68 21/128/69 23/130/68 +f 119/131/4 118/139/5 120/138/4 +f 21/128/69 116/140/70 19/126/70 +f 117/129/5 116/140/6 118/139/5 +f 19/126/70 114/141/71 17/124/71 +f 115/127/6 114/141/7 116/140/6 +f 114/141/71 15/121/72 17/124/71 +f 113/125/7 112/142/8 114/141/7 +f 112/142/72 13/143/73 15/121/72 +f 111/122/8 110/144/9 112/142/8 +f 13/119/73 108/145/74 11/117/74 +f 109/120/9 108/145/10 110/146/9 +f 11/117/74 106/147/75 9/115/75 +f 107/118/10 106/147/11 108/145/10 +f 106/147/75 7/113/76 9/115/75 +f 105/116/11 104/148/12 106/147/11 +f 104/148/76 5/111/77 7/113/76 +f 103/114/12 102/149/13 104/148/12 +f 5/111/77 100/150/78 3/109/78 +f 101/112/13 100/150/14 102/149/13 +f 3/109/78 98/151/79 1/106/79 +f 99/110/14 98/151/15 100/150/14 +f 98/151/79 28/133/65 1/106/79 +f 97/108/15 123/136/1 98/151/15 +f 29/34/80 122/137/67 25/132/67 +f 125/103/16 122/137/3 126/152/16 +f 32/135/66 126/152/80 29/34/80 +f 127/134/2 125/103/16 126/152/16 +f 39/153/81 129/101/81 35/154/81 +f 43/155/81 130/156/81 39/153/81 +f 47/157/81 131/45/81 43/155/81 +f 47/157/81 133/53/81 132/158/81 +f 55/36/81 133/53/81 51/159/81 +f 59/38/81 134/160/81 55/36/81 +f 63/161/81 135/61/81 59/38/81 +f 63/161/81 137/69/81 136/162/81 +f 71/163/81 137/164/81 67/165/81 +f 75/166/81 138/167/81 71/163/81 +f 79/168/81 139/78/81 75/166/81 +f 79/168/81 141/86/81 140/169/81 +f 87/170/81 141/86/81 83/171/81 +f 91/172/81 142/173/81 87/170/81 +f 95/174/81 143/94/81 91/172/81 +f 95/174/81 129/101/81 144/175/81 +f 87/170/6 159/176/7 91/172/7 +f 59/38/15 152/177/1 63/161/1 +f 91/172/7 160/178/8 95/174/8 +f 63/161/1 153/179/2 67/180/2 +f 35/154/9 146/181/10 39/153/10 +f 95/174/8 145/182/9 35/154/9 +f 67/165/2 154/183/16 71/163/16 +f 39/153/10 147/184/11 43/155/11 +f 71/163/16 155/185/3 75/166/3 +f 43/155/11 148/186/12 47/157/12 +f 75/166/3 156/187/4 79/168/4 +f 47/157/12 149/188/13 51/159/13 +f 79/168/4 157/189/5 83/171/5 +f 51/159/13 150/190/14 55/36/14 +f 83/171/5 158/191/6 87/170/6 +f 146/192/81 145/193/81 161/194/81 +f 145/195/81 160/196/81 161/197/81 +f 160/198/81 159/199/81 161/200/81 +f 159/201/81 158/202/81 161/203/81 +f 158/204/81 157/205/81 161/206/81 +f 157/207/81 156/208/81 161/209/81 +f 156/210/81 155/211/81 161/212/81 +f 155/213/81 154/214/81 161/215/81 +f 154/216/81 153/217/81 161/218/81 +f 153/219/81 152/220/81 161/221/81 +f 152/222/81 151/223/81 161/224/81 +f 151/225/81 150/226/81 161/227/81 +f 150/228/81 149/229/81 161/230/81 +f 149/231/81 148/232/81 161/233/81 +f 148/234/81 147/235/81 161/236/81 +f 147/237/81 146/238/81 161/239/81 +f 163/240/82 164/241/83 162/242/82 +f 165/243/83 166/244/84 164/241/83 +f 167/245/84 168/246/85 166/244/84 +f 169/247/85 170/248/86 168/246/85 +f 171/249/86 172/250/87 170/248/86 +f 173/251/87 174/252/88 172/250/87 +f 175/253/88 176/254/89 174/255/88 +f 177/256/89 178/257/90 176/254/89 +f 179/258/90 180/259/91 178/257/90 +f 181/260/91 182/261/92 180/259/91 +f 183/262/81 175/263/81 167/264/81 +f 183/265/92 184/266/93 182/261/92 +f 185/267/93 162/242/82 184/266/93 +f 186/268/94 190/269/94 189/270/94 +f 186/268/94 192/271/94 188/272/94 +f 205/273/95 189/270/10 190/269/95 +f 191/274/10 192/271/11 189/270/10 +f 193/275/11 194/276/12 192/271/11 +f 188/272/94 194/276/94 196/277/94 +f 195/278/12 197/279/96 194/276/12 +f 196/277/94 197/279/94 198/280/94 +f 200/281/97 197/279/97 199/282/97 +f 201/283/81 199/282/81 195/278/81 +f 202/284/81 195/278/81 193/275/81 +f 202/284/81 191/274/81 203/285/81 +f 203/285/81 205/273/81 204/286/81 +f 190/269/98 204/287/98 205/273/98 +f 206/268/94 210/269/94 209/270/94 +f 206/268/94 212/271/94 208/272/94 +f 225/273/98 209/270/6 210/269/98 +f 211/274/6 212/271/7 209/270/6 +f 213/275/7 214/276/8 212/271/7 +f 208/272/94 214/276/94 216/277/94 +f 215/278/8 217/279/99 214/276/8 +f 216/277/94 217/279/94 218/280/94 +f 220/281/96 217/279/96 219/282/96 +f 221/283/81 219/282/81 215/278/81 +f 221/283/81 213/275/81 222/284/81 +f 223/285/81 213/275/81 211/274/81 +f 223/285/81 225/273/81 224/286/81 +f 210/269/100 224/287/100 225/273/100 +f 226/268/94 230/269/94 229/270/94 +f 226/268/94 232/271/94 228/272/94 +f 245/273/100 229/270/16 230/269/100 +f 231/274/16 232/271/3 229/270/16 +f 233/275/3 234/276/4 232/271/3 +f 228/272/94 234/276/94 236/277/94 +f 235/278/4 237/279/101 234/276/4 +f 236/277/94 237/279/94 238/280/94 +f 240/281/99 237/279/99 239/282/99 +f 241/283/81 239/282/81 235/278/81 +f 241/283/81 233/275/81 242/284/81 +f 242/284/81 231/274/81 243/285/81 +f 243/285/81 245/273/81 244/286/81 +f 230/269/102 244/287/102 245/273/102 +f 246/268/94 250/269/94 249/270/94 +f 246/268/94 252/271/94 248/272/94 +f 265/273/102 249/270/14 250/269/102 +f 251/274/14 252/271/15 249/270/14 +f 253/275/15 254/276/1 252/271/15 +f 248/272/94 254/276/94 256/277/94 +f 255/278/1 257/279/97 254/276/1 +f 256/277/94 257/279/94 258/280/94 +f 260/281/101 257/279/101 259/282/101 +f 261/283/81 259/282/81 255/278/81 +f 261/283/81 253/275/81 262/284/81 +f 263/285/81 253/275/81 251/274/81 +f 263/285/81 265/273/81 264/286/81 +f 250/269/95 264/287/95 265/273/95 +f 289/288/9 266/289/9 275/290/9 +f 287/291/5 274/292/5 279/293/5 +f 280/294/69 296/295/69 277/296/69 +f 283/297/13 270/298/13 267/299/13 +f 285/300/2 278/301/2 271/302/2 +f 282/303/11 267/304/11 266/289/11 +f 271/302/15 284/305/15 285/300/15 +f 279/306/3 286/307/3 287/308/3 +f 275/290/7 288/309/7 289/288/7 +f 279/293/94 275/310/94 267/311/94 +f 269/312/81 283/313/81 282/314/81 +f 273/315/81 285/316/81 284/317/81 +f 281/318/81 287/319/81 286/320/81 +f 277/321/81 289/322/81 288/323/81 +f 273/315/81 283/313/81 268/324/81 +f 269/312/81 289/322/81 276/325/81 +f 277/321/81 287/319/81 280/326/81 +f 281/318/81 285/316/81 272/327/81 +f 292/328/81 290/329/81 296/330/81 +f 268/331/77 292/332/77 273/333/77 +f 281/334/103 295/335/104 280/336/104 +f 269/337/105 291/338/106 268/339/106 +f 272/340/66 294/341/66 281/342/66 +f 276/343/73 290/344/73 269/345/73 +f 277/346/107 297/347/108 276/348/108 +f 273/349/109 293/350/110 272/351/110 +f 298/352/111 301/353/111 299/354/111 +f 309/355/98 316/356/98 311/357/98 +f 300/358/81 316/359/81 301/353/81 +f 302/360/81 321/361/81 303/362/81 +f 304/363/95 306/364/95 305/365/95 +f 301/353/98 307/366/98 299/354/98 +f 303/367/98 323/368/98 313/369/98 +f 298/352/100 318/370/100 319/371/100 +f 319/372/102 306/373/102 298/352/102 +f 298/352/102 308/374/102 300/358/102 +f 321/361/5 326/375/5 323/368/5 +f 315/376/112 317/356/112 316/359/113 +f 314/377/95 303/362/95 317/356/95 +f 315/377/102 308/378/102 310/379/102 +f 310/380/102 302/381/102 314/382/102 +f 311/383/98 303/384/98 313/385/98 +f 317/357/98 311/356/98 316/362/98 +f 315/360/102 310/377/102 314/379/102 +f 319/371/114 304/386/114 305/387/114 +f 318/388/98 307/389/98 304/390/98 +f 322/391/102 302/392/102 312/393/102 +f 322/391/13 324/394/13 320/395/13 +f 320/395/81 327/396/81 321/361/81 +f 328/397/112 331/398/112 329/399/112 +f 339/400/102 346/401/102 341/402/102 +f 330/403/81 346/404/81 331/398/81 +f 332/405/81 351/406/81 333/407/81 +f 334/363/100 336/364/100 335/365/100 +f 331/398/102 337/408/102 329/399/102 +f 333/409/102 353/410/102 343/411/102 +f 328/397/95 348/412/95 349/413/95 +f 349/414/98 336/415/98 328/397/98 +f 328/397/98 338/416/98 330/403/98 +f 351/406/13 356/417/13 353/410/13 +f 345/418/111 347/401/111 346/404/115 +f 347/401/100 332/405/100 333/407/100 +f 345/419/98 338/420/98 340/421/98 +f 340/380/98 332/381/98 344/382/98 +f 341/383/102 333/384/102 343/385/102 +f 347/402/102 341/401/102 346/407/102 +f 345/405/98 340/419/98 344/421/98 +f 348/412/116 335/422/116 349/413/116 +f 348/423/102 337/424/102 334/425/102 +f 352/426/98 332/427/98 342/428/98 +f 352/426/5 354/429/5 350/430/5 +f 350/430/81 357/431/81 351/406/81 +f 358/432/117 361/433/117 359/434/117 +f 369/435/95 376/436/95 371/437/95 +f 360/438/81 376/439/81 361/433/81 +f 362/440/81 381/441/81 363/442/81 +f 364/363/102 366/364/102 365/365/102 +f 361/433/95 367/443/95 359/434/95 +f 363/444/95 383/445/95 373/446/95 +f 358/432/98 378/447/98 379/448/98 +f 379/449/100 366/450/100 358/432/100 +f 358/432/100 368/451/100 360/438/100 +f 381/441/9 386/452/9 383/445/9 +f 375/453/118 377/436/118 376/439/118 +f 374/454/102 363/442/102 377/436/102 +f 375/454/100 368/455/100 370/456/100 +f 370/380/100 362/381/100 374/382/100 +f 371/383/95 363/384/95 373/385/95 +f 377/437/95 371/436/95 376/442/95 +f 375/440/100 370/454/100 374/456/100 +f 378/447/119 365/457/119 379/448/119 +f 378/458/95 367/459/95 364/460/95 +f 382/461/100 362/462/100 372/463/100 +f 382/461/2 384/464/2 380/465/2 +f 380/465/81 387/466/81 381/441/81 +f 388/467/118 391/468/118 389/469/118 +f 399/470/100 406/471/100 401/472/100 +f 390/473/81 406/474/81 391/468/81 +f 392/475/81 411/476/81 393/477/81 +f 394/363/98 396/364/98 395/365/98 +f 391/468/100 397/478/100 389/469/100 +f 393/479/100 413/480/100 403/481/100 +f 388/467/102 408/482/102 409/483/102 +f 409/484/95 396/485/95 388/467/95 +f 388/467/95 398/486/95 390/473/95 +f 411/476/2 416/487/2 413/480/2 +f 405/488/117 407/471/117 406/474/117 +f 404/489/98 393/477/98 407/471/98 +f 405/489/95 398/490/95 400/491/95 +f 400/380/95 392/381/95 404/382/95 +f 401/383/100 393/384/100 403/385/100 +f 407/472/100 401/471/100 406/477/100 +f 405/475/95 400/489/95 404/491/95 +f 409/483/120 394/492/120 395/493/120 +f 408/494/100 397/495/100 394/496/100 +f 412/497/95 392/498/95 402/499/95 +f 412/497/9 414/500/9 410/501/9 +f 410/501/81 417/502/81 411/476/81 +f 423/503/121 424/504/121 420/505/121 +f 422/506/5 418/507/5 421/508/5 +f 420/509/81 422/506/81 423/510/81 +f 420/511/9 418/507/9 419/512/9 +f 423/513/2 421/508/2 425/514/2 +f 431/503/121 432/504/121 428/505/121 +f 430/506/5 426/507/5 429/508/5 +f 428/509/81 430/506/81 431/510/81 +f 428/511/9 426/507/9 427/512/9 +f 431/513/2 429/508/2 433/514/2 +f 439/503/121 440/504/121 436/505/121 +f 438/506/5 434/507/5 437/508/5 +f 436/509/81 438/506/81 439/510/81 +f 436/511/9 434/507/9 435/512/9 +f 439/513/2 437/508/2 441/514/2 +f 447/503/122 448/504/122 444/505/122 +f 446/506/9 442/507/9 445/508/9 +f 444/509/81 446/506/81 447/510/81 +f 444/511/13 442/507/13 443/512/13 +f 447/513/5 445/508/5 449/514/5 +f 455/503/122 456/504/122 452/505/122 +f 454/506/9 450/507/9 453/508/9 +f 452/509/81 454/506/81 455/510/81 +f 452/511/13 450/507/13 451/512/13 +f 455/513/5 453/508/5 457/514/5 +f 463/503/122 464/504/122 460/505/122 +f 462/506/9 458/507/9 461/508/9 +f 460/509/81 462/506/81 463/510/81 +f 460/511/13 458/507/13 459/512/13 +f 463/513/5 461/508/5 465/514/5 +f 471/503/123 472/504/123 468/505/123 +f 470/506/13 466/507/13 469/508/13 +f 468/509/81 470/506/81 471/510/81 +f 468/511/2 466/507/2 467/512/2 +f 471/513/9 469/508/9 473/514/9 +f 479/503/123 480/504/123 476/505/123 +f 478/506/13 474/507/13 477/508/13 +f 476/509/81 478/506/81 479/510/81 +f 476/511/2 474/507/2 475/512/2 +f 479/513/9 477/508/9 481/514/9 +f 487/503/123 488/504/123 484/505/123 +f 486/506/13 482/507/13 485/508/13 +f 484/509/81 486/506/81 487/510/81 +f 484/511/2 482/507/2 483/512/2 +f 487/513/9 485/508/9 489/514/9 +f 495/503/124 496/504/124 492/505/124 +f 494/506/2 490/507/2 493/508/2 +f 492/509/81 494/506/81 495/510/81 +f 492/511/5 490/507/5 491/512/5 +f 495/513/13 493/508/13 497/514/13 +f 503/503/124 504/504/124 500/505/124 +f 502/506/2 498/507/2 501/508/2 +f 500/509/81 502/506/81 503/510/81 +f 500/511/5 498/507/5 499/512/5 +f 503/513/13 501/508/13 505/514/13 +f 511/503/124 512/504/124 508/505/124 +f 510/506/2 506/507/2 509/508/2 +f 508/509/81 510/506/81 511/510/81 +f 508/511/5 506/507/5 507/512/5 +f 511/513/13 509/508/13 513/514/13 +f 515/515/125 517/516/126 518/517/127 +f 514/518/128 519/519/129 517/520/126 +f 518/521/127 520/522/130 521/523/131 +f 517/524/126 522/525/132 520/526/130 +f 521/527/131 523/528/133 524/529/134 +f 522/530/132 523/531/133 520/532/130 +f 524/533/134 526/534/135 527/535/136 +f 525/536/137 526/537/135 523/538/133 +f 526/539/135 530/540/138 527/541/136 +f 528/542/139 529/543/140 526/544/135 +f 529/545/140 533/546/141 530/547/138 +f 531/548/142 532/549/143 529/550/140 +f 533/551/141 535/552/144 536/553/145 +f 532/554/143 537/555/146 535/556/144 +f 536/557/145 538/558/147 539/559/148 +f 537/560/146 538/561/147 535/562/144 +f 539/563/148 541/564/149 542/565/150 +f 538/566/147 543/567/151 541/568/149 +f 542/569/150 544/570/152 545/571/153 +f 543/572/151 544/573/152 541/574/149 +f 545/575/153 547/576/154 548/577/155 +f 546/578/156 547/579/154 544/580/152 +f 547/581/154 551/582/157 548/583/155 +f 547/584/154 552/585/158 550/586/159 +f 549/587/160 553/588/161 552/585/158 +f 555/589/162 554/590/163 553/588/161 +f 557/591/164 556/592/165 555/593/162 +f 546/578/156 555/593/162 549/594/160 +f 560/595/166 557/596/164 559/597/167 +f 543/572/151 557/596/164 546/598/156 +f 561/599/167 560/600/166 559/601/167 +f 540/602/168 559/601/167 543/567/151 +f 563/603/169 562/604/170 561/605/167 +f 537/560/146 561/605/167 540/606/168 +f 566/607/171 563/608/169 565/609/169 +f 534/610/172 563/608/169 537/555/146 +f 567/611/173 566/612/171 565/613/169 +f 531/548/142 565/613/169 534/614/172 +f 570/615/174 567/616/173 569/617/175 +f 528/542/139 567/618/173 531/619/142 +f 572/620/176 569/621/175 571/622/177 +f 525/536/137 569/623/175 528/624/139 +f 574/625/178 571/626/177 573/627/179 +f 522/530/132 571/626/177 525/628/137 +f 575/629/180 574/630/178 573/631/179 +f 519/632/129 573/631/179 522/525/132 +f 577/633/181 576/634/182 575/635/180 +f 516/636/183 575/635/180 519/519/129 +f 579/637/184 576/634/182 578/638/185 +f 579/639/184 582/640/186 581/641/187 +f 581/642/187 584/643/188 583/644/189 +f 576/645/182 583/646/189 574/630/178 +f 583/647/189 586/648/190 585/649/191 +f 583/647/189 572/650/176 574/625/178 +f 585/651/191 588/652/192 587/653/193 +f 585/651/191 570/654/174 572/620/176 +f 587/655/193 590/656/194 589/657/195 +f 587/655/193 568/658/196 570/615/174 +f 589/659/195 592/660/197 591/661/198 +f 589/659/195 566/612/171 568/662/196 +f 591/663/198 594/664/199 593/665/200 +f 591/666/198 564/667/201 566/607/171 +f 593/668/200 596/669/202 595/670/203 +f 593/668/200 562/604/170 564/671/201 +f 595/672/203 598/673/204 597/674/205 +f 562/675/170 597/676/205 560/600/166 +f 597/677/205 600/678/206 599/679/207 +f 597/677/205 558/680/208 560/595/166 +f 599/681/207 602/682/209 601/683/101 +f 558/684/208 601/685/101 556/592/165 +f 601/686/101 604/687/210 603/688/211 +f 601/689/101 554/590/163 556/690/165 +f 602/691/209 605/692/212 604/687/210 +f 606/693/213 551/582/157 605/692/212 +f 607/694/214 548/577/155 606/695/213 +f 607/694/214 602/682/209 600/696/206 +f 608/697/215 545/571/153 607/698/214 +f 608/697/215 600/678/206 598/699/204 +f 609/700/215 542/565/150 608/701/215 +f 609/700/215 598/673/204 596/702/202 +f 610/703/216 539/559/148 609/704/215 +f 610/703/216 596/669/202 594/705/199 +f 611/706/216 536/553/145 610/707/216 +f 611/706/216 594/664/199 592/708/197 +f 530/547/138 611/709/216 612/710/217 +f 612/710/217 592/660/197 590/711/194 +f 613/712/218 530/540/138 612/713/217 +f 588/714/192 612/715/217 590/656/194 +f 614/716/219 527/535/136 613/717/218 +f 586/718/190 613/719/218 588/652/192 +f 521/527/131 614/720/219 615/721/220 +f 615/721/220 586/648/190 584/722/188 +f 616/723/221 521/523/131 615/724/220 +f 616/723/221 584/643/188 582/725/186 +f 617/726/222 518/517/127 616/727/221 +f 580/728/223 616/727/221 582/640/186 +f 619/729/224 621/730/225 622/731/226 +f 618/732/227 623/733/228 621/734/225 +f 622/735/226 624/736/229 625/737/230 +f 621/738/225 626/739/231 624/740/229 +f 624/741/229 628/742/232 625/743/230 +f 626/744/231 627/745/233 624/746/229 +f 628/747/232 630/748/234 631/749/235 +f 629/750/236 630/751/234 627/752/233 +f 631/753/235 633/754/237 634/755/238 +f 632/756/239 633/757/237 630/758/234 +f 634/759/238 636/760/240 637/761/241 +f 635/762/242 636/763/240 633/764/237 +f 637/765/241 639/766/243 640/767/244 +f 636/768/240 641/769/245 639/770/243 +f 640/771/244 642/772/246 643/773/247 +f 639/774/243 644/775/248 642/776/246 +f 641/777/245 645/778/249 644/775/248 +f 647/779/250 646/780/251 645/778/249 +f 649/781/252 648/782/253 647/783/250 +f 638/784/254 647/783/250 641/769/245 +f 652/785/255 649/786/252 651/787/256 +f 635/762/242 649/786/252 638/788/254 +f 654/789/257 651/790/256 653/791/258 +f 653/792/258 635/793/242 632/756/239 +f 656/794/259 653/795/258 655/796/260 +f 655/797/260 632/798/239 629/750/236 +f 658/799/261 655/800/260 657/801/262 +f 657/801/262 629/802/236 626/744/231 +f 660/803/263 657/804/262 659/805/264 +f 659/805/264 626/739/231 623/806/228 +f 661/807/265 660/808/263 659/809/264 +f 620/810/266 659/809/264 623/733/228 +f 662/811/267 665/812/268 660/808/263 +f 664/813/269 665/814/268 663/815/270 +f 665/816/268 668/817/271 667/818/272 +f 660/803/263 667/819/272 658/820/261 +f 667/821/272 670/822/273 669/823/274 +f 667/821/272 656/824/259 658/799/261 +f 669/825/274 672/826/275 671/827/276 +f 669/825/274 654/828/257 656/794/259 +f 672/829/275 673/830/277 671/831/276 +f 671/831/276 652/832/255 654/789/257 +f 673/833/277 676/834/278 675/835/279 +f 673/833/277 650/836/280 652/785/255 +f 675/837/279 678/838/281 677/839/99 +f 650/840/280 677/841/99 648/782/253 +f 677/842/99 680/843/282 679/844/95 +f 648/845/253 679/846/95 646/780/251 +f 682/847/283 680/843/282 678/848/281 +f 682/847/283 643/773/247 681/849/284 +f 637/765/241 682/850/283 683/851/285 +f 683/851/285 678/838/281 676/852/278 +f 684/853/286 637/761/241 683/854/285 +f 684/853/286 676/834/278 674/855/287 +f 685/856/288 634/755/238 684/857/286 +f 672/829/275 684/858/286 674/859/287 +f 686/860/289 631/749/235 685/861/288 +f 670/862/273 685/863/288 672/826/275 +f 625/743/230 686/864/289 687/865/290 +f 687/865/290 670/822/273 668/866/271 +f 688/867/291 625/737/230 687/868/290 +f 666/869/292 687/868/290 668/817/271 +f 619/729/224 688/870/291 689/871/293 +f 689/871/293 666/872/292 664/813/269 +f 691/515/294 693/516/295 694/517/296 +f 690/518/297 695/519/298 693/520/295 +f 694/521/296 696/522/299 697/523/300 +f 693/524/295 698/525/301 696/526/299 +f 696/873/299 700/529/302 697/527/300 +f 698/530/301 699/531/303 696/532/299 +f 700/533/302 702/534/304 703/535/305 +f 701/536/306 702/537/304 699/538/303 +f 702/539/304 706/540/307 703/541/305 +f 704/542/308 705/543/309 702/544/304 +f 706/547/307 708/874/310 709/546/311 +f 707/548/312 708/549/310 705/550/309 +f 709/551/311 711/552/313 712/553/314 +f 708/554/310 713/555/315 711/556/313 +f 712/557/314 714/558/316 715/559/317 +f 713/560/315 714/561/316 711/562/313 +f 715/563/317 717/564/318 718/565/319 +f 714/566/316 719/567/320 717/568/318 +f 718/569/319 720/570/321 721/571/322 +f 719/572/320 720/573/321 717/574/318 +f 721/575/322 723/576/323 724/577/324 +f 722/578/325 723/579/323 720/580/321 +f 723/581/323 727/582/326 724/583/324 +f 723/584/323 728/585/327 726/586/328 +f 725/587/329 729/588/330 728/585/327 +f 731/589/331 730/590/332 729/588/330 +f 734/684/333 731/593/331 733/591/334 +f 722/578/325 731/593/331 725/594/329 +f 736/595/335 733/596/334 735/597/336 +f 735/597/336 722/598/325 719/572/320 +f 737/599/336 736/600/335 735/601/336 +f 737/599/336 719/567/320 716/602/337 +f 739/603/338 738/604/339 737/605/336 +f 713/560/315 737/605/336 716/606/337 +f 742/607/340 739/608/338 741/609/338 +f 710/610/341 739/608/338 713/555/315 +f 743/611/342 742/612/340 741/613/338 +f 707/548/312 741/613/338 710/614/341 +f 746/615/343 743/616/342 745/617/344 +f 704/542/308 743/618/342 707/619/312 +f 748/620/345 745/621/344 747/622/346 +f 701/536/306 745/623/344 704/624/308 +f 750/625/347 747/626/346 749/627/348 +f 698/530/301 747/626/346 701/628/306 +f 752/645/349 749/631/348 751/629/350 +f 695/632/298 749/631/348 698/525/301 +f 753/633/351 752/634/349 751/635/350 +f 692/636/352 751/635/350 695/519/298 +f 754/638/353 757/875/354 752/634/349 +f 755/639/355 758/640/356 757/641/354 +f 757/642/354 760/643/357 759/644/358 +f 752/645/349 759/646/358 750/630/347 +f 759/647/358 762/648/359 761/649/360 +f 759/647/358 748/650/345 750/625/347 +f 761/651/360 764/652/361 763/653/362 +f 761/651/360 746/654/343 748/620/345 +f 763/655/362 766/656/363 765/657/364 +f 763/655/362 744/658/365 746/615/343 +f 765/659/364 768/660/366 767/661/367 +f 765/659/364 742/612/340 744/662/365 +f 767/663/367 770/664/368 769/665/369 +f 767/666/367 740/667/370 742/607/340 +f 769/668/369 772/669/371 771/670/372 +f 769/668/369 738/604/339 740/671/370 +f 771/672/372 774/673/373 773/674/374 +f 738/675/339 773/676/374 736/600/335 +f 773/677/374 776/678/375 775/679/376 +f 773/677/374 734/680/333 736/595/335 +f 775/681/376 778/682/377 777/683/97 +f 734/684/333 777/685/97 732/592/378 +f 777/686/97 780/687/379 779/688/380 +f 777/689/97 730/590/332 732/690/378 +f 782/693/381 780/687/379 778/691/377 +f 782/693/381 727/582/326 781/692/382 +f 783/694/383 724/577/324 782/695/381 +f 783/694/383 778/682/377 776/696/375 +f 784/697/384 721/571/322 783/698/383 +f 784/697/384 776/678/375 774/699/373 +f 785/700/384 718/565/319 784/701/384 +f 785/700/384 774/673/373 772/702/371 +f 786/703/385 715/559/317 785/704/384 +f 786/703/385 772/669/371 770/705/368 +f 787/706/385 712/553/314 786/707/385 +f 787/706/385 770/664/368 768/708/366 +f 706/547/307 787/709/385 788/710/386 +f 788/710/386 768/660/366 766/711/363 +f 789/712/387 706/540/307 788/713/386 +f 764/714/361 788/715/386 766/656/363 +f 790/716/388 703/535/305 789/717/387 +f 762/718/359 789/719/387 764/652/361 +f 697/527/300 790/720/388 791/721/389 +f 791/721/389 762/648/359 760/722/357 +f 792/723/390 697/523/300 791/724/389 +f 792/723/390 760/643/357 758/725/356 +f 793/726/391 694/517/296 792/727/390 +f 756/728/392 792/727/390 758/640/356 +f 795/729/393 797/730/394 798/731/395 +f 794/732/396 799/733/397 797/734/394 +f 798/735/395 800/736/398 801/737/399 +f 797/738/394 802/739/400 800/740/398 +f 800/741/398 804/742/401 801/743/399 +f 802/744/400 803/745/402 800/746/398 +f 804/747/401 806/748/403 807/749/404 +f 805/750/405 806/751/403 803/752/402 +f 806/876/403 810/755/406 807/753/404 +f 808/756/407 809/757/408 806/758/403 +f 809/877/408 813/761/409 810/759/406 +f 811/762/410 812/763/411 809/764/408 +f 813/765/409 815/766/412 816/767/160 +f 812/768/411 817/769/155 815/770/412 +f 816/771/160 818/772/413 819/773/414 +f 815/774/412 820/775/415 818/776/413 +f 817/777/155 821/778/416 820/775/415 +f 823/779/213 822/780/417 821/778/416 +f 825/781/418 824/782/209 823/783/213 +f 814/784/419 823/783/213 817/769/155 +f 828/785/420 825/786/418 827/787/421 +f 827/787/421 814/788/419 811/762/410 +f 830/789/422 827/790/421 829/791/423 +f 829/792/423 811/793/410 808/756/407 +f 832/794/424 829/795/423 831/796/425 +f 831/797/425 808/798/407 805/750/405 +f 834/799/426 831/800/425 833/801/427 +f 833/801/427 805/802/405 802/744/400 +f 836/803/428 833/804/427 835/805/429 +f 835/805/429 802/739/400 799/806/397 +f 837/807/430 836/808/428 835/809/429 +f 796/810/431 835/809/429 799/733/397 +f 838/811/432 841/812/433 836/808/428 +f 840/813/434 841/814/433 839/815/435 +f 841/816/433 844/817/436 843/818/437 +f 836/803/428 843/819/437 834/820/426 +f 843/821/437 846/822/438 845/823/439 +f 843/821/437 832/824/424 834/799/426 +f 845/825/439 848/826/440 847/827/441 +f 845/825/439 830/828/422 832/794/424 +f 847/831/441 850/859/442 849/830/443 +f 847/831/441 828/832/420 830/789/422 +f 849/833/443 852/834/444 851/835/445 +f 849/833/443 826/836/446 828/785/420 +f 851/837/445 854/838/165 853/839/101 +f 826/840/446 853/841/101 824/782/209 +f 853/842/101 856/843/447 855/844/98 +f 824/845/209 855/846/98 822/780/417 +f 858/847/162 856/843/447 854/848/165 +f 858/847/162 819/773/414 857/849/448 +f 813/765/409 858/850/162 859/851/449 +f 859/851/449 854/838/165 852/852/444 +f 860/853/450 813/761/409 859/854/449 +f 860/853/450 852/834/444 850/855/442 +f 861/856/451 810/755/406 860/857/450 +f 861/878/451 850/859/442 848/829/440 +f 862/860/452 807/749/404 861/861/451 +f 846/862/438 861/863/451 848/826/440 +f 801/743/399 862/864/452 863/865/453 +f 863/865/453 846/822/438 844/866/436 +f 864/867/454 801/737/399 863/868/453 +f 842/869/455 863/868/453 844/817/436 +f 795/729/393 864/870/454 865/871/456 +f 865/871/456 842/872/455 840/813/434 +f 867/515/457 869/516/458 870/517/459 +f 866/518/460 871/519/461 869/520/458 +f 870/521/459 872/522/462 873/523/463 +f 869/524/458 874/525/464 872/526/462 +f 873/527/463 875/528/465 876/529/466 +f 874/530/464 875/531/465 872/532/462 +f 876/533/466 878/534/467 879/535/468 +f 877/536/469 878/537/467 875/538/465 +f 878/539/467 882/540/470 879/541/468 +f 880/542/471 881/543/472 878/544/467 +f 881/545/472 885/546/473 882/547/470 +f 883/548/474 884/549/475 881/550/472 +f 885/551/473 887/552/476 888/553/477 +f 884/554/475 889/555/478 887/556/476 +f 888/557/477 890/558/479 891/559/480 +f 889/560/478 890/561/479 887/562/476 +f 891/563/480 893/564/481 894/565/482 +f 890/566/479 895/567/483 893/568/481 +f 894/569/482 896/570/484 897/571/485 +f 895/572/483 896/573/484 893/574/481 +f 897/575/485 899/576/486 900/577/487 +f 896/580/484 901/594/488 899/579/486 +f 899/581/486 903/582/489 900/583/487 +f 901/587/488 902/586/490 899/584/486 +f 901/587/488 905/588/491 904/585/492 +f 907/589/493 906/590/494 905/588/491 +f 910/684/495 907/593/493 909/591/496 +f 898/578/497 907/593/493 901/594/488 +f 912/595/498 909/596/496 911/597/499 +f 895/572/483 909/596/496 898/598/497 +f 913/599/499 912/600/498 911/601/499 +f 913/599/499 895/567/483 892/602/500 +f 915/603/501 914/604/502 913/605/499 +f 889/560/478 913/605/499 892/606/500 +f 918/607/503 915/608/501 917/609/501 +f 886/610/504 915/608/501 889/555/478 +f 919/611/505 918/612/503 917/613/501 +f 883/548/474 917/613/501 886/614/504 +f 922/615/506 919/616/505 921/617/507 +f 880/542/471 919/618/505 883/619/474 +f 924/620/508 921/621/507 923/622/509 +f 877/536/469 921/623/507 880/624/471 +f 926/625/510 923/626/509 925/627/511 +f 874/530/464 923/626/509 877/628/469 +f 927/629/512 926/630/510 925/631/511 +f 871/632/461 925/631/511 874/525/464 +f 929/633/513 928/634/514 927/635/512 +f 868/636/515 927/635/512 871/519/461 +f 931/637/516 928/634/514 930/638/517 +f 931/639/516 934/640/518 933/641/519 +f 933/642/519 936/643/520 935/644/521 +f 928/645/514 935/646/521 926/630/510 +f 935/647/521 938/648/522 937/649/523 +f 935/647/521 924/650/508 926/625/510 +f 937/651/523 940/652/524 939/653/525 +f 937/651/523 922/654/506 924/620/508 +f 939/655/525 942/656/526 941/657/527 +f 939/655/525 920/658/528 922/615/506 +f 941/659/527 944/660/529 943/661/530 +f 920/662/528 943/661/530 918/612/503 +f 943/663/530 946/664/531 945/665/532 +f 943/666/530 916/667/533 918/607/503 +f 945/668/532 948/669/534 947/670/535 +f 945/668/532 914/604/502 916/671/533 +f 947/672/535 950/673/536 949/674/537 +f 947/879/535 912/600/498 914/675/502 +f 949/677/537 952/678/538 951/679/539 +f 949/677/537 910/680/495 912/595/498 +f 951/681/539 954/682/540 953/683/96 +f 910/684/495 953/685/96 908/592/541 +f 953/686/96 956/687/542 955/688/543 +f 953/689/96 906/590/494 908/690/541 +f 958/693/544 956/687/542 954/691/540 +f 958/693/544 903/582/489 957/692/545 +f 897/575/485 958/695/544 959/694/546 +f 952/696/538 958/695/544 954/682/540 +f 960/697/547 897/571/485 959/698/546 +f 960/697/547 952/678/538 950/699/536 +f 961/700/547 894/565/482 960/701/547 +f 961/700/547 950/673/536 948/702/534 +f 962/703/548 891/559/480 961/704/547 +f 962/703/548 948/669/534 946/705/531 +f 963/706/548 888/553/477 962/707/548 +f 963/706/548 946/664/531 944/708/529 +f 964/710/549 885/546/473 963/709/548 +f 964/710/549 944/660/529 942/711/526 +f 965/712/550 882/540/470 964/713/549 +f 940/714/524 964/715/549 942/656/526 +f 966/716/551 879/535/468 965/717/550 +f 938/718/522 965/719/550 940/652/524 +f 873/527/463 966/720/551 967/721/552 +f 967/721/552 938/648/522 936/722/520 +f 968/723/553 873/523/463 967/724/552 +f 934/725/518 967/724/552 936/643/520 +f 969/726/554 870/517/459 968/727/553 +f 932/728/555 968/727/553 934/640/518 +f 971/729/556 973/730/557 974/731/558 +f 970/732/559 975/733/560 973/734/557 +f 974/735/558 976/736/561 977/737/562 +f 973/738/557 978/739/563 976/740/561 +f 976/741/561 980/742/564 977/743/562 +f 978/744/563 979/745/565 976/746/561 +f 980/747/564 982/748/566 983/749/567 +f 981/750/568 982/751/566 979/752/565 +f 983/753/567 985/754/569 986/755/570 +f 984/756/571 985/757/569 982/758/566 +f 985/877/569 989/761/572 986/759/570 +f 987/762/573 988/763/574 985/764/569 +f 989/765/572 991/766/575 992/767/329 +f 988/768/574 993/769/324 991/770/575 +f 992/771/329 994/772/576 995/773/577 +f 991/774/575 996/775/578 994/776/576 +f 993/777/324 997/778/579 996/775/578 +f 999/779/381 998/780/580 997/778/579 +f 1001/781/581 1000/782/377 999/783/381 +f 990/784/582 999/783/381 993/769/324 +f 1004/785/583 1001/786/581 1003/787/584 +f 1003/787/584 990/788/582 987/762/573 +f 1006/789/585 1003/790/584 1005/791/586 +f 1005/792/586 987/793/573 984/756/571 +f 1008/794/587 1005/795/586 1007/796/588 +f 981/750/568 1005/880/586 984/798/571 +f 1010/799/589 1007/800/588 1009/801/590 +f 978/744/563 1007/800/588 981/802/568 +f 1012/803/591 1009/804/590 1011/805/592 +f 975/806/560 1009/804/590 978/739/563 +f 1013/807/593 1012/808/591 1011/809/592 +f 972/810/594 1011/809/592 975/733/560 +f 1014/811/595 1017/812/596 1012/808/591 +f 1015/815/597 1018/872/598 1017/814/596 +f 1017/816/596 1020/817/599 1019/818/600 +f 1012/803/591 1019/819/600 1010/820/589 +f 1019/821/600 1022/822/601 1021/823/602 +f 1019/821/600 1008/824/587 1010/799/589 +f 1021/825/602 1024/826/603 1023/827/604 +f 1021/825/602 1006/828/585 1008/794/587 +f 1023/831/604 1026/859/605 1025/830/606 +f 1023/831/604 1004/832/583 1006/789/585 +f 1025/833/606 1028/834/607 1027/835/608 +f 1025/833/606 1002/836/609 1004/785/583 +f 1027/837/608 1030/838/378 1029/839/97 +f 1002/840/609 1029/841/97 1000/782/377 +f 1029/842/97 1032/843/610 1031/844/100 +f 1000/845/377 1031/846/100 998/780/580 +f 1030/848/378 1033/849/611 1032/843/610 +f 1034/847/331 995/773/577 1033/849/611 +f 989/765/572 1034/850/331 1035/851/612 +f 1035/851/612 1030/838/378 1028/852/607 +f 1036/853/613 989/761/572 1035/854/612 +f 1036/853/613 1028/834/607 1026/855/605 +f 1037/856/614 986/755/570 1036/857/613 +f 1024/829/603 1036/858/613 1026/859/605 +f 1038/860/615 983/749/567 1037/861/614 +f 1022/862/601 1037/863/614 1024/826/603 +f 977/743/562 1038/864/615 1039/865/616 +f 1039/865/616 1022/822/601 1020/866/599 +f 1040/867/617 977/737/562 1039/868/616 +f 1040/867/617 1020/817/599 1018/869/598 +f 971/729/556 1040/870/617 1041/871/618 +f 1041/871/618 1018/872/598 1016/813/619 +f 1043/515/620 1045/516/621 1046/517/622 +f 1042/518/623 1047/519/624 1045/520/621 +f 1046/521/622 1048/522/625 1049/523/626 +f 1045/524/621 1050/525/627 1048/526/625 +f 1048/873/625 1052/529/628 1049/527/626 +f 1050/530/627 1051/531/629 1048/532/625 +f 1052/533/628 1054/534/630 1055/535/631 +f 1053/536/632 1054/537/630 1051/538/629 +f 1054/539/630 1058/540/633 1055/541/631 +f 1056/542/634 1057/543/635 1054/544/630 +f 1057/545/635 1061/546/636 1058/547/633 +f 1059/548/637 1060/549/638 1057/550/635 +f 1061/551/636 1063/552/639 1064/553/640 +f 1060/554/638 1065/555/641 1063/556/639 +f 1064/557/640 1066/558/642 1067/559/643 +f 1065/560/641 1066/561/642 1063/562/639 +f 1067/563/643 1069/564/644 1070/565/645 +f 1066/566/642 1071/567/646 1069/568/644 +f 1070/569/645 1072/570/647 1073/571/648 +f 1071/572/646 1072/573/647 1069/574/644 +f 1072/881/647 1076/577/649 1073/575/648 +f 1072/580/647 1077/594/650 1075/579/651 +f 1076/583/649 1078/882/652 1079/582/653 +f 1075/584/651 1080/585/654 1078/586/652 +f 1077/587/650 1081/588/655 1080/585/654 +f 1083/589/283 1082/590/656 1081/588/655 +f 1086/684/657 1083/593/283 1085/591/658 +f 1074/578/659 1083/593/283 1077/594/650 +f 1088/595/660 1085/596/658 1087/597/661 +f 1071/572/646 1085/596/658 1074/598/659 +f 1089/599/661 1088/600/660 1087/601/661 +f 1068/602/662 1087/601/661 1071/567/646 +f 1091/603/663 1090/604/664 1089/605/661 +f 1065/560/641 1089/605/661 1068/606/662 +f 1094/607/665 1091/608/663 1093/609/663 +f 1062/610/666 1091/608/663 1065/555/641 +f 1095/611/667 1094/612/665 1093/613/663 +f 1059/548/637 1093/613/663 1062/614/666 +f 1097/617/668 1096/658/669 1095/616/667 +f 1056/542/634 1095/618/667 1059/619/637 +f 1100/620/670 1097/621/668 1099/622/671 +f 1053/536/632 1097/623/668 1056/624/634 +f 1102/625/672 1099/626/671 1101/627/673 +f 1050/530/627 1099/626/671 1053/628/632 +f 1104/645/674 1101/631/673 1103/629/675 +f 1047/632/624 1101/631/673 1050/525/627 +f 1105/633/676 1104/634/674 1103/635/675 +f 1044/636/677 1103/635/675 1047/519/624 +f 1107/637/678 1104/634/674 1106/638/679 +f 1107/639/678 1110/640/680 1109/641/681 +f 1109/642/681 1112/643/682 1111/644/683 +f 1104/645/674 1111/646/683 1102/630/672 +f 1111/647/683 1114/648/684 1113/649/685 +f 1111/647/683 1100/650/670 1102/625/672 +f 1113/651/685 1116/652/686 1115/653/687 +f 1113/651/685 1098/654/688 1100/620/670 +f 1115/655/687 1118/656/689 1117/657/690 +f 1115/655/687 1096/658/669 1098/615/688 +f 1117/659/690 1120/660/691 1119/661/692 +f 1096/662/669 1119/661/692 1094/612/665 +f 1119/663/692 1122/664/693 1121/665/694 +f 1119/666/692 1092/667/695 1094/607/665 +f 1121/668/694 1124/669/696 1123/670/697 +f 1121/668/694 1090/604/664 1092/671/695 +f 1123/672/697 1126/673/698 1125/674/699 +f 1090/675/664 1125/676/699 1088/600/660 +f 1125/677/699 1128/678/700 1127/679/701 +f 1125/677/699 1086/680/657 1088/595/660 +f 1127/681/701 1130/682/253 1129/683/99 +f 1086/684/657 1129/685/99 1084/592/281 +f 1129/686/99 1132/687/702 1131/688/703 +f 1084/690/281 1131/883/703 1082/590/656 +f 1134/693/250 1132/687/702 1130/691/253 +f 1134/693/250 1079/582/653 1133/692/704 +f 1073/575/648 1134/695/250 1135/694/705 +f 1135/694/705 1130/682/253 1128/696/700 +f 1136/697/706 1073/571/648 1135/698/705 +f 1136/697/706 1128/678/700 1126/699/698 +f 1137/700/706 1070/565/645 1136/701/706 +f 1137/700/706 1126/673/698 1124/702/696 +f 1064/557/640 1137/704/706 1138/703/707 +f 1138/703/707 1124/669/696 1122/705/693 +f 1139/706/707 1064/553/640 1138/707/707 +f 1120/708/691 1138/707/707 1122/664/693 +f 1140/710/708 1061/546/636 1139/709/707 +f 1140/710/708 1120/660/691 1118/711/689 +f 1141/712/709 1058/540/633 1140/713/708 +f 1116/714/686 1140/715/708 1118/656/689 +f 1142/716/710 1055/535/631 1141/717/709 +f 1114/718/684 1141/719/709 1116/652/686 +f 1049/527/626 1142/720/710 1143/721/711 +f 1143/721/711 1114/648/684 1112/722/682 +f 1046/521/622 1143/724/711 1144/723/712 +f 1144/723/712 1112/643/682 1110/725/680 +f 1145/726/713 1046/517/622 1144/727/712 +f 1108/728/714 1144/727/712 1110/640/680 +f 1147/729/715 1149/730/716 1150/731/717 +f 1146/732/718 1151/733/719 1149/734/716 +f 1150/735/717 1152/736/720 1153/737/721 +f 1149/738/716 1154/739/722 1152/740/720 +f 1152/741/720 1156/742/723 1153/743/721 +f 1154/744/722 1155/745/724 1152/746/720 +f 1156/747/723 1158/748/725 1159/749/726 +f 1157/750/727 1158/751/725 1155/752/724 +f 1159/753/726 1161/754/728 1162/755/729 +f 1160/756/730 1161/757/728 1158/758/725 +f 1161/877/728 1165/761/731 1162/759/729 +f 1163/762/732 1164/763/733 1161/764/728 +f 1165/765/731 1167/766/734 1168/767/488 +f 1164/768/733 1169/769/487 1167/770/734 +f 1168/771/488 1170/772/735 1171/773/736 +f 1167/774/734 1172/775/737 1170/776/735 +f 1169/777/487 1173/778/738 1172/775/737 +f 1175/779/544 1174/780/739 1173/778/738 +f 1177/781/740 1176/782/540 1175/783/544 +f 1166/784/741 1175/783/544 1169/769/487 +f 1180/785/742 1177/786/740 1179/787/743 +f 1179/787/743 1166/788/741 1163/762/732 +f 1182/789/744 1179/790/743 1181/791/745 +f 1181/792/745 1163/793/732 1160/756/730 +f 1184/794/746 1181/795/745 1183/796/747 +f 1157/750/727 1181/880/745 1160/798/730 +f 1186/799/748 1183/800/747 1185/801/749 +f 1154/744/722 1183/800/747 1157/802/727 +f 1188/803/750 1185/804/749 1187/805/751 +f 1151/806/719 1185/804/749 1154/739/722 +f 1189/807/752 1188/808/750 1187/809/751 +f 1148/810/753 1187/809/751 1151/733/719 +f 1190/811/754 1193/812/755 1188/808/750 +f 1192/813/756 1193/814/755 1191/815/757 +f 1193/816/755 1196/817/758 1195/818/759 +f 1193/884/755 1186/820/748 1188/803/750 +f 1195/821/759 1198/822/760 1197/823/761 +f 1195/821/759 1184/824/746 1186/799/748 +f 1197/825/761 1200/826/762 1199/827/763 +f 1197/825/761 1182/828/744 1184/794/746 +f 1199/831/763 1202/859/764 1201/830/765 +f 1199/831/763 1180/832/742 1182/789/744 +f 1201/833/765 1204/834/766 1203/835/767 +f 1201/833/765 1178/836/768 1180/785/742 +f 1203/837/767 1206/838/541 1205/839/96 +f 1203/885/767 1176/782/540 1178/840/768 +f 1205/842/96 1208/843/769 1207/844/102 +f 1176/845/540 1207/846/102 1174/780/739 +f 1210/847/493 1208/843/769 1206/848/541 +f 1210/847/493 1171/773/736 1209/849/770 +f 1165/765/731 1210/850/493 1211/851/771 +f 1211/851/771 1206/838/541 1204/852/766 +f 1212/853/772 1165/761/731 1211/854/771 +f 1212/853/772 1204/834/766 1202/855/764 +f 1213/856/773 1162/755/729 1212/857/772 +f 1213/878/773 1202/859/764 1200/829/762 +f 1214/860/774 1159/749/726 1213/861/773 +f 1198/862/760 1213/863/773 1200/826/762 +f 1153/743/721 1214/864/774 1215/865/775 +f 1215/865/775 1198/822/760 1196/866/758 +f 1216/867/776 1153/737/721 1215/868/775 +f 1216/867/776 1196/817/758 1194/869/777 +f 1147/729/715 1216/870/776 1217/871/778 +f 1217/871/778 1194/872/777 1192/813/756 +f 96/1/1 36/39/2 31/2/2 +f 44/4/3 48/7/4 24/5/4 +f 48/7/4 52/9/5 22/8/5 +f 52/9/5 56/11/6 20/10/6 +f 56/11/6 60/13/7 18/12/7 +f 60/13/7 64/15/8 16/14/8 +f 64/15/8 68/886/9 14/16/9 +f 68/17/9 72/20/10 12/18/10 +f 72/20/10 76/22/11 10/21/11 +f 76/22/11 80/24/12 8/23/12 +f 80/24/12 84/26/13 6/25/13 +f 84/26/13 88/28/14 4/27/14 +f 88/28/14 92/30/15 2/29/15 +f 92/30/15 96/1/1 27/3/1 +f 40/31/16 44/4/3 26/6/3 +f 34/33/2 32/135/2 29/34/16 +f 55/36/14 150/190/14 151/37/15 +f 36/39/2 40/31/16 30/32/16 +f 38/35/17 37/43/17 33/40/18 +f 36/39/19 129/887/19 130/41/20 +f 42/42/21 41/48/21 37/43/17 +f 40/44/20 130/156/20 131/45/22 +f 46/47/23 45/51/23 41/48/21 +f 44/4/22 131/888/22 132/49/24 +f 50/50/25 49/56/25 45/51/23 +f 48/52/24 132/158/24 133/53/26 +f 54/55/27 53/59/27 49/56/25 +f 52/9/26 133/889/26 134/57/28 +f 58/58/29 57/64/29 53/59/27 +f 56/60/28 134/160/28 135/61/30 +f 62/63/31 61/67/31 57/64/29 +f 60/13/30 135/890/30 136/65/32 +f 66/66/33 65/891/33 61/67/31 +f 64/68/32 136/162/32 137/69/34 +f 70/71/35 69/76/35 65/72/33 +f 68/17/34 137/892/34 138/74/36 +f 74/75/37 73/81/37 69/76/35 +f 72/77/36 138/167/36 139/78/38 +f 78/80/39 77/84/39 73/81/37 +f 76/22/38 139/893/38 140/82/40 +f 82/83/41 81/89/41 77/84/39 +f 80/85/40 140/169/40 141/86/42 +f 86/88/43 85/92/43 81/89/41 +f 84/26/42 141/894/42 142/90/44 +f 90/91/45 89/97/45 85/92/43 +f 88/93/44 142/173/44 143/94/46 +f 94/96/47 93/99/47 89/97/45 +f 92/30/46 143/895/46 144/98/48 +f 34/33/18 33/40/18 93/99/47 +f 96/100/48 144/175/48 129/101/19 +f 31/2/49 30/32/50 125/103/50 +f 29/34/16 25/132/3 42/42/3 +f 30/32/50 26/6/51 121/105/51 +f 1/106/15 28/133/1 94/96/1 +f 2/29/52 27/3/53 124/107/53 +f 3/109/14 1/106/15 90/91/15 +f 4/27/54 2/29/52 97/108/52 +f 5/111/13 3/109/14 86/88/14 +f 6/25/55 4/27/54 99/110/54 +f 7/113/12 5/111/13 82/83/13 +f 103/114/56 8/23/56 6/25/55 +f 9/115/11 7/113/12 78/80/12 +f 10/21/57 8/23/56 103/114/56 +f 11/117/10 9/115/11 74/75/11 +f 12/18/58 10/21/57 105/116/57 +f 13/119/9 11/117/10 70/71/10 +f 14/19/59 12/18/58 107/118/58 +f 15/121/8 13/143/9 66/66/9 +f 111/122/60 16/14/60 14/16/59 +f 17/124/7 15/121/8 62/63/8 +f 18/12/61 16/14/60 111/122/60 +f 19/126/6 17/124/7 58/58/7 +f 20/10/62 18/12/61 113/125/61 +f 21/128/5 19/126/6 54/55/6 +f 22/8/63 20/10/62 115/127/62 +f 23/130/4 21/128/5 50/50/5 +f 119/131/64 24/5/64 22/8/63 +f 25/132/3 23/130/4 46/47/4 +f 26/6/51 24/5/64 119/131/64 +f 28/133/1 32/135/2 34/33/2 +f 27/3/53 31/2/49 128/104/49 +f 28/133/65 123/136/65 127/134/66 +f 124/107/1 128/104/2 127/134/2 +f 122/137/67 120/138/68 23/130/68 +f 121/105/3 119/131/4 120/138/4 +f 120/138/68 118/139/69 21/128/69 +f 119/131/4 117/129/5 118/139/5 +f 21/128/69 118/139/69 116/140/70 +f 117/129/5 115/127/6 116/140/6 +f 19/126/70 116/140/70 114/141/71 +f 115/127/6 113/125/7 114/141/7 +f 114/141/71 112/142/72 15/121/72 +f 113/125/7 111/122/8 112/142/8 +f 112/142/72 110/144/73 13/143/73 +f 111/122/8 109/123/9 110/144/9 +f 13/119/73 110/146/73 108/145/74 +f 109/120/9 107/118/10 108/145/10 +f 11/117/74 108/145/74 106/147/75 +f 107/118/10 105/116/11 106/147/11 +f 106/147/75 104/148/76 7/113/76 +f 105/116/11 103/114/12 104/148/12 +f 104/148/76 102/149/77 5/111/77 +f 103/114/12 101/112/13 102/149/13 +f 5/111/77 102/149/77 100/150/78 +f 101/112/13 99/110/14 100/150/14 +f 3/109/78 100/150/78 98/151/79 +f 99/110/14 97/108/15 98/151/15 +f 98/151/79 123/136/65 28/133/65 +f 97/108/15 124/107/1 123/136/1 +f 29/34/80 126/152/80 122/137/67 +f 125/103/16 121/105/3 122/137/3 +f 32/135/66 127/134/66 126/152/80 +f 127/134/2 128/104/2 125/103/16 +f 39/153/81 130/156/81 129/101/81 +f 43/155/81 131/45/81 130/156/81 +f 47/157/81 132/158/81 131/45/81 +f 47/157/81 51/159/81 133/53/81 +f 55/36/81 134/160/81 133/53/81 +f 59/38/81 135/61/81 134/160/81 +f 63/161/81 136/162/81 135/61/81 +f 63/161/81 67/180/81 137/69/81 +f 71/163/81 138/167/81 137/164/81 +f 75/166/81 139/78/81 138/167/81 +f 79/168/81 140/169/81 139/78/81 +f 79/168/81 83/171/81 141/86/81 +f 87/170/81 142/173/81 141/86/81 +f 91/172/81 143/94/81 142/173/81 +f 95/174/81 144/175/81 143/94/81 +f 95/174/81 35/154/81 129/101/81 +f 87/170/6 158/191/6 159/176/7 +f 59/38/15 151/37/15 152/177/1 +f 91/172/7 159/176/7 160/178/8 +f 63/161/1 152/177/1 153/179/2 +f 35/154/9 145/182/9 146/181/10 +f 95/174/8 160/178/8 145/182/9 +f 67/165/2 153/896/2 154/183/16 +f 39/153/10 146/181/10 147/184/11 +f 71/163/16 154/183/16 155/185/3 +f 43/155/11 147/184/11 148/186/12 +f 75/166/3 155/185/3 156/187/4 +f 47/157/12 148/186/12 149/188/13 +f 79/168/4 156/187/4 157/189/5 +f 51/159/13 149/188/13 150/190/14 +f 83/171/5 157/189/5 158/191/6 +f 163/240/82 165/243/83 164/241/83 +f 165/243/83 167/245/84 166/244/84 +f 167/245/84 169/247/85 168/246/85 +f 169/247/85 171/249/86 170/248/86 +f 171/249/86 173/251/87 172/250/87 +f 173/251/87 175/897/88 174/252/88 +f 175/253/88 177/256/89 176/254/89 +f 177/256/89 179/258/90 178/257/90 +f 179/258/90 181/260/91 180/259/91 +f 181/260/91 183/265/92 182/261/92 +f 167/264/81 165/898/81 163/899/81 +f 163/899/81 185/900/81 183/262/81 +f 183/262/81 181/901/81 179/902/81 +f 179/902/81 177/903/81 175/263/81 +f 175/263/81 173/904/81 171/905/81 +f 171/905/81 169/906/81 167/264/81 +f 167/264/81 163/899/81 183/262/81 +f 183/262/81 179/902/81 175/263/81 +f 175/263/81 171/905/81 167/264/81 +f 183/265/92 185/267/93 184/266/93 +f 185/267/93 163/240/82 162/242/82 +f 186/268/94 187/907/94 190/269/94 +f 186/268/94 189/270/94 192/271/94 +f 205/273/95 191/274/10 189/270/10 +f 191/274/10 193/275/11 192/271/11 +f 193/275/11 195/278/12 194/276/12 +f 188/272/94 192/271/94 194/276/94 +f 195/278/12 199/282/96 197/279/96 +f 196/277/94 194/276/94 197/279/94 +f 200/281/97 198/908/97 197/279/97 +f 201/283/81 200/909/81 199/282/81 +f 202/284/81 201/283/81 195/278/81 +f 202/284/81 193/275/81 191/274/81 +f 203/285/81 191/274/81 205/273/81 +f 190/269/98 187/910/98 204/287/98 +f 206/268/94 207/907/94 210/269/94 +f 206/268/94 209/270/94 212/271/94 +f 225/273/98 211/274/6 209/270/6 +f 211/274/6 213/275/7 212/271/7 +f 213/275/7 215/278/8 214/276/8 +f 208/272/94 212/271/94 214/276/94 +f 215/278/8 219/282/99 217/279/99 +f 216/277/94 214/276/94 217/279/94 +f 220/281/96 218/908/96 217/279/96 +f 221/283/81 220/909/81 219/282/81 +f 221/283/81 215/278/81 213/275/81 +f 223/285/81 222/284/81 213/275/81 +f 223/285/81 211/274/81 225/273/81 +f 210/269/100 207/910/100 224/287/100 +f 226/268/94 227/907/94 230/269/94 +f 226/268/94 229/270/94 232/271/94 +f 245/273/100 231/274/16 229/270/16 +f 231/274/16 233/275/3 232/271/3 +f 233/275/3 235/278/4 234/276/4 +f 228/272/94 232/271/94 234/276/94 +f 235/278/4 239/282/101 237/279/101 +f 236/277/94 234/276/94 237/279/94 +f 240/281/99 238/908/99 237/279/99 +f 241/283/81 240/909/81 239/282/81 +f 241/283/81 235/278/81 233/275/81 +f 242/284/81 233/275/81 231/274/81 +f 243/285/81 231/274/81 245/273/81 +f 230/269/102 227/910/102 244/287/102 +f 246/268/94 247/907/94 250/269/94 +f 246/268/94 249/270/94 252/271/94 +f 265/273/102 251/274/14 249/270/14 +f 251/274/14 253/275/15 252/271/15 +f 253/275/15 255/278/1 254/276/1 +f 248/272/94 252/271/94 254/276/94 +f 255/278/1 259/282/97 257/279/97 +f 256/277/94 254/276/94 257/279/94 +f 260/281/101 258/908/101 257/279/101 +f 261/283/81 260/909/81 259/282/81 +f 261/283/81 255/278/81 253/275/81 +f 263/285/81 262/284/81 253/275/81 +f 263/285/81 251/274/81 265/273/81 +f 250/269/95 247/910/95 264/287/95 +f 289/288/9 282/303/9 266/289/9 +f 287/291/5 288/911/5 274/292/5 +f 280/294/69 295/912/69 296/295/69 +f 283/297/13 284/913/13 270/298/13 +f 285/300/2 286/307/2 278/301/2 +f 282/303/11 283/914/11 267/304/11 +f 271/302/15 270/915/15 284/305/15 +f 279/306/3 278/301/3 286/307/3 +f 275/290/7 274/916/7 288/309/7 +f 267/311/94 270/917/94 271/918/94 +f 271/918/94 278/919/94 279/293/94 +f 279/293/94 274/920/94 275/310/94 +f 275/310/94 266/921/94 267/311/94 +f 267/311/94 271/918/94 279/293/94 +f 269/312/81 268/324/81 283/313/81 +f 273/315/81 272/327/81 285/316/81 +f 281/318/81 280/326/81 287/319/81 +f 277/321/81 276/325/81 289/322/81 +f 273/315/81 284/317/81 283/313/81 +f 269/312/81 282/314/81 289/322/81 +f 277/321/81 288/323/81 287/319/81 +f 281/318/81 286/320/81 285/316/81 +f 296/330/81 295/922/81 294/923/81 +f 294/923/81 293/924/81 292/328/81 +f 292/328/81 291/925/81 290/329/81 +f 290/329/81 297/926/81 296/330/81 +f 296/330/81 294/923/81 292/328/81 +f 268/331/77 291/927/77 292/332/77 +f 281/334/103 294/928/103 295/335/104 +f 269/337/105 290/929/105 291/338/106 +f 272/340/66 293/930/66 294/341/66 +f 276/343/73 297/931/73 290/344/73 +f 277/346/107 296/932/107 297/347/108 +f 273/349/109 292/933/109 293/350/110 +f 298/352/111 300/358/111 301/353/111 +f 309/355/98 301/353/98 316/356/98 +f 300/358/81 315/376/81 316/359/81 +f 302/360/81 320/395/81 321/361/81 +f 304/363/95 307/934/95 306/364/95 +f 301/353/98 309/935/98 307/366/98 +f 303/367/98 321/361/98 323/368/98 +f 298/352/100 299/354/100 318/370/100 +f 319/372/102 305/936/102 306/373/102 +f 298/352/102 306/937/102 308/374/102 +f 321/361/5 327/396/5 326/375/5 +f 315/376/112 314/377/112 317/356/112 +f 314/377/95 302/360/95 303/362/95 +f 315/377/102 300/358/102 308/378/102 +f 310/380/102 312/938/102 302/381/102 +f 311/383/98 317/939/98 303/384/98 +f 319/371/114 318/370/114 304/386/114 +f 318/388/98 299/354/98 307/389/98 +f 322/391/102 320/395/102 302/392/102 +f 322/391/13 325/940/13 324/394/13 +f 320/395/81 324/394/81 327/396/81 +f 328/397/112 330/403/112 331/398/112 +f 339/400/102 331/398/102 346/401/102 +f 330/403/81 345/418/81 346/404/81 +f 332/405/81 350/430/81 351/406/81 +f 334/363/100 337/934/100 336/364/100 +f 331/398/102 339/941/102 337/408/102 +f 333/409/102 351/406/102 353/410/102 +f 328/397/95 329/399/95 348/412/95 +f 349/414/98 335/942/98 336/415/98 +f 328/397/98 336/943/98 338/416/98 +f 351/406/13 357/431/13 356/417/13 +f 345/418/111 344/419/111 347/401/111 +f 347/401/100 344/419/100 332/405/100 +f 345/419/98 330/403/98 338/420/98 +f 340/380/98 342/938/98 332/381/98 +f 341/383/102 347/939/102 333/384/102 +f 348/412/116 334/944/116 335/422/116 +f 348/423/102 329/399/102 337/424/102 +f 352/426/98 350/430/98 332/427/98 +f 352/426/5 355/945/5 354/429/5 +f 350/430/81 354/429/81 357/431/81 +f 358/432/117 360/438/117 361/433/117 +f 369/435/95 361/433/95 376/436/95 +f 360/438/81 375/453/81 376/439/81 +f 362/440/81 380/465/81 381/441/81 +f 364/363/102 367/934/102 366/364/102 +f 361/433/95 369/946/95 367/443/95 +f 363/444/95 381/441/95 383/445/95 +f 358/432/98 359/434/98 378/447/98 +f 379/449/100 365/947/100 366/450/100 +f 358/432/100 366/948/100 368/451/100 +f 381/441/9 387/466/9 386/452/9 +f 375/453/118 374/454/118 377/436/118 +f 374/454/102 362/440/102 363/442/102 +f 375/454/100 360/438/100 368/455/100 +f 370/380/100 372/938/100 362/381/100 +f 371/383/95 377/939/95 363/384/95 +f 378/447/119 364/949/119 365/457/119 +f 378/458/95 359/434/95 367/459/95 +f 382/461/100 380/465/100 362/462/100 +f 382/461/2 385/950/2 384/464/2 +f 380/465/81 384/464/81 387/466/81 +f 388/467/118 390/473/118 391/468/118 +f 399/470/100 391/468/100 406/471/100 +f 390/473/81 405/488/81 406/474/81 +f 392/475/81 410/501/81 411/476/81 +f 394/363/98 397/934/98 396/364/98 +f 391/468/100 399/951/100 397/478/100 +f 393/479/100 411/476/100 413/480/100 +f 388/467/102 389/469/102 408/482/102 +f 409/484/95 395/952/95 396/485/95 +f 388/467/95 396/953/95 398/486/95 +f 411/476/2 417/502/2 416/487/2 +f 405/488/117 404/489/117 407/471/117 +f 404/489/98 392/475/98 393/477/98 +f 405/489/95 390/473/95 398/490/95 +f 400/380/95 402/938/95 392/381/95 +f 401/383/100 407/939/100 393/384/100 +f 409/483/120 408/482/120 394/492/120 +f 408/494/100 389/469/100 397/495/100 +f 412/497/95 410/501/95 392/498/95 +f 412/497/9 415/954/9 414/500/9 +f 410/501/81 414/500/81 417/502/81 +f 423/503/121 425/514/121 424/504/121 +f 422/506/5 419/512/5 418/507/5 +f 420/509/81 419/512/81 422/506/81 +f 420/511/9 424/955/9 418/507/9 +f 423/513/2 422/506/2 421/508/2 +f 431/503/121 433/514/121 432/504/121 +f 430/506/5 427/512/5 426/507/5 +f 428/509/81 427/512/81 430/506/81 +f 428/511/9 432/955/9 426/507/9 +f 431/513/2 430/506/2 429/508/2 +f 439/503/121 441/514/121 440/504/121 +f 438/506/5 435/512/5 434/507/5 +f 436/509/81 435/512/81 438/506/81 +f 436/511/9 440/955/9 434/507/9 +f 439/513/2 438/506/2 437/508/2 +f 447/503/122 449/514/122 448/504/122 +f 446/506/9 443/512/9 442/507/9 +f 444/509/81 443/512/81 446/506/81 +f 444/511/13 448/955/13 442/507/13 +f 447/513/5 446/506/5 445/508/5 +f 455/503/122 457/514/122 456/504/122 +f 454/506/9 451/512/9 450/507/9 +f 452/509/81 451/512/81 454/506/81 +f 452/511/13 456/955/13 450/507/13 +f 455/513/5 454/506/5 453/508/5 +f 463/503/122 465/514/122 464/504/122 +f 462/506/9 459/512/9 458/507/9 +f 460/509/81 459/512/81 462/506/81 +f 460/511/13 464/955/13 458/507/13 +f 463/513/5 462/506/5 461/508/5 +f 471/503/123 473/514/123 472/504/123 +f 470/506/13 467/512/13 466/507/13 +f 468/509/81 467/512/81 470/506/81 +f 468/511/2 472/955/2 466/507/2 +f 471/513/9 470/506/9 469/508/9 +f 479/503/123 481/514/123 480/504/123 +f 478/506/13 475/512/13 474/507/13 +f 476/509/81 475/512/81 478/506/81 +f 476/511/2 480/955/2 474/507/2 +f 479/513/9 478/506/9 477/508/9 +f 487/503/123 489/514/123 488/504/123 +f 486/506/13 483/512/13 482/507/13 +f 484/509/81 483/512/81 486/506/81 +f 484/511/2 488/955/2 482/507/2 +f 487/513/9 486/506/9 485/508/9 +f 495/503/124 497/514/124 496/504/124 +f 494/506/2 491/512/2 490/507/2 +f 492/509/81 491/512/81 494/506/81 +f 492/511/5 496/955/5 490/507/5 +f 495/513/13 494/506/13 493/508/13 +f 503/503/124 505/514/124 504/504/124 +f 502/506/2 499/512/2 498/507/2 +f 500/509/81 499/512/81 502/506/81 +f 500/511/5 504/955/5 498/507/5 +f 503/513/13 502/506/13 501/508/13 +f 511/503/124 513/514/124 512/504/124 +f 510/506/2 507/512/2 506/507/2 +f 508/509/81 507/512/81 510/506/81 +f 508/511/5 512/955/5 506/507/5 +f 511/513/13 510/506/13 509/508/13 +f 515/515/125 514/956/128 517/516/126 +f 514/518/128 516/636/183 519/519/129 +f 518/521/127 517/957/126 520/522/130 +f 517/524/126 519/632/129 522/525/132 +f 521/527/131 520/873/130 523/528/133 +f 522/530/132 525/628/137 523/531/133 +f 524/533/134 523/958/133 526/534/135 +f 525/536/137 528/624/139 526/537/135 +f 526/539/135 529/959/140 530/540/138 +f 528/542/139 531/619/142 529/543/140 +f 529/545/140 532/874/143 533/546/141 +f 531/548/142 534/614/172 532/549/143 +f 533/551/141 532/960/143 535/552/144 +f 532/554/143 534/610/172 537/555/146 +f 536/557/145 535/961/144 538/558/147 +f 537/560/146 540/606/168 538/561/147 +f 539/563/148 538/962/147 541/564/149 +f 538/566/147 540/602/168 543/567/151 +f 542/569/150 541/963/149 544/570/152 +f 543/572/151 546/598/156 544/573/152 +f 545/575/153 544/881/152 547/576/154 +f 546/578/156 549/594/160 547/579/154 +f 547/581/154 550/882/159 551/582/157 +f 547/584/154 549/587/160 552/585/158 +f 549/587/160 555/589/162 553/588/161 +f 555/589/162 556/690/165 554/590/163 +f 557/591/164 558/684/208 556/592/165 +f 546/578/156 557/591/164 555/593/162 +f 560/595/166 558/680/208 557/596/164 +f 543/572/151 559/597/167 557/596/164 +f 561/599/167 562/675/170 560/600/166 +f 540/602/168 561/599/167 559/601/167 +f 563/603/169 564/671/201 562/604/170 +f 537/560/146 563/603/169 561/605/167 +f 566/607/171 564/667/201 563/608/169 +f 534/610/172 565/609/169 563/608/169 +f 567/611/173 568/662/196 566/612/171 +f 531/548/142 567/611/173 565/613/169 +f 570/615/174 568/658/196 567/616/173 +f 528/542/139 569/964/175 567/618/173 +f 572/620/176 570/654/174 569/621/175 +f 525/536/137 571/965/177 569/623/175 +f 574/625/178 572/650/176 571/626/177 +f 522/530/132 573/627/179 571/626/177 +f 575/629/180 576/645/182 574/630/178 +f 519/632/129 575/629/180 573/631/179 +f 577/633/181 578/638/185 576/634/182 +f 516/636/183 577/633/181 575/635/180 +f 579/637/184 581/875/187 576/634/182 +f 579/639/184 580/728/223 582/640/186 +f 581/642/187 582/725/186 584/643/188 +f 576/645/182 581/966/187 583/646/189 +f 583/647/189 584/722/188 586/648/190 +f 583/647/189 585/649/191 572/650/176 +f 585/651/191 586/718/190 588/652/192 +f 585/651/191 587/653/193 570/654/174 +f 587/655/193 588/714/192 590/656/194 +f 587/655/193 589/657/195 568/658/196 +f 589/659/195 590/711/194 592/660/197 +f 589/659/195 591/661/198 566/612/171 +f 591/663/198 592/708/197 594/664/199 +f 591/666/198 593/967/200 564/667/201 +f 593/668/200 594/705/199 596/669/202 +f 593/668/200 595/670/203 562/604/170 +f 595/672/203 596/702/202 598/673/204 +f 562/675/170 595/879/203 597/676/205 +f 597/677/205 598/699/204 600/678/206 +f 597/677/205 599/679/207 558/680/208 +f 599/681/207 600/696/206 602/682/209 +f 558/684/208 599/968/207 601/685/101 +f 601/686/101 602/691/209 604/687/210 +f 601/689/101 603/883/211 554/590/163 +f 602/691/209 606/693/213 605/692/212 +f 606/693/213 548/583/155 551/582/157 +f 607/694/214 545/575/153 548/577/155 +f 607/694/214 606/695/213 602/682/209 +f 608/697/215 542/569/150 545/571/153 +f 608/697/215 607/698/214 600/678/206 +f 609/700/215 539/563/148 542/565/150 +f 609/700/215 608/701/215 598/673/204 +f 610/703/216 536/557/145 539/559/148 +f 610/703/216 609/704/215 596/669/202 +f 611/706/216 533/551/141 536/553/145 +f 611/706/216 610/707/216 594/664/199 +f 530/547/138 533/546/141 611/709/216 +f 612/710/217 611/709/216 592/660/197 +f 613/712/218 527/541/136 530/540/138 +f 588/714/192 613/969/218 612/715/217 +f 614/716/219 524/533/134 527/535/136 +f 586/718/190 614/970/219 613/719/218 +f 521/527/131 524/529/134 614/720/219 +f 615/721/220 614/720/219 586/648/190 +f 616/723/221 518/521/127 521/523/131 +f 616/723/221 615/724/220 584/643/188 +f 617/726/222 515/515/125 518/517/127 +f 580/728/223 617/726/222 616/727/221 +f 619/729/224 618/971/227 621/730/225 +f 618/732/227 620/810/266 623/733/228 +f 622/735/226 621/972/225 624/736/229 +f 621/738/225 623/806/228 626/739/231 +f 624/741/229 627/973/233 628/742/232 +f 626/744/231 629/802/236 627/745/233 +f 628/747/232 627/974/233 630/748/234 +f 629/750/236 632/798/239 630/751/234 +f 631/753/235 630/876/234 633/754/237 +f 632/756/239 635/793/242 633/757/237 +f 634/759/238 633/877/237 636/760/240 +f 635/762/242 638/788/254 636/763/240 +f 637/765/241 636/975/240 639/766/243 +f 636/768/240 638/784/254 641/769/245 +f 640/771/244 639/976/243 642/772/246 +f 639/774/243 641/777/245 644/775/248 +f 641/777/245 647/779/250 645/778/249 +f 647/779/250 648/845/253 646/780/251 +f 649/781/252 650/840/280 648/782/253 +f 638/784/254 649/781/252 647/783/250 +f 652/785/255 650/836/280 649/786/252 +f 635/762/242 651/787/256 649/786/252 +f 654/789/257 652/832/255 651/790/256 +f 653/792/258 651/977/256 635/793/242 +f 656/794/259 654/828/257 653/795/258 +f 655/797/260 653/880/258 632/798/239 +f 658/799/261 656/824/259 655/800/260 +f 657/801/262 655/800/260 629/802/236 +f 660/803/263 658/820/261 657/804/262 +f 659/805/264 657/804/262 626/739/231 +f 661/807/265 662/811/267 660/808/263 +f 620/810/266 661/807/265 659/809/264 +f 662/811/267 663/978/270 665/812/268 +f 664/813/269 666/872/292 665/814/268 +f 665/816/268 666/869/292 668/817/271 +f 660/803/263 665/884/268 667/819/272 +f 667/821/272 668/866/271 670/822/273 +f 667/821/272 669/823/274 656/824/259 +f 669/825/274 670/862/273 672/826/275 +f 669/825/274 671/827/276 654/828/257 +f 672/829/275 674/859/287 673/830/277 +f 671/831/276 673/830/277 652/832/255 +f 673/833/277 674/855/287 676/834/278 +f 673/833/277 675/835/279 650/836/280 +f 675/837/279 676/852/278 678/838/281 +f 650/840/280 675/885/279 677/841/99 +f 677/842/99 678/848/281 680/843/282 +f 648/845/253 677/979/99 679/846/95 +f 682/847/283 681/849/284 680/843/282 +f 682/847/283 640/771/244 643/773/247 +f 637/765/241 640/767/244 682/850/283 +f 683/851/285 682/850/283 678/838/281 +f 684/853/286 634/759/238 637/761/241 +f 684/853/286 683/854/285 676/834/278 +f 685/856/288 631/753/235 634/755/238 +f 672/829/275 685/878/288 684/858/286 +f 686/860/289 628/747/232 631/749/235 +f 670/862/273 686/980/289 685/863/288 +f 625/743/230 628/742/232 686/864/289 +f 687/865/290 686/864/289 670/822/273 +f 688/867/291 622/735/226 625/737/230 +f 666/869/292 688/867/291 687/868/290 +f 619/729/224 622/731/226 688/870/291 +f 689/871/293 688/870/291 666/872/292 +f 691/515/294 690/956/297 693/516/295 +f 690/518/297 692/636/352 695/519/298 +f 694/521/296 693/957/295 696/522/299 +f 693/524/295 695/632/298 698/525/301 +f 696/873/299 699/528/303 700/529/302 +f 698/530/301 701/628/306 699/531/303 +f 700/533/302 699/958/303 702/534/304 +f 701/536/306 704/624/308 702/537/304 +f 702/539/304 705/959/309 706/540/307 +f 704/542/308 707/619/312 705/543/309 +f 706/547/307 705/545/309 708/874/310 +f 707/548/312 710/614/341 708/549/310 +f 709/551/311 708/960/310 711/552/313 +f 708/554/310 710/610/341 713/555/315 +f 712/557/314 711/961/313 714/558/316 +f 713/560/315 716/606/337 714/561/316 +f 715/563/317 714/962/316 717/564/318 +f 714/566/316 716/602/337 719/567/320 +f 718/569/319 717/963/318 720/570/321 +f 719/572/320 722/598/325 720/573/321 +f 721/575/322 720/881/321 723/576/323 +f 722/578/325 725/594/329 723/579/323 +f 723/581/323 726/882/328 727/582/326 +f 723/584/323 725/587/329 728/585/327 +f 725/587/329 731/589/331 729/588/330 +f 731/589/331 732/690/378 730/590/332 +f 734/684/333 732/592/378 731/593/331 +f 722/578/325 733/591/334 731/593/331 +f 736/595/335 734/680/333 733/596/334 +f 735/597/336 733/596/334 722/598/325 +f 737/599/336 738/675/339 736/600/335 +f 737/599/336 735/601/336 719/567/320 +f 739/603/338 740/671/370 738/604/339 +f 713/560/315 739/603/338 737/605/336 +f 742/607/340 740/667/370 739/608/338 +f 710/610/341 741/609/338 739/608/338 +f 743/611/342 744/662/365 742/612/340 +f 707/548/312 743/611/342 741/613/338 +f 746/615/343 744/658/365 743/616/342 +f 704/542/308 745/964/344 743/618/342 +f 748/620/345 746/654/343 745/621/344 +f 701/536/306 747/965/346 745/623/344 +f 750/625/347 748/650/345 747/626/346 +f 698/530/301 749/627/348 747/626/346 +f 752/645/349 750/630/347 749/631/348 +f 695/632/298 751/629/350 749/631/348 +f 753/633/351 754/638/353 752/634/349 +f 692/636/352 753/633/351 751/635/350 +f 754/638/353 755/637/355 757/875/354 +f 755/639/355 756/728/392 758/640/356 +f 757/642/354 758/725/356 760/643/357 +f 752/645/349 757/966/354 759/646/358 +f 759/647/358 760/722/357 762/648/359 +f 759/647/358 761/649/360 748/650/345 +f 761/651/360 762/718/359 764/652/361 +f 761/651/360 763/653/362 746/654/343 +f 763/655/362 764/714/361 766/656/363 +f 763/655/362 765/657/364 744/658/365 +f 765/659/364 766/711/363 768/660/366 +f 765/659/364 767/661/367 742/612/340 +f 767/663/367 768/708/366 770/664/368 +f 767/666/367 769/967/369 740/667/370 +f 769/668/369 770/705/368 772/669/371 +f 769/668/369 771/670/372 738/604/339 +f 771/672/372 772/702/371 774/673/373 +f 738/675/339 771/879/372 773/676/374 +f 773/677/374 774/699/373 776/678/375 +f 773/677/374 775/679/376 734/680/333 +f 775/681/376 776/696/375 778/682/377 +f 734/684/333 775/968/376 777/685/97 +f 777/686/97 778/691/377 780/687/379 +f 777/689/97 779/883/380 730/590/332 +f 782/693/381 781/692/382 780/687/379 +f 782/693/381 724/583/324 727/582/326 +f 783/694/383 721/575/322 724/577/324 +f 783/694/383 782/695/381 778/682/377 +f 784/697/384 718/569/319 721/571/322 +f 784/697/384 783/698/383 776/678/375 +f 785/700/384 715/563/317 718/565/319 +f 785/700/384 784/701/384 774/673/373 +f 786/703/385 712/557/314 715/559/317 +f 786/703/385 785/704/384 772/669/371 +f 787/706/385 709/551/311 712/553/314 +f 787/706/385 786/707/385 770/664/368 +f 706/547/307 709/546/311 787/709/385 +f 788/710/386 787/709/385 768/660/366 +f 789/712/387 703/541/305 706/540/307 +f 764/714/361 789/969/387 788/715/386 +f 790/716/388 700/533/302 703/535/305 +f 762/718/359 790/970/388 789/719/387 +f 697/527/300 700/529/302 790/720/388 +f 791/721/389 790/720/388 762/648/359 +f 792/723/390 694/521/296 697/523/300 +f 792/723/390 791/724/389 760/643/357 +f 793/726/391 691/515/294 694/517/296 +f 756/728/392 793/726/391 792/727/390 +f 795/729/393 794/971/396 797/730/394 +f 794/732/396 796/810/431 799/733/397 +f 798/735/395 797/972/394 800/736/398 +f 797/738/394 799/806/397 802/739/400 +f 800/741/398 803/973/402 804/742/401 +f 802/744/400 805/802/405 803/745/402 +f 804/747/401 803/974/402 806/748/403 +f 805/750/405 808/798/407 806/751/403 +f 806/876/403 809/754/408 810/755/406 +f 808/756/407 811/793/410 809/757/408 +f 809/877/408 812/760/411 813/761/409 +f 811/762/410 814/788/419 812/763/411 +f 813/765/409 812/975/411 815/766/412 +f 812/768/411 814/784/419 817/769/155 +f 816/771/160 815/976/412 818/772/413 +f 815/774/412 817/777/155 820/775/415 +f 817/777/155 823/779/213 821/778/416 +f 823/779/213 824/845/209 822/780/417 +f 825/781/418 826/840/446 824/782/209 +f 814/784/419 825/781/418 823/783/213 +f 828/785/420 826/836/446 825/786/418 +f 827/787/421 825/786/418 814/788/419 +f 830/789/422 828/832/420 827/790/421 +f 829/792/423 827/977/421 811/793/410 +f 832/794/424 830/828/422 829/795/423 +f 831/797/425 829/880/423 808/798/407 +f 834/799/426 832/824/424 831/800/425 +f 833/801/427 831/800/425 805/802/405 +f 836/803/428 834/820/426 833/804/427 +f 835/805/429 833/804/427 802/739/400 +f 837/807/430 838/811/432 836/808/428 +f 796/810/431 837/807/430 835/809/429 +f 838/811/432 839/978/435 841/812/433 +f 840/813/434 842/872/455 841/814/433 +f 841/816/433 842/869/455 844/817/436 +f 836/803/428 841/884/433 843/819/437 +f 843/821/437 844/866/436 846/822/438 +f 843/821/437 845/823/439 832/824/424 +f 845/825/439 846/862/438 848/826/440 +f 845/825/439 847/827/441 830/828/422 +f 847/831/441 848/829/440 850/859/442 +f 847/831/441 849/830/443 828/832/420 +f 849/833/443 850/855/442 852/834/444 +f 849/833/443 851/835/445 826/836/446 +f 851/837/445 852/852/444 854/838/165 +f 826/840/446 851/885/445 853/841/101 +f 853/842/101 854/848/165 856/843/447 +f 824/845/209 853/979/101 855/846/98 +f 858/847/162 857/849/448 856/843/447 +f 858/847/162 816/771/160 819/773/414 +f 813/765/409 816/767/160 858/850/162 +f 859/851/449 858/850/162 854/838/165 +f 860/853/450 810/759/406 813/761/409 +f 860/853/450 859/854/449 852/834/444 +f 861/856/451 807/753/404 810/755/406 +f 861/878/451 860/858/450 850/859/442 +f 862/860/452 804/747/401 807/749/404 +f 846/862/438 862/980/452 861/863/451 +f 801/743/399 804/742/401 862/864/452 +f 863/865/453 862/864/452 846/822/438 +f 864/867/454 798/735/395 801/737/399 +f 842/869/455 864/867/454 863/868/453 +f 795/729/393 798/731/395 864/870/454 +f 865/871/456 864/870/454 842/872/455 +f 867/515/457 866/956/460 869/516/458 +f 866/518/460 868/636/515 871/519/461 +f 870/521/459 869/957/458 872/522/462 +f 869/524/458 871/632/461 874/525/464 +f 873/527/463 872/873/462 875/528/465 +f 874/530/464 877/628/469 875/531/465 +f 876/533/466 875/958/465 878/534/467 +f 877/536/469 880/624/471 878/537/467 +f 878/539/467 881/959/472 882/540/470 +f 880/542/471 883/619/474 881/543/472 +f 881/545/472 884/874/475 885/546/473 +f 883/548/474 886/614/504 884/549/475 +f 885/551/473 884/960/475 887/552/476 +f 884/554/475 886/610/504 889/555/478 +f 888/557/477 887/961/476 890/558/479 +f 889/560/478 892/606/500 890/561/479 +f 891/563/480 890/962/479 893/564/481 +f 890/566/479 892/602/500 895/567/483 +f 894/569/482 893/963/481 896/570/484 +f 895/572/483 898/598/497 896/573/484 +f 897/575/485 896/881/484 899/576/486 +f 896/580/484 898/578/497 901/594/488 +f 899/581/486 902/882/490 903/582/489 +f 901/587/488 904/585/492 902/586/490 +f 901/587/488 907/589/493 905/588/491 +f 907/589/493 908/690/541 906/590/494 +f 910/684/495 908/592/541 907/593/493 +f 898/578/497 909/591/496 907/593/493 +f 912/595/498 910/680/495 909/596/496 +f 895/572/483 911/597/499 909/596/496 +f 913/599/499 914/675/502 912/600/498 +f 913/599/499 911/601/499 895/567/483 +f 915/603/501 916/671/533 914/604/502 +f 889/560/478 915/603/501 913/605/499 +f 918/607/503 916/667/533 915/608/501 +f 886/610/504 917/609/501 915/608/501 +f 919/611/505 920/662/528 918/612/503 +f 883/548/474 919/611/505 917/613/501 +f 922/615/506 920/658/528 919/616/505 +f 880/542/471 921/964/507 919/618/505 +f 924/620/508 922/654/506 921/621/507 +f 877/536/469 923/965/509 921/623/507 +f 926/625/510 924/650/508 923/626/509 +f 874/530/464 925/627/511 923/626/509 +f 927/629/512 928/645/514 926/630/510 +f 871/632/461 927/629/512 925/631/511 +f 929/633/513 930/638/517 928/634/514 +f 868/636/515 929/633/513 927/635/512 +f 931/637/516 933/875/519 928/634/514 +f 931/639/516 932/728/555 934/640/518 +f 933/642/519 934/725/518 936/643/520 +f 928/645/514 933/966/519 935/646/521 +f 935/647/521 936/722/520 938/648/522 +f 935/647/521 937/649/523 924/650/508 +f 937/651/523 938/718/522 940/652/524 +f 937/651/523 939/653/525 922/654/506 +f 939/655/525 940/714/524 942/656/526 +f 939/655/525 941/657/527 920/658/528 +f 941/659/527 942/711/526 944/660/529 +f 920/662/528 941/659/527 943/661/530 +f 943/663/530 944/708/529 946/664/531 +f 943/666/530 945/967/532 916/667/533 +f 945/668/532 946/705/531 948/669/534 +f 945/668/532 947/670/535 914/604/502 +f 947/672/535 948/702/534 950/673/536 +f 947/879/535 949/676/537 912/600/498 +f 949/677/537 950/699/536 952/678/538 +f 949/677/537 951/679/539 910/680/495 +f 951/681/539 952/696/538 954/682/540 +f 910/684/495 951/968/539 953/685/96 +f 953/686/96 954/691/540 956/687/542 +f 953/689/96 955/883/543 906/590/494 +f 958/693/544 957/692/545 956/687/542 +f 958/693/544 900/583/487 903/582/489 +f 897/575/485 900/577/487 958/695/544 +f 952/696/538 959/694/546 958/695/544 +f 960/697/547 894/569/482 897/571/485 +f 960/697/547 959/698/546 952/678/538 +f 961/700/547 891/563/480 894/565/482 +f 961/700/547 960/701/547 950/673/536 +f 962/703/548 888/557/477 891/559/480 +f 962/703/548 961/704/547 948/669/534 +f 963/706/548 885/551/473 888/553/477 +f 963/706/548 962/707/548 946/664/531 +f 964/710/549 882/547/470 885/546/473 +f 964/710/549 963/709/548 944/660/529 +f 965/712/550 879/541/468 882/540/470 +f 940/714/524 965/969/550 964/715/549 +f 966/716/551 876/533/466 879/535/468 +f 938/718/522 966/970/551 965/719/550 +f 873/527/463 876/529/466 966/720/551 +f 967/721/552 966/720/551 938/648/522 +f 968/723/553 870/521/459 873/523/463 +f 934/725/518 968/723/553 967/724/552 +f 969/726/554 867/515/457 870/517/459 +f 932/728/555 969/726/554 968/727/553 +f 971/729/556 970/971/559 973/730/557 +f 970/732/559 972/810/594 975/733/560 +f 974/735/558 973/972/557 976/736/561 +f 973/738/557 975/806/560 978/739/563 +f 976/741/561 979/973/565 980/742/564 +f 978/744/563 981/802/568 979/745/565 +f 980/747/564 979/974/565 982/748/566 +f 981/750/568 984/798/571 982/751/566 +f 983/753/567 982/876/566 985/754/569 +f 984/756/571 987/793/573 985/757/569 +f 985/877/569 988/760/574 989/761/572 +f 987/762/573 990/788/582 988/763/574 +f 989/765/572 988/975/574 991/766/575 +f 988/768/574 990/784/582 993/769/324 +f 992/771/329 991/976/575 994/772/576 +f 991/774/575 993/777/324 996/775/578 +f 993/777/324 999/779/381 997/778/579 +f 999/779/381 1000/845/377 998/780/580 +f 1001/781/581 1002/840/609 1000/782/377 +f 990/784/582 1001/781/581 999/783/381 +f 1004/785/583 1002/836/609 1001/786/581 +f 1003/787/584 1001/786/581 990/788/582 +f 1006/789/585 1004/832/583 1003/790/584 +f 1005/792/586 1003/977/584 987/793/573 +f 1008/794/587 1006/828/585 1005/795/586 +f 981/750/568 1007/797/588 1005/880/586 +f 1010/799/589 1008/824/587 1007/800/588 +f 978/744/563 1009/801/590 1007/800/588 +f 1012/803/591 1010/820/589 1009/804/590 +f 975/806/560 1011/805/592 1009/804/590 +f 1013/807/593 1014/811/595 1012/808/591 +f 972/810/594 1013/807/593 1011/809/592 +f 1014/811/595 1015/978/597 1017/812/596 +f 1015/815/597 1016/813/619 1018/872/598 +f 1017/816/596 1018/869/598 1020/817/599 +f 1012/803/591 1017/884/596 1019/819/600 +f 1019/821/600 1020/866/599 1022/822/601 +f 1019/821/600 1021/823/602 1008/824/587 +f 1021/825/602 1022/862/601 1024/826/603 +f 1021/825/602 1023/827/604 1006/828/585 +f 1023/831/604 1024/829/603 1026/859/605 +f 1023/831/604 1025/830/606 1004/832/583 +f 1025/833/606 1026/855/605 1028/834/607 +f 1025/833/606 1027/835/608 1002/836/609 +f 1027/837/608 1028/852/607 1030/838/378 +f 1002/840/609 1027/885/608 1029/841/97 +f 1029/842/97 1030/848/378 1032/843/610 +f 1000/845/377 1029/979/97 1031/846/100 +f 1030/848/378 1034/847/331 1033/849/611 +f 1034/847/331 992/771/329 995/773/577 +f 989/765/572 992/767/329 1034/850/331 +f 1035/851/612 1034/850/331 1030/838/378 +f 1036/853/613 986/759/570 989/761/572 +f 1036/853/613 1035/854/612 1028/834/607 +f 1037/856/614 983/753/567 986/755/570 +f 1024/829/603 1037/878/614 1036/858/613 +f 1038/860/615 980/747/564 983/749/567 +f 1022/862/601 1038/980/615 1037/863/614 +f 977/743/562 980/742/564 1038/864/615 +f 1039/865/616 1038/864/615 1022/822/601 +f 1040/867/617 974/735/558 977/737/562 +f 1040/867/617 1039/868/616 1020/817/599 +f 971/729/556 974/731/558 1040/870/617 +f 1041/871/618 1040/870/617 1018/872/598 +f 1043/515/620 1042/956/623 1045/516/621 +f 1042/518/623 1044/636/677 1047/519/624 +f 1046/521/622 1045/957/621 1048/522/625 +f 1045/524/621 1047/632/624 1050/525/627 +f 1048/873/625 1051/528/629 1052/529/628 +f 1050/530/627 1053/628/632 1051/531/629 +f 1052/533/628 1051/958/629 1054/534/630 +f 1053/536/632 1056/624/634 1054/537/630 +f 1054/539/630 1057/959/635 1058/540/633 +f 1056/542/634 1059/619/637 1057/543/635 +f 1057/545/635 1060/874/638 1061/546/636 +f 1059/548/637 1062/614/666 1060/549/638 +f 1061/551/636 1060/960/638 1063/552/639 +f 1060/554/638 1062/610/666 1065/555/641 +f 1064/557/640 1063/961/639 1066/558/642 +f 1065/560/641 1068/606/662 1066/561/642 +f 1067/563/643 1066/962/642 1069/564/644 +f 1066/566/642 1068/602/662 1071/567/646 +f 1070/569/645 1069/963/644 1072/570/647 +f 1071/572/646 1074/598/659 1072/573/647 +f 1072/881/647 1075/576/651 1076/577/649 +f 1072/580/647 1074/578/659 1077/594/650 +f 1076/583/649 1075/581/651 1078/882/652 +f 1075/584/651 1077/587/650 1080/585/654 +f 1077/587/650 1083/589/283 1081/588/655 +f 1083/589/283 1084/690/281 1082/590/656 +f 1086/684/657 1084/592/281 1083/593/283 +f 1074/578/659 1085/591/658 1083/593/283 +f 1088/595/660 1086/680/657 1085/596/658 +f 1071/572/646 1087/597/661 1085/596/658 +f 1089/599/661 1090/675/664 1088/600/660 +f 1068/602/662 1089/599/661 1087/601/661 +f 1091/603/663 1092/671/695 1090/604/664 +f 1065/560/641 1091/603/663 1089/605/661 +f 1094/607/665 1092/667/695 1091/608/663 +f 1062/610/666 1093/609/663 1091/608/663 +f 1095/611/667 1096/662/669 1094/612/665 +f 1059/548/637 1095/611/667 1093/613/663 +f 1097/617/668 1098/615/688 1096/658/669 +f 1056/542/634 1097/964/668 1095/618/667 +f 1100/620/670 1098/654/688 1097/621/668 +f 1053/536/632 1099/965/671 1097/623/668 +f 1102/625/672 1100/650/670 1099/626/671 +f 1050/530/627 1101/627/673 1099/626/671 +f 1104/645/674 1102/630/672 1101/631/673 +f 1047/632/624 1103/629/675 1101/631/673 +f 1105/633/676 1106/638/679 1104/634/674 +f 1044/636/677 1105/633/676 1103/635/675 +f 1107/637/678 1109/875/681 1104/634/674 +f 1107/639/678 1108/728/714 1110/640/680 +f 1109/642/681 1110/725/680 1112/643/682 +f 1104/645/674 1109/966/681 1111/646/683 +f 1111/647/683 1112/722/682 1114/648/684 +f 1111/647/683 1113/649/685 1100/650/670 +f 1113/651/685 1114/718/684 1116/652/686 +f 1113/651/685 1115/653/687 1098/654/688 +f 1115/655/687 1116/714/686 1118/656/689 +f 1115/655/687 1117/657/690 1096/658/669 +f 1117/659/690 1118/711/689 1120/660/691 +f 1096/662/669 1117/659/690 1119/661/692 +f 1119/663/692 1120/708/691 1122/664/693 +f 1119/666/692 1121/967/694 1092/667/695 +f 1121/668/694 1122/705/693 1124/669/696 +f 1121/668/694 1123/670/697 1090/604/664 +f 1123/672/697 1124/702/696 1126/673/698 +f 1090/675/664 1123/879/697 1125/676/699 +f 1125/677/699 1126/699/698 1128/678/700 +f 1125/677/699 1127/679/701 1086/680/657 +f 1127/681/701 1128/696/700 1130/682/253 +f 1086/684/657 1127/968/701 1129/685/99 +f 1129/686/99 1130/691/253 1132/687/702 +f 1084/690/281 1129/689/99 1131/883/703 +f 1134/693/250 1133/692/704 1132/687/702 +f 1134/693/250 1076/583/649 1079/582/653 +f 1073/575/648 1076/577/649 1134/695/250 +f 1135/694/705 1134/695/250 1130/682/253 +f 1136/697/706 1070/569/645 1073/571/648 +f 1136/697/706 1135/698/705 1128/678/700 +f 1137/700/706 1067/563/643 1070/565/645 +f 1137/700/706 1136/701/706 1126/673/698 +f 1064/557/640 1067/559/643 1137/704/706 +f 1138/703/707 1137/704/706 1124/669/696 +f 1139/706/707 1061/551/636 1064/553/640 +f 1120/708/691 1139/706/707 1138/707/707 +f 1140/710/708 1058/547/633 1061/546/636 +f 1140/710/708 1139/709/707 1120/660/691 +f 1141/712/709 1055/541/631 1058/540/633 +f 1116/714/686 1141/969/709 1140/715/708 +f 1142/716/710 1052/533/628 1055/535/631 +f 1114/718/684 1142/970/710 1141/719/709 +f 1049/527/626 1052/529/628 1142/720/710 +f 1143/721/711 1142/720/710 1114/648/684 +f 1046/521/622 1049/523/626 1143/724/711 +f 1144/723/712 1143/724/711 1112/643/682 +f 1145/726/713 1043/515/620 1046/517/622 +f 1108/728/714 1145/726/713 1144/727/712 +f 1147/729/715 1146/971/718 1149/730/716 +f 1146/732/718 1148/810/753 1151/733/719 +f 1150/735/717 1149/972/716 1152/736/720 +f 1149/738/716 1151/806/719 1154/739/722 +f 1152/741/720 1155/973/724 1156/742/723 +f 1154/744/722 1157/802/727 1155/745/724 +f 1156/747/723 1155/974/724 1158/748/725 +f 1157/750/727 1160/798/730 1158/751/725 +f 1159/753/726 1158/876/725 1161/754/728 +f 1160/756/730 1163/793/732 1161/757/728 +f 1161/877/728 1164/760/733 1165/761/731 +f 1163/762/732 1166/788/741 1164/763/733 +f 1165/765/731 1164/975/733 1167/766/734 +f 1164/768/733 1166/784/741 1169/769/487 +f 1168/771/488 1167/976/734 1170/772/735 +f 1167/774/734 1169/777/487 1172/775/737 +f 1169/777/487 1175/779/544 1173/778/738 +f 1175/779/544 1176/845/540 1174/780/739 +f 1177/781/740 1178/840/768 1176/782/540 +f 1166/784/741 1177/781/740 1175/783/544 +f 1180/785/742 1178/836/768 1177/786/740 +f 1179/787/743 1177/786/740 1166/788/741 +f 1182/789/744 1180/832/742 1179/790/743 +f 1181/792/745 1179/977/743 1163/793/732 +f 1184/794/746 1182/828/744 1181/795/745 +f 1157/750/727 1183/797/747 1181/880/745 +f 1186/799/748 1184/824/746 1183/800/747 +f 1154/744/722 1185/801/749 1183/800/747 +f 1188/803/750 1186/820/748 1185/804/749 +f 1151/806/719 1187/805/751 1185/804/749 +f 1189/807/752 1190/811/754 1188/808/750 +f 1148/810/753 1189/807/752 1187/809/751 +f 1190/811/754 1191/978/757 1193/812/755 +f 1192/813/756 1194/872/777 1193/814/755 +f 1193/816/755 1194/869/777 1196/817/758 +f 1193/884/755 1195/819/759 1186/820/748 +f 1195/821/759 1196/866/758 1198/822/760 +f 1195/821/759 1197/823/761 1184/824/746 +f 1197/825/761 1198/862/760 1200/826/762 +f 1197/825/761 1199/827/763 1182/828/744 +f 1199/831/763 1200/829/762 1202/859/764 +f 1199/831/763 1201/830/765 1180/832/742 +f 1201/833/765 1202/855/764 1204/834/766 +f 1201/833/765 1203/835/767 1178/836/768 +f 1203/837/767 1204/852/766 1206/838/541 +f 1203/885/767 1205/841/96 1176/782/540 +f 1205/842/96 1206/848/541 1208/843/769 +f 1176/845/540 1205/979/96 1207/846/102 +f 1210/847/493 1209/849/770 1208/843/769 +f 1210/847/493 1168/771/488 1171/773/736 +f 1165/765/731 1168/767/488 1210/850/493 +f 1211/851/771 1210/850/493 1206/838/541 +f 1212/853/772 1162/759/729 1165/761/731 +f 1212/853/772 1211/854/771 1204/834/766 +f 1213/856/773 1159/753/726 1162/755/729 +f 1213/878/773 1212/858/772 1202/859/764 +f 1214/860/774 1156/747/723 1159/749/726 +f 1198/862/760 1214/980/774 1213/863/773 +f 1153/743/721 1156/742/723 1214/864/774 +f 1215/865/775 1214/864/774 1198/822/760 +f 1216/867/776 1150/735/717 1153/737/721 +f 1216/867/776 1215/868/775 1196/817/758 +f 1147/729/715 1150/731/717 1216/870/776 +f 1217/871/778 1216/870/776 1194/872/777 +o B1 +v -0.312500 1.250000 2.125000 +v -0.312500 2.000000 2.125000 +v -0.312500 1.250000 2.000000 +v -0.312500 2.000000 2.000000 +v 0.312500 1.250000 2.125000 +v 0.312500 2.000000 2.125000 +v 0.312500 1.250000 2.000000 +v 0.312500 2.000000 2.000000 +vn -1.0000 -0.0000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.142857 0.875000 +vt 0.000000 0.125000 +vt 0.142857 0.125000 +vt 1.000000 0.875000 +vt 0.857143 0.125000 +vt 1.000000 0.125000 +vt 0.857143 0.875000 +vt 0.857143 -0.000000 +vt 0.142857 -0.000000 +vt 0.142857 1.000000 +vt 0.857143 1.000000 +vt 0.000000 0.875000 +s 1 +usemtl Ashes +f 1219/981/779 1220/982/779 1218/983/779 +f 1225/984/780 1222/985/780 1224/986/780 +f 1223/987/781 1218/983/781 1222/985/781 +f 1224/988/782 1218/983/782 1220/989/782 +f 1221/990/783 1223/987/783 1225/991/783 +f 1219/981/779 1221/992/779 1220/982/779 +f 1225/984/780 1223/987/780 1222/985/780 +f 1223/987/781 1219/981/781 1218/983/781 +f 1224/988/782 1222/985/782 1218/983/782 +f 1221/990/783 1219/981/783 1223/987/783 +o B3 +v 2.125000 1.250000 0.312500 +v 2.125000 2.000000 0.312500 +v 2.000000 1.250000 0.312500 +v 2.000000 2.000000 0.312500 +v 2.125000 1.250000 -0.312500 +v 2.125000 2.000000 -0.312500 +v 2.000000 1.250000 -0.312500 +v 2.000000 2.000000 -0.312500 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 -0.0000 -1.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.142857 0.875000 +vt 0.000000 0.125000 +vt 0.142857 0.125000 +vt 1.000000 0.875000 +vt 0.857143 0.125000 +vt 1.000000 0.125000 +vt 0.857143 0.875000 +vt 0.857143 -0.000000 +vt 0.142857 -0.000000 +vt 0.142857 1.000000 +vt 0.857143 1.000000 +vt 0.000000 0.875000 +s 1 +usemtl Gavel +f 1227/993/784 1228/994/784 1226/995/784 +f 1233/996/785 1230/997/785 1232/998/785 +f 1231/999/786 1226/995/786 1230/997/786 +f 1232/1000/787 1226/995/787 1228/1001/787 +f 1229/1002/788 1231/999/788 1233/1003/788 +f 1227/993/784 1229/1004/784 1228/994/784 +f 1233/996/785 1231/999/785 1230/997/785 +f 1231/999/786 1227/993/786 1226/995/786 +f 1232/1000/787 1230/997/787 1226/995/787 +f 1229/1002/788 1227/993/788 1231/999/788 +o B2 +v 0.312499 1.250000 -2.125000 +v 0.312499 2.000000 -2.125000 +v 0.312499 1.250000 -2.000000 +v 0.312499 2.000000 -2.000000 +v -0.312501 1.250000 -2.125000 +v -0.312501 2.000000 -2.125000 +v -0.312501 1.250000 -2.000000 +v -0.312501 2.000000 -2.000000 +vn 1.0000 -0.0000 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.142857 0.875000 +vt 0.000000 0.125000 +vt 0.142857 0.125000 +vt 1.000000 0.875000 +vt 0.857143 0.125000 +vt 1.000000 0.125000 +vt 0.857143 0.875000 +vt 0.857143 -0.000000 +vt 0.142857 -0.000000 +vt 0.142857 1.000000 +vt 0.857143 1.000000 +vt 0.000000 0.875000 +s 1 +usemtl Book +f 1235/1005/789 1236/1006/789 1234/1007/789 +f 1241/1008/790 1238/1009/790 1240/1010/790 +f 1239/1011/791 1234/1007/791 1238/1009/791 +f 1240/1012/792 1234/1007/792 1236/1013/792 +f 1237/1014/793 1239/1011/793 1241/1015/793 +f 1235/1005/789 1237/1016/789 1236/1006/789 +f 1241/1008/790 1239/1011/790 1238/1009/790 +f 1239/1011/791 1235/1005/791 1234/1007/791 +f 1240/1012/792 1238/1009/792 1234/1007/792 +f 1237/1014/793 1235/1005/793 1239/1011/793 +o B4 +v -2.125000 1.250000 -0.312499 +v -2.125000 2.000000 -0.312499 +v -2.000000 1.250000 -0.312499 +v -2.000000 2.000000 -0.312499 +v -2.125000 1.250000 0.312501 +v -2.125000 2.000000 0.312501 +v -2.000000 1.250000 0.312501 +v -2.000000 2.000000 0.312501 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.142857 0.875000 +vt 0.000000 0.125000 +vt 0.142857 0.125000 +vt 1.000000 0.875000 +vt 0.857143 0.125000 +vt 1.000000 0.125000 +vt 0.857143 0.875000 +vt 0.857143 -0.000000 +vt 0.142857 -0.000000 +vt 0.142857 1.000000 +vt 0.857143 1.000000 +vt 0.000000 0.875000 +s 1 +usemtl Coin +f 1243/1017/794 1244/1018/794 1242/1019/794 +f 1249/1020/795 1246/1021/795 1248/1022/795 +f 1247/1023/796 1242/1019/796 1246/1021/796 +f 1248/1024/797 1242/1019/797 1244/1025/797 +f 1245/1026/798 1247/1023/798 1249/1027/798 +f 1243/1017/794 1245/1028/794 1244/1018/794 +f 1249/1020/795 1247/1023/795 1246/1021/795 +f 1247/1023/796 1243/1017/796 1242/1019/796 +f 1248/1024/797 1246/1021/797 1242/1019/797 +f 1245/1026/798 1243/1017/798 1247/1023/798 diff --git a/src/main/resources/assets/hbm/models/machines/supercomputer.obj b/src/main/resources/assets/hbm/models/machines/supercomputer.obj new file mode 100644 index 000000000..3d03af43b --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/supercomputer.obj @@ -0,0 +1,3229 @@ +# Blender v2.79 (sub 0) OBJ File: 'supercomputer.blend' +# www.blender.org +o Lights +v -2.078729 1.500000 -0.861038 +v -2.078729 2.000000 -0.861038 +v -1.590990 2.000000 1.590990 +v -1.590990 1.500000 1.590990 +v 0.000000 2.000000 2.250000 +v 0.000000 1.500000 2.250000 +v 2.078729 1.500000 -0.861038 +v 2.078729 2.000000 -0.861038 +v 0.861037 1.500000 -2.078729 +v 0.861037 2.000000 -2.078729 +v -0.861038 2.000000 -2.078729 +v -0.861038 1.500000 -2.078729 +v 2.250000 2.000000 -0.000000 +v 2.250000 1.500000 -0.000000 +v 2.078729 1.500000 0.861038 +v 2.078729 2.000000 0.861038 +v -0.861038 2.000000 2.078729 +v -0.861038 1.500000 2.078729 +v -2.250000 2.000000 0.000000 +v -2.250000 1.500000 0.000000 +v 1.590990 2.000000 -1.590991 +v 1.590990 1.500000 -1.590991 +v -2.078729 2.000000 0.861038 +v -2.078729 1.500000 0.861038 +v 0.861037 1.500000 2.078729 +v 0.861037 2.000000 2.078729 +v 1.590990 2.000000 1.590991 +v 1.590990 1.500000 1.590991 +v 0.000000 2.000000 -2.250000 +v 0.000000 1.500000 -2.250000 +v -1.590990 1.500000 -1.590990 +v -1.590990 2.000000 -1.590990 +vt 0.999900 0.000100 +vt 0.749950 0.996590 +vt 0.749950 0.000100 +vt 0.500000 0.000100 +vt 0.250050 0.996590 +vt 0.250050 0.000100 +vt 0.250000 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.750000 0.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.250000 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 0.500000 0.996590 +vt 0.000100 0.996590 +vt 0.000100 0.000100 +vt 0.500000 0.000000 +vt 0.250000 1.000000 +vt 0.750000 0.000000 +vt 0.500000 1.000000 +vt 1.000000 0.000000 +vt 0.750000 1.000000 +vt 0.250000 1.000000 +vt 1.000000 0.000000 +vt 0.750000 1.000000 +vt 0.250000 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 0.500000 0.000000 +vt 0.250000 1.000000 +vt 0.500000 1.000000 +vt 0.999900 0.996590 +vt 1.000000 1.000000 +vt 1.000000 1.000000 +vt 1.000000 1.000000 +vn 1.0000 0.0000 -0.0000 +vn 0.9239 0.0000 0.3827 +vn 0.7071 0.0000 0.7071 +vn 0.3827 0.0000 0.9239 +vn -0.9239 0.0000 0.3827 +vn -1.0000 0.0000 0.0000 +vn -0.9239 0.0000 -0.3827 +vn 0.3827 0.0000 -0.9239 +vn 0.7071 0.0000 -0.7071 +vn 0.9239 0.0000 -0.3827 +vn -0.0000 0.0000 1.0000 +vn -0.7071 0.0000 0.7071 +vn -0.3827 0.0000 0.9239 +vn -0.0000 0.0000 -1.0000 +vn -0.3827 0.0000 -0.9239 +vn -0.7071 0.0000 -0.7071 +s 1 +f 14/1/1 16/2/2 15/3/2 +f 28/4/3 26/5/4 25/6/4 +f 24/7/5 19/8/6 20/9/6 +f 20/10/6 2/11/7 1/12/7 +f 9/13/8 21/14/9 22/15/9 +f 7/16/10 13/17/1 14/18/1 +f 15/3/2 27/19/3 28/4/3 +f 25/6/4 5/20/11 6/21/11 +f 4/22/12 23/23/5 24/7/5 +f 18/24/13 3/25/12 4/22/12 +f 6/26/11 17/27/13 18/24/13 +f 22/15/9 8/28/10 7/16/10 +f 30/29/14 10/30/8 9/13/8 +f 12/31/15 29/32/14 30/33/14 +f 31/34/16 11/35/15 12/31/15 +f 1/12/7 32/36/16 31/34/16 +f 14/1/1 13/37/1 16/2/2 +f 28/4/3 27/19/3 26/5/4 +f 24/7/5 23/23/5 19/8/6 +f 20/10/6 19/38/6 2/11/7 +f 9/13/8 10/30/8 21/14/9 +f 7/16/10 8/28/10 13/17/1 +f 15/3/2 16/2/2 27/19/3 +f 25/6/4 26/5/4 5/20/11 +f 4/22/12 3/25/12 23/23/5 +f 18/24/13 17/27/13 3/25/12 +f 6/26/11 5/39/11 17/27/13 +f 22/15/9 21/14/9 8/28/10 +f 30/29/14 29/40/14 10/30/8 +f 12/31/15 11/35/15 29/32/14 +f 31/34/16 32/36/16 11/35/15 +f 1/12/7 2/11/7 32/36/16 +o Computer +v -2.500000 0.000000 3.500000 +v 2.500000 0.000000 3.500000 +v -2.500000 0.000000 -3.500000 +v 2.500000 0.000000 -3.500000 +v 3.500000 0.000000 2.500000 +v 3.500000 0.000000 -2.500000 +v -3.500000 0.000000 2.500000 +v -3.500000 0.000000 -2.500000 +v -2.500000 1.000000 3.500000 +v 2.500000 1.000000 3.500000 +v -2.500000 1.000000 -3.500000 +v 2.500000 1.000000 -3.500000 +v 3.500000 1.000000 2.500000 +v 3.500000 1.000000 -2.500000 +v -3.500000 1.000000 2.500000 +v -3.500000 1.000000 -2.500000 +v -2.250000 0.000000 3.000000 +v 2.250000 0.000000 3.000000 +v -2.250000 1.000000 3.000000 +v 2.250000 1.000000 3.000000 +v -2.250000 0.000000 -3.000000 +v 2.250000 0.000000 -3.000000 +v -2.250000 1.000000 -3.000000 +v 2.250000 1.000000 -3.000000 +v 3.000000 0.000000 2.250000 +v 3.000000 0.000000 -2.250000 +v 3.000000 1.000000 2.250000 +v 3.000000 1.000000 -2.250000 +v -3.000000 0.000000 2.250000 +v -3.000000 0.000000 -2.250000 +v -3.000000 1.000000 2.250000 +v -3.000000 1.000000 -2.250000 +v 0.000000 0.500000 -2.000000 +v -0.765367 0.500000 -1.847759 +v -1.414213 0.500000 -1.414214 +v -1.847759 0.500000 -0.765367 +v -2.000000 0.500000 0.000000 +v -1.847759 0.500000 0.765367 +v -1.414213 0.500000 1.414214 +v -0.765367 0.500000 1.847759 +v -0.000000 0.500000 2.000000 +v 0.765367 0.500000 1.847759 +v 1.414213 0.500000 1.414214 +v 1.847759 0.500000 0.765367 +v 2.000000 0.500000 -0.000000 +v 1.847759 0.500000 -0.765367 +v 1.414213 0.500000 -1.414214 +v 0.765366 0.500000 -1.847759 +v 0.000000 2.500000 -2.250000 +v -0.861038 2.500000 -2.078729 +v -1.590990 2.500000 -1.590990 +v -2.078729 2.500000 -0.861038 +v -2.250000 2.500000 0.000000 +v -2.078729 2.500000 0.861038 +v -1.590990 2.500000 1.590990 +v -0.861038 2.500000 2.078729 +v 0.000000 2.500000 2.250000 +v 0.861037 2.500000 2.078729 +v 1.590990 2.500000 1.590991 +v 2.078729 2.500000 0.861038 +v 2.250000 2.500000 -0.000000 +v 2.078729 2.500000 -0.861038 +v 1.590990 2.500000 -1.590991 +v 0.861037 2.500000 -2.078729 +v 0.861037 1.000000 -2.078729 +v 1.590990 1.000000 -1.590991 +v 2.078729 1.000000 -0.861038 +v 2.250000 1.000000 -0.000000 +v 2.078729 1.000000 0.861038 +v 1.590990 1.000000 1.590991 +v 0.861037 1.000000 2.078729 +v 0.000000 1.000000 2.250000 +v -0.861038 1.000000 2.078729 +v -1.590990 1.000000 1.590990 +v -2.078729 1.000000 0.861038 +v -2.250000 1.000000 0.000000 +v -2.078729 1.000000 -0.861038 +v -1.590990 1.000000 -1.590990 +v -0.861038 1.000000 -2.078729 +v 0.000000 1.000000 -2.250000 +v 0.000000 3.000000 -2.000000 +v -0.765367 3.000000 -1.847759 +v -1.414213 3.000000 -1.414214 +v -1.847759 3.000000 -0.765367 +v -2.000000 3.000000 0.000000 +v -1.847759 3.000000 0.765367 +v -1.414213 3.000000 1.414214 +v -0.765367 3.000000 1.847759 +v -0.000000 3.000000 2.000000 +v 0.765367 3.000000 1.847759 +v 1.414213 3.000000 1.414214 +v 1.847759 3.000000 0.765367 +v 2.000000 3.000000 -0.000000 +v 1.847759 3.000000 -0.765367 +v 1.414213 3.000000 -1.414214 +v 0.765366 3.000000 -1.847759 +v 0.861037 7.500000 -2.078729 +v 1.590990 7.500000 -1.590991 +v 2.078729 7.500000 -0.861038 +v 2.250000 7.500000 -0.000000 +v 2.078729 7.500000 0.861038 +v 1.590990 7.500000 1.590991 +v 0.861037 7.500000 2.078729 +v 0.000000 7.500000 2.250000 +v -0.861038 7.500000 2.078729 +v -1.590990 7.500000 1.590990 +v -2.078729 7.500000 0.861038 +v -2.250000 7.500000 0.000000 +v -2.078729 7.500000 -0.861038 +v -1.590990 7.500000 -1.590990 +v -0.861038 7.500000 -2.078729 +v 0.000000 7.500000 -2.250000 +v 0.765366 6.000000 -1.847759 +v 1.414213 6.000000 -1.414214 +v 1.847759 6.000000 -0.765367 +v 2.000000 6.000000 -0.000000 +v 1.847759 6.000000 0.765367 +v 1.414213 6.000000 1.414214 +v 0.765367 6.000000 1.847759 +v -0.000000 6.000000 2.000000 +v -0.765367 6.000000 1.847759 +v -1.414213 6.000000 1.414214 +v -1.847759 6.000000 0.765367 +v -2.000000 6.000000 0.000000 +v -1.847759 6.000000 -0.765367 +v -1.414213 6.000000 -1.414214 +v -0.765367 6.000000 -1.847759 +v 0.000000 6.000000 -2.000000 +v 0.861037 6.500000 -2.078729 +v 1.590990 6.500000 -1.590991 +v 2.078729 6.500000 -0.861038 +v 2.250000 6.500000 -0.000000 +v 2.078729 6.500000 0.861038 +v 1.590990 6.500000 1.590991 +v 0.861037 6.500000 2.078729 +v 0.000000 6.500000 2.250000 +v -0.861038 6.500000 2.078729 +v -1.590990 6.500000 1.590990 +v -2.078729 6.500000 0.861038 +v -2.250000 6.500000 0.000000 +v -2.078729 6.500000 -0.861038 +v -1.590990 6.500000 -1.590990 +v -0.861038 6.500000 -2.078729 +v 0.000000 6.500000 -2.250000 +v 0.000000 8.000000 -2.000000 +v -0.765367 8.000000 -1.847759 +v -1.414213 8.000000 -1.414214 +v -1.847759 8.000000 -0.765367 +v -2.000000 8.000000 0.000000 +v -1.847759 8.000000 0.765367 +v -1.414213 8.000000 1.414214 +v -0.765367 8.000000 1.847759 +v -0.000000 8.000000 2.000000 +v 0.765367 8.000000 1.847759 +v 1.414213 8.000000 1.414214 +v 1.847759 8.000000 0.765367 +v 2.000000 8.000000 -0.000000 +v 1.847759 8.000000 -0.765367 +v 1.414213 8.000000 -1.414214 +v 0.765366 8.000000 -1.847759 +v 0.000000 8.000000 -1.750000 +v -0.669696 8.000000 -1.616789 +v -1.237436 8.000000 -1.237437 +v -1.616789 8.000000 -0.669696 +v -1.750000 8.000000 0.000000 +v -1.616789 8.000000 0.669696 +v -1.237436 8.000000 1.237437 +v -0.669696 8.000000 1.616789 +v 0.000000 8.000000 1.750000 +v 0.669696 8.000000 1.616789 +v 1.237436 8.000000 1.237437 +v 1.616789 8.000000 0.669696 +v 1.750000 8.000000 -0.000000 +v 1.616789 8.000000 -0.669696 +v 1.237436 8.000000 -1.237437 +v 0.669695 8.000000 -1.616790 +v 0.000000 7.500000 -1.750000 +v -0.669696 7.500000 -1.616789 +v -1.237436 7.500000 -1.237437 +v -1.616789 7.500000 -0.669696 +v -1.750000 7.500000 0.000000 +v -1.616789 7.500000 0.669696 +v -1.237436 7.500000 1.237437 +v -0.669696 7.500000 1.616789 +v 0.000000 7.500000 1.750000 +v 0.669696 7.500000 1.616789 +v 1.237436 7.500000 1.237437 +v 1.616789 7.500000 0.669696 +v 1.750000 7.500000 -0.000000 +v 1.616789 7.500000 -0.669696 +v 1.237436 7.500000 -1.237437 +v 0.669695 7.500000 -1.616790 +v 1.500000 5.500000 3.500000 +v 1.500000 6.000000 3.500000 +v 1.500000 5.500000 3.000000 +v 1.500000 6.000000 3.000000 +v -1.500000 5.500000 3.500000 +v -1.500000 6.000000 3.500000 +v -1.500000 5.500000 3.000000 +v -1.500000 6.000000 3.000000 +v 2.500000 1.000000 3.000000 +v 2.000000 1.000000 3.000000 +v 2.500000 1.000000 3.500000 +v 2.000000 1.000000 3.500000 +v 2.000000 5.000000 3.500000 +v 2.500000 5.000000 3.500000 +v 2.000000 5.000000 3.000000 +v 2.500000 5.000000 3.000000 +v -2.000000 5.000000 3.000000 +v -2.500000 5.000000 3.000000 +v -2.000000 5.000000 3.500000 +v -2.500000 5.000000 3.500000 +v -2.500000 1.000000 3.500000 +v -2.000000 1.000000 3.500000 +v -2.500000 1.000000 3.000000 +v -2.000000 1.000000 3.000000 +v 1.000000 6.000000 3.000000 +v -1.000000 6.000000 3.000000 +v 1.000000 6.000000 3.500000 +v -1.000000 6.000000 3.500000 +v -1.000000 7.250000 1.875000 +v 1.000000 7.250000 1.875000 +v -1.000000 6.750000 1.875000 +v 1.000000 6.750000 1.875000 +v 1.000000 6.750000 2.750000 +v -1.000000 6.750000 2.750000 +v 1.000000 7.250000 2.750000 +v -1.000000 7.250000 2.750000 +v -1.000000 6.500000 3.500000 +v 1.000000 6.500000 3.500000 +v -1.000000 6.500000 3.000000 +v 1.000000 6.500000 3.000000 +v -1.500000 0.000000 8.500000 +v 1.500000 0.000000 8.500000 +v -1.500000 0.000000 3.500000 +v 1.500000 0.000000 3.500000 +v -1.500000 1.000000 3.500000 +v -1.500000 1.000000 8.500000 +v 1.500000 1.000000 8.500000 +v 1.500000 1.000000 3.500000 +v -1.250000 1.000000 3.500000 +v -1.250000 1.000000 8.500000 +v 1.250000 1.000000 8.500000 +v 1.250000 1.000000 3.500000 +v -1.250000 2.500000 3.500000 +v -1.250000 2.500000 8.500000 +v 1.250000 2.500000 8.500000 +v 1.250000 2.500000 3.500000 +v -1.250000 1.000000 8.375000 +v 1.250000 1.000000 8.375000 +v -1.250000 2.500000 8.375000 +v 1.250000 2.500000 8.375000 +v -1.375000 1.000000 8.375000 +v -1.375000 2.500000 8.375000 +v -1.250000 2.625000 8.375000 +v 1.250000 2.625000 8.375000 +v 1.375000 1.000000 8.375000 +v 1.375000 2.500000 8.375000 +v -1.250000 2.500000 8.125000 +v 1.250000 2.500000 8.125000 +v -1.250000 1.000000 8.125000 +v 1.250000 1.000000 8.125000 +v -1.375000 1.000000 8.125000 +v -1.375000 2.500000 8.125000 +v -1.250000 2.625000 8.125000 +v 1.250000 2.625000 8.125000 +v 1.375000 1.000000 8.125000 +v 1.375000 2.500000 8.125000 +v -0.750000 2.500000 7.500000 +v 0.750000 2.500000 7.500000 +v -0.750000 2.500000 4.500000 +v 0.750000 2.500000 4.500000 +v -0.750000 3.000000 4.500000 +v -0.750000 3.000000 7.500000 +v 0.750000 3.000000 7.500000 +v 0.750000 3.000000 4.500000 +v 1.250000 2.125000 6.750000 +v 1.250000 1.375000 6.750000 +v 1.250000 2.125000 5.250000 +v 1.250000 1.375000 5.250000 +v 1.375000 2.125000 5.250000 +v 1.375000 2.125000 6.750000 +v 1.375000 1.375000 6.750000 +v 1.375000 1.375000 5.250000 +v -1.375000 2.125000 6.750000 +v -1.375000 1.375000 6.750000 +v -1.375000 2.125000 5.250000 +v -1.375000 1.375000 5.250000 +v -1.250000 2.125000 5.250000 +v -1.250000 2.125000 6.750000 +v -1.250000 1.375000 6.750000 +v -1.250000 1.375000 5.250000 +v -1.000000 7.500000 1.000000 +v 1.000000 7.500000 1.000000 +v -1.000000 7.500000 -1.000000 +v 1.000000 7.500000 -1.000000 +v -1.000000 7.750000 -1.000000 +v -1.000000 7.750000 1.000000 +v 1.000000 7.750000 1.000000 +v 1.000000 7.750000 -1.000000 +v -0.500000 7.750000 0.625000 +v 0.500000 7.750000 0.625000 +v -0.500000 7.750000 0.375000 +v 0.500000 7.750000 0.375000 +v -0.500000 8.000000 0.375000 +v -0.500000 8.000000 0.625000 +v 0.500000 8.000000 0.625000 +v 0.500000 8.000000 0.375000 +v 0.500000 8.000000 2.000000 +v -0.500000 8.250000 0.625000 +v 0.500000 8.250000 0.625000 +v -0.500000 8.000000 2.000000 +v -0.500000 8.250000 2.000000 +v 0.500000 8.250000 2.000000 +v -0.500000 6.500000 3.750000 +v 0.500000 6.500000 3.750000 +v -0.500000 6.500000 3.500000 +v 0.500000 6.500000 3.500000 +v -0.500000 3.500000 3.750000 +v 0.500000 3.500000 3.750000 +v -0.500000 3.500000 3.500000 +v 0.500000 3.500000 3.500000 +v -0.500000 3.250000 4.000000 +v 0.500000 3.250000 4.000000 +v -0.500000 3.000000 4.000000 +v 0.500000 3.000000 4.000000 +v -0.500000 3.250000 7.000000 +v 0.500000 3.250000 7.000000 +v -0.500000 3.000000 7.250000 +v 0.500000 3.000000 7.250000 +v -0.500000 7.750000 0.000000 +v 0.500000 7.750000 0.000000 +v -0.500000 7.750000 -0.750000 +v 0.500000 7.750000 -0.750000 +v -0.500000 8.250000 -0.750000 +v -0.500000 8.250000 0.000000 +v 0.500000 8.250000 0.000000 +v 0.500000 8.250000 -0.750000 +v 0.500000 8.125000 -0.062500 +v 0.500000 7.875000 -0.062500 +v 0.500000 8.125000 -0.312500 +v 0.500000 7.875000 -0.312500 +v 1.125000 8.125000 -0.312500 +v 1.125000 8.125000 -0.062500 +v 1.125000 7.875000 -0.062500 +v 1.125000 7.875000 -0.312500 +v 0.500000 7.875000 -0.437500 +v 0.500000 8.125000 -0.437500 +v 1.375000 7.875000 -0.062500 +v 1.375000 7.875000 -0.312500 +v 1.125000 7.500000 -0.062500 +v 1.125000 7.500000 -0.312500 +v 1.375000 7.500000 -0.062500 +v 1.375000 7.500000 -0.312500 +v 0.500000 8.125000 -0.687500 +v 0.500000 7.875000 -0.687500 +v 0.750000 8.250000 -0.687500 +v 0.750000 8.250000 -0.437500 +v 0.750000 8.000000 -0.437500 +v 0.750000 8.000000 -0.687500 +v 1.750000 8.250000 -0.687500 +v 1.750000 8.250000 -0.437500 +v 1.750000 8.000000 -0.437500 +v 1.750000 8.000000 -0.687500 +v 2.000000 8.250000 -0.437500 +v 2.000000 8.000000 -0.437500 +v 1.750000 8.250000 1.312500 +v 1.750000 8.000000 1.312500 +v 2.000000 8.250000 1.312500 +v 2.000000 8.000000 1.312500 +v 1.750000 8.000000 1.562500 +v 2.000000 8.000000 1.562500 +v 1.750000 2.875000 1.312500 +v 2.000000 2.875000 1.312500 +v 1.750000 2.875000 1.562500 +v 2.000000 2.875000 1.562500 +v 1.750000 2.625000 1.562500 +v 2.000000 2.625000 1.562500 +v 0.750000 2.875000 3.562500 +v 1.000000 2.875000 3.562500 +v 0.750000 2.625000 3.562500 +v 1.000000 2.625000 3.562500 +v 0.750000 2.875000 6.812500 +v 1.000000 2.875000 6.562500 +v 0.750000 2.625000 6.812500 +v 1.000000 2.625000 6.562500 +v 1.750000 2.875000 2.062500 +v 2.000000 2.875000 2.062500 +v 1.750000 2.625000 2.062500 +v 2.000000 2.625000 2.062500 +v 0.437500 7.875000 -0.750000 +v 0.187500 7.875000 -0.750000 +v 0.187500 8.125000 -0.750000 +v 0.437500 8.125000 -0.750000 +v 0.187500 7.875000 -1.250000 +v 0.437500 7.875000 -1.250000 +v 0.187500 8.125000 -1.250000 +v 0.437500 8.125000 -1.250000 +v 0.187500 7.875000 -1.500000 +v 0.437500 7.875000 -1.500000 +v 0.187500 7.500000 -1.250000 +v 0.437500 7.500000 -1.250000 +v 0.187500 7.500000 -1.500000 +v 0.437500 7.500000 -1.500000 +v -2.078729 1.500000 -0.861038 +v -2.078729 2.000000 -0.861038 +v -1.590990 2.000000 1.590990 +v -1.590990 1.500000 1.590990 +v 0.000000 2.000000 2.250000 +v 0.000000 1.500000 2.250000 +v 2.078729 1.500000 -0.861038 +v 2.078729 2.000000 -0.861038 +v 0.861037 1.500000 -2.078729 +v 0.861037 2.000000 -2.078729 +v -0.861038 2.000000 -2.078729 +v -0.861038 1.500000 -2.078729 +v 2.250000 2.000000 -0.000000 +v 2.250000 1.500000 -0.000000 +v 2.078729 1.500000 0.861038 +v 2.078729 2.000000 0.861038 +v -0.861038 2.000000 2.078729 +v -0.861038 1.500000 2.078729 +v -2.250000 2.000000 0.000000 +v -2.250000 1.500000 0.000000 +v 1.590990 2.000000 -1.590991 +v 1.590990 1.500000 -1.590991 +v -2.078729 2.000000 0.861038 +v -2.078729 1.500000 0.861038 +v 0.861037 1.500000 2.078729 +v 0.861037 2.000000 2.078729 +v 1.590990 2.000000 1.590991 +v 1.590990 1.500000 1.590991 +v 0.000000 2.000000 -2.250000 +v 0.000000 1.500000 -2.250000 +v -1.590990 1.500000 -1.590990 +v -1.590990 2.000000 -1.590990 +v -1.250000 1.000000 7.875000 +v 1.250000 1.000000 7.875000 +v -1.250000 2.500000 7.875000 +v 1.250000 2.500000 7.875000 +v -1.375000 1.000000 7.875000 +v -1.375000 2.500000 7.875000 +v -1.250000 2.625000 7.875000 +v 1.250000 2.625000 7.875000 +v 1.375000 1.000000 7.875000 +v 1.375000 2.500000 7.875000 +v -1.250000 2.500000 7.625000 +v 1.250000 2.500000 7.625000 +v -1.250000 1.000000 7.625000 +v 1.250000 1.000000 7.625000 +v -1.375000 1.000000 7.625000 +v -1.375000 2.500000 7.625000 +v -1.250000 2.625000 7.625000 +v 1.250000 2.625000 7.625000 +v 1.375000 1.000000 7.625000 +v 1.375000 2.500000 7.625000 +v -1.250000 1.000000 7.375000 +v 1.250000 1.000000 7.375000 +v -1.250000 2.500000 7.375000 +v 1.250000 2.500000 7.375000 +v -1.375000 1.000000 7.375000 +v -1.375000 2.500000 7.375000 +v -1.250000 2.625000 7.375000 +v 1.250000 2.625000 7.375000 +v 1.375000 1.000000 7.375000 +v 1.375000 2.500000 7.375000 +v -1.250000 2.500000 7.125000 +v 1.250000 2.500000 7.125000 +v -1.250000 1.000000 7.125000 +v 1.250000 1.000000 7.125000 +v -1.375000 1.000000 7.125000 +v -1.375000 2.500000 7.125000 +v -1.250000 2.625000 7.125000 +v 1.250000 2.625000 7.125000 +v 1.375000 1.000000 7.125000 +v 1.375000 2.500000 7.125000 +v -1.250000 1.000000 4.875000 +v 1.250000 1.000000 4.875000 +v -1.250000 2.500000 4.875000 +v 1.250000 2.500000 4.875000 +v -1.375000 1.000000 4.875000 +v -1.375000 2.500000 4.875000 +v -1.250000 2.625000 4.875000 +v 1.250000 2.625000 4.875000 +v 1.375000 1.000000 4.875000 +v 1.375000 2.500000 4.875000 +v -1.250000 2.500000 4.625000 +v 1.250000 2.500000 4.625000 +v -1.250000 1.000000 4.625000 +v 1.250000 1.000000 4.625000 +v -1.375000 1.000000 4.625000 +v -1.375000 2.500000 4.625000 +v -1.250000 2.625000 4.625000 +v 1.250000 2.625000 4.625000 +v 1.375000 1.000000 4.625000 +v 1.375000 2.500000 4.625000 +v -1.250000 1.000000 4.375000 +v 1.250000 1.000000 4.375000 +v -1.250000 2.500000 4.375000 +v 1.250000 2.500000 4.375000 +v -1.375000 1.000000 4.375000 +v -1.375000 2.500000 4.375000 +v -1.250000 2.625000 4.375000 +v 1.250000 2.625000 4.375000 +v 1.375000 1.000000 4.375000 +v 1.375000 2.500000 4.375000 +v -1.250000 2.500000 4.125000 +v 1.250000 2.500000 4.125000 +v -1.250000 1.000000 4.125000 +v 1.250000 1.000000 4.125000 +v -1.375000 1.000000 4.125000 +v -1.375000 2.500000 4.125000 +v -1.250000 2.625000 4.125000 +v 1.250000 2.625000 4.125000 +v 1.375000 1.000000 4.125000 +v 1.375000 2.500000 4.125000 +v -1.250000 1.000000 3.875000 +v 1.250000 1.000000 3.875000 +v -1.250000 2.500000 3.875000 +v 1.250000 2.500000 3.875000 +v -1.375000 1.000000 3.875000 +v -1.375000 2.500000 3.875000 +v -1.250000 2.625000 3.875000 +v 1.250000 2.625000 3.875000 +v 1.375000 1.000000 3.875000 +v 1.375000 2.500000 3.875000 +v -1.250000 2.500000 3.625000 +v 1.250000 2.500000 3.625000 +v -1.250000 1.000000 3.625000 +v 1.250000 1.000000 3.625000 +v -1.375000 1.000000 3.625000 +v -1.375000 2.500000 3.625000 +v -1.250000 2.625000 3.625000 +v 1.250000 2.625000 3.625000 +v 1.375000 1.000000 3.625000 +v 1.375000 2.500000 3.625000 +v -1.500000 5.500000 -3.500000 +v -1.500000 6.000000 -3.500000 +v -1.500000 5.500000 -3.000000 +v -1.500000 6.000000 -3.000000 +v 1.500000 5.500000 -3.500000 +v 1.500000 6.000000 -3.500000 +v 1.500000 5.500000 -3.000000 +v 1.500000 6.000000 -3.000000 +v -2.500000 1.000000 -3.000000 +v -2.000000 1.000000 -3.000000 +v -2.500000 1.000000 -3.500000 +v -2.000000 1.000000 -3.500000 +v -2.000000 5.000000 -3.500000 +v -2.500000 5.000000 -3.500000 +v -2.000000 5.000000 -3.000000 +v -2.500000 5.000000 -3.000000 +v 2.000000 5.000000 -3.000000 +v 2.500000 5.000000 -3.000000 +v 2.000000 5.000000 -3.500000 +v 2.500000 5.000000 -3.500000 +v 2.500000 1.000000 -3.500000 +v 2.000000 1.000000 -3.500000 +v 2.500000 1.000000 -3.000000 +v 2.000000 1.000000 -3.000000 +v -1.000000 6.000000 -3.000000 +v 1.000000 6.000000 -3.000000 +v -1.000000 6.000000 -3.500000 +v 1.000000 6.000000 -3.500000 +v 1.000000 7.250000 -1.875000 +v -1.000000 7.250000 -1.875000 +v 1.000000 6.750000 -1.875000 +v -1.000000 6.750000 -1.875000 +v -1.000000 6.750000 -2.750000 +v 0.999999 6.750000 -2.750000 +v -1.000000 7.250000 -2.750000 +v 0.999999 7.250000 -2.750000 +v 1.000000 6.500000 -3.500000 +v -1.000000 6.500000 -3.500000 +v 1.000000 6.500000 -3.000000 +v -1.000000 6.500000 -3.000000 +v 3.500000 5.500000 -1.500000 +v 3.500000 6.000000 -1.500000 +v 3.000000 5.500000 -1.500000 +v 3.000000 6.000000 -1.500000 +v 3.500000 5.500000 1.500000 +v 3.500000 6.000000 1.500000 +v 3.000000 5.500000 1.500000 +v 3.000000 6.000000 1.500000 +v 3.000000 1.000000 -2.500000 +v 3.000000 1.000000 -2.000000 +v 3.500000 1.000000 -2.500000 +v 3.500000 1.000000 -2.000000 +v 3.500000 5.000000 -2.000000 +v 3.500000 5.000000 -2.500000 +v 3.000000 5.000000 -2.000000 +v 3.000000 5.000000 -2.500000 +v 3.000000 5.000000 2.000000 +v 3.000000 5.000000 2.500000 +v 3.500000 5.000000 2.000000 +v 3.500000 5.000000 2.500000 +v 3.500000 1.000000 2.500000 +v 3.500000 1.000000 2.000000 +v 3.000000 1.000000 2.500000 +v 3.000000 1.000000 2.000000 +v 3.000000 6.000000 -1.000000 +v 3.000000 6.000000 1.000000 +v 3.500000 6.000000 -1.000000 +v 3.500000 6.000000 1.000000 +v 1.875000 7.250000 1.000000 +v 1.875000 7.250000 -1.000000 +v 1.875000 6.750000 1.000000 +v 1.875000 6.750000 -1.000000 +v 2.750000 6.750000 -1.000000 +v 2.750000 6.750000 0.999999 +v 2.750000 7.250000 -1.000000 +v 2.750000 7.250000 0.999999 +v 3.500000 6.500000 1.000000 +v 3.500000 6.500000 -1.000000 +v 3.000000 6.500000 1.000000 +v 3.000000 6.500000 -1.000000 +v -3.500000 5.500000 1.500000 +v -3.500000 6.000000 1.500000 +v -3.000000 5.500000 1.500000 +v -3.000000 6.000000 1.500000 +v -3.500000 5.500000 -1.500000 +v -3.500000 6.000000 -1.500000 +v -3.000000 5.500000 -1.500000 +v -3.000000 6.000000 -1.500000 +v -3.000000 1.000000 2.500000 +v -3.000000 1.000000 2.000000 +v -3.500000 1.000000 2.500000 +v -3.500000 1.000000 2.000000 +v -3.500000 5.000000 2.000000 +v -3.500000 5.000000 2.500000 +v -3.000000 5.000000 2.000000 +v -3.000000 5.000000 2.500000 +v -3.000000 5.000000 -2.000000 +v -3.000000 5.000000 -2.500000 +v -3.500000 5.000000 -1.999999 +v -3.500000 5.000000 -2.500000 +v -3.500000 1.000000 -2.500000 +v -3.500000 1.000000 -1.999999 +v -3.000000 1.000000 -2.500000 +v -3.000000 1.000000 -2.000000 +v -3.000000 6.000000 1.000000 +v -3.000000 6.000000 -1.000000 +v -3.500000 6.000000 1.000000 +v -3.500000 6.000000 -1.000000 +v -1.875000 7.250000 -1.000000 +v -1.875000 7.250000 1.000000 +v -1.875000 6.750000 -1.000000 +v -1.875000 6.750000 1.000000 +v -2.750000 6.750000 1.000000 +v -2.750000 6.750000 -0.999999 +v -2.750000 7.250000 1.000000 +v -2.750000 7.250000 -0.999999 +v -3.500000 6.500000 -1.000000 +v -3.500000 6.500000 1.000000 +v -3.000000 6.500000 -1.000000 +v -3.000000 6.500000 1.000000 +v -0.500000 7.875000 -0.437500 +v -0.500000 8.125000 -0.437500 +v -0.500000 8.125000 -0.687500 +v -0.500000 7.875000 -0.687500 +v -0.750000 8.250000 -0.687500 +v -0.750000 8.250000 -0.437500 +v -0.750000 8.000000 -0.437500 +v -0.750000 8.000000 -0.687500 +v -1.750000 8.250000 -0.687500 +v -1.750000 8.250000 -0.437500 +v -1.750000 8.000000 -0.437500 +v -1.750000 8.000000 -0.687500 +v -2.000000 8.250000 -0.437500 +v -2.000000 8.000000 -0.437500 +v -1.750000 8.250000 1.312500 +v -1.750000 8.000000 1.312500 +v -2.000000 8.250000 1.312500 +v -2.000000 8.000000 1.312500 +v -1.750000 8.000000 1.562500 +v -2.000000 8.000000 1.562500 +v -1.750000 2.875000 1.312500 +v -2.000000 2.875000 1.312500 +v -1.750000 2.875000 1.562500 +v -2.000000 2.875000 1.562500 +v -1.750000 2.625000 1.562500 +v -2.000000 2.625000 1.562500 +v -0.750000 2.875000 3.562500 +v -1.000000 2.875000 3.562500 +v -0.750000 2.625000 3.562500 +v -1.000000 2.625000 3.562500 +v -0.750000 2.875000 6.812500 +v -1.000000 2.875000 6.562500 +v -0.750000 2.625000 6.812500 +v -1.000000 2.625000 6.562500 +v -1.750000 2.875000 2.062500 +v -2.000000 2.875000 2.062500 +v -1.750000 2.625000 2.062500 +v -2.000000 2.625000 2.062500 +vt 0.185185 0.634615 +vt 0.000000 0.711538 +vt 0.000000 0.634615 +vt 0.185185 0.634615 +vt 0.000000 0.711538 +vt 0.000000 0.634615 +vt 0.240741 0.634615 +vt 0.185185 0.711538 +vt 0.240741 0.634615 +vt 0.185185 0.711538 +vt 0.185185 0.634615 +vt 0.000000 0.711538 +vt 0.000000 0.634615 +vt 0.185185 0.634615 +vt 0.000000 0.711538 +vt 0.000000 0.634615 +vt 0.240741 0.711538 +vt 0.240741 0.634615 +vt 0.240741 0.711538 +vt 0.240741 0.634615 +vt 0.009259 0.750000 +vt 0.175926 0.596154 +vt 0.009259 0.750000 +vt 0.175926 0.596154 +vt 0.185185 0.711538 +vt 0.009259 0.750000 +vt 0.175926 0.596154 +vt 0.185185 0.711538 +vt 0.009259 0.750000 +vt 0.175926 0.596154 +vt 0.194444 0.750000 +vt 0.194444 0.596154 +vt 0.231481 0.750000 +vt 0.240741 0.711538 +vt 0.231481 0.596154 +vt 0.194444 0.596154 +vt 0.194444 0.750000 +vt 0.231481 0.750000 +vt 0.240741 0.711538 +vt 0.231481 0.596154 +vt 0.009259 0.826923 +vt 0.175926 0.750000 +vt 0.175926 0.826923 +vt 0.231481 0.750000 +vt 0.194444 0.826923 +vt 0.009259 0.826923 +vt 0.175926 0.750000 +vt 0.175926 0.826923 +vt 0.231481 0.826923 +vt 0.194444 0.750000 +vt 0.009259 0.826923 +vt 0.175926 0.750000 +vt 0.175926 0.826923 +vt 0.231481 0.826923 +vt 0.194444 0.826923 +vt 0.009259 0.826923 +vt 0.175926 0.750000 +vt 0.175926 0.826923 +vt 0.231481 0.826923 +vt 0.194444 0.750000 +vt 0.021710 0.262602 +vt 0.021710 0.045090 +vt 0.126438 0.045090 +vt 0.340278 0.538462 +vt 0.312500 0.557692 +vt 0.312500 0.538462 +vt 0.344907 0.538462 +vt 0.370370 0.557692 +vt 0.344907 0.557692 +vt 0.377315 0.538462 +vt 0.402778 0.557692 +vt 0.377315 0.557692 +vt 0.437500 0.538462 +vt 0.409722 0.557692 +vt 0.409722 0.538462 +vt 0.469907 0.538462 +vt 0.442130 0.557692 +vt 0.442130 0.538462 +vt 0.502315 0.538462 +vt 0.474537 0.557692 +vt 0.474537 0.538462 +vt 0.534722 0.538462 +vt 0.506944 0.557692 +vt 0.506944 0.538462 +vt 0.539352 0.538462 +vt 0.564815 0.557692 +vt 0.539352 0.557692 +vt 0.571759 0.538462 +vt 0.597222 0.557692 +vt 0.571759 0.557692 +vt 0.604167 0.538462 +vt 0.629630 0.557692 +vt 0.604167 0.557692 +vt 0.636574 0.538462 +vt 0.662037 0.557692 +vt 0.636574 0.557692 +vt 0.178241 0.538462 +vt 0.150463 0.557692 +vt 0.150463 0.538462 +vt 0.210648 0.538462 +vt 0.182870 0.557692 +vt 0.182870 0.538462 +vt 0.243056 0.538462 +vt 0.215278 0.557692 +vt 0.215278 0.538462 +vt 0.275463 0.538462 +vt 0.247685 0.557692 +vt 0.247685 0.538462 +vt 0.307870 0.538462 +vt 0.280093 0.557692 +vt 0.280093 0.538462 +vt 0.000002 0.442307 +vt 0.064815 0.307697 +vt 0.129627 0.442308 +vt 0.555556 0.730769 +vt 0.597222 0.701923 +vt 0.611111 0.730769 +vt 0.555556 0.769231 +vt 0.611111 0.769231 +vt 0.569444 0.798077 +vt 0.597222 0.798077 +vt 0.569444 0.701923 +vt 0.597222 0.663462 +vt 0.444444 0.730769 +vt 0.444444 0.769231 +vt 0.444444 0.653846 +vt 0.555556 0.692308 +vt 0.444444 0.692308 +vt 0.555556 0.807692 +vt 0.444444 0.807692 +vt 0.402778 0.701923 +vt 0.388889 0.730769 +vt 0.388889 0.769231 +vt 0.430556 0.798077 +vt 0.402778 0.798077 +vt 0.402778 0.663462 +vt 0.430556 0.701923 +vt 0.611111 0.807692 +vt 0.759259 0.769231 +vt 0.759259 0.807692 +vt 0.759259 0.692308 +vt 0.759259 0.730769 +vt 0.611111 0.692308 +vt 0.759259 0.653846 +vt 0.240741 0.769231 +vt 0.240741 0.730769 +vt 0.388889 0.653846 +vt 0.240741 0.692308 +vt 0.240741 0.653846 +vt 0.388889 0.692308 +vt 0.240741 0.807692 +vt 0.194444 0.865385 +vt 0.268519 0.826923 +vt 0.268519 0.865385 +vt 0.041667 0.865385 +vt 0.060185 0.826923 +vt 0.060185 0.865385 +vt 0.134259 0.865385 +vt 0.152778 0.826923 +vt 0.152778 0.865385 +vt 0.134259 0.826923 +vt 0.268519 0.884615 +vt 0.194444 0.951923 +vt 0.194444 0.884615 +vt 0.134259 0.990385 +vt 0.060185 0.923077 +vt 0.134259 0.923077 +vt 0.194444 0.884615 +vt 0.162037 0.923077 +vt 0.162037 0.884615 +vt -0.000000 0.923077 +vt 0.032407 0.884615 +vt 0.032407 0.923077 +vt 0.944444 -0.000000 +vt 0.759259 0.230769 +vt 0.759259 -0.000000 +vt 0.944444 0.307692 +vt 0.759259 0.326923 +vt 0.759259 0.307692 +vt 0.759259 0.769231 +vt 0.944444 0.750000 +vt 0.944444 0.769231 +vt 0.759259 0.750000 +vt 0.944444 0.634615 +vt 0.944444 0.230769 +vt 0.759259 0.846154 +vt 0.944444 0.846154 +vt 0.759259 0.634615 +vt 0.944444 0.442308 +vt 1.000000 0.634615 +vt 1.000000 0.442308 +vt 0.703704 0.442308 +vt 0.703704 0.634615 +vt 0.944444 0.326923 +vt 0.759259 0.442308 +vt 0.703704 0.653846 +vt 0.666667 0.653846 +vt 0.296296 0.605769 +vt 0.240741 0.596154 +vt 0.296296 0.596154 +vt 0.393519 0.605769 +vt 0.300926 0.596154 +vt 0.393519 0.596154 +vt 0.453704 0.596154 +vt 0.398148 0.605769 +vt 0.398148 0.596154 +vt 0.393519 0.596154 +vt 0.300926 0.596154 +vt 0.240741 0.634615 +vt 0.296296 0.625000 +vt 0.296296 0.634615 +vt 0.300926 0.634615 +vt 0.393519 0.625000 +vt 0.393519 0.634615 +vt 0.398148 0.625000 +vt 0.453704 0.634615 +vt 0.398148 0.634615 +vt 0.393519 0.634615 +vt 0.300926 0.634615 +vt 0.453704 0.625000 +vt 0.453704 0.605769 +vt 0.300926 0.625000 +vt 0.300926 0.605769 +vt 0.240741 0.625000 +vt 0.240741 0.605769 +vt 0.611111 0.192308 +vt 0.722222 0.307692 +vt 0.611111 0.307692 +vt 0.740741 0.307692 +vt 0.722222 0.192308 +vt 0.740741 0.192308 +vt 0.592593 0.192308 +vt 0.592593 0.307692 +vt 0.722222 0.153846 +vt 0.611111 0.153846 +vt 0.611111 0.346154 +vt 0.722222 0.346154 +vt 0.671296 0.009615 +vt 0.726852 0.000000 +vt 0.726852 0.009615 +vt 0.671296 0.009615 +vt 0.726852 0.067308 +vt 0.671296 0.067308 +vt 0.726852 0.000000 +vt 0.671296 0.000000 +vt 0.671296 0.076923 +vt 0.726852 0.076923 +vt 0.731481 0.067308 +vt 0.726852 0.009615 +vt 0.731481 0.009615 +vt 0.666667 0.009615 +vt 0.666667 0.067308 +vt 0.726852 0.067308 +vt 0.671296 0.076923 +vt 0.671296 0.067308 +vt 0.666667 0.009615 +vt 0.731481 0.067308 +vt 0.277778 0.826923 +vt 0.351852 0.980769 +vt 0.277778 0.980769 +vt 0.361111 0.980769 +vt 0.351852 0.826923 +vt 0.361111 0.826923 +vt 0.268519 0.826923 +vt 0.268519 0.980769 +vt 0.351852 0.807692 +vt 0.277778 0.807692 +vt 0.277778 1.000000 +vt 0.351852 1.000000 +vt 0.835648 0.846154 +vt 0.842593 0.865385 +vt 0.828704 0.865385 +vt 0.851852 0.865385 +vt 0.842593 0.846154 +vt 0.851852 0.846154 +vt 0.851852 0.923077 +vt 0.842593 0.903846 +vt 0.851852 0.903846 +vt 0.851852 0.923077 +vt 0.842593 0.846154 +vt 0.851852 0.846154 +vt 0.828704 0.923077 +vt 0.819444 0.846154 +vt 0.828704 0.846154 +vt 0.777778 0.865385 +vt 0.694444 0.846154 +vt 0.768519 0.846154 +vt 0.835648 0.923077 +vt 0.828704 0.903846 +vt 0.828704 0.923077 +vt 0.777778 0.846154 +vt 0.828704 0.846154 +vt 0.777778 0.846154 +vt 0.828704 0.846154 +vt 0.842593 0.923077 +vt 0.828704 0.923077 +vt 0.777778 0.903846 +vt 0.819444 0.923077 +vt 0.768519 0.846154 +vt 0.685185 0.923077 +vt 0.574074 0.903846 +vt 0.685185 0.903846 +vt 0.768519 0.923077 +vt 0.768519 0.923077 +vt 0.689815 0.846154 +vt 0.777778 0.923077 +vt 0.685185 0.846154 +vt 0.574074 0.865385 +vt 0.550926 0.846154 +vt 0.583333 0.846154 +vt 0.689815 0.923077 +vt 0.578704 0.846154 +vt 0.685185 0.865385 +vt 0.574074 0.846154 +vt 0.685185 0.846154 +vt 0.685185 0.923077 +vt 0.574074 0.846154 +vt 0.560185 0.923077 +vt 0.449074 0.846154 +vt 0.560185 0.846154 +vt 0.574074 0.923077 +vt 0.583333 0.923077 +vt 0.560185 0.903846 +vt 0.578704 0.923077 +vt 0.550926 0.846154 +vt 0.435185 0.846154 +vt 0.449074 0.923077 +vt 0.435185 0.923077 +vt 0.560185 0.923077 +vt 0.449074 0.903846 +vt 0.550926 0.923077 +vt 0.435185 0.846154 +vt 0.560185 0.846154 +vt 0.449074 0.865385 +vt 0.439815 0.846154 +vt 0.731481 0.125000 +vt 0.731481 0.105769 +vt 0.740741 0.105769 +vt 0.416667 0.846154 +vt 0.379630 0.903846 +vt 0.379630 0.846154 +vt 0.435185 0.903846 +vt 0.435185 0.846154 +vt 0.361111 0.846154 +vt 0.361111 0.903846 +vt 0.379630 0.942308 +vt 0.416667 0.903846 +vt 0.416667 0.942308 +vt 0.416667 0.807692 +vt 0.379630 0.807692 +vt 0.750000 0.173077 +vt 0.759259 0.125000 +vt 0.759259 0.173077 +vt 0.731481 0.173077 +vt 0.740741 0.125000 +vt 0.740741 0.173077 +vt 0.722222 0.173077 +vt 0.731481 0.125000 +vt 0.750000 0.125000 +vt 0.939815 0.961538 +vt 0.930556 0.942308 +vt 0.939815 0.942308 +vt 0.740741 0.076923 +vt 0.939815 0.980769 +vt 0.930556 1.000000 +vt 0.930556 0.980769 +vt 0.759259 0.105769 +vt 0.759259 0.125000 +vt 0.750000 0.105769 +vt 0.750000 0.076923 +vt 0.722222 0.105769 +vt 0.731481 0.076923 +vt 0.759259 0.076923 +vt 0.930556 0.923077 +vt 0.939815 0.923077 +vt 0.930556 0.961538 +vt 0.893519 0.942308 +vt 0.893519 0.980769 +vt 0.893519 0.923077 +vt 0.893519 0.961538 +vt 0.884259 1.000000 +vt 0.819444 0.980769 +vt 0.884259 0.980769 +vt 0.884259 0.923077 +vt 0.893519 0.923077 +vt 0.884259 0.942308 +vt 0.893519 0.980769 +vt 0.884259 0.961538 +vt 0.819444 0.923077 +vt 0.819444 0.961538 +vt 0.819444 0.942308 +vt 0.810185 0.942308 +vt 0.819444 0.942308 +vt 0.810185 0.961538 +vt 0.620370 0.942308 +vt 0.819444 1.000000 +vt 0.810185 1.000000 +vt 0.810185 0.980769 +vt 0.620370 0.961538 +vt 0.611111 0.961538 +vt 0.611111 0.942308 +vt 0.620370 0.961538 +vt 0.620370 0.980769 +vt 0.620370 0.923077 +vt 0.810185 0.923077 +vt 0.611111 0.980769 +vt 0.620370 0.980769 +vt 0.611111 1.000000 +vt 0.537037 0.961538 +vt 0.425926 0.942308 +vt 0.537037 0.942308 +vt 0.592593 0.923077 +vt 0.611111 0.923077 +vt 0.416667 0.961538 +vt 0.425926 0.961538 +vt 0.537037 0.980769 +vt 0.537037 1.000000 +vt 0.416667 0.980769 +vt 0.537037 0.923077 +vt 0.416667 0.923077 +vt 0.592593 0.980769 +vt 0.592593 0.961538 +vt 0.592593 0.942308 +vt 0.731481 0.163462 +vt 0.740741 0.125000 +vt 0.740741 0.163462 +vt 0.722222 0.163462 +vt 0.731481 0.125000 +vt 0.750000 0.125000 +vt 0.750000 0.163462 +vt 0.759259 0.125000 +vt 0.759259 0.163462 +vt 0.740741 0.105769 +vt 0.750000 0.076923 +vt 0.750000 0.105769 +vt 0.731481 0.125000 +vt 0.731481 0.105769 +vt 0.759259 0.105769 +vt 0.759259 0.125000 +vt 0.759259 0.076923 +vt 0.722222 0.105769 +vt 0.731481 0.076923 +vt 0.740741 0.076923 +vt 0.296296 0.605769 +vt 0.240741 0.596154 +vt 0.296296 0.596154 +vt 0.393519 0.605769 +vt 0.300926 0.596154 +vt 0.393519 0.596154 +vt 0.453704 0.596154 +vt 0.398148 0.605769 +vt 0.398148 0.596154 +vt 0.393519 0.596154 +vt 0.300926 0.596154 +vt 0.240741 0.634615 +vt 0.296296 0.625000 +vt 0.296296 0.634615 +vt 0.300926 0.634615 +vt 0.393519 0.625000 +vt 0.393519 0.634615 +vt 0.398148 0.625000 +vt 0.453704 0.634615 +vt 0.398148 0.634615 +vt 0.393519 0.634615 +vt 0.300926 0.634615 +vt 0.453704 0.625000 +vt 0.453704 0.605769 +vt 0.300926 0.625000 +vt 0.300926 0.605769 +vt 0.240741 0.625000 +vt 0.240741 0.605769 +vt 0.296296 0.605769 +vt 0.240741 0.596154 +vt 0.296296 0.596154 +vt 0.393519 0.605769 +vt 0.300926 0.596154 +vt 0.393519 0.596154 +vt 0.453704 0.596154 +vt 0.398148 0.605769 +vt 0.398148 0.596154 +vt 0.393519 0.596154 +vt 0.300926 0.596154 +vt 0.240741 0.634615 +vt 0.296296 0.625000 +vt 0.296296 0.634615 +vt 0.300926 0.634615 +vt 0.393519 0.625000 +vt 0.393519 0.634615 +vt 0.398148 0.625000 +vt 0.453704 0.634615 +vt 0.398148 0.634615 +vt 0.393519 0.634615 +vt 0.300926 0.634615 +vt 0.453704 0.625000 +vt 0.453704 0.605769 +vt 0.300926 0.625000 +vt 0.300926 0.605769 +vt 0.240741 0.625000 +vt 0.240741 0.605769 +vt 0.296296 0.605769 +vt 0.240741 0.596154 +vt 0.296296 0.596154 +vt 0.393519 0.605769 +vt 0.300926 0.596154 +vt 0.393519 0.596154 +vt 0.453704 0.596154 +vt 0.398148 0.605769 +vt 0.398148 0.596154 +vt 0.393519 0.596154 +vt 0.300926 0.596154 +vt 0.240741 0.634615 +vt 0.296296 0.625000 +vt 0.296296 0.634615 +vt 0.300926 0.634615 +vt 0.393519 0.625000 +vt 0.393519 0.634615 +vt 0.398148 0.625000 +vt 0.453704 0.634615 +vt 0.398148 0.634615 +vt 0.393519 0.634615 +vt 0.300926 0.634615 +vt 0.453704 0.625000 +vt 0.453704 0.605769 +vt 0.300926 0.625000 +vt 0.300926 0.605769 +vt 0.240741 0.625000 +vt 0.240741 0.605769 +vt 0.296296 0.605769 +vt 0.240741 0.596154 +vt 0.296296 0.596154 +vt 0.393519 0.605769 +vt 0.300926 0.596154 +vt 0.393519 0.596154 +vt 0.453704 0.596154 +vt 0.398148 0.605769 +vt 0.398148 0.596154 +vt 0.393519 0.596154 +vt 0.300926 0.596154 +vt 0.240741 0.634615 +vt 0.296296 0.625000 +vt 0.296296 0.634615 +vt 0.300926 0.634615 +vt 0.393519 0.625000 +vt 0.393519 0.634615 +vt 0.398148 0.625000 +vt 0.453704 0.634615 +vt 0.398148 0.634615 +vt 0.393519 0.634615 +vt 0.300926 0.634615 +vt 0.453704 0.625000 +vt 0.453704 0.605769 +vt 0.300926 0.625000 +vt 0.300926 0.605769 +vt 0.240741 0.625000 +vt 0.240741 0.605769 +vt 0.296296 0.605769 +vt 0.240741 0.596154 +vt 0.296296 0.596154 +vt 0.393519 0.605769 +vt 0.300926 0.596154 +vt 0.393519 0.596154 +vt 0.453704 0.596154 +vt 0.398148 0.605769 +vt 0.398148 0.596154 +vt 0.393519 0.596154 +vt 0.300926 0.596154 +vt 0.240741 0.634615 +vt 0.296296 0.625000 +vt 0.296296 0.634615 +vt 0.300926 0.634615 +vt 0.393519 0.625000 +vt 0.393519 0.634615 +vt 0.398148 0.625000 +vt 0.453704 0.634615 +vt 0.398148 0.634615 +vt 0.393519 0.634615 +vt 0.300926 0.634615 +vt 0.453704 0.625000 +vt 0.453704 0.605769 +vt 0.300926 0.625000 +vt 0.300926 0.605769 +vt 0.240741 0.625000 +vt 0.240741 0.605769 +vt 0.611111 0.730769 +vt 0.569444 0.701923 +vt 0.597222 0.701923 +vt 0.555556 0.769231 +vt 0.611111 0.769231 +vt 0.569444 0.798077 +vt 0.597222 0.798077 +vt 0.569444 0.663462 +vt 0.597222 0.663462 +vt 0.444444 0.730769 +vt 0.444444 0.769231 +vt 0.444444 0.692308 +vt 0.555556 0.653846 +vt 0.555556 0.692308 +vt 0.555556 0.807692 +vt 0.444444 0.807692 +vt 0.555556 0.730769 +vt 0.402778 0.701923 +vt 0.388889 0.730769 +vt 0.388889 0.769231 +vt 0.430556 0.798077 +vt 0.402778 0.798077 +vt 0.430556 0.663462 +vt 0.430556 0.701923 +vt 0.611111 0.807692 +vt 0.759259 0.769231 +vt 0.759259 0.807692 +vt 0.759259 0.692308 +vt 0.759259 0.730769 +vt 0.611111 0.692308 +vt 0.759259 0.653846 +vt 0.240741 0.769231 +vt 0.240741 0.730769 +vt 0.388889 0.653846 +vt 0.240741 0.692308 +vt 0.240741 0.653846 +vt 0.388889 0.692308 +vt 0.240741 0.807692 +vt 0.194444 0.865385 +vt 0.268519 0.826923 +vt 0.268519 0.865385 +vt 0.041667 0.865385 +vt 0.060185 0.826923 +vt 0.060185 0.865385 +vt 0.134259 0.865385 +vt 0.152778 0.826923 +vt 0.152778 0.865385 +vt 0.134259 0.826923 +vt 0.268519 0.884615 +vt 0.194444 0.951923 +vt 0.194444 0.884615 +vt 0.134259 0.990385 +vt 0.060185 0.923077 +vt 0.134259 0.923077 +vt 0.194444 0.884615 +vt 0.162037 0.923077 +vt 0.162037 0.884615 +vt -0.000000 0.923077 +vt 0.032407 0.884615 +vt 0.032407 0.923077 +vt 0.555556 0.730769 +vt 0.597222 0.701923 +vt 0.611111 0.730769 +vt 0.555556 0.769231 +vt 0.611111 0.769231 +vt 0.569444 0.798077 +vt 0.597222 0.798077 +vt 0.569444 0.701923 +vt 0.597222 0.663462 +vt 0.444444 0.730769 +vt 0.444444 0.769231 +vt 0.444444 0.653846 +vt 0.555556 0.692308 +vt 0.444444 0.692308 +vt 0.555556 0.807692 +vt 0.444444 0.807692 +vt 0.402778 0.701923 +vt 0.388889 0.730769 +vt 0.388889 0.769231 +vt 0.430556 0.798077 +vt 0.402778 0.798077 +vt 0.402778 0.663462 +vt 0.430556 0.701923 +vt 0.611111 0.807692 +vt 0.759259 0.769231 +vt 0.759259 0.807692 +vt 0.759259 0.692308 +vt 0.759259 0.730769 +vt 0.611111 0.692308 +vt 0.759259 0.653846 +vt 0.240741 0.769231 +vt 0.240741 0.730769 +vt 0.388889 0.653846 +vt 0.240741 0.692308 +vt 0.240741 0.653846 +vt 0.388889 0.692308 +vt 0.240741 0.807692 +vt 0.194444 0.865385 +vt 0.268519 0.826923 +vt 0.268519 0.865385 +vt 0.041667 0.865385 +vt 0.060185 0.826923 +vt 0.060185 0.865385 +vt 0.134259 0.865385 +vt 0.152778 0.826923 +vt 0.152778 0.865385 +vt 0.134259 0.826923 +vt 0.268519 0.884615 +vt 0.194444 0.951923 +vt 0.194444 0.884615 +vt 0.134259 0.990385 +vt 0.060185 0.923077 +vt 0.134259 0.923077 +vt 0.194444 0.884615 +vt 0.162037 0.923077 +vt 0.162037 0.884615 +vt -0.000000 0.923077 +vt 0.032407 0.884615 +vt 0.032407 0.923077 +vt 0.611111 0.730769 +vt 0.569444 0.701923 +vt 0.597222 0.701923 +vt 0.555556 0.769231 +vt 0.611111 0.769231 +vt 0.569444 0.798077 +vt 0.597222 0.798077 +vt 0.597222 0.663462 +vt 0.444444 0.730769 +vt 0.444444 0.769231 +vt 0.444444 0.653846 +vt 0.555556 0.692308 +vt 0.444444 0.692308 +vt 0.555556 0.807692 +vt 0.444444 0.807692 +vt 0.555556 0.730769 +vt 0.402778 0.701923 +vt 0.388889 0.730769 +vt 0.388889 0.769231 +vt 0.430556 0.798077 +vt 0.402778 0.798077 +vt 0.430556 0.663462 +vt 0.430556 0.701923 +vt 0.611111 0.807692 +vt 0.759259 0.769231 +vt 0.759259 0.807692 +vt 0.759259 0.692308 +vt 0.759259 0.730769 +vt 0.611111 0.692308 +vt 0.759259 0.653846 +vt 0.240741 0.769231 +vt 0.240741 0.730769 +vt 0.388889 0.653846 +vt 0.240741 0.692308 +vt 0.240741 0.653846 +vt 0.388889 0.692308 +vt 0.240741 0.807692 +vt 0.194444 0.865385 +vt 0.268519 0.826923 +vt 0.268519 0.865385 +vt 0.041667 0.865385 +vt 0.060185 0.826923 +vt 0.060185 0.865385 +vt 0.134259 0.865385 +vt 0.152778 0.826923 +vt 0.152778 0.865385 +vt 0.134259 0.826923 +vt 0.268519 0.884615 +vt 0.194444 0.951923 +vt 0.194444 0.884615 +vt 0.134259 0.990385 +vt 0.060185 0.923077 +vt 0.134259 0.923077 +vt 0.194444 0.884615 +vt 0.162037 0.923077 +vt 0.162037 0.884615 +vt -0.000000 0.923077 +vt 0.032407 0.884615 +vt 0.032407 0.923077 +vt 0.930556 0.942308 +vt 0.939815 0.961538 +vt 0.939815 0.942308 +vt 0.939815 0.980769 +vt 0.930556 1.000000 +vt 0.939815 1.000000 +vt 0.930556 0.923077 +vt 0.939815 0.923077 +vt 0.930556 0.961538 +vt 0.893519 0.942308 +vt 0.893519 0.980769 +vt 0.930556 0.980769 +vt 0.893519 0.923077 +vt 0.893519 0.961538 +vt 0.819444 0.980769 +vt 0.884259 1.000000 +vt 0.884259 0.980769 +vt 0.884259 0.923077 +vt 0.884259 0.942308 +vt 0.893519 0.923077 +vt 0.893519 0.980769 +vt 0.884259 0.961538 +vt 0.819444 0.923077 +vt 0.819444 0.961538 +vt 0.819444 0.942308 +vt 0.810185 0.942308 +vt 0.810185 0.961538 +vt 0.819444 0.942308 +vt 0.620370 0.942308 +vt 0.819444 1.000000 +vt 0.810185 0.980769 +vt 0.810185 1.000000 +vt 0.620370 0.961538 +vt 0.611111 0.942308 +vt 0.611111 0.961538 +vt 0.620370 0.961538 +vt 0.620370 0.980769 +vt 0.620370 0.923077 +vt 0.810185 0.923077 +vt 0.611111 0.980769 +vt 0.611111 1.000000 +vt 0.620370 0.980769 +vt 0.425926 0.942308 +vt 0.537037 0.961538 +vt 0.537037 0.942308 +vt 0.592593 0.923077 +vt 0.611111 0.923077 +vt 0.416667 0.961538 +vt 0.425926 0.961538 +vt 0.537037 0.980769 +vt 0.416667 0.980769 +vt 0.537037 1.000000 +vt 0.537037 0.923077 +vt 0.592593 0.980769 +vt 0.592593 0.961538 +vt 0.592593 0.942308 +vt 0.009259 0.596154 +vt 0.009259 0.596154 +vt 0.009259 0.596154 +vt 0.009259 0.596154 +vt 0.231481 0.596154 +vt 0.194444 0.596154 +vt 0.231481 0.596154 +vt 0.231481 0.750000 +vt 0.194444 0.596154 +vt 0.231481 0.826923 +vt 0.194444 0.826923 +vt 0.194444 0.826923 +vt 0.142491 0.094988 +vt 0.148128 0.153846 +vt 0.142491 0.212705 +vt 0.126438 0.262602 +vt 0.102413 0.295943 +vt 0.074074 0.307651 +vt 0.045735 0.295943 +vt 0.005657 0.212704 +vt 0.000020 0.153846 +vt 0.005657 0.094988 +vt 0.045735 0.011749 +vt 0.074074 0.000042 +vt 0.102413 0.011749 +vt 0.337963 0.557692 +vt 0.372685 0.538462 +vt 0.405093 0.538462 +vt 0.435185 0.557692 +vt 0.467593 0.557692 +vt 0.500000 0.557692 +vt 0.532407 0.557692 +vt 0.567130 0.538462 +vt 0.599537 0.538462 +vt 0.631944 0.538462 +vt 0.664352 0.538462 +vt 0.175926 0.557692 +vt 0.208333 0.557692 +vt 0.240741 0.557692 +vt 0.273148 0.557692 +vt 0.305556 0.557692 +vt 0.124694 0.493821 +vt 0.110644 0.537492 +vt 0.089617 0.566672 +vt 0.064815 0.576918 +vt 0.040012 0.566672 +vt 0.018985 0.537492 +vt 0.004936 0.493821 +vt 0.004936 0.390794 +vt 0.018985 0.347123 +vt 0.040012 0.317944 +vt 0.089618 0.317944 +vt 0.110644 0.347124 +vt 0.124694 0.390795 +vt 0.569444 0.663462 +vt 0.555556 0.653846 +vt 0.430556 0.663462 +vt 0.611111 0.653846 +vt 0.388889 0.807692 +vt 0.194444 0.826923 +vt 0.041667 0.826923 +vt 0.268519 0.951923 +vt 0.060185 0.990385 +vt 0.194444 0.923077 +vt -0.000000 0.884615 +vt 0.666667 0.423077 +vt 0.703704 0.423077 +vt 0.671296 0.000000 +vt 0.726852 0.076923 +vt 0.666667 0.067308 +vt 0.731481 0.009615 +vt 0.842593 0.923077 +vt 0.777778 0.923077 +vt 0.574074 0.923077 +vt 0.694444 0.923077 +vt 0.560185 0.865385 +vt 0.550926 0.923077 +vt 0.439815 0.923077 +vt 0.435185 0.923077 +vt 0.722222 0.125000 +vt 0.939815 1.000000 +vt 0.722222 0.076923 +vt 0.893519 1.000000 +vt 0.819444 1.000000 +vt 0.620370 1.000000 +vt 0.416667 0.942308 +vt 0.416667 1.000000 +vt 0.592593 1.000000 +vt 0.722222 0.125000 +vt 0.722222 0.076923 +vt 0.444444 0.653846 +vt 0.402778 0.663462 +vt 0.611111 0.653846 +vt 0.388889 0.807692 +vt 0.194444 0.826923 +vt 0.041667 0.826923 +vt 0.268519 0.951923 +vt 0.060185 0.990385 +vt 0.194444 0.923077 +vt -0.000000 0.884615 +vt 0.569444 0.663462 +vt 0.555556 0.653846 +vt 0.430556 0.663462 +vt 0.611111 0.653846 +vt 0.388889 0.807692 +vt 0.194444 0.826923 +vt 0.041667 0.826923 +vt 0.268519 0.951923 +vt 0.060185 0.990385 +vt 0.194444 0.923077 +vt -0.000000 0.884615 +vt 0.569444 0.663462 +vt 0.555556 0.653846 +vt 0.402778 0.663462 +vt 0.611111 0.653846 +vt 0.388889 0.807692 +vt 0.194444 0.826923 +vt 0.041667 0.826923 +vt 0.268519 0.951923 +vt 0.060185 0.990385 +vt 0.194444 0.923077 +vt -0.000000 0.884615 +vt 0.893519 1.000000 +vt 0.819444 1.000000 +vt 0.620370 1.000000 +vt 0.416667 0.942308 +vt 0.416667 1.000000 +vt 0.416667 0.923077 +vt 0.592593 1.000000 +vt 0.634259 0.076923 +vt 0.601852 0.115385 +vt 0.601852 0.076923 +vt 0.342593 0.115385 +vt 0.372685 0.153846 +vt 0.344907 0.153846 +vt 0.409722 0.153846 +vt 0.439815 0.115385 +vt 0.437500 0.153846 +vt 0.474537 0.153846 +vt 0.504630 0.115385 +vt 0.502315 0.153846 +vt 0.539352 0.153846 +vt 0.569444 0.115385 +vt 0.567130 0.153846 +vt 0.631944 0.153846 +vt 0.604167 0.153846 +vt 0.150463 0.153846 +vt 0.180556 0.115385 +vt 0.178241 0.153846 +vt 0.307870 0.153846 +vt 0.277778 0.115385 +vt 0.310185 0.115385 +vt 0.212963 0.115385 +vt 0.243056 0.153846 +vt 0.215278 0.153846 +vt 0.569444 0.076923 +vt 0.537037 0.115385 +vt 0.537037 0.076923 +vt 0.504630 0.076923 +vt 0.472222 0.076923 +vt 0.439815 0.076923 +vt 0.277778 0.076923 +vt 0.245370 0.115385 +vt 0.245370 0.076923 +vt 0.212963 0.076923 +vt 0.180556 0.076923 +vt 0.571759 0.153846 +vt 0.599537 0.153846 +vt 0.310185 0.076923 +vt 0.506944 0.153846 +vt 0.534722 0.153846 +vt 0.375000 0.076923 +vt 0.342593 0.076923 +vt 0.469907 0.153846 +vt 0.472222 0.115385 +vt 0.407407 0.115385 +vt 0.407407 0.076923 +vt 0.377315 0.153846 +vt 0.405093 0.153846 +vt 0.666667 0.076923 +vt 0.634259 0.115385 +vt 0.340278 0.153846 +vt 0.312500 0.153846 +vt 0.275463 0.153846 +vt 0.247685 0.153846 +vt 0.148148 0.115385 +vt 0.148148 0.076923 +vt 0.210648 0.153846 +vt 0.182870 0.153846 +vt 0.666667 0.115385 +vt 0.636574 0.153846 +vt 0.375000 0.115385 +vt 0.407407 0.500000 +vt 0.469907 0.000000 +vt 0.439815 0.038462 +vt 0.442130 0.000000 +vt 0.437500 -0.000000 +vt 0.407407 0.038462 +vt 0.409722 0.000000 +vt 0.405093 -0.000000 +vt 0.375000 0.038462 +vt 0.377315 -0.000000 +vt 0.372685 -0.000000 +vt 0.342593 0.038462 +vt 0.344907 -0.000000 +vt 0.340278 -0.000000 +vt 0.310185 0.038462 +vt 0.312500 0.000000 +vt 0.275463 -0.000000 +vt 0.245370 0.038462 +vt 0.247685 0.000000 +vt 0.307870 0.000000 +vt 0.277778 0.038462 +vt 0.280093 -0.000000 +vt 0.243056 0.000000 +vt 0.212963 0.038462 +vt 0.215278 0.000000 +vt 0.210648 0.000000 +vt 0.180556 0.038462 +vt 0.182870 -0.000000 +vt 0.178241 0.000000 +vt 0.148148 0.038462 +vt 0.150463 0.000000 +vt 0.664352 -0.000000 +vt 0.634259 0.038462 +vt 0.636574 -0.000000 +vt 0.631944 -0.000000 +vt 0.601852 0.038462 +vt 0.604167 0.000000 +vt 0.599537 0.000000 +vt 0.569444 0.038462 +vt 0.571759 -0.000000 +vt 0.539352 0.000000 +vt 0.537037 0.038462 +vt 0.534722 0.000000 +vt 0.504630 0.038462 +vt 0.506944 0.000000 +vt 0.474537 0.000000 +vt 0.472222 0.038462 +vt 0.180556 0.423077 +vt 0.148148 0.500000 +vt 0.148148 0.423077 +vt 0.601852 0.500000 +vt 0.634259 0.423077 +vt 0.601852 0.423077 +vt 0.245370 0.423077 +vt 0.212963 0.500000 +vt 0.212963 0.423077 +vt 0.666667 0.500000 +vt 0.634259 0.500000 +vt 0.245370 0.500000 +vt 0.472222 0.423077 +vt 0.439815 0.500000 +vt 0.439815 0.423077 +vt 0.180556 0.500000 +vt 0.569444 0.423077 +vt 0.537037 0.500000 +vt 0.537037 0.423077 +vt 0.666667 0.423077 +vt 0.472222 0.500000 +vt 0.569444 0.500000 +vt 0.504630 0.500000 +vt 0.342593 0.500000 +vt 0.277778 0.500000 +vt 0.310185 0.500000 +vt 0.504630 0.423077 +vt 0.277778 0.423077 +vt 0.310185 0.423077 +vt 0.375000 0.423077 +vt 0.342593 0.423077 +vt 0.407407 0.423077 +vt 0.375000 0.500000 +vt 0.469907 0.384615 +vt 0.442130 0.384615 +vt 0.437500 0.384615 +vt 0.409722 0.384615 +vt 0.405093 0.384615 +vt 0.377315 0.384615 +vt 0.372685 0.384615 +vt 0.344907 0.384615 +vt 0.340278 0.384615 +vt 0.312500 0.384615 +vt 0.275463 0.384615 +vt 0.247685 0.384615 +vt 0.307870 0.384615 +vt 0.280093 0.384615 +vt 0.243056 0.384615 +vt 0.215278 0.384615 +vt 0.210648 0.384615 +vt 0.182870 0.384615 +vt 0.178241 0.384615 +vt 0.150463 0.384615 +vt 0.664352 0.384615 +vt 0.636574 0.384615 +vt 0.631944 0.384615 +vt 0.604167 0.384615 +vt 0.599537 0.384615 +vt 0.571759 0.384615 +vt 0.567130 0.384615 +vt 0.539352 0.384615 +vt 0.534722 0.384615 +vt 0.506944 0.384615 +vt 0.474537 0.384615 +vt 0.377315 0.596154 +vt 0.150463 0.596154 +vt 0.409722 0.596154 +vt 0.182870 0.596154 +vt 0.442130 0.596154 +vt 0.215278 0.596154 +vt 0.474537 0.596154 +vt 0.247685 0.596154 +vt 0.539352 0.596154 +vt 0.506944 0.596154 +vt 0.280093 0.596154 +vt 0.571759 0.596154 +vt 0.312500 0.596154 +vt 0.604167 0.596154 +vt 0.344907 0.596154 +vt 0.636574 0.596154 +vt 0.342593 0.384615 +vt 0.314815 0.153846 +vt 0.342593 0.153846 +vt 0.314815 0.384615 +vt 0.287037 0.153846 +vt 0.287037 0.384615 +vt 0.259259 0.153846 +vt 0.259259 0.384615 +vt 0.231481 0.153846 +vt 0.231481 0.384615 +vt 0.203704 0.153846 +vt 0.203704 0.384615 +vt 0.175926 0.153846 +vt 0.175926 0.384615 +vt 0.148148 0.153846 +vt 0.592593 0.384615 +vt 0.564815 0.153846 +vt 0.592593 0.153846 +vt 0.564815 0.384615 +vt 0.537037 0.153846 +vt 0.537037 0.384615 +vt 0.509259 0.153846 +vt 0.509259 0.384615 +vt 0.481481 0.153846 +vt 0.481481 0.384615 +vt 0.453704 0.153846 +vt 0.453704 0.384615 +vt 0.425926 0.153846 +vt 0.425926 0.384615 +vt 0.398148 0.153846 +vt 0.398148 0.384615 +vt 0.370370 0.153846 +vt 0.370370 0.384615 +vt 0.375000 0.076923 +vt 0.310185 0.076923 +vt 0.148148 0.076923 +vt 0.666667 0.038462 +vt 0.634259 0.076923 +vt 0.472222 0.076923 +vt 0.407407 0.076923 +vt 0.342593 0.076923 +vt 0.277778 0.076923 +vt 0.180556 0.076923 +vt 0.212963 0.076923 +vt 0.245370 0.076923 +vt 0.439815 0.076923 +vt 0.504630 0.076923 +vt 0.537037 0.076923 +vt 0.569444 0.076923 +vt 0.601852 0.076923 +vt 0.280093 0.153846 +vt 0.442130 0.153846 +vt 0.664352 0.153846 +vt 0.567130 -0.000000 +vt 0.502315 0.000000 +vt 0.502315 0.384615 +vt 0.402778 0.596154 +vt 0.175926 0.596154 +vt 0.435185 0.596154 +vt 0.208333 0.596154 +vt 0.467593 0.596154 +vt 0.240741 0.596154 +vt 0.500000 0.596154 +vt 0.273148 0.596154 +vt 0.564815 0.596154 +vt 0.532407 0.596154 +vt 0.305556 0.596154 +vt 0.597222 0.596154 +vt 0.337963 0.596154 +vt 0.629630 0.596154 +vt 0.370370 0.596154 +vt 0.662037 0.596154 +vt 0.148148 0.384615 +vt 0.666667 0.076923 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.4472 -0.8944 0.0000 +vn -0.4472 0.8944 0.0000 +vn -0.8321 0.0000 -0.5547 +vn 0.8321 0.0000 0.5547 +vn 0.0000 -0.7071 0.7071 +vn -0.4472 -0.8944 0.0000 +vn 0.4472 0.8944 0.0000 +vn 0.8321 0.0000 -0.5547 +vn -0.8321 0.0000 0.5547 +vn -0.9239 0.0000 -0.3827 +vn 0.6325 0.4472 0.6325 +vn 0.8263 0.4472 0.3423 +vn 0.8944 0.4472 -0.0000 +vn 0.8263 0.4472 -0.3423 +vn 0.6325 0.4472 -0.6325 +vn 0.3423 0.4472 -0.8263 +vn -0.0000 0.4472 -0.8944 +vn -0.3423 0.4472 -0.8263 +vn -0.6325 0.4472 -0.6325 +vn -0.8263 0.4472 -0.3423 +vn -0.8944 0.4472 0.0000 +vn -0.8263 0.4472 0.3423 +vn 0.3423 0.4472 0.8263 +vn -0.0000 0.4472 0.8944 +vn -0.6325 0.4472 0.6325 +vn -0.3423 0.4472 0.8263 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 -0.9239 +vn 0.9239 0.0000 -0.3827 +vn -0.3827 0.0000 0.9239 +vn -0.9239 0.0000 0.3827 +vn 0.3827 0.0000 0.9239 +vn 0.9239 0.0000 0.3827 +vn 0.6325 -0.4472 -0.6325 +vn 0.8263 -0.4472 -0.3423 +vn 0.8944 -0.4472 -0.0000 +vn 0.8263 -0.4472 0.3423 +vn 0.6325 -0.4472 0.6325 +vn 0.3423 -0.4472 0.8263 +vn -0.0000 -0.4472 0.8944 +vn -0.3423 -0.4472 0.8263 +vn -0.6325 -0.4472 0.6325 +vn -0.8263 -0.4472 0.3423 +vn -0.8944 -0.4472 -0.0000 +vn -0.8263 -0.4472 -0.3423 +vn -0.6325 -0.4472 -0.6325 +vn -0.3423 -0.4472 -0.8263 +vn -0.0000 -0.4472 -0.8944 +vn 0.3423 -0.4472 -0.8263 +s off +f 34/41/17 41/42/17 33/43/17 +f 35/44/18 44/45/18 36/46/18 +f 40/47/19 43/48/19 35/44/19 +f 37/49/20 42/50/20 34/41/20 +f 39/51/21 48/52/21 40/53/21 +f 38/54/22 45/55/22 37/56/22 +f 44/57/23 38/54/23 36/58/23 +f 41/59/24 39/51/24 33/60/24 +f 42/50/25 51/61/25 41/42/25 +f 33/43/26 50/62/26 34/41/26 +f 43/48/25 56/63/25 44/45/25 +f 36/46/26 53/64/26 35/44/26 +f 46/65/25 59/66/25 45/55/25 +f 37/56/26 58/67/26 38/54/26 +f 47/68/25 64/69/25 48/52/25 +f 40/53/26 61/70/26 39/51/26 +f 41/59/25 63/71/25 47/68/25 +f 61/72/26 33/60/26 39/51/26 +f 64/73/25 43/48/25 48/74/25 +f 35/44/26 62/75/26 40/47/26 +f 58/76/26 36/58/26 38/54/26 +f 44/57/25 60/77/25 46/65/25 +f 59/78/25 42/50/25 45/79/25 +f 34/41/26 57/80/26 37/49/26 +f 49/81/18 52/82/18 50/83/18 +f 51/84/23 61/85/23 63/71/23 +f 62/86/22 63/87/22 61/88/22 +f 62/89/20 55/90/20 64/73/20 +f 54/91/17 55/92/17 53/93/17 +f 60/77/24 54/94/24 58/95/24 +f 57/96/21 60/97/21 58/98/21 +f 57/99/19 52/100/19 59/78/19 +f 75/101/26 71/102/26 67/103/26 +f 187/104/25 202/105/25 186/106/25 +f 187/107/25 204/108/25 203/109/25 +f 188/110/25 205/111/25 204/112/25 +f 190/113/25 205/114/25 189/115/25 +f 191/116/25 206/117/25 190/118/25 +f 192/119/25 207/120/25 191/121/25 +f 177/122/25 208/123/25 192/124/25 +f 177/125/25 194/126/25 193/127/25 +f 178/128/25 195/129/25 194/130/25 +f 179/131/25 196/132/25 195/133/25 +f 180/134/25 197/135/25 196/136/25 +f 182/137/25 197/138/25 181/139/25 +f 183/140/25 198/141/25 182/142/25 +f 184/143/25 199/144/25 183/145/25 +f 185/146/25 200/147/25 184/148/25 +f 186/149/25 201/150/25 185/151/25 +f 217/152/25 221/153/25 209/154/25 +f 226/155/17 237/156/17 238/157/17 +f 228/158/27 238/157/27 240/159/27 +f 227/160/18 240/159/18 239/161/18 +f 225/162/28 239/163/28 237/156/28 +f 230/164/25 228/158/25 232/165/25 +f 231/166/26 225/167/26 229/168/26 +f 232/165/18 227/169/18 231/170/18 +f 229/168/17 226/155/17 230/164/17 +f 243/171/17 230/164/17 244/172/17 +f 244/172/29 232/165/29 242/173/29 +f 242/173/18 231/174/18 241/175/18 +f 241/176/30 229/177/30 243/171/30 +f 239/178/18 233/179/18 234/180/18 +f 238/157/17 236/181/17 235/182/17 +f 240/159/22 235/182/22 233/179/22 +f 237/183/21 234/184/21 236/181/21 +f 244/172/21 247/185/21 245/186/21 +f 241/187/22 246/188/22 248/189/22 +f 243/190/17 245/186/17 246/188/17 +f 242/173/18 248/191/18 247/185/18 +f 264/192/18 250/193/18 263/194/18 +f 263/195/21 252/196/21 261/197/21 +f 262/198/22 249/199/22 264/200/22 +f 261/197/17 251/201/17 262/198/17 +f 258/202/26 256/203/26 257/204/26 +f 254/205/25 260/206/25 259/207/25 +f 256/208/22 259/209/22 257/210/22 +f 253/211/21 258/212/21 260/213/21 +f 258/202/31 264/192/31 263/194/31 +f 260/213/21 263/195/21 261/197/21 +f 257/210/22 262/198/22 264/200/22 +f 262/198/32 260/206/32 261/197/32 +f 267/214/26 266/215/26 265/216/26 +f 272/217/25 275/218/25 271/219/25 +f 270/220/25 273/221/25 269/222/25 +f 274/223/21 277/224/21 273/221/21 +f 268/225/22 271/219/22 266/215/22 +f 265/226/21 269/222/21 267/227/21 +f 278/228/25 280/229/25 277/224/25 +f 273/230/18 280/229/18 276/231/18 +f 275/232/17 278/228/17 274/233/17 +f 276/234/22 279/235/22 275/218/22 +f 274/233/17 270/236/17 265/237/17 +f 286/238/17 281/239/17 283/240/17 +f 288/241/17 283/242/17 284/243/17 +f 282/244/17 290/245/17 284/246/17 +f 284/246/17 290/245/17 288/247/17 +f 283/240/17 287/248/17 286/238/17 +f 293/249/18 296/250/18 291/251/18 +f 291/252/18 298/253/18 292/254/18 +f 300/255/18 294/256/18 292/257/18 +f 292/257/18 298/258/18 300/255/18 +f 291/251/18 296/250/18 297/259/18 +f 290/245/27 298/253/27 288/241/27 +f 299/260/22 290/245/22 289/261/22 +f 288/241/25 297/262/25 287/263/25 +f 287/263/29 296/250/29 286/238/29 +f 286/238/21 295/264/21 285/265/21 +f 307/266/25 305/267/25 306/268/25 +f 303/269/18 308/270/18 304/271/18 +f 302/272/17 306/268/17 301/273/17 +f 304/274/22 307/266/22 302/275/22 +f 301/276/21 305/267/21 303/277/21 +f 320/278/26 323/279/26 318/280/26 +f 315/281/22 313/282/22 314/283/22 +f 312/284/26 315/281/26 310/285/26 +f 309/286/25 313/282/25 311/287/25 +f 311/288/18 316/289/18 312/290/18 +f 310/291/17 314/283/17 309/292/17 +f 317/293/25 321/294/25 319/295/25 +f 319/295/18 324/296/18 320/278/18 +f 318/280/17 322/297/17 317/293/17 +f 320/278/21 317/293/21 319/295/21 +f 331/298/25 329/299/25 330/300/25 +f 327/301/18 332/302/18 328/303/18 +f 326/304/17 330/300/17 325/305/17 +f 328/306/22 331/298/22 326/307/22 +f 325/308/21 329/299/21 327/309/21 +f 339/310/22 340/311/22 343/312/22 +f 336/313/22 339/314/22 334/315/22 +f 333/316/21 337/317/21 335/318/21 +f 335/319/18 340/320/18 336/321/18 +f 334/322/17 338/323/17 333/324/17 +f 346/325/22 350/326/22 341/327/22 +f 337/317/21 338/328/21 342/329/21 +f 342/330/25 346/331/25 343/332/25 +f 343/312/22 341/333/22 339/334/22 +f 337/335/33 343/332/33 340/320/33 +f 338/336/21 345/337/21 342/329/21 +f 339/338/26 344/339/26 338/323/26 +f 349/340/21 351/341/21 347/342/21 +f 344/343/21 347/342/21 345/337/21 +f 341/344/31 349/345/31 344/339/31 +f 345/346/32 348/347/32 346/331/32 +f 352/348/22 358/349/22 354/350/22 +f 350/351/18 353/352/18 349/345/18 +f 348/353/22 354/354/22 350/355/22 +f 347/356/17 352/357/17 348/347/17 +f 355/358/25 360/359/25 356/360/25 +f 351/361/32 356/360/32 352/357/32 +f 353/362/21 355/363/21 351/341/21 +f 354/364/31 357/365/31 353/352/31 +f 362/366/32 359/367/32 361/368/32 +f 357/369/21 359/370/21 355/363/21 +f 358/371/26 361/372/26 357/365/26 +f 358/373/22 360/374/22 362/375/22 +f 376/376/17 377/377/17 381/378/17 +f 369/379/25 367/380/25 368/381/25 +f 366/382/22 369/379/22 364/383/22 +f 363/384/21 367/380/21 365/385/21 +f 365/386/18 370/387/18 366/388/18 +f 364/389/17 368/381/17 363/390/17 +f 373/391/18 378/392/18 374/393/18 +f 372/394/17 376/395/17 371/396/17 +f 374/397/26 377/398/26 372/394/26 +f 371/396/25 375/399/25 373/391/25 +f 387/400/18 392/401/18 388/402/18 +f 377/377/17 385/403/17 381/378/17 +f 380/404/17 391/405/17 390/406/17 +f 378/407/18 375/408/18 382/409/18 +f 376/395/27 382/409/27 375/399/27 +f 381/378/22 386/410/22 382/409/22 +f 378/411/21 383/412/21 377/377/21 +f 382/409/18 384/413/18 378/407/18 +f 388/402/34 391/414/34 379/415/34 +f 380/404/35 389/416/35 387/400/35 +f 389/416/18 396/417/18 392/401/18 +f 391/405/17 394/418/17 390/406/17 +f 392/401/26 395/419/26 391/414/26 +f 390/406/25 393/420/25 389/416/25 +f 395/421/21 399/422/21 394/423/21 +f 395/424/26 396/425/26 398/426/26 +f 393/427/25 394/423/25 397/428/25 +f 398/426/26 400/429/26 395/424/26 +f 394/423/25 401/430/25 397/428/25 +f 397/428/22 402/431/22 398/426/22 +f 393/420/23 398/426/23 396/417/23 +f 402/432/22 401/433/22 404/434/22 +f 404/434/22 406/435/22 402/432/22 +f 399/436/21 400/437/21 403/438/21 +f 406/439/22 408/440/22 410/441/22 +f 403/438/17 408/442/17 404/434/17 +f 400/437/21 407/443/21 403/438/21 +f 402/432/18 405/444/18 400/445/18 +f 399/422/32 404/434/32 401/430/32 +f 407/446/21 405/447/21 409/448/21 +f 412/449/22 418/450/22 414/451/22 +f 410/441/26 421/452/26 409/453/26 +f 415/454/20 418/450/20 416/455/20 +f 411/456/25 416/455/25 412/449/25 +f 413/457/21 415/458/21 411/456/21 +f 413/459/26 418/450/26 417/460/26 +f 406/435/31 409/453/31 405/444/31 +f 412/449/25 419/461/25 411/456/25 +f 419/461/36 413/457/36 411/456/36 +f 409/448/21 419/461/21 407/446/21 +f 407/446/25 420/462/25 408/440/25 +f 408/440/22 422/463/22 410/441/22 +f 422/463/37 412/449/37 414/451/37 +f 414/451/26 421/452/26 422/463/26 +f 423/464/22 430/465/22 426/466/22 +f 424/467/26 428/468/26 423/464/26 +f 426/466/25 429/469/25 425/470/25 +f 425/470/21 427/471/21 424/472/21 +f 432/473/18 435/474/18 431/475/18 +f 430/476/22 428/477/22 432/473/22 +f 427/478/21 429/479/21 431/475/21 +f 431/475/33 430/465/33 432/473/33 +f 431/475/21 433/480/21 427/478/21 +f 427/481/17 434/482/17 428/477/17 +f 428/477/22 436/483/22 432/473/22 +f 474/484/17 469/485/17 471/486/17 +f 476/487/17 471/488/17 472/489/17 +f 470/490/17 478/491/17 472/492/17 +f 472/492/17 478/491/17 476/493/17 +f 471/486/17 475/494/17 474/484/17 +f 481/495/18 484/496/18 479/497/18 +f 479/498/18 486/499/18 480/500/18 +f 488/501/18 482/502/18 480/503/18 +f 480/503/18 486/504/18 488/501/18 +f 479/497/18 484/496/18 485/505/18 +f 478/491/27 486/499/27 476/487/27 +f 487/506/22 478/491/22 477/507/22 +f 476/487/25 485/508/25 475/509/25 +f 475/509/29 484/496/29 474/484/29 +f 474/484/21 483/510/21 473/511/21 +f 494/512/17 489/513/17 491/514/17 +f 496/515/17 491/516/17 492/517/17 +f 490/518/17 498/519/17 492/520/17 +f 492/520/17 498/519/17 496/521/17 +f 491/514/17 495/522/17 494/512/17 +f 501/523/18 504/524/18 499/525/18 +f 499/526/18 506/527/18 500/528/18 +f 508/529/18 502/530/18 500/531/18 +f 500/531/18 506/532/18 508/529/18 +f 499/525/18 504/524/18 505/533/18 +f 498/519/27 506/527/27 496/515/27 +f 507/534/22 498/519/22 497/535/22 +f 496/515/25 505/536/25 495/537/25 +f 495/537/29 504/524/29 494/512/29 +f 494/512/21 503/538/21 493/539/21 +f 514/540/17 509/541/17 511/542/17 +f 516/543/17 511/544/17 512/545/17 +f 510/546/17 518/547/17 512/548/17 +f 512/548/17 518/547/17 516/549/17 +f 511/542/17 515/550/17 514/540/17 +f 521/551/18 524/552/18 519/553/18 +f 519/554/18 526/555/18 520/556/18 +f 528/557/18 522/558/18 520/559/18 +f 520/559/18 526/560/18 528/557/18 +f 519/553/18 524/552/18 525/561/18 +f 518/547/27 526/555/27 516/543/27 +f 527/562/22 518/547/22 517/563/22 +f 516/543/25 525/564/25 515/565/25 +f 515/565/29 524/552/29 514/540/29 +f 514/540/21 523/566/21 513/567/21 +f 534/568/17 529/569/17 531/570/17 +f 536/571/17 531/572/17 532/573/17 +f 530/574/17 538/575/17 532/576/17 +f 532/576/17 538/575/17 536/577/17 +f 531/570/17 535/578/17 534/568/17 +f 541/579/18 544/580/18 539/581/18 +f 539/582/18 546/583/18 540/584/18 +f 548/585/18 542/586/18 540/587/18 +f 540/587/18 546/588/18 548/585/18 +f 539/581/18 544/580/18 545/589/18 +f 538/575/27 546/583/27 536/571/27 +f 547/590/22 538/575/22 537/591/22 +f 536/571/25 545/592/25 535/593/25 +f 535/593/29 544/580/29 534/568/29 +f 534/568/21 543/594/21 533/595/21 +f 554/596/17 549/597/17 551/598/17 +f 556/599/17 551/600/17 552/601/17 +f 550/602/17 558/603/17 552/604/17 +f 552/604/17 558/603/17 556/605/17 +f 551/598/17 555/606/17 554/596/17 +f 561/607/18 564/608/18 559/609/18 +f 559/610/18 566/611/18 560/612/18 +f 568/613/18 562/614/18 560/615/18 +f 560/615/18 566/616/18 568/613/18 +f 559/609/18 564/608/18 565/617/18 +f 558/603/27 566/611/27 556/599/27 +f 567/618/22 558/603/22 557/619/22 +f 556/599/25 565/620/25 555/621/25 +f 555/621/29 564/608/29 554/596/29 +f 554/596/21 563/622/21 553/623/21 +f 582/624/18 569/625/18 581/626/18 +f 572/627/29 582/624/29 584/628/29 +f 571/629/17 584/628/17 583/630/17 +f 581/626/30 571/631/30 583/632/30 +f 574/633/25 572/627/25 576/634/25 +f 573/635/26 571/636/26 569/637/26 +f 576/634/17 571/638/17 575/639/17 +f 573/635/18 570/640/18 574/633/18 +f 587/641/18 574/633/18 588/642/18 +f 588/642/27 576/634/27 586/643/27 +f 586/643/17 575/644/17 585/645/17 +f 587/641/28 575/646/28 573/647/28 +f 583/648/17 577/649/17 578/650/17 +f 582/624/18 580/651/18 579/652/18 +f 584/628/21 579/652/21 577/649/21 +f 581/653/22 578/654/22 580/651/22 +f 588/642/22 591/655/22 589/656/22 +f 585/657/21 590/658/21 592/659/21 +f 587/660/18 589/656/18 590/658/18 +f 586/643/17 592/661/17 591/655/17 +f 608/662/17 594/663/17 607/664/17 +f 607/665/22 596/666/22 605/667/22 +f 606/668/21 593/669/21 608/670/21 +f 605/667/18 595/671/18 606/668/18 +f 602/672/26 600/673/26 601/674/26 +f 598/675/25 604/676/25 603/677/25 +f 600/678/21 603/679/21 601/680/21 +f 597/681/22 602/682/22 604/683/22 +f 602/672/38 608/662/38 607/664/38 +f 604/683/22 607/665/22 605/667/22 +f 601/680/21 606/668/21 608/670/21 +f 603/677/33 605/667/33 606/668/33 +f 610/684/22 621/685/22 622/686/22 +f 612/687/33 622/686/33 624/688/33 +f 611/689/21 624/688/21 623/690/21 +f 609/691/38 623/692/38 621/685/38 +f 614/693/25 612/687/25 616/694/25 +f 615/695/26 609/696/26 613/697/26 +f 616/694/21 611/698/21 615/699/21 +f 613/697/22 610/684/22 614/693/22 +f 627/700/22 614/693/22 628/701/22 +f 626/702/32 614/693/32 616/694/32 +f 626/702/21 615/703/21 625/704/21 +f 625/705/31 613/706/31 627/700/31 +f 623/707/21 617/708/21 618/709/21 +f 622/686/22 620/710/22 619/711/22 +f 624/688/18 619/711/18 617/708/18 +f 621/712/17 618/713/17 620/710/17 +f 628/701/17 631/714/17 629/715/17 +f 625/716/18 630/717/18 632/718/18 +f 627/719/22 629/715/22 630/717/22 +f 626/702/21 632/720/21 631/714/21 +f 648/721/21 634/722/21 647/723/21 +f 647/724/17 636/725/17 645/726/17 +f 646/727/18 633/728/18 648/729/18 +f 645/726/22 635/730/22 646/727/22 +f 642/731/26 640/732/26 641/733/26 +f 638/734/25 644/735/25 643/736/25 +f 640/737/18 643/738/18 641/739/18 +f 637/740/17 642/741/17 644/742/17 +f 642/731/28 648/721/28 647/723/28 +f 644/742/17 647/724/17 645/726/17 +f 641/739/18 646/727/18 648/729/18 +f 646/727/27 644/735/27 645/726/27 +f 662/743/21 649/744/21 661/745/21 +f 652/746/32 662/743/32 664/747/32 +f 651/748/22 664/747/22 663/749/22 +f 649/744/31 663/750/31 661/745/31 +f 654/751/25 652/746/25 656/752/25 +f 655/753/26 649/754/26 653/755/26 +f 656/752/22 651/756/22 655/757/22 +f 653/755/21 650/758/21 654/751/21 +f 667/759/21 654/751/21 668/760/21 +f 668/760/33 656/752/33 666/761/33 +f 666/761/22 655/762/22 665/763/22 +f 667/759/38 655/764/38 653/765/38 +f 663/766/22 657/767/22 658/768/22 +f 662/743/21 660/769/21 659/770/21 +f 664/747/17 659/770/17 657/767/17 +f 661/771/18 658/772/18 660/769/18 +f 668/760/18 671/773/18 669/774/18 +f 665/775/17 670/776/17 672/777/17 +f 667/778/21 669/774/21 670/776/21 +f 666/761/22 672/779/22 671/773/22 +f 688/780/22 674/781/22 687/782/22 +f 687/783/18 676/784/18 685/785/18 +f 686/786/17 673/787/17 688/788/17 +f 685/785/21 675/789/21 686/786/21 +f 682/790/26 680/791/26 681/792/26 +f 678/793/25 684/794/25 683/795/25 +f 680/796/17 683/797/17 681/798/17 +f 677/799/18 682/800/18 684/801/18 +f 682/790/30 688/780/30 687/782/30 +f 684/801/18 687/783/18 685/785/18 +f 681/798/17 686/786/17 688/788/17 +f 686/786/29 684/794/29 685/785/29 +f 696/802/18 691/803/18 692/804/18 +f 690/805/17 695/806/17 689/807/17 +f 695/808/39 692/804/39 689/809/39 +f 693/810/40 690/805/40 691/803/40 +f 700/811/18 693/810/18 696/802/18 +f 698/812/17 695/806/17 694/813/17 +f 699/814/26 696/802/26 695/808/26 +f 697/815/25 694/813/25 693/810/25 +f 703/816/22 699/817/22 698/818/22 +f 699/819/26 702/820/26 700/821/26 +f 697/822/25 701/823/25 698/818/25 +f 704/824/26 702/820/26 699/819/26 +f 705/825/25 698/818/25 701/823/25 +f 706/826/21 701/823/21 702/820/21 +f 702/820/19 697/815/19 700/811/19 +f 706/827/21 708/828/21 705/829/21 +f 710/830/21 708/828/21 706/827/21 +f 703/831/22 707/832/22 704/833/22 +f 710/834/21 714/835/21 712/836/21 +f 712/837/17 707/832/17 708/828/17 +f 711/838/22 704/833/22 707/832/22 +f 709/839/18 706/827/18 704/840/18 +f 708/828/32 703/816/32 705/825/32 +f 711/841/22 713/842/22 709/843/22 +f 722/844/21 716/845/21 718/846/21 +f 725/847/26 714/835/26 713/848/26 +f 722/844/24 719/849/24 720/850/24 +f 720/850/25 715/851/25 716/845/25 +f 719/852/22 717/853/22 715/851/22 +f 717/854/26 722/844/26 718/846/26 +f 713/848/31 710/830/31 709/839/31 +f 716/845/25 723/855/25 724/856/25 +f 717/853/41 723/855/41 715/851/41 +f 723/855/22 713/842/22 711/841/22 +f 724/856/25 711/841/25 712/836/25 +f 726/857/21 712/836/21 714/835/21 +f 716/845/42 726/857/42 718/846/42 +f 718/846/26 725/847/26 717/854/26 +f 34/41/17 42/50/17 41/42/17 +f 35/44/18 43/48/18 44/45/18 +f 40/47/19 48/74/19 43/48/19 +f 37/49/20 45/79/20 42/50/20 +f 39/51/21 47/68/21 48/52/21 +f 38/54/22 46/65/22 45/55/22 +f 44/57/23 46/65/23 38/54/23 +f 41/59/24 47/68/24 39/51/24 +f 42/50/25 52/82/25 51/61/25 +f 33/43/26 49/858/26 50/62/26 +f 43/48/25 55/92/25 56/63/25 +f 36/46/26 54/859/26 53/64/26 +f 46/65/25 60/97/25 59/66/25 +f 37/56/26 57/860/26 58/67/26 +f 47/68/25 63/87/25 64/69/25 +f 40/53/26 62/861/26 61/70/26 +f 41/59/25 51/84/25 63/71/25 +f 61/72/26 49/862/26 33/60/26 +f 64/73/25 55/90/25 43/48/25 +f 35/44/26 53/863/26 62/75/26 +f 58/76/26 54/864/26 36/58/26 +f 44/57/25 56/865/25 60/77/25 +f 59/78/25 52/100/25 42/50/25 +f 34/41/26 50/866/26 57/80/26 +f 49/81/18 51/61/18 52/82/18 +f 51/84/23 49/867/23 61/85/23 +f 62/86/22 64/69/22 63/87/22 +f 62/89/20 53/868/20 55/90/20 +f 54/91/17 56/63/17 55/92/17 +f 60/77/24 56/865/24 54/94/24 +f 57/96/21 59/66/21 60/97/21 +f 57/99/19 50/869/19 52/100/19 +f 67/103/26 66/870/26 65/871/26 +f 65/871/26 80/872/26 79/873/26 +f 79/873/26 78/874/26 77/875/26 +f 77/875/26 76/876/26 75/101/26 +f 75/101/26 74/877/26 73/878/26 +f 73/878/26 72/879/26 71/102/26 +f 71/102/26 70/880/26 69/881/26 +f 69/881/26 68/882/26 67/103/26 +f 67/103/26 65/871/26 79/873/26 +f 79/873/26 77/875/26 67/103/26 +f 77/875/26 75/101/26 67/103/26 +f 75/101/26 73/878/26 71/102/26 +f 71/102/26 69/881/26 67/103/26 +f 187/104/25 203/883/25 202/105/25 +f 187/107/25 188/884/25 204/108/25 +f 188/110/25 189/885/25 205/111/25 +f 190/113/25 206/886/25 205/114/25 +f 191/116/25 207/887/25 206/117/25 +f 192/119/25 208/888/25 207/120/25 +f 177/122/25 193/889/25 208/123/25 +f 177/125/25 178/890/25 194/126/25 +f 178/128/25 179/891/25 195/129/25 +f 179/131/25 180/892/25 196/132/25 +f 180/134/25 181/893/25 197/135/25 +f 182/137/25 198/894/25 197/138/25 +f 183/140/25 199/895/25 198/141/25 +f 184/143/25 200/896/25 199/144/25 +f 185/146/25 201/897/25 200/147/25 +f 186/149/25 202/898/25 201/150/25 +f 209/154/25 210/899/25 211/900/25 +f 211/900/25 212/901/25 213/902/25 +f 213/902/25 214/903/25 215/904/25 +f 215/904/25 216/905/25 217/152/25 +f 217/152/25 218/906/25 219/907/25 +f 219/907/25 220/908/25 217/152/25 +f 220/908/25 221/153/25 217/152/25 +f 221/153/25 222/909/25 209/154/25 +f 222/909/25 223/910/25 209/154/25 +f 223/910/25 224/911/25 209/154/25 +f 209/154/25 211/900/25 213/902/25 +f 213/902/25 215/904/25 209/154/25 +f 215/904/25 217/152/25 209/154/25 +f 226/155/17 225/162/17 237/156/17 +f 228/158/27 226/155/27 238/157/27 +f 227/160/18 228/158/18 240/159/18 +f 225/162/28 227/912/28 239/163/28 +f 230/164/25 226/155/25 228/158/25 +f 231/166/26 227/913/26 225/167/26 +f 232/165/18 228/158/18 227/169/18 +f 229/168/17 225/167/17 226/155/17 +f 243/171/17 229/177/17 230/164/17 +f 244/172/29 230/164/29 232/165/29 +f 242/173/18 232/165/18 231/174/18 +f 241/176/30 231/914/30 229/177/30 +f 239/178/18 240/159/18 233/179/18 +f 238/157/17 237/183/17 236/181/17 +f 240/159/22 238/157/22 235/182/22 +f 237/183/21 239/915/21 234/184/21 +f 244/172/21 242/173/21 247/185/21 +f 241/187/22 243/190/22 246/188/22 +f 243/190/17 244/172/17 245/186/17 +f 242/173/18 241/916/18 248/191/18 +f 264/192/18 249/917/18 250/193/18 +f 263/195/21 250/918/21 252/196/21 +f 262/198/22 251/201/22 249/199/22 +f 261/197/17 252/196/17 251/201/17 +f 258/202/26 255/919/26 256/203/26 +f 254/205/25 253/920/25 260/206/25 +f 256/208/22 254/921/22 259/209/22 +f 253/211/21 255/922/21 258/212/21 +f 258/202/31 257/204/31 264/192/31 +f 260/213/21 258/212/21 263/195/21 +f 257/210/22 259/209/22 262/198/22 +f 262/198/32 259/207/32 260/206/32 +f 267/214/26 268/225/26 266/215/26 +f 272/217/25 276/234/25 275/218/25 +f 270/220/25 274/223/25 273/221/25 +f 274/223/21 278/228/21 277/224/21 +f 268/225/22 272/217/22 271/219/22 +f 265/226/21 270/220/21 269/222/21 +f 278/228/25 279/235/25 280/229/25 +f 273/230/18 277/224/18 280/229/18 +f 275/232/17 279/235/17 278/228/17 +f 276/234/22 280/229/22 279/235/22 +f 265/237/17 266/923/17 275/232/17 +f 266/923/17 271/924/17 275/232/17 +f 275/232/17 274/233/17 265/237/17 +f 286/238/17 285/265/17 281/239/17 +f 288/241/17 287/263/17 283/242/17 +f 282/244/17 289/261/17 290/245/17 +f 293/249/18 295/264/18 296/250/18 +f 291/252/18 297/262/18 298/253/18 +f 300/255/18 299/260/18 294/256/18 +f 290/245/27 300/255/27 298/253/27 +f 299/260/22 300/255/22 290/245/22 +f 288/241/25 298/253/25 297/262/25 +f 287/263/29 297/262/29 296/250/29 +f 286/238/21 296/250/21 295/264/21 +f 307/266/25 308/270/25 305/267/25 +f 303/269/18 305/267/18 308/270/18 +f 302/272/17 307/266/17 306/268/17 +f 304/274/22 308/270/22 307/266/22 +f 301/276/21 306/268/21 305/267/21 +f 320/278/26 324/925/26 323/279/26 +f 315/281/22 316/289/22 313/282/22 +f 312/284/26 316/289/26 315/281/26 +f 309/286/25 314/283/25 313/282/25 +f 311/288/18 313/282/18 316/289/18 +f 310/291/17 315/281/17 314/283/17 +f 317/293/25 322/926/25 321/294/25 +f 319/295/18 321/927/18 324/296/18 +f 318/280/17 323/928/17 322/297/17 +f 320/278/21 318/280/21 317/293/21 +f 331/298/25 332/302/25 329/299/25 +f 327/301/18 329/299/18 332/302/18 +f 326/304/17 331/298/17 330/300/17 +f 328/306/22 332/302/22 331/298/22 +f 325/308/21 330/300/21 329/299/21 +f 336/313/22 340/311/22 339/314/22 +f 333/316/21 338/929/21 337/317/21 +f 335/319/18 337/335/18 340/320/18 +f 334/322/17 339/338/17 338/323/17 +f 346/325/22 348/353/22 350/326/22 +f 342/330/25 345/346/25 346/331/25 +f 343/312/22 346/325/22 341/333/22 +f 337/335/33 342/330/33 343/332/33 +f 338/336/21 344/930/21 345/337/21 +f 339/338/26 341/344/26 344/339/26 +f 349/340/21 353/931/21 351/341/21 +f 344/343/21 349/932/21 347/342/21 +f 341/344/31 350/351/31 349/345/31 +f 345/346/32 347/356/32 348/347/32 +f 352/348/22 356/933/22 358/349/22 +f 350/351/18 354/364/18 353/352/18 +f 348/353/22 352/348/22 354/354/22 +f 347/356/17 351/361/17 352/357/17 +f 355/358/25 359/367/25 360/359/25 +f 351/361/32 355/358/32 356/360/32 +f 353/362/21 357/934/21 355/363/21 +f 354/364/31 358/371/31 357/365/31 +f 362/366/32 360/359/32 359/367/32 +f 357/369/21 361/935/21 359/370/21 +f 358/371/26 362/936/26 361/372/26 +f 358/373/22 356/933/22 360/374/22 +f 369/379/25 370/387/25 367/380/25 +f 366/382/22 370/387/22 369/379/22 +f 363/384/21 368/381/21 367/380/21 +f 365/386/18 367/380/18 370/387/18 +f 364/389/17 369/379/17 368/381/17 +f 373/391/18 375/399/18 378/392/18 +f 372/394/17 377/398/17 376/395/17 +f 374/397/26 378/937/26 377/398/26 +f 371/396/25 376/395/25 375/399/25 +f 387/400/18 389/416/18 392/401/18 +f 377/377/17 383/412/17 385/403/17 +f 380/404/17 379/938/17 391/405/17 +f 376/395/27 381/378/27 382/409/27 +f 381/378/22 385/403/22 386/410/22 +f 378/411/21 384/939/21 383/412/21 +f 382/409/18 386/410/18 384/413/18 +f 388/402/34 392/401/34 391/414/34 +f 380/404/35 390/406/35 389/416/35 +f 389/416/18 393/420/18 396/417/18 +f 391/405/17 395/940/17 394/418/17 +f 392/401/26 396/417/26 395/419/26 +f 390/406/25 394/418/25 393/420/25 +f 395/421/21 400/941/21 399/422/21 +f 398/426/26 402/431/26 400/429/26 +f 394/423/25 399/422/25 401/430/25 +f 397/428/22 401/430/22 402/431/22 +f 393/420/23 397/428/23 398/426/23 +f 404/434/22 408/442/22 406/435/22 +f 403/438/17 407/443/17 408/442/17 +f 400/437/21 405/942/21 407/443/21 +f 402/432/18 406/435/18 405/444/18 +f 399/422/32 403/438/32 404/434/32 +f 412/449/22 416/455/22 418/450/22 +f 410/441/26 422/463/26 421/452/26 +f 415/454/20 417/943/20 418/450/20 +f 411/456/25 415/458/25 416/455/25 +f 413/457/21 417/944/21 415/458/21 +f 413/459/26 414/451/26 418/450/26 +f 406/435/31 410/441/31 409/453/31 +f 412/449/25 420/462/25 419/461/25 +f 419/461/36 421/945/36 413/457/36 +f 409/448/21 421/945/21 419/461/21 +f 407/446/25 419/461/25 420/462/25 +f 408/440/22 420/462/22 422/463/22 +f 422/463/37 420/462/37 412/449/37 +f 414/451/26 413/459/26 421/452/26 +f 423/464/22 428/468/22 430/465/22 +f 424/467/26 427/946/26 428/468/26 +f 426/466/25 430/465/25 429/469/25 +f 425/470/21 429/469/21 427/471/21 +f 432/473/18 436/483/18 435/474/18 +f 431/475/33 429/469/33 430/465/33 +f 431/475/21 435/474/21 433/480/21 +f 427/481/17 433/947/17 434/482/17 +f 428/477/22 434/482/22 436/483/22 +f 474/484/17 473/511/17 469/485/17 +f 476/487/17 475/509/17 471/488/17 +f 470/490/17 477/507/17 478/491/17 +f 481/495/18 483/510/18 484/496/18 +f 479/498/18 485/508/18 486/499/18 +f 488/501/18 487/506/18 482/502/18 +f 478/491/27 488/501/27 486/499/27 +f 487/506/22 488/501/22 478/491/22 +f 476/487/25 486/499/25 485/508/25 +f 475/509/29 485/508/29 484/496/29 +f 474/484/21 484/496/21 483/510/21 +f 494/512/17 493/539/17 489/513/17 +f 496/515/17 495/537/17 491/516/17 +f 490/518/17 497/535/17 498/519/17 +f 501/523/18 503/538/18 504/524/18 +f 499/526/18 505/536/18 506/527/18 +f 508/529/18 507/534/18 502/530/18 +f 498/519/27 508/529/27 506/527/27 +f 507/534/22 508/529/22 498/519/22 +f 496/515/25 506/527/25 505/536/25 +f 495/537/29 505/536/29 504/524/29 +f 494/512/21 504/524/21 503/538/21 +f 514/540/17 513/567/17 509/541/17 +f 516/543/17 515/565/17 511/544/17 +f 510/546/17 517/563/17 518/547/17 +f 521/551/18 523/566/18 524/552/18 +f 519/554/18 525/564/18 526/555/18 +f 528/557/18 527/562/18 522/558/18 +f 518/547/27 528/557/27 526/555/27 +f 527/562/22 528/557/22 518/547/22 +f 516/543/25 526/555/25 525/564/25 +f 515/565/29 525/564/29 524/552/29 +f 514/540/21 524/552/21 523/566/21 +f 534/568/17 533/595/17 529/569/17 +f 536/571/17 535/593/17 531/572/17 +f 530/574/17 537/591/17 538/575/17 +f 541/579/18 543/594/18 544/580/18 +f 539/582/18 545/592/18 546/583/18 +f 548/585/18 547/590/18 542/586/18 +f 538/575/27 548/585/27 546/583/27 +f 547/590/22 548/585/22 538/575/22 +f 536/571/25 546/583/25 545/592/25 +f 535/593/29 545/592/29 544/580/29 +f 534/568/21 544/580/21 543/594/21 +f 554/596/17 553/623/17 549/597/17 +f 556/599/17 555/621/17 551/600/17 +f 550/602/17 557/619/17 558/603/17 +f 561/607/18 563/622/18 564/608/18 +f 559/610/18 565/620/18 566/611/18 +f 568/613/18 567/618/18 562/614/18 +f 558/603/27 568/613/27 566/611/27 +f 567/618/22 568/613/22 558/603/22 +f 556/599/25 566/611/25 565/620/25 +f 555/621/29 565/620/29 564/608/29 +f 554/596/21 564/608/21 563/622/21 +f 582/624/18 570/640/18 569/625/18 +f 572/627/29 570/640/29 582/624/29 +f 571/629/17 572/627/17 584/628/17 +f 581/626/30 569/625/30 571/631/30 +f 574/633/25 570/640/25 572/627/25 +f 573/635/26 575/948/26 571/636/26 +f 576/634/17 572/627/17 571/638/17 +f 573/635/18 569/637/18 570/640/18 +f 587/641/18 573/647/18 574/633/18 +f 588/642/27 574/633/27 576/634/27 +f 586/643/17 576/634/17 575/644/17 +f 587/641/28 585/949/28 575/646/28 +f 583/648/17 584/628/17 577/649/17 +f 582/624/18 581/653/18 580/651/18 +f 584/628/21 582/624/21 579/652/21 +f 581/653/22 583/950/22 578/654/22 +f 588/642/22 586/643/22 591/655/22 +f 585/657/21 587/660/21 590/658/21 +f 587/660/18 588/642/18 589/656/18 +f 586/643/17 585/951/17 592/661/17 +f 608/662/17 593/952/17 594/663/17 +f 607/665/22 594/953/22 596/666/22 +f 606/668/21 595/671/21 593/669/21 +f 605/667/18 596/666/18 595/671/18 +f 602/672/26 599/954/26 600/673/26 +f 598/675/25 597/955/25 604/676/25 +f 600/678/21 598/956/21 603/679/21 +f 597/681/22 599/957/22 602/682/22 +f 602/672/38 601/674/38 608/662/38 +f 604/683/22 602/682/22 607/665/22 +f 601/680/21 603/679/21 606/668/21 +f 603/677/33 604/676/33 605/667/33 +f 610/684/22 609/691/22 621/685/22 +f 612/687/33 610/684/33 622/686/33 +f 611/689/21 612/687/21 624/688/21 +f 609/691/38 611/958/38 623/692/38 +f 614/693/25 610/684/25 612/687/25 +f 615/695/26 611/959/26 609/696/26 +f 616/694/21 612/687/21 611/698/21 +f 613/697/22 609/696/22 610/684/22 +f 627/700/22 613/706/22 614/693/22 +f 626/702/32 628/701/32 614/693/32 +f 626/702/21 616/694/21 615/703/21 +f 625/705/31 615/960/31 613/706/31 +f 623/707/21 624/688/21 617/708/21 +f 622/686/22 621/712/22 620/710/22 +f 624/688/18 622/686/18 619/711/18 +f 621/712/17 623/961/17 618/713/17 +f 628/701/17 626/702/17 631/714/17 +f 625/716/18 627/719/18 630/717/18 +f 627/719/22 628/701/22 629/715/22 +f 626/702/21 625/962/21 632/720/21 +f 648/721/21 633/963/21 634/722/21 +f 647/724/17 634/964/17 636/725/17 +f 646/727/18 635/730/18 633/728/18 +f 645/726/22 636/725/22 635/730/22 +f 642/731/26 639/965/26 640/732/26 +f 638/734/25 637/966/25 644/735/25 +f 640/737/18 638/967/18 643/738/18 +f 637/740/17 639/968/17 642/741/17 +f 642/731/28 641/733/28 648/721/28 +f 644/742/17 642/741/17 647/724/17 +f 641/739/18 643/738/18 646/727/18 +f 646/727/27 643/736/27 644/735/27 +f 662/743/21 650/758/21 649/744/21 +f 652/746/32 650/758/32 662/743/32 +f 651/748/22 652/746/22 664/747/22 +f 649/744/31 651/969/31 663/750/31 +f 654/751/25 650/758/25 652/746/25 +f 655/753/26 651/970/26 649/754/26 +f 656/752/22 652/746/22 651/756/22 +f 653/755/21 649/754/21 650/758/21 +f 667/759/21 653/765/21 654/751/21 +f 668/760/33 654/751/33 656/752/33 +f 666/761/22 656/752/22 655/762/22 +f 667/759/38 665/971/38 655/764/38 +f 663/766/22 664/747/22 657/767/22 +f 662/743/21 661/771/21 660/769/21 +f 664/747/17 662/743/17 659/770/17 +f 661/771/18 663/972/18 658/772/18 +f 668/760/18 666/761/18 671/773/18 +f 665/775/17 667/778/17 670/776/17 +f 667/778/21 668/760/21 669/774/21 +f 666/761/22 665/973/22 672/779/22 +f 688/780/22 673/974/22 674/781/22 +f 687/783/18 674/975/18 676/784/18 +f 686/786/17 675/789/17 673/787/17 +f 685/785/21 676/784/21 675/789/21 +f 682/790/26 679/976/26 680/791/26 +f 678/793/25 677/977/25 684/794/25 +f 680/796/17 678/978/17 683/797/17 +f 677/799/18 679/979/18 682/800/18 +f 682/790/30 681/792/30 688/780/30 +f 684/801/18 682/800/18 687/783/18 +f 681/798/17 683/797/17 686/786/17 +f 686/786/29 683/795/29 684/794/29 +f 696/802/18 693/810/18 691/803/18 +f 690/805/17 694/813/17 695/806/17 +f 695/808/39 696/802/39 692/804/39 +f 693/810/40 694/813/40 690/805/40 +f 700/811/18 697/815/18 693/810/18 +f 698/812/17 699/980/17 695/806/17 +f 699/814/26 700/811/26 696/802/26 +f 697/815/25 698/812/25 694/813/25 +f 703/816/22 704/981/22 699/817/22 +f 704/824/26 706/826/26 702/820/26 +f 705/825/25 703/816/25 698/818/25 +f 706/826/21 705/825/21 701/823/21 +f 702/820/19 701/823/19 697/815/19 +f 710/830/21 712/837/21 708/828/21 +f 712/837/17 711/838/17 707/832/17 +f 711/838/22 709/982/22 704/833/22 +f 709/839/18 710/830/18 706/827/18 +f 708/828/32 707/832/32 703/816/32 +f 722/844/21 720/850/21 716/845/21 +f 725/847/26 726/857/26 714/835/26 +f 722/844/24 721/983/24 719/849/24 +f 720/850/25 719/852/25 715/851/25 +f 719/852/22 721/984/22 717/853/22 +f 717/854/26 721/985/26 722/844/26 +f 713/848/31 714/835/31 710/830/31 +f 716/845/25 715/851/25 723/855/25 +f 717/853/41 725/986/41 723/855/41 +f 723/855/22 725/986/22 713/842/22 +f 724/856/25 723/855/25 711/841/25 +f 726/857/21 724/856/21 712/836/21 +f 716/845/42 724/856/42 726/857/42 +f 718/846/26 726/857/26 725/847/26 +s 1 +f 438/987/43 83/988/19 468/989/19 +f 91/990/44 124/991/45 123/992/44 +f 125/993/46 94/994/47 126/995/47 +f 127/996/48 96/997/49 128/998/49 +f 113/999/50 82/1000/51 114/1001/51 +f 83/988/52 116/1002/53 115/1003/52 +f 117/1004/54 86/1005/55 118/1006/55 +f 122/1007/56 89/1008/57 90/1009/56 +f 87/1010/58 120/1011/59 119/1012/58 +f 468/989/19 82/1000/60 447/1013/60 +f 447/1013/60 81/1014/18 465/1015/18 +f 465/1015/18 96/997/61 446/1016/61 +f 457/1017/23 94/994/62 444/1018/62 +f 441/1019/17 88/1020/63 453/1021/63 +f 453/1021/63 87/1010/24 439/1022/24 +f 439/1022/24 86/1005/64 459/1023/64 +f 114/1024/51 83/988/52 115/1025/52 +f 462/1026/65 89/1008/17 441/1019/17 +f 128/1027/49 81/1014/50 113/1028/50 +f 452/1029/66 91/990/20 463/1030/20 +f 127/1031/48 94/994/47 95/1032/48 +f 444/1018/62 93/1033/22 449/1034/22 +f 124/1035/45 93/1033/46 125/1036/46 +f 446/1016/61 95/1032/23 457/1017/23 +f 455/1037/21 84/1038/43 438/987/43 +f 90/1009/56 123/1039/44 122/1040/56 +f 88/1020/59 121/1041/57 120/1042/59 +f 459/1023/64 85/1043/21 455/1044/21 +f 86/1005/55 119/1045/58 118/1046/55 +f 463/1030/20 90/1009/65 462/1026/65 +f 85/1047/54 116/1048/53 84/1038/53 +f 449/1034/22 92/1049/66 452/1029/66 +f 132/1050/46 190/113/47 189/115/46 +f 79/1051/67 99/1052/68 78/1053/68 +f 78/1054/68 100/1055/69 77/1056/69 +f 77/1057/69 101/1058/70 76/1059/70 +f 76/1060/70 102/1061/71 75/1062/71 +f 75/1063/71 103/1064/72 74/1065/72 +f 73/1066/73 105/1067/74 72/1068/74 +f 74/1069/72 104/1070/73 73/1071/73 +f 72/1072/74 106/1073/75 71/1074/75 +f 71/1075/75 107/1076/76 70/1077/76 +f 70/1078/76 108/1079/77 69/1080/77 +f 69/1081/77 109/1082/78 68/1083/78 +f 68/1084/78 110/1085/79 67/1086/79 +f 67/1087/79 111/1088/80 66/1089/80 +f 65/1090/81 111/1088/80 112/1091/81 +f 65/1092/81 97/1093/82 80/1094/82 +f 79/1095/67 97/1093/82 98/1096/67 +f 171/1097/64 140/1098/21 172/1099/21 +f 178/128/51 142/1100/52 179/891/52 +f 173/1101/43 142/1100/19 174/1102/19 +f 169/1103/63 138/1104/24 170/1105/24 +f 140/1106/54 180/134/53 141/1107/53 +f 137/1108/59 185/146/57 184/148/59 +f 162/1109/23 131/1110/62 163/1111/62 +f 139/1112/55 183/140/58 182/142/55 +f 175/1113/60 144/1114/18 176/1115/18 +f 172/1116/21 141/1107/43 173/1101/43 +f 138/1104/58 184/143/59 183/145/58 +f 188/110/45 132/1050/46 189/885/46 +f 181/139/54 139/1112/55 182/137/55 +f 191/116/48 131/1110/47 130/1117/48 +f 177/125/50 143/1118/51 178/890/51 +f 129/1119/49 177/122/50 192/124/49 +f 134/1120/44 188/884/45 187/107/44 +f 191/121/48 129/1119/49 192/119/49 +f 142/1100/52 180/892/53 179/131/52 +f 186/149/56 136/1121/57 135/1122/56 +f 176/1115/18 129/1119/61 161/1123/61 +f 174/1102/19 143/1118/60 175/1113/60 +f 168/1124/17 137/1108/63 169/1103/63 +f 170/1105/24 139/1112/64 171/1097/64 +f 167/1125/65 136/1121/17 168/1124/17 +f 165/1126/66 134/1120/20 166/1127/20 +f 163/1111/62 132/1050/22 164/1128/22 +f 161/1123/61 130/1117/23 162/1109/23 +f 135/1122/56 187/104/44 186/106/56 +f 166/1127/20 135/1122/65 167/1125/65 +f 164/1128/22 133/1129/66 165/1126/66 +f 146/1130/67 163/1111/68 147/1131/68 +f 147/1132/68 164/1128/69 148/1133/69 +f 148/1134/69 165/1126/70 149/1135/70 +f 149/1136/70 166/1127/71 150/1137/71 +f 150/1138/71 167/1125/72 151/1139/72 +f 152/1140/73 169/1103/74 153/1141/74 +f 151/1142/72 168/1124/73 152/1143/73 +f 153/1144/74 170/1105/75 154/1145/75 +f 154/1146/75 171/1097/76 155/1147/76 +f 155/1148/76 172/1099/77 156/1149/77 +f 156/1150/77 173/1101/78 157/1151/78 +f 157/1152/78 174/1102/79 158/1153/79 +f 158/1154/79 175/1113/80 159/1155/80 +f 159/1156/80 176/1115/81 160/1157/81 +f 160/1158/81 161/1123/82 145/1159/82 +f 146/1160/67 161/1123/82 162/1109/67 +f 205/111/21 220/1161/43 204/112/43 +f 198/894/62 213/1162/22 197/138/22 +f 206/886/64 221/1163/21 205/114/21 +f 199/895/23 214/1164/62 198/141/62 +f 207/887/24 222/1165/64 206/117/64 +f 200/896/61 215/1166/23 199/144/23 +f 208/888/63 223/1167/24 207/120/24 +f 201/897/18 216/1168/61 200/147/61 +f 194/126/65 209/1169/17 193/127/17 +f 193/889/17 224/1170/63 208/123/63 +f 202/898/60 217/1171/18 201/150/18 +f 195/129/20 210/1172/65 194/130/65 +f 203/883/19 218/1173/60 202/105/60 +f 196/132/66 211/1174/20 195/133/20 +f 204/108/43 219/1175/19 203/109/19 +f 197/135/22 212/1176/66 196/136/66 +f 149/1177/66 123/1178/20 124/1179/66 +f 150/1180/20 122/1181/65 123/1178/20 +f 151/1182/65 121/1183/17 122/1181/65 +f 152/1184/17 120/1185/63 121/1183/17 +f 153/1186/63 119/1187/24 120/1185/63 +f 154/1188/24 118/1189/64 119/1187/24 +f 155/1190/64 117/1191/21 118/1189/64 +f 156/1192/21 116/1193/43 117/1194/21 +f 157/1195/43 115/1196/19 116/1193/43 +f 158/1197/19 114/1198/60 115/1196/19 +f 159/1199/60 113/1200/18 114/1198/60 +f 160/1201/18 128/1202/61 113/1200/18 +f 145/1203/61 127/1204/23 128/1202/61 +f 146/1205/23 126/1206/62 127/1204/23 +f 147/1207/62 125/1208/22 126/1206/62 +f 148/1209/22 124/1179/66 125/1208/22 +f 100/1055/22 451/1210/66 101/1058/66 +f 102/1061/20 461/1211/65 103/1064/65 +f 107/1076/64 456/1212/21 108/1079/21 +f 108/1213/21 437/1214/43 109/1082/43 +f 97/1093/61 458/1215/23 98/1096/23 +f 99/1052/62 450/1216/22 100/1055/22 +f 101/1058/66 464/1217/20 102/1061/20 +f 103/1064/65 442/1218/17 104/1070/17 +f 106/1073/24 460/1219/64 107/1076/64 +f 105/1067/63 440/1220/24 106/1073/24 +f 104/1070/17 454/1221/63 105/1067/63 +f 98/1096/23 443/1222/62 99/1052/62 +f 112/1091/18 445/1223/61 97/1093/61 +f 111/1088/60 466/1224/18 112/1091/18 +f 110/1085/19 448/1225/60 111/1088/60 +f 109/1082/43 467/1226/19 110/1085/19 +f 438/987/43 84/1038/43 83/988/19 +f 91/990/44 92/1049/45 124/991/45 +f 125/993/46 93/1033/46 94/994/47 +f 127/996/48 95/1032/48 96/997/49 +f 113/999/50 81/1014/50 82/1000/51 +f 83/988/52 84/1038/53 116/1002/53 +f 117/1004/54 85/1043/54 86/1005/55 +f 122/1007/56 121/1227/57 89/1008/57 +f 87/1010/58 88/1020/59 120/1011/59 +f 468/989/19 83/988/19 82/1000/60 +f 447/1013/60 82/1000/60 81/1014/18 +f 465/1015/18 81/1014/18 96/997/61 +f 457/1017/23 95/1032/23 94/994/62 +f 441/1019/17 89/1008/17 88/1020/63 +f 453/1021/63 88/1020/63 87/1010/24 +f 439/1022/24 87/1010/24 86/1005/64 +f 114/1024/51 82/1000/51 83/988/52 +f 462/1026/65 90/1009/65 89/1008/17 +f 128/1027/49 96/997/49 81/1014/50 +f 452/1029/66 92/1049/66 91/990/20 +f 127/1031/48 126/1228/47 94/994/47 +f 444/1018/62 94/994/62 93/1033/22 +f 124/1035/45 92/1049/45 93/1033/46 +f 446/1016/61 96/997/61 95/1032/23 +f 455/1037/21 85/1047/21 84/1038/43 +f 90/1009/56 91/990/44 123/1039/44 +f 88/1020/59 89/1008/57 121/1041/57 +f 459/1023/64 86/1005/64 85/1043/21 +f 86/1005/55 87/1010/58 119/1045/58 +f 463/1030/20 91/990/20 90/1009/65 +f 85/1047/54 117/1229/54 116/1048/53 +f 449/1034/22 93/1033/22 92/1049/66 +f 132/1050/46 131/1110/47 190/113/47 +f 79/1051/67 98/1096/67 99/1052/68 +f 78/1054/68 99/1052/68 100/1055/69 +f 77/1057/69 100/1055/69 101/1058/70 +f 76/1060/70 101/1058/70 102/1061/71 +f 75/1063/71 102/1061/71 103/1064/72 +f 73/1066/73 104/1070/73 105/1067/74 +f 74/1069/72 103/1064/72 104/1070/73 +f 72/1072/74 105/1067/74 106/1073/75 +f 71/1075/75 106/1073/75 107/1076/76 +f 70/1078/76 107/1076/76 108/1079/77 +f 69/1081/77 108/1213/77 109/1082/78 +f 68/1084/78 109/1082/78 110/1085/79 +f 67/1087/79 110/1085/79 111/1088/80 +f 65/1090/81 66/1230/80 111/1088/80 +f 65/1092/81 112/1091/81 97/1093/82 +f 79/1095/67 80/1231/82 97/1093/82 +f 171/1097/64 139/1112/64 140/1098/21 +f 178/128/51 143/1118/51 142/1100/52 +f 173/1101/43 141/1107/43 142/1100/19 +f 169/1103/63 137/1108/63 138/1104/24 +f 140/1106/54 181/893/54 180/134/53 +f 137/1108/59 136/1121/57 185/146/57 +f 162/1109/23 130/1117/23 131/1110/62 +f 139/1112/55 138/1104/58 183/140/58 +f 175/1113/60 143/1118/60 144/1114/18 +f 172/1116/21 140/1106/21 141/1107/43 +f 138/1104/58 137/1108/59 184/143/59 +f 188/110/45 133/1129/45 132/1050/46 +f 181/139/54 140/1098/54 139/1112/55 +f 191/116/48 190/118/47 131/1110/47 +f 177/125/50 144/1114/50 143/1118/51 +f 129/1119/49 144/1114/50 177/122/50 +f 134/1120/44 133/1129/45 188/884/45 +f 191/121/48 130/1117/48 129/1119/49 +f 142/1100/52 141/1107/53 180/892/53 +f 186/149/56 185/151/57 136/1121/57 +f 176/1115/18 144/1114/18 129/1119/61 +f 174/1102/19 142/1100/19 143/1118/60 +f 168/1124/17 136/1121/17 137/1108/63 +f 170/1105/24 138/1104/24 139/1112/64 +f 167/1125/65 135/1122/65 136/1121/17 +f 165/1126/66 133/1129/66 134/1120/20 +f 163/1111/62 131/1110/62 132/1050/22 +f 161/1123/61 129/1119/61 130/1117/23 +f 135/1122/56 134/1120/44 187/104/44 +f 166/1127/20 134/1120/20 135/1122/65 +f 164/1128/22 132/1050/22 133/1129/66 +f 146/1130/67 162/1109/67 163/1111/68 +f 147/1132/68 163/1111/68 164/1128/69 +f 148/1134/69 164/1128/69 165/1126/70 +f 149/1136/70 165/1126/70 166/1127/71 +f 150/1138/71 166/1127/71 167/1125/72 +f 152/1140/73 168/1124/73 169/1103/74 +f 151/1142/72 167/1125/72 168/1124/73 +f 153/1144/74 169/1103/74 170/1105/75 +f 154/1146/75 170/1105/75 171/1097/76 +f 155/1148/76 171/1097/76 172/1099/77 +f 156/1150/77 172/1116/77 173/1101/78 +f 157/1152/78 173/1101/78 174/1102/79 +f 158/1154/79 174/1102/79 175/1113/80 +f 159/1156/80 175/1113/80 176/1115/81 +f 160/1158/81 176/1115/81 161/1123/82 +f 146/1160/67 145/1232/82 161/1123/82 +f 205/111/21 221/1233/21 220/1161/43 +f 198/894/62 214/1234/62 213/1162/22 +f 206/886/64 222/1235/64 221/1163/21 +f 199/895/23 215/1236/23 214/1164/62 +f 207/887/24 223/1237/24 222/1165/64 +f 200/896/61 216/1238/61 215/1166/23 +f 208/888/63 224/1239/63 223/1167/24 +f 201/897/18 217/1240/18 216/1168/61 +f 194/126/65 210/1241/65 209/1169/17 +f 193/889/17 209/1242/17 224/1170/63 +f 202/898/60 218/1243/60 217/1171/18 +f 195/129/20 211/1244/20 210/1172/65 +f 203/883/19 219/1245/19 218/1173/60 +f 196/132/66 212/1246/66 211/1174/20 +f 204/108/43 220/1247/43 219/1175/19 +f 197/135/22 213/1248/22 212/1176/66 +f 149/1177/66 150/1180/20 123/1178/20 +f 150/1180/20 151/1182/65 122/1181/65 +f 151/1182/65 152/1184/17 121/1183/17 +f 152/1184/17 153/1186/63 120/1185/63 +f 153/1186/63 154/1188/24 119/1187/24 +f 154/1188/24 155/1190/64 118/1189/64 +f 155/1190/64 156/1249/21 117/1191/21 +f 156/1192/21 157/1195/43 116/1193/43 +f 157/1195/43 158/1197/19 115/1196/19 +f 158/1197/19 159/1199/60 114/1198/60 +f 159/1199/60 160/1201/18 113/1200/18 +f 160/1201/18 145/1203/61 128/1202/61 +f 145/1203/61 146/1205/23 127/1204/23 +f 146/1205/23 147/1207/62 126/1206/62 +f 147/1207/62 148/1209/22 125/1208/22 +f 148/1209/22 149/1177/66 124/1179/66 +f 100/1055/22 450/1216/22 451/1210/66 +f 102/1061/20 464/1217/20 461/1211/65 +f 107/1076/64 460/1219/64 456/1212/21 +f 108/1213/21 456/1250/21 437/1214/43 +f 97/1093/61 445/1223/61 458/1215/23 +f 99/1052/62 443/1222/62 450/1216/22 +f 101/1058/66 451/1210/66 464/1217/20 +f 103/1064/65 461/1211/65 442/1218/17 +f 106/1073/24 440/1220/24 460/1219/64 +f 105/1067/63 454/1221/63 440/1220/24 +f 104/1070/17 442/1218/17 454/1221/63 +f 98/1096/23 458/1215/23 443/1222/62 +f 112/1091/18 466/1224/18 445/1223/61 +f 111/1088/60 448/1225/60 466/1224/18 +f 110/1085/19 467/1226/19 448/1225/60 +f 109/1082/43 437/1214/43 467/1226/19 diff --git a/src/main/resources/assets/hbm/models/mine_fat.obj b/src/main/resources/assets/hbm/models/mine_fat.obj deleted file mode 100644 index 0dddca7db..000000000 --- a/src/main/resources/assets/hbm/models/mine_fat.obj +++ /dev/null @@ -1,1208 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'mine_fat.blend' -# www.blender.org -o Sphere -v -0.191342 0.500000 0.692910 -v -0.353553 0.500000 0.530330 -v -0.461940 0.500000 0.287013 -v -0.500000 0.500000 -0.000000 -v -0.461940 0.500000 -0.287013 -v -0.353553 0.500000 -0.530330 -v -0.191342 0.500000 -0.692910 -v -0.000000 0.500000 -0.750000 -v -0.135299 0.635299 0.692910 -v -0.250000 0.750000 0.530330 -v -0.326641 0.826641 0.287013 -v -0.353553 0.853553 -0.000000 -v -0.326641 0.826641 -0.287013 -v -0.250000 0.750000 -0.530330 -v -0.135299 0.635299 -0.692910 -v -0.000000 0.691342 0.692910 -v -0.000000 0.853553 0.530330 -v -0.000000 0.961940 0.287013 -v -0.000000 1.000000 -0.000000 -v -0.000000 0.961940 -0.287013 -v -0.000000 0.853553 -0.530330 -v -0.000000 0.691342 -0.692910 -v -0.000000 0.500000 0.750000 -v 0.135299 0.635299 0.692910 -v 0.250000 0.750000 0.530330 -v 0.326641 0.826641 0.287013 -v 0.353553 0.853553 -0.000000 -v 0.326641 0.826641 -0.287013 -v 0.250000 0.750000 -0.530330 -v 0.135299 0.635299 -0.692910 -v 0.191342 0.500000 0.692910 -v 0.353553 0.500000 0.530330 -v 0.461940 0.500000 0.287013 -v 0.500000 0.500000 -0.000000 -v 0.461940 0.500000 -0.287013 -v 0.353553 0.500000 -0.530330 -v 0.191342 0.500000 -0.692910 -v 0.135299 0.364701 0.692910 -v 0.250000 0.250000 0.530330 -v 0.326641 0.173359 0.287013 -v 0.353553 0.146447 0.000000 -v 0.326641 0.173359 -0.287013 -v 0.250000 0.250000 -0.530330 -v 0.135299 0.364701 -0.692910 -v -0.000000 0.308658 0.692910 -v -0.000000 0.146447 0.530330 -v -0.000000 0.038060 0.287013 -v -0.000000 0.000000 0.000000 -v -0.000000 0.038060 -0.287013 -v -0.000000 0.146447 -0.530330 -v -0.000000 0.308658 -0.692910 -v -0.135299 0.364701 0.692910 -v -0.250000 0.250000 0.530330 -v -0.326641 0.173359 0.287013 -v -0.353553 0.146447 0.000000 -v -0.326641 0.173359 -0.287013 -v -0.250000 0.250000 -0.530330 -v -0.135299 0.364701 -0.692910 -v 0.000000 1.000000 -0.750000 -v 0.353553 0.853553 -0.750000 -v 0.500000 0.500000 -0.750000 -v 0.353553 0.146447 -0.750000 -v -0.000000 0.000000 -0.750000 -v -0.353553 0.146447 -0.750000 -v -0.500000 0.500000 -0.750000 -v -0.353553 0.853553 -0.750000 -v 0.176777 0.926777 -1.100000 -v 0.426777 0.676777 -1.100000 -v 0.426777 0.323223 -1.100000 -v 0.176777 0.073223 -1.100000 -v -0.176777 0.073223 -1.100000 -v -0.426777 0.323223 -1.100000 -v -0.426777 0.676777 -1.100000 -v -0.176777 0.926777 -1.100000 -v 0.176777 0.926777 -0.875000 -v 0.426777 0.676777 -0.875000 -v 0.426777 0.323223 -0.875000 -v 0.176777 0.073223 -0.875000 -v -0.176777 0.073223 -0.875000 -v -0.426777 0.323223 -0.875000 -v -0.426777 0.676777 -0.875000 -v -0.176777 0.926777 -0.875000 -v 0.353553 0.853553 -0.875000 -v 0.353553 0.146447 -0.875000 -v -0.353553 0.146447 -0.875000 -v -0.353553 0.853553 -0.875000 -v 0.000000 1.000000 -1.100000 -v 0.500000 0.500000 -1.100000 -v -0.000000 -0.000000 -1.100000 -v -0.500000 0.500000 -1.100000 -v 0.200000 0.500000 -0.600000 -v -0.200000 0.500000 -0.600000 -v -0.000000 0.300000 -0.600000 -v 0.000000 0.700000 -0.600000 -v 0.000000 0.700000 -1.100000 -v -0.000000 0.300000 -1.100000 -v -0.200000 0.500000 -1.100000 -v 0.200000 0.500000 -1.100000 -v 0.000000 1.000000 -0.600000 -v 0.500000 0.500000 -0.600000 -v -0.000000 0.000000 -0.600000 -v -0.500000 0.500000 -0.600000 -v 0.350000 0.500000 -0.450000 -v -0.350000 0.500000 -0.450000 -v -0.000000 0.150000 -0.450000 -v 0.000000 0.850000 -0.450000 -v -0.225000 0.150000 1.000000 -v -0.225000 0.850000 1.000000 -v -0.225000 0.150000 0.700000 -v -0.225000 0.850000 0.700000 -v 0.225000 0.150000 1.000000 -v 0.225000 0.850000 1.000000 -v 0.225000 0.150000 0.700000 -v 0.225000 0.850000 0.700000 -v -0.100000 0.850000 0.775000 -v -0.100000 0.900000 0.775000 -v -0.046967 0.850000 0.796967 -v -0.046967 0.900000 0.796967 -v -0.025000 0.850000 0.850000 -v -0.025000 0.900000 0.850000 -v -0.046967 0.850000 0.903033 -v -0.046967 0.900000 0.903033 -v -0.100000 0.850000 0.925000 -v -0.100000 0.900000 0.925000 -v -0.153033 0.850000 0.903033 -v -0.153033 0.900000 0.903033 -v -0.175000 0.850000 0.850000 -v -0.175000 0.900000 0.850000 -v -0.153033 0.850000 0.796967 -v -0.153033 0.900000 0.796967 -v -0.100000 0.900000 0.895000 -v -0.068180 0.905000 0.881820 -v -0.100000 0.910000 0.895000 -v -0.055000 0.910000 0.850000 -v -0.068180 0.915000 0.881820 -v -0.068180 0.915000 0.818180 -v -0.055000 0.920000 0.850000 -v -0.068180 0.925000 0.818180 -v -0.100000 0.920000 0.805000 -v -0.100000 0.930000 0.805000 -v -0.131820 0.925000 0.818180 -v -0.131820 0.900000 0.881820 -v -0.131820 0.890000 0.881820 -v -0.131820 0.985000 0.881820 -v -0.145000 0.980000 0.850000 -v -0.131820 0.975000 0.881820 -v -0.145000 0.930000 0.850000 -v -0.131820 0.935000 0.818180 -v -0.131820 0.975000 0.818180 -v -0.145000 0.970000 0.850000 -v -0.131820 0.965000 0.818180 -v -0.100000 0.970000 0.805000 -v -0.100000 0.960000 0.805000 -v -0.131820 0.935000 0.881820 -v -0.145000 0.940000 0.850000 -v -0.068180 0.965000 0.818180 -v -0.055000 0.960000 0.850000 -v -0.068180 0.955000 0.818180 -v -0.068180 0.955000 0.881820 -v -0.055000 0.950000 0.850000 -v -0.100000 0.950000 0.895000 -v -0.131820 0.945000 0.881820 -v -0.068180 0.945000 0.881820 -v -0.100000 0.940000 0.895000 -v -0.131820 1.025000 0.881820 -v -0.145000 1.020000 0.850000 -v -0.131820 1.015000 0.881820 -v -0.131820 1.015000 0.818180 -v -0.145000 1.010000 0.850000 -v -0.131820 1.005000 0.818180 -v -0.100000 1.010000 0.805000 -v -0.100000 1.000000 0.805000 -v -0.068180 1.005000 0.818180 -v -0.055000 1.000000 0.850000 -v -0.068180 0.995000 0.818180 -v -0.068180 0.995000 0.881820 -v -0.055000 0.990000 0.850000 -v -0.100000 0.990000 0.895000 -v -0.068180 0.985000 0.881820 -v -0.100000 0.980000 0.895000 -v -0.131820 1.065000 0.881820 -v -0.145000 1.060000 0.850000 -v -0.131820 1.055000 0.881820 -v -0.131820 1.055000 0.818180 -v -0.145000 1.050000 0.850000 -v -0.131820 1.045000 0.818180 -v -0.100000 1.050000 0.805000 -v -0.100000 1.040000 0.805000 -v -0.068180 1.045000 0.818180 -v -0.055000 1.040000 0.850000 -v -0.068180 1.035000 0.818180 -v -0.068180 1.035000 0.881820 -v -0.055000 1.030000 0.850000 -v -0.100000 1.030000 0.895000 -v -0.068180 1.025000 0.881820 -v -0.100000 1.020000 0.895000 -v -0.100000 1.070000 0.895000 -v -0.100000 1.060000 0.895000 -v -0.090000 1.070000 0.895000 -v -0.090000 1.060000 0.895000 -v -0.100000 1.570000 0.895000 -v -0.090000 1.570000 0.895000 -v 0.100000 0.875000 0.810000 -v 0.128284 0.875000 0.821716 -v 0.100000 0.850000 0.800000 -v 0.100000 0.875000 0.800000 -v 0.135355 0.850000 0.814645 -v 0.135355 0.875000 0.814645 -v 0.150000 0.850000 0.850000 -v 0.150000 0.875000 0.850000 -v 0.135355 0.850000 0.885355 -v 0.135355 0.875000 0.885355 -v 0.100000 0.850000 0.900000 -v 0.100000 0.875000 0.900000 -v 0.064645 0.850000 0.885355 -v 0.064645 0.875000 0.885355 -v 0.050000 0.850000 0.850000 -v 0.050000 0.875000 0.850000 -v 0.064645 0.850000 0.814645 -v 0.064645 0.875000 0.814645 -v 0.140000 0.875000 0.850000 -v 0.128284 0.875000 0.878284 -v 0.100000 0.875000 0.890000 -v 0.071716 0.875000 0.878284 -v 0.060000 0.875000 0.850000 -v 0.071716 0.875000 0.821716 -v 0.100000 0.890000 0.810000 -v 0.071716 0.890000 0.821716 -v 0.060000 0.890000 0.850000 -v 0.071716 0.890000 0.878284 -v 0.100000 0.890000 0.890000 -v 0.128284 0.890000 0.878284 -v 0.140000 0.890000 0.850000 -v 0.128284 0.890000 0.821716 -v 0.100000 0.905000 0.820000 -v 0.078787 0.905000 0.828787 -v 0.070000 0.905000 0.850000 -v 0.078787 0.905000 0.871213 -v 0.100000 0.905000 0.880000 -v 0.121213 0.905000 0.871213 -v 0.130000 0.905000 0.850000 -v 0.121213 0.905000 0.828787 -v -0.235000 0.425000 1.010000 -v -0.235000 0.775000 1.010000 -v 0.235000 0.425000 1.010000 -v 0.235000 0.775000 1.010000 -v -0.270250 0.425000 0.410000 -v -0.270250 0.775000 0.410000 -v 0.270250 0.425000 0.410000 -v 0.270250 0.775000 0.410000 -v -0.075000 1.150000 0.500000 -v 0.075000 1.150000 0.500000 -v -0.075000 1.150000 -0.500000 -v 0.075000 1.150000 -0.500000 -v -0.075000 1.200000 0.000000 -v 0.075000 1.200000 0.000000 -v -0.075000 0.800000 0.550000 -v 0.075000 0.800000 0.550000 -v -0.075000 0.800000 -0.550000 -v 0.075000 0.800000 -0.550000 -v -0.050000 0.400000 1.000000 -v -0.050000 0.400000 1.050000 -v 0.020711 0.370711 1.000000 -v 0.020711 0.370711 1.050000 -v 0.050000 0.300000 1.000000 -v 0.050000 0.300000 1.050000 -v 0.020711 0.229289 1.000000 -v 0.020711 0.229289 1.050000 -v -0.050000 0.200000 1.000000 -v -0.050000 0.200000 1.050000 -v -0.120711 0.229289 1.000000 -v -0.120711 0.229289 1.050000 -v -0.150000 0.300000 1.000000 -v -0.150000 0.300000 1.050000 -v -0.120711 0.370711 1.000000 -v -0.120711 0.370711 1.050000 -v -0.065274 0.239884 1.230059 -v -0.071600 0.226042 1.223604 -v -0.065274 0.212199 1.217149 -v -0.050000 0.206465 1.214475 -v -0.034727 0.212199 1.217149 -v -0.028400 0.226042 1.223604 -v -0.050000 0.245618 1.232732 -v -0.034727 0.239884 1.230059 -v -0.024544 0.259678 1.211704 -v -0.014000 0.236607 1.200946 -v -0.024544 0.213536 1.190188 -v -0.050000 0.203980 1.185732 -v -0.075456 0.213536 1.190188 -v -0.086000 0.236607 1.200946 -v -0.075456 0.259678 1.211704 -v -0.050000 0.269234 1.216160 -v -0.075456 0.331523 1.057632 -v -0.086000 0.308452 1.046874 -v -0.075456 0.285381 1.036116 -v -0.050000 0.275825 1.031659 -v -0.024544 0.285381 1.036116 -v -0.014000 0.308452 1.046874 -v -0.050000 0.341079 1.062088 -v -0.024544 0.331523 1.057632 -v 0.006569 0.356569 1.050000 -v -0.050000 0.380000 1.050000 -v 0.030000 0.300000 1.050000 -v 0.006569 0.243431 1.050000 -v -0.050000 0.220000 1.050000 -v -0.106569 0.243431 1.050000 -v -0.130000 0.300000 1.050000 -v -0.106569 0.356569 1.050000 -v 0.006569 0.356569 1.065000 -v -0.050000 0.380000 1.065000 -v 0.030000 0.300000 1.065000 -v 0.006569 0.243431 1.065000 -v -0.050000 0.220000 1.065000 -v -0.106569 0.243431 1.065000 -v -0.130000 0.300000 1.065000 -v -0.106569 0.356569 1.065000 -vt 0.628826 0.653838 -vt 0.561052 0.672886 -vt 0.561028 0.589937 -vt 0.391763 0.690114 -vt 0.391730 0.572807 -vt 0.480369 0.577246 -vt 0.222465 0.672983 -vt 0.222441 0.590034 -vt 0.303093 0.577297 -vt 0.480400 0.685623 -vt 0.303124 0.685674 -vt 0.154680 0.653974 -vt 0.154667 0.609082 -vt 0.628813 0.608946 -vt 0.097729 0.631544 -vt 0.685764 0.631376 -vt 0.479227 0.978483 -vt 0.371939 0.978483 -vt 0.410256 0.919830 -vt 0.371939 0.861177 -vt 0.410256 0.861177 -vt 0.410256 0.802523 -vt 0.371939 0.743870 -vt 0.479227 0.743870 -vt 0.159539 0.832193 -vt 0.312808 0.832193 -vt 0.205520 0.740231 -vt 0.159539 0.740231 -vt 0.205520 0.832193 -vt 0.264229 0.442193 -vt 0.264229 0.227617 -vt 0.356190 0.227617 -vt 0.126287 0.442193 -vt 0.126287 0.227617 -vt 0.494132 0.442193 -vt 0.494132 0.227617 -vt 0.586094 0.227617 -vt 0.356190 0.442193 -vt 0.126287 0.135655 -vt 0.264229 0.534154 -vt 0.146421 0.942265 -vt 0.162677 0.935531 -vt 0.168543 0.949692 -vt 0.169411 0.919275 -vt 0.183571 0.925140 -vt 0.162677 0.903018 -vt 0.176838 0.897153 -vt 0.146421 0.896284 -vt 0.152286 0.882124 -vt 0.130164 0.903018 -vt 0.124299 0.888858 -vt 0.123430 0.919275 -vt 0.109270 0.913409 -vt 0.130164 0.935531 -vt 0.140555 0.956425 -vt 0.116004 0.941397 -vt 0.877669 0.046860 -vt 0.874655 0.047419 -vt 0.874234 0.036760 -vt 0.877248 0.036200 -vt 0.873813 0.026100 -vt 0.878090 0.057519 -vt 0.875077 0.058079 -vt 0.878512 0.068178 -vt 0.878933 0.078838 -vt 0.875919 0.079397 -vt 0.875498 0.068738 -vt 0.879354 0.089497 -vt 0.876340 0.090057 -vt 0.879775 0.100156 -vt 0.881039 0.132135 -vt 0.878025 0.132694 -vt 0.877604 0.122035 -vt 0.880617 0.121475 -vt 0.877183 0.111376 -vt 0.881460 0.142794 -vt 0.878446 0.143354 -vt 0.881881 0.153453 -vt 0.882303 0.164113 -vt 0.879289 0.164673 -vt 0.878868 0.154013 -vt 0.882724 0.174772 -vt 0.879710 0.175332 -vt 0.883145 0.185432 -vt 0.876762 0.100716 -vt 0.880196 0.110816 -vt 0.874899 0.015161 -vt 0.877913 0.014602 -vt 0.876827 0.025541 -vt 0.884409 0.217410 -vt 0.881395 0.217970 -vt 0.880974 0.207310 -vt 0.883987 0.206751 -vt 0.880552 0.196651 -vt 0.884830 0.228069 -vt 0.881816 0.228629 -vt 0.885251 0.238729 -vt 0.885672 0.249388 -vt 0.882659 0.249948 -vt 0.882238 0.239289 -vt 0.886094 0.260048 -vt 0.883080 0.260608 -vt 0.886515 0.270707 -vt 0.887779 0.302686 -vt 0.884765 0.303245 -vt 0.884344 0.292586 -vt 0.887357 0.292026 -vt 0.883923 0.281927 -vt 0.888200 0.313345 -vt 0.885186 0.313905 -vt 0.888622 0.324005 -vt 0.889043 0.334664 -vt 0.886029 0.335224 -vt 0.885608 0.324564 -vt 0.889464 0.345323 -vt 0.886450 0.345883 -vt 0.889885 0.355983 -vt 0.886936 0.281367 -vt 0.883501 0.271267 -vt 0.883566 0.196091 -vt 0.880131 0.185991 -vt 0.890307 0.366642 -vt 0.887293 0.367202 -vt 0.886872 0.356543 -vt 0.890866 0.369656 -vt 0.887853 0.370216 -vt 0.737137 0.398213 -vt 0.736577 0.395198 -vt 0.541724 0.779480 -vt 0.543484 0.775231 -vt 0.552154 0.778823 -vt 0.533838 0.836312 -vt 0.538327 0.825474 -vt 0.540495 0.827641 -vt 0.560003 0.847149 -vt 0.564492 0.836311 -vt 0.571572 0.839244 -vt 0.537846 0.752776 -vt 0.542094 0.754536 -vt 0.538502 0.763206 -vt 0.549165 0.851638 -vt 0.549165 0.848573 -vt 0.557835 0.844982 -vt 0.560003 0.825474 -vt 0.567083 0.822541 -vt 0.534254 0.766931 -vt 0.538502 0.765171 -vt 0.542094 0.773842 -vt 0.549165 0.820985 -vt 0.549165 0.824050 -vt 0.552097 0.813905 -vt 0.555879 0.783071 -vt 0.554119 0.778823 -vt 0.562790 0.775232 -vt 0.538327 0.847149 -vt 0.540495 0.844982 -vt 0.535394 0.818394 -vt 0.553137 0.773385 -vt 0.559639 0.770691 -vt 0.557835 0.827641 -vt 0.526758 0.833379 -vt 0.536903 0.836312 -vt 0.564549 0.748898 -vt 0.562790 0.753146 -vt 0.554119 0.749554 -vt 0.531247 0.850082 -vt 0.562935 0.854229 -vt 0.546232 0.858719 -vt 0.572019 0.761446 -vt 0.567771 0.763206 -vt 0.564179 0.754536 -vt 0.561426 0.836311 -vt 0.568428 0.775601 -vt 0.564180 0.773842 -vt 0.567771 0.765171 -vt 0.550394 0.745306 -vt 0.552154 0.749554 -vt 0.543484 0.753146 -vt 0.546634 0.770691 -vt 0.553137 0.754992 -vt 0.559639 0.757686 -vt 0.562333 0.764189 -vt 0.546634 0.757686 -vt 0.543940 0.764189 -vt 0.867378 0.633716 -vt 0.867378 0.777789 -vt 0.760090 0.777789 -vt 0.867378 0.962029 -vt 0.760090 0.962029 -vt 0.760090 0.449477 -vt 0.867378 0.449477 -vt 0.402749 0.048192 -vt 0.556782 0.048192 -vt 0.556782 0.094173 -vt 0.248716 0.048192 -vt 0.402749 0.094173 -vt 0.248716 0.094173 -vt 0.140338 0.094173 -vt 0.140338 0.048192 -vt 0.665160 0.048192 -vt 0.665160 0.094173 -vt 0.278815 0.947502 -vt 0.295405 0.930913 -vt 0.306243 0.941750 -vt 0.295405 0.907451 -vt 0.310732 0.907451 -vt 0.306243 0.896613 -vt 0.278815 0.890862 -vt 0.278815 0.875535 -vt 0.255354 0.890862 -vt 0.238764 0.907451 -vt 0.227926 0.896613 -vt 0.238764 0.930913 -vt 0.223437 0.930913 -vt 0.276469 0.896526 -vt 0.257700 0.896526 -vt 0.255354 0.962829 -vt 0.255354 0.947502 -vt 0.244516 0.958340 -vt 0.621935 0.742318 -vt 0.621935 0.750764 -vt 0.613254 0.749075 -vt 0.621935 0.725426 -vt 0.621935 0.733872 -vt 0.613254 0.732182 -vt 0.621935 0.776102 -vt 0.621935 0.784548 -vt 0.613254 0.782859 -vt 0.621935 0.759210 -vt 0.621935 0.767656 -vt 0.613254 0.765967 -vt 0.613254 0.740628 -vt 0.613254 0.723736 -vt 0.613254 0.718669 -vt 0.613254 0.774413 -vt 0.613254 0.769345 -vt 0.674046 0.742318 -vt 0.674046 0.750764 -vt 0.674046 0.725426 -vt 0.674046 0.733872 -vt 0.674046 0.776102 -vt 0.674046 0.759210 -vt 0.621935 0.716979 -vt 0.674046 0.716980 -vt 0.674046 0.767656 -vt 0.613254 0.757521 -vt 0.613254 0.752453 -vt 0.638688 0.827862 -vt 0.643756 0.827862 -vt 0.647340 0.836513 -vt 0.574922 0.909916 -vt 0.571671 0.913167 -vt 0.558399 0.899895 -vt 0.244428 0.928566 -vt 0.257700 0.941838 -vt 0.289741 0.928567 -vt 0.289741 0.909797 -vt 0.244428 0.909797 -vt 0.276469 0.941838 -vt 0.526358 0.931936 -vt 0.539630 0.899895 -vt 0.561650 0.948459 -vt 0.558399 0.945208 -vt 0.571671 0.931936 -vt 0.539630 0.949806 -vt 0.539630 0.945208 -vt 0.521760 0.913167 -vt 0.526358 0.913167 -vt 0.558399 0.895297 -vt 0.576269 0.931936 -vt 0.523107 0.935187 -vt 0.536379 0.896644 -vt 0.479227 0.919830 -vt 0.479227 0.802523 -vt 0.113558 0.786212 -vt 0.312808 0.740231 -vt 0.586094 0.442193 -vt 0.264229 0.135655 -vt 0.126287 0.534154 -vt 0.152286 0.956425 -vt 0.176838 0.941397 -vt 0.183571 0.913409 -vt 0.168543 0.888858 -vt 0.140555 0.882124 -vt 0.116004 0.897153 -vt 0.124299 0.949692 -vt 0.109270 0.925140 -vt 0.550394 0.783071 -vt 0.567083 0.850082 -vt 0.534254 0.761446 -vt 0.571572 0.833379 -vt 0.537846 0.775601 -vt 0.562935 0.818394 -vt 0.564549 0.779480 -vt 0.546232 0.813905 -vt 0.531247 0.822541 -vt 0.555879 0.745306 -vt 0.526758 0.839244 -vt 0.552097 0.858718 -vt 0.535394 0.854229 -vt 0.568428 0.752776 -vt 0.572019 0.766931 -vt 0.541724 0.748898 -vt 0.760090 0.633716 -vt 0.289653 0.958340 -vt 0.310732 0.930913 -vt 0.289653 0.880024 -vt 0.255354 0.875535 -vt 0.244516 0.880024 -vt 0.223437 0.907451 -vt 0.278815 0.962829 -vt 0.227926 0.941750 -vt 0.613254 0.744007 -vt 0.613254 0.727115 -vt 0.613254 0.777791 -vt 0.613254 0.760899 -vt 0.613254 0.735561 -vt 0.674046 0.784548 -vt 0.643756 0.840096 -vt 0.638688 0.840096 -vt 0.635105 0.836513 -vt 0.635105 0.831445 -vt 0.647340 0.831445 -vt 0.561650 0.896644 -vt 0.574922 0.935188 -vt 0.558399 0.949806 -vt 0.521760 0.931936 -vt 0.539630 0.895297 -vt 0.576269 0.913167 -vt 0.536379 0.948459 -vt 0.523107 0.909916 -vn -0.679300 0.281400 -0.677800 -vn -0.917000 0.379800 -0.121600 -vn -0.854400 0.353900 0.380600 -vn -0.854400 0.353900 -0.380600 -vn -0.917000 0.379800 0.121600 -vn -0.679300 0.281400 0.677800 -vn -0.353900 0.854400 0.380600 -vn -0.353900 0.854400 -0.380600 -vn -0.379800 0.917000 0.121600 -vn -0.281400 0.679300 0.677800 -vn -0.281400 0.679300 -0.677800 -vn -0.379800 0.917000 -0.121600 -vn 0.353900 0.854400 -0.380600 -vn 0.379800 0.917000 0.121600 -vn 0.281400 0.679300 0.677800 -vn 0.281400 0.679300 -0.677800 -vn 0.379800 0.917000 -0.121600 -vn 0.353900 0.854400 0.380600 -vn 0.679300 0.281400 0.677800 -vn 0.679300 0.281400 -0.677800 -vn 0.917000 0.379800 -0.121600 -vn 0.854400 0.353900 0.380600 -vn 0.854400 0.353900 -0.380600 -vn 0.917000 0.379800 0.121600 -vn 0.679300 -0.281400 -0.677800 -vn 0.917000 -0.379800 -0.121600 -vn 0.854400 -0.353900 0.380600 -vn 0.854400 -0.353900 -0.380600 -vn 0.917000 -0.379800 0.121600 -vn 0.679300 -0.281400 0.677800 -vn 0.353900 -0.854400 -0.380600 -vn 0.379800 -0.917000 0.121600 -vn 0.281400 -0.679300 0.677800 -vn 0.281400 -0.679300 -0.677800 -vn 0.379800 -0.917000 -0.121600 -vn 0.353900 -0.854400 0.380600 -vn -0.353900 -0.854400 -0.380600 -vn -0.379800 -0.917000 0.121600 -vn -0.281400 -0.679300 0.677800 -vn -0.281400 -0.679300 -0.677800 -vn -0.379800 -0.917000 -0.121600 -vn -0.353900 -0.854400 0.380600 -vn -0.283900 0.117600 0.951600 -vn -0.283900 0.117600 -0.951600 -vn -0.117600 0.283900 0.951600 -vn -0.117600 0.283900 -0.951600 -vn 0.117600 0.283900 -0.951600 -vn 0.117600 0.283900 0.951600 -vn 0.283900 0.117600 0.951600 -vn 0.283900 0.117600 -0.951600 -vn 0.283900 -0.117600 0.951600 -vn 0.283900 -0.117600 -0.951600 -vn 0.117600 -0.283900 0.951600 -vn 0.117600 -0.283900 -0.951600 -vn -0.117600 -0.283900 0.951600 -vn -0.117600 -0.283900 -0.951600 -vn -0.679300 -0.281400 -0.677800 -vn -0.917000 -0.379800 -0.121600 -vn -0.854400 -0.353900 0.380600 -vn -0.283900 -0.117600 0.951600 -vn -0.283900 -0.117600 -0.951600 -vn -0.854400 -0.353900 -0.380600 -vn -0.917000 -0.379800 0.121600 -vn -0.679300 -0.281400 0.677800 -vn 0.382700 0.923900 0.000000 -vn 0.923900 0.382700 0.000000 -vn 0.923900 -0.382700 0.000000 -vn 0.382700 -0.923900 0.000000 -vn -0.382700 -0.923900 0.000000 -vn -0.923900 -0.382700 0.000000 -vn -0.923900 0.382700 0.000000 -vn -0.382700 0.923900 -0.000000 -vn 0.000000 1.000000 0.000000 -vn 1.000000 0.000000 0.000000 -vn -1.000000 0.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 0.000000 0.000000 1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.382700 0.000000 -0.923900 -vn 0.923900 0.000000 -0.382700 -vn 0.923900 0.000000 0.382700 -vn 0.382700 0.000000 0.923900 -vn -0.382700 0.000000 0.923900 -vn -0.923900 0.000000 0.382700 -vn -0.382700 0.000000 -0.923900 -vn -0.923900 0.000000 -0.382700 -vn -0.325800 0.524400 -0.786600 -vn 0.325800 0.524400 -0.786600 -vn 0.786600 0.524400 0.325800 -vn -0.325800 0.524400 0.786600 -vn -0.786600 0.524400 -0.325800 -vn 0.786600 0.524400 -0.325800 -vn 0.325800 0.524400 0.786600 -vn -0.786600 0.524400 0.325800 -vn 0.998300 0.000000 0.058600 -vn -0.998300 0.000000 0.058600 -vn 0.000000 0.995000 -0.099500 -vn 0.000000 0.995000 0.099500 -vn 0.000000 0.141400 0.989900 -vn 0.000000 0.141400 -0.989900 -vn 0.337800 0.540600 0.770400 -vn 0.815600 -0.504700 0.283000 -vn -0.337800 -0.937700 0.081100 -vn -0.815600 0.107600 0.568500 -vn 0.815600 0.107600 0.568500 -vn 0.337800 -0.937700 0.081100 -vn -0.815600 -0.504700 0.283000 -vn 0.382700 0.837300 0.390400 -vn 0.923900 -0.346800 -0.161700 -vn -0.382700 -0.837300 -0.390400 -vn -0.923900 0.346800 0.161700 -vn 0.923900 0.346800 0.161700 -vn 0.382700 -0.837300 -0.390400 -vn -0.923900 -0.346800 -0.161700 -vn -0.382700 0.837300 0.390400 -vn -0.337800 0.540600 0.770400 -vn 0.000000 -0.422600 0.906300 -s off -f 7/1/1 6/2/1 14/3/1 -f 4/4/2 12/5/2 13/6/2 -f 2/7/3 10/8/3 11/9/3 -f 5/10/4 13/6/4 14/3/4 -f 3/11/5 11/9/5 12/5/5 -f 1/12/6 9/13/6 10/8/6 -f 10/7/7 17/8/7 18/9/7 -f 13/10/8 20/6/8 21/3/8 -f 12/4/9 11/11/9 18/9/9 -f 9/12/10 16/13/10 17/8/10 -f 15/1/11 14/2/11 21/3/11 -f 12/4/12 19/5/12 20/6/12 -f 21/2/13 20/10/13 28/6/13 -f 18/11/14 26/9/14 27/5/14 -f 16/12/15 24/13/15 25/8/15 -f 21/2/16 29/3/16 30/14/16 -f 19/4/17 27/5/17 28/6/17 -f 17/7/18 25/8/18 26/9/18 -f 25/7/19 24/12/19 31/13/19 -f 30/1/20 29/2/20 36/3/20 -f 27/4/21 34/5/21 35/6/21 -f 25/7/22 32/8/22 33/9/22 -f 29/2/23 28/10/23 35/6/23 -f 26/11/24 33/9/24 34/5/24 -f 36/2/25 43/3/25 44/14/25 -f 34/4/26 41/5/26 42/6/26 -f 32/7/27 39/8/27 40/9/27 -f 36/2/28 35/10/28 42/6/28 -f 34/4/29 33/11/29 40/9/29 -f 32/7/30 31/12/30 38/13/30 -f 42/10/31 49/6/31 50/3/31 -f 41/4/32 40/11/32 47/9/32 -f 38/12/33 45/13/33 46/8/33 -f 44/1/34 43/2/34 50/3/34 -f 41/4/35 48/5/35 49/6/35 -f 39/7/36 46/8/36 47/9/36 -f 50/2/37 49/10/37 56/6/37 -f 47/11/38 54/9/38 55/5/38 -f 45/12/39 52/13/39 53/8/39 -f 51/1/40 50/2/40 57/3/40 -f 48/4/41 55/5/41 56/6/41 -f 46/7/42 53/8/42 54/9/42 -f 1/12/43 23/15/43 9/13/43 -f 8/16/44 7/1/44 15/14/44 -f 9/12/45 23/15/45 16/13/45 -f 8/16/46 15/1/46 22/14/46 -f 8/16/47 22/1/47 30/14/47 -f 16/12/48 23/15/48 24/13/48 -f 24/12/49 23/15/49 31/13/49 -f 8/16/50 30/1/50 37/14/50 -f 31/12/51 23/15/51 38/13/51 -f 8/16/52 37/1/52 44/14/52 -f 38/12/53 23/15/53 45/13/53 -f 8/16/54 44/1/54 51/14/54 -f 45/12/55 23/15/55 52/13/55 -f 8/16/56 51/1/56 58/14/56 -f 57/2/57 6/3/57 7/14/57 -f 55/4/58 4/5/58 5/6/58 -f 54/11/59 53/7/59 2/8/59 -f 52/12/60 23/15/60 1/13/60 -f 8/16/61 58/1/61 7/14/61 -f 56/10/62 5/6/62 6/3/62 -f 54/11/63 3/9/63 4/5/63 -f 53/7/64 52/12/64 1/13/64 -f 87/17/65 59/18/65 75/19/65 -f 60/20/65 83/21/65 75/19/65 -f 76/22/66 61/23/66 88/24/66 -f 60/20/66 61/23/66 76/22/66 -f 88/17/67 61/18/67 77/19/67 -f 62/20/67 84/21/67 77/19/67 -f 62/20/68 63/23/68 78/22/68 -f 78/22/68 63/23/68 89/24/68 -f 89/17/69 63/18/69 79/19/69 -f 64/20/69 85/21/69 79/19/69 -f 64/20/70 65/23/70 80/22/70 -f 80/22/70 65/23/70 90/24/70 -f 90/17/71 65/18/71 81/19/71 -f 66/20/71 86/21/71 81/19/71 -f 66/20/72 59/23/72 82/22/72 -f 82/22/72 59/23/72 87/24/72 -f 92/25/73 97/26/73 65/27/73 -f 99/25/74 94/28/74 59/29/74 -f 61/27/73 91/25/73 100/28/73 -f 63/27/74 93/25/74 101/28/74 -f 110/30/75 109/31/75 107/32/75 -f 114/33/76 113/34/76 109/31/76 -f 112/35/74 111/36/74 113/37/74 -f 108/38/77 107/32/77 111/36/77 -f 109/31/78 113/34/78 111/39/78 -f 114/33/73 110/30/73 108/40/73 -f 116/41/79 118/42/79 117/43/79 -f 118/42/80 120/44/80 119/45/80 -f 120/44/81 122/46/81 121/47/81 -f 122/46/82 124/48/82 123/49/82 -f 124/48/83 126/50/83 125/51/83 -f 126/50/84 128/52/84 127/53/84 -f 130/54/85 116/41/85 115/55/85 -f 128/52/86 130/54/86 129/56/86 -f 128/52/73 124/48/73 120/44/73 -f 134/57/81 137/58/81 135/59/81 -f 132/60/82 135/59/82 133/61/82 -f 137/58/80 134/57/80 136/62/80 -f 138/63/79 136/62/79 139/64/79 -f 141/65/85 148/66/85 140/67/85 -f 148/66/86 141/65/86 147/68/86 -f 155/69/84 147/68/84 154/70/84 -f 160/71/81 157/72/81 159/73/81 -f 163/74/82 159/73/82 161/75/82 -f 157/72/80 160/71/80 158/76/80 -f 156/77/79 158/76/79 153/78/79 -f 151/79/85 149/80/85 152/81/85 -f 149/80/86 151/79/86 150/82/86 -f 145/83/84 150/82/84 146/84/84 -f 162/85/83 154/70/83 164/86/83 -f 142/87/83 143/88/83 131/89/83 -f 177/90/81 174/91/81 176/92/81 -f 179/93/82 176/92/82 178/94/82 -f 174/91/80 177/90/80 175/95/80 -f 173/96/79 175/95/79 172/97/79 -f 170/98/85 168/99/85 171/100/85 -f 168/99/86 170/98/86 169/101/86 -f 166/102/84 169/101/84 167/103/84 -f 193/104/81 190/105/81 192/106/81 -f 195/107/82 192/106/82 194/108/82 -f 190/105/80 193/104/80 191/109/80 -f 189/110/79 191/109/79 188/111/79 -f 186/112/85 184/113/85 187/114/85 -f 184/113/86 186/112/86 185/115/86 -f 182/116/84 185/115/84 183/117/84 -f 196/118/83 194/108/83 165/119/83 -f 180/120/83 178/94/83 144/121/83 -f 198/122/83 197/123/83 181/124/83 -f 200/125/77 199/126/77 197/123/77 -f 202/127/77 201/128/77 197/123/77 -f 225/129/86 229/130/86 228/131/86 -f 216/132/73 214/133/73 223/134/73 -f 206/135/79 208/136/79 207/137/79 -f 223/138/83 231/139/83 230/140/83 -f 220/141/73 226/142/73 203/143/73 -f 208/136/80 210/144/80 209/145/80 -f 224/146/84 230/147/84 229/148/84 -f 212/149/73 222/150/73 223/134/73 -f 210/144/81 212/149/81 211/151/81 -f 226/152/85 228/153/85 227/154/85 -f 218/155/73 225/156/73 226/142/73 -f 212/149/82 214/133/82 213/157/82 -f 228/153/87 236/158/87 235/159/87 -f 212/149/73 210/144/73 221/160/73 -f 214/133/83 216/132/83 215/161/83 -f 218/155/73 216/132/73 224/162/73 -f 221/163/81 233/164/81 232/165/81 -f 216/132/84 218/155/84 217/166/84 -f 208/136/73 206/135/73 203/143/73 -f 220/141/85 206/135/85 205/167/85 -f 218/155/86 220/141/86 219/168/86 -f 204/169/80 234/170/80 233/171/80 -f 208/136/73 204/172/73 221/160/73 -f 203/173/79 227/174/79 234/175/79 -f 222/176/82 232/177/82 231/178/82 -f 237/179/73 240/180/73 241/181/73 -f 227/174/88 235/159/88 242/182/88 -f 233/164/89 241/181/89 240/180/89 -f 230/140/90 231/139/90 239/183/90 -f 229/130/91 237/179/91 236/158/91 -f 233/171/92 234/170/92 242/182/92 -f 232/177/93 240/180/93 239/183/93 -f 230/147/94 238/184/94 237/179/94 -f 243/185/77 245/186/77 246/187/77 -f 249/188/95 250/189/95 246/187/95 -f 248/190/96 247/191/96 243/185/96 -f 256/192/97 254/193/97 253/194/97 -f 252/195/98 256/192/98 255/196/98 -f 251/197/99 257/198/99 258/199/99 -f 254/193/100 260/200/100 259/201/100 -f 262/202/65 264/203/65 263/204/65 -f 264/203/66 266/205/66 265/206/66 -f 265/207/67 266/205/67 268/208/67 -f 267/209/68 268/208/68 270/210/68 -f 270/210/69 272/211/69 271/212/69 -f 272/211/70 274/213/70 273/214/70 -f 268/208/77 304/215/77 305/216/77 -f 275/217/72 276/218/72 262/202/72 -f 274/213/71 276/218/71 275/219/71 -f 285/220/101 292/221/101 283/222/101 -f 287/223/102 286/224/102 282/225/102 -f 289/226/103 288/227/103 280/228/103 -f 291/229/104 290/230/104 278/231/104 -f 286/224/105 285/220/105 284/232/105 -f 287/223/106 281/233/106 280/234/106 -f 289/226/107 279/235/107 278/236/107 -f 285/220/108 300/237/108 299/238/108 -f 287/223/109 297/239/109 298/240/109 -f 288/227/110 289/226/110 295/241/110 -f 290/230/111 291/229/111 293/242/111 -f 286/224/112 298/240/112 300/237/112 -f 288/243/113 296/244/113 297/239/113 -f 290/230/114 294/245/114 295/241/114 -f 291/229/115 292/221/115 299/238/115 -f 291/229/116 277/246/116 283/247/116 -f 279/248/117 280/249/117 282/250/117 -f 303/251/67 311/252/67 312/253/67 -f 274/213/77 307/254/77 308/255/77 -f 264/203/77 301/256/77 303/257/77 -f 270/210/77 305/216/77 306/258/77 -f 276/218/77 308/255/77 302/259/77 -f 264/203/77 262/202/77 302/259/77 -f 266/205/77 303/257/77 304/215/77 -f 272/211/77 306/258/77 307/254/77 -f 315/260/77 313/261/77 311/252/77 -f 302/262/65 310/263/65 309/264/65 -f 308/265/72 316/266/72 310/263/72 -f 306/267/70 314/268/70 315/260/70 -f 304/269/68 312/253/68 313/261/68 -f 301/270/66 309/264/66 311/252/66 -f 307/271/71 315/260/71 316/266/71 -f 305/272/69 313/261/69 314/268/69 -f 15/14/1 7/1/1 14/3/1 -f 5/10/2 4/4/2 13/6/2 -f 3/11/3 2/7/3 11/9/3 -f 6/2/4 5/10/4 14/3/4 -f 4/4/5 3/11/5 12/5/5 -f 2/7/6 1/12/6 10/8/6 -f 11/11/7 10/7/7 18/9/7 -f 14/2/8 13/10/8 21/3/8 -f 19/5/9 12/4/9 18/9/9 -f 10/7/10 9/12/10 17/8/10 -f 22/14/11 15/1/11 21/3/11 -f 13/10/12 12/4/12 20/6/12 -f 29/3/13 21/2/13 28/6/13 -f 19/4/14 18/11/14 27/5/14 -f 17/7/15 16/12/15 25/8/15 -f 22/1/16 21/2/16 30/14/16 -f 20/10/17 19/4/17 28/6/17 -f 18/11/18 17/7/18 26/9/18 -f 32/8/19 25/7/19 31/13/19 -f 37/14/20 30/1/20 36/3/20 -f 28/10/21 27/4/21 35/6/21 -f 26/11/22 25/7/22 33/9/22 -f 36/3/23 29/2/23 35/6/23 -f 27/4/24 26/11/24 34/5/24 -f 37/1/25 36/2/25 44/14/25 -f 35/10/26 34/4/26 42/6/26 -f 33/11/27 32/7/27 40/9/27 -f 43/3/28 36/2/28 42/6/28 -f 41/5/29 34/4/29 40/9/29 -f 39/8/30 32/7/30 38/13/30 -f 43/2/31 42/10/31 50/3/31 -f 48/5/32 41/4/32 47/9/32 -f 39/7/33 38/12/33 46/8/33 -f 51/14/34 44/1/34 50/3/34 -f 42/10/35 41/4/35 49/6/35 -f 40/11/36 39/7/36 47/9/36 -f 57/3/37 50/2/37 56/6/37 -f 48/4/38 47/11/38 55/5/38 -f 46/7/39 45/12/39 53/8/39 -f 58/14/40 51/1/40 57/3/40 -f 49/10/41 48/4/41 56/6/41 -f 47/11/42 46/7/42 54/9/42 -f 58/1/57 57/2/57 7/14/57 -f 56/10/58 55/4/58 5/6/58 -f 3/9/59 54/11/59 2/8/59 -f 57/2/62 56/10/62 6/3/62 -f 55/4/63 54/11/63 4/5/63 -f 2/8/64 53/7/64 1/13/64 -f 67/273/65 87/17/65 75/19/65 -f 59/18/65 60/20/65 75/19/65 -f 68/274/66 76/22/66 88/24/66 -f 83/21/66 60/20/66 76/22/66 -f 69/273/67 88/17/67 77/19/67 -f 61/18/67 62/20/67 77/19/67 -f 84/21/68 62/20/68 78/22/68 -f 70/274/68 78/22/68 89/24/68 -f 71/273/69 89/17/69 79/19/69 -f 63/18/69 64/20/69 79/19/69 -f 85/21/70 64/20/70 80/22/70 -f 72/274/70 80/22/70 90/24/70 -f 73/273/71 90/17/71 81/19/71 -f 65/18/71 66/20/71 81/19/71 -f 86/21/72 66/20/72 82/22/72 -f 74/274/72 82/22/72 87/24/72 -f 65/27/73 102/28/73 92/25/73 -f 104/275/73 92/25/73 102/28/73 -f 97/26/73 90/276/73 65/27/73 -f 87/26/74 59/29/74 95/276/74 -f 99/25/74 106/275/74 94/28/74 -f 94/28/74 95/276/74 59/29/74 -f 103/275/73 100/28/73 91/25/73 -f 61/27/73 88/276/73 98/26/73 -f 98/26/73 91/25/73 61/27/73 -f 105/275/74 101/28/74 93/25/74 -f 63/27/74 89/276/74 96/26/74 -f 96/26/74 93/25/74 63/27/74 -f 108/38/75 110/30/75 107/32/75 -f 110/30/76 114/33/76 109/31/76 -f 114/277/74 112/35/74 113/37/74 -f 112/35/77 108/38/77 111/36/77 -f 107/278/78 109/31/78 111/39/78 -f 112/279/73 114/33/73 108/40/73 -f 115/280/79 116/41/79 117/43/79 -f 117/281/80 118/42/80 119/45/80 -f 119/282/81 120/44/81 121/47/81 -f 121/283/82 122/46/82 123/49/82 -f 123/284/83 124/48/83 125/51/83 -f 125/285/84 126/50/84 127/53/84 -f 129/286/85 130/54/85 115/55/85 -f 127/287/86 128/52/86 129/56/86 -f 120/44/73 118/42/73 128/52/73 -f 116/41/73 130/54/73 128/52/73 -f 128/52/73 126/50/73 124/48/73 -f 124/48/73 122/46/73 120/44/73 -f 118/42/73 116/41/73 128/52/73 -f 132/60/81 134/57/81 135/59/81 -f 131/89/82 132/60/82 133/61/82 -f 138/63/80 137/58/80 136/62/80 -f 140/67/79 138/63/79 139/64/79 -f 139/64/85 141/65/85 140/67/85 -f 155/69/86 148/66/86 147/68/86 -f 162/85/84 155/69/84 154/70/84 -f 163/74/81 160/71/81 159/73/81 -f 164/86/82 163/74/82 161/75/82 -f 156/77/80 157/72/80 158/76/80 -f 152/81/79 156/77/79 153/78/79 -f 153/78/85 151/79/85 152/81/85 -f 145/83/86 149/80/86 150/82/86 -f 144/121/84 145/83/84 146/84/84 -f 161/75/83 162/85/83 164/86/83 -f 133/61/83 142/87/83 131/89/83 -f 179/93/81 177/90/81 176/92/81 -f 180/120/82 179/93/82 178/94/82 -f 173/96/80 174/91/80 175/95/80 -f 171/100/79 173/96/79 172/97/79 -f 172/97/85 170/98/85 171/100/85 -f 166/102/86 168/99/86 169/101/86 -f 165/119/84 166/102/84 167/103/84 -f 195/107/81 193/104/81 192/106/81 -f 196/118/82 195/107/82 194/108/82 -f 189/110/80 190/105/80 191/109/80 -f 187/114/79 189/110/79 188/111/79 -f 188/111/85 186/112/85 187/114/85 -f 182/116/86 184/113/86 185/115/86 -f 181/124/84 182/116/84 183/117/84 -f 167/103/83 196/118/83 165/119/83 -f 146/84/83 180/120/83 144/121/83 -f 183/117/83 198/122/83 181/124/83 -f 198/122/77 200/125/77 197/123/77 -f 199/126/77 202/127/77 197/123/77 -f 226/288/86 225/129/86 228/131/86 -f 224/162/73 216/132/73 223/134/73 -f 205/289/79 206/135/79 207/137/79 -f 224/290/83 223/138/83 230/140/83 -f 206/135/73 220/141/73 203/143/73 -f 207/291/80 208/136/80 209/145/80 -f 225/292/84 224/146/84 229/148/84 -f 214/133/73 212/149/73 223/134/73 -f 209/293/81 210/144/81 211/151/81 -f 203/294/85 226/152/85 227/154/85 -f 220/141/73 218/155/73 226/142/73 -f 211/295/82 212/149/82 213/157/82 -f 227/154/87 228/153/87 235/159/87 -f 222/150/73 212/149/73 221/160/73 -f 213/296/83 214/133/83 215/161/83 -f 225/156/73 218/155/73 224/162/73 -f 222/297/81 221/163/81 232/165/81 -f 215/298/84 216/132/84 217/166/84 -f 204/172/73 208/136/73 203/143/73 -f 219/299/85 220/141/85 205/167/85 -f 217/300/86 218/155/86 219/168/86 -f 221/301/80 204/169/80 233/171/80 -f 210/144/73 208/136/73 221/160/73 -f 204/302/79 203/173/79 234/175/79 -f 223/303/82 222/176/82 231/178/82 -f 241/181/73 242/182/73 237/179/73 -f 235/159/73 236/158/73 237/179/73 -f 237/179/73 238/184/73 239/183/73 -f 239/183/73 240/180/73 237/179/73 -f 242/182/73 235/159/73 237/179/73 -f 234/175/88 227/174/88 242/182/88 -f 232/165/89 233/164/89 240/180/89 -f 238/184/90 230/140/90 239/183/90 -f 228/131/91 229/130/91 236/158/91 -f 241/181/92 233/171/92 242/182/92 -f 231/178/93 232/177/93 239/183/93 -f 229/148/94 230/147/94 237/179/94 -f 244/304/77 243/185/77 246/187/77 -f 245/186/95 249/188/95 246/187/95 -f 244/304/96 248/190/96 243/185/96 -f 255/196/97 256/192/97 253/194/97 -f 251/197/98 252/195/98 255/196/98 -f 252/195/99 251/197/99 258/199/99 -f 253/194/100 254/193/100 259/201/100 -f 261/305/65 262/202/65 263/204/65 -f 263/306/66 264/203/66 265/206/66 -f 267/307/67 265/207/67 268/208/67 -f 269/308/68 267/209/68 270/210/68 -f 269/309/69 270/210/69 271/212/69 -f 271/310/70 272/211/70 273/214/70 -f 270/210/77 268/208/77 305/216/77 -f 261/311/72 275/217/72 262/202/72 -f 273/312/71 274/213/71 275/219/71 -f 284/313/101 285/220/101 283/222/101 -f 281/314/102 287/223/102 282/225/102 -f 279/315/103 289/226/103 280/228/103 -f 277/316/104 291/229/104 278/231/104 -f 282/317/105 286/224/105 284/232/105 -f 288/243/106 287/223/106 280/234/106 -f 290/230/107 289/226/107 278/236/107 -f 292/221/108 285/220/108 299/238/108 -f 286/224/109 287/223/109 298/240/109 -f 296/318/110 288/227/110 295/241/110 -f 294/245/111 290/230/111 293/242/111 -f 285/220/112 286/224/112 300/237/112 -f 287/223/113 288/243/113 297/239/113 -f 289/226/114 290/230/114 295/241/114 -f 293/242/115 291/229/115 299/238/115 -f 292/221/116 291/229/116 283/247/116 -f 282/250/117 284/319/117 283/320/117 -f 283/320/117 277/321/117 282/250/117 -f 278/322/117 279/248/117 282/250/117 -f 280/249/117 281/323/117 282/250/117 -f 282/250/117 277/321/117 278/322/117 -f 304/324/67 303/251/67 312/253/67 -f 276/218/77 274/213/77 308/255/77 -f 266/205/77 264/203/77 303/257/77 -f 272/211/77 270/210/77 306/258/77 -f 262/202/77 276/218/77 302/259/77 -f 301/256/77 264/203/77 302/259/77 -f 268/208/77 266/205/77 304/215/77 -f 274/213/77 272/211/77 307/254/77 -f 311/252/77 309/264/77 310/263/77 -f 310/263/77 316/266/77 311/252/77 -f 315/260/77 314/268/77 313/261/77 -f 313/261/77 312/253/77 311/252/77 -f 311/252/77 316/266/77 315/260/77 -f 301/325/65 302/262/65 309/264/65 -f 302/326/72 308/265/72 310/263/72 -f 307/327/70 306/267/70 315/260/70 -f 305/328/68 304/269/68 313/261/68 -f 303/329/66 301/270/66 311/252/66 -f 308/330/71 307/271/71 316/266/71 -f 306/331/69 305/272/69 314/268/69 diff --git a/src/main/resources/assets/hbm/models/pheodoors/cargo_door.obj b/src/main/resources/assets/hbm/models/pheodoors/cargo_door.obj new file mode 100644 index 000000000..734593a9c --- /dev/null +++ b/src/main/resources/assets/hbm/models/pheodoors/cargo_door.obj @@ -0,0 +1,408 @@ +# Blender 5.1.2 +# www.blender.org + +# Made By TheVitya2127 + +o DoorBot +v 0.125000 1.562500 1.500000 +v 0.125000 1.562500 1.375000 +v 0.125000 0.062500 1.500000 +v 0.125000 0.062500 1.375000 +v 0.000000 1.562500 1.500000 +v 0.000000 1.562500 1.375000 +v 0.000000 0.062500 1.500000 +v 0.000000 0.062500 1.375000 +v 0.125000 1.562500 -1.375000 +v 0.125000 1.562500 -1.500000 +v 0.125000 0.062500 -1.375000 +v 0.125000 0.062500 -1.500000 +v 0.000000 1.562500 -1.375000 +v 0.000000 1.562500 -1.500000 +v 0.000000 0.062500 -1.375000 +v 0.000000 0.062500 -1.500000 +v 0.125000 1.562500 1.375000 +v 0.125000 1.562500 -1.375000 +v 0.125000 1.437500 1.375000 +v 0.125000 1.437500 -1.375000 +v 0.000000 1.562500 1.375000 +v 0.000000 1.562500 -1.375000 +v 0.000000 1.437500 1.375000 +v 0.000000 1.437500 -1.375000 +v 0.125000 0.187500 1.375000 +v 0.125000 0.187500 -1.375000 +v 0.125000 0.062500 1.375000 +v 0.125000 0.062500 -1.375000 +v 0.000000 0.187500 1.375000 +v 0.000000 0.187500 -1.375000 +v 0.000000 0.062500 1.375000 +v 0.000000 0.062500 -1.375000 +v 0.062500 0.187500 1.375000 +v 0.062500 0.187500 -1.375000 +v 0.062500 1.437500 1.375000 +v 0.062500 1.437500 -1.375000 +v 0.062500 0.187500 1.375000 +v 0.062500 0.187500 -1.375000 +v 0.062500 1.437500 1.375000 +v 0.062500 1.437500 -1.375000 +vn 1.0000 -0.0000 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 -0.0000 -1.0000 +vt 0.923077 0.970588 +vt 0.884615 0.970588 +vt 0.884615 0.617647 +vt 0.923077 0.617647 +vt 0.923077 1.000000 +vt 0.884615 1.000000 +vt 0.923077 0.588235 +vt 0.884615 0.588235 +vt 0.038462 0.617647 +vt 0.038462 0.588235 +vt 0.884615 0.941176 +vt 0.038462 0.941176 +vt 0.038462 0.911765 +vt 0.884615 0.911765 +vt 0.038462 0.970588 +s 1 +usemtl m_ff3b3a90-0979-83d1-ee3c-810de9dcd956 +f 2/1/1 1/2/1 3/3/1 +f 2/1/1 3/3/1 4/4/1 +f 7/4/2 5/1/2 6/2/2 +f 7/4/2 6/2/2 8/3/2 +f 5/2/3 1/1/3 2/5/3 +f 5/2/3 2/5/3 6/6/3 +f 4/7/4 3/4/4 7/3/4 +f 4/7/4 7/3/4 8/8/4 +f 3/4/5 1/1/5 5/2/5 +f 3/4/5 5/2/5 7/3/5 +f 6/1/6 2/2/6 4/3/6 +f 6/1/6 4/3/6 8/4/6 +f 10/1/1 9/2/1 11/3/1 +f 10/1/1 11/3/1 12/4/1 +f 15/4/2 13/1/2 14/2/2 +f 15/4/2 14/2/2 16/3/2 +f 13/2/3 9/1/3 10/5/3 +f 13/2/3 10/5/3 14/6/3 +f 12/7/4 11/4/4 15/3/4 +f 12/7/4 15/3/4 16/8/4 +f 11/4/5 9/1/5 13/2/5 +f 11/4/5 13/2/5 15/3/5 +f 14/1/6 10/2/6 12/3/6 +f 14/1/6 12/3/6 16/4/6 +f 18/3/1 17/9/1 19/10/1 +f 18/3/1 19/10/1 20/8/1 +f 23/8/2 21/3/2 22/9/2 +f 23/8/2 22/9/2 24/10/2 +f 21/8/3 17/3/3 18/9/3 +f 21/8/3 18/9/3 22/10/3 +f 20/3/4 19/9/4 23/10/4 +f 20/3/4 23/10/4 24/8/4 +f 26/11/1 25/12/1 27/13/1 +f 26/11/1 27/13/1 28/14/1 +f 31/12/2 29/13/2 30/14/2 +f 31/12/2 30/14/2 32/11/2 +f 29/15/3 25/12/3 26/11/3 +f 29/15/3 26/11/3 30/2/3 +f 28/2/4 27/15/4 31/12/4 +f 28/2/4 31/12/4 32/11/4 +f 36/14/2 34/3/2 33/9/2 +f 36/14/2 33/9/2 35/13/2 +f 37/9/1 38/3/1 40/14/1 +f 37/9/1 40/14/1 39/13/1 +o DoorTop +v 0.000000 2.937500 1.375000 +v 0.000000 2.937500 -1.375000 +v 0.000000 2.812500 1.375000 +v 0.000000 2.812500 -1.375000 +v -0.125000 2.937500 1.375000 +v -0.125000 2.937500 -1.375000 +v -0.125000 2.812500 1.375000 +v -0.125000 2.812500 -1.375000 +v 0.000000 1.562500 1.375000 +v 0.000000 1.562500 -1.375000 +v 0.000000 1.437500 1.375000 +v 0.000000 1.437500 -1.375000 +v -0.125000 1.562500 1.375000 +v -0.125000 1.562500 -1.375000 +v -0.125000 1.437500 1.375000 +v -0.125000 1.437500 -1.375000 +v 0.000000 2.937500 1.500000 +v 0.000000 2.937500 1.375000 +v 0.000000 1.437500 1.500000 +v 0.000000 1.437500 1.375000 +v -0.125000 2.937500 1.500000 +v -0.125000 2.937500 1.375000 +v -0.125000 1.437500 1.500000 +v -0.125000 1.437500 1.375000 +v 0.000000 2.937500 -1.375000 +v 0.000000 2.937500 -1.500000 +v 0.000000 1.437500 -1.375000 +v 0.000000 1.437500 -1.500000 +v -0.125000 2.937500 -1.375000 +v -0.125000 2.937500 -1.500000 +v -0.125000 1.437500 -1.375000 +v -0.125000 1.437500 -1.500000 +v -0.062500 1.562500 1.375000 +v -0.062500 1.562500 -1.375000 +v -0.062500 2.812500 1.375000 +v -0.062500 2.812500 -1.375000 +v -0.062500 1.562500 1.375000 +v -0.062500 1.562500 -1.375000 +v -0.062500 2.812500 1.375000 +v -0.062500 2.812500 -1.375000 +vn 1.0000 -0.0000 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 -0.0000 -1.0000 +vt 0.884615 0.617647 +vt 0.038462 0.617647 +vt 0.038462 0.588235 +vt 0.884615 0.588235 +vt 0.884615 0.970588 +vt 0.038462 0.970588 +vt 0.038462 0.941176 +vt 0.884615 0.941176 +vt 0.038462 0.911765 +vt 0.884615 0.911765 +vt 0.923077 0.970588 +vt 0.923077 0.617647 +vt 0.923077 1.000000 +vt 0.884615 1.000000 +vt 0.923077 0.588235 +s 1 +usemtl m_ff3b3a90-0979-83d1-ee3c-810de9dcd956 +f 42/16/7 41/17/7 43/18/7 +f 42/16/7 43/18/7 44/19/7 +f 47/19/8 45/16/8 46/17/8 +f 47/19/8 46/17/8 48/18/8 +f 45/19/9 41/16/9 42/17/9 +f 45/19/9 42/17/9 46/18/9 +f 44/16/10 43/17/10 47/18/10 +f 44/16/10 47/18/10 48/19/10 +f 50/20/7 49/21/7 51/22/7 +f 50/20/7 51/22/7 52/23/7 +f 55/21/8 53/22/8 54/23/8 +f 55/21/8 54/23/8 56/20/8 +f 53/22/9 49/24/9 50/25/9 +f 53/22/9 50/25/9 54/23/9 +f 52/23/10 51/22/10 55/24/10 +f 52/23/10 55/24/10 56/25/10 +f 58/26/7 57/20/7 59/16/7 +f 58/26/7 59/16/7 60/27/7 +f 63/27/8 61/26/8 62/20/8 +f 63/27/8 62/20/8 64/16/8 +f 61/20/9 57/26/9 58/28/9 +f 61/20/9 58/28/9 62/29/9 +f 60/30/10 59/27/10 63/16/10 +f 60/30/10 63/16/10 64/19/10 +f 59/27/11 57/26/11 61/20/11 +f 59/27/11 61/20/11 63/16/11 +f 62/26/12 58/20/12 60/16/12 +f 62/26/12 60/16/12 64/27/12 +f 66/26/7 65/20/7 67/16/7 +f 66/26/7 67/16/7 68/27/7 +f 71/27/8 69/26/8 70/20/8 +f 71/27/8 70/20/8 72/16/8 +f 69/20/9 65/26/9 66/28/9 +f 69/20/9 66/28/9 70/29/9 +f 68/30/10 67/27/10 71/16/10 +f 68/30/10 71/16/10 72/19/10 +f 67/27/11 65/26/11 69/20/11 +f 67/27/11 69/20/11 71/16/11 +f 70/26/12 66/20/12 68/16/12 +f 70/26/12 68/16/12 72/27/12 +f 76/25/8 74/16/8 73/17/8 +f 76/25/8 73/17/8 75/24/8 +f 77/17/7 78/16/7 80/25/7 +f 77/17/7 80/25/7 79/24/7 +o Frame +v 0.312500 3.000000 -1.437500 +v 0.312500 3.000000 -1.500000 +v 0.250000 2.937500 -1.437500 +v 0.250000 2.937500 -1.500000 +v 0.125000 3.000000 -1.437500 +v 0.125000 3.000000 -1.500000 +v 0.125000 2.937500 -1.437500 +v 0.125000 2.937500 -1.500000 +v -0.125000 3.000000 -1.437500 +v -0.125000 3.000000 -1.500000 +v -0.125000 2.937500 -1.437500 +v -0.125000 2.937500 -1.500000 +v -0.312500 3.000000 -1.437500 +v -0.312500 3.000000 -1.500000 +v -0.250000 2.937500 -1.437500 +v -0.250000 2.937500 -1.500000 +v 0.312500 3.000000 1.437500 +v 0.312500 3.000000 -1.437500 +v 0.250000 2.937500 1.437500 +v 0.250000 2.937500 -1.437500 +v -0.312500 3.000000 1.437500 +v -0.312500 3.000000 -1.437500 +v -0.250000 2.937500 1.437500 +v -0.250000 2.937500 -1.437500 +v 0.312500 3.000000 1.500000 +v 0.312500 3.000000 1.437500 +v 0.250000 2.937500 1.500000 +v 0.250000 2.937500 1.437500 +v 0.125000 3.000000 1.500000 +v 0.125000 3.000000 1.437500 +v 0.125000 2.937500 1.500000 +v 0.125000 2.937500 1.437500 +v -0.125000 3.000000 1.500000 +v -0.125000 3.000000 1.437500 +v -0.125000 2.937500 1.500000 +v -0.125000 2.937500 1.437500 +v -0.312500 3.000000 1.500000 +v -0.312500 3.000000 1.437500 +v -0.250000 2.937500 1.500000 +v -0.250000 2.937500 1.437500 +v 0.250000 0.062500 1.500000 +v 0.250000 0.062500 -1.500000 +v 0.312500 0.000000 1.500000 +v 0.312500 -0.000000 -1.500000 +v -0.250000 0.062500 1.500000 +v -0.250000 0.062500 -1.500000 +v -0.312500 0.000000 1.500000 +v -0.312500 -0.000000 -1.500000 +vn 0.7071 -0.7071 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.7071 -0.7071 -0.0000 +vn 0.7071 0.7071 -0.0000 +vn -0.7071 0.7071 -0.0000 +vt 0.942308 0.279412 +vt 0.923077 0.279412 +vt 0.923077 0.264706 +vt 0.942308 0.264706 +vt 1.000000 0.264706 +vt 1.000000 0.279412 +vt 0.980769 0.279412 +vt 0.980769 0.264706 +vt 0.942308 0.250000 +vt 0.923077 0.235294 +vt 0.980769 0.235294 +vt 0.980769 0.250000 +vt 0.980769 0.294118 +vt 0.923077 0.294118 +vt 0.942308 0.220588 +vt 0.923077 0.220588 +vt 0.923077 0.205882 +vt 0.942308 0.205882 +vt 1.000000 0.205882 +vt 1.000000 0.220588 +vt 0.980769 0.220588 +vt 0.980769 0.205882 +vt 0.942308 0.191176 +vt 0.942308 0.176471 +vt 1.000000 0.176471 +vt 0.980769 0.191176 +vt 1.000000 0.235294 +vt 0.942308 0.235294 +vt 0.903846 0.147059 +vt 0.019231 0.147059 +vt 0.019231 0.132353 +vt 0.903846 0.132353 +vt 0.019231 0.014706 +vt 0.019231 0.000000 +vt 0.903846 0.000000 +vt 0.903846 0.014706 +vt 0.019231 0.294118 +vt 0.903846 0.294118 +vt 0.000000 0.161765 +vt 0.000000 0.279412 +vt 0.923077 0.161765 +vt 0.942308 0.455882 +vt 0.019231 0.455882 +vt 0.019231 0.441176 +vt 0.942308 0.441176 +vt 0.019231 0.588235 +vt 0.019231 0.573529 +vt 0.942308 0.573529 +vt 0.942308 0.588235 +vt 0.942308 0.294118 +vt 0.000000 0.426471 +vt 0.000000 0.308824 +vt 0.961538 0.308824 +vt 0.961538 0.426471 +s 1 +usemtl m_ff3b3a90-0979-83d1-ee3c-810de9dcd956 +f 82/31/13 81/32/13 83/33/13 +f 82/31/13 83/33/13 84/34/13 +f 87/35/14 85/36/14 86/37/14 +f 87/35/14 86/37/14 88/38/14 +f 83/39/15 81/40/15 85/41/15 +f 83/39/15 85/41/15 87/42/15 +f 85/43/16 81/44/16 82/32/16 +f 85/43/16 82/32/16 86/37/16 +f 84/34/17 83/39/17 87/42/17 +f 84/34/17 87/42/17 88/38/17 +f 86/37/18 82/32/18 84/34/18 +f 86/37/18 84/34/18 88/38/18 +f 90/45/19 89/46/19 91/47/19 +f 90/45/19 91/47/19 92/48/19 +f 95/49/20 93/50/20 94/51/20 +f 95/49/20 94/51/20 96/52/20 +f 91/53/15 89/54/15 93/55/15 +f 91/53/15 93/55/15 95/56/15 +f 93/57/16 89/58/16 90/45/16 +f 93/57/16 90/45/16 94/50/16 +f 92/48/17 91/53/17 95/56/17 +f 92/48/17 95/56/17 96/52/17 +f 94/50/18 90/45/18 92/48/18 +f 94/50/18 92/48/18 96/52/18 +f 98/59/13 97/60/13 99/61/13 +f 98/59/13 99/61/13 100/62/13 +f 103/63/20 101/64/20 102/65/20 +f 103/63/20 102/65/20 104/66/20 +f 101/67/16 97/60/16 98/59/16 +f 101/67/16 98/59/16 102/68/16 +f 100/62/17 99/61/17 103/63/17 +f 100/62/17 103/63/17 104/66/17 +f 99/69/15 97/60/15 101/67/15 +f 99/69/15 101/67/15 103/70/15 +f 102/68/18 98/59/18 100/71/18 +f 102/68/18 100/71/18 104/32/18 +f 106/31/13 105/32/13 107/33/13 +f 106/31/13 107/33/13 108/34/13 +f 111/35/14 109/36/14 110/37/14 +f 111/35/14 110/37/14 112/38/14 +f 107/39/15 105/40/15 109/41/15 +f 107/39/15 109/41/15 111/42/15 +f 109/43/16 105/44/16 106/32/16 +f 109/43/16 106/32/16 110/37/16 +f 108/34/17 107/39/17 111/42/17 +f 108/34/17 111/42/17 112/38/17 +f 110/37/18 106/32/18 108/34/18 +f 110/37/18 108/34/18 112/38/18 +f 114/45/19 113/46/19 115/47/19 +f 114/45/19 115/47/19 116/48/19 +f 119/49/20 117/50/20 118/51/20 +f 119/49/20 118/51/20 120/52/20 +f 115/53/15 113/54/15 117/55/15 +f 115/53/15 117/55/15 119/56/15 +f 117/57/16 113/58/16 114/45/16 +f 117/57/16 114/45/16 118/50/16 +f 116/48/17 115/53/17 119/56/17 +f 116/48/17 119/56/17 120/52/17 +f 118/50/18 114/45/18 116/48/18 +f 118/50/18 116/48/18 120/52/18 +f 122/72/21 121/73/21 123/74/21 +f 122/72/21 123/74/21 124/75/21 +f 127/76/22 125/77/22 126/78/22 +f 127/76/22 126/78/22 128/79/22 +f 125/77/16 121/73/16 122/72/16 +f 125/77/16 122/72/16 126/78/16 +f 124/75/17 123/74/17 127/67/17 +f 124/75/17 127/67/17 128/80/17 +f 123/74/15 121/81/15 125/82/15 +f 123/74/15 125/82/15 127/67/15 +f 126/83/18 122/84/18 124/75/18 +f 126/83/18 124/75/18 128/80/18 diff --git a/src/main/resources/assets/hbm/models/pheodoors/vehicle_door.obj b/src/main/resources/assets/hbm/models/pheodoors/vehicle_door.obj index 28c8da02a..9c98375f0 100644 --- a/src/main/resources/assets/hbm/models/pheodoors/vehicle_door.obj +++ b/src/main/resources/assets/hbm/models/pheodoors/vehicle_door.obj @@ -1,3205 +1,3369 @@ -# Blender v2.79 (sub 0) OBJ File: 'vehicle_door.blend' +# Blender 4.0.2 # www.blender.org -o Right -v -0.062500 1.562500 0.187500 -v -0.125000 1.562500 -0.125000 -v 0.187500 1.562500 -0.187500 -v -0.062500 2.062500 -0.187500 -v -0.062500 1.562500 -0.187500 -v -0.125000 2.062500 -0.125000 -v -0.125000 2.062500 0.125000 -v -0.125000 1.562500 0.125000 -v -0.062500 2.062500 0.187500 -v 0.187500 2.062500 0.187500 -v 0.187500 1.562500 0.187500 -v 0.187500 2.062500 -0.187500 -v -0.062500 2.562500 0.187500 -v -0.125000 2.562500 -0.125000 -v 0.187500 2.562500 -0.187500 -v -0.062500 3.062500 -0.187500 -v -0.062500 2.562500 -0.187500 -v -0.125000 3.062500 -0.125000 -v -0.125000 3.062500 0.125000 -v -0.125000 2.562500 0.125000 -v -0.062500 3.062500 0.187500 -v 0.187500 3.062500 0.187500 -v 0.187500 2.562500 0.187500 -v 0.187500 3.062500 -0.187500 -v -0.062500 3.562500 0.187501 -v -0.125000 3.562500 -0.124999 -v 0.187500 3.562500 -0.187499 -v -0.062500 4.062500 -0.187499 -v -0.062500 3.562500 -0.187499 -v -0.125000 4.062500 -0.124999 -v -0.125000 4.062500 0.125001 -v -0.125000 3.562500 0.125001 -v -0.062500 4.062500 0.187501 -v 0.187500 4.062500 0.187501 -v 0.187500 3.562500 0.187501 -v 0.187500 4.062500 -0.187499 -v -0.062500 4.562500 0.187501 -v -0.125000 4.562500 -0.124999 -v 0.187500 4.562500 -0.187499 -v -0.062500 5.062500 -0.187499 -v -0.062500 4.562500 -0.187499 -v -0.125000 5.062500 -0.124999 -v -0.125000 5.062500 0.125001 -v -0.125000 4.562500 0.125001 -v -0.062500 5.062500 0.187501 -v 0.187500 5.062500 0.187501 -v 0.187500 4.562500 0.187501 -v 0.187500 5.062500 -0.187499 -v -0.062500 5.562500 0.187501 -v -0.125000 5.562500 -0.124999 -v 0.187500 5.562500 -0.187499 -v -0.062500 5.937500 -0.187499 -v -0.062500 5.562500 -0.187499 -v -0.125000 5.937500 -0.124999 -v -0.125000 5.937500 0.125001 -v -0.125000 5.562500 0.125001 -v -0.062500 5.937500 0.187501 -v 0.187500 5.937500 0.187501 -v 0.187500 5.562500 0.187501 -v -0.062500 0.562500 0.187500 -v -0.125000 0.562500 -0.125000 -v 0.187500 0.562500 -0.187500 -v -0.062500 1.062500 -0.187500 -v -0.062500 0.562500 -0.187500 -v -0.125000 1.062500 -0.125000 -v -0.125000 1.062500 0.125000 -v -0.125000 0.562500 0.125000 -v -0.062500 1.062500 0.187500 -v 0.187500 1.062500 0.187500 -v 0.187500 0.562500 0.187500 -v 0.187500 1.062500 -0.187500 -v 0.187500 5.937500 -0.187499 -v 3.312500 0.062500 -0.187501 -v 0.187500 0.062500 -0.187500 -v 0.125000 5.937500 -0.124999 -v 0.125000 5.937500 0.125001 -v 0.125000 0.062500 -0.125000 -v 0.125000 0.062500 0.125000 -v 0.187500 5.937500 0.187501 -v 3.312500 5.937500 0.187500 -v 0.187500 0.062500 0.187500 -v 3.312500 0.062500 0.187499 -v 3.312500 5.250000 -0.187500 -v 0.312500 5.250000 -0.249999 -v 3.312500 5.250000 -0.250000 -v 0.312500 5.437500 -0.249999 -v 0.250000 5.437500 -0.187499 -v 3.312500 5.437500 -0.187500 -v 3.312500 5.437500 -0.250000 -v 3.312500 4.250000 -0.187500 -v 0.312500 4.250000 -0.249999 -v 3.312500 4.250000 -0.250000 -v 0.312500 4.437500 -0.249999 -v 0.250000 4.437500 -0.187499 -v 3.312500 4.437500 -0.187500 -v 3.312500 4.437500 -0.250000 -v 3.312500 3.250000 -0.187500 -v 0.312500 3.250000 -0.249999 -v 3.312500 3.250000 -0.250000 -v 0.312500 3.437500 -0.249999 -v 0.250000 3.437500 -0.187499 -v 3.312500 3.437500 -0.187500 -v 3.312500 3.437500 -0.250000 -v 3.312500 2.250000 -0.187501 -v 0.312500 2.250000 -0.250000 -v 3.312500 2.250000 -0.250001 -v 0.312500 2.437500 -0.250000 -v 0.250000 2.437500 -0.187500 -v 3.312500 2.437500 -0.187501 -v 3.312500 2.437500 -0.250001 -v 3.312500 1.250000 -0.187501 -v 0.312500 1.250000 -0.250000 -v 3.312500 1.250000 -0.250001 -v 0.312500 1.437500 -0.250000 -v 0.250000 1.437500 -0.187500 -v 3.312500 1.437500 -0.187501 -v 3.312500 1.437500 -0.250001 -v 3.312500 0.250000 -0.187501 -v 0.312500 0.250000 -0.250000 -v 3.312500 0.250000 -0.250001 -v 0.312500 0.437500 -0.250000 -v 0.250000 0.437500 -0.187500 -v 3.312500 0.437500 -0.187501 -v 3.312500 0.437500 -0.250001 -v 3.312500 5.250000 0.187500 -v 0.312500 5.250000 0.250001 -v 0.250000 5.250000 0.187501 -v 3.312500 5.250000 0.250000 -v 0.312500 5.437500 0.250001 -v 0.250000 5.437500 0.187501 -v 3.312500 5.437500 0.187500 -v 3.312500 5.437500 0.250000 -v 3.312500 4.250000 0.187500 -v 0.312500 4.250000 0.250001 -v 0.250000 4.250000 0.187501 -v 3.312500 4.250000 0.250000 -v 0.312500 4.437500 0.250001 -v 0.250000 4.437500 0.187501 -v 3.312500 4.437500 0.187500 -v 3.312500 4.437500 0.250000 -v 3.312500 3.250000 0.187500 -v 0.312500 3.250000 0.250001 -v 0.250000 3.250000 0.187501 -v 3.312500 3.250000 0.250000 -v 0.312500 3.437500 0.250001 -v 0.250000 3.437500 0.187501 -v 3.312500 3.437500 0.187500 -v 3.312500 3.437500 0.250000 -v 3.312500 2.250000 0.187499 -v 0.312500 2.250000 0.250000 -v 0.250000 2.250000 0.187500 -v 3.312500 2.250000 0.249999 -v 0.312500 2.437500 0.250000 -v 0.250000 2.437500 0.187500 -v 3.312500 2.437500 0.187499 -v 3.312500 2.437500 0.249999 -v 3.312500 1.250000 0.187499 -v 0.312500 1.250000 0.250000 -v 0.250000 1.250000 0.187500 -v 3.312500 1.250000 0.249999 -v 0.312500 1.437500 0.250000 -v 0.250000 1.437500 0.187500 -v 3.312500 1.437500 0.187499 -v 3.312500 1.437500 0.249999 -v 3.312500 0.250000 0.187499 -v 0.312500 0.250000 0.250000 -v 0.250000 0.250000 0.187500 -v 3.312500 0.250000 0.249999 -v 0.312500 0.437500 0.250000 -v 0.250000 0.437500 0.187500 -v 3.312500 0.437500 0.187499 -v 3.312500 0.437500 0.249999 -v 0.437500 1.500000 -0.187500 -v 0.562500 1.562500 -0.250000 -v 0.562500 1.500000 -0.187500 -v 0.562500 2.187500 -0.187500 -v 0.437500 2.125000 -0.250000 -v 0.437500 2.187500 -0.187500 -v 0.437500 1.562500 -0.250000 -v 0.437500 2.187500 -0.187500 -v 0.562500 2.125000 -0.250000 -v 0.562500 1.500000 -0.187500 -v 0.437500 2.500000 -0.187500 -v 0.562500 2.562500 -0.250000 -v 0.562500 2.500000 -0.187500 -v 0.562500 3.187500 -0.187499 -v 0.437500 3.125000 -0.249999 -v 0.437500 3.187500 -0.187499 -v 0.437500 2.562500 -0.250000 -v 0.437500 3.187500 -0.187499 -v 0.562500 3.125000 -0.249999 -v 0.562500 2.500000 -0.187500 -v 0.562500 1.562500 0.250000 -v 0.437500 1.500000 0.187500 -v 0.562500 1.500000 0.187500 -v 0.437500 2.125000 0.250000 -v 0.562500 2.187500 0.187500 -v 0.437500 2.187500 0.187500 -v 0.437500 1.562500 0.250000 -v 0.437500 2.187500 0.187500 -v 0.562500 1.500000 0.187500 -v 0.562500 2.125000 0.250000 -v 0.562500 2.562500 0.250000 -v 0.437500 2.500000 0.187500 -v 0.562500 2.500000 0.187500 -v 0.437500 3.125000 0.250001 -v 0.562500 3.187500 0.187501 -v 0.437500 3.187500 0.187501 -v 0.437500 2.562500 0.250000 -v 0.437500 3.187500 0.187501 -v 0.562500 2.500000 0.187500 -v 0.562500 3.125000 0.250001 -v 1.312500 0.468750 -0.312500 -v 0.437500 0.514515 -0.422985 -v 1.312500 0.514514 -0.422986 -v 0.437500 0.468750 -0.187500 -v 1.312500 0.468750 -0.187500 -v 1.312500 0.735485 -0.422986 -v 1.312500 0.781250 -0.312500 -v 0.437500 0.781250 -0.187500 -v 0.437500 0.468750 -0.312500 -v 1.312500 0.781250 -0.187500 -v 0.437500 0.781250 -0.312500 -v 0.437500 0.735485 -0.422985 -v 0.437500 0.625000 -0.468750 -v 1.312500 0.625000 -0.468750 -v 1.312500 0.625000 -0.187500 -v 3.312500 0.536612 -0.224112 -v 3.312500 0.625000 -0.187501 -v 1.312500 0.713388 -0.224112 -v 3.312500 0.713388 -0.224112 -v 1.312500 0.750000 -0.312500 -v 3.312500 0.750000 -0.312501 -v 1.312500 0.713388 -0.400889 -v 3.312500 0.713388 -0.400889 -v 1.312500 0.625000 -0.437500 -v 3.312500 0.625000 -0.437501 -v 1.312500 0.536612 -0.400889 -v 3.312500 0.536612 -0.400889 -v 1.312500 0.500000 -0.312500 -v 3.312500 0.500000 -0.312501 -v 1.312500 0.536612 -0.224112 -v 1.312500 0.468750 0.312500 -v 0.437500 0.514515 0.422985 -v 0.437500 0.468750 0.312500 -v 0.437500 0.468750 0.187500 -v 1.312500 0.468750 0.187500 -v 1.312500 0.781250 0.312500 -v 1.312500 0.625000 0.468750 -v 1.312500 0.514514 0.422985 -v 0.437500 0.781250 0.187500 -v 0.437500 0.781250 0.312500 -v 1.312500 0.781250 0.187500 -v 0.437500 0.735485 0.422985 -v 1.312500 0.735485 0.422985 -v 0.437500 0.625000 0.468750 -v 3.312500 0.536612 0.224111 -v 1.312500 0.625000 0.187500 -v 3.312500 0.625000 0.187499 -v 1.312500 0.713388 0.224111 -v 3.312500 0.713388 0.224111 -v 1.312500 0.750000 0.312500 -v 3.312500 0.750000 0.312499 -v 1.312500 0.713388 0.400888 -v 3.312500 0.713388 0.400888 -v 1.312500 0.625000 0.437500 -v 3.312500 0.625000 0.437499 -v 1.312500 0.536612 0.400888 -v 3.312500 0.536612 0.400888 -v 1.312500 0.500000 0.312500 -v 3.312500 0.500000 0.312499 -v 1.312500 0.536612 0.224111 -v 2.125000 1.500000 -0.187500 -v 3.187500 1.500000 -0.250000 -v 3.187500 1.500000 -0.187500 -v 3.187500 2.187500 -0.250000 -v 2.125000 2.187500 -0.250000 -v 2.125000 1.500000 -0.250000 -v 2.125000 2.187500 -0.187500 -v 3.187500 2.187500 -0.187500 -v 3.187500 1.500000 0.250000 -v 2.125000 1.500000 0.187500 -v 3.187500 1.500000 0.187500 -v 3.187500 2.187500 0.250000 -v 2.125000 2.187500 0.250000 -v 2.125000 1.500000 0.250000 -v 2.125000 2.187500 0.187500 -v 3.187500 2.187500 0.187500 -v 2.812500 2.125000 0.312499 -v 2.812500 1.562500 0.249999 -v 2.812500 1.562500 0.312499 -v 3.125000 1.562500 0.249999 -v 3.125000 2.125000 0.312499 -v 3.125000 1.562500 0.312499 -v 3.125000 2.125000 0.249999 -v 2.812500 2.125000 0.249999 -v 0.187500 5.937500 -0.187499 -v 3.312500 5.937500 -0.187500 -v 0.250000 5.250000 -0.187499 -v 0.250000 5.250000 -0.187499 -v 0.250000 5.437500 -0.187499 -v 0.250000 4.250000 -0.187499 -v 0.250000 4.250000 -0.187499 -v 0.250000 4.437500 -0.187499 -v 0.250000 3.250000 -0.187499 -v 0.250000 3.250000 -0.187499 -v 0.250000 3.437500 -0.187499 -v 0.250000 2.250000 -0.187500 -v 0.250000 2.250000 -0.187500 -v 0.250000 2.437500 -0.187500 -v 0.250000 1.250000 -0.187500 -v 0.250000 1.250000 -0.187500 -v 0.250000 1.437500 -0.187500 -v 0.250000 0.250000 -0.187500 -v 0.250000 0.250000 -0.187500 -v 0.250000 0.437500 -0.187500 -v 0.250000 5.250000 0.187501 -v 0.250000 5.437500 0.187501 -v 0.250000 4.250000 0.187501 -v 0.250000 4.437500 0.187501 -v 0.250000 3.250000 0.187501 -v 0.250000 3.437500 0.187501 -v 0.250000 2.250000 0.187500 -v 0.250000 2.437500 0.187500 -v 0.250000 1.250000 0.187500 -v 0.250000 1.437500 0.187500 -v 0.250000 0.250000 0.187500 -v 0.250000 0.437500 0.187500 -v 0.437500 1.500000 -0.187500 -v 0.562500 2.187500 -0.187500 -v 0.437500 2.500000 -0.187500 -v 0.562500 3.187500 -0.187499 -v 0.437500 1.500000 0.187500 -v 0.562500 2.187500 0.187500 -v 0.437500 2.500000 0.187500 -v 0.562500 3.187500 0.187501 -vt 0.221649 0.855670 -vt 0.208763 0.858247 -vt 0.206186 0.845361 -vt 0.185567 0.855670 -vt 0.206186 0.855670 -vt 0.185567 0.858247 -vt 0.185567 0.868557 -vt 0.206186 0.858247 -vt 0.206186 0.868557 -vt 0.242268 0.855670 -vt 0.221649 0.858247 -vt 0.221649 0.855670 -vt 0.242268 0.845361 -vt 0.221649 0.845361 -vt 0.170103 0.855670 -vt 0.185567 0.845361 -vt 0.182990 0.858247 -vt 0.296392 0.881443 -vt 0.283505 0.884021 -vt 0.280928 0.871134 -vt 0.260309 0.881443 -vt 0.280928 0.881443 -vt 0.260309 0.884021 -vt 0.260309 0.894330 -vt 0.280928 0.884021 -vt 0.280928 0.894330 -vt 0.317010 0.881443 -vt 0.296392 0.884021 -vt 0.296392 0.881443 -vt 0.317010 0.871134 -vt 0.296392 0.871134 -vt 0.244845 0.881443 -vt 0.260309 0.871134 -vt 0.257732 0.884021 -vt 0.221649 0.881443 -vt 0.208763 0.884021 -vt 0.206186 0.871134 -vt 0.185567 0.881443 -vt 0.206186 0.881443 -vt 0.185567 0.884021 -vt 0.185567 0.894330 -vt 0.206186 0.884021 -vt 0.206186 0.894330 -vt 0.242268 0.881443 -vt 0.221649 0.884021 -vt 0.221649 0.881443 -vt 0.242268 0.871134 -vt 0.221649 0.871134 -vt 0.170103 0.881443 -vt 0.185567 0.871134 -vt 0.182990 0.884021 -vt 0.296392 0.907216 -vt 0.283505 0.909794 -vt 0.280928 0.896907 -vt 0.260309 0.907216 -vt 0.280928 0.907216 -vt 0.260309 0.909794 -vt 0.260309 0.920103 -vt 0.280928 0.909794 -vt 0.280928 0.920103 -vt 0.317010 0.907216 -vt 0.296392 0.909794 -vt 0.296392 0.907216 -vt 0.317010 0.896907 -vt 0.296392 0.896907 -vt 0.244845 0.907216 -vt 0.260309 0.896907 -vt 0.257732 0.909794 -vt 0.201031 0.907216 -vt 0.188144 0.909794 -vt 0.185567 0.896907 -vt 0.170103 0.907216 -vt 0.185567 0.907216 -vt 0.170103 0.909794 -vt 0.170103 0.920103 -vt 0.185567 0.909794 -vt 0.185567 0.920103 -vt 0.216495 0.907216 -vt 0.201031 0.909794 -vt 0.201031 0.907216 -vt 0.216495 0.896907 -vt 0.201031 0.896907 -vt 0.296392 0.855670 -vt 0.283505 0.858247 -vt 0.280928 0.845361 -vt 0.260309 0.855670 -vt 0.280928 0.855670 -vt 0.260309 0.858247 -vt 0.260309 0.868557 -vt 0.280928 0.858247 -vt 0.280928 0.868557 -vt 0.317010 0.855670 -vt 0.296392 0.858247 -vt 0.296392 0.855670 -vt 0.317010 0.845361 -vt 0.296392 0.845361 -vt 0.244845 0.855670 -vt 0.260309 0.845361 -vt 0.257732 0.858247 -vt 0.404639 0.837629 -vt 0.275773 0.595361 -vt 0.404639 0.595361 -vt 0.407216 0.837629 -vt 0.417526 0.837629 -vt 0.407216 0.595361 -vt 0.417526 0.595361 -vt 0.420103 0.837629 -vt 0.548969 0.837629 -vt 0.420103 0.595361 -vt 0.548969 0.595361 -vt 0.291237 0.579897 -vt 0.414948 0.582474 -vt 0.291237 0.582474 -vt 0.414948 0.590206 -vt 0.417526 0.590206 -vt 0.291237 0.590206 -vt 0.414948 0.592784 -vt 0.291237 0.592784 -vt 0.291237 0.564433 -vt 0.414948 0.567010 -vt 0.291237 0.567010 -vt 0.414948 0.574742 -vt 0.417526 0.574742 -vt 0.291237 0.574742 -vt 0.414948 0.577320 -vt 0.291237 0.577320 -vt 0.291237 0.548969 -vt 0.414948 0.551546 -vt 0.291237 0.551546 -vt 0.414948 0.559278 -vt 0.417526 0.559278 -vt 0.291237 0.559278 -vt 0.414948 0.561856 -vt 0.291237 0.561856 -vt 0.291237 0.533505 -vt 0.414948 0.536082 -vt 0.291237 0.536082 -vt 0.414948 0.543814 -vt 0.417526 0.543814 -vt 0.291237 0.543814 -vt 0.414948 0.546392 -vt 0.291237 0.546392 -vt 0.291237 0.518041 -vt 0.414948 0.520619 -vt 0.291237 0.520619 -vt 0.414948 0.528351 -vt 0.417526 0.528351 -vt 0.291237 0.528351 -vt 0.414948 0.530928 -vt 0.291237 0.530928 -vt 0.291237 0.502577 -vt 0.414948 0.505155 -vt 0.291237 0.505155 -vt 0.414948 0.512887 -vt 0.417526 0.512887 -vt 0.291237 0.512887 -vt 0.414948 0.515464 -vt 0.291237 0.515464 -vt 0.420103 0.579897 -vt 0.543814 0.582474 -vt 0.546392 0.579897 -vt 0.420103 0.582474 -vt 0.543814 0.590206 -vt 0.546392 0.590206 -vt 0.420103 0.590206 -vt 0.543814 0.592784 -vt 0.420103 0.592784 -vt 0.420103 0.564433 -vt 0.543814 0.567010 -vt 0.546392 0.564433 -vt 0.420103 0.567010 -vt 0.543814 0.574742 -vt 0.546392 0.574742 -vt 0.420103 0.574742 -vt 0.543814 0.577320 -vt 0.420103 0.577320 -vt 0.420103 0.548969 -vt 0.543814 0.551546 -vt 0.546392 0.548969 -vt 0.420103 0.551546 -vt 0.543814 0.559278 -vt 0.546392 0.559278 -vt 0.420103 0.559278 -vt 0.543814 0.561856 -vt 0.420103 0.561856 -vt 0.420103 0.533505 -vt 0.543814 0.536082 -vt 0.546392 0.533505 -vt 0.420103 0.536082 -vt 0.543814 0.543814 -vt 0.546392 0.543814 -vt 0.420103 0.543814 -vt 0.543814 0.546392 -vt 0.420103 0.546392 -vt 0.420103 0.518041 -vt 0.543814 0.520619 -vt 0.546392 0.518041 -vt 0.420103 0.520619 -vt 0.543814 0.528351 -vt 0.546392 0.528351 -vt 0.420103 0.528351 -vt 0.543814 0.530928 -vt 0.420103 0.530928 -vt 0.420103 0.502577 -vt 0.543814 0.505155 -vt 0.546392 0.502577 -vt 0.420103 0.505155 -vt 0.543814 0.512887 -vt 0.546392 0.512887 -vt 0.420103 0.512887 -vt 0.543814 0.515464 -vt 0.420103 0.515464 -vt 0.110825 0.855670 -vt 0.115979 0.853093 -vt 0.115979 0.855670 -vt 0.115979 0.878866 -vt 0.110825 0.881443 -vt 0.110825 0.878866 -vt 0.115979 0.878866 -vt 0.110825 0.855670 -vt 0.115979 0.855670 -vt 0.115979 0.878866 -vt 0.118557 0.853093 -vt 0.115979 0.855670 -vt 0.110825 0.855670 -vt 0.108247 0.881443 -vt 0.110825 0.878866 -vt 0.110825 0.886598 -vt 0.115979 0.884021 -vt 0.115979 0.886598 -vt 0.115979 0.909794 -vt 0.110825 0.912371 -vt 0.110825 0.909794 -vt 0.115979 0.909794 -vt 0.110825 0.886598 -vt 0.115979 0.886598 -vt 0.115979 0.909794 -vt 0.118557 0.884021 -vt 0.115979 0.886598 -vt 0.110825 0.886598 -vt 0.108247 0.912371 -vt 0.110825 0.909794 -vt 0.128866 0.853093 -vt 0.123711 0.855670 -vt 0.128866 0.855670 -vt 0.123711 0.881443 -vt 0.128866 0.878866 -vt 0.123711 0.878866 -vt 0.123711 0.855670 -vt 0.128866 0.878866 -vt 0.128866 0.855670 -vt 0.131443 0.853093 -vt 0.128866 0.878866 -vt 0.128866 0.855670 -vt 0.121134 0.881443 -vt 0.123711 0.855670 -vt 0.123711 0.878866 -vt 0.128866 0.884021 -vt 0.123711 0.886598 -vt 0.128866 0.886598 -vt 0.123711 0.912371 -vt 0.128866 0.909794 -vt 0.123711 0.909794 -vt 0.123711 0.886598 -vt 0.128866 0.909794 -vt 0.128866 0.886598 -vt 0.131443 0.884021 -vt 0.128866 0.909794 -vt 0.128866 0.886598 -vt 0.121134 0.912371 -vt 0.123711 0.886598 -vt 0.123711 0.909794 -vt 0.000000 0.886598 -vt 0.036082 0.891753 -vt 0.000000 0.891753 -vt 0.036082 0.881443 -vt 0.000000 0.881443 -vt 0.049659 0.891154 -vt 0.040547 0.891154 -vt 0.038660 0.886598 -vt 0.051546 0.881443 -vt 0.051546 0.886598 -vt 0.051546 0.899485 -vt 0.038660 0.904639 -vt 0.038660 0.899485 -vt 0.000000 0.912371 -vt 0.036082 0.907216 -vt 0.036082 0.912371 -vt 0.036082 0.902062 -vt 0.000000 0.907216 -vt 0.000000 0.902062 -vt 0.049659 0.909195 -vt 0.045103 0.911082 -vt 0.036082 0.896907 -vt 0.000000 0.896907 -vt 0.082474 0.969072 -vt 0.000000 0.974227 -vt 0.000000 0.969072 -vt 0.082474 0.963918 -vt 0.000000 0.963918 -vt 0.082474 0.958763 -vt 0.000000 0.958763 -vt 0.082474 0.994845 -vt 0.000000 1.000000 -vt 0.000000 0.994845 -vt 0.082474 0.989691 -vt 0.000000 0.989691 -vt 0.082474 0.984536 -vt 0.000000 0.984536 -vt 0.082474 0.979381 -vt 0.000000 0.979381 -vt 0.082474 0.974227 -vt 0.000000 0.853093 -vt 0.036082 0.858247 -vt 0.036082 0.853093 -vt 0.036082 0.847938 -vt 0.000000 0.847938 -vt 0.038660 0.853093 -vt 0.045103 0.859536 -vt 0.049659 0.857648 -vt 0.051546 0.847938 -vt 0.051546 0.853093 -vt 0.038660 0.871134 -vt 0.051546 0.865979 -vt 0.038660 0.865979 -vt 0.036082 0.873711 -vt 0.000000 0.878866 -vt 0.036082 0.878866 -vt 0.000000 0.873711 -vt 0.036082 0.868557 -vt 0.000000 0.868557 -vt 0.045103 0.877577 -vt 0.051546 0.871134 -vt 0.036082 0.863402 -vt 0.000000 0.863402 -vt 0.000000 0.858247 -vt 0.000000 0.930412 -vt 0.082474 0.925258 -vt 0.000000 0.925258 -vt 0.082474 0.920103 -vt 0.000000 0.920103 -vt 0.082474 0.914948 -vt 0.000000 0.914948 -vt 0.000000 0.956186 -vt 0.082474 0.951031 -vt 0.000000 0.951031 -vt 0.082474 0.945876 -vt 0.000000 0.945876 -vt 0.082474 0.940722 -vt 0.000000 0.940722 -vt 0.082474 0.935567 -vt 0.000000 0.935567 -vt 0.082474 0.930412 -vt 0.105670 0.561856 -vt 0.149485 0.559278 -vt 0.149485 0.561856 -vt 0.105670 0.590206 -vt 0.103093 0.561856 -vt 0.105670 0.561856 -vt 0.149485 0.590206 -vt 0.149485 0.561856 -vt 0.152062 0.590206 -vt 0.152062 0.561856 -vt 0.105670 0.592784 -vt 0.149485 0.592784 -vt 0.201031 0.559278 -vt 0.157216 0.561856 -vt 0.201031 0.561856 -vt 0.154639 0.561856 -vt 0.157216 0.590206 -vt 0.157216 0.561856 -vt 0.201031 0.590206 -vt 0.201031 0.561856 -vt 0.203608 0.590206 -vt 0.203608 0.561856 -vt 0.157216 0.592784 -vt 0.201031 0.592784 -vt 0.229381 0.590206 -vt 0.226804 0.567010 -vt 0.229381 0.567010 -vt 0.229381 0.567010 -vt 0.242268 0.564433 -vt 0.242268 0.567010 -vt 0.242268 0.590206 -vt 0.242268 0.567010 -vt 0.244845 0.590206 -vt 0.244845 0.567010 -vt 0.229381 0.592784 -vt 0.242268 0.592784 -vt 0.219072 0.858247 -vt 0.242268 0.858247 -vt 0.242268 0.855670 -vt 0.172680 0.858247 -vt 0.170103 0.845361 -vt 0.293814 0.884021 -vt 0.317010 0.884021 -vt 0.317010 0.881443 -vt 0.247423 0.884021 -vt 0.244845 0.871134 -vt 0.219072 0.884021 -vt 0.242268 0.884021 -vt 0.242268 0.881443 -vt 0.172680 0.884021 -vt 0.170103 0.871134 -vt 0.293814 0.909794 -vt 0.317010 0.909794 -vt 0.317010 0.907216 -vt 0.247423 0.909794 -vt 0.244845 0.896907 -vt 0.198454 0.909794 -vt 0.170103 0.896907 -vt 0.216495 0.909794 -vt 0.216495 0.907216 -vt 0.293814 0.858247 -vt 0.317010 0.858247 -vt 0.317010 0.855670 -vt 0.247423 0.858247 -vt 0.244845 0.845361 -vt 0.275773 0.837629 -vt 0.417526 0.579897 -vt 0.291237 0.590206 -vt 0.417526 0.582474 -vt 0.417526 0.590206 -vt 0.417526 0.564433 -vt 0.291237 0.574742 -vt 0.417526 0.567010 -vt 0.417526 0.574742 -vt 0.417526 0.548969 -vt 0.291237 0.559278 -vt 0.417526 0.551546 -vt 0.417526 0.559278 -vt 0.417526 0.533505 -vt 0.291237 0.543814 -vt 0.417526 0.536082 -vt 0.417526 0.543814 -vt 0.417526 0.518041 -vt 0.291237 0.528351 -vt 0.417526 0.520619 -vt 0.417526 0.528351 -vt 0.417526 0.502577 -vt 0.291237 0.512887 -vt 0.417526 0.505155 -vt 0.417526 0.512887 -vt 0.420103 0.590206 -vt 0.546392 0.582474 -vt 0.546392 0.590206 -vt 0.420103 0.574742 -vt 0.546392 0.567010 -vt 0.546392 0.574742 -vt 0.420103 0.559278 -vt 0.546392 0.551546 -vt 0.546392 0.559278 -vt 0.420103 0.543814 -vt 0.546392 0.536082 -vt 0.546392 0.543814 -vt 0.420103 0.528351 -vt 0.546392 0.520619 -vt 0.546392 0.528351 -vt 0.420103 0.512887 -vt 0.546392 0.505155 -vt 0.546392 0.512887 -vt 0.110825 0.853093 -vt 0.115979 0.881443 -vt 0.110825 0.878866 -vt 0.118557 0.881443 -vt 0.108247 0.853093 -vt 0.110825 0.884021 -vt 0.115979 0.912371 -vt 0.110825 0.909794 -vt 0.118557 0.912371 -vt 0.108247 0.884021 -vt 0.123711 0.853093 -vt 0.128866 0.881443 -vt 0.123711 0.878866 -vt 0.131443 0.881443 -vt 0.121134 0.853093 -vt 0.123711 0.884021 -vt 0.128866 0.912371 -vt 0.123711 0.909794 -vt 0.131443 0.912371 -vt 0.121134 0.884021 -vt 0.036082 0.886598 -vt 0.045103 0.893041 -vt 0.038660 0.881443 -vt 0.051546 0.904639 -vt 0.040547 0.909195 -vt 0.082474 1.000000 -vt 0.040547 0.857648 -vt 0.038660 0.847938 -vt 0.040547 0.875689 -vt 0.049659 0.875689 -vt 0.082474 0.956186 -vt 0.105670 0.559278 -vt 0.103093 0.590206 -vt 0.157216 0.559278 -vt 0.154639 0.590206 -vt 0.226804 0.590206 -vt 0.229381 0.564433 -vt 0.548969 0.837629 -vt 0.420103 0.822165 -vt 0.548969 0.822165 -vt 0.489691 0.837629 -vt 0.474227 0.595361 -vt 0.489691 0.595361 -vt 0.144330 0.822165 -vt 0.273196 0.837629 -vt 0.144330 0.837629 -vt 0.420103 0.837629 -vt 0.474227 0.837629 -vt 0.273196 0.822165 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn -0.7071 0.0000 -0.7071 -vn -1.0000 0.0000 0.0000 -vn -0.7071 -0.0000 0.7071 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -0.7071 -0.7071 -vn 0.0000 0.7071 -0.7071 -vn 1.0000 0.0000 0.0000 -vn 0.0000 -0.7071 0.7071 -vn 0.0000 0.7071 0.7071 -vn 0.0000 -0.9808 -0.1951 -vn -0.0000 0.9808 -0.1951 -vn -0.0000 -0.9808 0.1951 -vn 0.0000 0.9808 0.1951 -vn 0.7071 0.7071 0.0000 -vn 0.7071 -0.7071 -0.0000 -s 1 -f 1/1/1 2/2/1 3/3/1 -f 4/4/2 3/3/2 5/5/2 -f 5/5/3 6/6/3 4/4/3 -f 7/7/4 2/8/4 8/9/4 -f 8/10/5 9/11/5 7/12/5 -f 10/13/6 1/1/6 11/14/6 -f 9/15/7 12/16/7 6/17/7 -f 13/18/1 14/19/1 15/20/1 -f 16/21/2 15/20/2 17/22/2 -f 17/22/3 18/23/3 16/21/3 -f 19/24/4 14/25/4 20/26/4 -f 20/27/5 21/28/5 19/29/5 -f 22/30/6 13/18/6 23/31/6 -f 21/32/7 24/33/7 18/34/7 -f 25/35/1 26/36/1 27/37/1 -f 28/38/2 27/37/2 29/39/2 -f 29/39/3 30/40/3 28/38/3 -f 31/41/4 26/42/4 32/43/4 -f 32/44/5 33/45/5 31/46/5 -f 34/47/6 25/35/6 35/48/6 -f 33/49/7 36/50/7 30/51/7 -f 37/52/1 38/53/1 39/54/1 -f 40/55/2 39/54/2 41/56/2 -f 41/56/3 42/57/3 40/55/3 -f 43/58/4 38/59/4 44/60/4 -f 44/61/5 45/62/5 43/63/5 -f 46/64/6 37/52/6 47/65/6 -f 45/66/7 48/67/7 42/68/7 -f 49/69/1 50/70/1 51/71/1 -f 52/72/2 51/71/2 53/73/2 -f 53/73/3 54/74/3 52/72/3 -f 55/75/4 50/76/4 56/77/4 -f 56/78/5 57/79/5 55/80/5 -f 58/81/6 49/69/6 59/82/6 -f 60/83/1 61/84/1 62/85/1 -f 63/86/2 62/85/2 64/87/2 -f 64/87/3 65/88/3 63/86/3 -f 66/89/4 61/90/4 67/91/4 -f 67/92/5 68/93/5 66/94/5 -f 69/95/6 60/83/6 70/96/6 -f 68/97/7 71/98/7 65/99/7 -f 72/100/2 73/101/2 74/102/2 -f 74/102/3 75/103/3 72/100/3 -f 76/104/4 77/105/4 78/106/4 -f 78/106/5 79/107/5 76/104/5 -f 80/108/6 81/109/6 82/110/6 -f 83/111/1 84/112/1 85/113/1 -f 86/114/2 85/113/2 84/112/2 -f 84/112/3 87/115/3 86/114/3 -f 88/116/1 86/117/1 89/118/1 -f 90/119/1 91/120/1 92/121/1 -f 93/122/2 92/121/2 91/120/2 -f 91/120/3 94/123/3 93/122/3 -f 95/124/1 93/125/1 96/126/1 -f 97/127/1 98/128/1 99/129/1 -f 100/130/2 99/129/2 98/128/2 -f 98/128/3 101/131/3 100/130/3 -f 102/132/1 100/133/1 103/134/1 -f 104/135/1 105/136/1 106/137/1 -f 107/138/2 106/137/2 105/136/2 -f 105/136/3 108/139/3 107/138/3 -f 109/140/1 107/141/1 110/142/1 -f 111/143/1 112/144/1 113/145/1 -f 114/146/2 113/145/2 112/144/2 -f 112/144/3 115/147/3 114/146/3 -f 116/148/1 114/149/1 117/150/1 -f 118/151/1 119/152/1 120/153/1 -f 121/154/2 120/153/2 119/152/2 -f 119/152/3 122/155/3 121/154/3 -f 123/156/1 121/157/1 124/158/1 -f 125/159/1 126/160/1 127/161/1 -f 128/162/6 129/163/6 126/160/6 -f 130/164/5 126/160/5 129/163/5 -f 131/165/7 129/166/7 132/167/7 -f 133/168/1 134/169/1 135/170/1 -f 136/171/6 137/172/6 134/169/6 -f 138/173/5 134/169/5 137/172/5 -f 139/174/7 137/175/7 140/176/7 -f 141/177/1 142/178/1 143/179/1 -f 144/180/6 145/181/6 142/178/6 -f 146/182/5 142/178/5 145/181/5 -f 147/183/7 145/184/7 148/185/7 -f 149/186/1 150/187/1 151/188/1 -f 152/189/6 153/190/6 150/187/6 -f 154/191/5 150/187/5 153/190/5 -f 155/192/7 153/193/7 156/194/7 -f 157/195/1 158/196/1 159/197/1 -f 160/198/6 161/199/6 158/196/6 -f 162/200/5 158/196/5 161/199/5 -f 163/201/7 161/202/7 164/203/7 -f 165/204/1 166/205/1 167/206/1 -f 168/207/6 169/208/6 166/205/6 -f 170/209/5 166/205/5 169/208/5 -f 171/210/7 169/211/7 172/212/7 -f 173/213/8 174/214/8 175/215/8 -f 176/216/9 177/217/9 178/218/9 -f 177/219/2 174/220/2 179/221/2 -f 179/222/4 180/223/4 177/224/4 -f 181/225/10 182/226/10 174/227/10 -f 183/228/8 184/229/8 185/230/8 -f 186/231/9 187/232/9 188/233/9 -f 187/234/2 184/235/2 189/236/2 -f 189/237/4 190/238/4 187/239/4 -f 191/240/10 192/241/10 184/242/10 -f 193/243/11 194/244/11 195/245/11 -f 196/246/12 197/247/12 198/248/12 -f 193/249/6 196/250/6 199/251/6 -f 200/252/4 199/253/4 196/254/4 -f 201/255/10 202/256/10 193/257/10 -f 203/258/11 204/259/11 205/260/11 -f 206/261/12 207/262/12 208/263/12 -f 203/264/6 206/265/6 209/266/6 -f 210/267/4 209/268/4 206/269/4 -f 211/270/10 212/271/10 203/272/10 -f 213/273/13 214/274/8 215/275/8 -f 216/276/1 213/273/13 217/277/1 -f 215/278/10 218/279/10 219/280/10 -f 219/280/10 217/281/10 213/282/10 -f 220/283/4 221/284/4 216/285/4 -f 222/286/7 223/287/14 220/288/7 -f 224/289/9 219/290/14 218/291/9 -f 221/284/4 224/292/4 225/293/4 -f 225/294/2 218/291/9 226/295/2 -f 214/274/8 226/295/2 215/275/8 -f 227/296/6 228/297/11 229/298/6 -f 230/299/12 229/298/6 231/300/12 -f 232/301/7 231/300/12 233/302/7 -f 234/303/9 233/304/7 235/305/9 -f 236/306/2 235/305/9 237/307/2 -f 238/308/8 237/307/2 239/309/8 -f 240/310/1 239/309/8 241/311/1 -f 242/312/11 241/311/1 228/297/11 -f 243/313/15 244/314/11 245/315/15 -f 243/313/15 246/316/1 247/317/1 -f 248/318/10 249/319/10 250/320/10 -f 247/321/10 248/318/10 243/322/10 -f 245/323/4 251/324/4 246/325/4 -f 252/326/16 253/327/7 251/328/7 -f 248/329/16 254/330/12 255/331/12 -f 256/332/4 252/333/4 245/323/4 -f 255/331/12 256/334/6 249/335/6 -f 249/335/6 244/314/11 250/336/11 -f 257/337/8 258/338/2 259/339/2 -f 259/339/2 260/340/9 261/341/9 -f 261/341/9 262/342/7 263/343/7 -f 263/344/7 264/345/12 265/346/12 -f 265/346/12 266/347/6 267/348/6 -f 267/348/6 268/349/11 269/350/11 -f 269/350/11 270/351/1 271/352/1 -f 271/352/1 272/353/8 257/337/8 -f 273/354/1 274/355/1 275/356/1 -f 276/357/10 275/358/10 274/359/10 -f 277/360/2 274/359/2 278/361/2 -f 279/362/4 278/361/4 273/363/4 -f 280/364/7 277/360/7 279/365/7 -f 281/366/1 282/367/1 283/368/1 -f 283/369/10 284/370/10 281/371/10 -f 281/371/6 285/372/6 286/373/6 -f 286/373/4 287/374/4 282/375/4 -f 285/372/7 288/376/7 287/377/7 -f 289/378/4 290/379/4 291/380/4 -f 292/381/1 291/382/1 290/383/1 -f 293/384/6 291/380/6 294/385/6 -f 295/386/10 294/385/10 292/387/10 -f 296/388/7 293/384/7 295/389/7 -f 3/3/1 11/14/1 1/1/1 -f 1/1/1 8/390/1 2/2/1 -f 2/2/1 5/5/1 3/3/1 -f 4/4/2 12/16/2 3/3/2 -f 5/5/3 2/8/3 6/6/3 -f 7/7/4 6/6/4 2/8/4 -f 8/10/5 1/391/5 9/11/5 -f 10/13/6 9/392/6 1/1/6 -f 6/17/7 7/393/7 9/15/7 -f 9/15/7 10/394/7 12/16/7 -f 12/16/7 4/4/7 6/17/7 -f 15/20/1 23/31/1 13/18/1 -f 13/18/1 20/395/1 14/19/1 -f 14/19/1 17/22/1 15/20/1 -f 16/21/2 24/33/2 15/20/2 -f 17/22/3 14/25/3 18/23/3 -f 19/24/4 18/23/4 14/25/4 -f 20/27/5 13/396/5 21/28/5 -f 22/30/6 21/397/6 13/18/6 -f 18/34/7 19/398/7 21/32/7 -f 21/32/7 22/399/7 24/33/7 -f 24/33/7 16/21/7 18/34/7 -f 27/37/1 35/48/1 25/35/1 -f 25/35/1 32/400/1 26/36/1 -f 26/36/1 29/39/1 27/37/1 -f 28/38/2 36/50/2 27/37/2 -f 29/39/3 26/42/3 30/40/3 -f 31/41/4 30/40/4 26/42/4 -f 32/44/5 25/401/5 33/45/5 -f 34/47/6 33/402/6 25/35/6 -f 30/51/7 31/403/7 33/49/7 -f 33/49/7 34/404/7 36/50/7 -f 36/50/7 28/38/7 30/51/7 -f 39/54/1 47/65/1 37/52/1 -f 37/52/1 44/405/1 38/53/1 -f 38/53/1 41/56/1 39/54/1 -f 40/55/2 48/67/2 39/54/2 -f 41/56/3 38/59/3 42/57/3 -f 43/58/4 42/57/4 38/59/4 -f 44/61/5 37/406/5 45/62/5 -f 46/64/6 45/407/6 37/52/6 -f 42/68/7 43/408/7 45/66/7 -f 45/66/7 46/409/7 48/67/7 -f 48/67/7 40/55/7 42/68/7 -f 51/71/1 59/82/1 49/69/1 -f 49/69/1 56/410/1 50/70/1 -f 50/70/1 53/73/1 51/71/1 -f 52/72/2 297/411/2 51/71/2 -f 53/73/3 50/76/3 54/74/3 -f 55/75/4 54/74/4 50/76/4 -f 56/78/5 49/412/5 57/79/5 -f 58/81/6 57/413/6 49/69/6 -f 62/85/1 70/96/1 60/83/1 -f 60/83/1 67/414/1 61/84/1 -f 61/84/1 64/87/1 62/85/1 -f 63/86/2 71/98/2 62/85/2 -f 64/87/3 61/90/3 65/88/3 -f 66/89/4 65/88/4 61/90/4 -f 67/92/5 60/415/5 68/93/5 -f 69/95/6 68/416/6 60/83/6 -f 65/99/7 66/417/7 68/97/7 -f 68/97/7 69/418/7 71/98/7 -f 71/98/7 63/86/7 65/99/7 -f 72/100/2 298/419/2 73/101/2 -f 74/102/3 77/105/3 75/103/3 -f 76/104/4 75/103/4 77/105/4 -f 78/106/5 81/109/5 79/107/5 -f 80/108/6 79/107/6 81/109/6 -f 83/111/1 299/420/1 84/112/1 -f 86/114/2 89/421/2 85/113/2 -f 84/112/3 300/422/3 87/115/3 -f 88/116/1 301/423/1 86/117/1 -f 90/119/1 302/424/1 91/120/1 -f 93/122/2 96/425/2 92/121/2 -f 91/120/3 303/426/3 94/123/3 -f 95/124/1 304/427/1 93/125/1 -f 97/127/1 305/428/1 98/128/1 -f 100/130/2 103/429/2 99/129/2 -f 98/128/3 306/430/3 101/131/3 -f 102/132/1 307/431/1 100/133/1 -f 104/135/1 308/432/1 105/136/1 -f 107/138/2 110/433/2 106/137/2 -f 105/136/3 309/434/3 108/139/3 -f 109/140/1 310/435/1 107/141/1 -f 111/143/1 311/436/1 112/144/1 -f 114/146/2 117/437/2 113/145/2 -f 112/144/3 312/438/3 115/147/3 -f 116/148/1 313/439/1 114/149/1 -f 118/151/1 314/440/1 119/152/1 -f 121/154/2 124/441/2 120/153/2 -f 119/152/3 315/442/3 122/155/3 -f 123/156/1 316/443/1 121/157/1 -f 125/159/1 128/162/1 126/160/1 -f 128/162/6 132/444/6 129/163/6 -f 130/164/5 317/445/5 126/160/5 -f 131/165/7 318/446/7 129/166/7 -f 133/168/1 136/171/1 134/169/1 -f 136/171/6 140/447/6 137/172/6 -f 138/173/5 319/448/5 134/169/5 -f 139/174/7 320/449/7 137/175/7 -f 141/177/1 144/180/1 142/178/1 -f 144/180/6 148/450/6 145/181/6 -f 146/182/5 321/451/5 142/178/5 -f 147/183/7 322/452/7 145/184/7 -f 149/186/1 152/189/1 150/187/1 -f 152/189/6 156/453/6 153/190/6 -f 154/191/5 323/454/5 150/187/5 -f 155/192/7 324/455/7 153/193/7 -f 157/195/1 160/198/1 158/196/1 -f 160/198/6 164/456/6 161/199/6 -f 162/200/5 325/457/5 158/196/5 -f 163/201/7 326/458/7 161/202/7 -f 165/204/1 168/207/1 166/205/1 -f 168/207/6 172/459/6 169/208/6 -f 170/209/5 327/460/5 166/205/5 -f 171/210/7 328/461/7 169/211/7 -f 173/213/8 179/462/8 174/214/8 -f 176/216/9 181/463/9 177/217/9 -f 177/219/2 181/464/2 174/220/2 -f 179/222/4 329/465/4 180/223/4 -f 181/225/10 330/466/10 182/226/10 -f 183/228/8 189/467/8 184/229/8 -f 186/231/9 191/468/9 187/232/9 -f 187/234/2 191/469/2 184/235/2 -f 189/237/4 331/470/4 190/238/4 -f 191/240/10 332/471/10 192/241/10 -f 193/243/11 199/472/11 194/244/11 -f 196/246/12 202/473/12 197/247/12 -f 193/249/6 202/474/6 196/250/6 -f 200/252/4 333/475/4 199/253/4 -f 201/255/10 334/476/10 202/256/10 -f 203/258/11 209/477/11 204/259/11 -f 206/261/12 212/478/12 207/262/12 -f 203/264/6 212/479/6 206/265/6 -f 210/267/4 335/480/4 209/268/4 -f 211/270/10 336/481/10 212/271/10 -f 213/273/13 221/482/13 214/274/8 -f 216/276/1 221/482/13 213/273/13 -f 219/280/10 213/282/10 215/278/10 -f 215/278/10 226/483/10 218/279/10 -f 219/280/10 222/484/10 217/281/10 -f 220/283/4 223/485/4 221/284/4 -f 222/286/7 219/290/14 223/287/14 -f 224/289/9 223/287/14 219/290/14 -f 225/293/4 214/486/4 221/284/4 -f 221/284/4 223/485/4 224/292/4 -f 225/294/2 224/289/9 218/291/9 -f 214/274/8 225/294/2 226/295/2 -f 227/296/6 242/312/11 228/297/11 -f 230/299/12 227/296/6 229/298/6 -f 232/301/7 230/299/12 231/300/12 -f 234/303/9 232/487/7 233/304/7 -f 236/306/2 234/303/9 235/305/9 -f 238/308/8 236/306/2 237/307/2 -f 240/310/1 238/308/8 239/309/8 -f 242/312/11 240/310/1 241/311/1 -f 243/313/15 250/336/11 244/314/11 -f 243/313/15 245/315/15 246/316/1 -f 250/320/10 243/322/10 248/318/10 -f 248/318/10 255/488/10 249/319/10 -f 247/321/10 253/489/10 248/318/10 -f 245/323/4 252/333/4 251/324/4 -f 252/326/16 248/329/16 253/327/7 -f 248/329/16 252/326/16 254/330/12 -f 245/323/4 244/490/4 256/332/4 -f 256/332/4 254/491/4 252/333/4 -f 255/331/12 254/330/12 256/334/6 -f 249/335/6 256/334/6 244/314/11 -f 257/337/8 272/353/8 258/338/2 -f 259/339/2 258/338/2 260/340/9 -f 261/341/9 260/340/9 262/342/7 -f 263/344/7 262/492/7 264/345/12 -f 265/346/12 264/345/12 266/347/6 -f 267/348/6 266/347/6 268/349/11 -f 269/350/11 268/349/11 270/351/1 -f 271/352/1 270/351/1 272/353/8 -f 273/354/1 278/493/1 274/355/1 -f 276/357/10 280/494/10 275/358/10 -f 277/360/2 276/357/2 274/359/2 -f 279/362/4 277/360/4 278/361/4 -f 280/364/7 276/357/7 277/360/7 -f 281/366/1 286/495/1 282/367/1 -f 283/369/10 288/496/10 284/370/10 -f 281/371/6 284/370/6 285/372/6 -f 286/373/4 285/372/4 287/374/4 -f 285/372/7 284/370/7 288/376/7 -f 289/378/4 296/497/4 290/379/4 -f 292/381/1 294/498/1 291/382/1 -f 293/384/6 289/378/6 291/380/6 -f 295/386/10 293/384/10 294/385/10 -f 296/388/7 289/378/7 293/384/7 -f 298/499/17 79/500/7 80/501/17 -f 298/502/17 82/503/18 73/504/18 -f 74/505/1 82/506/18 81/507/1 -f 298/499/17 72/508/7 79/500/7 -f 298/502/17 80/509/17 82/503/18 -f 74/505/1 73/510/18 82/506/18 +mtllib vehicle_door.mtl o Frame -v -3.437500 5.937500 0.187501 -v 3.437500 5.937500 0.187501 -v 0.000000 5.812500 0.187501 -v 3.437500 5.937500 -0.187500 -v -3.437500 5.937500 -0.187498 -v 0.000000 5.812500 -0.187499 -v 0.000000 5.812500 0.500001 -v 1.267639 5.560351 0.500001 -v 3.500000 6.000000 0.500001 +v -3.187500 0.000000 0.562501 +v -3.187500 0.125000 0.562501 +v -3.187500 0.000000 -0.562499 +v -3.187500 0.125000 -0.562499 +v 3.187500 0.000000 0.562499 +v 3.187500 0.125000 0.562499 +v 3.187500 0.000000 -0.562501 +v 3.187500 0.125000 -0.562501 +v -3.187500 0.125000 0.437501 +v 3.187500 0.125000 0.437499 +v -3.187500 0.125000 -0.437499 +v 3.187500 0.125000 -0.437501 +v -3.187500 0.187500 0.312501 +v 3.187500 0.187500 0.312499 +v -3.187500 0.187500 -0.312499 +v 3.187500 0.187500 -0.312501 +v -3.187500 0.187500 -0.187499 +v -3.187500 0.187500 0.187501 +v 3.187500 0.187500 -0.187501 +v 3.187500 0.187500 0.187499 +v -3.187500 0.062500 -0.187499 +v -3.187500 0.062500 0.187501 +v 3.187500 0.062500 -0.187501 +v 3.187500 0.062500 0.187499 +v -3.078888 3.324986 0.187501 +v -2.760456 4.093750 0.187501 +v 1.593750 5.260456 0.187500 +v 2.253902 4.753903 0.187499 +v 3.187500 2.500000 0.187499 +v -3.187500 0.000000 0.187501 +v 3.078888 3.324986 0.187499 +v 2.760456 4.093750 0.187499 +v -1.593750 5.260456 0.187500 +v 0.000000 5.687500 0.187500 +v -2.253902 4.753903 0.187501 +v 3.187500 0.000000 0.187499 +v -0.824985 5.578889 0.187500 +v -3.187500 2.500000 0.187501 +v 0.824986 5.578889 0.187500 +v 3.375000 5.812500 0.187499 +v 3.375000 0.000000 0.187499 +v -3.375000 0.000000 0.187501 +v -3.375000 5.812500 0.187501 +v 3.078888 3.324986 -0.187501 +v 2.760456 4.093750 -0.187501 +v -1.593750 5.260456 -0.187500 +v -2.253902 4.753903 -0.187499 +v -3.187500 2.500000 -0.187499 +v 3.187500 0.000000 -0.187501 +v -3.078888 3.324986 -0.187499 +v -2.760456 4.093750 -0.187499 +v 1.593750 5.260456 -0.187500 +v -0.000000 5.687500 -0.187500 +v 2.253902 4.753903 -0.187501 +v -3.187500 0.000000 -0.187499 +v 0.824985 5.578889 -0.187500 +v 3.187500 2.500000 -0.187501 +v -0.824986 5.578889 -0.187500 +v -3.375000 5.812500 -0.187499 +v -3.375000 0.000000 -0.187499 +v 3.375000 0.000000 -0.187501 +v 3.375000 5.812500 -0.187501 +v -3.375000 0.062500 -0.187499 +v -3.375000 0.062500 0.187501 +v 3.375000 0.062500 -0.187501 +v 3.375000 0.062500 0.187499 +v -3.500000 0.000000 0.500001 v -3.500000 6.000000 0.500001 -v -3.500000 0.000000 -0.500000 -v -3.500000 -0.000000 0.500000 -v -3.312500 -0.000000 0.187500 -v -3.312500 2.500000 0.500000 -v -3.312500 -0.000000 0.500000 -v -3.437500 0.000000 -0.187500 -v -3.437500 5.937500 0.187501 -v -3.437500 -0.000000 0.187500 -v -3.312500 0.000000 -0.500000 -v -3.312500 2.500000 -0.187500 -v -3.312500 0.000000 -0.187500 -v -3.060351 3.767639 -0.499999 -v -3.312500 2.500000 -0.500000 -v -2.342291 4.842291 -0.499999 -v -3.060351 3.767639 -0.187499 -v -1.267639 5.560351 -0.499999 -v -2.342291 4.842291 -0.187499 -v 0.000000 5.812500 -0.499999 -v -1.267639 5.560351 -0.187499 -v 1.267639 5.560351 -0.499999 -v 0.000000 5.812500 -0.187499 -v 2.342291 4.842291 -0.499999 -v 1.267639 5.560351 -0.187499 -v 3.060351 3.767639 -0.187499 -v 2.342291 4.842291 -0.187499 -v 3.312500 2.500000 -0.500000 -v 3.312500 2.500000 -0.187500 -v 3.312500 0.000000 -0.187500 -v 3.437500 0.000000 -0.187500 -v 3.437500 5.937500 0.187501 -v 3.437500 5.937500 -0.187499 -v -3.437500 5.937500 -0.187499 -v 3.312500 2.500000 0.187500 -v 3.312500 -0.000000 0.500000 -v 3.312500 2.500000 0.500000 -v 3.060351 3.767639 0.187501 -v 3.060351 3.767639 0.500001 -v 2.342291 4.842291 0.187501 -v 2.342291 4.842291 0.500001 -v 1.267639 5.560351 0.187501 -v 0.000000 5.812500 0.187501 -v -1.267639 5.560351 0.500001 -v -1.267639 5.560351 0.187501 -v -2.342291 4.842291 0.500001 -v -2.342291 4.842291 0.187501 -v -3.060351 3.767639 0.500001 -v -3.060351 3.767639 0.187501 -v -3.312500 2.500000 0.187500 -v 3.500000 0.000000 -0.500000 -v 3.500000 -0.000000 0.500000 -v -3.500000 6.000000 -0.499999 -v 3.500000 6.000000 -0.499999 -v 3.312500 0.187500 -0.312500 -v -3.312500 0.187500 -0.187500 -v 3.312500 0.187500 -0.187500 -v -3.312500 0.000000 -0.500000 -v -3.312500 0.187500 -0.312500 -v -3.312500 0.187500 0.312500 -v 3.312500 -0.000000 0.500000 -v 3.312500 0.187500 0.312500 -v 3.312500 0.187500 0.187500 -v -3.312500 0.062500 0.187500 -v -3.312500 0.187500 0.187500 -v 3.312500 0.062500 -0.187500 -v 3.500000 -0.000000 0.500000 -v -3.500000 0.000000 -0.500000 -v 3.500000 0.000000 -0.500000 -v -3.437500 0.062500 0.187500 -v 3.437500 0.062500 -0.187500 -v -3.437500 0.062500 -0.187500 -v -1.267639 5.560351 0.562501 -v 0.000000 5.812500 0.500001 -v 0.000000 5.812500 0.562501 -v -2.342291 4.842291 0.562501 -v -1.267639 5.560351 0.500001 -v -3.060351 3.767639 0.562501 -v -2.342291 4.842291 0.500001 -v -3.312500 2.500000 0.562500 -v -3.060351 3.767639 0.500001 -v -3.312500 2.500000 0.500000 -v -3.312500 -0.000000 0.562500 -v -3.312500 -0.000000 0.500000 -v -3.437500 -0.000000 0.562500 -v -3.437500 2.500000 0.562500 -v -3.437500 -0.000000 0.500000 -v -3.175836 3.815475 0.500001 -v -3.437500 2.500000 0.500000 -v -3.175836 3.815475 0.562501 -v -2.430680 4.930679 0.500001 -v -2.430680 4.930679 0.562501 -v -1.315474 5.675836 0.500001 -v -1.315474 5.675836 0.562501 -v 0.000000 5.937500 0.500001 -v 1.267639 5.560351 0.562501 -v 0.000000 5.937500 0.562501 -v 1.315474 5.675836 0.500001 -v 1.267639 5.560351 0.500001 -v 2.342291 4.842291 0.500001 -v 2.342291 4.842291 0.562501 -v 1.315474 5.675836 0.562501 -v 3.060351 3.767639 0.500001 -v 3.060351 3.767639 0.562501 -v 3.175836 3.815475 0.562501 -v 2.430680 4.930679 0.562501 -v 2.430680 4.930679 0.500001 -v 3.175836 3.815475 0.500001 -v 3.437500 2.500000 0.500000 -v 3.312500 2.500000 0.562500 -v 3.437500 -0.000000 0.562500 -v 3.437500 -0.000000 0.500000 -v 3.437500 2.500000 0.562500 -v 3.312500 -0.000000 0.562500 -v 3.312500 2.500000 0.500000 -v 3.312500 -0.000000 0.500000 -v 1.267639 5.560351 -0.562499 -v 0.000000 5.812500 -0.499999 -v 0.000000 5.812500 -0.562499 -v 2.342291 4.842291 -0.562499 -v 1.267639 5.560351 -0.499999 -v 3.060351 3.767639 -0.562499 -v 2.342291 4.842291 -0.499999 -v 3.312500 2.500000 -0.562500 -v 3.060351 3.767639 -0.499999 -v 3.312500 2.500000 -0.500000 -v 3.312500 0.000000 -0.562500 -v 3.312500 0.000000 -0.500000 -v 3.437500 0.000000 -0.562501 -v 3.437500 2.500000 -0.562500 -v 3.437500 0.000000 -0.500001 -v 3.175836 3.815475 -0.500000 -v 3.437500 2.500000 -0.500000 -v 3.175836 3.815475 -0.562500 -v 2.430680 4.930679 -0.499999 -v 2.430680 4.930679 -0.562499 -v 1.315474 5.675836 -0.499999 -v 1.315474 5.675836 -0.562499 -v 0.000000 5.937500 -0.499999 -v -1.267639 5.560351 -0.562499 -v 0.000000 5.937500 -0.562499 -v -1.315475 5.675836 -0.499999 -v -1.267639 5.560351 -0.499999 +v 3.500000 0.000000 0.499999 +v 3.500000 6.000000 0.499999 +v -1.593750 5.260456 0.500000 +v -0.824985 5.578888 0.500000 +v 0.000000 5.687500 0.500000 +v 0.824986 5.578888 0.500000 +v 2.253903 4.753902 0.499999 +v 2.760456 4.093750 0.499999 +v 3.187500 2.500000 0.499999 +v 3.078888 3.324986 0.499999 +v 1.593750 5.260456 0.500000 +v -3.187500 0.000000 0.500001 +v -3.187500 2.500000 0.500001 +v -3.078888 3.324986 0.500001 +v -2.760456 4.093750 0.500001 +v 3.187500 0.000000 0.499999 +v -2.253902 4.753902 0.500001 +v -3.078888 3.324986 0.187501 +v -2.760456 4.093750 0.187501 +v 1.593750 5.260456 0.187500 +v 2.253902 4.753903 0.187499 +v 3.187500 2.500000 0.187499 +v -3.187500 0.000000 0.187501 +v 3.078888 3.324986 0.187499 +v 2.760456 4.093750 0.187499 +v -1.593750 5.260456 0.187500 +v 0.000000 5.687500 0.187500 +v -2.253902 4.753903 0.187501 +v 3.187500 0.000000 0.187499 +v -0.824985 5.578889 0.187500 +v -3.187500 2.500000 0.187501 +v 0.824986 5.578889 0.187500 +v 3.500000 0.000000 -0.500002 +v 3.500000 6.000000 -0.500002 +v -3.500000 0.000000 -0.499998 +v -3.500000 6.000000 -0.499998 +v 1.593750 5.260456 -0.500000 +v 0.824985 5.578888 -0.500000 +v -0.000000 5.687500 -0.500000 +v -0.824986 5.578888 -0.500000 +v -2.253903 4.753902 -0.499999 +v -2.760456 4.093750 -0.499999 +v -3.187500 2.500000 -0.499999 +v -3.078888 3.324986 -0.499999 +v -1.593750 5.260456 -0.500000 +v 3.187500 0.000000 -0.500001 +v 3.187500 2.500000 -0.500001 +v 3.078888 3.324986 -0.500001 +v 2.760456 4.093750 -0.500001 +v -3.187500 0.000000 -0.499999 +v 2.253902 4.753902 -0.500001 +v 3.078888 3.324986 -0.187501 +v 2.760456 4.093750 -0.187501 +v -1.593750 5.260456 -0.187500 +v -2.253902 4.753903 -0.187499 +v -3.187500 2.500000 -0.187499 +v 3.187500 0.000000 -0.187501 +v -3.078888 3.324986 -0.187499 +v -2.760456 4.093750 -0.187499 +v 1.593750 5.260456 -0.187500 +v -0.000000 5.687500 -0.187500 +v 2.253902 4.753903 -0.187501 +v -3.187500 0.000000 -0.187499 +v 0.824985 5.578889 -0.187500 +v 3.187500 2.500000 -0.187501 +v -0.824986 5.578889 -0.187500 +v -3.187500 0.000000 0.500001 +v -3.187500 0.000000 -0.499999 +v 3.187500 0.000000 0.499999 +v 3.187500 0.000000 -0.500001 +v -0.000000 5.687500 -0.500000 +v -0.000000 5.687500 -0.562500 +v 3.187500 0.000000 -0.562501 +v 3.187500 0.000000 -0.500001 +v 3.187500 2.500000 -0.500001 +v 3.187500 2.500000 -0.562501 +v 3.078888 3.324986 -0.500001 +v 3.078888 3.324986 -0.562501 +v 2.760456 4.093750 -0.500001 +v 2.760456 4.093750 -0.562501 +v 2.253902 4.753903 -0.500001 +v 2.253902 4.753902 -0.562501 +v 1.593750 5.260456 -0.500000 +v 1.593750 5.260456 -0.562500 +v 0.824985 5.578889 -0.500000 +v 0.824985 5.578888 -0.562500 +v -0.000000 5.812500 -0.500000 +v -0.000000 5.812500 -0.562500 +v 3.312232 2.508175 -0.500001 +v 3.312500 0.000000 -0.500001 +v 3.312500 0.000000 -0.562501 +v 3.312232 2.508175 -0.562501 +v 3.199629 3.357338 -0.500001 +v 3.199629 3.357338 -0.562501 +v 2.868709 4.156250 -0.500001 +v 2.868709 4.156250 -0.562501 +v 2.342291 4.842291 -0.500001 +v 2.342291 4.842291 -0.562501 +v 1.656250 5.368710 -0.500000 +v 1.656250 5.368709 -0.562500 +v 0.857338 5.699630 -0.500000 +v 0.857338 5.699629 -0.562500 +v -0.000000 5.687500 -0.500000 +v -0.000000 5.687500 -0.562500 +v -3.187500 0.000000 -0.562499 +v -3.187500 0.000000 -0.499999 +v -3.187500 2.500000 -0.499999 +v -3.187500 2.500000 -0.562499 +v -3.078888 3.324986 -0.499999 +v -3.078888 3.324986 -0.562499 +v -2.760456 4.093750 -0.499999 +v -2.760456 4.093750 -0.562499 +v -2.253903 4.753903 -0.499999 +v -2.253903 4.753902 -0.562499 +v -1.593750 5.260456 -0.500000 +v -1.593750 5.260456 -0.562500 +v -0.824986 5.578889 -0.500000 +v -0.824986 5.578888 -0.562500 +v -0.000000 5.812500 -0.500000 +v -0.000000 5.812500 -0.562500 +v -3.312232 2.508175 -0.499999 +v -3.312500 0.000000 -0.499999 +v -3.312500 0.000000 -0.562499 +v -3.312232 2.508175 -0.562499 +v -3.199629 3.357338 -0.499999 +v -3.199629 3.357338 -0.562499 +v -2.868710 4.156250 -0.499999 +v -2.868710 4.156250 -0.562499 v -2.342291 4.842291 -0.499999 v -2.342291 4.842291 -0.562499 -v -1.315475 5.675836 -0.562499 -v -3.060351 3.767639 -0.499999 -v -3.060351 3.767639 -0.562499 -v -3.175836 3.815475 -0.562499 -v -2.430680 4.930679 -0.562499 -v -2.430680 4.930679 -0.499999 -v -3.175836 3.815475 -0.499999 -v -3.437500 2.500000 -0.499999 -v -3.312500 2.500000 -0.562499 -v -3.437500 0.000000 -0.562499 -v -3.437500 0.000000 -0.499999 -v -3.437500 2.500000 -0.562499 -v -3.312500 0.000000 -0.562500 -v -3.312500 2.500000 -0.499999 -v -3.312500 0.000000 -0.499999 -v -3.312500 2.500000 0.187500 -v -3.312500 -0.000000 0.187500 -v -3.437500 -0.000000 0.187500 -v 3.437500 -0.000000 0.187500 -v 3.312500 -0.000000 0.187500 -v 3.312500 2.500000 0.187500 -v -3.060351 3.767639 0.187501 -v 3.060351 3.767639 0.187501 -v 2.342291 4.842291 0.187501 -v -2.342291 4.842291 0.187501 -v -1.267639 5.560351 0.187501 -v 1.267639 5.560351 0.187501 -v 3.312500 2.500000 -0.187500 -v 3.312500 0.000000 -0.187501 -v 3.437500 0.000000 -0.187501 -v -3.437500 0.000000 -0.187499 -v -3.312500 0.000000 -0.187499 -v -3.312500 2.500000 -0.187499 -v 3.060351 3.767639 -0.187499 -v -3.060351 3.767639 -0.187499 -v -2.342291 4.842291 -0.187499 -v 2.342291 4.842291 -0.187499 -v 1.267639 5.560351 -0.187499 -v -1.267639 5.560351 -0.187499 -v 3.060351 3.767639 -0.499999 -v 3.312500 0.000000 -0.500000 -v 3.437500 -0.000000 0.187500 -v 3.312500 -0.000000 0.187500 -v 3.312500 0.000000 -0.500000 -v -3.312500 -0.000000 0.500000 -v 3.312500 0.062500 0.187500 -v -3.312500 0.062500 -0.187500 -v -3.500000 -0.000000 0.500000 -v 3.437500 0.062500 0.187500 -vt 0.989691 1.000000 -vt 0.706186 1.000000 -vt 0.847938 0.994845 -vt 0.989691 0.752577 -vt 0.706186 0.752577 -vt 0.847938 0.747423 -vt 0.185567 0.381445 -vt 0.237831 0.371048 -vt 0.329897 0.389175 -vt 0.041237 0.389175 -vt 0.000000 0.141753 -vt 0.041237 0.141753 -vt 0.675258 0.226804 -vt 0.662371 0.329897 -vt 0.662371 0.226804 -vt 0.690722 0.226804 -vt 0.675258 0.471649 -vt 0.675258 0.226804 -vt 0.703608 0.226804 -vt 0.690722 0.329897 -vt 0.690722 0.226804 -vt 0.703608 0.386598 -vt 0.703608 0.329897 -vt 0.703608 0.443299 -vt 0.690722 0.386598 -vt 0.703608 0.500000 -vt 0.690722 0.443299 -vt 0.703608 0.556701 -vt 0.690722 0.500000 -vt 0.703608 0.613402 -vt 0.690722 0.556701 -vt 0.703608 0.670103 -vt 0.690722 0.613402 -vt 0.690722 0.726804 -vt 0.690722 0.670103 -vt 0.703608 0.783505 -vt 0.690722 0.783505 -vt 0.690722 0.886598 -vt 0.690722 1.000000 -vt 0.675258 0.755155 -vt 0.690722 0.755155 -vt 0.690722 0.471649 -vt 0.675258 0.783505 -vt 0.662371 0.886598 -vt 0.662371 0.783505 -vt 0.675258 0.726804 -vt 0.662371 0.726804 -vt 0.675258 0.670103 -vt 0.662371 0.670103 -vt 0.662371 0.613402 -vt 0.675258 0.613402 -vt 0.662371 0.556701 -vt 0.675258 0.556701 -vt 0.662371 0.500000 -vt 0.675258 0.500000 -vt 0.662371 0.443299 -vt 0.675258 0.443299 -vt 0.662371 0.386598 -vt 0.675258 0.386598 -vt 0.675258 0.329897 -vt 0.371134 0.141753 -vt 0.329897 0.141753 -vt 0.515464 0.381445 -vt 0.567728 0.371048 -vt 0.659794 0.389175 -vt 0.041237 0.430412 -vt 0.329897 0.430412 -vt 0.280928 0.505155 -vt 0.007732 0.500000 -vt 0.280928 0.500000 -vt 0.007732 0.515464 -vt 0.007732 0.505155 -vt 0.007732 0.469072 -vt 0.280928 0.458763 -vt 0.280928 0.469072 -vt 0.280928 0.474227 -vt 0.007732 0.479381 -vt 0.007732 0.474227 -vt 0.280928 0.494845 -vt 0.288660 0.556701 -vt 0.000000 0.515464 -vt 0.288660 0.515464 -vt 0.002577 0.479381 -vt 0.286082 0.494845 -vt 0.002577 0.494845 -vt 0.268041 0.448454 -vt 0.322165 0.445876 -vt 0.322165 0.448454 -vt 0.213918 0.448454 -vt 0.268041 0.445876 -vt 0.159794 0.448454 -vt 0.213918 0.445876 -vt 0.105670 0.448454 -vt 0.159794 0.445876 -vt 0.105670 0.445876 -vt 0.002577 0.448454 -vt 0.002577 0.445876 -vt 0.002577 0.453608 -vt 0.158810 0.448454 -vt 0.105670 0.453608 -vt 0.106654 0.448454 -vt 0.002577 0.456186 -vt 0.159794 0.456186 -vt 0.105670 0.456186 -vt 0.159794 0.453608 -vt 0.213918 0.456186 -vt 0.160778 0.448454 -vt 0.213918 0.453608 -vt 0.268041 0.456186 -vt 0.214902 0.448454 -vt 0.268041 0.453608 -vt 0.322165 0.456186 -vt 0.321181 0.448454 -vt 0.269025 0.448454 -vt 0.375305 0.448454 -vt 0.322165 0.453608 -vt 0.323149 0.448454 -vt 0.376289 0.456186 -vt 0.376289 0.445876 -vt 0.376289 0.448454 -vt 0.430412 0.445876 -vt 0.430412 0.448454 -vt 0.429428 0.448454 -vt 0.376289 0.453608 -vt 0.377273 0.448454 -vt 0.484536 0.445876 -vt 0.484536 0.448454 -vt 0.431396 0.448454 -vt 0.484536 0.453608 -vt 0.430412 0.453608 -vt 0.430412 0.456186 -vt 0.484536 0.456186 -vt 0.538660 0.456186 -vt 0.537676 0.448454 -vt 0.485520 0.448454 -vt 0.641753 0.453608 -vt 0.641753 0.456186 -vt 0.538660 0.453608 -vt 0.641753 0.448454 -vt 0.538660 0.445876 -vt 0.538660 0.448454 -vt 0.641753 0.445876 -vt 0.644330 0.453608 -vt 0.644330 0.448454 -vt 0.000000 0.448454 -vt 0.000000 0.453608 -vt 0.268041 0.435567 -vt 0.322165 0.432990 -vt 0.322165 0.435567 -vt 0.213918 0.435567 -vt 0.268041 0.432990 -vt 0.159794 0.435567 -vt 0.213918 0.432990 -vt 0.105670 0.435567 -vt 0.159794 0.432990 -vt 0.105670 0.432990 -vt 0.002577 0.435567 -vt 0.002577 0.432990 -vt 0.002577 0.440722 -vt 0.158810 0.435567 -vt 0.105670 0.440722 -vt 0.106654 0.435567 -vt 0.002577 0.443299 -vt 0.159794 0.443299 -vt 0.105670 0.443299 -vt 0.159794 0.440722 -vt 0.213918 0.443299 -vt 0.160778 0.435567 -vt 0.213918 0.440722 -vt 0.268041 0.443299 -vt 0.267057 0.435567 -vt 0.214902 0.435567 -vt 0.268041 0.440722 -vt 0.322165 0.443299 -vt 0.321181 0.435567 -vt 0.269025 0.435567 -vt 0.375305 0.435567 -vt 0.322165 0.440722 -vt 0.323149 0.435567 -vt 0.376289 0.443299 -vt 0.376289 0.432990 -vt 0.376289 0.435567 -vt 0.430412 0.432990 -vt 0.430412 0.435567 -vt 0.429428 0.435567 -vt 0.376289 0.440722 -vt 0.377273 0.435567 -vt 0.484536 0.432990 -vt 0.484536 0.435567 -vt 0.431396 0.435567 -vt 0.484536 0.440722 -vt 0.430412 0.440722 -vt 0.430412 0.443299 -vt 0.484536 0.443299 -vt 0.538660 0.443299 -vt 0.537676 0.435567 -vt 0.485520 0.435567 -vt 0.641753 0.440722 -vt 0.641753 0.443299 -vt 0.538660 0.440722 -vt 0.641753 0.435567 -vt 0.538660 0.432990 -vt 0.538660 0.435567 -vt 0.641753 0.432990 -vt 0.644330 0.435567 -vt 0.000000 0.440722 -vt 0.984536 0.858248 -vt 0.984536 0.755155 -vt 0.989691 0.755155 -vt 0.706186 0.755155 -vt 0.711340 0.755155 -vt 0.711340 0.858248 -vt 0.974138 0.910521 -vt 0.721738 0.910522 -vt 0.751349 0.954837 -vt 0.944527 0.954837 -vt 0.900212 0.984447 -vt 0.795664 0.984447 -vt 0.984536 0.610825 -vt 0.984536 0.507732 -vt 0.989691 0.507732 -vt 0.706186 0.507732 -vt 0.711340 0.507732 -vt 0.711340 0.610825 -vt 0.974138 0.663099 -vt 0.721738 0.663099 -vt 0.751349 0.707414 -vt 0.944527 0.707414 -vt 0.900212 0.737025 -vt 0.795664 0.737025 -vt 0.048969 0.141753 -vt 0.048969 0.244845 -vt 0.322165 0.141753 -vt 0.322165 0.244845 -vt 0.059390 0.297130 -vt 0.088996 0.341441 -vt 0.311744 0.297130 -vt 0.282138 0.341441 -vt 0.133303 0.371048 -vt -0.000000 0.389175 -vt 0.703608 0.726804 -vt 0.703608 0.886598 -vt 0.675258 1.000000 -vt 0.675258 0.886598 -vt 0.371134 0.389175 -vt 0.378866 0.141780 -vt 0.378866 0.244862 -vt 0.652062 0.141780 -vt 0.659794 0.141780 -vt 0.652062 0.244862 -vt 0.389287 0.297130 -vt 0.418893 0.341440 -vt 0.641641 0.297130 -vt 0.612035 0.341441 -vt 0.463200 0.371048 -vt 0.280928 0.515464 -vt 0.007732 0.458763 -vt 0.280928 0.479381 -vt 0.007732 0.494845 -vt -0.000000 0.556701 -vt 0.286082 0.479381 -vt 0.212933 0.448454 -vt 0.267057 0.448454 -vt 0.483552 0.448454 -vt 0.212933 0.435567 -vt 0.483552 0.435567 -vt 0.644330 0.440722 -vt 0.000000 0.435567 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn -1.0000 -0.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.9952 -0.0980 0.0000 -vn 0.9239 -0.3827 0.0000 -vn 0.7071 -0.7071 0.0000 -vn 0.3827 -0.9239 0.0000 -vn 0.0000 -1.0000 0.0000 -vn -0.3827 -0.9239 0.0000 -vn -0.7071 -0.7071 0.0000 -vn -0.9239 -0.3827 0.0000 -vn -0.9952 -0.0980 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.7071 -0.7071 -vn 0.0000 0.7071 0.7071 -vn -0.9952 0.0980 -0.0000 -vn -0.9239 0.3827 0.0000 -vn -0.7071 0.7071 0.0000 -vn -0.3827 0.9239 0.0000 -vn 0.3827 0.9239 0.0000 -vn 0.7071 0.7071 0.0000 -vn 0.9239 0.3827 0.0000 -vn 0.9952 0.0980 0.0000 -vn -0.9952 -0.0981 0.0000 -vn 0.9952 0.0981 -0.0000 +v -1.656250 5.368710 -0.499999 +v -1.656250 5.368709 -0.562500 +v -0.857338 5.699630 -0.500000 +v -0.857338 5.699629 -0.562500 +v 0.000000 5.687500 0.500000 +v 0.000000 5.687500 0.562500 +v 3.187500 0.000000 0.562499 +v 3.187500 0.000000 0.499999 +v 3.187500 2.500000 0.499999 +v 3.187500 2.500000 0.562499 +v 3.078888 3.324986 0.499999 +v 3.078888 3.324986 0.562499 +v 2.760456 4.093750 0.499999 +v 2.760456 4.093750 0.562499 +v 2.253903 4.753903 0.499999 +v 2.253903 4.753902 0.562499 +v 1.593750 5.260456 0.500000 +v 1.593750 5.260456 0.562500 +v 0.824986 5.578889 0.500000 +v 0.824986 5.578888 0.562500 +v 0.000000 5.812500 0.500000 +v 0.000000 5.812500 0.562500 +v 3.312232 2.508175 0.499999 +v 3.312500 0.000000 0.499999 +v 3.312500 0.000000 0.562499 +v 3.312232 2.508175 0.562499 +v 3.199629 3.357338 0.499999 +v 3.199629 3.357338 0.562499 +v 2.868710 4.156250 0.499999 +v 2.868710 4.156250 0.562499 +v 2.342291 4.842291 0.499999 +v 2.342291 4.842291 0.562499 +v 1.656250 5.368710 0.499999 +v 1.656250 5.368709 0.562500 +v 0.857338 5.699630 0.500000 +v 0.857338 5.699629 0.562500 +v 0.000000 5.687500 0.500000 +v 0.000000 5.687500 0.562500 +v -3.187500 0.000000 0.562501 +v -3.187500 0.000000 0.500001 +v -3.187500 2.500000 0.500001 +v -3.187500 2.500000 0.562501 +v -3.078888 3.324986 0.500001 +v -3.078888 3.324986 0.562501 +v -2.760456 4.093750 0.500001 +v -2.760456 4.093750 0.562501 +v -2.253902 4.753903 0.500001 +v -2.253902 4.753902 0.562501 +v -1.593750 5.260456 0.500000 +v -1.593750 5.260456 0.562500 +v -0.824985 5.578889 0.500000 +v -0.824985 5.578888 0.562500 +v 0.000000 5.812500 0.500000 +v 0.000000 5.812500 0.562500 +v -3.312232 2.508175 0.500001 +v -3.312500 0.000000 0.500001 +v -3.312500 0.000000 0.562501 +v -3.312232 2.508175 0.562501 +v -3.199629 3.357338 0.500001 +v -3.199629 3.357338 0.562501 +v -2.868709 4.156250 0.500001 +v -2.868709 4.156250 0.562501 +v -2.342291 4.842291 0.500001 +v -2.342291 4.842291 0.562501 +v -1.656250 5.368710 0.500000 +v -1.656250 5.368709 0.562500 +v -0.857338 5.699630 0.500000 +v -0.857338 5.699629 0.562500 +vn -0.0000 0.8944 0.4472 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 0.8944 -0.4472 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.2588 -0.9659 -0.0000 +vn -0.5000 -0.8660 -0.0000 +vn -0.7071 -0.7071 -0.0000 +vn 0.9659 -0.2588 -0.0000 +vn 0.9979 -0.0654 -0.0000 +vn 0.8660 -0.5000 -0.0000 +vn 0.7071 -0.7071 -0.0000 +vn 0.5000 -0.8660 -0.0000 +vn 0.2588 -0.9659 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.9979 -0.0654 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.9659 -0.2588 -0.0000 +vn -0.8660 -0.5000 -0.0000 +vn -0.1305 -0.9914 -0.0000 +vn 0.9978 0.0659 -0.0000 +vn 0.9658 0.2593 -0.0000 +vn 0.8660 0.5000 -0.0000 +vn 0.7071 0.7071 -0.0000 +vn 0.5000 0.8660 -0.0000 +vn 0.2588 0.9659 -0.0000 +vn 0.1305 0.9914 -0.0000 +vn 1.0000 0.0001 -0.0000 +vn 0.1305 -0.9914 -0.0000 +vn -0.9978 0.0659 -0.0000 +vn -0.9658 0.2593 -0.0000 +vn -0.8660 0.5000 -0.0000 +vn -0.7071 0.7071 -0.0000 +vn -0.5000 0.8660 -0.0000 +vn -0.2588 0.9659 -0.0000 +vn -0.1305 0.9914 -0.0000 +vn -1.0000 0.0001 -0.0000 +vt 0.156977 0.284884 +vt 0.162791 0.581395 +vt 0.156977 0.581395 +vt 0.226744 0.284884 +vt 0.220930 0.581395 +vt 0.220930 0.284884 +vt 0.209302 0.284884 +vt 0.215116 0.581395 +vt 0.209302 0.581395 +vt 0.151163 0.284884 +vt 0.145349 0.581395 +vt 0.145349 0.284884 +vt 0.093023 0.284884 +vt 0.093023 0.581395 +vt 0.151163 0.581395 +vt 0.215116 0.284884 +vt 0.168605 0.284884 +vt 0.168605 0.581395 +vt 0.203488 0.581395 +vt 0.203488 0.284884 +vt 0.197674 0.284884 +vt 0.197674 0.581395 +vt 0.174419 0.581395 +vt 0.313954 0.610466 +vt 0.000000 0.610465 +vt 0.156977 0.604652 +vt 0.627907 0.610466 +vt 0.313954 0.610465 +vt 0.470930 0.604652 +vt 0.313953 0.610465 +vt 0.000000 0.627907 +vt 0.000000 0.610465 +vt 0.174419 0.590116 +vt 0.191860 0.276163 +vt 0.191860 0.590116 +vt 0.372093 0.953488 +vt 0.046512 0.953488 +vt 0.209302 0.938953 +vt 0.302326 0.863372 +vt 0.287791 0.901163 +vt 0.302326 0.901163 +vt 0.302326 0.825581 +vt 0.287791 0.863372 +vt 0.302326 0.787791 +vt 0.287791 0.825581 +vt 0.130814 0.712209 +vt 0.116279 0.674419 +vt 0.130814 0.674419 +vt 0.130814 0.750000 +vt 0.116279 0.712209 +vt 0.130814 0.787791 +vt 0.116279 0.750000 +vt 0.116279 0.825581 +vt 0.116279 0.787791 +vt 0.130814 0.863372 +vt 0.130814 0.825581 +vt 0.130814 0.901163 +vt 0.116279 0.863372 +vt 0.075581 0.790698 +vt 0.061047 0.674419 +vt 0.075581 0.674419 +vt 0.357558 0.790698 +vt 0.343023 0.674419 +vt 0.343023 0.790698 +vt 0.302326 0.712209 +vt 0.287791 0.674419 +vt 0.287791 0.712209 +vt 0.302326 0.750000 +vt 0.287791 0.750000 +vt 0.287791 0.787791 +vt 0.744186 0.953488 +vt 0.418605 0.953488 +vt 0.581395 0.938953 +vt 0.046512 0.953488 +vt 0.000000 0.674419 +vt 0.046512 0.674419 +vt 0.502907 0.863372 +vt 0.488372 0.901163 +vt 0.502907 0.901163 +vt 0.502907 0.825581 +vt 0.488372 0.863372 +vt 0.502907 0.787791 +vt 0.488372 0.825581 +vt 0.674419 0.712209 +vt 0.659884 0.674419 +vt 0.674419 0.674419 +vt 0.659884 0.750000 +vt 0.659884 0.712209 +vt 0.674419 0.787791 +vt 0.674419 0.750000 +vt 0.659884 0.825581 +vt 0.659884 0.787791 +vt 0.674419 0.863372 +vt 0.674419 0.825581 +vt 0.674419 0.901163 +vt 0.659884 0.863372 +vt 0.729651 0.790698 +vt 0.715116 0.674419 +vt 0.729651 0.674419 +vt 0.447674 0.790698 +vt 0.433140 0.674419 +vt 0.433140 0.790698 +vt 0.502907 0.712209 +vt 0.488372 0.674419 +vt 0.488372 0.712209 +vt 0.502907 0.750000 +vt 0.488372 0.750000 +vt 0.488372 0.787791 +vt 0.372093 1.000000 +vt 0.046512 1.000000 +vt 0.372093 0.953488 +vt 0.418605 0.674419 +vt 0.418605 0.953488 +vt 0.046512 0.627907 +vt 0.372093 0.674419 +vt 0.357558 0.627907 +vt 0.372093 0.627907 +vt 0.802326 0.755814 +vt 0.799419 0.796512 +vt 0.799419 0.755814 +vt 0.802326 0.796512 +vt 0.799419 0.837209 +vt 0.802326 0.837209 +vt 0.799419 0.877907 +vt 0.802326 0.877907 +vt 0.799419 0.918605 +vt 0.802326 0.918605 +vt 0.799419 0.959302 +vt 0.802326 0.959302 +vt 0.799419 1.000000 +vt 0.799419 0.639535 +vt 0.790698 0.755814 +vt 0.793605 0.796512 +vt 0.790698 0.796512 +vt 0.793605 0.837209 +vt 0.790698 0.837209 +vt 0.793605 0.877907 +vt 0.790698 0.877907 +vt 0.793605 0.918605 +vt 0.790698 0.918605 +vt 0.793605 0.959302 +vt 0.790698 0.959302 +vt 0.790698 1.000000 +vt 0.793605 0.639535 +vt 0.793605 0.755814 +vt 0.793605 0.636628 +vt 0.799419 0.636628 +vt 0.787791 0.755814 +vt 0.784884 0.796512 +vt 0.787791 0.796512 +vt 0.784884 0.837209 +vt 0.787791 0.837209 +vt 0.784884 0.877907 +vt 0.787791 0.877907 +vt 0.784884 0.918605 +vt 0.787791 0.918605 +vt 0.784884 0.959302 +vt 0.787791 0.959302 +vt 0.784884 1.000000 +vt 0.787791 1.000000 +vt 0.784884 0.639535 +vt 0.784884 0.755814 +vt 0.776163 0.755814 +vt 0.779070 0.796512 +vt 0.779070 0.755814 +vt 0.776163 0.796512 +vt 0.779070 0.837209 +vt 0.776163 0.837209 +vt 0.779070 0.877907 +vt 0.776163 0.877907 +vt 0.779070 0.918605 +vt 0.776163 0.918605 +vt 0.779070 0.959302 +vt 0.776163 1.000000 +vt 0.776163 0.959302 +vt 0.779070 0.639535 +vt 0.779070 0.636628 +vt 0.784884 0.636628 +vt 0.773256 0.755814 +vt 0.770349 0.796512 +vt 0.773256 0.796512 +vt 0.770349 0.837209 +vt 0.773256 0.837209 +vt 0.770349 0.877907 +vt 0.773256 0.877907 +vt 0.770349 0.918605 +vt 0.773256 0.918605 +vt 0.770349 0.959302 +vt 0.773256 0.959302 +vt 0.770349 1.000000 +vt 0.773256 1.000000 +vt 0.770349 0.639535 +vt 0.770349 0.755814 +vt 0.761628 0.755814 +vt 0.764535 0.796512 +vt 0.764535 0.755814 +vt 0.761628 0.796512 +vt 0.764535 0.837209 +vt 0.761628 0.837209 +vt 0.764535 0.877907 +vt 0.761628 0.877907 +vt 0.764535 0.918605 +vt 0.761628 0.918605 +vt 0.764535 0.959302 +vt 0.761628 1.000000 +vt 0.761628 0.959302 +vt 0.764535 0.639535 +vt 0.764535 0.636628 +vt 0.770349 0.636628 +vt 0.758721 0.755814 +vt 0.755814 0.796512 +vt 0.755814 0.755814 +vt 0.758721 0.796512 +vt 0.755814 0.837209 +vt 0.758721 0.837209 +vt 0.755814 0.877907 +vt 0.758721 0.877907 +vt 0.755814 0.918605 +vt 0.758721 0.918605 +vt 0.755814 0.959302 +vt 0.758721 0.959302 +vt 0.755814 1.000000 +vt 0.755814 0.639535 +vt 0.747093 0.755814 +vt 0.750000 0.796512 +vt 0.747093 0.796512 +vt 0.750000 0.837209 +vt 0.747093 0.837209 +vt 0.750000 0.877907 +vt 0.747093 0.877907 +vt 0.750000 0.918605 +vt 0.747093 0.918605 +vt 0.750000 0.959302 +vt 0.747093 0.959302 +vt 0.747093 1.000000 +vt 0.750000 0.639535 +vt 0.750000 0.755814 +vt 0.750000 0.636628 +vt 0.755814 0.636628 +vt 0.162791 0.284884 +vt 0.226744 0.581395 +vt 0.174419 0.284884 +vt 0.305233 0.456397 +vt 0.305233 0.340118 +vt 0.313954 0.340118 +vt 0.000000 0.340119 +vt 0.008721 0.340119 +vt 0.008721 0.456397 +vt 0.300181 0.494768 +vt 0.013773 0.494769 +vt 0.028584 0.530525 +vt 0.285370 0.530525 +vt 0.261809 0.561229 +vt 0.052144 0.561229 +vt 0.082849 0.584790 +vt 0.231104 0.584790 +vt 0.195348 0.599601 +vt 0.118605 0.599601 +vt 0.619186 0.456397 +vt 0.619186 0.340118 +vt 0.627907 0.340118 +vt 0.313954 0.340119 +vt 0.322674 0.340119 +vt 0.322674 0.456397 +vt 0.614134 0.494768 +vt 0.327726 0.494769 +vt 0.342537 0.530525 +vt 0.599323 0.530525 +vt 0.575763 0.561229 +vt 0.366098 0.561230 +vt 0.396802 0.584790 +vt 0.545058 0.584790 +vt 0.509301 0.599601 +vt 0.432559 0.599601 +vt 0.313953 0.627907 +vt 0.174419 0.276163 +vt 0.357558 0.674418 +vt 0.372093 0.674418 +vt 0.046512 0.674418 +vt 0.061047 0.674418 +vt 0.061047 0.790697 +vt 0.357558 0.790697 +vt 0.352506 0.829068 +vt 0.066098 0.829068 +vt 0.080909 0.864825 +vt 0.337696 0.864825 +vt 0.314135 0.895530 +vt 0.104470 0.895530 +vt 0.135174 0.919090 +vt 0.283430 0.919090 +vt 0.247674 0.933901 +vt 0.170931 0.933901 +vt 0.116279 0.901163 +vt 0.061047 0.790698 +vt 0.357558 0.674419 +vt 0.302326 0.674419 +vt 0.729651 0.674418 +vt 0.744186 0.674418 +vt 0.418605 0.674418 +vt 0.433140 0.674418 +vt 0.433140 0.790697 +vt 0.729651 0.790697 +vt 0.724599 0.829068 +vt 0.438191 0.829068 +vt 0.453002 0.864825 +vt 0.709789 0.864825 +vt 0.686228 0.895530 +vt 0.476563 0.895530 +vt 0.507267 0.919090 +vt 0.655523 0.919090 +vt 0.619767 0.933901 +vt 0.543024 0.933901 +vt 0.000000 0.953488 +vt 0.659884 0.901163 +vt 0.715116 0.790698 +vt 0.447674 0.674419 +vt 0.502907 0.674419 +vt 0.061047 0.627907 +vt 0.802326 1.000000 +vt 0.802326 0.639535 +vt 0.793605 1.000000 +vt 0.790698 0.639535 +vt 0.787791 0.639535 +vt 0.779070 1.000000 +vt 0.776163 0.639535 +vt 0.773256 0.639535 +vt 0.764535 1.000000 +vt 0.761628 0.639535 +vt 0.758721 1.000000 +vt 0.758721 0.639535 +vt 0.750000 1.000000 +vt 0.747093 0.639535 +s 0 +usemtl TEXTURE +f 10/1/1 13/2/1 9/3/1 +f 4/4/2 7/5/2 3/6/2 +f 11/7/3 16/8/3 12/9/3 +f 6/10/4 1/11/4 5/12/4 +f 7/13/5 1/11/5 3/14/5 +f 6/10/6 9/3/6 2/15/6 +f 4/16/6 12/5/6 8/8/6 +f 13/2/6 20/17/6 18/18/6 +f 17/7/6 16/19/6 15/20/6 +f 17/21/4 23/19/4 19/22/4 +f 20/17/2 22/23/2 18/18/2 s 1 -f 337/511/19 338/512/19 339/513/19 -f 340/514/20 341/515/20 342/516/20 -f 343/517/20 344/518/20 345/519/20 -f 346/520/21 347/521/21 348/522/21 -f 349/523/22 350/524/23 351/525/22 -f 352/526/22 353/527/22 354/528/22 -f 355/529/22 356/530/23 357/531/22 -f 358/532/24 356/530/23 359/533/23 -f 360/534/25 361/535/24 358/532/24 -f 362/536/26 363/537/25 360/534/25 -f 364/538/27 365/539/26 362/536/26 -f 366/540/28 367/541/27 364/538/27 -f 368/542/29 369/543/28 366/540/28 -f 368/542/29 370/544/30 371/545/29 -f 370/544/30 372/546/31 373/547/31 -f 372/546/31 374/548/21 373/547/31 -f 375/549/21 376/550/21 377/551/21 -f 377/551/27 353/527/27 378/552/27 -f 379/553/31 380/554/21 381/555/31 -f 382/556/30 381/555/31 383/557/30 -f 384/558/29 383/557/30 385/559/29 -f 384/558/29 344/560/28 386/561/28 -f 386/561/28 343/562/27 387/563/27 -f 387/563/27 388/564/26 389/565/26 -f 389/565/26 390/566/25 391/567/25 -f 391/567/25 392/568/24 393/569/24 -f 393/569/24 350/524/23 394/570/23 -f 395/571/22 345/519/22 396/572/22 -f 364/573/19 362/574/19 397/575/19 -f 397/576/32 345/519/32 398/577/32 -f 399/578/32 400/579/32 401/580/32 -f 399/578/33 402/581/33 403/582/33 -f 404/583/34 405/584/34 406/585/34 -f 407/586/32 404/583/32 406/585/32 -f 407/586/19 408/587/19 409/588/19 -f 400/579/20 410/589/20 401/580/20 -f 411/590/27 412/591/27 413/592/27 -f 414/593/32 415/594/32 416/595/32 -f 417/596/26 418/597/27 419/598/27 -f 420/599/25 421/600/26 417/596/26 -f 422/601/24 423/602/25 420/599/25 -f 424/603/23 425/604/24 422/601/24 -f 426/605/23 427/606/22 428/607/22 -f 424/603/20 429/608/20 427/606/20 -f 422/609/20 430/610/20 424/611/20 -f 430/610/35 431/612/21 429/608/21 -f 430/610/35 432/613/36 433/614/35 -f 434/615/36 435/616/37 432/613/36 -f 422/617/20 436/618/20 434/615/20 -f 436/618/37 437/619/38 435/616/37 -f 420/620/20 438/621/20 436/618/20 -f 438/621/38 439/622/32 437/619/38 -f 419/623/20 438/621/20 417/624/20 -f 440/625/20 441/626/20 419/627/20 -f 441/626/32 442/628/39 439/622/32 -f 419/598/27 443/629/28 440/630/28 -f 440/630/28 444/631/29 445/632/29 -f 445/633/20 446/634/20 440/635/20 -f 445/632/29 447/636/30 448/637/30 -f 445/638/20 449/639/20 450/640/20 -f 446/634/39 451/641/40 442/628/39 -f 450/640/40 452/642/41 451/641/40 -f 449/639/41 453/643/42 452/642/41 -f 454/644/20 449/639/20 448/645/20 -f 453/643/42 455/646/22 456/647/22 -f 457/648/20 458/649/20 455/646/20 -f 448/637/30 459/650/31 454/651/43 -f 454/651/31 460/652/21 458/649/21 -f 456/653/27 458/649/27 460/654/27 -f 428/655/27 429/608/27 431/656/27 -f 461/657/28 462/658/27 463/659/27 -f 464/660/29 465/661/28 461/657/28 -f 466/662/30 467/663/29 464/660/29 -f 468/664/31 469/665/30 466/662/30 -f 470/666/31 471/667/21 472/668/21 -f 468/664/19 473/669/19 471/667/19 -f 466/670/19 474/671/19 468/672/19 -f 474/671/42 475/673/22 473/669/22 -f 474/671/44 476/674/41 477/675/42 -f 478/676/41 479/677/40 476/674/41 -f 466/678/19 480/679/19 478/676/19 -f 480/679/40 481/680/39 479/677/40 -f 461/681/19 480/679/19 464/682/19 -f 482/683/39 483/684/32 481/680/39 -f 463/685/19 482/683/19 461/686/19 -f 484/687/19 485/688/19 463/689/19 -f 485/688/32 486/690/38 483/684/32 -f 463/659/27 487/691/26 484/692/26 -f 484/692/26 488/693/25 489/694/25 -f 489/695/19 490/696/19 484/697/19 -f 489/694/25 491/698/24 492/699/24 -f 489/700/19 493/701/19 494/702/19 -f 490/696/38 495/703/37 486/690/38 -f 494/702/37 496/704/36 495/703/37 -f 493/701/36 497/705/35 496/704/36 -f 498/706/19 493/701/19 492/707/19 -f 497/705/35 499/708/21 500/709/21 -f 501/710/19 502/711/19 499/708/19 -f 492/699/24 503/712/23 498/713/23 -f 498/713/23 504/714/22 502/711/22 -f 504/715/27 499/708/27 502/711/27 -f 475/716/27 471/667/27 473/669/27 -f 505/717/19 506/718/19 507/719/19 -f 338/512/19 508/720/19 509/721/19 -f 338/512/19 509/721/19 510/722/19 -f 505/717/19 507/719/19 337/511/19 -f 511/723/19 505/717/19 337/511/19 -f 338/512/19 510/722/19 512/724/19 -f 338/512/19 512/724/19 513/725/19 -f 514/726/19 511/723/19 337/511/19 -f 515/727/19 514/726/19 337/511/19 -f 338/512/19 513/725/19 516/728/19 -f 339/513/19 515/727/19 337/511/19 -f 338/512/19 516/728/19 339/513/19 -f 517/729/20 518/730/20 519/731/20 -f 341/515/20 520/732/20 521/733/20 -f 341/515/20 521/733/20 522/734/20 -f 517/729/20 519/731/20 340/514/20 -f 523/735/20 517/729/20 340/514/20 -f 341/515/20 522/734/20 524/736/20 -f 341/515/20 524/736/20 525/737/20 -f 526/738/20 523/735/20 340/514/20 -f 527/739/20 526/738/20 340/514/20 -f 341/515/20 525/737/20 528/740/20 -f 342/516/20 527/739/20 340/514/20 -f 341/515/20 528/740/20 342/516/20 -f 346/520/20 348/522/20 351/741/20 -f 346/520/20 351/741/20 350/742/20 -f 380/743/20 396/572/20 345/519/20 -f 381/744/20 380/743/20 345/519/20 -f 346/520/20 350/742/20 392/745/20 -f 346/520/20 392/745/20 390/746/20 -f 383/747/20 381/744/20 345/519/20 -f 385/748/20 383/747/20 345/519/20 -f 346/520/20 390/746/20 388/749/20 -f 346/520/20 388/749/20 343/517/20 -f 344/518/20 385/748/20 345/519/20 -f 345/519/20 346/520/20 343/517/20 -f 346/520/21 397/750/21 347/521/21 -f 349/523/22 394/570/23 350/524/23 -f 352/526/22 378/552/22 353/527/22 -f 355/529/22 359/533/23 356/530/23 -f 358/532/24 361/535/24 356/530/23 -f 360/534/25 363/537/25 361/535/24 -f 362/536/26 365/539/26 363/537/25 -f 364/538/27 367/541/27 365/539/26 -f 366/540/28 369/543/28 367/541/27 -f 368/542/29 371/545/29 369/543/28 -f 368/542/29 529/751/30 370/544/30 -f 370/544/30 529/751/30 372/546/31 -f 372/546/31 530/752/21 374/548/21 -f 375/549/21 531/753/21 376/550/21 -f 377/551/27 376/550/27 353/527/27 -f 379/553/31 532/754/21 380/554/21 -f 382/556/30 379/553/31 381/555/31 -f 384/558/29 382/556/30 383/557/30 -f 384/558/29 385/559/29 344/560/28 -f 386/561/28 344/560/28 343/562/27 -f 387/563/27 343/562/27 388/564/26 -f 389/565/26 388/564/26 390/566/25 -f 391/567/25 390/566/25 392/568/24 -f 393/569/24 392/568/24 350/524/23 -f 395/571/22 398/755/22 345/519/22 -f 398/755/19 395/571/19 530/756/19 -f 398/755/19 530/756/19 372/757/19 -f 355/758/19 347/759/19 397/575/19 -f 359/760/19 355/758/19 397/575/19 -f 398/755/19 372/757/19 529/761/19 -f 398/755/19 529/761/19 368/762/19 -f 358/763/19 359/760/19 397/575/19 -f 360/764/19 358/763/19 397/575/19 -f 398/755/19 368/762/19 366/765/19 -f 398/755/19 366/765/19 364/573/19 -f 362/574/19 360/764/19 397/575/19 -f 397/575/19 398/755/19 364/573/19 -f 397/576/32 346/520/32 345/519/32 -f 399/578/32 403/582/32 400/579/32 -f 399/578/33 533/766/33 402/581/33 -f 404/583/34 534/767/34 405/584/34 -f 407/586/32 409/588/32 404/583/32 -f 407/586/19 535/768/19 408/587/19 -f 400/579/20 536/769/20 410/589/20 -f 411/590/27 537/770/27 412/591/27 -f 414/593/32 538/771/32 415/594/32 -f 417/596/26 421/600/26 418/597/27 -f 420/599/25 423/602/25 421/600/26 -f 422/601/24 425/604/24 423/602/25 -f 424/603/23 426/605/23 425/604/24 -f 426/605/23 424/603/23 427/606/22 -f 424/603/20 430/610/20 429/608/20 -f 422/609/20 434/615/20 430/610/20 -f 430/610/35 433/614/35 431/612/21 -f 430/610/35 434/615/36 432/613/36 -f 434/615/36 436/618/37 435/616/37 -f 422/617/20 420/772/20 436/618/20 -f 436/618/37 438/621/38 437/619/38 -f 420/620/20 417/773/20 438/621/20 -f 438/621/38 441/626/32 439/622/32 -f 419/623/20 441/626/20 438/621/20 -f 440/625/20 446/634/20 441/626/20 -f 441/626/32 446/634/39 442/628/39 -f 419/598/27 418/597/27 443/629/28 -f 440/630/28 443/629/28 444/631/29 -f 445/633/20 450/640/20 446/634/20 -f 445/632/29 444/631/29 447/636/30 -f 445/638/20 448/774/20 449/639/20 -f 446/634/39 450/640/40 451/641/40 -f 450/640/40 449/639/41 452/642/41 -f 449/639/41 457/648/42 453/643/42 -f 454/644/20 457/648/20 449/639/20 -f 453/643/42 457/648/42 455/646/22 -f 457/648/20 454/651/20 458/649/20 -f 448/637/30 447/636/30 459/650/31 -f 454/651/43 459/650/31 460/652/21 -f 456/653/27 455/646/27 458/649/27 -f 428/655/27 427/606/27 429/608/27 -f 461/657/28 465/661/28 462/658/27 -f 464/660/29 467/663/29 465/661/28 -f 466/662/30 469/665/30 467/663/29 -f 468/664/31 470/666/31 469/665/30 -f 470/666/31 468/664/31 471/667/21 -f 468/664/19 474/671/19 473/669/19 -f 466/670/19 478/676/19 474/671/19 -f 474/671/44 477/675/42 475/673/22 -f 474/671/44 478/676/41 476/674/41 -f 478/676/41 480/679/40 479/677/40 -f 466/678/19 464/775/19 480/679/19 -f 480/679/40 482/683/39 481/680/39 -f 461/681/19 482/683/19 480/679/19 -f 482/683/39 485/688/32 483/684/32 -f 463/685/19 485/688/19 482/683/19 -f 484/687/19 490/696/19 485/688/19 -f 485/688/32 490/696/38 486/690/38 -f 463/659/27 462/658/27 487/691/26 -f 484/692/26 487/691/26 488/693/25 -f 489/695/19 494/702/19 490/696/19 -f 489/694/25 488/693/25 491/698/24 -f 489/700/19 492/776/19 493/701/19 -f 490/696/38 494/702/37 495/703/37 -f 494/702/37 493/701/36 496/704/36 -f 493/701/36 501/710/35 497/705/35 -f 498/706/19 501/710/19 493/701/19 -f 497/705/35 501/710/35 499/708/21 -f 501/710/19 498/713/19 502/711/19 -f 492/699/24 491/698/24 503/712/23 -f 498/713/23 503/712/23 504/714/22 -f 504/715/27 500/777/27 499/708/27 -f 475/716/27 472/778/27 471/667/27 +f 43/24/2 40/25/2 34/26/2 +f 62/27/4 59/28/4 53/29/4 +f 43/30/5 62/31/5 40/32/5 +s 0 +f 64/33/6 65/34/6 63/35/6 +s 1 +f 70/36/4 68/37/4 73/38/4 +f 100/39/7 73/40/5 95/41/5 +f 88/42/8 74/43/7 100/39/7 +f 89/44/9 79/45/8 88/42/8 +f 86/46/10 81/47/11 99/48/11 +f 87/49/12 82/50/10 86/46/10 +f 96/51/13 83/52/12 87/49/12 +f 96/51/13 71/53/14 85/54/13 +f 98/55/15 71/53/14 94/56/14 +f 95/57/5 72/58/15 98/55/15 +f 99/59/11 80/60/16 91/61/16 +f 90/62/17 84/63/18 77/64/17 +f 92/65/19 77/66/17 78/67/19 +f 93/68/20 78/67/19 76/69/20 +f 89/44/9 76/69/20 75/70/9 +f 104/71/2 102/72/2 107/73/2 +f 68/74/18 103/75/18 67/76/18 +f 134/77/15 107/78/5 129/79/5 +f 122/80/14 108/81/15 134/77/15 +f 123/82/13 113/83/14 122/80/14 +f 120/84/19 115/85/17 133/86/17 +f 120/84/19 117/87/20 116/88/19 +f 130/89/9 117/87/20 121/90/20 +f 130/89/9 105/91/8 119/92/9 +f 132/93/7 105/91/8 128/94/8 +f 129/95/5 106/96/7 132/93/7 +f 133/97/17 114/98/18 125/99/18 +f 124/100/11 118/101/16 111/102/11 +f 126/103/10 111/104/11 112/105/10 +f 127/106/12 112/105/10 110/107/12 +f 123/82/13 110/107/12 109/108/13 +f 68/74/6 102/109/6 104/110/6 +f 70/111/16 101/112/16 102/113/16 +f 103/114/5 135/60/5 67/76/5 +f 69/115/5 138/116/5 101/117/5 +f 143/118/17 146/119/19 144/120/17 +f 145/121/19 148/122/20 146/119/19 +f 147/123/20 150/124/9 148/122/20 +f 149/125/9 152/126/8 150/124/9 +f 151/127/8 154/128/7 152/126/8 +f 153/129/7 140/130/21 154/128/7 +f 141/131/18 143/118/17 144/120/17 +f 157/132/22 162/133/23 161/134/23 +f 161/134/23 164/135/24 163/136/24 +f 163/136/24 166/137/25 165/138/25 +f 165/138/25 168/139/26 167/140/26 +f 167/140/26 170/141/27 169/142/27 +f 170/141/27 155/143/28 169/142/27 +f 157/132/22 159/144/29 160/145/22 +f 148/122/2 166/137/2 164/135/2 +f 144/120/2 159/144/2 141/131/2 +f 152/126/2 166/137/2 150/124/2 +f 141/131/5 158/146/5 142/147/5 +f 152/126/2 170/141/2 168/139/2 +f 146/119/2 160/145/2 144/120/2 +f 140/130/2 170/141/2 154/128/2 +f 148/122/2 162/133/2 146/119/2 +f 175/148/11 178/149/10 177/150/10 +f 177/150/10 180/151/12 179/152/12 +f 179/152/12 182/153/13 181/154/13 +f 181/154/13 184/155/14 183/156/14 +f 183/156/14 186/157/15 185/158/15 +f 185/158/15 172/159/30 171/160/30 +f 175/148/11 173/161/16 176/162/11 +f 189/163/31 194/164/32 192/165/31 +f 193/166/32 196/167/33 194/164/32 +f 195/168/33 198/169/34 196/167/33 +f 197/170/34 200/171/35 198/169/34 +f 199/172/35 202/173/36 200/171/35 +f 187/174/37 202/173/36 201/175/36 +f 191/176/38 189/163/31 192/165/31 +f 180/151/2 198/169/2 182/153/2 +f 191/176/2 176/162/2 173/161/2 +f 182/153/2 200/171/2 184/155/2 +f 190/177/5 173/161/5 174/178/5 +f 184/155/2 202/173/2 186/157/2 +f 192/165/2 178/149/2 176/162/2 +f 202/173/2 172/159/2 186/157/2 +f 194/164/2 180/151/2 178/149/2 +f 207/179/17 210/180/19 209/181/19 +f 209/181/19 212/182/20 211/183/20 +f 211/183/20 214/184/9 213/185/9 +f 213/185/9 216/186/8 215/187/8 +f 215/187/8 218/188/7 217/189/7 +f 217/189/7 204/190/21 203/191/21 +f 207/179/17 205/192/18 208/193/17 +f 221/194/22 226/195/23 224/196/22 +f 225/197/23 228/198/24 226/195/23 +f 227/199/24 230/200/25 228/198/24 +f 229/201/25 232/202/26 230/200/25 +f 231/203/26 234/204/27 232/202/26 +f 219/205/28 234/204/27 233/206/27 +f 223/207/29 221/194/22 224/196/22 +f 212/182/4 230/200/4 214/184/4 +f 223/207/4 208/193/4 205/192/4 +f 214/184/4 232/202/4 216/186/4 +f 222/208/5 205/192/5 206/209/5 +f 216/186/4 234/204/4 218/188/4 +f 224/196/4 210/180/4 208/193/4 +f 234/204/4 204/190/4 218/188/4 +f 226/195/4 212/182/4 210/180/4 +f 239/210/11 242/211/10 240/212/11 +f 241/213/10 244/214/12 242/211/10 +f 243/215/12 246/216/13 244/214/12 +f 245/217/13 248/218/14 246/216/13 +f 247/219/14 250/220/15 248/218/14 +f 249/221/15 236/222/30 250/220/15 +f 237/223/16 239/210/11 240/212/11 +f 253/224/31 258/225/32 257/226/32 +f 257/226/32 260/227/33 259/228/33 +f 259/228/33 262/229/34 261/230/34 +f 261/230/34 264/231/35 263/232/35 +f 263/232/35 266/233/36 265/234/36 +f 266/233/36 251/235/37 265/234/36 +f 253/224/31 255/236/38 256/237/31 +f 244/214/4 262/229/4 260/227/4 +f 240/212/4 255/236/4 237/223/4 +f 248/218/4 262/229/4 246/216/4 +f 237/223/5 254/238/5 238/239/5 +f 248/218/4 266/233/4 264/231/4 +f 242/211/4 256/237/4 240/212/4 +f 236/222/4 266/233/4 250/220/4 +f 244/214/4 258/225/4 242/211/4 +s 0 +f 10/1/1 14/240/1 13/2/1 +f 4/4/2 8/241/2 7/5/2 +f 11/7/3 15/16/3 16/8/3 +f 6/10/4 2/15/4 1/11/4 +f 7/13/5 5/12/5 1/11/5 +f 6/10/6 10/1/6 9/3/6 +f 4/16/6 11/6/6 12/5/6 +f 13/2/6 14/240/6 20/17/6 +f 17/7/6 19/9/6 16/19/6 +f 17/21/4 21/20/4 23/19/4 +f 20/17/2 24/242/2 22/23/2 +s 1 +f 38/243/2 30/244/2 42/245/2 +f 40/25/2 41/246/2 36/247/2 +f 40/25/2 36/247/2 29/248/2 +f 38/243/2 42/245/2 43/24/2 +f 25/249/2 38/243/2 43/24/2 +f 40/25/2 29/248/2 31/250/2 +f 40/25/2 31/250/2 32/251/2 +f 26/252/2 25/249/2 43/24/2 +f 35/253/2 26/252/2 43/24/2 +f 40/25/2 32/251/2 28/254/2 +f 40/25/2 28/254/2 27/255/2 +f 33/256/2 35/253/2 43/24/2 +f 37/257/2 33/256/2 43/24/2 +f 40/25/2 27/255/2 39/258/2 +f 34/26/2 37/257/2 43/24/2 +f 40/25/2 39/258/2 34/26/2 +f 57/259/4 49/260/4 61/261/4 +f 59/28/4 60/262/4 55/263/4 +f 59/28/4 55/263/4 48/264/4 +f 57/259/4 61/261/4 62/27/4 +f 44/265/4 57/259/4 62/27/4 +f 59/28/4 48/264/4 50/266/4 +f 59/28/4 50/266/4 51/267/4 +f 45/268/4 44/265/4 62/27/4 +f 54/269/4 45/268/4 62/27/4 +f 59/28/4 51/267/4 47/270/4 +f 59/28/4 47/270/4 46/271/4 +f 52/272/4 54/269/4 62/27/4 +f 56/273/4 52/272/4 62/27/4 +f 59/28/4 46/271/4 58/274/4 +f 53/29/4 56/273/4 62/27/4 +f 59/28/4 58/274/4 53/29/4 +f 43/30/5 59/275/5 62/31/5 +s 0 +f 64/33/6 66/276/6 65/34/6 +s 1 +f 84/277/4 69/278/4 70/36/4 +f 68/37/4 67/279/4 80/280/4 +f 68/37/4 80/280/4 81/281/4 +f 77/282/4 84/277/4 70/36/4 +f 78/283/4 77/282/4 70/36/4 +f 68/37/4 81/281/4 82/284/4 +f 68/37/4 82/284/4 83/285/4 +f 76/286/4 78/283/4 70/36/4 +f 75/287/4 76/286/4 70/36/4 +f 68/37/4 83/285/4 85/288/4 +f 68/37/4 85/288/4 71/289/4 +f 79/290/4 75/287/4 70/36/4 +f 74/291/4 79/290/4 70/36/4 +f 68/37/4 71/289/4 72/292/4 +f 73/38/4 74/291/4 70/36/4 +f 68/37/4 72/292/4 73/38/4 +f 100/39/7 74/43/7 73/40/5 +f 88/42/8 79/45/8 74/43/7 +f 89/44/9 75/70/9 79/45/8 +f 86/46/10 82/50/10 81/47/11 +f 87/49/12 83/52/12 82/50/10 +f 96/51/13 85/54/13 83/52/12 +f 96/51/13 94/56/14 71/53/14 +f 98/55/15 72/58/15 71/53/14 +f 95/57/5 73/293/5 72/58/15 +f 99/59/11 81/294/11 80/60/16 +f 90/62/17 97/295/18 84/63/18 +f 92/65/19 90/296/17 77/66/17 +f 93/68/20 92/65/19 78/67/19 +f 89/44/9 93/68/20 76/69/20 +f 118/297/2 103/298/2 104/71/2 +f 102/72/2 101/299/2 114/300/2 +f 102/72/2 114/300/2 115/301/2 +f 111/302/2 118/297/2 104/71/2 +f 112/303/2 111/302/2 104/71/2 +f 102/72/2 115/301/2 116/304/2 +f 102/72/2 116/304/2 117/305/2 +f 110/306/2 112/303/2 104/71/2 +f 109/307/2 110/306/2 104/71/2 +f 102/72/2 117/305/2 119/308/2 +f 102/72/2 119/308/2 105/309/2 +f 113/310/2 109/307/2 104/71/2 +f 108/311/2 113/310/2 104/71/2 +f 102/72/2 105/309/2 106/312/2 +f 107/73/2 108/311/2 104/71/2 +f 102/72/2 106/312/2 107/73/2 +f 68/74/18 104/313/18 103/75/18 +f 134/77/15 108/81/15 107/78/5 +f 122/80/14 113/83/14 108/81/15 +f 123/82/13 109/108/13 113/83/14 +f 120/84/19 116/88/19 115/85/17 +f 120/84/19 121/90/20 117/87/20 +f 130/89/9 119/92/9 117/87/20 +f 130/89/9 128/94/8 105/91/8 +f 132/93/7 106/96/7 105/91/8 +f 129/95/5 107/314/5 106/96/7 +f 133/97/17 115/315/17 114/98/18 +f 124/100/11 131/316/16 118/101/16 +f 126/103/10 124/317/11 111/104/11 +f 127/106/12 126/103/10 112/105/10 +f 123/82/13 127/106/12 110/107/12 +f 68/74/6 70/111/6 102/109/6 +f 70/111/16 69/115/16 101/112/16 +f 103/114/5 136/318/5 135/60/5 +f 69/115/5 137/295/5 138/116/5 +f 143/118/17 145/121/19 146/119/19 +f 145/121/19 147/123/20 148/122/20 +f 147/123/20 149/125/9 150/124/9 +f 149/125/9 151/127/8 152/126/8 +f 151/127/8 153/129/7 154/128/7 +f 153/129/7 139/319/21 140/130/21 +f 141/131/18 142/320/18 143/118/17 +f 157/132/22 160/145/22 162/133/23 +f 161/134/23 162/133/23 164/135/24 +f 163/136/24 164/135/24 166/137/25 +f 165/138/25 166/137/25 168/139/26 +f 167/140/26 168/139/26 170/141/27 +f 170/141/27 156/321/28 155/143/28 +f 157/132/22 158/322/29 159/144/29 +f 148/122/2 150/124/2 166/137/2 +f 144/120/2 160/145/2 159/144/2 +f 152/126/2 168/139/2 166/137/2 +f 141/131/5 159/144/5 158/146/5 +f 152/126/2 154/128/2 170/141/2 +f 146/119/2 162/133/2 160/145/2 +f 140/130/2 156/321/2 170/141/2 +f 148/122/2 164/135/2 162/133/2 +f 175/148/11 176/162/11 178/149/10 +f 177/150/10 178/149/10 180/151/12 +f 179/152/12 180/151/12 182/153/13 +f 181/154/13 182/153/13 184/155/14 +f 183/156/14 184/155/14 186/157/15 +f 185/158/15 186/157/15 172/159/30 +f 175/148/11 174/323/16 173/161/16 +f 189/163/31 193/166/32 194/164/32 +f 193/166/32 195/168/33 196/167/33 +f 195/168/33 197/170/34 198/169/34 +f 197/170/34 199/172/35 200/171/35 +f 199/172/35 201/175/36 202/173/36 +f 187/174/37 188/324/37 202/173/36 +f 191/176/38 190/325/38 189/163/31 +f 180/151/2 196/167/2 198/169/2 +f 191/176/2 192/165/2 176/162/2 +f 182/153/2 198/169/2 200/171/2 +f 190/177/5 191/176/5 173/161/5 +f 184/155/2 200/171/2 202/173/2 +f 192/165/2 194/164/2 178/149/2 +f 202/173/2 188/324/2 172/159/2 +f 194/164/2 196/167/2 180/151/2 +f 207/179/17 208/193/17 210/180/19 +f 209/181/19 210/180/19 212/182/20 +f 211/183/20 212/182/20 214/184/9 +f 213/185/9 214/184/9 216/186/8 +f 215/187/8 216/186/8 218/188/7 +f 217/189/7 218/188/7 204/190/21 +f 207/179/17 206/326/18 205/192/18 +f 221/194/22 225/197/23 226/195/23 +f 225/197/23 227/199/24 228/198/24 +f 227/199/24 229/201/25 230/200/25 +f 229/201/25 231/203/26 232/202/26 +f 231/203/26 233/206/27 234/204/27 +f 219/205/28 220/327/28 234/204/27 +f 223/207/29 222/328/29 221/194/22 +f 212/182/4 228/198/4 230/200/4 +f 223/207/4 224/196/4 208/193/4 +f 214/184/4 230/200/4 232/202/4 +f 222/208/5 223/207/5 205/192/5 +f 216/186/4 232/202/4 234/204/4 +f 224/196/4 226/195/4 210/180/4 +f 234/204/4 220/327/4 204/190/4 +f 226/195/4 228/198/4 212/182/4 +f 239/210/11 241/213/10 242/211/10 +f 241/213/10 243/215/12 244/214/12 +f 243/215/12 245/217/13 246/216/13 +f 245/217/13 247/219/14 248/218/14 +f 247/219/14 249/221/15 250/220/15 +f 249/221/15 235/329/30 236/222/30 +f 237/223/16 238/330/16 239/210/11 +f 253/224/31 256/237/31 258/225/32 +f 257/226/32 258/225/32 260/227/33 +f 259/228/33 260/227/33 262/229/34 +f 261/230/34 262/229/34 264/231/35 +f 263/232/35 264/231/35 266/233/36 +f 266/233/36 252/331/37 251/235/37 +f 253/224/31 254/332/38 255/236/38 +f 244/214/4 246/216/4 262/229/4 +f 240/212/4 256/237/4 255/236/4 +f 248/218/4 264/231/4 262/229/4 +f 237/223/5 255/236/5 254/238/5 +f 248/218/4 250/220/4 266/233/4 +f 242/211/4 258/225/4 256/237/4 +f 236/222/4 252/331/4 266/233/4 +f 244/214/4 260/227/4 258/225/4 o Left -v -0.187500 5.937500 0.187501 -v -3.312500 0.062500 0.187500 +v -0.187500 0.312500 -0.187500 +v -0.187500 5.812500 -0.187500 +v -3.374999 0.312500 -0.187500 +v -3.374999 5.812500 -0.187500 +v -0.312500 0.187500 0.250000 +v -0.312500 0.187500 0.187500 +v -0.193750 0.187500 0.250000 +v -0.187500 5.662815 0.187500 +v -0.193750 0.187500 0.187500 +v -0.187500 5.662815 0.250000 +v -3.062499 2.500000 0.187500 +v -2.958148 3.292633 0.187500 +v -2.652203 4.031250 0.187500 +v -2.165514 4.665514 0.187500 +v -1.531250 5.152203 0.187500 +v -0.792633 5.458148 0.187500 +v -2.760456 4.093750 0.250000 +v -3.078888 3.324986 0.250000 +v -3.187499 2.500000 0.250000 +v -2.253902 4.753902 0.250000 +v -1.593750 5.260456 0.250000 +v -0.824985 5.578888 0.250000 +v -2.652203 4.031250 0.250000 +v -2.958148 3.292633 0.250000 +v -3.062499 2.500000 0.250000 +v -2.165514 4.665514 0.250000 +v -1.531250 5.152203 0.250000 +v -0.792633 5.458148 0.250000 +v -3.062499 0.312500 0.187500 +v -3.062499 0.312500 0.250000 +v -3.187499 0.312500 0.250000 +v -0.312500 5.521358 0.250000 +v -0.193750 5.537815 0.250000 +v -0.193750 5.537815 0.187500 +v -0.312500 5.521358 0.187500 +v -0.312799 5.646319 0.250000 +v -0.187500 0.312500 0.187500 +v -0.187500 5.812500 0.187500 +v -3.374999 0.312500 0.187500 +v -3.374999 5.812500 0.187500 +v -3.187500 0.187500 0.250000 +v -3.187500 0.312500 0.250000 +v -0.312500 0.187500 0.250000 +v -0.312500 0.312500 0.250000 +v -3.187500 0.312500 0.187500 +v -0.312500 0.312500 0.187500 +v -2.437501 0.375000 0.375000 +v -2.437501 0.687500 0.375000 +v -2.437501 0.312500 0.187500 +v -2.437501 0.750000 0.187500 +v -2.562501 0.375000 0.375000 +v -2.562501 0.687500 0.375000 +v -2.562501 0.312500 0.187500 +v -2.562501 0.750000 0.187500 +v -2.437501 0.312500 0.250000 +v -2.437501 0.750000 0.250000 +v -2.562501 0.312500 0.250000 +v -2.562501 0.750000 0.250000 +v -2.437501 0.375000 0.312500 +v -2.562501 0.687500 0.312500 +v -2.437501 0.687500 0.312500 +v -2.562501 0.375000 0.312500 +v -2.187500 1.625000 0.250000 +v -2.187500 2.000000 0.250000 +v -2.187500 1.625000 0.187500 +v -2.187500 2.000000 0.187500 +v -2.812500 1.625000 0.250000 +v -2.812500 2.000000 0.250000 +v -2.812500 1.625000 0.187500 +v -2.812500 2.000000 0.187500 v -0.187500 0.062500 0.187500 -v -0.125000 5.937500 0.125001 -v -0.125000 5.937500 -0.124999 -v -0.125000 0.062500 0.125000 -v -0.125000 0.062500 -0.125000 -v -0.187500 5.937500 -0.187499 -v -3.312500 5.937500 -0.187499 -v -0.187500 0.062500 -0.187500 -v -3.312500 0.062500 -0.187500 -v 0.062500 1.062500 -0.187500 -v 0.125000 1.062500 0.125000 -v -0.187500 1.062500 0.187500 -v 0.062500 1.562500 0.187500 -v 0.062500 1.062500 0.187500 -v 0.125000 1.562500 0.125000 -v 0.125000 1.562500 -0.125000 -v 0.125000 1.062500 -0.125000 -v 0.062500 1.562500 -0.187500 -v -0.187500 1.562500 -0.187500 -v -0.187500 1.062500 -0.187500 -v -0.187500 1.562500 0.187500 -v 0.062500 2.062500 -0.187500 -v 0.125000 2.062500 0.125000 -v -0.187500 2.062500 0.187500 -v 0.062500 2.562500 0.187500 -v 0.062500 2.062500 0.187500 -v 0.125000 2.562500 0.125000 -v 0.125000 2.562500 -0.125000 -v 0.125000 2.062500 -0.125000 -v 0.062500 2.562500 -0.187500 -v -0.187500 2.562500 -0.187500 -v -0.187500 2.062500 -0.187500 -v -0.187500 2.562500 0.187500 -v 0.062500 3.062500 -0.187500 -v 0.125000 3.062500 0.125000 -v -0.187500 3.062500 0.187500 -v 0.062500 3.562500 0.187501 -v 0.062500 3.062500 0.187500 -v 0.125000 3.562500 0.125001 -v 0.125000 3.562500 -0.124999 -v 0.125000 3.062500 -0.125000 -v 0.062500 3.562500 -0.187499 -v -0.187500 3.562500 -0.187499 -v -0.187500 3.062500 -0.187500 -v -0.187500 3.562500 0.187501 -v 0.062500 4.062500 -0.187499 -v 0.125000 4.062500 0.125001 -v -0.187500 4.062500 0.187501 -v 0.062500 4.562500 0.187501 -v 0.062500 4.062500 0.187501 -v 0.125000 4.562500 0.125001 -v 0.125000 4.562500 -0.124999 -v 0.125000 4.062500 -0.124999 -v 0.062500 4.562500 -0.187499 -v -0.187500 4.562500 -0.187499 -v -0.187500 4.062500 -0.187499 -v -0.187500 4.562500 0.187501 -v 0.062500 5.062500 -0.187499 -v 0.125000 5.062500 0.125001 -v -0.187500 5.062500 0.187501 -v 0.062500 5.562500 0.187501 -v 0.062500 5.062500 0.187501 -v 0.125000 5.562500 0.125001 -v 0.125000 5.562500 -0.124999 -v 0.125000 5.062500 -0.124999 -v 0.062500 5.562500 -0.187499 -v -0.187500 5.562500 -0.187499 -v -0.187500 5.062500 -0.187499 -v -0.187500 5.562500 0.187501 -v 0.062500 0.562500 0.187500 -v -0.187500 0.062500 0.187500 -v 0.062500 0.062500 0.187500 -v 0.125000 0.562500 0.125000 -v 0.125000 0.562500 -0.125000 -v 0.125000 0.062500 0.125000 -v 0.125000 0.062500 -0.125000 -v 0.062500 0.562500 -0.187500 -v -0.187500 0.562500 -0.187500 -v 0.062500 0.062500 -0.187500 -v -0.187500 0.062500 -0.187500 v -0.187500 0.562500 0.187500 -v -1.312500 0.468750 0.312500 -v -0.437500 0.514515 0.422985 -v -1.312500 0.514514 0.422985 -v -0.437500 0.468750 0.187500 -v -1.312500 0.468750 0.187500 -v -1.312500 0.735485 0.422985 -v -1.312500 0.781250 0.312500 -v -0.437500 0.781250 0.187500 -v -0.437500 0.468750 0.312500 -v -1.312500 0.781250 0.187500 -v -0.437500 0.781250 0.312500 -v -0.437500 0.735485 0.422985 -v -0.437500 0.625000 0.468750 -v -1.312500 0.625000 0.468750 -v -1.312500 0.625000 0.187500 -v -3.312500 0.536612 0.224112 -v -3.312500 0.625000 0.187500 -v -1.312500 0.713388 0.224112 -v -3.312500 0.713388 0.224112 -v -1.312500 0.750000 0.312500 -v -3.312500 0.750000 0.312500 -v -1.312500 0.713388 0.400888 -v -3.312500 0.713388 0.400888 -v -1.312500 0.625000 0.437500 -v -3.312500 0.625000 0.437500 -v -1.312500 0.536612 0.400888 -v -3.312500 0.536612 0.400888 -v -1.312500 0.500000 0.312500 -v -3.312500 0.500000 0.312500 -v -1.312500 0.536612 0.224112 -v -1.312500 0.468750 -0.312500 -v -0.437500 0.514515 -0.422985 -v -0.437500 0.468750 -0.312500 -v -0.437500 0.468750 -0.187500 -v -1.312500 0.468750 -0.187500 -v -1.312500 0.781250 -0.312500 -v -1.312500 0.625000 -0.468750 -v -1.312500 0.514514 -0.422985 -v -0.437500 0.781250 -0.187500 -v -0.437500 0.781250 -0.312500 -v -1.312500 0.781250 -0.187500 -v -0.437500 0.735485 -0.422985 -v -1.312500 0.735485 -0.422985 -v -0.437500 0.625000 -0.468750 -v -3.312500 0.536612 -0.224112 -v -1.312500 0.625000 -0.187500 -v -3.312500 0.625000 -0.187500 -v -1.312500 0.713388 -0.224112 -v -3.312500 0.713388 -0.224112 -v -1.312500 0.750000 -0.312500 -v -3.312500 0.750000 -0.312500 -v -1.312500 0.713388 -0.400888 -v -3.312500 0.713388 -0.400888 -v -1.312500 0.625000 -0.437500 -v -3.312500 0.625000 -0.437500 -v -1.312500 0.536612 -0.400888 -v -3.312500 0.536612 -0.400888 -v -1.312500 0.500000 -0.312500 -v -3.312500 0.500000 -0.312500 -v -1.312500 0.536612 -0.224112 -v -3.312500 5.250000 0.187501 -v -0.312500 5.250000 0.250001 -v -3.312500 5.250000 0.250001 -v -0.312500 5.437500 0.250001 -v -0.250000 5.437500 0.187501 -v -3.312500 5.437500 0.187501 -v -3.312500 5.437500 0.250001 -v -3.312500 4.250000 0.187501 -v -0.312500 4.250000 0.250001 -v -3.312500 4.250000 0.250001 -v -0.312500 4.437500 0.250001 -v -0.250000 4.437500 0.187501 -v -3.312500 4.437500 0.187501 -v -3.312500 4.437500 0.250001 -v -3.312500 3.250000 0.187501 -v -0.312500 3.250000 0.250001 -v -3.312500 3.250000 0.250001 -v -0.312500 3.437500 0.250001 -v -0.250000 3.437500 0.187501 -v -3.312500 3.437500 0.187501 -v -3.312500 3.437500 0.250001 -v -3.312500 2.250000 0.187500 -v -0.312500 2.250000 0.250000 -v -3.312500 2.250000 0.250000 -v -0.312500 2.437500 0.250000 -v -0.250000 2.437500 0.187500 -v -3.312500 2.437500 0.187500 -v -3.312500 2.437500 0.250000 -v -3.312500 1.250000 0.187500 -v -0.312500 1.250000 0.250000 -v -3.312500 1.250000 0.250000 -v -0.312500 1.437500 0.250000 -v -0.250000 1.437500 0.187500 -v -3.312500 1.437500 0.187500 -v -3.312500 1.437500 0.250000 -v -3.312500 0.250000 0.187500 -v -0.312500 0.250000 0.250000 -v -3.312500 0.250000 0.250000 -v -0.312500 0.437500 0.250000 -v -0.250000 0.437500 0.187500 -v -3.312500 0.437500 0.187500 -v -3.312500 0.437500 0.250000 -v -3.312500 5.250000 -0.187499 -v -0.312500 5.250000 -0.249999 -v -0.250000 5.250000 -0.187499 -v -3.312500 5.250000 -0.249999 -v -0.312500 5.437500 -0.249999 -v -0.250000 5.437500 -0.187499 -v -3.312500 5.437500 -0.187499 -v -3.312500 5.437500 -0.249999 -v -3.312500 4.250000 -0.187499 -v -0.312500 4.250000 -0.249999 -v -0.250000 4.250000 -0.187499 -v -3.312500 4.250000 -0.249999 -v -0.312500 4.437500 -0.249999 -v -0.250000 4.437500 -0.187499 -v -3.312500 4.437500 -0.187499 -v -3.312500 4.437500 -0.249999 -v -3.312500 3.250000 -0.187499 -v -0.312500 3.250000 -0.249999 -v -0.250000 3.250000 -0.187499 -v -3.312500 3.250000 -0.249999 -v -0.312500 3.437500 -0.249999 -v -0.250000 3.437500 -0.187499 -v -3.312500 3.437500 -0.187499 -v -3.312500 3.437500 -0.249999 -v -3.312500 2.250000 -0.187500 -v -0.312500 2.250000 -0.250000 -v -0.250000 2.250000 -0.187500 -v -3.312500 2.250000 -0.250000 -v -0.312500 2.437500 -0.250000 -v -0.250000 2.437500 -0.187500 -v -3.312500 2.437500 -0.187500 -v -3.312500 2.437500 -0.250000 -v -3.312500 1.250000 -0.187500 -v -0.312500 1.250000 -0.250000 -v -0.250000 1.250000 -0.187500 -v -3.312500 1.250000 -0.250000 -v -0.312500 1.437500 -0.250000 -v -0.250000 1.437500 -0.187500 -v -3.312500 1.437500 -0.187500 -v -3.312500 1.437500 -0.250000 -v -3.312500 0.250000 -0.187500 -v -0.312500 0.250000 -0.250000 -v -0.250000 0.250000 -0.187500 -v -3.312500 0.250000 -0.250000 -v -0.312500 0.437500 -0.250000 -v -0.250000 0.437500 -0.187500 -v -3.312500 0.437500 -0.187500 -v -3.312500 0.437500 -0.250000 -v -0.437500 1.500000 0.187500 -v -0.562500 1.562500 0.250000 -v -0.562500 1.500000 0.187500 -v -0.562500 2.187500 0.187500 -v -0.437500 2.125000 0.250000 -v -0.437500 2.187500 0.187500 -v -0.437500 1.562500 0.250000 -v -0.437500 2.187500 0.187500 -v -0.562500 2.125000 0.250000 -v -0.562500 1.500000 0.187500 -v -0.437500 2.500000 0.187500 -v -0.562500 2.562500 0.250000 -v -0.562500 2.500000 0.187500 -v -0.562500 3.187500 0.187501 -v -0.437500 3.125000 0.250001 -v -0.437500 3.187500 0.187501 -v -0.437500 2.562500 0.250000 -v -0.437500 3.187500 0.187501 -v -0.562500 3.125000 0.250001 -v -0.562500 2.500000 0.187500 -v -0.562500 1.562500 -0.250000 -v -0.437500 1.500000 -0.187500 -v -0.562500 1.500000 -0.187500 -v -0.437500 2.125000 -0.250000 -v -0.562500 2.187500 -0.187500 -v -0.437500 2.187500 -0.187500 -v -0.437500 1.562500 -0.250000 -v -0.437500 2.187500 -0.187500 -v -0.562500 1.500000 -0.187500 -v -0.562500 2.125000 -0.250000 -v -0.562500 2.562500 -0.250000 -v -0.437500 2.500000 -0.187500 -v -0.562500 2.500000 -0.187500 -v -0.437500 3.125000 -0.249999 -v -0.562500 3.187500 -0.187499 -v -0.437500 3.187500 -0.187499 -v -0.437500 2.562500 -0.250000 -v -0.437500 3.187500 -0.187499 -v -0.562500 2.500000 -0.187500 -v -0.562500 3.125000 -0.249999 -v -2.125000 1.500000 0.187500 -v -3.187500 1.500000 0.250000 -v -3.187500 1.500000 0.187500 -v -3.187500 2.187500 0.250000 -v -2.125000 2.187500 0.250000 -v -2.125000 1.500000 0.250000 -v -2.125000 2.187500 0.187500 -v -3.187500 2.187500 0.187500 -v -3.187500 1.500000 -0.250000 -v -2.125000 1.500000 -0.187500 -v -3.187500 1.500000 -0.187500 -v -3.187500 2.187500 -0.250000 -v -2.125000 2.187500 -0.250000 -v -2.125000 1.500000 -0.250000 -v -2.125000 2.187500 -0.187500 -v -3.187500 2.187500 -0.187500 -v -2.812500 2.125000 -0.312500 -v -2.812500 1.562500 -0.250000 -v -2.812500 1.562500 -0.312500 -v -3.125000 1.562500 -0.250000 -v -3.125000 2.125000 -0.312500 -v -3.125000 1.562500 -0.312500 -v -3.125000 2.125000 -0.250000 -v -2.812500 2.125000 -0.250000 -v -3.312500 5.937500 0.187501 -v -0.250000 5.250000 0.187501 -v -0.250000 5.250000 0.187501 -v -0.250000 5.437500 0.187501 -v -0.250000 4.250000 0.187501 -v -0.250000 4.250000 0.187501 -v -0.250000 4.437500 0.187501 -v -0.250000 3.250000 0.187501 -v -0.250000 3.250000 0.187501 -v -0.250000 3.437500 0.187501 -v -0.250000 2.250000 0.187500 -v -0.250000 2.250000 0.187500 -v -0.250000 2.437500 0.187500 -v -0.250000 1.250000 0.187500 -v -0.250000 1.250000 0.187500 -v -0.250000 1.437500 0.187500 -v -0.250000 0.250000 0.187500 -v -0.250000 0.250000 0.187500 -v -0.250000 0.437500 0.187500 -v -0.250000 5.250000 -0.187499 -v -0.250000 5.437500 -0.187499 -v -0.250000 4.250000 -0.187499 -v -0.250000 4.437500 -0.187499 -v -0.250000 3.250000 -0.187499 -v -0.250000 3.437500 -0.187499 -v -0.250000 2.250000 -0.187500 -v -0.250000 2.437500 -0.187500 -v -0.250000 1.250000 -0.187500 -v -0.250000 1.437500 -0.187500 -v -0.250000 0.250000 -0.187500 -v -0.250000 0.437500 -0.187500 -v -0.437500 1.500000 0.187500 -v -0.562500 2.187500 0.187500 -v -0.437500 2.500000 0.187500 -v -0.562500 3.187500 0.187501 -v -0.437500 1.500000 -0.187500 -v -0.562500 2.187500 -0.187500 -v -0.437500 2.500000 -0.187500 -v -0.562500 3.187500 -0.187499 -vt 0.144330 0.822165 -vt 0.273196 0.837629 -vt 0.144330 0.837629 -vt 0.201031 0.595361 -vt 0.216495 0.837629 -vt 0.201031 0.837629 -vt 0.000000 0.822165 -vt 0.128866 0.837629 -vt -0.000000 0.837629 -vt 0.273196 0.822165 -vt 0.216495 0.595361 -vt 0.128866 0.822165 -vt 0.128866 0.837629 -vt 0.000000 0.595361 -vt 0.128866 0.595361 -vt 0.131443 0.837629 -vt 0.141753 0.837629 -vt 0.131443 0.595361 -vt 0.141753 0.595361 -vt 0.144330 0.837629 -vt 0.273196 0.837629 -vt 0.144330 0.595361 -vt 0.273196 0.595361 -vt 0.221649 0.932990 -vt 0.208763 0.935567 -vt 0.206186 0.922680 -vt 0.185567 0.932990 -vt 0.206186 0.932990 -vt 0.185567 0.935567 -vt 0.185567 0.945876 -vt 0.206186 0.935567 -vt 0.206186 0.945876 -vt 0.242268 0.932990 -vt 0.221649 0.935567 -vt 0.221649 0.932990 -vt 0.242268 0.922680 -vt 0.221649 0.922680 -vt 0.170103 0.932990 -vt 0.185567 0.922680 -vt 0.182990 0.935567 -vt 0.296392 0.958763 -vt 0.283505 0.961340 -vt 0.280928 0.948454 -vt 0.260309 0.958763 -vt 0.280928 0.958763 -vt 0.260309 0.961340 -vt 0.260309 0.971649 -vt 0.280928 0.961340 -vt 0.280928 0.971649 -vt 0.317010 0.958763 -vt 0.296392 0.961340 -vt 0.296392 0.958763 -vt 0.317010 0.948454 -vt 0.296392 0.948454 -vt 0.244845 0.958763 -vt 0.260309 0.948454 -vt 0.257732 0.961340 -vt 0.221649 0.958763 -vt 0.208763 0.961340 -vt 0.206186 0.948454 -vt 0.185567 0.958763 -vt 0.206186 0.958763 -vt 0.185567 0.961340 -vt 0.185567 0.971649 -vt 0.206186 0.961340 -vt 0.206186 0.971649 -vt 0.242268 0.958763 -vt 0.221649 0.961340 -vt 0.221649 0.958763 -vt 0.242268 0.948454 -vt 0.221649 0.948454 -vt 0.170103 0.958763 -vt 0.185567 0.948454 -vt 0.182990 0.961340 -vt 0.296392 0.984536 -vt 0.283505 0.987113 -vt 0.280928 0.974227 -vt 0.260309 0.984536 -vt 0.280928 0.984536 -vt 0.260309 0.987113 -vt 0.260309 0.997423 -vt 0.280928 0.987113 -vt 0.280928 0.997423 -vt 0.317010 0.984536 -vt 0.296392 0.987113 -vt 0.296392 0.984536 -vt 0.317010 0.974227 -vt 0.296392 0.974227 -vt 0.244845 0.984536 -vt 0.260309 0.974227 -vt 0.257732 0.987113 -vt 0.221649 0.984536 -vt 0.208763 0.987113 -vt 0.206186 0.974227 -vt 0.185567 0.984536 -vt 0.206186 0.984536 -vt 0.185567 0.987113 -vt 0.185567 0.997423 -vt 0.206186 0.987113 -vt 0.206186 0.997423 -vt 0.242268 0.984536 -vt 0.221649 0.987113 -vt 0.221649 0.984536 -vt 0.242268 0.974227 -vt 0.221649 0.974227 -vt 0.170103 0.984536 -vt 0.185567 0.974227 -vt 0.182990 0.987113 -vt 0.260309 0.932990 -vt 0.280928 0.922680 -vt 0.280928 0.932990 -vt 0.260309 0.935567 -vt 0.260309 0.945876 -vt 0.280928 0.935567 -vt 0.280928 0.945876 -vt 0.317010 0.932990 -vt 0.296392 0.935567 -vt 0.296392 0.932990 -vt 0.317010 0.922680 -vt 0.296392 0.932990 -vt 0.296392 0.922680 -vt 0.244845 0.932990 -vt 0.260309 0.922680 -vt 0.257732 0.935567 -vt 0.054124 0.886598 -vt 0.090206 0.891753 -vt 0.054124 0.891753 -vt 0.090206 0.881443 -vt 0.054124 0.881443 -vt 0.103783 0.891154 -vt 0.094671 0.891154 -vt 0.092783 0.886598 -vt 0.105670 0.881443 -vt 0.105670 0.886598 -vt 0.105670 0.899485 -vt 0.092784 0.904639 -vt 0.092784 0.899485 -vt 0.054124 0.912371 -vt 0.090206 0.907216 -vt 0.090206 0.912371 -vt 0.090206 0.902062 -vt 0.054124 0.907216 -vt 0.054124 0.902062 -vt 0.103783 0.909195 -vt 0.099227 0.911082 -vt 0.090206 0.896907 -vt 0.054124 0.896907 -vt 0.167526 0.969072 -vt 0.085052 0.974227 -vt 0.085052 0.969072 -vt 0.167526 0.963918 -vt 0.085052 0.963918 -vt 0.167526 0.958763 -vt 0.085052 0.958763 -vt 0.167526 0.994845 -vt 0.085052 1.000000 -vt 0.085052 0.994845 -vt 0.167526 0.989691 -vt 0.085052 0.989691 -vt 0.167526 0.984536 -vt 0.085052 0.984536 -vt 0.167526 0.979381 -vt 0.085052 0.979381 -vt 0.167526 0.974227 -vt 0.054124 0.853093 -vt 0.090206 0.858247 -vt 0.090206 0.853093 -vt 0.090206 0.847938 -vt 0.054124 0.847938 -vt 0.092783 0.853093 -vt 0.099227 0.859536 -vt 0.103783 0.857648 -vt 0.105670 0.847938 -vt 0.105670 0.853093 -vt 0.092784 0.871134 -vt 0.105670 0.865979 -vt 0.092784 0.865979 -vt 0.090206 0.873711 -vt 0.054124 0.878866 -vt 0.090206 0.878866 -vt 0.054124 0.873711 -vt 0.090206 0.868557 -vt 0.054124 0.868557 -vt 0.099227 0.877577 -vt 0.105670 0.871134 -vt 0.090206 0.863402 -vt 0.054124 0.863402 -vt 0.054124 0.858247 -vt 0.085052 0.930412 -vt 0.167526 0.925258 -vt 0.085052 0.925258 -vt 0.167526 0.920103 -vt 0.085052 0.920103 -vt 0.167526 0.914948 -vt 0.085052 0.914948 -vt 0.085052 0.956186 -vt 0.167526 0.951031 -vt 0.085052 0.951031 -vt 0.167526 0.945876 -vt 0.085052 0.945876 -vt 0.167526 0.940722 -vt 0.085052 0.940722 -vt 0.167526 0.935567 -vt 0.085052 0.935567 -vt 0.167526 0.930412 -vt 0.319588 0.987113 -vt 0.443299 0.989691 -vt 0.319588 0.989691 -vt 0.443299 0.997423 -vt 0.445876 0.997423 -vt 0.319588 0.997423 -vt 0.443299 1.000000 -vt 0.319588 1.000000 -vt 0.319588 0.971649 -vt 0.443299 0.974227 -vt 0.319588 0.974227 -vt 0.443299 0.981959 -vt 0.445876 0.981959 -vt 0.319588 0.981959 -vt 0.443299 0.984536 -vt 0.319588 0.984536 -vt 0.319588 0.956186 -vt 0.443299 0.958763 -vt 0.319588 0.958763 -vt 0.443299 0.966495 -vt 0.445876 0.966495 -vt 0.319588 0.966495 -vt 0.443299 0.969072 -vt 0.319588 0.969072 -vt 0.319588 0.940722 -vt 0.443299 0.943299 -vt 0.319588 0.943299 -vt 0.443299 0.951031 -vt 0.445876 0.951031 -vt 0.319588 0.951031 -vt 0.443299 0.953608 -vt 0.319588 0.953608 -vt 0.319588 0.925258 -vt 0.443299 0.927835 -vt 0.319588 0.927835 -vt 0.443299 0.935567 -vt 0.445876 0.935567 -vt 0.319588 0.935567 -vt 0.443299 0.938144 -vt 0.319588 0.938144 -vt 0.319588 0.909794 -vt 0.443299 0.912371 -vt 0.319588 0.912371 -vt 0.443299 0.920103 -vt 0.445876 0.920103 -vt 0.319588 0.920103 -vt 0.443299 0.922680 -vt 0.319588 0.922680 -vt 0.448454 0.987113 -vt 0.572165 0.989691 -vt 0.574742 0.987113 -vt 0.448454 0.989691 -vt 0.572165 0.997423 -vt 0.574742 0.997423 -vt 0.448454 0.997423 -vt 0.572165 1.000000 -vt 0.448454 1.000000 -vt 0.448454 0.971649 -vt 0.572165 0.974227 -vt 0.574742 0.971649 -vt 0.448454 0.974227 -vt 0.572165 0.981959 -vt 0.574742 0.981959 -vt 0.448454 0.981959 -vt 0.572165 0.984536 -vt 0.448454 0.984536 -vt 0.448454 0.956186 -vt 0.572165 0.958763 -vt 0.574742 0.956186 -vt 0.448454 0.958763 -vt 0.572165 0.966495 -vt 0.574742 0.966495 -vt 0.448454 0.966495 -vt 0.572165 0.969072 -vt 0.448454 0.969072 -vt 0.448454 0.940722 -vt 0.572165 0.943299 -vt 0.574742 0.940722 -vt 0.448454 0.943299 -vt 0.572165 0.951031 -vt 0.574742 0.951031 -vt 0.448454 0.951031 -vt 0.572165 0.953608 -vt 0.448454 0.953608 -vt 0.448454 0.925258 -vt 0.572165 0.927835 -vt 0.574742 0.925258 -vt 0.448454 0.927835 -vt 0.572165 0.935567 -vt 0.574742 0.935567 -vt 0.448454 0.935567 -vt 0.572165 0.938144 -vt 0.448454 0.938144 -vt 0.448454 0.909794 -vt 0.572165 0.912371 -vt 0.574742 0.909794 -vt 0.448454 0.912371 -vt 0.572165 0.920103 -vt 0.574742 0.920103 -vt 0.448454 0.920103 -vt 0.572165 0.922680 -vt 0.448454 0.922680 -vt 0.146907 0.855670 -vt 0.152062 0.853093 -vt 0.152062 0.855670 -vt 0.152062 0.878866 -vt 0.146907 0.881443 -vt 0.146907 0.878866 -vt 0.152062 0.878866 -vt 0.146907 0.855670 -vt 0.152062 0.855670 -vt 0.152062 0.878866 -vt 0.154639 0.853093 -vt 0.152062 0.855670 -vt 0.146907 0.855670 -vt 0.144330 0.881443 -vt 0.146907 0.878866 -vt 0.146907 0.886598 -vt 0.152062 0.884021 -vt 0.152062 0.886598 -vt 0.152062 0.909794 -vt 0.146907 0.912371 -vt 0.146907 0.909794 -vt 0.152062 0.909794 -vt 0.146907 0.886598 -vt 0.152062 0.886598 -vt 0.152062 0.909794 -vt 0.154639 0.884021 -vt 0.152062 0.886598 -vt 0.146907 0.886598 -vt 0.144330 0.912371 -vt 0.146907 0.909794 -vt 0.164948 0.853093 -vt 0.159794 0.855670 -vt 0.164948 0.855670 -vt 0.159794 0.881443 -vt 0.164948 0.878866 -vt 0.159794 0.878866 -vt 0.159794 0.855670 -vt 0.164948 0.878866 -vt 0.164948 0.855670 -vt 0.167526 0.853093 -vt 0.164948 0.878866 -vt 0.164948 0.855670 -vt 0.157216 0.881443 -vt 0.159794 0.855670 -vt 0.159794 0.878866 -vt 0.164948 0.884021 -vt 0.159794 0.886598 -vt 0.164948 0.886598 -vt 0.159794 0.912371 -vt 0.164948 0.909794 -vt 0.159794 0.909794 -vt 0.159794 0.886598 -vt 0.164948 0.909794 -vt 0.164948 0.886598 -vt 0.167526 0.884021 -vt 0.164948 0.909794 -vt 0.164948 0.886598 -vt 0.157216 0.912371 -vt 0.159794 0.886598 -vt 0.159794 0.909794 -vt 0.002577 0.561856 -vt 0.046392 0.559278 -vt 0.046392 0.561856 -vt 0.002577 0.590206 -vt 0.000000 0.561856 -vt 0.002577 0.561856 -vt 0.046392 0.590206 -vt 0.046392 0.561856 -vt 0.048969 0.590206 -vt 0.048969 0.561856 -vt 0.002577 0.592784 -vt 0.046392 0.592784 -vt 0.097938 0.559278 -vt 0.054124 0.561856 -vt 0.097938 0.561856 -vt 0.051546 0.561856 -vt 0.054124 0.590206 -vt 0.054124 0.561856 -vt 0.097938 0.590206 -vt 0.097938 0.561856 -vt 0.100515 0.590206 -vt 0.100515 0.561856 -vt 0.054124 0.592784 -vt 0.097938 0.592784 -vt 0.208763 0.590206 -vt 0.206186 0.567010 -vt 0.208763 0.567010 -vt 0.208763 0.567010 -vt 0.221649 0.564433 -vt 0.221649 0.567010 -vt 0.221649 0.590206 -vt 0.221649 0.567010 -vt 0.224227 0.590206 -vt 0.224227 0.567010 -vt 0.208763 0.592784 -vt 0.221649 0.592784 -vt -0.000000 0.837629 -vt 0.219072 0.935567 -vt 0.242268 0.935567 -vt 0.242268 0.932990 -vt 0.172680 0.935567 -vt 0.170103 0.922680 -vt 0.293814 0.961340 -vt 0.317010 0.961340 -vt 0.317010 0.958763 -vt 0.247423 0.961340 -vt 0.244845 0.948454 -vt 0.219072 0.961340 -vt 0.242268 0.961340 -vt 0.242268 0.958763 -vt 0.172680 0.961340 -vt 0.170103 0.948454 -vt 0.293814 0.987113 -vt 0.317010 0.987113 -vt 0.317010 0.984536 -vt 0.247423 0.987113 -vt 0.244845 0.974227 -vt 0.219072 0.987113 -vt 0.242268 0.987113 -vt 0.242268 0.984536 -vt 0.172680 0.987113 -vt 0.170103 0.974227 -vt 0.317010 0.935567 -vt 0.317010 0.932990 -vt 0.247423 0.935567 -vt 0.244845 0.922680 -vt 0.090206 0.886598 -vt 0.099227 0.893041 -vt 0.092784 0.881443 -vt 0.105670 0.904639 -vt 0.094671 0.909195 -vt 0.167526 1.000000 -vt 0.094671 0.857648 -vt 0.092784 0.847938 -vt 0.094671 0.875689 -vt 0.103783 0.875689 -vt 0.167526 0.956186 -vt 0.445876 0.987113 -vt 0.319588 0.997423 -vt 0.445876 0.989691 -vt 0.445876 0.997423 -vt 0.445876 0.971649 -vt 0.319588 0.981959 -vt 0.445876 0.974227 -vt 0.445876 0.981959 -vt 0.445876 0.956186 -vt 0.319588 0.966495 -vt 0.445876 0.958763 -vt 0.445876 0.966495 -vt 0.445876 0.940722 -vt 0.319588 0.951031 -vt 0.445876 0.943299 -vt 0.445876 0.951031 -vt 0.445876 0.925258 -vt 0.319588 0.935567 -vt 0.445876 0.927835 -vt 0.445876 0.935567 -vt 0.445876 0.909794 -vt 0.319588 0.920103 -vt 0.445876 0.912371 -vt 0.445876 0.920103 -vt 0.448454 0.997423 -vt 0.574742 0.989691 -vt 0.574742 0.997423 -vt 0.448454 0.981959 -vt 0.574742 0.974227 -vt 0.574742 0.981959 -vt 0.448454 0.966495 -vt 0.574742 0.958763 -vt 0.574742 0.966495 -vt 0.448454 0.951031 -vt 0.574742 0.943299 -vt 0.574742 0.951031 -vt 0.448454 0.935567 -vt 0.574742 0.927835 -vt 0.574742 0.935567 -vt 0.448454 0.920103 -vt 0.574742 0.912371 -vt 0.574742 0.920103 -vt 0.146907 0.853093 -vt 0.152062 0.881443 -vt 0.146907 0.878866 -vt 0.154639 0.881443 -vt 0.144330 0.853093 -vt 0.146907 0.884021 -vt 0.152062 0.912371 -vt 0.146907 0.909794 -vt 0.154639 0.912371 -vt 0.144330 0.884021 -vt 0.159794 0.853093 -vt 0.164948 0.881443 -vt 0.159794 0.878866 -vt 0.167526 0.881443 -vt 0.157216 0.853093 -vt 0.159794 0.884021 -vt 0.164948 0.912371 -vt 0.159794 0.909794 -vt 0.167526 0.912371 -vt 0.157216 0.884021 -vt 0.002577 0.559278 -vt -0.000000 0.590206 -vt 0.054124 0.559278 -vt 0.051546 0.590206 -vt 0.206186 0.590206 -vt 0.208763 0.564433 -vn 0.0000 -1.0000 -0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 -0.0000 1.0000 +v -0.187500 0.062500 -0.187500 +v -0.187500 0.562500 -0.187500 +v 0.187500 0.062500 0.125000 +v 0.125000 0.062500 0.187500 +v 0.125000 0.562500 0.187500 +v 0.187500 0.562500 0.125000 +v 0.125000 0.062500 -0.187500 +v 0.187500 0.062500 -0.125000 +v 0.187500 0.562500 -0.125000 +v 0.125000 0.562500 -0.187500 +v -0.375000 0.375000 0.312500 +v -0.687500 0.375000 0.375000 +v -0.687500 0.687500 0.375000 +v -0.500000 0.375000 0.312500 +v -0.500000 0.687500 0.312500 +v -0.562500 0.687500 0.375000 +v -0.562500 0.375000 0.375000 +v -0.687500 0.375000 0.187500 +v -0.687500 0.687500 0.187500 +v -0.375000 0.375000 0.187500 +v -0.375000 0.687500 0.187500 +v -0.375000 0.687500 0.312500 +v -0.687500 0.593750 0.356694 +v -0.687500 0.637944 0.312500 +v -0.687500 0.549556 0.312500 +v -0.687500 0.593750 0.268306 +v -3.187499 0.593750 0.356694 +v -3.187499 0.637944 0.312500 +v -3.187499 0.549556 0.312500 +v -3.187499 0.593750 0.268306 +v -0.187500 0.062500 0.187500 +v -0.187500 5.812500 0.187500 +v -0.187500 0.062500 -0.187500 +v -0.187500 5.812500 -0.187500 +v -0.312500 5.521358 0.187500 +v -3.062499 1.125000 0.243750 +v -3.062499 1.500000 0.243750 +v -0.312500 1.062500 0.187500 +v -3.062499 1.062500 0.187499 +v -0.312500 1.125000 0.243750 +v -0.312500 1.500000 0.243750 +v -0.312500 1.562500 0.187500 +v -3.062499 1.562500 0.187499 +v -3.062499 2.125000 0.243750 +v -3.062499 2.500000 0.243750 +v -0.312500 2.062500 0.187500 +v -3.062499 2.062500 0.187499 +v -0.312500 2.125000 0.243750 +v -0.312500 2.500000 0.243750 +v -0.312500 2.562500 0.187500 +v -3.062499 2.562500 0.187499 +v -3.062499 3.125000 0.243750 +v -3.062499 3.500000 0.243750 +v -0.312500 3.062500 0.187500 +v -3.062499 3.062500 0.187499 +v -0.312500 3.125000 0.243750 +v -0.312500 3.500000 0.243750 +v -0.312500 3.562500 0.187500 +v -3.062499 3.562500 0.187499 +v -3.062499 4.125000 0.243750 +v -3.062499 4.500000 0.243750 +v -0.312500 4.062500 0.187500 +v -3.062499 4.062500 0.187499 +v -0.312500 4.125000 0.243750 +v -0.312500 4.500000 0.243750 +v -0.312500 4.562500 0.187500 +v -3.062499 4.562500 0.187499 +v -3.062499 1.125000 -0.243751 +v -3.062499 1.500000 -0.243751 +v -0.312500 1.062500 -0.187501 +v -3.062499 1.062500 -0.187501 +v -0.312500 1.125000 -0.243751 +v -0.312500 1.500000 -0.243751 +v -0.312500 1.562500 -0.187501 +v -3.062499 1.562500 -0.187501 +v -3.062499 2.125000 -0.243751 +v -3.062499 2.500000 -0.243751 +v -0.312500 2.062500 -0.187501 +v -3.062499 2.062500 -0.187501 +v -0.312500 2.125000 -0.243751 +v -0.312500 2.500000 -0.243751 +v -0.312500 2.562500 -0.187501 +v -3.062499 2.562500 -0.187501 +v -3.062499 3.125000 -0.243751 +v -3.062499 3.500000 -0.243751 +v -0.312500 3.062500 -0.187501 +v -3.062499 3.062500 -0.187501 +v -0.312500 3.125000 -0.243751 +v -0.312500 3.500000 -0.243751 +v -0.312500 3.562500 -0.187501 +v -3.062499 3.562500 -0.187501 +v -3.062499 4.125000 -0.243751 +v -3.062499 4.500000 -0.243751 +v -0.312500 4.062500 -0.187501 +v -3.062499 4.062500 -0.187501 +v -0.312500 4.125000 -0.243751 +v -0.312500 4.500000 -0.243751 +v -0.312500 4.562500 -0.187501 +v -3.062499 4.562500 -0.187501 +v -2.812500 1.625000 -0.250000 +v -2.812500 2.000000 -0.250000 +v -2.812500 1.625000 -0.187500 +v -2.812500 2.000000 -0.187500 +v -2.187500 1.625000 -0.250000 +v -2.187500 2.000000 -0.250000 +v -2.187500 1.625000 -0.187500 +v -2.187500 2.000000 -0.187500 +v -0.687500 0.468750 0.356694 +v -0.687500 0.512944 0.312500 +v -0.687500 0.424556 0.312500 +v -0.687500 0.468750 0.268306 +v -3.187499 0.468750 0.356694 +v -3.187499 0.512944 0.312500 +v -3.187499 0.424556 0.312500 +v -3.187499 0.468750 0.268306 +v -0.687500 0.593750 -0.268306 +v -0.687500 0.637944 -0.312500 +v -0.687500 0.549556 -0.312500 +v -0.687500 0.593750 -0.356694 +v -3.187499 0.593750 -0.268306 +v -3.187499 0.637944 -0.312500 +v -3.187499 0.549556 -0.312500 +v -3.187499 0.593750 -0.356694 +v -0.687500 0.468750 -0.268306 +v -0.687500 0.512944 -0.312500 +v -0.687500 0.424556 -0.312500 +v -0.687500 0.468750 -0.356694 +v -3.187499 0.468750 -0.268306 +v -3.187499 0.512944 -0.312500 +v -3.187499 0.424556 -0.312500 +v -3.187499 0.468750 -0.356694 +v -2.437501 0.375000 -0.375001 +v -2.437501 0.687500 -0.375001 +v -2.437501 0.312500 -0.187501 +v -2.437501 0.750000 -0.187501 +v -2.562501 0.375000 -0.375001 +v -2.562501 0.687500 -0.375001 +v -2.562501 0.312500 -0.187501 +v -2.562501 0.750000 -0.187501 +v -2.437501 0.312500 -0.250001 +v -2.437501 0.750000 -0.250001 +v -2.562501 0.312500 -0.250001 +v -2.562501 0.750000 -0.250001 +v -2.437501 0.375000 -0.312501 +v -2.562501 0.687500 -0.312501 +v -2.437501 0.687500 -0.312501 +v -2.562501 0.375000 -0.312501 +v -0.375000 0.375000 -0.312500 +v -0.687500 0.375000 -0.375000 +v -0.687500 0.687500 -0.375000 +v -0.500000 0.375000 -0.312500 +v -0.500000 0.687500 -0.312500 +v -0.562500 0.687500 -0.375000 +v -0.562500 0.375000 -0.375000 +v -0.687500 0.375000 -0.187500 +v -0.687500 0.687500 -0.187500 +v -0.375000 0.375000 -0.187500 +v -0.375000 0.687500 -0.187500 +v -0.375000 0.687500 -0.312500 +v -0.187500 1.062500 0.187500 +v -0.187500 1.562500 0.187500 +v -0.187500 1.062500 -0.187500 +v -0.187500 1.562500 -0.187500 +v 0.187500 1.062500 0.125000 +v 0.125000 1.062500 0.187500 +v 0.125000 1.562500 0.187500 +v 0.187500 1.562500 0.125000 +v 0.125000 1.062500 -0.187500 +v 0.187500 1.062500 -0.125000 +v 0.187500 1.562500 -0.125000 +v 0.125000 1.562500 -0.187500 +v -0.187500 2.062500 0.187500 +v -0.187500 2.562500 0.187500 +v -0.187500 2.062500 -0.187500 +v -0.187500 2.562500 -0.187500 +v 0.187500 2.062500 0.125000 +v 0.125000 2.062500 0.187500 +v 0.125000 2.562500 0.187500 +v 0.187500 2.562500 0.125000 +v 0.125000 2.062500 -0.187500 +v 0.187500 2.062500 -0.125000 +v 0.187500 2.562500 -0.125000 +v 0.125000 2.562500 -0.187500 +v -0.187500 3.062500 0.187500 +v -0.187500 3.562500 0.187500 +v -0.187500 3.062500 -0.187500 +v -0.187500 3.562500 -0.187500 +v 0.187500 3.062500 0.125000 +v 0.125000 3.062500 0.187500 +v 0.125000 3.562500 0.187500 +v 0.187500 3.562500 0.125000 +v 0.125000 3.062500 -0.187500 +v 0.187500 3.062500 -0.125000 +v 0.187500 3.562500 -0.125000 +v 0.125000 3.562500 -0.187500 +v -0.187500 4.062500 0.187500 +v -0.187500 4.562500 0.187500 +v -0.187500 4.062500 -0.187500 +v -0.187500 4.562500 -0.187500 +v 0.187500 4.062500 0.125000 +v 0.125000 4.062500 0.187500 +v 0.125000 4.562500 0.187500 +v 0.187500 4.562500 0.125000 +v 0.125000 4.062500 -0.187500 +v 0.187500 4.062500 -0.125000 +v 0.187500 4.562500 -0.125000 +v 0.125000 4.562500 -0.187500 +v -0.187500 5.062500 0.187500 +v -0.187500 5.562500 0.187500 +v -0.187500 5.062500 -0.187500 +v -0.187500 5.562500 -0.187500 +v 0.187500 5.062500 0.125000 +v 0.125000 5.062500 0.187500 +v 0.125000 5.562500 0.187500 +v 0.187500 5.562500 0.125000 +v 0.125000 5.062500 -0.187500 +v 0.187500 5.062500 -0.125000 +v 0.187500 5.562500 -0.125000 +v 0.125000 5.562500 -0.187500 +v -0.312500 0.187500 -0.250000 +v -0.312500 0.187500 -0.187500 +v -0.193750 0.187500 -0.250000 +v -0.187500 5.662815 -0.187500 +v -0.193750 0.187500 -0.187500 +v -0.187500 5.662815 -0.250000 +v -3.062499 2.500000 -0.187501 +v -2.958148 3.292633 -0.187501 +v -2.652203 4.031250 -0.187501 +v -2.165514 4.665514 -0.187501 +v -1.531250 5.152203 -0.187500 +v -0.792633 5.458148 -0.187500 +v -2.760456 4.093750 -0.250001 +v -3.078888 3.324986 -0.250001 +v -3.187499 2.500000 -0.250001 +v -2.253902 4.753902 -0.250001 +v -1.593750 5.260456 -0.250000 +v -0.824985 5.578888 -0.250000 +v -2.652203 4.031250 -0.250001 +v -2.958148 3.292633 -0.250001 +v -3.062499 2.500000 -0.250001 +v -2.165514 4.665514 -0.250001 +v -1.531250 5.152203 -0.250000 +v -0.792633 5.458148 -0.250000 +v -3.062499 0.312500 -0.187501 +v -3.062499 0.312500 -0.250001 +v -3.187499 0.312500 -0.250001 +v -0.312500 5.521358 -0.250000 +v -0.193750 5.537815 -0.250000 +v -0.193750 5.537815 -0.187500 +v -0.312500 5.521358 -0.187500 +v -0.312799 5.646319 -0.250000 +v -3.187500 0.187500 -0.250001 +v -3.187500 0.312500 -0.250001 +v -0.312500 0.187500 -0.250000 +v -0.312500 0.312500 -0.250000 +v -3.187500 0.312500 -0.187501 +v -0.312500 0.312500 -0.187500 +v -0.312500 5.521358 -0.187500 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 -0.0000 1.0000 +vn 0.8660 -0.5000 -0.0000 +vn 0.9659 -0.2588 -0.0000 +vn 0.9979 -0.0654 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn 0.7071 -0.7071 -0.0000 +vn 0.5000 -0.8660 -0.0000 +vn 0.2588 -0.9659 -0.0000 +vn 0.1305 -0.9914 -0.0000 +vn 0.9997 -0.0250 -0.0000 +vn 0.9988 -0.0499 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 0.7071 0.7071 +vn -0.0000 -0.7071 0.7071 +vn 0.7071 -0.0000 -0.7071 vn 0.7071 -0.0000 0.7071 -vn 1.0000 0.0000 0.0000 -vn 0.7071 0.0000 -0.7071 -vn 0.0000 0.0000 -1.0000 -vn -0.0000 -0.9808 0.1951 -vn 0.0000 -0.7071 0.7071 -vn 0.0000 0.9808 0.1951 -vn 0.0000 0.7071 0.7071 -vn 0.0000 -0.7071 -0.7071 -vn 0.0000 0.7071 -0.7071 -vn 0.0000 -0.9808 -0.1951 -vn 0.0000 0.9808 -0.1951 -s off -f 541/779/45 549/780/45 548/781/45 -f 549/782/46 836/783/46 547/784/46 -f 836/785/47 546/786/47 547/787/47 -f 541/779/45 540/788/45 549/780/45 -f 549/782/46 540/789/46 836/783/46 -f 836/785/47 539/790/47 546/786/47 +vn -0.0000 -0.7071 -0.7071 +vn -0.0000 0.7071 -0.7071 +vn -0.0000 -0.6690 0.7433 +vn -0.0000 0.6690 0.7433 +vn -0.0000 -0.6690 -0.7433 +vn -0.0000 0.6690 -0.7433 +vt 0.313953 0.276163 +vt 0.165698 0.020349 +vt 0.313953 0.020349 +vt 0.636628 0.404070 +vt 0.630814 0.441860 +vt 0.630814 0.404070 +vt 0.636628 0.366279 +vt 0.630814 0.366279 +vt 0.636628 0.479651 +vt 0.630814 0.479651 +vt 0.630814 0.328488 +vt 0.636628 0.517442 +vt 0.630814 0.517442 +vt 0.639535 0.366279 +vt 0.639535 0.404070 +vt 0.639535 0.328488 +vt 0.686047 0.523256 +vt 0.688953 0.421512 +vt 0.688953 0.523256 +vt 0.636628 0.441860 +vt 0.639535 0.441860 +vt 0.639535 0.479651 +vt 0.639535 0.517442 +vt 0.639535 0.540698 +vt 0.575581 0.354651 +vt 0.581395 0.357558 +vt 0.575581 0.357558 +vt 0.680233 0.523256 +vt 0.686047 0.421512 +vt 0.575581 0.366279 +vt 0.325581 0.363372 +vt 0.325581 0.366279 +vt 0.325581 0.354651 +vt 0.325581 0.357558 +vt 0.630814 0.540698 +vt 0.575581 0.363372 +vt 0.581395 0.363372 +vt 0.148256 0.276163 +vt 0.000000 0.020349 +vt 0.148256 0.020349 +vt 0.459302 0.418605 +vt 0.325581 0.412791 +vt 0.459302 0.412791 +vt 0.325581 0.421512 +vt 0.325581 0.418605 +vt 0.473837 0.688953 +vt 0.459302 0.683140 +vt 0.473837 0.683140 +vt 0.456395 0.688953 +vt 0.459302 0.688953 +vt 0.476744 0.683140 +vt 0.482558 0.683140 +vt 0.479651 0.688953 +vt 0.479651 0.683140 +vt 0.450581 0.688953 +vt 0.453488 0.683140 +vt 0.453488 0.688953 +vt 0.473837 0.691860 +vt 0.476744 0.697674 +vt 0.459302 0.691860 +vt 0.476744 0.688953 +vt 0.456395 0.683140 +vt 0.473837 0.680233 +vt 0.459302 0.680233 +vt 0.456395 0.674419 +vt 0.113372 0.808140 +vt 0.110465 0.825581 +vt 0.110465 0.808140 +vt 0.081395 0.808140 +vt 0.078488 0.825581 +vt 0.078488 0.808140 +vt 0.081395 0.825581 +vt 0.081395 0.805233 +vt 0.110465 0.828488 +vt 0.081395 0.828488 +vt 0.360465 0.529070 +vt 0.345930 0.505814 +vt 0.360465 0.505814 +vt 0.377907 0.531977 +vt 0.360465 0.546512 +vt 0.363372 0.529070 +vt 0.375000 0.529070 +vt 0.363372 0.505814 +vt 0.375000 0.505814 +vt 0.392442 0.529070 +vt 0.377907 0.505814 +vt 0.392442 0.505814 +vt 0.377907 0.529070 +vt 0.377907 0.502907 +vt 0.360465 0.488372 +vt 0.383721 0.619186 +vt 0.401163 0.625000 +vt 0.383721 0.625000 +vt 0.401163 0.627907 +vt 0.383721 0.627907 +vt 0.383721 0.633721 +vt 0.401163 0.639535 +vt 0.383721 0.639535 +vt 0.401163 0.633721 +vt 0.383721 0.610465 +vt 0.401163 0.619186 +vt 0.380814 0.627907 +vt 0.375000 0.633721 +vt 0.375000 0.619186 +vt 0.409884 0.633721 +vt 0.404070 0.627907 +vt 0.063953 0.671512 +vt 0.180233 0.668605 +vt 0.180233 0.671512 +vt 0.180233 0.662791 +vt 0.063953 0.665698 +vt 0.063953 0.662791 +vt 0.063953 0.659884 +vt 0.180233 0.659884 +vt 0.063953 0.668605 +vt 0.148256 0.008721 +vt 0.165698 0.276163 +vt 0.273256 0.715116 +vt 0.145349 0.697674 +vt 0.273256 0.697674 +vt 0.273256 0.694767 +vt 0.145349 0.718023 +vt 0.145349 0.715116 +vt 0.273256 0.741279 +vt 0.145349 0.723837 +vt 0.273256 0.723837 +vt 0.273256 0.720930 +vt 0.145349 0.744186 +vt 0.145349 0.741279 +vt 0.273256 0.767442 +vt 0.145349 0.750000 +vt 0.273256 0.750000 +vt 0.273256 0.747093 +vt 0.145349 0.770349 +vt 0.145349 0.767442 +vt 0.273256 0.793605 +vt 0.145349 0.776163 +vt 0.273256 0.776163 +vt 0.273256 0.773256 +vt 0.145349 0.796512 +vt 0.145349 0.793605 +vt 0.145349 0.802326 +vt 0.273256 0.819767 +vt 0.273256 0.802326 +vt 0.273256 0.799419 +vt 0.145349 0.822674 +vt 0.145349 0.819767 +vt 0.145349 0.828488 +vt 0.273256 0.845930 +vt 0.273256 0.828488 +vt 0.273256 0.825581 +vt 0.145349 0.848837 +vt 0.145349 0.845930 +vt 0.145349 0.854651 +vt 0.273256 0.872093 +vt 0.273256 0.854651 +vt 0.273256 0.851744 +vt 0.145349 0.875000 +vt 0.145349 0.872093 +vt 0.145349 0.880814 +vt 0.273256 0.898256 +vt 0.273256 0.880814 +vt 0.273256 0.877907 +vt 0.145349 0.901163 +vt 0.145349 0.898256 +vt 0.113372 0.834302 +vt 0.110465 0.851744 +vt 0.110465 0.834302 +vt 0.081395 0.834302 +vt 0.078488 0.851744 +vt 0.078488 0.834302 +vt 0.081395 0.851744 +vt 0.081395 0.831395 +vt 0.110465 0.854651 +vt 0.081395 0.854651 +vt 0.063953 0.656977 +vt 0.180233 0.654070 +vt 0.180233 0.656977 +vt 0.180233 0.648256 +vt 0.063953 0.651163 +vt 0.063953 0.648256 +vt 0.063953 0.645349 +vt 0.180233 0.645349 +vt 0.063953 0.654070 +vt 0.183140 0.671512 +vt 0.299419 0.668605 +vt 0.299419 0.671512 +vt 0.299419 0.662791 +vt 0.183140 0.665698 +vt 0.183140 0.662791 +vt 0.183140 0.659884 +vt 0.299419 0.659884 +vt 0.183140 0.668605 +vt 0.183140 0.656977 +vt 0.299419 0.654070 +vt 0.299419 0.656977 +vt 0.299419 0.648256 +vt 0.183140 0.651163 +vt 0.183140 0.648256 +vt 0.183140 0.645349 +vt 0.299419 0.645349 +vt 0.183140 0.654070 +vt 0.459302 0.709302 +vt 0.473837 0.715116 +vt 0.473837 0.709302 +vt 0.456395 0.715116 +vt 0.459302 0.715116 +vt 0.476744 0.709302 +vt 0.479651 0.715116 +vt 0.482558 0.709302 +vt 0.479651 0.709302 +vt 0.453488 0.709302 +vt 0.450581 0.715116 +vt 0.453488 0.715116 +vt 0.473837 0.718023 +vt 0.459302 0.718023 +vt 0.476744 0.723837 +vt 0.476744 0.715116 +vt 0.456395 0.709302 +vt 0.476744 0.700581 +vt 0.459302 0.706395 +vt 0.473837 0.706395 +vt 0.401163 0.656977 +vt 0.383721 0.651163 +vt 0.383721 0.656977 +vt 0.401163 0.659884 +vt 0.383721 0.659884 +vt 0.401163 0.671512 +vt 0.383721 0.665698 +vt 0.383721 0.671512 +vt 0.401163 0.665698 +vt 0.401163 0.651163 +vt 0.383721 0.642442 +vt 0.375000 0.651163 +vt 0.380814 0.665698 +vt 0.380814 0.659884 +vt 0.404070 0.659884 +vt 0.409884 0.665698 +vt 0.395349 0.500000 +vt 0.380814 0.476744 +vt 0.395349 0.476744 +vt 0.412791 0.502907 +vt 0.395349 0.517442 +vt 0.398256 0.500000 +vt 0.409884 0.500000 +vt 0.398256 0.476744 +vt 0.409884 0.476744 +vt 0.427326 0.500000 +vt 0.412791 0.476744 +vt 0.427326 0.476744 +vt 0.412791 0.500000 +vt 0.412791 0.473837 +vt 0.395349 0.459302 +vt 0.395349 0.561047 +vt 0.380814 0.537791 +vt 0.395349 0.537791 +vt 0.412791 0.563953 +vt 0.395349 0.578488 +vt 0.398256 0.561047 +vt 0.409884 0.561047 +vt 0.398256 0.537791 +vt 0.409884 0.537791 +vt 0.427326 0.561047 +vt 0.412791 0.537791 +vt 0.427326 0.537791 +vt 0.412791 0.561047 +vt 0.412791 0.534884 +vt 0.395349 0.520349 +vt 0.430233 0.529070 +vt 0.415698 0.505814 +vt 0.430233 0.505814 +vt 0.447674 0.531977 +vt 0.430233 0.546512 +vt 0.433140 0.529070 +vt 0.444767 0.529070 +vt 0.433140 0.505814 +vt 0.444767 0.505814 +vt 0.462209 0.529070 +vt 0.447674 0.505814 +vt 0.462209 0.505814 +vt 0.447674 0.529070 +vt 0.447674 0.502907 +vt 0.430233 0.488372 +vt 0.465116 0.500000 +vt 0.450581 0.476744 +vt 0.465116 0.476744 +vt 0.482558 0.502907 +vt 0.465116 0.517442 +vt 0.468023 0.500000 +vt 0.479651 0.500000 +vt 0.468023 0.476744 +vt 0.479651 0.476744 +vt 0.497093 0.500000 +vt 0.482558 0.476744 +vt 0.497093 0.476744 +vt 0.482558 0.500000 +vt 0.482558 0.473837 +vt 0.465116 0.459302 +vt 0.465116 0.561047 +vt 0.450581 0.537791 +vt 0.465116 0.537791 +vt 0.482558 0.563953 +vt 0.465116 0.578488 +vt 0.468023 0.561047 +vt 0.479651 0.561047 +vt 0.468023 0.537791 +vt 0.479651 0.537791 +vt 0.497093 0.561047 +vt 0.482558 0.537791 +vt 0.497093 0.537791 +vt 0.482558 0.561047 +vt 0.482558 0.534884 +vt 0.465116 0.520349 +vt 0.642442 0.441860 +vt 0.648256 0.404070 +vt 0.642442 0.404070 +vt 0.648256 0.366279 +vt 0.642442 0.366279 +vt 0.648256 0.479651 +vt 0.648256 0.441860 +vt 0.642442 0.328488 +vt 0.648256 0.328488 +vt 0.642442 0.479651 +vt 0.648256 0.517442 +vt 0.651163 0.366279 +vt 0.651163 0.404070 +vt 0.651163 0.328488 +vt 0.700581 0.421512 +vt 0.697674 0.523256 +vt 0.700581 0.523256 +vt 0.651163 0.441860 +vt 0.651163 0.479651 +vt 0.651163 0.517442 +vt 0.651163 0.540698 +vt 0.581395 0.372093 +vt 0.575581 0.369186 +vt 0.575581 0.372093 +vt 0.697674 0.421512 +vt 0.691860 0.523256 +vt 0.325581 0.377907 +vt 0.575581 0.380814 +vt 0.325581 0.380814 +vt 0.325581 0.369186 +vt 0.325581 0.372093 +vt 0.642442 0.540698 +vt 0.642442 0.517442 +vt 0.575581 0.377907 +vt 0.581395 0.377907 +vt 0.325581 0.424419 +vt 0.459302 0.430233 +vt 0.459302 0.424419 +vt 0.325581 0.433140 +vt 0.325581 0.430233 +vt 0.636628 0.328488 +vt 0.636628 0.540698 +vt 0.581395 0.354651 +vt 0.680233 0.421512 +vt 0.000000 0.276163 +vt 0.459302 0.421512 +vt 0.482558 0.688953 +vt 0.450581 0.683140 +vt 0.476744 0.694767 +vt 0.456395 0.697674 +vt 0.456395 0.694767 +vt 0.476744 0.674419 +vt 0.476744 0.677326 +vt 0.456395 0.677326 +vt 0.113372 0.825581 +vt 0.110465 0.805233 +vt 0.345930 0.529070 +vt 0.377907 0.546512 +vt 0.360465 0.531977 +vt 0.377907 0.488372 +vt 0.360465 0.502907 +vt 0.401163 0.610465 +vt 0.380814 0.633721 +vt 0.409884 0.619186 +vt 0.404070 0.633721 +vt 0.180233 0.665698 +vt 0.165698 0.008721 +vt 0.145349 0.694767 +vt 0.273256 0.718023 +vt 0.145349 0.720930 +vt 0.273256 0.744186 +vt 0.145349 0.747093 +vt 0.273256 0.770349 +vt 0.145349 0.773256 +vt 0.273256 0.796512 +vt 0.145349 0.799419 +vt 0.273256 0.822674 +vt 0.145349 0.825581 +vt 0.273256 0.848837 +vt 0.145349 0.851744 +vt 0.273256 0.875000 +vt 0.145349 0.877907 +vt 0.273256 0.901163 +vt 0.113372 0.851744 +vt 0.110465 0.831395 +vt 0.180233 0.651163 +vt 0.299419 0.665698 +vt 0.299419 0.651163 +vt 0.482558 0.715116 +vt 0.450581 0.709302 +vt 0.456395 0.720930 +vt 0.456395 0.723837 +vt 0.476744 0.720930 +vt 0.476744 0.703488 +vt 0.456395 0.700581 +vt 0.456395 0.703488 +vt 0.401163 0.642442 +vt 0.375000 0.665698 +vt 0.404070 0.665698 +vt 0.409884 0.651163 +vt 0.380814 0.500000 +vt 0.412791 0.517442 +vt 0.395349 0.502907 +vt 0.412791 0.459302 +vt 0.395349 0.473837 +vt 0.380814 0.561047 +vt 0.412791 0.578488 +vt 0.395349 0.563953 +vt 0.412791 0.520349 +vt 0.395349 0.534884 +vt 0.415698 0.529070 +vt 0.447674 0.546512 +vt 0.430233 0.531977 +vt 0.447674 0.488372 +vt 0.430233 0.502907 +vt 0.450581 0.500000 +vt 0.482558 0.517442 +vt 0.465116 0.502907 +vt 0.482558 0.459302 +vt 0.465116 0.473837 +vt 0.450581 0.561047 +vt 0.482558 0.578488 +vt 0.465116 0.563953 +vt 0.482558 0.520349 +vt 0.465116 0.534884 +vt 0.648256 0.540698 +vt 0.581395 0.369186 +vt 0.691860 0.421512 +vt 0.459302 0.433140 +s 0 +usemtl TEXTURE +f 270/333/39 267/334/39 269/335/39 s 1 -f 539/791/48 540/792/48 541/793/48 -f 541/793/49 542/794/49 539/791/49 -f 543/795/50 544/796/50 545/797/50 -f 545/797/51 546/798/51 543/795/51 -f 547/799/52 548/800/52 549/801/52 -f 550/802/45 551/803/45 552/804/45 -f 553/805/48 552/804/48 554/806/48 -f 554/806/49 555/807/49 553/805/49 -f 556/808/50 551/809/50 557/810/50 -f 557/811/51 558/812/51 556/813/51 -f 559/814/52 550/802/52 560/815/52 -f 558/816/47 561/817/47 555/818/47 -f 562/819/45 563/820/45 564/821/45 -f 565/822/48 564/821/48 566/823/48 -f 566/823/49 567/824/49 565/822/49 -f 568/825/50 563/826/50 569/827/50 -f 569/828/51 570/829/51 568/830/51 -f 571/831/52 562/819/52 572/832/52 -f 570/833/47 573/834/47 567/835/47 -f 574/836/45 575/837/45 576/838/45 -f 577/839/48 576/838/48 578/840/48 -f 578/840/49 579/841/49 577/839/49 -f 580/842/50 575/843/50 581/844/50 -f 581/845/51 582/846/51 580/847/51 -f 583/848/52 574/836/52 584/849/52 -f 582/850/47 585/851/47 579/852/47 -f 586/853/45 587/854/45 588/855/45 -f 589/856/48 588/855/48 590/857/48 -f 590/857/49 591/858/49 589/856/49 -f 592/859/50 587/860/50 593/861/50 -f 593/862/51 594/863/51 592/864/51 -f 595/865/52 586/853/52 596/866/52 -f 594/867/47 597/868/47 591/869/47 -f 598/870/45 599/871/45 600/872/45 -f 601/873/48 600/872/48 602/874/48 -f 602/874/49 603/875/49 601/873/49 -f 604/876/50 599/877/50 605/878/50 -f 605/879/51 606/880/51 604/881/51 -f 607/882/52 598/870/52 608/883/52 -f 606/884/47 609/885/47 603/886/47 -f 610/887/48 611/888/48 612/889/48 -f 612/889/49 613/890/49 610/887/49 -f 614/891/50 615/892/50 616/893/50 -f 616/894/51 617/895/51 614/896/51 -f 618/897/52 619/898/52 620/899/52 -f 617/900/47 621/901/47 613/902/47 -f 622/903/53 623/904/54 624/905/54 -f 625/906/45 622/903/53 626/907/45 -f 624/908/46 627/909/46 628/910/46 -f 628/910/46 626/911/46 622/912/46 -f 629/913/50 630/914/50 625/915/50 -f 631/916/47 632/917/55 629/918/47 -f 633/919/56 628/920/55 627/921/56 -f 630/914/50 633/922/50 634/923/50 -f 634/924/48 627/921/56 635/925/48 -f 623/904/54 635/925/48 624/905/54 -f 636/926/52 637/927/57 638/928/52 -f 639/929/58 638/928/52 640/930/58 -f 641/931/47 640/930/58 642/932/47 -f 643/933/56 642/934/47 644/935/56 -f 645/936/48 644/935/56 646/937/48 -f 647/938/54 646/937/48 648/939/54 -f 649/940/45 648/939/54 650/941/45 -f 651/942/57 650/941/45 637/927/57 -f 652/943/59 653/944/57 654/945/59 -f 652/943/59 655/946/45 656/947/45 -f 657/948/46 658/949/46 659/950/46 -f 656/951/46 657/948/46 652/952/46 -f 654/953/50 660/954/50 655/955/50 -f 661/956/60 662/957/47 660/958/47 -f 657/959/60 663/960/58 664/961/58 -f 665/962/50 661/963/50 654/953/50 -f 664/961/58 665/964/52 658/965/52 -f 658/965/52 653/944/57 659/966/57 -f 666/967/54 667/968/48 668/969/48 -f 668/969/48 669/970/56 670/971/56 -f 670/971/56 671/972/47 672/973/47 -f 672/974/47 673/975/58 674/976/58 -f 674/976/58 675/977/52 676/978/52 -f 676/978/52 677/979/57 678/980/57 -f 678/980/57 679/981/45 680/982/45 -f 680/982/45 681/983/54 666/967/54 -f 682/984/45 683/985/45 684/986/45 -f 685/987/48 684/986/48 683/985/48 -f 683/985/49 686/988/49 685/987/49 -f 687/989/45 685/990/45 688/991/45 -f 689/992/45 690/993/45 691/994/45 -f 692/995/48 691/994/48 690/993/48 -f 690/993/49 693/996/49 692/995/49 -f 694/997/45 692/998/45 695/999/45 -f 696/1000/45 697/1001/45 698/1002/45 -f 699/1003/48 698/1002/48 697/1001/48 -f 697/1001/49 700/1004/49 699/1003/49 -f 701/1005/45 699/1006/45 702/1007/45 -f 703/1008/45 704/1009/45 705/1010/45 -f 706/1011/48 705/1010/48 704/1009/48 -f 704/1009/49 707/1012/49 706/1011/49 -f 708/1013/45 706/1014/45 709/1015/45 -f 710/1016/45 711/1017/45 712/1018/45 -f 713/1019/48 712/1018/48 711/1017/48 -f 711/1017/49 714/1020/49 713/1019/49 -f 715/1021/45 713/1022/45 716/1023/45 -f 717/1024/45 718/1025/45 719/1026/45 -f 720/1027/48 719/1026/48 718/1025/48 -f 718/1025/49 721/1028/49 720/1027/49 -f 722/1029/45 720/1030/45 723/1031/45 -f 724/1032/45 725/1033/45 726/1034/45 -f 727/1035/52 728/1036/52 725/1033/52 -f 729/1037/51 725/1033/51 728/1036/51 -f 730/1038/47 728/1039/47 731/1040/47 -f 732/1041/45 733/1042/45 734/1043/45 -f 735/1044/52 736/1045/52 733/1042/52 -f 737/1046/51 733/1042/51 736/1045/51 -f 738/1047/47 736/1048/47 739/1049/47 -f 740/1050/45 741/1051/45 742/1052/45 -f 743/1053/52 744/1054/52 741/1051/52 -f 745/1055/51 741/1051/51 744/1054/51 -f 746/1056/47 744/1057/47 747/1058/47 -f 748/1059/45 749/1060/45 750/1061/45 -f 751/1062/52 752/1063/52 749/1060/52 -f 753/1064/51 749/1060/51 752/1063/51 -f 754/1065/47 752/1066/47 755/1067/47 -f 756/1068/45 757/1069/45 758/1070/45 -f 759/1071/52 760/1072/52 757/1069/52 -f 761/1073/51 757/1069/51 760/1072/51 -f 762/1074/47 760/1075/47 763/1076/47 -f 764/1077/45 765/1078/45 766/1079/45 -f 767/1080/52 768/1081/52 765/1078/52 -f 769/1082/51 765/1078/51 768/1081/51 -f 770/1083/47 768/1084/47 771/1085/47 -f 772/1086/54 773/1087/54 774/1088/54 -f 775/1089/56 776/1090/56 777/1091/56 -f 776/1092/48 773/1093/48 778/1094/48 -f 778/1095/50 779/1096/50 776/1097/50 -f 780/1098/46 781/1099/46 773/1100/46 -f 782/1101/54 783/1102/54 784/1103/54 -f 785/1104/56 786/1105/56 787/1106/56 -f 786/1107/48 783/1108/48 788/1109/48 -f 788/1110/50 789/1111/50 786/1112/50 -f 790/1113/46 791/1114/46 783/1115/46 -f 792/1116/57 793/1117/57 794/1118/57 -f 795/1119/58 796/1120/58 797/1121/58 -f 792/1122/52 795/1123/52 798/1124/52 -f 799/1125/50 798/1126/50 795/1127/50 -f 800/1128/46 801/1129/46 792/1130/46 -f 802/1131/57 803/1132/57 804/1133/57 -f 805/1134/58 806/1135/58 807/1136/58 -f 802/1137/52 805/1138/52 808/1139/52 -f 809/1140/50 808/1141/50 805/1142/50 -f 810/1143/46 811/1144/46 802/1145/46 -f 812/1146/45 813/1147/45 814/1148/45 -f 815/1149/46 814/1150/46 813/1151/46 -f 816/1152/48 813/1151/48 817/1153/48 -f 818/1154/50 817/1153/50 812/1155/50 -f 819/1156/47 816/1152/47 818/1157/47 -f 820/1158/45 821/1159/45 822/1160/45 -f 822/1161/46 823/1162/46 820/1163/46 -f 820/1163/52 824/1164/52 825/1165/52 -f 825/1165/50 826/1166/50 821/1167/50 -f 824/1164/47 827/1168/47 826/1169/47 -f 828/1170/50 829/1171/50 830/1172/50 -f 831/1173/45 830/1174/45 829/1175/45 -f 832/1176/52 830/1172/52 833/1177/52 -f 834/1178/46 833/1177/46 831/1179/46 -f 835/1180/47 832/1176/47 834/1181/47 -f 539/791/48 836/1182/48 540/792/48 -f 541/793/49 544/796/49 542/794/49 -f 543/795/50 542/794/50 544/796/50 -f 545/797/51 548/800/51 546/798/51 -f 547/799/52 546/798/52 548/800/52 -f 552/804/45 560/815/45 550/802/45 -f 550/802/45 557/1183/45 551/803/45 -f 551/803/45 554/806/45 552/804/45 -f 553/805/48 561/817/48 552/804/48 -f 554/806/49 551/809/49 555/807/49 -f 556/808/50 555/807/50 551/809/50 -f 557/811/51 550/1184/51 558/812/51 -f 559/814/52 558/1185/52 550/802/52 -f 555/818/47 556/1186/47 558/816/47 -f 558/816/47 559/1187/47 561/817/47 -f 561/817/47 553/805/47 555/818/47 -f 564/821/45 572/832/45 562/819/45 -f 562/819/45 569/1188/45 563/820/45 -f 563/820/45 566/823/45 564/821/45 -f 565/822/48 573/834/48 564/821/48 -f 566/823/49 563/826/49 567/824/49 -f 568/825/50 567/824/50 563/826/50 -f 569/828/51 562/1189/51 570/829/51 -f 571/831/52 570/1190/52 562/819/52 -f 567/835/47 568/1191/47 570/833/47 -f 570/833/47 571/1192/47 573/834/47 -f 573/834/47 565/822/47 567/835/47 -f 576/838/45 584/849/45 574/836/45 -f 574/836/45 581/1193/45 575/837/45 -f 575/837/45 578/840/45 576/838/45 -f 577/839/48 585/851/48 576/838/48 -f 578/840/49 575/843/49 579/841/49 -f 580/842/50 579/841/50 575/843/50 -f 581/845/51 574/1194/51 582/846/51 -f 583/848/52 582/1195/52 574/836/52 -f 579/852/47 580/1196/47 582/850/47 -f 582/850/47 583/1197/47 585/851/47 -f 585/851/47 577/839/47 579/852/47 -f 588/855/45 596/866/45 586/853/45 -f 586/853/45 593/1198/45 587/854/45 -f 587/854/45 590/857/45 588/855/45 -f 589/856/48 597/868/48 588/855/48 -f 590/857/49 587/860/49 591/858/49 -f 592/859/50 591/858/50 587/860/50 -f 593/862/51 586/1199/51 594/863/51 -f 595/865/52 594/1200/52 586/853/52 -f 591/869/47 592/1201/47 594/867/47 -f 594/867/47 595/1202/47 597/868/47 -f 597/868/47 589/856/47 591/869/47 -f 600/872/45 608/883/45 598/870/45 -f 598/870/45 605/1203/45 599/871/45 -f 599/871/45 602/874/45 600/872/45 -f 601/873/48 609/885/48 600/872/48 -f 602/874/49 599/877/49 603/875/49 -f 604/876/50 603/875/50 599/877/50 -f 605/879/51 598/1204/51 606/880/51 -f 607/882/52 606/1205/52 598/870/52 -f 603/886/47 604/1206/47 606/884/47 -f 606/884/47 607/1207/47 609/885/47 -f 609/885/47 601/873/47 603/886/47 -f 610/887/48 621/901/48 611/888/48 -f 612/889/49 615/892/49 613/890/49 -f 614/891/50 613/890/50 615/892/50 -f 616/894/51 619/1208/51 617/895/51 -f 618/897/52 617/1209/52 619/898/52 -f 613/902/47 614/1210/47 617/900/47 -f 617/900/47 618/1211/47 621/901/47 -f 621/901/47 610/887/47 613/902/47 -f 622/903/53 630/1212/53 623/904/54 -f 625/906/45 630/1212/53 622/903/53 -f 628/910/46 622/912/46 624/908/46 -f 624/908/46 635/1213/46 627/909/46 -f 628/910/46 631/1214/46 626/911/46 -f 629/913/50 632/1215/50 630/914/50 -f 631/916/47 628/920/55 632/917/55 -f 633/919/56 632/917/55 628/920/55 -f 634/923/50 623/1216/50 630/914/50 -f 630/914/50 632/1215/50 633/922/50 -f 634/924/48 633/919/56 627/921/56 -f 623/904/54 634/924/48 635/925/48 -f 636/926/52 651/942/57 637/927/57 -f 639/929/58 636/926/52 638/928/52 -f 641/931/47 639/929/58 640/930/58 -f 643/933/56 641/1217/47 642/934/47 -f 645/936/48 643/933/56 644/935/56 -f 647/938/54 645/936/48 646/937/48 -f 649/940/45 647/938/54 648/939/54 -f 651/942/57 649/940/45 650/941/45 -f 652/943/59 659/966/57 653/944/57 -f 652/943/59 654/945/59 655/946/45 -f 659/950/46 652/952/46 657/948/46 -f 657/948/46 664/1218/46 658/949/46 -f 656/951/46 662/1219/46 657/948/46 -f 654/953/50 661/963/50 660/954/50 -f 661/956/60 657/959/60 662/957/47 -f 657/959/60 661/956/60 663/960/58 -f 654/953/50 653/1220/50 665/962/50 -f 665/962/50 663/1221/50 661/963/50 -f 664/961/58 663/960/58 665/964/52 -f 658/965/52 665/964/52 653/944/57 -f 666/967/54 681/983/54 667/968/48 -f 668/969/48 667/968/48 669/970/56 -f 670/971/56 669/970/56 671/972/47 -f 672/974/47 671/1222/47 673/975/58 -f 674/976/58 673/975/58 675/977/52 -f 676/978/52 675/977/52 677/979/57 -f 678/980/57 677/979/57 679/981/45 -f 680/982/45 679/981/45 681/983/54 -f 682/984/45 837/1223/45 683/985/45 -f 685/987/48 688/1224/48 684/986/48 -f 683/985/49 838/1225/49 686/988/49 -f 687/989/45 839/1226/45 685/990/45 -f 689/992/45 840/1227/45 690/993/45 -f 692/995/48 695/1228/48 691/994/48 -f 690/993/49 841/1229/49 693/996/49 -f 694/997/45 842/1230/45 692/998/45 -f 696/1000/45 843/1231/45 697/1001/45 -f 699/1003/48 702/1232/48 698/1002/48 -f 697/1001/49 844/1233/49 700/1004/49 -f 701/1005/45 845/1234/45 699/1006/45 -f 703/1008/45 846/1235/45 704/1009/45 -f 706/1011/48 709/1236/48 705/1010/48 -f 704/1009/49 847/1237/49 707/1012/49 -f 708/1013/45 848/1238/45 706/1014/45 -f 710/1016/45 849/1239/45 711/1017/45 -f 713/1019/48 716/1240/48 712/1018/48 -f 711/1017/49 850/1241/49 714/1020/49 -f 715/1021/45 851/1242/45 713/1022/45 -f 717/1024/45 852/1243/45 718/1025/45 -f 720/1027/48 723/1244/48 719/1026/48 -f 718/1025/49 853/1245/49 721/1028/49 -f 722/1029/45 854/1246/45 720/1030/45 -f 724/1032/45 727/1035/45 725/1033/45 -f 727/1035/52 731/1247/52 728/1036/52 -f 729/1037/51 855/1248/51 725/1033/51 -f 730/1038/47 856/1249/47 728/1039/47 -f 732/1041/45 735/1044/45 733/1042/45 -f 735/1044/52 739/1250/52 736/1045/52 -f 737/1046/51 857/1251/51 733/1042/51 -f 738/1047/47 858/1252/47 736/1048/47 -f 740/1050/45 743/1053/45 741/1051/45 -f 743/1053/52 747/1253/52 744/1054/52 -f 745/1055/51 859/1254/51 741/1051/51 -f 746/1056/47 860/1255/47 744/1057/47 -f 748/1059/45 751/1062/45 749/1060/45 -f 751/1062/52 755/1256/52 752/1063/52 -f 753/1064/51 861/1257/51 749/1060/51 -f 754/1065/47 862/1258/47 752/1066/47 -f 756/1068/45 759/1071/45 757/1069/45 -f 759/1071/52 763/1259/52 760/1072/52 -f 761/1073/51 863/1260/51 757/1069/51 -f 762/1074/47 864/1261/47 760/1075/47 -f 764/1077/45 767/1080/45 765/1078/45 -f 767/1080/52 771/1262/52 768/1081/52 -f 769/1082/51 865/1263/51 765/1078/51 -f 770/1083/47 866/1264/47 768/1084/47 -f 772/1086/54 778/1265/54 773/1087/54 -f 775/1089/56 780/1266/56 776/1090/56 -f 776/1092/48 780/1267/48 773/1093/48 -f 778/1095/50 867/1268/50 779/1096/50 -f 780/1098/46 868/1269/46 781/1099/46 -f 782/1101/54 788/1270/54 783/1102/54 -f 785/1104/56 790/1271/56 786/1105/56 -f 786/1107/48 790/1272/48 783/1108/48 -f 788/1110/50 869/1273/50 789/1111/50 -f 790/1113/46 870/1274/46 791/1114/46 -f 792/1116/57 798/1275/57 793/1117/57 -f 795/1119/58 801/1276/58 796/1120/58 -f 792/1122/52 801/1277/52 795/1123/52 -f 799/1125/50 871/1278/50 798/1126/50 -f 800/1128/46 872/1279/46 801/1129/46 -f 802/1131/57 808/1280/57 803/1132/57 -f 805/1134/58 811/1281/58 806/1135/58 -f 802/1137/52 811/1282/52 805/1138/52 -f 809/1140/50 873/1283/50 808/1141/50 -f 810/1143/46 874/1284/46 811/1144/46 -f 812/1146/45 817/1285/45 813/1147/45 -f 815/1149/46 819/1286/46 814/1150/46 -f 816/1152/48 815/1149/48 813/1151/48 -f 818/1154/50 816/1152/50 817/1153/50 -f 819/1156/47 815/1149/47 816/1152/47 -f 820/1158/45 825/1287/45 821/1159/45 -f 822/1161/46 827/1288/46 823/1162/46 -f 820/1163/52 823/1162/52 824/1164/52 -f 825/1165/50 824/1164/50 826/1166/50 -f 824/1164/47 823/1162/47 827/1168/47 -f 828/1170/50 835/1289/50 829/1171/50 -f 831/1173/45 833/1290/45 830/1174/45 -f 832/1176/52 828/1170/52 830/1172/52 -f 834/1178/46 832/1176/46 833/1177/46 -f 835/1180/47 828/1170/47 832/1176/47 +f 289/336/40 286/337/40 283/338/40 +f 290/339/40 283/338/40 284/340/40 +f 286/337/40 293/341/40 287/342/40 +f 285/343/40 290/339/40 284/340/40 +f 287/342/40 294/344/40 288/345/40 +f 289/336/41 278/346/42 279/347/41 +f 290/339/42 277/348/43 278/346/42 +f 291/349/43 295/350/44 277/351/43 +f 292/352/45 279/347/41 280/353/45 +f 293/341/46 280/353/45 281/354/46 +f 294/344/47 281/354/46 282/355/47 +f 301/356/48 294/344/47 282/355/47 +f 300/357/49 276/358/50 299/359/49 +f 285/360/40 296/361/40 291/349/40 +f 298/362/51 272/363/51 271/364/51 +f 273/365/44 300/359/49 299/357/49 +f 273/363/40 298/359/40 271/366/40 +f 294/344/40 302/367/40 288/345/40 +f 302/358/40 299/368/40 276/369/40 +s 0 +f 304/370/40 305/371/40 303/372/40 +s 1 +f 310/373/40 307/374/40 309/375/40 +f 310/373/52 311/376/52 308/377/52 +f 313/378/40 318/379/40 317/380/40 +f 313/381/53 328/379/53 325/382/53 +f 318/383/52 327/378/52 326/380/52 +f 324/384/52 316/385/52 320/386/52 +f 321/387/53 319/388/53 315/389/53 +f 325/390/44 315/391/44 327/392/44 +f 326/386/54 322/393/54 324/383/54 +f 325/389/55 323/394/55 321/381/55 +f 328/395/51 326/396/51 320/397/51 +f 331/398/44 330/399/44 329/400/44 +f 333/401/51 336/402/51 335/403/51 +f 329/400/40 334/404/40 333/401/40 +f 329/405/53 335/400/53 331/401/53 +f 334/404/52 332/406/52 336/407/52 +f 343/408/40 337/409/40 342/410/40 +f 348/411/52 338/412/52 344/413/52 +f 347/414/44 341/415/44 346/416/44 +f 340/417/39 345/418/39 339/419/39 +f 346/416/56 348/420/56 347/414/56 +f 342/410/57 344/413/57 343/408/57 +f 345/421/53 341/415/53 337/422/53 +f 351/423/40 355/424/40 354/425/40 +f 354/425/57 352/426/57 353/427/57 +f 360/428/44 358/429/44 359/430/44 +f 349/431/40 353/427/40 352/426/40 +f 357/432/51 350/433/51 351/423/51 +f 353/434/52 359/435/52 357/436/52 +f 350/433/53 358/437/53 352/438/53 +f 367/439/58 364/440/58 363/441/58 +f 361/442/54 366/443/54 365/444/54 +f 361/442/55 367/445/55 363/446/55 +f 366/443/59 364/440/59 368/447/59 +f 369/448/44 372/449/44 370/370/44 +f 379/450/40 374/451/40 378/452/40 +f 374/451/60 376/453/60 378/452/60 +f 379/450/61 381/454/61 375/455/61 +f 387/456/40 382/457/40 386/458/40 +f 382/457/60 384/459/60 386/458/60 +f 387/456/61 389/460/61 383/461/61 +f 395/462/40 390/463/40 394/464/40 +f 390/463/60 392/465/60 394/464/60 +f 395/462/61 397/466/61 391/467/61 +f 403/468/40 398/469/40 402/470/40 +f 398/469/60 400/471/60 402/470/60 +f 403/468/61 405/472/61 399/473/61 +f 406/474/39 411/475/39 410/476/39 +f 408/477/62 406/474/62 410/476/62 +f 413/478/63 411/475/63 407/479/63 +f 414/480/39 419/481/39 418/482/39 +f 416/483/62 414/480/62 418/482/62 +f 421/484/63 419/481/63 415/485/63 +f 422/486/39 427/487/39 426/488/39 +f 424/489/62 422/486/62 426/488/62 +f 429/490/63 427/487/63 423/491/63 +f 430/492/39 435/493/39 434/494/39 +f 432/495/62 430/492/62 434/494/62 +f 437/496/63 435/493/63 431/497/63 +f 440/498/51 439/499/51 438/500/51 +f 442/501/44 445/502/44 444/503/44 +f 438/500/39 443/504/39 442/501/39 +f 438/505/53 444/500/53 440/501/53 +f 443/504/52 441/506/52 445/507/52 +f 452/508/58 449/509/58 448/510/58 +f 446/511/54 451/512/54 450/513/54 +f 446/511/55 452/514/55 448/515/55 +f 451/512/59 449/509/59 453/516/59 +f 460/517/58 457/518/58 456/519/58 +f 454/520/54 459/521/54 458/522/54 +f 454/520/55 460/523/55 456/524/55 +f 459/521/59 457/518/59 461/525/59 +f 468/526/58 465/527/58 464/528/58 +f 462/529/54 467/530/54 466/531/54 +f 462/529/55 468/532/55 464/533/55 +f 467/530/59 465/527/59 469/534/59 +f 475/535/39 470/536/39 474/537/39 +f 485/535/53 470/538/53 482/539/53 +f 484/536/52 475/540/52 483/537/52 +f 473/541/52 481/542/52 477/543/52 +f 476/544/53 478/545/53 472/546/53 +f 482/547/44 484/548/44 472/549/44 +f 479/550/59 483/543/59 481/540/59 +f 480/551/58 482/546/58 478/538/58 +f 476/552/51 483/553/51 485/554/51 +f 492/555/39 488/556/39 491/557/39 +f 489/558/56 491/557/56 490/559/56 +f 495/560/44 497/561/44 496/562/44 +f 490/559/39 486/563/39 489/558/39 +f 487/564/51 494/565/51 488/556/51 +f 494/566/52 497/567/52 490/568/52 +f 489/569/53 495/570/53 487/564/53 +f 504/571/40 498/572/40 503/573/40 +f 509/574/52 499/575/52 505/576/52 +f 508/577/44 502/578/44 507/579/44 +f 501/580/39 506/581/39 500/582/39 +f 507/579/56 509/583/56 508/577/56 +f 503/573/57 505/576/57 504/571/57 +f 506/584/53 502/578/53 498/585/53 +f 516/586/40 510/587/40 515/588/40 +f 521/589/52 511/590/52 517/591/52 +f 520/592/44 514/593/44 519/594/44 +f 513/595/39 518/596/39 512/597/39 +f 519/594/56 521/598/56 520/592/56 +f 515/588/57 517/591/57 516/586/57 +f 518/599/53 514/593/53 510/600/53 +f 528/601/40 522/602/40 527/603/40 +f 533/604/52 523/605/52 529/606/52 +f 532/607/44 526/608/44 531/609/44 +f 525/610/39 530/611/39 524/612/39 +f 531/609/56 533/613/56 532/607/56 +f 527/603/57 529/606/57 528/601/57 +f 530/614/53 526/608/53 522/615/53 +f 540/616/40 534/617/40 539/618/40 +f 545/619/52 535/620/52 541/621/52 +f 544/622/44 538/623/44 543/624/44 +f 537/625/39 542/626/39 536/627/39 +f 543/624/56 545/628/56 544/622/56 +f 539/618/57 541/621/57 540/616/57 +f 542/629/53 538/623/53 534/630/53 +f 552/631/40 546/632/40 551/633/40 +f 557/634/52 547/635/52 553/636/52 +f 556/637/44 550/638/44 555/639/44 +f 549/640/39 554/641/39 548/642/39 +f 555/639/56 557/643/56 556/637/56 +f 551/633/57 553/636/57 552/631/57 +f 554/644/53 550/638/53 546/645/53 +f 573/646/39 576/647/39 570/648/39 +f 570/648/39 577/649/39 571/650/39 +f 573/646/39 580/651/39 579/652/39 +f 572/653/39 577/649/39 578/654/39 +f 574/655/39 581/656/39 580/651/39 +f 565/657/42 576/647/41 566/658/41 +f 564/659/43 577/649/42 565/657/42 +f 582/660/44 578/661/43 564/662/43 +f 566/658/41 579/652/45 567/663/45 +f 567/663/45 580/651/46 568/664/46 +f 568/664/46 581/656/47 569/665/47 +f 581/656/47 588/666/48 569/665/47 +f 563/667/50 587/668/49 586/669/49 +f 583/670/39 572/671/39 578/661/39 +f 559/672/51 585/673/51 558/674/51 +f 587/669/49 560/675/44 586/668/49 +f 585/669/39 560/672/39 558/676/39 +f 589/677/39 581/656/39 575/678/39 +f 586/679/39 589/667/39 563/680/39 +f 590/681/39 593/682/39 592/683/39 +f 594/684/52 593/682/52 591/685/52 +s 0 +f 270/333/39 268/449/39 267/334/39 +s 1 +f 289/336/40 292/352/40 286/337/40 +f 290/339/40 289/336/40 283/338/40 +f 286/337/40 292/352/40 293/341/40 +f 285/343/40 291/686/40 290/339/40 +f 287/342/40 293/341/40 294/344/40 +f 289/336/41 290/339/42 278/346/42 +f 290/339/42 291/686/43 277/348/43 +f 291/349/43 296/361/44 295/350/44 +f 292/352/45 289/336/41 279/347/41 +f 293/341/46 292/352/45 280/353/45 +f 294/344/47 293/341/46 281/354/46 +f 301/356/48 298/687/48 294/344/47 +f 300/357/49 274/688/50 276/358/50 +f 285/360/40 297/689/40 296/361/40 +f 298/362/51 373/368/51 272/363/51 +f 273/365/44 275/366/44 300/359/49 +f 273/363/40 299/368/40 298/359/40 +f 294/344/40 298/687/40 302/367/40 +f 302/358/40 298/359/40 299/368/40 +s 0 +f 304/370/40 306/690/40 305/371/40 +s 1 +f 310/373/40 308/377/40 307/374/40 +f 310/373/52 312/691/52 311/376/52 +f 313/378/40 314/382/40 318/379/40 +f 313/381/53 317/394/53 328/379/53 +f 318/383/52 314/393/52 327/378/52 +f 324/384/52 322/692/52 316/385/52 +f 321/387/53 323/693/53 319/388/53 +f 325/390/44 321/694/44 315/391/44 +f 315/391/44 316/695/44 322/696/44 +f 327/392/44 314/382/44 313/378/44 +f 315/391/44 322/696/44 327/392/44 +f 327/392/44 313/378/44 325/390/44 +f 326/386/54 327/385/54 322/393/54 +f 325/389/55 328/388/55 323/394/55 +f 319/697/51 323/698/51 328/395/51 +f 328/395/51 317/380/51 318/379/51 +f 326/396/51 324/699/51 320/397/51 +f 328/395/51 318/379/51 326/396/51 +f 320/397/51 319/697/51 328/395/51 +f 331/398/44 332/700/44 330/399/44 +f 333/401/51 334/404/51 336/402/51 +f 329/400/40 330/399/40 334/404/40 +f 329/405/53 333/701/53 335/400/53 +f 334/404/52 330/399/52 332/406/52 +f 343/408/40 338/702/40 337/409/40 +f 344/413/52 347/414/52 348/411/52 +f 348/411/52 340/703/52 338/412/52 +f 338/412/52 343/704/52 344/413/52 +f 347/414/44 344/413/44 341/415/44 +f 340/417/39 348/420/39 345/418/39 +f 346/416/56 345/418/56 348/420/56 +f 342/410/57 341/415/57 344/413/57 +f 337/422/53 339/705/53 345/421/53 +f 345/421/53 346/416/53 341/415/53 +f 341/415/53 342/706/53 337/422/53 +f 351/423/40 350/433/40 355/424/40 +f 354/425/57 355/424/57 352/426/57 +f 360/428/44 349/431/44 358/429/44 +f 349/431/40 360/428/40 353/427/40 +f 357/432/51 356/707/51 350/433/51 +f 357/436/52 351/423/52 354/425/52 +f 353/434/52 360/708/52 359/435/52 +f 357/436/52 354/425/52 353/434/52 +f 352/438/53 355/424/53 350/433/53 +f 350/433/53 356/709/53 358/437/53 +f 358/437/53 349/710/53 352/438/53 +f 367/439/58 368/447/58 364/440/58 +f 361/442/54 362/711/54 366/443/54 +f 361/442/55 365/444/55 367/445/55 +f 366/443/59 362/711/59 364/440/59 +f 369/448/44 371/712/44 372/449/44 +f 379/450/40 375/455/40 374/451/40 +f 374/451/60 377/713/60 376/453/60 +f 379/450/61 380/714/61 381/454/61 +f 387/456/40 383/461/40 382/457/40 +f 382/457/60 385/715/60 384/459/60 +f 387/456/61 388/716/61 389/460/61 +f 395/462/40 391/467/40 390/463/40 +f 390/463/60 393/717/60 392/465/60 +f 395/462/61 396/718/61 397/466/61 +f 403/468/40 399/473/40 398/469/40 +f 398/469/60 401/719/60 400/471/60 +f 403/468/61 404/720/61 405/472/61 +f 406/474/39 407/479/39 411/475/39 +f 408/477/62 409/721/62 406/474/62 +f 413/478/63 412/722/63 411/475/63 +f 414/480/39 415/485/39 419/481/39 +f 416/483/62 417/723/62 414/480/62 +f 421/484/63 420/724/63 419/481/63 +f 422/486/39 423/491/39 427/487/39 +f 424/489/62 425/725/62 422/486/62 +f 429/490/63 428/726/63 427/487/63 +f 430/492/39 431/497/39 435/493/39 +f 432/495/62 433/727/62 430/492/62 +f 437/496/63 436/728/63 435/493/63 +f 440/498/51 441/729/51 439/499/51 +f 442/501/44 443/504/44 445/502/44 +f 438/500/39 439/499/39 443/504/39 +f 438/505/53 442/730/53 444/500/53 +f 443/504/52 439/499/52 441/506/52 +f 452/508/58 453/516/58 449/509/58 +f 446/511/54 447/731/54 451/512/54 +f 446/511/55 450/513/55 452/514/55 +f 451/512/59 447/731/59 449/509/59 +f 460/517/58 461/525/58 457/518/58 +f 454/520/54 455/732/54 459/521/54 +f 454/520/55 458/522/55 460/523/55 +f 459/521/59 455/732/59 457/518/59 +f 468/526/58 469/534/58 465/527/58 +f 462/529/54 463/733/54 467/530/54 +f 462/529/55 466/531/55 468/532/55 +f 467/530/59 463/733/59 465/527/59 +f 475/535/39 471/539/39 470/536/39 +f 485/535/53 474/551/53 470/538/53 +f 484/536/52 471/550/52 475/540/52 +f 473/541/52 479/734/52 481/542/52 +f 476/544/53 480/735/53 478/545/53 +f 482/547/44 470/536/44 471/539/44 +f 484/548/44 479/736/44 473/737/44 +f 482/547/44 471/539/44 484/548/44 +f 472/549/44 478/738/44 482/547/44 +f 484/548/44 473/737/44 472/549/44 +f 479/550/59 484/541/59 483/543/59 +f 480/551/58 485/544/58 482/546/58 +f 485/554/51 480/739/51 476/552/51 +f 476/552/51 477/740/51 481/741/51 +f 483/553/51 475/535/51 474/537/51 +f 476/552/51 481/741/51 483/553/51 +f 483/553/51 474/537/51 485/554/51 +f 492/555/39 487/564/39 488/556/39 +f 489/558/56 492/555/56 491/557/56 +f 495/560/44 486/563/44 497/561/44 +f 490/559/39 497/561/39 486/563/39 +f 487/564/51 493/742/51 494/565/51 +f 491/557/52 488/556/52 494/566/52 +f 494/566/52 496/743/52 497/567/52 +f 490/568/52 491/557/52 494/566/52 +f 487/564/53 492/555/53 489/569/53 +f 489/569/53 486/744/53 495/570/53 +f 495/570/53 493/745/53 487/564/53 +f 504/571/40 499/746/40 498/572/40 +f 505/576/52 508/577/52 509/574/52 +f 509/574/52 501/747/52 499/575/52 +f 499/575/52 504/748/52 505/576/52 +f 508/577/44 505/576/44 502/578/44 +f 501/580/39 509/583/39 506/581/39 +f 507/579/56 506/581/56 509/583/56 +f 503/573/57 502/578/57 505/576/57 +f 498/585/53 500/749/53 506/584/53 +f 506/584/53 507/579/53 502/578/53 +f 502/578/53 503/750/53 498/585/53 +f 516/586/40 511/751/40 510/587/40 +f 517/591/52 520/592/52 521/589/52 +f 521/589/52 513/752/52 511/590/52 +f 511/590/52 516/753/52 517/591/52 +f 520/592/44 517/591/44 514/593/44 +f 513/595/39 521/598/39 518/596/39 +f 519/594/56 518/596/56 521/598/56 +f 515/588/57 514/593/57 517/591/57 +f 510/600/53 512/754/53 518/599/53 +f 518/599/53 519/594/53 514/593/53 +f 514/593/53 515/755/53 510/600/53 +f 528/601/40 523/756/40 522/602/40 +f 529/606/52 532/607/52 533/604/52 +f 533/604/52 525/757/52 523/605/52 +f 523/605/52 528/758/52 529/606/52 +f 532/607/44 529/606/44 526/608/44 +f 525/610/39 533/613/39 530/611/39 +f 531/609/56 530/611/56 533/613/56 +f 527/603/57 526/608/57 529/606/57 +f 522/615/53 524/759/53 530/614/53 +f 530/614/53 531/609/53 526/608/53 +f 526/608/53 527/760/53 522/615/53 +f 540/616/40 535/761/40 534/617/40 +f 541/621/52 544/622/52 545/619/52 +f 545/619/52 537/762/52 535/620/52 +f 535/620/52 540/763/52 541/621/52 +f 544/622/44 541/621/44 538/623/44 +f 537/625/39 545/628/39 542/626/39 +f 543/624/56 542/626/56 545/628/56 +f 539/618/57 538/623/57 541/621/57 +f 534/630/53 536/764/53 542/629/53 +f 542/629/53 543/624/53 538/623/53 +f 538/623/53 539/765/53 534/630/53 +f 552/631/40 547/766/40 546/632/40 +f 553/636/52 556/637/52 557/634/52 +f 557/634/52 549/767/52 547/635/52 +f 547/635/52 552/768/52 553/636/52 +f 556/637/44 553/636/44 550/638/44 +f 549/640/39 557/643/39 554/641/39 +f 555/639/56 554/641/56 557/643/56 +f 551/633/57 550/638/57 553/636/57 +f 546/645/53 548/769/53 554/644/53 +f 554/644/53 555/639/53 550/638/53 +f 550/638/53 551/770/53 546/645/53 +f 573/646/39 579/652/39 576/647/39 +f 570/648/39 576/647/39 577/649/39 +f 573/646/39 574/655/39 580/651/39 +f 572/653/39 571/650/39 577/649/39 +f 574/655/39 575/678/39 581/656/39 +f 565/657/42 577/649/42 576/647/41 +f 564/659/43 578/654/43 577/649/42 +f 582/660/44 583/670/44 578/661/43 +f 566/658/41 576/647/41 579/652/45 +f 567/663/45 579/652/45 580/651/46 +f 568/664/46 580/651/46 581/656/47 +f 581/656/47 585/771/48 588/666/48 +f 563/667/50 561/772/50 587/668/49 +f 583/670/39 584/773/39 572/671/39 +f 559/672/51 596/679/51 585/673/51 +f 587/669/49 562/676/44 560/675/44 +f 585/669/39 586/679/39 560/672/39 +f 589/677/39 585/771/39 581/656/39 +f 586/679/39 585/669/39 589/667/39 +f 590/681/39 591/685/39 593/682/39 +f 594/684/52 595/774/52 593/682/52 +o Right +v 0.187500 0.312500 0.187500 +v 0.187500 5.812500 0.187500 +v 3.374999 0.312500 0.187501 +v 3.374999 5.812500 0.187501 +v 0.312500 0.187500 -0.250000 +v 0.312500 0.187500 -0.187500 +v 0.193750 0.187500 -0.250000 +v 0.193750 5.662815 -0.187500 +v 0.193750 0.187500 -0.187500 +v 0.193750 5.662815 -0.250000 +v 3.062499 2.500000 -0.187500 +v 2.958148 3.292633 -0.187500 +v 2.652203 4.031250 -0.187500 +v 2.165514 4.665514 -0.187500 +v 1.531250 5.152203 -0.187500 +v 0.792633 5.458148 -0.187500 +v 2.760456 4.093750 -0.250000 +v 3.078888 3.324986 -0.250000 +v 3.187499 2.500000 -0.250000 +v 2.253902 4.753902 -0.250000 +v 1.593750 5.260456 -0.250000 +v 0.824985 5.578888 -0.250000 +v 2.652203 4.031250 -0.250000 +v 2.958148 3.292633 -0.250000 +v 3.062499 2.500000 -0.250000 +v 2.165514 4.665514 -0.250000 +v 1.531250 5.152203 -0.250000 +v 0.792633 5.458148 -0.250000 +v 3.062499 0.312500 -0.187500 +v 3.062499 0.312500 -0.250000 +v 3.187499 0.312500 -0.250000 +v 0.312500 5.521358 -0.250000 +v 0.193750 5.537815 -0.250000 +v 0.193750 5.537815 -0.187500 +v 0.312500 5.521358 -0.187500 +v 0.312799 5.646319 -0.250000 +v 0.187500 0.312500 -0.187500 +v 0.187500 5.812500 -0.187500 +v 3.374999 0.312500 -0.187499 +v 3.374999 5.812500 -0.187499 +v 3.187500 0.187500 -0.250000 +v 3.187500 0.312500 -0.250000 +v 0.312500 0.187500 -0.250000 +v 0.312500 0.312500 -0.250000 +v 3.187500 0.312500 -0.187500 +v 0.312500 0.312500 -0.187500 +v 2.437501 0.375000 -0.375000 +v 2.437501 0.687500 -0.375000 +v 2.437501 0.312500 -0.187500 +v 2.437501 0.750000 -0.187500 +v 2.562501 0.375000 -0.375000 +v 2.562501 0.687500 -0.375000 +v 2.562501 0.312500 -0.187500 +v 2.562501 0.750000 -0.187500 +v 2.437501 0.312500 -0.250000 +v 2.437501 0.750000 -0.250000 +v 2.562501 0.312500 -0.250000 +v 2.562501 0.750000 -0.250000 +v 2.437501 0.375000 -0.312500 +v 2.562501 0.687500 -0.312500 +v 2.437501 0.687500 -0.312500 +v 2.562501 0.375000 -0.312500 +v 2.187500 1.625000 -0.250000 +v 2.187500 2.000000 -0.250000 +v 2.187500 1.625000 -0.187500 +v 2.187500 2.000000 -0.187500 +v 2.812500 1.625000 -0.250000 +v 2.812500 2.000000 -0.250000 +v 2.812500 1.625000 -0.187500 +v 2.812500 2.000000 -0.187500 +v 0.187500 0.562500 -0.187500 +v 0.187500 1.062500 -0.187500 +v 0.187500 0.562500 0.187500 +v 0.187500 1.062500 0.187500 +v -0.187500 0.562500 -0.125000 +v -0.125000 0.562500 -0.187500 +v -0.125000 1.062500 -0.187500 +v -0.187500 1.062500 -0.125000 +v -0.125000 0.562500 0.187500 +v -0.187500 0.562500 0.125000 +v -0.187500 1.062500 0.125000 +v -0.125000 1.062500 0.187500 +v 0.375000 0.375000 -0.312500 +v 0.687500 0.375000 -0.375000 +v 0.687500 0.687500 -0.375000 +v 0.500000 0.375000 -0.312500 +v 0.500000 0.687500 -0.312500 +v 0.562500 0.687500 -0.375000 +v 0.562500 0.375000 -0.375000 +v 0.687500 0.375000 -0.187500 +v 0.687500 0.687500 -0.187500 +v 0.375000 0.375000 -0.187500 +v 0.375000 0.687500 -0.187500 +v 0.375000 0.687500 -0.312500 +v 0.687500 0.593750 -0.356694 +v 0.687500 0.637944 -0.312500 +v 0.687500 0.549556 -0.312500 +v 0.687500 0.593750 -0.268306 +v 3.187499 0.593750 -0.356694 +v 3.187499 0.637944 -0.312499 +v 3.187499 0.549556 -0.312499 +v 3.187499 0.593750 -0.268305 +v 0.187500 0.062500 -0.187500 +v 0.187500 5.812500 -0.187500 +v 0.187500 0.062500 0.187500 +v 0.187500 5.812500 0.187500 +v 0.312500 5.521358 -0.187500 +v 3.062499 1.125000 -0.243749 +v 3.062499 1.500000 -0.243749 +v 0.312500 1.062500 -0.187500 +v 3.062499 1.062500 -0.187499 +v 0.312500 1.125000 -0.243750 +v 0.312500 1.500000 -0.243750 +v 0.312500 1.562500 -0.187500 +v 3.062499 1.562500 -0.187499 +v 3.062499 2.125000 -0.243749 +v 3.062499 2.500000 -0.243749 +v 0.312500 2.062500 -0.187500 +v 3.062499 2.062500 -0.187499 +v 0.312500 2.125000 -0.243750 +v 0.312500 2.500000 -0.243750 +v 0.312500 2.562500 -0.187500 +v 3.062499 2.562500 -0.187499 +v 3.062499 3.125000 -0.243749 +v 3.062499 3.500000 -0.243749 +v 0.312500 3.062500 -0.187500 +v 3.062499 3.062500 -0.187499 +v 0.312500 3.125000 -0.243750 +v 0.312500 3.500000 -0.243750 +v 0.312500 3.562500 -0.187500 +v 3.062499 3.562500 -0.187499 +v 3.062499 4.125000 -0.243749 +v 3.062499 4.500000 -0.243749 +v 0.312500 4.062500 -0.187500 +v 3.062499 4.062500 -0.187499 +v 0.312500 4.125000 -0.243750 +v 0.312500 4.500000 -0.243750 +v 0.312500 4.562500 -0.187500 +v 3.062499 4.562500 -0.187499 +v 3.062499 1.125000 0.243751 +v 3.062499 1.500000 0.243751 +v 0.312499 1.062500 0.187501 +v 3.062499 1.062500 0.187502 +v 0.312499 1.125000 0.243751 +v 0.312499 1.500000 0.243751 +v 0.312499 1.562500 0.187501 +v 3.062499 1.562500 0.187502 +v 3.062499 2.125000 0.243751 +v 3.062499 2.500000 0.243751 +v 0.312499 2.062500 0.187501 +v 3.062499 2.062500 0.187502 +v 0.312499 2.125000 0.243751 +v 0.312499 2.500000 0.243751 +v 0.312499 2.562500 0.187501 +v 3.062499 2.562500 0.187502 +v 3.062499 3.125000 0.243751 +v 3.062499 3.500000 0.243751 +v 0.312499 3.062500 0.187501 +v 3.062499 3.062500 0.187502 +v 0.312499 3.125000 0.243751 +v 0.312499 3.500000 0.243751 +v 0.312499 3.562500 0.187501 +v 3.062499 3.562500 0.187502 +v 3.062499 4.125000 0.243751 +v 3.062499 4.500000 0.243751 +v 0.312499 4.062500 0.187501 +v 3.062499 4.062500 0.187502 +v 0.312499 4.125000 0.243751 +v 0.312499 4.500000 0.243751 +v 0.312499 4.562500 0.187501 +v 3.062499 4.562500 0.187502 +v 2.812500 1.625000 0.250001 +v 2.812500 2.000000 0.250001 +v 2.812500 1.625000 0.187500 +v 2.812500 2.000000 0.187500 +v 2.187500 1.625000 0.250000 +v 2.187500 2.000000 0.250000 +v 2.187500 1.625000 0.187500 +v 2.187500 2.000000 0.187500 +v 0.687500 0.468750 -0.356694 +v 0.687500 0.512944 -0.312500 +v 0.687500 0.424556 -0.312500 +v 0.687500 0.468750 -0.268306 +v 3.187499 0.468750 -0.356694 +v 3.187499 0.512944 -0.312499 +v 3.187499 0.424556 -0.312499 +v 3.187499 0.468750 -0.268305 +v 0.687499 0.593750 0.268306 +v 0.687499 0.637944 0.312500 +v 0.687499 0.549556 0.312500 +v 0.687499 0.593750 0.356694 +v 3.187499 0.593750 0.268306 +v 3.187499 0.637944 0.312501 +v 3.187499 0.549556 0.312501 +v 3.187499 0.593750 0.356695 +v 0.687499 0.468750 0.268306 +v 0.687499 0.512944 0.312500 +v 0.687499 0.424556 0.312500 +v 0.687499 0.468750 0.356694 +v 3.187499 0.468750 0.268306 +v 3.187499 0.512944 0.312501 +v 3.187499 0.424556 0.312501 +v 3.187499 0.468750 0.356695 +v 2.437501 0.375000 0.375001 +v 2.437501 0.687500 0.375001 +v 2.437501 0.312500 0.187501 +v 2.437501 0.750000 0.187501 +v 2.562501 0.375000 0.375001 +v 2.562501 0.687500 0.375001 +v 2.562501 0.312500 0.187501 +v 2.562501 0.750000 0.187501 +v 2.437501 0.312500 0.250001 +v 2.437501 0.750000 0.250001 +v 2.562501 0.312500 0.250001 +v 2.562501 0.750000 0.250001 +v 2.437501 0.375000 0.312501 +v 2.562501 0.687500 0.312501 +v 2.437501 0.687500 0.312501 +v 2.562501 0.375000 0.312501 +v 0.375000 0.375000 0.312500 +v 0.687500 0.375000 0.375000 +v 0.687500 0.687500 0.375000 +v 0.500000 0.375000 0.312500 +v 0.500000 0.687500 0.312500 +v 0.562500 0.687500 0.375000 +v 0.562500 0.375000 0.375000 +v 0.687500 0.375000 0.187500 +v 0.687500 0.687500 0.187500 +v 0.375000 0.375000 0.187500 +v 0.375000 0.687500 0.187500 +v 0.375000 0.687500 0.312500 +v 0.187500 1.562500 -0.187500 +v 0.187500 2.062500 -0.187500 +v 0.187500 1.562500 0.187500 +v 0.187500 2.062500 0.187500 +v -0.187500 1.562500 -0.125000 +v -0.125000 1.562500 -0.187500 +v -0.125000 2.062500 -0.187500 +v -0.187500 2.062500 -0.125000 +v -0.125000 1.562500 0.187500 +v -0.187500 1.562500 0.125000 +v -0.187500 2.062500 0.125000 +v -0.125000 2.062500 0.187500 +v 0.187500 2.562500 -0.187500 +v 0.187500 3.062500 -0.187500 +v 0.187500 2.562500 0.187500 +v 0.187500 3.062500 0.187500 +v -0.187500 2.562500 -0.125000 +v -0.125000 2.562500 -0.187500 +v -0.125000 3.062500 -0.187500 +v -0.187500 3.062500 -0.125000 +v -0.125000 2.562500 0.187500 +v -0.187500 2.562500 0.125000 +v -0.187500 3.062500 0.125000 +v -0.125000 3.062500 0.187500 +v 0.187500 3.562500 -0.187500 +v 0.187500 4.062500 -0.187500 +v 0.187500 3.562500 0.187500 +v 0.187500 4.062500 0.187500 +v -0.187500 3.562500 -0.125000 +v -0.125000 3.562500 -0.187500 +v -0.125000 4.062500 -0.187500 +v -0.187500 4.062500 -0.125000 +v -0.125000 3.562500 0.187500 +v -0.187500 3.562500 0.125000 +v -0.187500 4.062500 0.125000 +v -0.125000 4.062500 0.187500 +v 0.187500 4.562500 -0.187500 +v 0.187500 5.062500 -0.187500 +v 0.187500 4.562500 0.187500 +v 0.187500 5.062500 0.187500 +v -0.187500 4.562500 -0.125000 +v -0.125000 4.562500 -0.187500 +v -0.125000 5.062500 -0.187500 +v -0.187500 5.062500 -0.125000 +v -0.125000 4.562500 0.187500 +v -0.187500 4.562500 0.125000 +v -0.187500 5.062500 0.125000 +v -0.125000 5.062500 0.187500 +v 0.187500 5.562500 -0.187500 +v 0.187500 5.812500 -0.187500 +v 0.187500 5.562500 0.187500 +v 0.187500 5.812500 0.187500 +v -0.187500 5.562500 -0.125000 +v -0.125000 5.562500 -0.187500 +v -0.125000 5.812500 -0.187500 +v -0.187500 5.812500 -0.125000 +v -0.125000 5.562500 0.187500 +v -0.187500 5.562500 0.125000 +v -0.187500 5.812500 0.125000 +v -0.125000 5.812500 0.187500 +v 0.312499 0.187500 0.250000 +v 0.312499 0.187500 0.187500 +v 0.193749 0.187500 0.250000 +v 0.193749 5.662815 0.187500 +v 0.193749 0.187500 0.187500 +v 0.193749 5.662815 0.250000 +v 3.062499 2.500000 0.187501 +v 2.958148 3.292633 0.187501 +v 2.652203 4.031250 0.187501 +v 2.165514 4.665514 0.187501 +v 1.531250 5.152203 0.187500 +v 0.792633 5.458148 0.187500 +v 2.760456 4.093750 0.250001 +v 3.078888 3.324986 0.250001 +v 3.187499 2.500000 0.250002 +v 2.253902 4.753902 0.250001 +v 1.593750 5.260456 0.250000 +v 0.824985 5.578888 0.250000 +v 2.652203 4.031250 0.250001 +v 2.958148 3.292633 0.250001 +v 3.062499 2.500000 0.250001 +v 2.165514 4.665514 0.250001 +v 1.531250 5.152203 0.250000 +v 0.792633 5.458148 0.250000 +v 3.062499 0.312500 0.187501 +v 3.062499 0.312500 0.250001 +v 3.187499 0.312500 0.250002 +v 0.312499 5.521358 0.250000 +v 0.193749 5.537815 0.250000 +v 0.193749 5.537815 0.187500 +v 0.312499 5.521358 0.187500 +v 0.312798 5.646319 0.250000 +v 3.187500 0.187500 0.250002 +v 3.187500 0.312500 0.250002 +v 0.312499 0.187500 0.250000 +v 0.312499 0.312500 0.250000 +v 3.187500 0.312500 0.187502 +v 0.312499 0.312500 0.187500 +v 0.312499 5.521358 0.187500 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.8660 -0.5000 -0.0000 +vn -0.9659 -0.2588 -0.0000 +vn -0.9979 -0.0654 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.7071 -0.7071 -0.0000 +vn -0.5000 -0.8660 -0.0000 +vn -0.2588 -0.9659 -0.0000 +vn -0.1305 -0.9914 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 0.7071 -0.7071 +vn -0.0000 -0.7071 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn -0.7071 -0.0000 -0.7071 +vn -0.0000 -0.7071 0.7071 +vn -0.0000 0.7071 0.7071 +vn -0.0000 -0.6690 -0.7433 +vn -0.0000 0.6690 -0.7433 +vn -0.0000 -0.6690 0.7433 +vn -0.0000 0.6690 0.7433 +vt 0.630814 0.276163 +vt 0.482558 0.020349 +vt 0.630814 0.020349 +vt 0.659884 0.404070 +vt 0.654070 0.441860 +vt 0.654070 0.404070 +vt 0.659884 0.366279 +vt 0.654070 0.366279 +vt 0.659884 0.479651 +vt 0.654070 0.479651 +vt 0.654070 0.328488 +vt 0.659884 0.517442 +vt 0.654070 0.517442 +vt 0.662791 0.366279 +vt 0.662791 0.404070 +vt 0.662791 0.328488 +vt 0.709302 0.523256 +vt 0.712209 0.421512 +vt 0.712209 0.523256 +vt 0.659884 0.441860 +vt 0.662791 0.441860 +vt 0.662791 0.479651 +vt 0.662791 0.517442 +vt 0.662791 0.540698 +vt 0.575581 0.383721 +vt 0.581395 0.386628 +vt 0.575581 0.386628 +vt 0.703488 0.523256 +vt 0.709302 0.421512 +vt 0.575581 0.395349 +vt 0.325581 0.392442 +vt 0.325581 0.395349 +vt 0.325581 0.383721 +vt 0.325581 0.386628 +vt 0.654070 0.540698 +vt 0.575581 0.392442 +vt 0.581395 0.392442 +vt 0.465116 0.276163 +vt 0.316860 0.020349 +vt 0.465116 0.020349 +vt 0.459302 0.441860 +vt 0.325581 0.436047 +vt 0.459302 0.436047 +vt 0.325581 0.444767 +vt 0.325581 0.441860 +vt 0.473837 0.636628 +vt 0.459302 0.630814 +vt 0.473837 0.630814 +vt 0.456395 0.636628 +vt 0.459302 0.636628 +vt 0.476744 0.630814 +vt 0.482558 0.630814 +vt 0.479651 0.636628 +vt 0.479651 0.630814 +vt 0.450581 0.636628 +vt 0.453488 0.630814 +vt 0.453488 0.636628 +vt 0.473837 0.639535 +vt 0.476744 0.645349 +vt 0.459302 0.639535 +vt 0.476744 0.636628 +vt 0.456395 0.630814 +vt 0.473837 0.627907 +vt 0.459302 0.627907 +vt 0.456395 0.622093 +vt 0.485465 0.808140 +vt 0.482558 0.825581 +vt 0.482558 0.808140 +vt 0.453488 0.808140 +vt 0.450581 0.825581 +vt 0.450581 0.808140 +vt 0.453488 0.825581 +vt 0.453488 0.805233 +vt 0.482558 0.828488 +vt 0.453488 0.828488 +vt 0.645349 0.595930 +vt 0.630814 0.572674 +vt 0.645349 0.572674 +vt 0.662791 0.598837 +vt 0.645349 0.613372 +vt 0.648256 0.595930 +vt 0.659884 0.595930 +vt 0.648256 0.572674 +vt 0.659884 0.572674 +vt 0.677326 0.595930 +vt 0.662791 0.572674 +vt 0.677326 0.572674 +vt 0.662791 0.595930 +vt 0.662791 0.569767 +vt 0.645349 0.555233 +vt 0.421512 0.619186 +vt 0.438953 0.625000 +vt 0.421512 0.625000 +vt 0.438953 0.627907 +vt 0.421512 0.627907 +vt 0.421512 0.633721 +vt 0.438953 0.639535 +vt 0.421512 0.639535 +vt 0.438953 0.633721 +vt 0.421512 0.610465 +vt 0.438953 0.619186 +vt 0.418605 0.627907 +vt 0.412791 0.633721 +vt 0.412791 0.619186 +vt 0.447674 0.633721 +vt 0.441860 0.627907 +vt 0.488372 0.671512 +vt 0.604651 0.668605 +vt 0.604651 0.671512 +vt 0.604651 0.662791 +vt 0.488372 0.665698 +vt 0.488372 0.662791 +vt 0.488372 0.659884 +vt 0.604651 0.659884 +vt 0.488372 0.668605 +vt 0.465116 0.008721 +vt 0.482558 0.276163 +vt 0.645349 0.715116 +vt 0.517442 0.697674 +vt 0.645349 0.697674 +vt 0.645349 0.694767 +vt 0.517442 0.718023 +vt 0.517442 0.715116 +vt 0.645349 0.741279 +vt 0.517442 0.723837 +vt 0.645349 0.723837 +vt 0.645349 0.720930 +vt 0.517442 0.744186 +vt 0.517442 0.741279 +vt 0.645349 0.767442 +vt 0.517442 0.750000 +vt 0.645349 0.750000 +vt 0.645349 0.747093 +vt 0.517442 0.770349 +vt 0.517442 0.767442 +vt 0.645349 0.793605 +vt 0.517442 0.776163 +vt 0.645349 0.776163 +vt 0.645349 0.773256 +vt 0.517442 0.796512 +vt 0.517442 0.793605 +vt 0.517442 0.802326 +vt 0.645349 0.819767 +vt 0.645349 0.802326 +vt 0.645349 0.799419 +vt 0.517442 0.822674 +vt 0.517442 0.819767 +vt 0.517442 0.828488 +vt 0.645349 0.845930 +vt 0.645349 0.828488 +vt 0.645349 0.825581 +vt 0.517442 0.848837 +vt 0.517442 0.845930 +vt 0.517442 0.854651 +vt 0.645349 0.872093 +vt 0.645349 0.854651 +vt 0.645349 0.851744 +vt 0.517442 0.875000 +vt 0.517442 0.872093 +vt 0.517442 0.880814 +vt 0.645349 0.898256 +vt 0.645349 0.880814 +vt 0.645349 0.877907 +vt 0.517442 0.901163 +vt 0.517442 0.898256 +vt 0.485465 0.834302 +vt 0.482558 0.851744 +vt 0.482558 0.834302 +vt 0.453488 0.834302 +vt 0.450581 0.851744 +vt 0.450581 0.834302 +vt 0.453488 0.851744 +vt 0.453488 0.831395 +vt 0.482558 0.854651 +vt 0.453488 0.854651 +vt 0.488372 0.656977 +vt 0.604651 0.654070 +vt 0.604651 0.656977 +vt 0.604651 0.648256 +vt 0.488372 0.651163 +vt 0.488372 0.648256 +vt 0.488372 0.645349 +vt 0.604651 0.645349 +vt 0.488372 0.654070 +vt 0.607558 0.671512 +vt 0.723837 0.668605 +vt 0.723837 0.671512 +vt 0.723837 0.662791 +vt 0.607558 0.665698 +vt 0.607558 0.662791 +vt 0.607558 0.659884 +vt 0.723837 0.659884 +vt 0.607558 0.668605 +vt 0.607558 0.656977 +vt 0.723837 0.654070 +vt 0.723837 0.656977 +vt 0.723837 0.648256 +vt 0.607558 0.651163 +vt 0.607558 0.648256 +vt 0.607558 0.645349 +vt 0.723837 0.645349 +vt 0.607558 0.654070 +vt 0.459302 0.656977 +vt 0.473837 0.662791 +vt 0.473837 0.656977 +vt 0.456395 0.662791 +vt 0.459302 0.662791 +vt 0.476744 0.656977 +vt 0.479651 0.662791 +vt 0.482558 0.656977 +vt 0.479651 0.656977 +vt 0.453488 0.656977 +vt 0.450581 0.662791 +vt 0.453488 0.662791 +vt 0.473837 0.665698 +vt 0.459302 0.665698 +vt 0.476744 0.671512 +vt 0.476744 0.662791 +vt 0.456395 0.656977 +vt 0.476744 0.648256 +vt 0.459302 0.654070 +vt 0.473837 0.654070 +vt 0.438953 0.656977 +vt 0.421512 0.651163 +vt 0.421512 0.656977 +vt 0.438953 0.659884 +vt 0.421512 0.659884 +vt 0.438953 0.671512 +vt 0.421512 0.665698 +vt 0.421512 0.671512 +vt 0.438953 0.665698 +vt 0.438953 0.651163 +vt 0.421512 0.642442 +vt 0.412791 0.651163 +vt 0.418605 0.665698 +vt 0.418605 0.659884 +vt 0.441860 0.659884 +vt 0.447674 0.665698 +vt 0.680233 0.566860 +vt 0.665698 0.543605 +vt 0.680233 0.543605 +vt 0.697674 0.569767 +vt 0.680233 0.584302 +vt 0.683140 0.566860 +vt 0.694767 0.566860 +vt 0.683140 0.543605 +vt 0.694767 0.543605 +vt 0.712209 0.566860 +vt 0.697674 0.543605 +vt 0.712209 0.543605 +vt 0.697674 0.566860 +vt 0.697674 0.540698 +vt 0.680233 0.526163 +vt 0.680233 0.627907 +vt 0.665698 0.604651 +vt 0.680233 0.604651 +vt 0.697674 0.630814 +vt 0.680233 0.645349 +vt 0.683140 0.627907 +vt 0.694767 0.627907 +vt 0.683140 0.604651 +vt 0.694767 0.604651 +vt 0.712209 0.627907 +vt 0.697674 0.604651 +vt 0.712209 0.604651 +vt 0.697674 0.627907 +vt 0.697674 0.601744 +vt 0.680233 0.587209 +vt 0.715116 0.595930 +vt 0.700581 0.572674 +vt 0.715116 0.572674 +vt 0.732558 0.598837 +vt 0.715116 0.613372 +vt 0.718023 0.595930 +vt 0.729651 0.595930 +vt 0.718023 0.572674 +vt 0.729651 0.572674 +vt 0.747093 0.595930 +vt 0.732558 0.572674 +vt 0.747093 0.572674 +vt 0.732558 0.595930 +vt 0.732558 0.569767 +vt 0.715116 0.555233 +vt 0.750000 0.566860 +vt 0.735465 0.543605 +vt 0.750000 0.543605 +vt 0.767442 0.569767 +vt 0.750000 0.584302 +vt 0.752907 0.566860 +vt 0.764535 0.566860 +vt 0.752907 0.543605 +vt 0.764535 0.543605 +vt 0.781977 0.566860 +vt 0.767442 0.543605 +vt 0.781977 0.543605 +vt 0.767442 0.566860 +vt 0.767442 0.540698 +vt 0.750000 0.526163 +vt 0.750000 0.616279 +vt 0.735465 0.604651 +vt 0.750000 0.604651 +vt 0.767442 0.619186 +vt 0.750000 0.633721 +vt 0.752907 0.616279 +vt 0.764535 0.616279 +vt 0.752907 0.604651 +vt 0.764535 0.604651 +vt 0.781977 0.616279 +vt 0.767442 0.604651 +vt 0.781977 0.604651 +vt 0.767442 0.616279 +vt 0.767442 0.601744 +vt 0.750000 0.587209 +vt 0.665698 0.441860 +vt 0.671512 0.404070 +vt 0.665698 0.404070 +vt 0.671512 0.366279 +vt 0.665698 0.366279 +vt 0.671512 0.479651 +vt 0.671512 0.441860 +vt 0.665698 0.328488 +vt 0.671512 0.328488 +vt 0.665698 0.479651 +vt 0.671512 0.517442 +vt 0.674419 0.366279 +vt 0.674419 0.404070 +vt 0.674419 0.328488 +vt 0.723837 0.421512 +vt 0.720930 0.523256 +vt 0.723837 0.523256 +vt 0.674419 0.441860 +vt 0.674419 0.479651 +vt 0.674419 0.517442 +vt 0.674419 0.540698 +vt 0.581395 0.401163 +vt 0.575581 0.398256 +vt 0.575581 0.401163 +vt 0.720930 0.421512 +vt 0.715116 0.523256 +vt 0.325581 0.406977 +vt 0.575581 0.409884 +vt 0.325581 0.409884 +vt 0.325581 0.398256 +vt 0.325581 0.401163 +vt 0.665698 0.540698 +vt 0.665698 0.517442 +vt 0.575581 0.406977 +vt 0.581395 0.406977 +vt 0.325581 0.447674 +vt 0.459302 0.453488 +vt 0.459302 0.447674 +vt 0.325581 0.456395 +vt 0.325581 0.453488 +vt 0.659884 0.328488 +vt 0.659884 0.540698 +vt 0.581395 0.383721 +vt 0.703488 0.421512 +vt 0.316860 0.276163 +vt 0.459302 0.444767 +vt 0.482558 0.636628 +vt 0.450581 0.630814 +vt 0.476744 0.642442 +vt 0.456395 0.645349 +vt 0.456395 0.642442 +vt 0.476744 0.622093 +vt 0.476744 0.625000 +vt 0.456395 0.625000 +vt 0.485465 0.825581 +vt 0.482558 0.805233 +vt 0.630814 0.595930 +vt 0.662791 0.613372 +vt 0.645349 0.598837 +vt 0.662791 0.555233 +vt 0.645349 0.569767 +vt 0.438953 0.610465 +vt 0.418605 0.633721 +vt 0.447674 0.619186 +vt 0.441860 0.633721 +vt 0.604651 0.665698 +vt 0.482558 0.008721 +vt 0.517442 0.694767 +vt 0.645349 0.718023 +vt 0.517442 0.720930 +vt 0.645349 0.744186 +vt 0.517442 0.747093 +vt 0.645349 0.770349 +vt 0.517442 0.773256 +vt 0.645349 0.796512 +vt 0.517442 0.799419 +vt 0.645349 0.822674 +vt 0.517442 0.825581 +vt 0.645349 0.848837 +vt 0.517442 0.851744 +vt 0.645349 0.875000 +vt 0.517442 0.877907 +vt 0.645349 0.901163 +vt 0.485465 0.851744 +vt 0.482558 0.831395 +vt 0.604651 0.651163 +vt 0.723837 0.665698 +vt 0.723837 0.651163 +vt 0.482558 0.662791 +vt 0.450581 0.656977 +vt 0.456395 0.668605 +vt 0.456395 0.671512 +vt 0.476744 0.668605 +vt 0.476744 0.651163 +vt 0.456395 0.648256 +vt 0.456395 0.651163 +vt 0.438953 0.642442 +vt 0.412791 0.665698 +vt 0.441860 0.665698 +vt 0.447674 0.651163 +vt 0.665698 0.566860 +vt 0.697674 0.584302 +vt 0.680233 0.569767 +vt 0.697674 0.526163 +vt 0.680233 0.540698 +vt 0.665698 0.627907 +vt 0.697674 0.645349 +vt 0.680233 0.630814 +vt 0.697674 0.587209 +vt 0.680233 0.601744 +vt 0.700581 0.595930 +vt 0.732558 0.613372 +vt 0.715116 0.598837 +vt 0.732558 0.555233 +vt 0.715116 0.569767 +vt 0.735465 0.566860 +vt 0.767442 0.584302 +vt 0.750000 0.569767 +vt 0.767442 0.526163 +vt 0.750000 0.540698 +vt 0.735465 0.616279 +vt 0.767442 0.633721 +vt 0.750000 0.619186 +vt 0.767442 0.587209 +vt 0.750000 0.601744 +vt 0.671512 0.540698 +vt 0.581395 0.398256 +vt 0.715116 0.421512 +vt 0.459302 0.456395 +s 0 +usemtl TEXTURE +f 600/775/64 597/776/64 599/777/64 +s 1 +f 619/778/65 616/779/65 613/780/65 +f 620/781/65 613/780/65 614/782/65 +f 616/779/65 623/783/65 617/784/65 +f 615/785/65 620/781/65 614/782/65 +f 617/784/65 624/786/65 618/787/65 +f 619/778/66 608/788/67 609/789/66 +f 620/781/67 607/790/68 608/788/67 +f 621/791/68 625/792/69 607/793/68 +f 622/794/70 609/789/66 610/795/70 +f 623/783/71 610/795/70 611/796/71 +f 624/786/72 611/796/71 612/797/72 +f 631/798/73 624/786/72 612/797/72 +f 630/799/69 606/800/69 629/801/69 +f 615/802/65 626/803/65 621/791/65 +f 628/804/74 602/805/74 601/806/74 +f 603/807/69 630/801/69 629/799/69 +f 603/805/65 628/801/65 601/808/65 +f 624/786/65 632/809/65 618/787/65 +f 632/800/65 629/810/65 606/811/65 +s 0 +f 634/812/65 635/813/65 633/814/65 +s 1 +f 640/815/65 637/816/65 639/817/65 +f 640/815/75 641/818/75 638/819/75 +f 643/820/65 648/821/65 647/822/65 +f 643/823/76 658/821/76 655/824/76 +f 648/825/75 657/820/75 656/822/75 +f 654/826/75 646/827/75 650/828/75 +f 651/829/76 649/830/76 645/831/76 +f 655/832/69 645/833/69 657/834/69 +f 656/828/77 652/835/77 654/825/77 +f 655/831/78 653/836/78 651/823/78 +f 658/837/74 656/838/74 650/839/74 +f 661/840/69 660/841/69 659/842/69 +f 663/843/74 666/844/74 665/845/74 +f 659/842/65 664/846/65 663/843/65 +f 659/847/76 665/842/76 661/843/76 +f 664/846/75 662/848/75 666/849/75 +f 673/850/65 667/851/65 672/852/65 +f 678/853/75 668/854/75 674/855/75 +f 677/856/69 671/857/69 676/858/69 +f 670/859/64 675/860/64 669/861/64 +f 676/858/79 678/862/79 677/856/79 +f 672/852/80 674/855/80 673/850/80 +f 675/863/76 671/857/76 667/864/76 +f 681/865/65 685/866/65 684/867/65 +f 684/867/80 682/868/80 683/869/80 +f 690/870/69 688/871/69 689/872/69 +f 679/873/65 683/869/65 682/868/65 +f 687/874/74 680/875/74 681/865/74 +f 683/876/75 689/877/75 687/878/75 +f 680/875/76 688/879/76 682/880/76 +f 697/881/81 694/882/81 693/883/81 +f 691/884/77 696/885/77 695/886/77 +f 691/884/78 697/887/78 693/888/78 +f 696/885/82 694/882/82 698/889/82 +f 699/890/69 702/891/69 700/812/69 +f 709/892/65 704/893/65 708/894/65 +f 704/893/83 706/895/83 708/894/83 +f 709/892/84 711/896/84 705/897/84 +f 717/898/65 712/899/65 716/900/65 +f 712/899/83 714/901/83 716/900/83 +f 717/898/84 719/902/84 713/903/84 +f 725/904/65 720/905/65 724/906/65 +f 720/905/83 722/907/83 724/906/83 +f 725/904/84 727/908/84 721/909/84 +f 733/910/65 728/911/65 732/912/65 +f 728/911/83 730/913/83 732/912/83 +f 733/910/84 735/914/84 729/915/84 +f 736/916/64 741/917/64 740/918/64 +f 738/919/85 736/916/85 740/918/85 +f 743/920/86 741/917/86 737/921/86 +f 744/922/64 749/923/64 748/924/64 +f 746/925/85 744/922/85 748/924/85 +f 751/926/86 749/923/86 745/927/86 +f 752/928/64 757/929/64 756/930/64 +f 754/931/85 752/928/85 756/930/85 +f 759/932/86 757/929/86 753/933/86 +f 760/934/64 765/935/64 764/936/64 +f 762/937/85 760/934/85 764/936/85 +f 767/938/86 765/935/86 761/939/86 +f 770/940/74 769/941/74 768/942/74 +f 772/943/69 775/944/69 774/945/69 +f 768/942/64 773/946/64 772/943/64 +f 768/947/76 774/942/76 770/943/76 +f 773/946/75 771/948/75 775/949/75 +f 782/950/81 779/951/81 778/952/81 +f 776/953/77 781/954/77 780/955/77 +f 776/953/78 782/956/78 778/957/78 +f 781/954/82 779/951/82 783/958/82 +f 790/959/81 787/960/81 786/961/81 +f 784/962/77 789/963/77 788/964/77 +f 784/962/78 790/965/78 786/966/78 +f 789/963/82 787/960/82 791/967/82 +f 798/968/81 795/969/81 794/970/81 +f 792/971/77 797/972/77 796/973/77 +f 792/971/78 798/974/78 794/975/78 +f 797/972/82 795/969/82 799/976/82 +f 805/977/64 800/978/64 804/979/64 +f 815/977/76 800/980/76 812/981/76 +f 814/978/75 805/982/75 813/979/75 +f 803/983/75 811/984/75 807/985/75 +f 806/986/76 808/987/76 802/988/76 +f 812/989/69 814/990/69 802/991/69 +f 809/992/82 813/985/82 811/982/82 +f 810/993/81 812/988/81 808/980/81 +f 806/994/74 813/995/74 815/996/74 +f 822/997/64 818/998/64 821/999/64 +f 819/1000/79 821/999/79 820/1001/79 +f 825/1002/69 827/1003/69 826/1004/69 +f 820/1001/64 816/1005/64 819/1000/64 +f 817/1006/74 824/1007/74 818/998/74 +f 824/1008/75 827/1009/75 820/1010/75 +f 819/1011/76 825/1012/76 817/1006/76 +f 834/1013/65 828/1014/65 833/1015/65 +f 839/1016/75 829/1017/75 835/1018/75 +f 838/1019/69 832/1020/69 837/1021/69 +f 831/1022/64 836/1023/64 830/1024/64 +f 837/1021/79 839/1025/79 838/1019/79 +f 833/1015/80 835/1018/80 834/1013/80 +f 836/1026/76 832/1020/76 828/1027/76 +f 846/1028/65 840/1029/65 845/1030/65 +f 851/1031/75 841/1032/75 847/1033/75 +f 850/1034/69 844/1035/69 849/1036/69 +f 843/1037/64 848/1038/64 842/1039/64 +f 849/1036/79 851/1040/79 850/1034/79 +f 845/1030/80 847/1033/80 846/1028/80 +f 848/1041/76 844/1035/76 840/1042/76 +f 858/1043/65 852/1044/65 857/1045/65 +f 863/1046/75 853/1047/75 859/1048/75 +f 862/1049/69 856/1050/69 861/1051/69 +f 855/1052/64 860/1053/64 854/1054/64 +f 861/1051/79 863/1055/79 862/1049/79 +f 857/1045/80 859/1048/80 858/1043/80 +f 860/1056/76 856/1050/76 852/1057/76 +f 870/1058/65 864/1059/65 869/1060/65 +f 875/1061/75 865/1062/75 871/1063/75 +f 874/1064/69 868/1065/69 873/1066/69 +f 867/1067/64 872/1068/64 866/1069/64 +f 873/1066/79 875/1070/79 874/1064/79 +f 869/1060/80 871/1063/80 870/1058/80 +f 872/1071/76 868/1065/76 864/1072/76 +f 882/1073/65 876/1074/65 881/1075/65 +f 887/1076/75 877/1077/75 883/1078/75 +f 886/1079/69 880/1080/69 885/1081/69 +f 879/1082/64 884/1083/64 878/1084/64 +f 885/1081/79 887/1085/79 886/1079/79 +f 881/1075/80 883/1078/80 882/1073/80 +f 884/1086/76 880/1080/76 876/1087/76 +f 903/1088/64 906/1089/64 900/1090/64 +f 900/1090/64 907/1091/64 901/1092/64 +f 903/1088/64 910/1093/64 909/1094/64 +f 902/1095/64 907/1091/64 908/1096/64 +f 904/1097/64 911/1098/64 910/1093/64 +f 895/1099/67 906/1089/66 896/1100/66 +f 894/1101/68 907/1091/67 895/1099/67 +f 912/1102/69 908/1103/68 894/1104/68 +f 896/1100/66 909/1094/70 897/1105/70 +f 897/1105/70 910/1093/71 898/1106/71 +f 898/1106/71 911/1098/72 899/1107/72 +f 911/1098/72 918/1108/73 899/1107/72 +f 893/1109/69 917/1110/69 916/1111/69 +f 913/1112/64 902/1113/64 908/1103/64 +f 889/1114/74 915/1115/74 888/1116/74 +f 917/1111/69 890/1117/69 916/1110/69 +f 915/1111/64 890/1114/64 888/1118/64 +f 919/1119/64 911/1098/64 905/1120/64 +f 916/1121/64 919/1109/64 893/1122/64 +f 920/1123/64 923/1124/64 922/1125/64 +f 924/1126/75 923/1124/75 921/1127/75 +s 0 +f 600/775/64 598/891/64 597/776/64 +s 1 +f 619/778/65 622/794/65 616/779/65 +f 620/781/65 619/778/65 613/780/65 +f 616/779/65 622/794/65 623/783/65 +f 615/785/65 621/1128/65 620/781/65 +f 617/784/65 623/783/65 624/786/65 +f 619/778/66 620/781/67 608/788/67 +f 620/781/67 621/1128/68 607/790/68 +f 621/791/68 626/803/69 625/792/69 +f 622/794/70 619/778/66 609/789/66 +f 623/783/71 622/794/70 610/795/70 +f 624/786/72 623/783/71 611/796/71 +f 631/798/73 628/1129/73 624/786/72 +f 630/799/69 604/1130/69 606/800/69 +f 615/802/65 627/1131/65 626/803/65 +f 628/804/74 703/810/74 602/805/74 +f 603/807/69 605/808/69 630/801/69 +f 603/805/65 629/810/65 628/801/65 +f 624/786/65 628/1129/65 632/809/65 +f 632/800/65 628/801/65 629/810/65 +s 0 +f 634/812/65 636/1132/65 635/813/65 +s 1 +f 640/815/65 638/819/65 637/816/65 +f 640/815/75 642/1133/75 641/818/75 +f 643/820/65 644/824/65 648/821/65 +f 643/823/76 647/836/76 658/821/76 +f 648/825/75 644/835/75 657/820/75 +f 654/826/75 652/1134/75 646/827/75 +f 651/829/76 653/1135/76 649/830/76 +f 655/832/69 651/1136/69 645/833/69 +f 645/833/69 646/1137/69 652/1138/69 +f 657/834/69 644/824/69 643/820/69 +f 645/833/69 652/1138/69 657/834/69 +f 657/834/69 643/820/69 655/832/69 +f 656/828/77 657/827/77 652/835/77 +f 655/831/78 658/830/78 653/836/78 +f 649/1139/74 653/1140/74 658/837/74 +f 658/837/74 647/822/74 648/821/74 +f 656/838/74 654/1141/74 650/839/74 +f 658/837/74 648/821/74 656/838/74 +f 650/839/74 649/1139/74 658/837/74 +f 661/840/69 662/1142/69 660/841/69 +f 663/843/74 664/846/74 666/844/74 +f 659/842/65 660/841/65 664/846/65 +f 659/847/76 663/1143/76 665/842/76 +f 664/846/75 660/841/75 662/848/75 +f 673/850/65 668/1144/65 667/851/65 +f 674/855/75 677/856/75 678/853/75 +f 678/853/75 670/1145/75 668/854/75 +f 668/854/75 673/1146/75 674/855/75 +f 677/856/69 674/855/69 671/857/69 +f 670/859/64 678/862/64 675/860/64 +f 676/858/79 675/860/79 678/862/79 +f 672/852/80 671/857/80 674/855/80 +f 667/864/76 669/1147/76 675/863/76 +f 675/863/76 676/858/76 671/857/76 +f 671/857/76 672/1148/76 667/864/76 +f 681/865/65 680/875/65 685/866/65 +f 684/867/80 685/866/80 682/868/80 +f 690/870/69 679/873/69 688/871/69 +f 679/873/65 690/870/65 683/869/65 +f 687/874/74 686/1149/74 680/875/74 +f 687/878/75 681/865/75 684/867/75 +f 683/876/75 690/1150/75 689/877/75 +f 687/878/75 684/867/75 683/876/75 +f 682/880/76 685/866/76 680/875/76 +f 680/875/76 686/1151/76 688/879/76 +f 688/879/76 679/1152/76 682/880/76 +f 697/881/81 698/889/81 694/882/81 +f 691/884/77 692/1153/77 696/885/77 +f 691/884/78 695/886/78 697/887/78 +f 696/885/82 692/1153/82 694/882/82 +f 699/890/69 701/1154/69 702/891/69 +f 709/892/65 705/897/65 704/893/65 +f 704/893/83 707/1155/83 706/895/83 +f 709/892/84 710/1156/84 711/896/84 +f 717/898/65 713/903/65 712/899/65 +f 712/899/83 715/1157/83 714/901/83 +f 717/898/84 718/1158/84 719/902/84 +f 725/904/65 721/909/65 720/905/65 +f 720/905/83 723/1159/83 722/907/83 +f 725/904/84 726/1160/84 727/908/84 +f 733/910/65 729/915/65 728/911/65 +f 728/911/83 731/1161/83 730/913/83 +f 733/910/84 734/1162/84 735/914/84 +f 736/916/64 737/921/64 741/917/64 +f 738/919/85 739/1163/85 736/916/85 +f 743/920/86 742/1164/86 741/917/86 +f 744/922/64 745/927/64 749/923/64 +f 746/925/85 747/1165/85 744/922/85 +f 751/926/86 750/1166/86 749/923/86 +f 752/928/64 753/933/64 757/929/64 +f 754/931/85 755/1167/85 752/928/85 +f 759/932/86 758/1168/86 757/929/86 +f 760/934/64 761/939/64 765/935/64 +f 762/937/85 763/1169/85 760/934/85 +f 767/938/86 766/1170/86 765/935/86 +f 770/940/74 771/1171/74 769/941/74 +f 772/943/69 773/946/69 775/944/69 +f 768/942/64 769/941/64 773/946/64 +f 768/947/76 772/1172/76 774/942/76 +f 773/946/75 769/941/75 771/948/75 +f 782/950/81 783/958/81 779/951/81 +f 776/953/77 777/1173/77 781/954/77 +f 776/953/78 780/955/78 782/956/78 +f 781/954/82 777/1173/82 779/951/82 +f 790/959/81 791/967/81 787/960/81 +f 784/962/77 785/1174/77 789/963/77 +f 784/962/78 788/964/78 790/965/78 +f 789/963/82 785/1174/82 787/960/82 +f 798/968/81 799/976/81 795/969/81 +f 792/971/77 793/1175/77 797/972/77 +f 792/971/78 796/973/78 798/974/78 +f 797/972/82 793/1175/82 795/969/82 +f 805/977/64 801/981/64 800/978/64 +f 815/977/76 804/993/76 800/980/76 +f 814/978/75 801/992/75 805/982/75 +f 803/983/75 809/1176/75 811/984/75 +f 806/986/76 810/1177/76 808/987/76 +f 812/989/69 800/978/69 801/981/69 +f 814/990/69 809/1178/69 803/1179/69 +f 812/989/69 801/981/69 814/990/69 +f 802/991/69 808/1180/69 812/989/69 +f 814/990/69 803/1179/69 802/991/69 +f 809/992/82 814/983/82 813/985/82 +f 810/993/81 815/986/81 812/988/81 +f 815/996/74 810/1181/74 806/994/74 +f 806/994/74 807/1182/74 811/1183/74 +f 813/995/74 805/977/74 804/979/74 +f 806/994/74 811/1183/74 813/995/74 +f 813/995/74 804/979/74 815/996/74 +f 822/997/64 817/1006/64 818/998/64 +f 819/1000/79 822/997/79 821/999/79 +f 825/1002/69 816/1005/69 827/1003/69 +f 820/1001/64 827/1003/64 816/1005/64 +f 817/1006/74 823/1184/74 824/1007/74 +f 821/999/75 818/998/75 824/1008/75 +f 824/1008/75 826/1185/75 827/1009/75 +f 820/1010/75 821/999/75 824/1008/75 +f 817/1006/76 822/997/76 819/1011/76 +f 819/1011/76 816/1186/76 825/1012/76 +f 825/1012/76 823/1187/76 817/1006/76 +f 834/1013/65 829/1188/65 828/1014/65 +f 835/1018/75 838/1019/75 839/1016/75 +f 839/1016/75 831/1189/75 829/1017/75 +f 829/1017/75 834/1190/75 835/1018/75 +f 838/1019/69 835/1018/69 832/1020/69 +f 831/1022/64 839/1025/64 836/1023/64 +f 837/1021/79 836/1023/79 839/1025/79 +f 833/1015/80 832/1020/80 835/1018/80 +f 828/1027/76 830/1191/76 836/1026/76 +f 836/1026/76 837/1021/76 832/1020/76 +f 832/1020/76 833/1192/76 828/1027/76 +f 846/1028/65 841/1193/65 840/1029/65 +f 847/1033/75 850/1034/75 851/1031/75 +f 851/1031/75 843/1194/75 841/1032/75 +f 841/1032/75 846/1195/75 847/1033/75 +f 850/1034/69 847/1033/69 844/1035/69 +f 843/1037/64 851/1040/64 848/1038/64 +f 849/1036/79 848/1038/79 851/1040/79 +f 845/1030/80 844/1035/80 847/1033/80 +f 840/1042/76 842/1196/76 848/1041/76 +f 848/1041/76 849/1036/76 844/1035/76 +f 844/1035/76 845/1197/76 840/1042/76 +f 858/1043/65 853/1198/65 852/1044/65 +f 859/1048/75 862/1049/75 863/1046/75 +f 863/1046/75 855/1199/75 853/1047/75 +f 853/1047/75 858/1200/75 859/1048/75 +f 862/1049/69 859/1048/69 856/1050/69 +f 855/1052/64 863/1055/64 860/1053/64 +f 861/1051/79 860/1053/79 863/1055/79 +f 857/1045/80 856/1050/80 859/1048/80 +f 852/1057/76 854/1201/76 860/1056/76 +f 860/1056/76 861/1051/76 856/1050/76 +f 856/1050/76 857/1202/76 852/1057/76 +f 870/1058/65 865/1203/65 864/1059/65 +f 871/1063/75 874/1064/75 875/1061/75 +f 875/1061/75 867/1204/75 865/1062/75 +f 865/1062/75 870/1205/75 871/1063/75 +f 874/1064/69 871/1063/69 868/1065/69 +f 867/1067/64 875/1070/64 872/1068/64 +f 873/1066/79 872/1068/79 875/1070/79 +f 869/1060/80 868/1065/80 871/1063/80 +f 864/1072/76 866/1206/76 872/1071/76 +f 872/1071/76 873/1066/76 868/1065/76 +f 868/1065/76 869/1207/76 864/1072/76 +f 882/1073/65 877/1208/65 876/1074/65 +f 883/1078/75 886/1079/75 887/1076/75 +f 887/1076/75 879/1209/75 877/1077/75 +f 877/1077/75 882/1210/75 883/1078/75 +f 886/1079/69 883/1078/69 880/1080/69 +f 879/1082/64 887/1085/64 884/1083/64 +f 885/1081/79 884/1083/79 887/1085/79 +f 881/1075/80 880/1080/80 883/1078/80 +f 876/1087/76 878/1211/76 884/1086/76 +f 884/1086/76 885/1081/76 880/1080/76 +f 880/1080/76 881/1212/76 876/1087/76 +f 903/1088/64 909/1094/64 906/1089/64 +f 900/1090/64 906/1089/64 907/1091/64 +f 903/1088/64 904/1097/64 910/1093/64 +f 902/1095/64 901/1092/64 907/1091/64 +f 904/1097/64 905/1120/64 911/1098/64 +f 895/1099/67 907/1091/67 906/1089/66 +f 894/1101/68 908/1096/68 907/1091/67 +f 912/1102/69 913/1112/69 908/1103/68 +f 896/1100/66 906/1089/66 909/1094/70 +f 897/1105/70 909/1094/70 910/1093/71 +f 898/1106/71 910/1093/71 911/1098/72 +f 911/1098/72 915/1213/73 918/1108/73 +f 893/1109/69 891/1214/69 917/1110/69 +f 913/1112/64 914/1215/64 902/1113/64 +f 889/1114/74 926/1121/74 915/1115/74 +f 917/1111/69 892/1118/69 890/1117/69 +f 915/1111/64 916/1121/64 890/1114/64 +f 919/1119/64 915/1213/64 911/1098/64 +f 916/1121/64 915/1111/64 919/1109/64 +f 920/1123/64 921/1127/64 923/1124/64 +f 924/1126/75 925/1216/75 923/1124/75 diff --git a/src/main/resources/assets/hbm/models/pile/pile_control.obj b/src/main/resources/assets/hbm/models/pile/pile_control.obj new file mode 100644 index 000000000..a7859bdb4 --- /dev/null +++ b/src/main/resources/assets/hbm/models/pile/pile_control.obj @@ -0,0 +1,318 @@ +# Blender v2.79 (sub 0) OBJ File: 'pile_control.blend' +# www.blender.org +o Rod +v 0.187500 0.750000 -0.250000 +v 0.250000 0.750000 -0.187500 +v -0.250000 0.750000 -0.187500 +v -0.187500 0.750000 -0.250000 +v -0.187500 0.750000 0.250000 +v -0.250000 0.750000 0.187500 +v 0.250000 0.750000 0.187500 +v 0.187500 0.750000 0.250000 +v 0.250000 1.000000 -0.187500 +v 0.187500 1.000000 -0.250000 +v -0.187500 1.000000 -0.250000 +v -0.250000 1.000000 -0.187500 +v -0.250000 1.000000 0.187500 +v -0.187500 1.000000 0.250000 +v 0.187500 1.000000 0.250000 +v 0.250000 1.000000 0.187500 +v 0.187500 0.750000 -0.125000 +v 0.125000 0.750000 -0.187500 +v -0.125000 0.750000 -0.187500 +v -0.187500 0.750000 -0.125000 +v -0.187500 0.750000 0.125000 +v -0.125000 0.750000 0.187500 +v 0.125000 0.750000 0.187500 +v 0.187500 0.750000 0.125000 +v 0.125000 0.000000 -0.187500 +v 0.187500 0.000000 -0.125000 +v -0.187500 0.000000 -0.125000 +v -0.125000 0.000000 -0.187500 +v -0.125000 0.000000 0.187500 +v -0.187500 0.000000 0.125000 +v 0.187500 0.000000 0.125000 +v 0.125000 0.000000 0.187500 +vt 0.618182 0.600000 +vt 0.509091 0.700000 +vt 0.509091 0.600000 +vt 0.872727 0.600000 +vt 0.763636 0.700000 +vt 0.763636 0.600000 +vt 0.490909 0.600000 +vt 0.381818 0.700000 +vt 0.381818 0.600000 +vt 0.618182 0.700000 +vt 0.636364 0.725000 +vt 0.490909 0.875000 +vt 0.490909 0.575000 +vt 0.509091 0.400000 +vt 0.745455 1.000000 +vt 0.818182 0.700000 +vt 0.818182 1.000000 +vt 0.927273 1.000000 +vt 1.000000 0.700000 +vt 1.000000 1.000000 +vt 0.654545 1.000000 +vt 0.727273 0.700000 +vt 0.727273 1.000000 +vt 0.636364 0.700000 +vt 0.636364 0.600000 +vt 0.490909 0.700000 +vt 0.363636 0.600000 +vt 0.745455 0.600000 +vt 0.745455 0.700000 +vt 0.745455 0.700000 +vt 0.636364 0.700000 +vt 0.636364 1.000000 +vt 0.909091 0.700000 +vt 0.927273 0.700000 +vt 0.836364 1.000000 +vt 0.909091 1.000000 +vt 0.872727 0.700000 +vt 0.636364 0.875000 +vt 0.618182 0.900000 +vt 0.509091 0.900000 +vt 0.490909 0.725000 +vt 0.618182 0.400000 +vt 0.636364 0.425000 +vt 0.636364 0.575000 +vt 0.490909 0.425000 +vt 0.654545 0.700000 +vt 0.363636 0.700000 +vt 0.836364 0.700000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 -0.0000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 0.0000 -1.0000 +s off +f 2/1/1 16/2/1 7/3/1 +f 6/4/2 12/5/2 3/6/2 +f 8/7/3 14/8/3 5/9/3 +f 9/10/4 10/11/4 14/12/4 +f 2/1/5 8/13/5 6/14/5 +f 24/15/1 26/16/1 17/17/1 +f 20/18/2 30/19/2 21/20/2 +f 22/21/3 32/22/3 23/23/3 +f 10/24/6 2/1/6 1/25/6 +f 8/7/7 16/2/7 15/26/7 +f 14/8/8 6/27/8 5/9/8 +f 4/28/9 12/5/9 11/29/9 +f 4/28/10 10/24/10 1/25/10 +f 24/15/7 32/22/7 31/30/7 +f 30/31/8 22/21/8 21/32/8 +f 20/18/9 28/33/9 27/34/9 +f 26/16/6 18/35/6 17/17/6 +f 18/35/10 28/33/10 19/36/10 +f 2/1/1 9/10/1 16/2/1 +f 6/4/2 13/37/2 12/5/2 +f 8/7/3 15/26/3 14/8/3 +f 10/11/4 11/38/4 12/39/4 +f 12/39/4 13/40/4 10/11/4 +f 13/40/4 14/12/4 10/11/4 +f 14/12/4 15/41/4 16/2/4 +f 16/2/4 9/10/4 14/12/4 +f 6/14/5 3/42/5 4/43/5 +f 4/43/5 1/44/5 2/1/5 +f 2/1/5 7/3/5 8/13/5 +f 8/13/5 5/45/5 6/14/5 +f 6/14/5 4/43/5 2/1/5 +f 24/15/1 31/30/1 26/16/1 +f 20/18/2 27/34/2 30/19/2 +f 22/21/3 29/46/3 32/22/3 +f 10/24/6 9/10/6 2/1/6 +f 8/7/7 7/3/7 16/2/7 +f 14/8/8 13/47/8 6/27/8 +f 4/28/9 3/6/9 12/5/9 +f 4/28/10 11/29/10 10/24/10 +f 24/15/7 23/23/7 32/22/7 +f 30/31/8 29/46/8 22/21/8 +f 20/18/9 19/36/9 28/33/9 +f 26/16/6 25/48/6 18/35/6 +f 18/35/10 25/48/10 28/33/10 +o Base +v -0.375000 0.000000 -0.375000 +v -0.375000 0.000000 0.375000 +v 0.375000 0.000000 -0.375000 +v 0.375000 0.000000 0.375000 +v -0.375000 0.250000 -0.375000 +v -0.375000 0.250000 0.375000 +v 0.375000 0.250000 -0.375000 +v 0.375000 0.250000 0.375000 +v 0.500000 0.375000 0.125000 +v 0.500000 0.375000 -0.125000 +v 0.500000 0.625000 -0.125000 +v 0.500000 0.625000 0.125000 +v 0.375000 0.625000 0.125000 +v 0.375000 0.625000 -0.125000 +v 0.375000 0.375000 0.125000 +v 0.375000 0.375000 -0.125000 +v -0.250000 0.250000 -0.187500 +v -0.187500 0.250000 -0.250000 +v -0.187500 0.250000 0.250000 +v -0.250000 0.250000 0.187500 +v 0.187500 0.250000 -0.250000 +v 0.250000 0.250000 -0.187500 +v 0.250000 0.250000 0.187500 +v 0.187500 0.250000 0.250000 +v 0.250000 0.750000 -0.187500 +v 0.187500 0.750000 -0.250000 +v -0.187500 0.750000 -0.250000 +v -0.250000 0.750000 -0.187500 +v -0.250000 0.750000 0.187500 +v -0.187500 0.750000 0.250000 +v 0.187500 0.750000 0.250000 +v 0.250000 0.750000 0.187500 +v 0.312500 0.687500 0.187500 +v 0.312500 0.687500 -0.187500 +v 0.312500 0.312500 0.187500 +v 0.312500 0.312500 -0.187500 +v 0.250000 0.687500 0.187500 +v 0.250000 0.687500 -0.187500 +v 0.250000 0.312500 0.187500 +v 0.250000 0.312500 -0.187500 +vt 0.290909 0.800000 +vt 0.072727 0.500000 +vt 0.290909 0.500000 +vt 0.072727 0.400000 +vt 0.290909 0.100000 +vt 0.290909 0.400000 +vt 0.290909 -0.000000 +vt 0.072727 0.100000 +vt 0.072727 -0.000000 +vt 0.000000 0.100000 +vt 0.000000 0.400000 +vt 0.363636 0.400000 +vt 0.363636 0.100000 +vt 0.618182 0.000000 +vt 0.509091 0.200000 +vt 0.509091 -0.000000 +vt 0.872727 0.000000 +vt 0.763636 0.200000 +vt 0.763636 0.000000 +vt 0.618182 0.200000 +vt 0.636364 0.225000 +vt 0.490909 0.375000 +vt 0.490909 -0.000000 +vt 0.381818 0.200000 +vt 0.381818 0.000000 +vt 0.909091 0.325000 +vt 0.927273 0.450000 +vt 0.909091 0.425000 +vt 0.363636 0.000000 +vt 0.363636 0.200000 +vt 0.745455 0.000000 +vt 0.636364 0.200000 +vt 0.636364 0.000000 +vt 0.872727 0.325000 +vt 0.800000 0.425000 +vt 0.800000 0.325000 +vt 0.909091 0.575000 +vt 0.872727 0.475000 +vt 0.909091 0.475000 +vt 0.909091 0.125000 +vt 0.872727 0.025000 +vt 0.909091 0.025000 +vt 0.909091 0.275000 +vt 0.872727 0.175000 +vt 0.909091 0.175000 +vt 0.927273 0.600000 +vt 0.927273 0.150000 +vt 0.927273 0.300000 +vt 0.945455 0.300000 +vt 0.945455 0.450000 +vt 0.945455 0.600000 +vt 0.927273 -0.000000 +vt 0.945455 0.150000 +vt 0.072727 0.800000 +vt 0.872727 0.200000 +vt 0.636364 0.375000 +vt 0.618182 0.400000 +vt 0.509091 0.400000 +vt 0.490909 0.225000 +vt 0.490909 0.200000 +vt 0.745455 0.200000 +vt 0.872727 0.425000 +vt 0.872727 0.575000 +vt 0.872727 0.125000 +vt 0.872727 0.275000 +vt 0.945455 -0.000000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 -0.0000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.7071 0.7071 0.0000 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 -0.7071 0.0000 +s off +f 35/49/11 34/50/11 33/51/11 +f 38/52/12 39/53/12 37/54/12 +f 35/55/13 40/56/13 36/57/13 +f 34/50/14 37/54/14 33/51/14 +f 36/58/15 38/52/15 34/59/15 +f 33/60/16 39/53/16 35/61/16 +f 54/62/13 64/63/13 55/64/13 +f 52/65/14 60/66/14 49/67/14 +f 57/68/12 58/69/12 62/70/12 +f 56/71/15 62/72/15 51/73/15 +f 46/74/17 65/75/17 45/76/17 +f 64/63/18 56/71/18 55/64/18 +f 52/77/19 62/72/19 61/78/19 +f 60/66/20 50/79/20 49/67/20 +f 54/62/21 58/80/21 57/68/21 +f 50/79/16 58/80/16 53/81/16 +f 43/82/13 41/83/13 42/84/13 +f 45/76/12 43/82/12 46/74/12 +f 47/85/15 44/86/15 45/87/15 +f 48/88/11 41/89/11 47/90/11 +f 46/91/16 42/92/16 48/93/16 +f 45/87/18 67/94/18 47/85/18 +f 47/90/22 68/95/22 48/88/22 +f 46/91/21 68/95/21 66/96/21 +f 68/95/16 70/97/16 66/96/16 +f 66/96/12 69/98/12 65/75/12 +f 65/75/15 71/99/15 67/94/15 +f 67/100/11 72/101/11 68/95/11 +f 35/49/11 36/102/11 34/50/11 +f 38/52/12 40/56/12 39/53/12 +f 35/55/13 39/53/13 40/56/13 +f 34/50/14 38/52/14 37/54/14 +f 36/58/15 40/56/15 38/52/15 +f 33/60/16 37/54/16 39/53/16 +f 54/62/13 57/68/13 64/63/13 +f 52/65/14 61/103/14 60/66/14 +f 58/69/12 59/104/12 60/105/12 +f 60/105/12 61/106/12 58/69/12 +f 61/106/12 62/70/12 58/69/12 +f 62/70/12 63/107/12 64/63/12 +f 64/63/12 57/68/12 62/70/12 +f 56/71/15 63/108/15 62/72/15 +f 46/74/17 66/96/17 65/75/17 +f 64/63/18 63/108/18 56/71/18 +f 52/77/19 51/73/19 62/72/19 +f 60/66/20 59/109/20 50/79/20 +f 54/62/21 53/81/21 58/80/21 +f 50/79/16 59/109/16 58/80/16 +f 43/82/13 44/110/13 41/83/13 +f 45/76/12 44/110/12 43/82/12 +f 47/85/15 41/111/15 44/86/15 +f 48/88/11 42/112/11 41/89/11 +f 46/91/16 43/113/16 42/92/16 +f 45/87/18 65/75/18 67/94/18 +f 47/90/22 67/100/22 68/95/22 +f 46/91/21 48/93/21 68/95/21 +f 68/95/16 72/101/16 70/97/16 +f 66/96/12 70/97/12 69/98/12 +f 65/75/15 69/98/15 71/99/15 +f 67/100/11 71/114/11 72/101/11 diff --git a/src/main/resources/assets/hbm/models/pile/pile_loader.obj b/src/main/resources/assets/hbm/models/pile/pile_loader.obj new file mode 100644 index 000000000..bf6e7c9d8 --- /dev/null +++ b/src/main/resources/assets/hbm/models/pile/pile_loader.obj @@ -0,0 +1,325 @@ +# Blender v2.79 (sub 0) OBJ File: 'pile_loader.blend' +# www.blender.org +o Rod +v 0.312500 0.500000 0.125000 +v 0.312500 0.437500 0.062500 +v 0.312500 0.437500 -0.062500 +v 0.312500 0.500000 -0.125000 +v 0.312500 0.687500 0.062500 +v 0.312500 0.625000 0.125000 +v 0.312500 0.625000 -0.125000 +v 0.312500 0.687500 -0.062500 +v -0.187500 0.625000 0.125000 +v -0.187500 0.687500 0.062500 +v -0.187500 0.687500 -0.062500 +v -0.187500 0.625000 -0.125000 +v -0.187500 0.437500 0.062500 +v -0.187500 0.500000 0.125000 +v -0.187500 0.500000 -0.125000 +v -0.187500 0.437500 -0.062500 +vt 0.833333 0.071429 +vt 1.000000 0.119048 +vt 0.833333 0.119048 +vt 0.833333 0.214286 +vt 1.000000 0.261905 +vt 0.833333 0.261905 +vt 0.833333 0.142857 +vt 1.000000 0.190476 +vt 0.833333 0.190476 +vt 0.833333 -0.000000 +vt 1.000000 0.047619 +vt 0.833333 0.047619 +vt 0.833333 0.285714 +vt 1.000000 0.071429 +vt 1.000000 0.142857 +vt 1.000000 0.214286 +vt 1.000000 -0.000000 +vt 1.000000 0.285714 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 0.3827 0.9239 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 0.9239 0.3827 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 -0.9239 -0.3827 +s 1 +f 4/1/1 12/2/2 7/3/2 +f 6/4/3 14/5/4 1/6/4 +f 8/7/5 10/8/6 5/9/6 +f 2/10/7 16/11/8 3/12/8 +f 14/5/4 2/13/7 1/6/4 +f 4/1/1 16/11/8 15/14/1 +f 8/7/5 12/2/2 11/15/5 +f 6/4/3 10/8/6 9/16/3 +f 4/1/1 15/14/1 12/2/2 +f 6/4/3 9/16/3 14/5/4 +f 8/7/5 11/15/5 10/8/6 +f 2/10/7 13/17/7 16/11/8 +f 14/5/4 13/18/7 2/13/7 +f 4/1/1 3/12/8 16/11/8 +f 8/7/5 7/3/2 12/2/2 +f 6/4/3 5/9/6 10/8/6 +o Lever +v -0.093750 0.468750 -0.312500 +v -0.093750 0.468750 -0.375000 +v -0.093750 0.531250 -0.375000 +v -0.093750 0.531250 -0.312500 +v -0.218750 0.531250 -0.375000 +v -0.218750 0.468750 -0.375000 +v -0.156250 0.531250 -0.312500 +v -0.156250 0.468750 -0.312500 +v -0.156250 0.468750 -0.250000 +v -0.156250 0.531250 -0.250000 +v -0.218750 0.468750 -0.250000 +v -0.218750 0.531250 -0.250000 +v -0.093750 0.562500 -0.406250 +v -0.093750 0.437500 -0.406250 +v -0.093750 0.562500 -0.281250 +v -0.093750 0.437500 -0.281250 +v 0.531250 0.562500 -0.281250 +v 0.531250 0.562500 -0.406250 +v 0.531250 0.437500 -0.406250 +v 0.531250 0.437500 -0.281250 +vt 0.979167 0.642857 +vt 0.958333 0.666667 +vt 0.958333 0.619048 +vt 0.937500 0.666667 +vt 0.937500 0.619048 +vt 0.937500 0.571429 +vt 0.916667 0.595238 +vt 0.916667 0.571429 +vt 0.958333 0.571429 +vt 0.979167 0.595238 +vt 1.000000 0.571429 +vt 0.979167 0.571429 +vt 0.916667 0.642857 +vt 0.916667 0.666667 +vt 1.000000 0.642857 +vt 0.979167 0.666667 +vt 0.958333 0.571429 +vt 0.916667 0.333333 +vt 0.958333 0.333333 +vt 0.833333 0.333333 +vt 0.875000 0.285714 +vt 0.875000 0.333333 +vt 0.875000 0.619048 +vt 0.833333 0.571429 +vt 0.875000 0.571429 +vt 1.000000 0.571429 +vt 1.000000 0.333333 +vt 0.916667 0.571429 +vt 1.000000 0.595238 +vt 1.000000 0.666667 +vt 0.833333 0.285714 +vt 0.833333 0.619048 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +s off +f 23/19/9 19/20/9 21/21/9 +f 21/21/10 18/22/10 22/23/10 +f 27/24/11 24/25/11 25/26/11 +f 28/27/9 23/28/9 21/21/9 +f 25/29/12 23/28/12 26/30/12 +f 28/27/13 22/23/13 27/24/13 +f 24/31/11 18/22/11 17/32/11 +f 24/33/14 20/34/14 23/19/14 +f 32/35/11 35/36/11 36/37/11 +f 33/38/12 35/39/12 34/40/12 +f 30/41/13 31/42/13 29/43/13 +f 31/44/14 36/37/14 33/45/14 +f 29/43/9 33/38/9 34/40/9 +f 29/43/10 35/36/10 30/46/10 +f 23/19/9 20/34/9 19/20/9 +f 21/21/10 19/20/10 18/22/10 +f 27/24/11 22/23/11 24/25/11 +f 28/27/9 26/30/9 23/28/9 +f 25/29/12 24/47/12 23/28/12 +f 28/27/13 21/21/13 22/23/13 +f 24/31/11 22/23/11 18/22/11 +f 24/33/14 17/48/14 20/34/14 +f 32/35/11 30/46/11 35/36/11 +f 33/38/12 36/49/12 35/39/12 +f 30/41/13 32/50/13 31/42/13 +f 31/44/14 32/35/14 36/37/14 +f 29/43/9 31/42/9 33/38/9 +f 29/43/10 34/40/10 35/36/10 +o Slider +v 0.437500 0.437500 0.125000 +v 0.437500 0.437500 -0.125000 +v 0.312500 0.437500 0.125000 +v 0.312500 0.437500 -0.125000 +v 0.437500 0.687500 0.125000 +v 0.437500 0.687500 -0.125000 +v 0.312500 0.687500 0.125000 +v 0.312500 0.687500 -0.125000 +vt 0.625000 0.761905 +vt 0.583333 0.857143 +vt 0.583333 0.761905 +vt 0.500000 0.761905 +vt 0.500000 0.857143 +vt 0.708333 0.857143 +vt 0.708333 0.761905 +vt 0.625000 0.857143 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +s off +f 44/51/15 41/52/15 42/53/15 +f 38/54/16 41/52/16 37/55/16 +f 39/56/17 44/51/17 40/57/17 +f 44/51/15 43/58/15 41/52/15 +f 38/54/16 42/53/16 41/52/16 +f 39/56/17 43/58/17 44/51/17 +o Loader +v -0.500000 0.875000 0.375000 +v -0.500000 0.125000 0.375000 +v -0.500000 0.875000 -0.375000 +v -0.500000 0.125000 -0.375000 +v -0.250000 0.875000 -0.375000 +v -0.250000 0.875000 0.375000 +v -0.250000 0.125000 0.375000 +v -0.250000 0.125000 -0.375000 +v -0.250000 0.687500 0.250000 +v -0.250000 0.750000 0.187500 +v -0.250000 0.250000 0.187500 +v -0.250000 0.312500 0.250000 +v -0.250000 0.750000 -0.187500 +v -0.250000 0.687500 -0.250000 +v -0.250000 0.312500 -0.250000 +v -0.250000 0.250000 -0.187500 +v 0.500000 0.687500 -0.250000 +v 0.437500 0.750000 -0.125000 +v 0.437500 0.750000 0.125000 +v 0.500000 0.687500 0.250000 +v 0.500000 0.312500 0.250000 +v 0.500000 0.250000 0.187500 +v 0.500000 0.250000 -0.187500 +v 0.500000 0.312500 -0.250000 +v 0.500000 0.750000 0.187500 +v 0.500000 0.750000 -0.187500 +v -0.187500 0.750000 0.125000 +v -0.187500 0.750000 -0.125000 +v -0.187500 0.437500 -0.125000 +v -0.187500 0.437500 0.125000 +v 0.437500 0.437500 0.125000 +v 0.437500 0.437500 -0.125000 +vt 0.750000 0.476190 +vt 0.500000 0.761905 +vt 0.500000 0.476190 +vt 0.500000 0.095238 +vt 0.750000 0.380952 +vt 0.500000 0.380952 +vt 0.750000 -0.000000 +vt 0.500000 -0.000000 +vt 0.833333 0.380952 +vt 0.750000 0.095238 +vt 0.833333 0.095238 +vt 0.416667 0.095238 +vt 0.416667 0.380952 +vt 0.416667 0.642857 +vt 0.166667 0.500000 +vt 0.416667 0.500000 +vt 0.416667 0.142857 +vt 0.166667 0.000000 +vt 0.416667 0.000000 +vt 0.416667 0.309524 +vt 0.166667 0.166667 +vt 0.416667 0.166667 +vt -0.000000 0.476190 +vt 0.020833 0.309524 +vt 0.166667 0.333333 +vt 0.166667 0.666667 +vt 0.416667 0.666667 +vt 0.416667 0.476190 +vt 0.166667 0.476190 +vt 0.166667 0.309524 +vt 0.187500 1.000000 +vt 0.395833 0.880952 +vt 0.395833 1.000000 +vt 0.395833 0.452381 +vt 0.187500 0.452381 +vt 0.187500 0.357143 +vt 0.416667 0.333333 +vt 0.395833 0.357143 +vt 0.187500 0.785714 +vt 0.395833 0.785714 +vt 0.500000 0.880952 +vt 0.500000 0.785714 +vt 0.083333 0.785714 +vt 0.187500 0.880952 +vt 0.083333 0.880952 +vt 0.395833 0.666667 +vt 0.187500 0.666667 +vt 0.750000 0.761905 +vt 0.166667 0.642857 +vt 0.166667 0.142857 +vt 0.145833 0.500000 +vt 0.020833 0.500000 +vt -0.000000 0.333333 +vt 0.145833 0.309524 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 -0.7071 +s off +f 47/59/18 46/60/18 45/61/18 +f 51/62/19 49/63/19 50/64/19 +f 48/65/20 51/62/20 46/66/20 +f 45/61/21 49/63/21 47/59/21 +f 47/67/22 52/68/22 48/69/22 +f 46/70/23 50/64/23 45/71/23 +f 56/72/23 64/73/23 53/74/23 +f 60/75/20 66/76/20 55/77/20 +f 58/78/22 68/79/22 59/80/22 +f 66/81/19 68/82/19 70/83/19 +f 66/84/24 56/72/24 55/85/24 +f 54/86/25 64/73/25 69/87/25 +f 68/79/26 60/75/26 59/80/26 +f 58/78/27 70/83/27 61/88/27 +f 63/89/22 74/90/22 71/91/22 +f 71/92/21 69/87/21 63/93/21 +f 62/94/21 57/95/21 72/96/21 +f 72/96/21 54/86/21 71/92/21 +f 63/93/21 70/83/21 62/94/21 +f 74/90/21 76/97/21 73/98/21 +f 71/99/19 73/98/19 72/100/19 +f 62/101/18 75/102/18 63/103/18 +f 72/104/23 76/97/23 62/105/23 +f 47/59/18 48/106/18 46/60/18 +f 51/62/19 52/68/19 49/63/19 +f 48/65/20 52/68/20 51/62/20 +f 45/61/21 50/64/21 49/63/21 +f 47/67/22 49/63/22 52/68/22 +f 46/70/23 51/62/23 50/64/23 +f 56/72/23 65/107/23 64/73/23 +f 60/75/20 67/108/20 66/76/20 +f 58/78/22 61/88/22 68/79/22 +f 70/83/19 69/87/19 64/109/19 +f 64/109/19 65/110/19 66/81/19 +f 66/81/19 67/111/19 68/82/19 +f 68/82/19 61/112/19 70/83/19 +f 70/83/19 64/109/19 66/81/19 +f 66/84/24 65/107/24 56/72/24 +f 54/86/25 53/74/25 64/73/25 +f 68/79/26 67/108/26 60/75/26 +f 58/78/27 57/95/27 70/83/27 +f 63/89/22 75/102/22 74/90/22 +f 71/92/21 54/86/21 69/87/21 +f 62/94/21 70/83/21 57/95/21 +f 72/96/21 57/95/21 54/86/21 +f 63/93/21 69/87/21 70/83/21 +f 74/90/21 75/102/21 76/97/21 +f 71/99/19 74/90/19 73/98/19 +f 62/101/18 76/97/18 75/102/18 +f 72/104/23 73/98/23 76/97/23 diff --git a/src/main/resources/assets/hbm/models/pile/pile_vent.obj b/src/main/resources/assets/hbm/models/pile/pile_vent.obj new file mode 100644 index 000000000..b13ceeb4b --- /dev/null +++ b/src/main/resources/assets/hbm/models/pile/pile_vent.obj @@ -0,0 +1,378 @@ +# Blender v2.79 (sub 0) OBJ File: 'pile_vent.blend' +# www.blender.org +o Fan +v 0.000000 0.812500 -0.031250 +v -0.022097 0.812500 -0.022097 +v -0.031250 0.812500 0.000000 +v -0.022097 0.812500 0.022097 +v 0.000000 0.812500 0.031250 +v 0.022097 0.812500 0.022097 +v 0.031250 0.812500 -0.000000 +v 0.022097 0.812500 -0.022097 +v -0.022097 0.875000 -0.022097 +v -0.000000 0.875000 -0.031250 +v -0.031250 0.875000 0.000000 +v -0.022097 0.875000 0.022097 +v -0.000000 0.875000 0.031250 +v 0.022097 0.875000 0.022097 +v 0.031250 0.875000 -0.000000 +v 0.022097 0.875000 -0.022097 +v -0.027063 0.859375 0.109375 +v 0.027063 0.828125 0.109375 +v -0.027063 0.859375 0.000000 +v 0.027063 0.828125 0.000000 +v -0.027063 0.828125 0.000000 +v 0.027063 0.859375 0.000000 +v -0.027063 0.828125 -0.109375 +v 0.027063 0.859375 -0.109375 +v 0.109375 0.859375 0.027063 +v 0.109375 0.828125 -0.027063 +v -0.000000 0.859375 0.027063 +v -0.000000 0.828125 -0.027063 +v -0.000000 0.828125 0.027063 +v -0.000000 0.859375 -0.027063 +v -0.109375 0.828125 0.027063 +v -0.109375 0.859375 -0.027063 +vt 0.048780 0.775000 +vt 0.146341 0.825000 +vt 0.048780 0.825000 +vt 0.012195 0.775314 +vt 0.020602 0.778883 +vt 0.024084 0.787500 +vt 0.146341 0.825000 +vt 0.048780 0.775000 +vt 0.146341 0.775000 +vt 0.048780 0.775000 +vt 0.146341 0.825000 +vt 0.048780 0.825000 +vt 0.146341 0.825000 +vt 0.048780 0.775000 +vt 0.146341 0.775000 +vt 0.146341 0.775000 +vt 0.020602 0.796117 +vt 0.012195 0.799686 +vt 0.003788 0.796117 +vt 0.000306 0.787500 +vt 0.003788 0.778883 +vt 0.048780 0.825000 +vt 0.146341 0.775000 +vt 0.048780 0.825000 +vt 0.146341 0.750000 +vt 0.121951 0.775000 +vt 0.121951 0.750000 +vt 0.073171 0.750000 +vt 0.097561 0.775000 +vt 0.073171 0.775000 +vt 0.024390 0.750000 +vt 0.048780 0.775000 +vt 0.024390 0.775000 +vt 0.195122 0.750000 +vt 0.170732 0.775000 +vt 0.170732 0.750000 +vt 0.097561 0.750000 +vt 0.048780 0.750000 +vt 0.000000 0.750000 +vt 0.000000 0.775000 +vt 0.146341 0.775000 +vt 0.195122 0.775000 +vn 0.5000 0.8660 0.0000 +vn 0.0000 1.0000 0.0000 +vn -0.5000 0.8660 0.0000 +vn -0.0000 0.8660 -0.5000 +vn 0.0000 0.8660 0.5000 +vn 0.0000 -0.0000 -1.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn 1.0000 0.0000 0.0000 +vn -0.7071 -0.0000 0.7071 +vn -0.0000 0.0000 1.0000 +vn -1.0000 -0.0000 0.0000 +vn -0.7071 -0.0000 -0.7071 +s off +f 18/1/1 19/2/1 17/3/1 +f 15/4/2 16/5/2 10/6/2 +f 22/7/3 23/8/3 21/9/3 +f 26/10/4 27/11/4 25/12/4 +f 30/13/5 31/14/5 29/15/5 +f 18/1/1 20/16/1 19/2/1 +f 10/6/2 9/17/2 11/18/2 +f 11/18/2 12/19/2 10/6/2 +f 12/19/2 13/20/2 10/6/2 +f 13/20/2 14/21/2 10/6/2 +f 14/21/2 15/4/2 10/6/2 +f 22/7/3 24/22/3 23/8/3 +f 26/10/4 28/23/4 27/11/4 +f 30/13/5 32/24/5 31/14/5 +s 1 +f 1/25/6 16/26/7 8/27/7 +f 6/28/8 15/29/9 14/30/8 +f 4/31/10 13/32/11 12/33/10 +f 3/34/12 9/35/13 2/36/13 +f 8/27/7 15/29/9 7/37/9 +f 5/38/11 14/30/8 13/32/11 +f 3/39/12 12/33/10 11/40/12 +f 2/36/13 10/41/6 1/25/6 +f 1/25/6 10/41/6 16/26/7 +f 6/28/8 7/37/9 15/29/9 +f 4/31/10 5/38/11 13/32/11 +f 3/34/12 11/42/12 9/35/13 +f 8/27/7 16/26/7 15/29/9 +f 5/38/11 6/28/8 14/30/8 +f 3/39/12 4/31/10 12/33/10 +f 2/36/13 9/35/13 10/41/6 +o Pipe +v -0.500000 0.875000 0.375000 +v -0.500000 0.125000 0.375000 +v -0.500000 0.875000 -0.375000 +v -0.500000 0.125000 -0.375000 +v -0.375000 0.875000 -0.375000 +v -0.375000 0.875000 0.375000 +v -0.375000 0.125000 0.375000 +v -0.375000 0.125000 -0.375000 +v 0.500000 0.750000 0.250000 +v 0.500000 0.250000 0.250000 +v 0.500000 0.750000 -0.250000 +v 0.500000 0.250000 -0.250000 +v 0.375000 0.750000 -0.250000 +v 0.375000 0.750000 0.250000 +v 0.375000 0.250000 0.250000 +v 0.375000 0.250000 -0.250000 +v 0.375000 0.687500 0.187500 +v 0.375000 0.312500 0.187500 +v 0.375000 0.687500 -0.187500 +v 0.375000 0.312500 -0.187500 +v 0.125000 0.687500 -0.187500 +v 0.125000 0.687500 0.187500 +v 0.125000 0.312500 0.187500 +v 0.125000 0.312500 -0.187500 +v 0.125000 0.750000 0.250000 +v 0.125000 0.250000 0.250000 +v 0.125000 0.750000 -0.250000 +v 0.125000 0.250000 -0.250000 +v -0.125000 0.750000 -0.250000 +v -0.125000 0.750000 0.250000 +v -0.125000 0.250000 0.250000 +v -0.125000 0.250000 -0.250000 +v -0.125000 0.687500 0.187500 +v -0.125000 0.312500 0.187500 +v -0.125000 0.687500 -0.187500 +v -0.125000 0.312500 -0.187500 +v -0.375000 0.687500 -0.187500 +v -0.375000 0.687500 0.187500 +v -0.375000 0.312500 0.187500 +v -0.375000 0.312500 -0.187500 +v -0.187500 0.687500 0.187500 +v 0.187500 0.687500 0.187500 +v -0.187500 0.687500 -0.187500 +v 0.187500 0.687500 -0.187500 +v -0.125000 0.875000 -0.125000 +v -0.125000 0.875000 0.125000 +v 0.125000 0.875000 0.125000 +v 0.125000 0.875000 -0.125000 +v -0.187500 0.875000 -0.187500 +v -0.187500 0.875000 0.187500 +v 0.187500 0.875000 0.187500 +v 0.187500 0.875000 -0.187500 +v -0.125000 0.812500 -0.125000 +v -0.125000 0.812500 0.125000 +v 0.125000 0.812500 0.125000 +v 0.125000 0.812500 -0.125000 +vt 0.487805 0.600000 +vt 0.512195 0.425000 +vt 0.512195 0.575000 +vt 0.951219 0.400000 +vt 0.658537 0.700000 +vt 0.658537 0.400000 +vt 0.658537 0.050000 +vt 0.951219 0.350000 +vt 0.658537 0.350000 +vt 1.000000 0.350000 +vt 0.951219 0.050000 +vt 1.000000 0.050000 +vt 0.609756 0.050000 +vt 0.609756 0.350000 +vt 0.951219 -0.000000 +vt 0.658537 0.000000 +vt 0.000000 0.600000 +vt 0.195122 0.400000 +vt 0.195122 0.600000 +vt 0.512195 0.775000 +vt 0.512195 0.625000 +vt 0.195122 -0.000000 +vt 0.243902 0.200000 +vt 0.195122 0.200000 +vt 0.243902 0.600000 +vt 0.243902 0.400000 +vt 0.243902 0.800000 +vt 0.195122 0.800000 +vt 0.512195 0.175000 +vt 0.487805 -0.000000 +vt 0.512195 0.025000 +vt 0.487805 0.400000 +vt 0.512195 0.225000 +vt 0.512195 0.375000 +vt 0.365854 0.625000 +vt 0.268293 0.775000 +vt 0.268293 0.625000 +vt 0.365854 0.025000 +vt 0.268293 0.175000 +vt 0.268293 0.025000 +vt 0.365854 0.425000 +vt 0.268293 0.575000 +vt 0.268293 0.425000 +vt 0.365854 0.225000 +vt 0.268293 0.375000 +vt 0.268293 0.225000 +vt 0.390244 -0.000000 +vt 0.487805 0.200000 +vt 0.390244 0.200000 +vt 0.390244 0.400000 +vt 0.390244 0.600000 +vt 0.487805 0.800000 +vt 0.390244 0.800000 +vt 0.609756 0.625000 +vt 0.609756 0.025000 +vt 0.609756 0.425000 +vt 0.609756 0.225000 +vt 0.024390 0.750000 +vt 0.121951 0.725000 +vt 0.121951 0.750000 +vt 0.829268 0.700000 +vt 0.682927 0.775000 +vt 0.682927 0.700000 +vt 0.682927 1.000000 +vt 0.829268 0.925000 +vt 0.829268 1.000000 +vt 0.609756 0.775000 +vt 0.682927 0.925000 +vt 0.609756 0.925000 +vt 0.902439 0.925000 +vt 0.829268 0.775000 +vt 0.902439 0.775000 +vt 0.804878 0.800000 +vt 0.804878 0.900000 +vt 0.707317 0.900000 +vt 0.707317 0.800000 +vt 0.024390 0.725000 +vt 0.121951 0.625000 +vt 0.000000 0.625000 +vt 0.000000 0.725000 +vt 0.146341 0.725000 +vt 0.146341 0.625000 +vt 0.121951 0.600000 +vt 0.024390 0.625000 +vt 0.024390 0.600000 +vt 0.365854 0.375000 +vt 0.365854 0.575000 +vt 0.365854 0.775000 +vt 0.365854 0.175000 +vt 0.951219 0.700000 +vt -0.000000 0.400000 +vt 0.243902 0.000000 +vt 0.609756 0.775000 +vt 0.609756 0.175000 +vt 0.609756 0.575000 +vt 0.609756 0.375000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +s off +f 62/43/14 67/44/14 65/45/14 +f 35/46/14 34/47/14 33/48/14 +f 39/49/15 37/50/15 38/51/15 +f 35/52/16 40/53/16 36/54/16 +f 34/55/17 38/51/17 33/56/17 +f 36/57/18 39/49/18 34/58/18 +f 33/48/19 37/50/19 35/46/19 +f 42/59/15 43/60/15 41/61/15 +f 66/62/14 62/43/14 65/63/14 +f 42/64/18 48/65/18 44/66/18 +f 43/60/19 46/67/19 41/61/19 +f 44/66/16 45/68/16 43/60/16 +f 41/61/17 47/69/17 42/70/17 +f 68/71/14 63/72/14 66/73/14 +f 61/74/14 68/75/14 67/76/14 +f 54/77/17 50/78/17 49/79/17 +f 55/80/18 52/81/18 50/82/18 +f 53/83/19 49/84/19 51/85/19 +f 56/86/16 51/87/16 52/88/16 +f 58/89/18 64/90/18 60/91/18 +f 59/92/19 62/43/19 57/93/19 +f 60/91/16 61/74/16 59/92/16 +f 57/93/17 63/94/17 58/95/17 +f 70/96/17 66/62/17 65/63/17 +f 71/97/18 68/71/18 66/73/18 +f 69/98/19 65/45/19 67/44/19 +f 72/99/16 67/76/16 68/75/16 +f 79/100/16 86/101/16 78/102/16 +f 75/103/16 84/104/16 76/105/16 +f 74/106/17 82/107/17 73/108/17 +f 76/109/15 83/110/15 74/111/15 +f 73/112/14 81/113/14 75/114/14 +f 77/115/19 82/107/19 78/116/19 +f 78/116/19 83/110/19 79/117/19 +f 79/117/19 84/104/19 80/118/19 +f 80/118/19 81/113/19 77/115/19 +f 87/119/19 85/120/19 86/101/19 +f 80/121/14 87/119/14 79/122/14 +f 78/123/15 85/120/15 77/124/15 +f 77/125/17 88/126/17 80/127/17 +f 56/86/15 59/92/15 53/128/15 +f 53/83/15 57/93/15 54/129/15 +f 54/77/15 58/95/15 55/130/15 +f 55/80/15 60/91/15 56/131/15 +f 48/65/14 51/87/14 45/68/14 +f 46/67/14 51/85/14 49/84/14 +f 46/67/14 50/78/14 47/69/14 +f 48/65/14 50/82/14 52/81/14 +f 62/43/14 61/74/14 67/44/14 +f 35/46/14 36/132/14 34/47/14 +f 39/49/15 40/53/15 37/50/15 +f 35/52/16 37/50/16 40/53/16 +f 34/55/17 39/49/17 38/51/17 +f 36/57/18 40/53/18 39/49/18 +f 33/48/19 38/51/19 37/50/19 +f 42/59/15 44/133/15 43/60/15 +f 66/62/14 63/94/14 62/43/14 +f 42/64/18 47/134/18 48/65/18 +f 43/60/19 45/68/19 46/67/19 +f 44/66/16 48/65/16 45/68/16 +f 41/61/17 46/67/17 47/69/17 +f 68/71/14 64/90/14 63/72/14 +f 61/74/14 64/90/14 68/75/14 +f 54/77/17 55/130/17 50/78/17 +f 55/80/18 56/131/18 52/81/18 +f 53/83/19 54/129/19 49/84/19 +f 56/86/16 53/128/16 51/87/16 +f 58/89/18 63/72/18 64/90/18 +f 59/92/19 61/74/19 62/43/19 +f 60/91/16 64/90/16 61/74/16 +f 57/93/17 62/43/17 63/94/17 +f 70/96/17 71/135/17 66/62/17 +f 71/97/18 72/136/18 68/71/18 +f 69/98/19 70/137/19 65/45/19 +f 72/99/16 69/138/16 67/76/16 +f 79/100/16 87/119/16 86/101/16 +f 75/103/16 81/113/16 84/104/16 +f 74/106/17 83/110/17 82/107/17 +f 76/109/15 84/104/15 83/110/15 +f 73/112/14 82/107/14 81/113/14 +f 77/115/19 81/113/19 82/107/19 +f 78/116/19 82/107/19 83/110/19 +f 79/117/19 83/110/19 84/104/19 +f 80/118/19 84/104/19 81/113/19 +f 87/119/19 88/126/19 85/120/19 +f 80/121/14 88/126/14 87/119/14 +f 78/123/15 86/101/15 85/120/15 +f 77/125/17 85/120/17 88/126/17 +f 56/86/15 60/91/15 59/92/15 +f 53/83/15 59/92/15 57/93/15 +f 54/77/15 57/93/15 58/95/15 +f 55/80/15 58/89/15 60/91/15 +f 48/65/14 52/88/14 51/87/14 +f 46/67/14 45/68/14 51/85/14 +f 46/67/14 49/79/14 50/78/14 +f 48/65/14 47/134/14 50/82/14 diff --git a/src/main/resources/assets/hbm/models/reactors/pile_control.obj b/src/main/resources/assets/hbm/models/reactors/pile_control.obj new file mode 100644 index 000000000..a7859bdb4 --- /dev/null +++ b/src/main/resources/assets/hbm/models/reactors/pile_control.obj @@ -0,0 +1,318 @@ +# Blender v2.79 (sub 0) OBJ File: 'pile_control.blend' +# www.blender.org +o Rod +v 0.187500 0.750000 -0.250000 +v 0.250000 0.750000 -0.187500 +v -0.250000 0.750000 -0.187500 +v -0.187500 0.750000 -0.250000 +v -0.187500 0.750000 0.250000 +v -0.250000 0.750000 0.187500 +v 0.250000 0.750000 0.187500 +v 0.187500 0.750000 0.250000 +v 0.250000 1.000000 -0.187500 +v 0.187500 1.000000 -0.250000 +v -0.187500 1.000000 -0.250000 +v -0.250000 1.000000 -0.187500 +v -0.250000 1.000000 0.187500 +v -0.187500 1.000000 0.250000 +v 0.187500 1.000000 0.250000 +v 0.250000 1.000000 0.187500 +v 0.187500 0.750000 -0.125000 +v 0.125000 0.750000 -0.187500 +v -0.125000 0.750000 -0.187500 +v -0.187500 0.750000 -0.125000 +v -0.187500 0.750000 0.125000 +v -0.125000 0.750000 0.187500 +v 0.125000 0.750000 0.187500 +v 0.187500 0.750000 0.125000 +v 0.125000 0.000000 -0.187500 +v 0.187500 0.000000 -0.125000 +v -0.187500 0.000000 -0.125000 +v -0.125000 0.000000 -0.187500 +v -0.125000 0.000000 0.187500 +v -0.187500 0.000000 0.125000 +v 0.187500 0.000000 0.125000 +v 0.125000 0.000000 0.187500 +vt 0.618182 0.600000 +vt 0.509091 0.700000 +vt 0.509091 0.600000 +vt 0.872727 0.600000 +vt 0.763636 0.700000 +vt 0.763636 0.600000 +vt 0.490909 0.600000 +vt 0.381818 0.700000 +vt 0.381818 0.600000 +vt 0.618182 0.700000 +vt 0.636364 0.725000 +vt 0.490909 0.875000 +vt 0.490909 0.575000 +vt 0.509091 0.400000 +vt 0.745455 1.000000 +vt 0.818182 0.700000 +vt 0.818182 1.000000 +vt 0.927273 1.000000 +vt 1.000000 0.700000 +vt 1.000000 1.000000 +vt 0.654545 1.000000 +vt 0.727273 0.700000 +vt 0.727273 1.000000 +vt 0.636364 0.700000 +vt 0.636364 0.600000 +vt 0.490909 0.700000 +vt 0.363636 0.600000 +vt 0.745455 0.600000 +vt 0.745455 0.700000 +vt 0.745455 0.700000 +vt 0.636364 0.700000 +vt 0.636364 1.000000 +vt 0.909091 0.700000 +vt 0.927273 0.700000 +vt 0.836364 1.000000 +vt 0.909091 1.000000 +vt 0.872727 0.700000 +vt 0.636364 0.875000 +vt 0.618182 0.900000 +vt 0.509091 0.900000 +vt 0.490909 0.725000 +vt 0.618182 0.400000 +vt 0.636364 0.425000 +vt 0.636364 0.575000 +vt 0.490909 0.425000 +vt 0.654545 0.700000 +vt 0.363636 0.700000 +vt 0.836364 0.700000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 -0.0000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 0.0000 -1.0000 +s off +f 2/1/1 16/2/1 7/3/1 +f 6/4/2 12/5/2 3/6/2 +f 8/7/3 14/8/3 5/9/3 +f 9/10/4 10/11/4 14/12/4 +f 2/1/5 8/13/5 6/14/5 +f 24/15/1 26/16/1 17/17/1 +f 20/18/2 30/19/2 21/20/2 +f 22/21/3 32/22/3 23/23/3 +f 10/24/6 2/1/6 1/25/6 +f 8/7/7 16/2/7 15/26/7 +f 14/8/8 6/27/8 5/9/8 +f 4/28/9 12/5/9 11/29/9 +f 4/28/10 10/24/10 1/25/10 +f 24/15/7 32/22/7 31/30/7 +f 30/31/8 22/21/8 21/32/8 +f 20/18/9 28/33/9 27/34/9 +f 26/16/6 18/35/6 17/17/6 +f 18/35/10 28/33/10 19/36/10 +f 2/1/1 9/10/1 16/2/1 +f 6/4/2 13/37/2 12/5/2 +f 8/7/3 15/26/3 14/8/3 +f 10/11/4 11/38/4 12/39/4 +f 12/39/4 13/40/4 10/11/4 +f 13/40/4 14/12/4 10/11/4 +f 14/12/4 15/41/4 16/2/4 +f 16/2/4 9/10/4 14/12/4 +f 6/14/5 3/42/5 4/43/5 +f 4/43/5 1/44/5 2/1/5 +f 2/1/5 7/3/5 8/13/5 +f 8/13/5 5/45/5 6/14/5 +f 6/14/5 4/43/5 2/1/5 +f 24/15/1 31/30/1 26/16/1 +f 20/18/2 27/34/2 30/19/2 +f 22/21/3 29/46/3 32/22/3 +f 10/24/6 9/10/6 2/1/6 +f 8/7/7 7/3/7 16/2/7 +f 14/8/8 13/47/8 6/27/8 +f 4/28/9 3/6/9 12/5/9 +f 4/28/10 11/29/10 10/24/10 +f 24/15/7 23/23/7 32/22/7 +f 30/31/8 29/46/8 22/21/8 +f 20/18/9 19/36/9 28/33/9 +f 26/16/6 25/48/6 18/35/6 +f 18/35/10 25/48/10 28/33/10 +o Base +v -0.375000 0.000000 -0.375000 +v -0.375000 0.000000 0.375000 +v 0.375000 0.000000 -0.375000 +v 0.375000 0.000000 0.375000 +v -0.375000 0.250000 -0.375000 +v -0.375000 0.250000 0.375000 +v 0.375000 0.250000 -0.375000 +v 0.375000 0.250000 0.375000 +v 0.500000 0.375000 0.125000 +v 0.500000 0.375000 -0.125000 +v 0.500000 0.625000 -0.125000 +v 0.500000 0.625000 0.125000 +v 0.375000 0.625000 0.125000 +v 0.375000 0.625000 -0.125000 +v 0.375000 0.375000 0.125000 +v 0.375000 0.375000 -0.125000 +v -0.250000 0.250000 -0.187500 +v -0.187500 0.250000 -0.250000 +v -0.187500 0.250000 0.250000 +v -0.250000 0.250000 0.187500 +v 0.187500 0.250000 -0.250000 +v 0.250000 0.250000 -0.187500 +v 0.250000 0.250000 0.187500 +v 0.187500 0.250000 0.250000 +v 0.250000 0.750000 -0.187500 +v 0.187500 0.750000 -0.250000 +v -0.187500 0.750000 -0.250000 +v -0.250000 0.750000 -0.187500 +v -0.250000 0.750000 0.187500 +v -0.187500 0.750000 0.250000 +v 0.187500 0.750000 0.250000 +v 0.250000 0.750000 0.187500 +v 0.312500 0.687500 0.187500 +v 0.312500 0.687500 -0.187500 +v 0.312500 0.312500 0.187500 +v 0.312500 0.312500 -0.187500 +v 0.250000 0.687500 0.187500 +v 0.250000 0.687500 -0.187500 +v 0.250000 0.312500 0.187500 +v 0.250000 0.312500 -0.187500 +vt 0.290909 0.800000 +vt 0.072727 0.500000 +vt 0.290909 0.500000 +vt 0.072727 0.400000 +vt 0.290909 0.100000 +vt 0.290909 0.400000 +vt 0.290909 -0.000000 +vt 0.072727 0.100000 +vt 0.072727 -0.000000 +vt 0.000000 0.100000 +vt 0.000000 0.400000 +vt 0.363636 0.400000 +vt 0.363636 0.100000 +vt 0.618182 0.000000 +vt 0.509091 0.200000 +vt 0.509091 -0.000000 +vt 0.872727 0.000000 +vt 0.763636 0.200000 +vt 0.763636 0.000000 +vt 0.618182 0.200000 +vt 0.636364 0.225000 +vt 0.490909 0.375000 +vt 0.490909 -0.000000 +vt 0.381818 0.200000 +vt 0.381818 0.000000 +vt 0.909091 0.325000 +vt 0.927273 0.450000 +vt 0.909091 0.425000 +vt 0.363636 0.000000 +vt 0.363636 0.200000 +vt 0.745455 0.000000 +vt 0.636364 0.200000 +vt 0.636364 0.000000 +vt 0.872727 0.325000 +vt 0.800000 0.425000 +vt 0.800000 0.325000 +vt 0.909091 0.575000 +vt 0.872727 0.475000 +vt 0.909091 0.475000 +vt 0.909091 0.125000 +vt 0.872727 0.025000 +vt 0.909091 0.025000 +vt 0.909091 0.275000 +vt 0.872727 0.175000 +vt 0.909091 0.175000 +vt 0.927273 0.600000 +vt 0.927273 0.150000 +vt 0.927273 0.300000 +vt 0.945455 0.300000 +vt 0.945455 0.450000 +vt 0.945455 0.600000 +vt 0.927273 -0.000000 +vt 0.945455 0.150000 +vt 0.072727 0.800000 +vt 0.872727 0.200000 +vt 0.636364 0.375000 +vt 0.618182 0.400000 +vt 0.509091 0.400000 +vt 0.490909 0.225000 +vt 0.490909 0.200000 +vt 0.745455 0.200000 +vt 0.872727 0.425000 +vt 0.872727 0.575000 +vt 0.872727 0.125000 +vt 0.872727 0.275000 +vt 0.945455 -0.000000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 -0.0000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.7071 0.7071 0.0000 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 -0.7071 0.0000 +s off +f 35/49/11 34/50/11 33/51/11 +f 38/52/12 39/53/12 37/54/12 +f 35/55/13 40/56/13 36/57/13 +f 34/50/14 37/54/14 33/51/14 +f 36/58/15 38/52/15 34/59/15 +f 33/60/16 39/53/16 35/61/16 +f 54/62/13 64/63/13 55/64/13 +f 52/65/14 60/66/14 49/67/14 +f 57/68/12 58/69/12 62/70/12 +f 56/71/15 62/72/15 51/73/15 +f 46/74/17 65/75/17 45/76/17 +f 64/63/18 56/71/18 55/64/18 +f 52/77/19 62/72/19 61/78/19 +f 60/66/20 50/79/20 49/67/20 +f 54/62/21 58/80/21 57/68/21 +f 50/79/16 58/80/16 53/81/16 +f 43/82/13 41/83/13 42/84/13 +f 45/76/12 43/82/12 46/74/12 +f 47/85/15 44/86/15 45/87/15 +f 48/88/11 41/89/11 47/90/11 +f 46/91/16 42/92/16 48/93/16 +f 45/87/18 67/94/18 47/85/18 +f 47/90/22 68/95/22 48/88/22 +f 46/91/21 68/95/21 66/96/21 +f 68/95/16 70/97/16 66/96/16 +f 66/96/12 69/98/12 65/75/12 +f 65/75/15 71/99/15 67/94/15 +f 67/100/11 72/101/11 68/95/11 +f 35/49/11 36/102/11 34/50/11 +f 38/52/12 40/56/12 39/53/12 +f 35/55/13 39/53/13 40/56/13 +f 34/50/14 38/52/14 37/54/14 +f 36/58/15 40/56/15 38/52/15 +f 33/60/16 37/54/16 39/53/16 +f 54/62/13 57/68/13 64/63/13 +f 52/65/14 61/103/14 60/66/14 +f 58/69/12 59/104/12 60/105/12 +f 60/105/12 61/106/12 58/69/12 +f 61/106/12 62/70/12 58/69/12 +f 62/70/12 63/107/12 64/63/12 +f 64/63/12 57/68/12 62/70/12 +f 56/71/15 63/108/15 62/72/15 +f 46/74/17 66/96/17 65/75/17 +f 64/63/18 63/108/18 56/71/18 +f 52/77/19 51/73/19 62/72/19 +f 60/66/20 59/109/20 50/79/20 +f 54/62/21 53/81/21 58/80/21 +f 50/79/16 59/109/16 58/80/16 +f 43/82/13 44/110/13 41/83/13 +f 45/76/12 44/110/12 43/82/12 +f 47/85/15 41/111/15 44/86/15 +f 48/88/11 42/112/11 41/89/11 +f 46/91/16 43/113/16 42/92/16 +f 45/87/18 65/75/18 67/94/18 +f 47/90/22 67/100/22 68/95/22 +f 46/91/21 48/93/21 68/95/21 +f 68/95/16 72/101/16 70/97/16 +f 66/96/12 70/97/12 69/98/12 +f 65/75/15 69/98/15 71/99/15 +f 67/100/11 71/114/11 72/101/11 diff --git a/src/main/resources/assets/hbm/models/reactors/pile_loader.obj b/src/main/resources/assets/hbm/models/reactors/pile_loader.obj new file mode 100644 index 000000000..9752a11f1 --- /dev/null +++ b/src/main/resources/assets/hbm/models/reactors/pile_loader.obj @@ -0,0 +1,324 @@ +# Blender v2.79 (sub 0) OBJ File: 'pile_loader.blend' +# www.blender.org +o Lever +v -0.093750 0.468750 -0.312500 +v -0.093750 0.468750 -0.375000 +v -0.093750 0.531250 -0.375000 +v -0.093750 0.531250 -0.312500 +v -0.218750 0.531250 -0.375000 +v -0.218750 0.468750 -0.375000 +v -0.156250 0.531250 -0.312500 +v -0.156250 0.468750 -0.312500 +v -0.156250 0.468750 -0.250000 +v -0.156250 0.531250 -0.250000 +v -0.218750 0.468750 -0.250000 +v -0.218750 0.531250 -0.250000 +v -0.093750 0.562500 -0.406250 +v -0.093750 0.437500 -0.406250 +v -0.093750 0.562500 -0.281250 +v -0.093750 0.437500 -0.281250 +v 0.531250 0.562500 -0.281250 +v 0.531250 0.562500 -0.406250 +v 0.531250 0.437500 -0.406250 +v 0.531250 0.437500 -0.281250 +vt 0.979167 0.642857 +vt 0.958333 0.666667 +vt 0.958333 0.619048 +vt 0.937500 0.666667 +vt 0.937500 0.619048 +vt 0.937500 0.571429 +vt 0.916667 0.595238 +vt 0.916667 0.571429 +vt 0.958333 0.571429 +vt 0.979167 0.595238 +vt 1.000000 0.571429 +vt 0.979167 0.571429 +vt 0.916667 0.642857 +vt 0.916667 0.666667 +vt 1.000000 0.642857 +vt 0.979167 0.666667 +vt 0.958333 0.571429 +vt 0.916667 0.333333 +vt 0.958333 0.333333 +vt 0.833333 0.333333 +vt 0.875000 0.285714 +vt 0.875000 0.333333 +vt 0.875000 0.619048 +vt 0.833333 0.571429 +vt 0.875000 0.571429 +vt 1.000000 0.571429 +vt 1.000000 0.333333 +vt 0.916667 0.571429 +vt 1.000000 0.595238 +vt 1.000000 0.666667 +vt 0.833333 0.285714 +vt 0.833333 0.619048 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +s off +f 7/1/1 3/2/1 5/3/1 +f 5/3/2 2/4/2 6/5/2 +f 11/6/3 8/7/3 9/8/3 +f 12/9/1 7/10/1 5/3/1 +f 9/11/4 7/10/4 10/12/4 +f 12/9/5 6/5/5 11/6/5 +f 8/13/3 2/4/3 1/14/3 +f 8/15/6 4/16/6 7/1/6 +f 16/17/3 19/18/3 20/19/3 +f 17/20/4 19/21/4 18/22/4 +f 14/23/5 15/24/5 13/25/5 +f 15/26/6 20/19/6 17/27/6 +f 13/25/1 17/20/1 18/22/1 +f 13/25/2 19/18/2 14/28/2 +f 7/1/1 4/16/1 3/2/1 +f 5/3/2 3/2/2 2/4/2 +f 11/6/3 6/5/3 8/7/3 +f 12/9/1 10/12/1 7/10/1 +f 9/11/4 8/29/4 7/10/4 +f 12/9/5 5/3/5 6/5/5 +f 8/13/3 6/5/3 2/4/3 +f 8/15/6 1/30/6 4/16/6 +f 16/17/3 14/28/3 19/18/3 +f 17/20/4 20/31/4 19/21/4 +f 14/23/5 16/32/5 15/24/5 +f 15/26/6 16/17/6 20/19/6 +f 13/25/1 15/24/1 17/20/1 +f 13/25/2 18/22/2 19/18/2 +o Slider +v 0.437500 0.437500 0.125000 +v 0.437500 0.437500 -0.125000 +v 0.312500 0.437500 0.125000 +v 0.312500 0.437500 -0.125000 +v 0.437500 0.687500 0.125000 +v 0.437500 0.687500 -0.125000 +v 0.312500 0.687500 0.125000 +v 0.312500 0.687500 -0.125000 +vt 0.625000 0.761905 +vt 0.583333 0.857143 +vt 0.583333 0.761905 +vt 0.500000 0.761905 +vt 0.500000 0.857143 +vt 0.708333 0.857143 +vt 0.708333 0.761905 +vt 0.625000 0.857143 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +s off +f 28/33/7 25/34/7 26/35/7 +f 22/36/8 25/34/8 21/37/8 +f 23/38/9 28/33/9 24/39/9 +f 28/33/7 27/40/7 25/34/7 +f 22/36/8 26/35/8 25/34/8 +f 23/38/9 27/40/9 28/33/9 +o Loader +v -0.500000 0.875000 0.375000 +v -0.500000 0.125000 0.375000 +v -0.500000 0.875000 -0.375000 +v -0.500000 0.125000 -0.375000 +v -0.250000 0.875000 -0.375000 +v -0.250000 0.875000 0.375000 +v -0.250000 0.125000 0.375000 +v -0.250000 0.125000 -0.375000 +v -0.250000 0.687500 0.250000 +v -0.250000 0.750000 0.187500 +v -0.250000 0.250000 0.187500 +v -0.250000 0.312500 0.250000 +v -0.250000 0.750000 -0.187500 +v -0.250000 0.687500 -0.250000 +v -0.250000 0.312500 -0.250000 +v -0.250000 0.250000 -0.187500 +v 0.500000 0.687500 -0.250000 +v 0.437500 0.750000 -0.125000 +v 0.437500 0.750000 0.125000 +v 0.500000 0.687500 0.250000 +v 0.500000 0.312500 0.250000 +v 0.500000 0.250000 0.187500 +v 0.500000 0.250000 -0.187500 +v 0.500000 0.312500 -0.250000 +v 0.500000 0.750000 0.187500 +v 0.500000 0.750000 -0.187500 +v -0.187500 0.750000 0.125000 +v -0.187500 0.750000 -0.125000 +v -0.187500 0.437500 -0.125000 +v -0.187500 0.437500 0.125000 +v 0.437500 0.437500 0.125000 +v 0.437500 0.437500 -0.125000 +v 0.312500 0.500000 0.125000 +v 0.312500 0.437500 0.062500 +v 0.312500 0.437500 -0.062500 +v 0.312500 0.500000 -0.125000 +v 0.312500 0.687500 0.062500 +v 0.312500 0.625000 0.125000 +v 0.312500 0.625000 -0.125000 +v 0.312500 0.687500 -0.062500 +v -0.187500 0.625000 0.125000 +v -0.187500 0.687500 0.062500 +v -0.187500 0.687500 -0.062500 +v -0.187500 0.625000 -0.125000 +v -0.187500 0.437500 0.062500 +v -0.187500 0.500000 0.125000 +v -0.187500 0.500000 -0.125000 +v -0.187500 0.437500 -0.062500 +vt 0.750000 0.476190 +vt 0.500000 0.761905 +vt 0.500000 0.476190 +vt 0.500000 0.095238 +vt 0.750000 0.380952 +vt 0.500000 0.380952 +vt 0.750000 -0.000000 +vt 0.500000 -0.000000 +vt 0.833333 0.380952 +vt 0.750000 0.095238 +vt 0.833333 0.095238 +vt 0.416667 0.095238 +vt 0.416667 0.380952 +vt 0.416667 0.642857 +vt 0.166667 0.500000 +vt 0.416667 0.500000 +vt 0.416667 0.142857 +vt 0.166667 0.000000 +vt 0.416667 0.000000 +vt 0.416667 0.309524 +vt 0.166667 0.166667 +vt 0.416667 0.166667 +vt -0.000000 0.476190 +vt 0.020833 0.309524 +vt 0.166667 0.333333 +vt 0.166667 0.666667 +vt 0.416667 0.666667 +vt 0.416667 0.476190 +vt 0.166667 0.476190 +vt 0.166667 0.309524 +vt 0.187500 1.000000 +vt 0.395833 0.880952 +vt 0.395833 1.000000 +vt 0.395833 0.452381 +vt 0.187500 0.452381 +vt 0.187500 0.357143 +vt 0.416667 0.333333 +vt 0.395833 0.357143 +vt 0.187500 0.785714 +vt 0.395833 0.785714 +vt 0.500000 0.880952 +vt 0.500000 0.785714 +vt 0.083333 0.785714 +vt 0.187500 0.880952 +vt 0.083333 0.880952 +vt 0.395833 0.666667 +vt 0.187500 0.666667 +vt 0.750000 0.761905 +vt 0.166667 0.642857 +vt 0.166667 0.142857 +vt 0.145833 0.500000 +vt 0.020833 0.500000 +vt -0.000000 0.333333 +vt 0.145833 0.309524 +vt 0.833333 0.071429 +vt 1.000000 0.119048 +vt 0.833333 0.119048 +vt 0.833333 0.214286 +vt 1.000000 0.261905 +vt 0.833333 0.261905 +vt 0.833333 0.142857 +vt 1.000000 0.190476 +vt 0.833333 0.190476 +vt 0.833333 -0.000000 +vt 1.000000 0.047619 +vt 0.833333 0.047619 +vt 0.833333 0.285714 +vt 1.000000 0.071429 +vt 1.000000 0.142857 +vt 1.000000 0.214286 +vt 1.000000 -0.000000 +vt 1.000000 0.285714 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 0.3827 0.9239 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 0.9239 0.3827 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 -0.9239 -0.3827 +s off +f 31/41/10 30/42/10 29/43/10 +f 35/44/11 33/45/11 34/46/11 +f 32/47/12 35/44/12 30/48/12 +f 29/43/13 33/45/13 31/41/13 +f 31/49/14 36/50/14 32/51/14 +f 30/52/15 34/46/15 29/53/15 +f 40/54/15 48/55/15 37/56/15 +f 44/57/12 50/58/12 39/59/12 +f 42/60/14 52/61/14 43/62/14 +f 50/63/11 52/64/11 54/65/11 +f 50/66/16 40/54/16 39/67/16 +f 38/68/17 48/55/17 53/69/17 +f 52/61/18 44/57/18 43/62/18 +f 42/60/19 54/65/19 45/70/19 +f 47/71/14 58/72/14 55/73/14 +f 55/74/13 53/69/13 47/75/13 +f 46/76/13 41/77/13 56/78/13 +f 56/78/13 38/68/13 55/74/13 +f 47/75/13 54/65/13 46/76/13 +f 58/72/13 60/79/13 57/80/13 +f 55/81/11 57/80/11 56/82/11 +f 46/83/10 59/84/10 47/85/10 +f 56/86/15 60/79/15 46/87/15 +f 31/41/10 32/88/10 30/42/10 +f 35/44/11 36/50/11 33/45/11 +f 32/47/12 36/50/12 35/44/12 +f 29/43/13 34/46/13 33/45/13 +f 31/49/14 33/45/14 36/50/14 +f 30/52/15 35/44/15 34/46/15 +f 40/54/15 49/89/15 48/55/15 +f 44/57/12 51/90/12 50/58/12 +f 42/60/14 45/70/14 52/61/14 +f 54/65/11 53/69/11 48/91/11 +f 48/91/11 49/92/11 50/63/11 +f 50/63/11 51/93/11 52/64/11 +f 52/64/11 45/94/11 54/65/11 +f 54/65/11 48/91/11 50/63/11 +f 50/66/16 49/89/16 40/54/16 +f 38/68/17 37/56/17 48/55/17 +f 52/61/18 51/90/18 44/57/18 +f 42/60/19 41/77/19 54/65/19 +f 47/71/14 59/84/14 58/72/14 +f 55/74/13 38/68/13 53/69/13 +f 46/76/13 54/65/13 41/77/13 +f 56/78/13 41/77/13 38/68/13 +f 47/75/13 53/69/13 54/65/13 +f 58/72/13 59/84/13 60/79/13 +f 55/81/11 58/72/11 57/80/11 +f 46/83/10 60/79/10 59/84/10 +f 56/86/15 57/80/15 60/79/15 +s 1 +f 64/95/20 72/96/21 67/97/21 +f 66/98/22 74/99/23 61/100/23 +f 68/101/24 70/102/25 65/103/25 +f 62/104/26 76/105/27 63/106/27 +f 74/99/23 62/107/26 61/100/23 +f 64/95/20 76/105/27 75/108/20 +f 68/101/24 72/96/21 71/109/24 +f 66/98/22 70/102/25 69/110/22 +f 64/95/20 75/108/20 72/96/21 +f 66/98/22 69/110/22 74/99/23 +f 68/101/24 71/109/24 70/102/25 +f 62/104/26 73/111/26 76/105/27 +f 74/99/23 73/112/26 62/107/26 +f 64/95/20 63/106/27 76/105/27 +f 68/101/24 67/97/21 72/96/21 +f 66/98/22 65/103/25 70/102/25 diff --git a/src/main/resources/assets/hbm/models/reactors/pile_vent.obj b/src/main/resources/assets/hbm/models/reactors/pile_vent.obj new file mode 100644 index 000000000..b13ceeb4b --- /dev/null +++ b/src/main/resources/assets/hbm/models/reactors/pile_vent.obj @@ -0,0 +1,378 @@ +# Blender v2.79 (sub 0) OBJ File: 'pile_vent.blend' +# www.blender.org +o Fan +v 0.000000 0.812500 -0.031250 +v -0.022097 0.812500 -0.022097 +v -0.031250 0.812500 0.000000 +v -0.022097 0.812500 0.022097 +v 0.000000 0.812500 0.031250 +v 0.022097 0.812500 0.022097 +v 0.031250 0.812500 -0.000000 +v 0.022097 0.812500 -0.022097 +v -0.022097 0.875000 -0.022097 +v -0.000000 0.875000 -0.031250 +v -0.031250 0.875000 0.000000 +v -0.022097 0.875000 0.022097 +v -0.000000 0.875000 0.031250 +v 0.022097 0.875000 0.022097 +v 0.031250 0.875000 -0.000000 +v 0.022097 0.875000 -0.022097 +v -0.027063 0.859375 0.109375 +v 0.027063 0.828125 0.109375 +v -0.027063 0.859375 0.000000 +v 0.027063 0.828125 0.000000 +v -0.027063 0.828125 0.000000 +v 0.027063 0.859375 0.000000 +v -0.027063 0.828125 -0.109375 +v 0.027063 0.859375 -0.109375 +v 0.109375 0.859375 0.027063 +v 0.109375 0.828125 -0.027063 +v -0.000000 0.859375 0.027063 +v -0.000000 0.828125 -0.027063 +v -0.000000 0.828125 0.027063 +v -0.000000 0.859375 -0.027063 +v -0.109375 0.828125 0.027063 +v -0.109375 0.859375 -0.027063 +vt 0.048780 0.775000 +vt 0.146341 0.825000 +vt 0.048780 0.825000 +vt 0.012195 0.775314 +vt 0.020602 0.778883 +vt 0.024084 0.787500 +vt 0.146341 0.825000 +vt 0.048780 0.775000 +vt 0.146341 0.775000 +vt 0.048780 0.775000 +vt 0.146341 0.825000 +vt 0.048780 0.825000 +vt 0.146341 0.825000 +vt 0.048780 0.775000 +vt 0.146341 0.775000 +vt 0.146341 0.775000 +vt 0.020602 0.796117 +vt 0.012195 0.799686 +vt 0.003788 0.796117 +vt 0.000306 0.787500 +vt 0.003788 0.778883 +vt 0.048780 0.825000 +vt 0.146341 0.775000 +vt 0.048780 0.825000 +vt 0.146341 0.750000 +vt 0.121951 0.775000 +vt 0.121951 0.750000 +vt 0.073171 0.750000 +vt 0.097561 0.775000 +vt 0.073171 0.775000 +vt 0.024390 0.750000 +vt 0.048780 0.775000 +vt 0.024390 0.775000 +vt 0.195122 0.750000 +vt 0.170732 0.775000 +vt 0.170732 0.750000 +vt 0.097561 0.750000 +vt 0.048780 0.750000 +vt 0.000000 0.750000 +vt 0.000000 0.775000 +vt 0.146341 0.775000 +vt 0.195122 0.775000 +vn 0.5000 0.8660 0.0000 +vn 0.0000 1.0000 0.0000 +vn -0.5000 0.8660 0.0000 +vn -0.0000 0.8660 -0.5000 +vn 0.0000 0.8660 0.5000 +vn 0.0000 -0.0000 -1.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn 1.0000 0.0000 0.0000 +vn -0.7071 -0.0000 0.7071 +vn -0.0000 0.0000 1.0000 +vn -1.0000 -0.0000 0.0000 +vn -0.7071 -0.0000 -0.7071 +s off +f 18/1/1 19/2/1 17/3/1 +f 15/4/2 16/5/2 10/6/2 +f 22/7/3 23/8/3 21/9/3 +f 26/10/4 27/11/4 25/12/4 +f 30/13/5 31/14/5 29/15/5 +f 18/1/1 20/16/1 19/2/1 +f 10/6/2 9/17/2 11/18/2 +f 11/18/2 12/19/2 10/6/2 +f 12/19/2 13/20/2 10/6/2 +f 13/20/2 14/21/2 10/6/2 +f 14/21/2 15/4/2 10/6/2 +f 22/7/3 24/22/3 23/8/3 +f 26/10/4 28/23/4 27/11/4 +f 30/13/5 32/24/5 31/14/5 +s 1 +f 1/25/6 16/26/7 8/27/7 +f 6/28/8 15/29/9 14/30/8 +f 4/31/10 13/32/11 12/33/10 +f 3/34/12 9/35/13 2/36/13 +f 8/27/7 15/29/9 7/37/9 +f 5/38/11 14/30/8 13/32/11 +f 3/39/12 12/33/10 11/40/12 +f 2/36/13 10/41/6 1/25/6 +f 1/25/6 10/41/6 16/26/7 +f 6/28/8 7/37/9 15/29/9 +f 4/31/10 5/38/11 13/32/11 +f 3/34/12 11/42/12 9/35/13 +f 8/27/7 16/26/7 15/29/9 +f 5/38/11 6/28/8 14/30/8 +f 3/39/12 4/31/10 12/33/10 +f 2/36/13 9/35/13 10/41/6 +o Pipe +v -0.500000 0.875000 0.375000 +v -0.500000 0.125000 0.375000 +v -0.500000 0.875000 -0.375000 +v -0.500000 0.125000 -0.375000 +v -0.375000 0.875000 -0.375000 +v -0.375000 0.875000 0.375000 +v -0.375000 0.125000 0.375000 +v -0.375000 0.125000 -0.375000 +v 0.500000 0.750000 0.250000 +v 0.500000 0.250000 0.250000 +v 0.500000 0.750000 -0.250000 +v 0.500000 0.250000 -0.250000 +v 0.375000 0.750000 -0.250000 +v 0.375000 0.750000 0.250000 +v 0.375000 0.250000 0.250000 +v 0.375000 0.250000 -0.250000 +v 0.375000 0.687500 0.187500 +v 0.375000 0.312500 0.187500 +v 0.375000 0.687500 -0.187500 +v 0.375000 0.312500 -0.187500 +v 0.125000 0.687500 -0.187500 +v 0.125000 0.687500 0.187500 +v 0.125000 0.312500 0.187500 +v 0.125000 0.312500 -0.187500 +v 0.125000 0.750000 0.250000 +v 0.125000 0.250000 0.250000 +v 0.125000 0.750000 -0.250000 +v 0.125000 0.250000 -0.250000 +v -0.125000 0.750000 -0.250000 +v -0.125000 0.750000 0.250000 +v -0.125000 0.250000 0.250000 +v -0.125000 0.250000 -0.250000 +v -0.125000 0.687500 0.187500 +v -0.125000 0.312500 0.187500 +v -0.125000 0.687500 -0.187500 +v -0.125000 0.312500 -0.187500 +v -0.375000 0.687500 -0.187500 +v -0.375000 0.687500 0.187500 +v -0.375000 0.312500 0.187500 +v -0.375000 0.312500 -0.187500 +v -0.187500 0.687500 0.187500 +v 0.187500 0.687500 0.187500 +v -0.187500 0.687500 -0.187500 +v 0.187500 0.687500 -0.187500 +v -0.125000 0.875000 -0.125000 +v -0.125000 0.875000 0.125000 +v 0.125000 0.875000 0.125000 +v 0.125000 0.875000 -0.125000 +v -0.187500 0.875000 -0.187500 +v -0.187500 0.875000 0.187500 +v 0.187500 0.875000 0.187500 +v 0.187500 0.875000 -0.187500 +v -0.125000 0.812500 -0.125000 +v -0.125000 0.812500 0.125000 +v 0.125000 0.812500 0.125000 +v 0.125000 0.812500 -0.125000 +vt 0.487805 0.600000 +vt 0.512195 0.425000 +vt 0.512195 0.575000 +vt 0.951219 0.400000 +vt 0.658537 0.700000 +vt 0.658537 0.400000 +vt 0.658537 0.050000 +vt 0.951219 0.350000 +vt 0.658537 0.350000 +vt 1.000000 0.350000 +vt 0.951219 0.050000 +vt 1.000000 0.050000 +vt 0.609756 0.050000 +vt 0.609756 0.350000 +vt 0.951219 -0.000000 +vt 0.658537 0.000000 +vt 0.000000 0.600000 +vt 0.195122 0.400000 +vt 0.195122 0.600000 +vt 0.512195 0.775000 +vt 0.512195 0.625000 +vt 0.195122 -0.000000 +vt 0.243902 0.200000 +vt 0.195122 0.200000 +vt 0.243902 0.600000 +vt 0.243902 0.400000 +vt 0.243902 0.800000 +vt 0.195122 0.800000 +vt 0.512195 0.175000 +vt 0.487805 -0.000000 +vt 0.512195 0.025000 +vt 0.487805 0.400000 +vt 0.512195 0.225000 +vt 0.512195 0.375000 +vt 0.365854 0.625000 +vt 0.268293 0.775000 +vt 0.268293 0.625000 +vt 0.365854 0.025000 +vt 0.268293 0.175000 +vt 0.268293 0.025000 +vt 0.365854 0.425000 +vt 0.268293 0.575000 +vt 0.268293 0.425000 +vt 0.365854 0.225000 +vt 0.268293 0.375000 +vt 0.268293 0.225000 +vt 0.390244 -0.000000 +vt 0.487805 0.200000 +vt 0.390244 0.200000 +vt 0.390244 0.400000 +vt 0.390244 0.600000 +vt 0.487805 0.800000 +vt 0.390244 0.800000 +vt 0.609756 0.625000 +vt 0.609756 0.025000 +vt 0.609756 0.425000 +vt 0.609756 0.225000 +vt 0.024390 0.750000 +vt 0.121951 0.725000 +vt 0.121951 0.750000 +vt 0.829268 0.700000 +vt 0.682927 0.775000 +vt 0.682927 0.700000 +vt 0.682927 1.000000 +vt 0.829268 0.925000 +vt 0.829268 1.000000 +vt 0.609756 0.775000 +vt 0.682927 0.925000 +vt 0.609756 0.925000 +vt 0.902439 0.925000 +vt 0.829268 0.775000 +vt 0.902439 0.775000 +vt 0.804878 0.800000 +vt 0.804878 0.900000 +vt 0.707317 0.900000 +vt 0.707317 0.800000 +vt 0.024390 0.725000 +vt 0.121951 0.625000 +vt 0.000000 0.625000 +vt 0.000000 0.725000 +vt 0.146341 0.725000 +vt 0.146341 0.625000 +vt 0.121951 0.600000 +vt 0.024390 0.625000 +vt 0.024390 0.600000 +vt 0.365854 0.375000 +vt 0.365854 0.575000 +vt 0.365854 0.775000 +vt 0.365854 0.175000 +vt 0.951219 0.700000 +vt -0.000000 0.400000 +vt 0.243902 0.000000 +vt 0.609756 0.775000 +vt 0.609756 0.175000 +vt 0.609756 0.575000 +vt 0.609756 0.375000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +s off +f 62/43/14 67/44/14 65/45/14 +f 35/46/14 34/47/14 33/48/14 +f 39/49/15 37/50/15 38/51/15 +f 35/52/16 40/53/16 36/54/16 +f 34/55/17 38/51/17 33/56/17 +f 36/57/18 39/49/18 34/58/18 +f 33/48/19 37/50/19 35/46/19 +f 42/59/15 43/60/15 41/61/15 +f 66/62/14 62/43/14 65/63/14 +f 42/64/18 48/65/18 44/66/18 +f 43/60/19 46/67/19 41/61/19 +f 44/66/16 45/68/16 43/60/16 +f 41/61/17 47/69/17 42/70/17 +f 68/71/14 63/72/14 66/73/14 +f 61/74/14 68/75/14 67/76/14 +f 54/77/17 50/78/17 49/79/17 +f 55/80/18 52/81/18 50/82/18 +f 53/83/19 49/84/19 51/85/19 +f 56/86/16 51/87/16 52/88/16 +f 58/89/18 64/90/18 60/91/18 +f 59/92/19 62/43/19 57/93/19 +f 60/91/16 61/74/16 59/92/16 +f 57/93/17 63/94/17 58/95/17 +f 70/96/17 66/62/17 65/63/17 +f 71/97/18 68/71/18 66/73/18 +f 69/98/19 65/45/19 67/44/19 +f 72/99/16 67/76/16 68/75/16 +f 79/100/16 86/101/16 78/102/16 +f 75/103/16 84/104/16 76/105/16 +f 74/106/17 82/107/17 73/108/17 +f 76/109/15 83/110/15 74/111/15 +f 73/112/14 81/113/14 75/114/14 +f 77/115/19 82/107/19 78/116/19 +f 78/116/19 83/110/19 79/117/19 +f 79/117/19 84/104/19 80/118/19 +f 80/118/19 81/113/19 77/115/19 +f 87/119/19 85/120/19 86/101/19 +f 80/121/14 87/119/14 79/122/14 +f 78/123/15 85/120/15 77/124/15 +f 77/125/17 88/126/17 80/127/17 +f 56/86/15 59/92/15 53/128/15 +f 53/83/15 57/93/15 54/129/15 +f 54/77/15 58/95/15 55/130/15 +f 55/80/15 60/91/15 56/131/15 +f 48/65/14 51/87/14 45/68/14 +f 46/67/14 51/85/14 49/84/14 +f 46/67/14 50/78/14 47/69/14 +f 48/65/14 50/82/14 52/81/14 +f 62/43/14 61/74/14 67/44/14 +f 35/46/14 36/132/14 34/47/14 +f 39/49/15 40/53/15 37/50/15 +f 35/52/16 37/50/16 40/53/16 +f 34/55/17 39/49/17 38/51/17 +f 36/57/18 40/53/18 39/49/18 +f 33/48/19 38/51/19 37/50/19 +f 42/59/15 44/133/15 43/60/15 +f 66/62/14 63/94/14 62/43/14 +f 42/64/18 47/134/18 48/65/18 +f 43/60/19 45/68/19 46/67/19 +f 44/66/16 48/65/16 45/68/16 +f 41/61/17 46/67/17 47/69/17 +f 68/71/14 64/90/14 63/72/14 +f 61/74/14 64/90/14 68/75/14 +f 54/77/17 55/130/17 50/78/17 +f 55/80/18 56/131/18 52/81/18 +f 53/83/19 54/129/19 49/84/19 +f 56/86/16 53/128/16 51/87/16 +f 58/89/18 63/72/18 64/90/18 +f 59/92/19 61/74/19 62/43/19 +f 60/91/16 64/90/16 61/74/16 +f 57/93/17 62/43/17 63/94/17 +f 70/96/17 71/135/17 66/62/17 +f 71/97/18 72/136/18 68/71/18 +f 69/98/19 70/137/19 65/45/19 +f 72/99/16 69/138/16 67/76/16 +f 79/100/16 87/119/16 86/101/16 +f 75/103/16 81/113/16 84/104/16 +f 74/106/17 83/110/17 82/107/17 +f 76/109/15 84/104/15 83/110/15 +f 73/112/14 82/107/14 81/113/14 +f 77/115/19 81/113/19 82/107/19 +f 78/116/19 82/107/19 83/110/19 +f 79/117/19 83/110/19 84/104/19 +f 80/118/19 84/104/19 81/113/19 +f 87/119/19 88/126/19 85/120/19 +f 80/121/14 88/126/14 87/119/14 +f 78/123/15 86/101/15 85/120/15 +f 77/125/17 85/120/17 88/126/17 +f 56/86/15 60/91/15 59/92/15 +f 53/83/15 59/92/15 57/93/15 +f 54/77/15 57/93/15 58/95/15 +f 55/80/15 58/89/15 60/91/15 +f 48/65/14 52/88/14 51/87/14 +f 46/67/14 45/68/14 51/85/14 +f 46/67/14 49/79/14 50/78/14 +f 48/65/14 47/134/14 50/82/14 diff --git a/src/main/resources/assets/hbm/textures/blocks/barrel_antimatter.png b/src/main/resources/assets/hbm/textures/blocks/barrel_antimatter.png index ed6b74202..87e09bb1d 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/barrel_antimatter.png and b/src/main/resources/assets/hbm/textures/blocks/barrel_antimatter.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/barrel_plastic.png b/src/main/resources/assets/hbm/textures/blocks/barrel_plastic.png index 675349a39..75a4b4ed4 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/barrel_plastic.png and b/src/main/resources/assets/hbm/textures/blocks/barrel_plastic.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/barrel_steel.png b/src/main/resources/assets/hbm/textures/blocks/barrel_steel.png index 590b2e695..a2fd66866 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/barrel_steel.png and b/src/main/resources/assets/hbm/textures/blocks/barrel_steel.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/barrel_tcalloy.png b/src/main/resources/assets/hbm/textures/blocks/barrel_tcalloy.png index 3a74dfde7..5f5fee71f 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/barrel_tcalloy.png and b/src/main/resources/assets/hbm/textures/blocks/barrel_tcalloy.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/brick_forgotten_bw.png b/src/main/resources/assets/hbm/textures/blocks/brick_forgotten_bw.png new file mode 100644 index 000000000..7365aff7d Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/brick_forgotten_bw.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/brick_forgotten_bw_top.png b/src/main/resources/assets/hbm/textures/blocks/brick_forgotten_bw_top.png new file mode 100644 index 000000000..7591bb89a Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/brick_forgotten_bw_top.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/brick_light.png b/src/main/resources/assets/hbm/textures/blocks/brick_light.png index 083fa23d5..2ef48619b 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/brick_light.png and b/src/main/resources/assets/hbm/textures/blocks/brick_light.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/hopper_turbo_side.png b/src/main/resources/assets/hbm/textures/blocks/hopper_turbo_side.png new file mode 100644 index 000000000..0704d875b Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/hopper_turbo_side.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_bottom.png b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_bottom.png index b56c4a73c..fad5a9e3c 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_bottom.png and b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_bottom.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_front_off.png b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_front_off.png index 529db01dd..2864bfb00 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_front_off.png and b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_front_off.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_front_on.png b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_front_on.png index 614e746ff..24bcd75cd 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_front_on.png and b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_front_on.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_side.png b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_side.png index 000023383..5015a4155 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_side.png and b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_side.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_top.png b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_top.png index 693fbb48b..1f3ed1caa 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_top.png and b/src/main/resources/assets/hbm/textures/blocks/machine_electric_furnace_top.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_block.png b/src/main/resources/assets/hbm/textures/blocks/pile_block.png new file mode 100644 index 000000000..d4aefb1d1 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_block.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_block_control_top_ct.png b/src/main/resources/assets/hbm/textures/blocks/pile_block_control_top_ct.png new file mode 100644 index 000000000..267661c46 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_block_control_top_ct.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_block_core_ct.png b/src/main/resources/assets/hbm/textures/blocks/pile_block_core_ct.png new file mode 100644 index 000000000..f78e3eba3 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_block_core_ct.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_block_ct.png b/src/main/resources/assets/hbm/textures/blocks/pile_block_ct.png new file mode 100644 index 000000000..4970feaa5 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_block_ct.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_block_input_ct.png b/src/main/resources/assets/hbm/textures/blocks/pile_block_input_ct.png new file mode 100644 index 000000000..26124e645 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_block_input_ct.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_block_output_ct.png b/src/main/resources/assets/hbm/textures/blocks/pile_block_output_ct.png new file mode 100644 index 000000000..c4095696e Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_block_output_ct.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_block_top.png b/src/main/resources/assets/hbm/textures/blocks/pile_block_top.png new file mode 100644 index 000000000..d4aefb1d1 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_block_top.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_block_top_ct.png b/src/main/resources/assets/hbm/textures/blocks/pile_block_top_ct.png new file mode 100644 index 000000000..1fdde2fcb Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_block_top_ct.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_brick.png b/src/main/resources/assets/hbm/textures/blocks/pile_brick.png new file mode 100644 index 000000000..eb368b05e Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_brick.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_brick_side.png b/src/main/resources/assets/hbm/textures/blocks/pile_brick_side.png new file mode 100644 index 000000000..d9b1fe0d0 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_brick_side.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_brick_top.png b/src/main/resources/assets/hbm/textures/blocks/pile_brick_top.png new file mode 100644 index 000000000..bd1c077f2 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_brick_top.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_wood.png b/src/main/resources/assets/hbm/textures/blocks/pile_wood.png new file mode 100644 index 000000000..6208c40f4 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_wood.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_wood_planks.png b/src/main/resources/assets/hbm/textures/blocks/pile_wood_planks.png new file mode 100644 index 000000000..262060858 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_wood_planks.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pile_wood_planks_lr.png b/src/main/resources/assets/hbm/textures/blocks/pile_wood_planks_lr.png new file mode 100644 index 000000000..663d91dc7 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pile_wood_planks_lr.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/nullstone_demo_0_wip.png b/src/main/resources/assets/hbm/textures/blocks/playground/nullstone_demo_0_wip.png new file mode 100644 index 000000000..ffe7ed29d Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/playground/nullstone_demo_0_wip.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/nullstone_demo_1_wip.png b/src/main/resources/assets/hbm/textures/blocks/playground/nullstone_demo_1_wip.png new file mode 100644 index 000000000..0b0c7c81a Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/playground/nullstone_demo_1_wip.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_storage_clutter.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_storage_clutter.png index 9f14c454d..8c501bb77 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/pneumatic_storage_clutter.png and b/src/main/resources/assets/hbm/textures/blocks/pneumatic_storage_clutter.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_storage_exporter.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_storage_exporter.png new file mode 100644 index 000000000..90013ac56 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pneumatic_storage_exporter.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_storage_importer.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_storage_importer.png new file mode 100644 index 000000000..f6ce9b8c2 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pneumatic_storage_importer.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/waste_trinitite.0.png b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite.0.png new file mode 100644 index 000000000..9e4868251 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite.0.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/waste_trinitite.1.png b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite.1.png new file mode 100644 index 000000000..b09ee977b Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite.1.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/waste_trinitite.2.png b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite.2.png new file mode 100644 index 000000000..5dc352720 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite.2.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/waste_trinitite.3.png b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite.3.png new file mode 100644 index 000000000..07f93c3f3 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite.3.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/waste_trinitite_red.0.png b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite_red.0.png new file mode 100644 index 000000000..4e5717677 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite_red.0.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/waste_trinitite_red.1.png b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite_red.1.png new file mode 100644 index 000000000..b7c38c244 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite_red.1.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/waste_trinitite_red.2.png b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite_red.2.png new file mode 100644 index 000000000..d188b5bc2 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite_red.2.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/waste_trinitite_red.3.png b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite_red.3.png new file mode 100644 index 000000000..14794a073 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/waste_trinitite_red.3.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/GUIElectricFurnace.png b/src/main/resources/assets/hbm/textures/gui/GUIElectricFurnace.png deleted file mode 100644 index 8fc1e10be..000000000 Binary files a/src/main/resources/assets/hbm/textures/gui/GUIElectricFurnace.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/gui/generators/gui_turbinegas.png b/src/main/resources/assets/hbm/textures/gui/generators/gui_turbinegas.png index ce9519616..b8f12a72e 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/generators/gui_turbinegas.png and b/src/main/resources/assets/hbm/textures/gui/generators/gui_turbinegas.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/gui_epress.png b/src/main/resources/assets/hbm/textures/gui/gui_epress.png deleted file mode 100644 index d920d4447..000000000 Binary files a/src/main/resources/assets/hbm/textures/gui/gui_epress.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/gui/gui_press.png b/src/main/resources/assets/hbm/textures/gui/gui_press.png deleted file mode 100644 index 5e98f8a54..000000000 Binary files a/src/main/resources/assets/hbm/textures/gui/gui_press.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/gui/gui_rtg.png b/src/main/resources/assets/hbm/textures/gui/gui_rtg.png index ce99dbca6..1c2dfac5f 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/gui_rtg.png and b/src/main/resources/assets/hbm/textures/gui/gui_rtg.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/gui_shredder.png b/src/main/resources/assets/hbm/textures/gui/gui_shredder.png deleted file mode 100644 index 19b774c76..000000000 Binary files a/src/main/resources/assets/hbm/textures/gui/gui_shredder.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/gui/gui_slab.png b/src/main/resources/assets/hbm/textures/gui/gui_slab.png index 02dab2c1c..ed8dd2e76 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/gui_slab.png and b/src/main/resources/assets/hbm/textures/gui/gui_slab.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_cyclotron.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_cyclotron.png index 9da387278..6657da233 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/machine/gui_cyclotron.png and b/src/main/resources/assets/hbm/textures/gui/machine/gui_cyclotron.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_rtty_autocal.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_rtty_autocal.png index 9f4121524..cb5fa04e3 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/machine/gui_rtty_autocal.png and b/src/main/resources/assets/hbm/textures/gui/machine/gui_rtty_autocal.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_well.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_well.png index 6ceaf8805..f1b1d0ddb 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/machine/gui_well.png and b/src/main/resources/assets/hbm/textures/gui/machine/gui_well.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png index 3ce1bc32c..b5435bfee 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png and b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_electric_furnace.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_electric_furnace.png new file mode 100644 index 000000000..ef12cb413 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/processing/gui_electric_furnace.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_electric_press.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_electric_press.png new file mode 100644 index 000000000..8575156ba Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/processing/gui_electric_press.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_press.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_press.png new file mode 100644 index 000000000..a9e7ed166 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/processing/gui_press.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_shredder.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_shredder.png new file mode 100644 index 000000000..7e6757850 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/processing/gui_shredder.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_supercomputer.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_supercomputer.png new file mode 100644 index 000000000..2703b7dc1 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/processing/gui_supercomputer.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_breeder.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_breeder.png index 4510d8219..eb981107d 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_breeder.png and b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_breeder.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_klystron.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_klystron.png index d26b84bdb..b1da9e774 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_klystron.png and b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_klystron.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_torus.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_torus.png index 48b84ef87..edd94f252 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_torus.png and b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_torus.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_zirnox.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_zirnox.png index 1ab6e7b76..eab674089 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/reactors/gui_zirnox.png and b/src/main/resources/assets/hbm/textures/gui/reactors/gui_zirnox.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_access.png b/src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_access.png index f8c4929a4..5538e63a3 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_access.png and b/src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_access.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_exporter.png b/src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_exporter.png new file mode 100644 index 000000000..cf6e1177c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_exporter.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_importer.png b/src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_importer.png new file mode 100644 index 000000000..f9797f9fc Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_importer.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_mono.png b/src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_mono.png new file mode 100644 index 000000000..443b32d5f Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_mono.png differ diff --git a/src/main/resources/assets/hbm/textures/items/drives.png b/src/main/resources/assets/hbm/textures/items/drives.png new file mode 100644 index 000000000..c1fb4d94a Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/drives.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ingot_dura_steel.png b/src/main/resources/assets/hbm/textures/items/ingot_dura_steel.png index 362a60315..c47a66393 100644 Binary files a/src/main/resources/assets/hbm/textures/items/ingot_dura_steel.png and b/src/main/resources/assets/hbm/textures/items/ingot_dura_steel.png differ diff --git a/src/main/resources/assets/hbm/textures/items/pile_rod.nu.png b/src/main/resources/assets/hbm/textures/items/pile_rod.nu.png new file mode 100644 index 000000000..cfffc6c48 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/pile_rod.nu.png differ diff --git a/src/main/resources/assets/hbm/textures/items/pile_rod.po210be.png b/src/main/resources/assets/hbm/textures/items/pile_rod.po210be.png new file mode 100644 index 000000000..f31b52872 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/pile_rod.po210be.png differ diff --git a/src/main/resources/assets/hbm/textures/items/pile_rod.pu239.png b/src/main/resources/assets/hbm/textures/items/pile_rod.pu239.png new file mode 100644 index 000000000..086bf4d11 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/pile_rod.pu239.png differ diff --git a/src/main/resources/assets/hbm/textures/items/pile_rod.ra226be.png b/src/main/resources/assets/hbm/textures/items/pile_rod.ra226be.png new file mode 100644 index 000000000..279b682f2 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/pile_rod.ra226be.png differ diff --git a/src/main/resources/assets/hbm/textures/items/pile_rod.rgp.png b/src/main/resources/assets/hbm/textures/items/pile_rod.rgp.png new file mode 100644 index 000000000..f2913d0a4 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/pile_rod.rgp.png differ diff --git a/src/main/resources/assets/hbm/textures/items/pile_rod.waste.png b/src/main/resources/assets/hbm/textures/items/pile_rod.waste.png new file mode 100644 index 000000000..0527da466 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/pile_rod.waste.png differ diff --git a/src/main/resources/assets/hbm/textures/items/pile_rod.zr.png b/src/main/resources/assets/hbm/textures/items/pile_rod.zr.png new file mode 100644 index 000000000..d37b23242 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/pile_rod.zr.png differ diff --git a/src/main/resources/assets/hbm/textures/items/plate_dura_steel.png b/src/main/resources/assets/hbm/textures/items/plate_dura_steel.png index a33109caf..68b0b8330 100644 Binary files a/src/main/resources/assets/hbm/textures/items/plate_dura_steel.png and b/src/main/resources/assets/hbm/textures/items/plate_dura_steel.png differ diff --git a/src/main/resources/assets/hbm/textures/models/bombs/mine_fat.png b/src/main/resources/assets/hbm/textures/models/bombs/mine_fat.png new file mode 100644 index 000000000..32004aaef Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/bombs/mine_fat.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron.png index 6cfaeb008..35ccca0c4 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/cyclotron.png and b/src/main/resources/assets/hbm/textures/models/machines/cyclotron.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_ashes.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_ashes.png index 7d9155fc8..ae3417eb4 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_ashes.png and b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_ashes.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_ashes_filled.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_ashes_filled.png index 280bb3609..0f15363f8 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_ashes_filled.png and b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_ashes_filled.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_book.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_book.png index fdc1e0824..b16030be7 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_book.png and b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_book.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_book_filled.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_book_filled.png index 504ec0d78..58954e691 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_book_filled.png and b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_book_filled.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_coin.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_coin.png index 4da1affd6..f5ae44ba3 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_coin.png and b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_coin.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_coin_filled.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_coin_filled.png index 78d2697e4..7af3192d3 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_coin_filled.png and b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_coin_filled.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_gavel.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_gavel.png index 1ce8cceff..336afbcac 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_gavel.png and b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_gavel.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_gavel_filled.png b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_gavel_filled.png index 5c4878509..f95a61ff5 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/cyclotron_gavel_filled.png and b/src/main/resources/assets/hbm/textures/models/machines/cyclotron_gavel_filled.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/supercomputer.png b/src/main/resources/assets/hbm/textures/models/machines/supercomputer.png new file mode 100644 index 000000000..6ee264221 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/machines/supercomputer.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/supercomputer_scan.png b/src/main/resources/assets/hbm/textures/models/machines/supercomputer_scan.png new file mode 100644 index 000000000..afc9d0439 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/machines/supercomputer_scan.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/thresher.png b/src/main/resources/assets/hbm/textures/models/machines/thresher.png index a8eb43a0d..122d7ed73 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/thresher.png and b/src/main/resources/assets/hbm/textures/models/machines/thresher.png differ diff --git a/src/main/resources/assets/hbm/textures/models/mine_fat.png b/src/main/resources/assets/hbm/textures/models/mine_fat.png deleted file mode 100644 index 04a249f07..000000000 Binary files a/src/main/resources/assets/hbm/textures/models/mine_fat.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/models/pheodoors/cargo_door.png b/src/main/resources/assets/hbm/textures/models/pheodoors/cargo_door.png new file mode 100644 index 000000000..f9846e51b Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/pheodoors/cargo_door.png differ diff --git a/src/main/resources/assets/hbm/textures/models/pheodoors/secure_door_black.png b/src/main/resources/assets/hbm/textures/models/pheodoors/secure_door_black.png index 4018c6972..cc9100cf0 100644 Binary files a/src/main/resources/assets/hbm/textures/models/pheodoors/secure_door_black.png and b/src/main/resources/assets/hbm/textures/models/pheodoors/secure_door_black.png differ diff --git a/src/main/resources/assets/hbm/textures/models/pheodoors/vehicle_door.png b/src/main/resources/assets/hbm/textures/models/pheodoors/vehicle_door.png index 5c14f2174..edaf23269 100644 Binary files a/src/main/resources/assets/hbm/textures/models/pheodoors/vehicle_door.png and b/src/main/resources/assets/hbm/textures/models/pheodoors/vehicle_door.png differ diff --git a/src/main/resources/assets/hbm/textures/models/pile/pile_control.png b/src/main/resources/assets/hbm/textures/models/pile/pile_control.png new file mode 100644 index 000000000..a07e4a0eb Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/pile/pile_control.png differ diff --git a/src/main/resources/assets/hbm/textures/models/pile/pile_loader.png b/src/main/resources/assets/hbm/textures/models/pile/pile_loader.png new file mode 100644 index 000000000..68c127b43 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/pile/pile_loader.png differ diff --git a/src/main/resources/assets/hbm/textures/models/pile/pile_vent.png b/src/main/resources/assets/hbm/textures/models/pile/pile_vent.png new file mode 100644 index 000000000..72fc50809 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/pile/pile_vent.png differ