From b52107b2c30604c793900c5c103216e05814f156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=81=93=E7=A5=9E=20=E9=A6=B4=E5=AD=90?= Date: Wed, 4 Feb 2026 15:24:02 +0800 Subject: [PATCH 01/11] 2k26.2.4 --- src/main/resources/assets/hbm/lang/zh_CN.lang | 119 ++++++++++-------- 1 file changed, 64 insertions(+), 55 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index e59a7a9de..fac82e790 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -1806,44 +1806,42 @@ item.ballistite.name=混合无烟火药 item.bandaid.name=邦迪创可贴 item.bathwater.name=有毒肥皂水 item.bathwater_mk2.name=有毒肥皂水(马香味) -item.battery_advanced.name=高级电池 -item.battery_advanced_cell.name=高级电池组 -item.battery_advanced_cell_12.name=十二联高级电池组 -item.battery_advanced_cell_4.name=四联高级电池组 +item.battery_advanced.name=高级电池(遗留) +item.battery_advanced_cell.name=高级电池组(遗留) +item.battery_advanced_cell_12.name=十二联高级电池组(遗留) +item.battery_advanced_cell_4.name=四联高级电池组(遗留) item.battery_creative.name=无限电池 -item.battery_generic.name=电池 -item.battery_lithium.name=锂电池 -item.battery_lithium_cell.name=锂电池组 -item.battery_lithium_cell_3.name=三联锂电池组 -item.battery_lithium_cell_6.name=六联锂电池组 +item.battery_generic.name=电池(遗留) +item.battery_lithium.name=锂电池(遗留) +item.battery_lithium_cell.name=锂电池组(遗留) +item.battery_lithium_cell_3.name=三联锂电池组(遗留) +item.battery_lithium_cell_6.name=六联锂电池组(遗留) item.battery_potato.name=马铃薯电池 item.battery_potatos.name=马铃薯OS -item.battery_red_cell.name=红石电池组 -item.battery_red_cell_24.name=二十四联红石电池组 -item.battery_red_cell_6.name=六联红石电池组 -item.battery_sc_americium.name=自充电 镅-241电池 -item.battery_sc_gold.name=自充电 金-198电池 -item.battery_sc_lead.name=自充电 铅-209电池 -item.battery_sc_plutonium.name=自充电 钚-238电池 -item.battery_sc_polonium.name=自充电 钋-210电池 -item.battery_sc_technetium.name=自充电 锝-98电池 -item.battery_sc_uranium.name=自充电 铀-238电池 -item.battery_schrabidium.name=Sa326电池 -item.battery_schrabidium_cell.name=Sa326电池组 -item.battery_schrabidium_cell_2.name=双联Sa326电池组 -item.battery_schrabidium_cell_4.name=四联Sa326电池组 +item.battery_red_cell.name=红石电池组(遗留) +item.battery_red_cell_24.name=二十四联红石电池组(遗留) +item.battery_red_cell_6.name=六联红石电池组(遗留) +item.battery_sc_americium.name=自充电 镅-241电池(遗留) +item.battery_sc_gold.name=自充电 金-198电池(遗留) +item.battery_sc_lead.name=自充电 铅-209电池(遗留) +item.battery_sc_plutonium.name=自充电 钚-238电池(遗留) +item.battery_sc_polonium.name=自充电 钋-210电池(遗留) +item.battery_sc_technetium.name=自充电 锝-99电池(遗留) +item.battery_sc_uranium.name=自充电 铀-238电池(遗留) +item.battery_schrabidium.name=Sa326电池(遗留) +item.battery_schrabidium_cell.name=Sa326电池组(遗留) +item.battery_schrabidium_cell_2.name=双联Sa326电池组(遗留) +item.battery_schrabidium_cell_4.name=四联Sa326电池组(遗留) item.battery_spark.name=Spark电池 -item.battery_spark_cell_100.name=Spark神秘储能电池组 -item.battery_spark_cell_1000.name=Spark神秘物质能量空间 -item.battery_spark_cell_10000.name=Spark时空晶体 -item.battery_spark_cell_25.name=Spark神秘汽车电池 -item.battery_spark_cell_2500.name=Spark神秘迪拉克之海 -item.battery_spark_cell_6.name=Spark电池组 -item.battery_spark_cell_power.name=Spark反物理储能装置 -item.battery_steam.name=蒸汽动力储能罐 -item.battery_steam_large.name=大型蒸汽动力储能罐 -item.battery_su.name=SU-电池 -item.battery_su_l.name=大型SU-电池 +item.battery_spark_cell_100.name=Spark神秘储能电池组(遗留) +item.battery_spark_cell_1000.name=Spark神秘物质能量空间(遗留) +item.battery_spark_cell_10000.name=Spark时空晶体(遗留) +item.battery_spark_cell_25.name=Spark神秘汽车电池(遗留) +item.battery_spark_cell_2500.name=Spark神秘迪拉克之海(遗留) +item.battery_spark_cell_6.name=Spark电池组(遗留) +item.battery_spark_cell_power.name=Spark反物理储能装置(遗留) +item.battery_steam.name=蒸汽动力储能罐(遗留) +item.battery_steam_large.name=大型蒸汽动力储能罐(遗留) item.battery_trixite.name=杂牌Spark电池 item.bdcl.name=BDCL item.bedrock_ore.grade.base.name=%s基岩矿石 @@ -2073,8 +2071,6 @@ item.canned_fried.name=炸鸡罐头 item.canned_fried.desc=甚至罐头都是油炸的! item.canned_hotdogs.name=热狗罐头 item.canned_hotdogs.desc=不要与冷猫混淆。 -item.canned_jizz.name=FlimFlam工业牌?马奶罐头 -item.canned_jizz.desc=等等什么—— item.canned_kerosene.name=煤油罐头 item.canned_kerosene.desc=想象一下这句俏皮的台词。 item.canned_leftovers.name=剩菜罐头 @@ -4516,16 +4512,10 @@ shape.wireFine=线 shape.wireDense=致密线 shape.wiresDense=致密线 soundCategory.ntmMachines=NTM机器 - -tile.absorber.name=辐射吸收器 OLD -tile.absorber_green.name=高级辐射吸收器 OLD -tile.absorber_pink.name=精英辐射吸收器 OLD -tile.absorber_red.name=增强型辐射吸收器 OLD - -tile.rad_absorber.base.name=辐射吸收器 -tile.rad_absorber.red.name=高级辐射吸收器 -tile.rad_absorber.green.name=精英辐射吸收器 -tile.rad_absorber.pink.name=增强型辐射吸收器 +tile.absorber.name=辐射吸收器(遗留) +tile.absorber_green.name=高级辐射吸收器(遗留) +tile.absorber_pink.name=精英辐射吸收器(遗留) +tile.absorber_red.name=增强型辐射吸收器(遗留) tile.acid_block.name=酸 tile.ams_base.name=AMS基座 [开发中] tile.ams_emitter.name=AMS发射极 [开发中] @@ -5155,7 +5145,7 @@ tile.machine_bat9000.name=巨尻-9000 储罐 tile.machine_battery.name=蓄电池(遗留) tile.machine_battery_potato.name=马铃薯电池组(遗留) tile.machine_boiler.name=大型锅炉 -tile.machine_boiler.desc=可以烧水或加热油的大型锅炉$需要外部热源$传热速率:ΔT*0.01 TU/T +tile.machine_boiler.desc=可以烧水或加热油的大型锅炉$需要外部热源$传热速率:ΔT*0.1 TU/T tile.machine_boiler_electric_off.name=电锅炉 tile.machine_boiler_electric_on.name=电锅炉 tile.machine_boiler_off.name=锅炉 @@ -5169,7 +5159,7 @@ tile.machine_chungus.desc=效率: 85%% tile.machine_coal_off.name=火力发电机 tile.machine_coal_on.name=火力发电机 tile.machine_coker.name=焦化装置 -tile.machine_coker.desc=炼焦,并产生各类流体副产品$需要外部热源$传热速率:ΔT*0.025 TU/T +tile.machine_coker.desc=炼焦,并产生各类流体副产品$需要外部热源$传热速率:ΔT*0.25 TU/T tile.machine_combine_factory.name=CMB炼钢炉 tile.machine_combustion_engine.name=工业内燃机 tile.machine_compressor.name=压缩机 @@ -5217,7 +5207,7 @@ tile.machine_hephaestus.name=地热换热器 tile.machine_icf_press.name=ICF燃料靶丸制造器 tile.machine_icf_press.desc=用于装填ICF靶丸$左侧燃料槽接收顶面/底面输入,右侧燃料槽接收侧面输入$μ子胶囊和空靶丸可从任意面输入 tile.machine_industrial_boiler.name=工业锅炉 -tile.machine_industrial_boiler.desc=可以烧水或加热油的大型锅炉$需要外部热源$传热率:ΔT*0.01 TU/T$不会爆炸 +tile.machine_industrial_boiler.desc=可以烧水或加热油的大型锅炉$需要外部热源$传热率:ΔT*0.1 TU/T$不会爆炸 tile.machine_industrial_generator.name=工业发电机 tile.machine_keyforge.name=锁匠桌 tile.machine_large_turbine.name=工业汽轮机 @@ -5522,16 +5512,15 @@ tile.rbmk_control_auto.name=RBMK反应堆自动控制棒 tile.rbmk_control_mod.name=RBMK反应堆慢化控制棒 tile.rbmk_crane_console.name=RBMK起重机控制台 tile.rbmk_heater.name=RBMK流体加热器 -tile.rbmk_heatex.name=RBMK换热器 tile.rbmk_loader.name=RBMK反应堆蒸汽导出器 tile.rbmk_loader.desc=让RBMK反应堆在底部同时拥有水接口和蒸汽接口$在RBMK蒸汽管道下方放置水管道,再在下面放置蒸汽导出器$最后将管道连接至蒸汽导出器即可 tile.rbmk_moderator.name=RBMK反应堆石墨慢化剂 tile.rbmk_outgasser.name=RBMK反应堆辐照通道 tile.rbmk_reflector.name=RBMK反应堆碳化钨中子反射器 -tile.rbmk_rod.name=RBMK反应堆燃料棒 -tile.rbmk_rod_mod.name=RBMK反应堆慢化燃料棒 -tile.rbmk_rod_reasim.name=RBMK反应堆燃料棒(ReaSim) -tile.rbmk_rod_reasim_mod.name=RBMK反应堆慢化燃料棒(ReaSim) +tile.rbmk_rod.name=RBMK反应堆燃料通道 +tile.rbmk_rod_mod.name=RBMK反应堆慢化燃料通道 +tile.rbmk_rod_reasim.name=RBMK反应堆燃料通道(ReaSim) +tile.rbmk_rod_reasim_mod.name=RBMK反应堆慢化燃料通道(ReaSim) tile.rbmk_steam_inlet.name=RBMK ReaSim进水口 tile.rbmk_steam_inlet.desc=当启用ReaSim锅炉时向反应堆内输入水$从侧面连接至反应堆结构 tile.rbmk_steam_outlet.name=RBMK ReaSim蒸汽出口 @@ -5906,7 +5895,7 @@ item.gun_g3_a3.name=G3A3 item.gun_g3_infiltrator.name=渗透者 item.gun_greasegun_m3.name=M3 item.gun_heavy_revolver_scoped.name=带有准镜的.44马格南转轮手枪 -item.gun_henry_lincoln.name=林肯的中继器 +item.gun_henry_lincoln.name=林肯拉杆枪 item.gun_maresleg_short.name=马腿 item.gun_mas36.name=南方之星 item.gun_uzi_richter.name=里氏 @@ -6407,3 +6396,23 @@ hbm.key.qmaw=打开QMAW tile.fluid_counter_valve.name=带计数器的流体阀门 tile.fluid_counter_valve.desc=注意流体网络中的回流 tile.machine_battery_redd.name=FEnSU +item.battery_sc.am241.name=镅-241自充电电池 +item.battery_sc.au198.name=金-198自充电电池 +item.battery_sc.co60.name=钴-60自充电电池 +item.battery_sc.empty.name=空自充电电池 +item.battery_sc.pb209.name=铅-209自充电电池 +item.battery_sc.po210.name=钋-210自充电电池 +item.battery_sc.pu238.name=钚-238自充电电池 +item.battery_sc.ra226.name=镭-226自充电电池 +item.battery_sc.tc99.name=锝-99自充电电池 +item.battery_sc.waste.name=核废料自充电电池 +item.canned_slime.name=凝结马黏液 +item.canned_slime.desc=现添加更多骨髓! +tile.rad_absorber.base.name=辐射吸收器 +tile.rad_absorber.green.name=高级辐射吸收器 +tile.rad_absorber.pink.name=精英辐射吸收器 +tile.rad_absorber.red.name=增强型辐射吸收器 +tile.fusion_klystron_creative.name=创造速调管 +tile.fusion_klystron_creative.desc=提供无限的速调管能量。 +tile.machine_battery_socket.desc=让电池物品能够直接接入电网。$同时也具有导线的功能,所有接口都连接至同一个能量网络。 +tile.machine_crucible.desc=传热速率:ΔT*0.25 TU/T From a288d4b1bf93b0e6069848c34d4fe10567c355ff Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 4 Feb 2026 21:45:19 +0100 Subject: [PATCH 02/11] so like when did this happen --- .../java/com/hbm/tileentity/DoorDecl.java | 55 +++++++++++-------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/DoorDecl.java b/src/main/java/com/hbm/tileentity/DoorDecl.java index 0d34129eb..a5f24e673 100644 --- a/src/main/java/com/hbm/tileentity/DoorDecl.java +++ b/src/main/java/com/hbm/tileentity/DoorDecl.java @@ -172,13 +172,18 @@ public abstract class DoorDecl { return null; } - public final ResourceLocation[] skins = new ResourceLocation[] { - ResourceManager.pheo_fire_door_tex, - ResourceManager.pheo_fire_door_black_tex, - ResourceManager.pheo_fire_door_orange_tex, - }; + public ResourceLocation[] skins; - @Override public ResourceLocation[] getSEDNASkins() { return skins; } + @SideOnly(Side.CLIENT) @Override public ResourceLocation[] getSEDNASkins() { + if(skins == null) skins = new ResourceLocation[] { + ResourceManager.pheo_fire_door_tex, + ResourceManager.pheo_fire_door_black_tex, + ResourceManager.pheo_fire_door_orange_tex, + }; + return skins; + } + + public int getSkinCount() { return 3; } @Override public int timeToOpen() { return 160; } @Override public int[][] getDoorOpenRanges() { return new int[][] { { -1, 0, 0, 3, 4, 1 } }; } @@ -301,12 +306,17 @@ public abstract class DoorDecl { else return super.getBlockBound(x, y, z, open, forCollision); } - public final ResourceLocation[] skins = new ResourceLocation[] { - ResourceManager.pheo_secure_door_tex, - ResourceManager.pheo_secure_door_grey_tex - }; + public ResourceLocation[] skins; - @Override public ResourceLocation[] getSEDNASkins() { return skins; } + @Override public ResourceLocation[] getSEDNASkins() { + if(skins == null) skins = new ResourceLocation[] { + ResourceManager.pheo_secure_door_tex, + ResourceManager.pheo_secure_door_grey_tex + }; + return skins; + } + + public int getSkinCount() { return 2; } }; public static final DoorDecl ROUND_AIRLOCK_DOOR = new DoorDecl() { @@ -327,13 +337,18 @@ public abstract class DoorDecl { return null; } - public final ResourceLocation[] skins = new ResourceLocation[] { - ResourceManager.pheo_airlock_door_tex, - ResourceManager.pheo_airlock_door_clean_tex, - ResourceManager.pheo_airlock_door_green_tex - }; + public ResourceLocation[] skins; - @Override public ResourceLocation[] getSEDNASkins() { return skins; } + @SideOnly(Side.CLIENT) @Override public ResourceLocation[] getSEDNASkins() { + if(skins == null) skins = new ResourceLocation[] { + ResourceManager.pheo_airlock_door_tex, + ResourceManager.pheo_airlock_door_clean_tex, + ResourceManager.pheo_airlock_door_green_tex + }; + return skins; + } + + public int getSkinCount() { return 3; } @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open, boolean forCollision) { @@ -670,11 +685,7 @@ public abstract class DoorDecl { public ResourceLocation[] getSEDNASkins() { return null; } public boolean hasSkins() { return getSkinCount() > 0; } - public int getSkinCount() { - ResourceLocation[] skins = this.getSEDNASkins(); - if(skins == null || skins.length <= 1) return 0; - return skins.length; - } + public int getSkinCount() { return 0; } public ResourceLocation getCyclingSkins() { ResourceLocation[] skins = this.getSEDNASkins(); From eb1773f7fca158a036c5546f380a0855046d8b61 Mon Sep 17 00:00:00 2001 From: Creeper-banner <82984664+Creeper-banner@users.noreply.github.com> Date: Thu, 5 Feb 2026 22:03:05 +0800 Subject: [PATCH 03/11] Update zh_CN.lang --- src/main/resources/assets/hbm/lang/zh_CN.lang | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index fac82e790..c367983e8 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -5894,7 +5894,7 @@ item.conveyor_wand.vertical.desc=能放置垂直输送带或者滑槽来垂直 item.gun_g3_a3.name=G3A3 item.gun_g3_infiltrator.name=渗透者 item.gun_greasegun_m3.name=M3 -item.gun_heavy_revolver_scoped.name=带有准镜的.44马格南转轮手枪 +item.gun_heavy_revolver_scoped.name=带瞄准镜的.44马格南转轮手枪 item.gun_henry_lincoln.name=林肯拉杆枪 item.gun_maresleg_short.name=马腿 item.gun_mas36.name=南方之星 @@ -5907,9 +5907,9 @@ item.weapon_mod_caliber.m357.name=.357马格南改装套件 item.weapon_mod_caliber.m44.name=.44马格南改装套件 item.weapon_mod_caliber.p22.name=.22LR改装套件 item.weapon_mod_caliber.p45.name=.45口径改装套件 -item.weapon_mod_caliber.p9.name=9毫米口径改装套件 +item.weapon_mod_caliber.p9.name=9mm改装套件 item.weapon_mod_caliber.r556.name=5.56mm改装套件 -item.weapon_mod_caliber.r762.name=7.62改装套件 +item.weapon_mod_caliber.r762.name=7.62mm改装套件 item.weapon_mod_generic.bigmt_damage.name=土星弹道优化器 item.weapon_mod_generic.bigmt_dura.name=高耐用性土星部件 item.weapon_mod_generic.bronze_damage.name=青铜弹道优化器 @@ -5924,7 +5924,7 @@ item.weapon_mod_generic.iron_damage.name=铁制弹道优化器 item.weapon_mod_generic.iron_dura.name=高耐用性铁制部件 item.weapon_mod_generic.steel_damage.name=钢制弹道优化器 item.weapon_mod_generic.steel_dura.name=高耐用性钢制部件 -item.weapon_mod_generic.tcalloy_damage.name=耐高温合金弹道优化 +item.weapon_mod_generic.tcalloy_damage.name=耐高温合金弹道优化器 item.weapon_mod_generic.tcalloy_dura.name=高耐用性耐高温合金部件 item.weapon_mod_generic.wsteel_damage.name=武器级钢弹道优化器 item.weapon_mod_generic.wsteel_dura.name=高耐用性武器级钢部件 From ea50cd5c6615e7d822eb8576262e1e2d114f4600 Mon Sep 17 00:00:00 2001 From: Vaern Date: Sun, 8 Feb 2026 11:48:07 -0800 Subject: [PATCH 04/11] added the star model f obj/texture --- .../assets/hbm/models/weapons/star_f.obj | 2117 +++++++++++++++++ .../hbm/textures/models/weapons/star_f.png | Bin 0 -> 6659 bytes 2 files changed, 2117 insertions(+) create mode 100644 src/main/resources/assets/hbm/models/weapons/star_f.obj create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/star_f.png diff --git a/src/main/resources/assets/hbm/models/weapons/star_f.obj b/src/main/resources/assets/hbm/models/weapons/star_f.obj new file mode 100644 index 000000000..cb14dd867 --- /dev/null +++ b/src/main/resources/assets/hbm/models/weapons/star_f.obj @@ -0,0 +1,2117 @@ +# Blender v3.2.0 OBJ File: 'star-f-small.blend' +# www.blender.org +o Gun +v -0.500000 2.625000 6.125000 +v -0.500000 3.250000 6.125000 +v -0.500000 2.625000 -1.125000 +v -0.500000 3.250000 -1.125000 +v -0.250000 3.500000 6.125000 +v -0.250000 3.500000 -1.125000 +v -0.250000 3.625000 6.125000 +v -0.250000 3.625000 -1.125000 +v 0.500000 2.625000 6.125000 +v 0.500000 2.625000 -1.125000 +v 0.500000 3.250000 6.125000 +v 0.500000 3.250000 -1.125000 +v 0.250000 3.500000 6.125000 +v 0.250000 3.500000 -1.125000 +v 0.250000 3.625000 6.125000 +v 0.250000 3.625000 -1.125000 +v 0.000000 3.312500 6.125000 +v 0.176777 3.239277 6.125000 +v 0.250000 3.062500 6.125000 +v 0.176777 2.885723 6.125000 +v -0.000000 2.812500 6.125000 +v -0.176777 2.885723 6.125000 +v -0.250000 3.062500 6.125000 +v -0.176777 3.239277 6.125000 +v -0.250000 2.500000 -4.687500 +v -0.437500 2.500000 -4.625000 +v -0.437500 2.875000 -4.562500 +v -0.250000 2.875000 -4.625000 +v -0.250000 2.125000 -4.875000 +v -0.437500 2.125000 -4.812500 +v 0.250000 2.500000 -4.687500 +v 0.437500 2.500000 -4.625000 +v 0.437500 2.875000 -4.562500 +v 0.250000 2.875000 -4.625000 +v 0.250000 2.125000 -4.875000 +v 0.437500 2.125000 -4.812500 +v -0.437500 1.750000 1.250000 +v -0.437500 1.750000 -0.500000 +v -0.437500 1.875000 1.750000 +v -0.437500 1.875000 3.125000 +v -0.437500 2.125000 3.250000 +v -0.437500 -0.625000 -2.125000 +v -0.437500 -3.000000 -2.500000 +v -0.437500 0.125000 -1.250000 +v -0.437500 0.375000 -1.250000 +v -0.437500 1.500000 -1.125000 +v -0.437500 1.000000 -1.375000 +v -0.437500 0.625000 -1.375000 +v -0.437500 -0.250000 -1.875000 +v -0.437500 -3.750000 -2.375000 +v -0.437500 -3.750000 -5.375000 +v -0.437500 -3.500000 -5.625000 +v -0.437500 0.250000 -4.625000 +v -0.437500 0.750000 -4.625000 +v -0.437500 1.125000 -5.000000 +v -0.437500 1.250000 -5.750000 +v -0.187500 1.125000 -5.937500 +v -0.187500 1.250000 -6.000000 +v -0.437500 1.500000 -5.750000 +v -0.437500 1.875000 -5.250000 +v -0.250000 1.875000 -5.250000 +v 0.250000 1.875000 -5.250000 +v -0.312500 1.250000 1.000000 +v -0.312500 1.750000 1.250000 +v -0.312500 1.250000 0.875000 +v -0.312500 0.750000 0.875000 +v -0.312500 0.750000 1.000000 +v -0.312500 0.312500 0.625000 +v -0.312500 0.125000 0.000000 +v -0.312500 0.250000 0.750000 +v -0.312500 0.000000 0.000000 +v -0.312500 0.000000 -1.000000 +v -0.312500 -0.250000 -1.875000 +v -0.312500 0.125000 -0.750000 +v -0.312500 0.625000 -1.375000 +v -0.312500 1.750000 0.250000 +v 0.437500 1.750000 1.250000 +v 0.437500 1.750000 -0.500000 +v 0.437500 1.875000 1.750000 +v 0.437500 1.875000 3.125000 +v 0.437500 2.125000 3.250000 +v 0.437500 -0.625000 -2.125000 +v 0.437500 -3.000000 -2.500000 +v 0.437500 0.125000 -1.250000 +v 0.437500 0.375000 -1.250000 +v 0.437500 1.500000 -1.125000 +v 0.437500 1.000000 -1.375000 +v 0.437500 0.625000 -1.375000 +v 0.437500 -0.250000 -1.875000 +v 0.437500 -3.750000 -2.375000 +v 0.437500 -3.750000 -5.375000 +v 0.437500 -3.500000 -5.625000 +v 0.437500 0.250000 -4.625000 +v 0.437500 0.750000 -4.625000 +v 0.437500 1.125000 -5.000000 +v 0.437500 1.250000 -5.750000 +v 0.187500 1.125000 -5.937500 +v 0.187500 1.250000 -6.000000 +v 0.437500 1.500000 -5.750000 +v 0.437500 1.875000 -5.250000 +v 0.312500 1.250000 1.000000 +v 0.312500 1.750000 1.250000 +v 0.312500 1.250000 0.875000 +v 0.312500 0.750000 0.875000 +v 0.312500 0.750000 1.000000 +v 0.312500 0.312500 0.625000 +v 0.312500 0.125000 0.000000 +v 0.312500 0.250000 0.750000 +v 0.312500 0.000000 0.000000 +v 0.312500 0.000000 -1.000000 +v 0.312500 -0.250000 -1.875000 +v 0.312500 0.125000 -0.750000 +v 0.312500 0.625000 -1.375000 +v 0.312500 1.750000 0.250000 +v -0.187500 -3.750000 -2.125000 +v 0.187500 -3.750000 -2.125000 +v -0.125000 0.125000 -0.250000 +v -0.125000 0.625000 -0.625000 +v -0.125000 1.125000 -0.625000 +v -0.125000 1.750000 -0.125000 +v -0.125000 0.125000 -1.375000 +v -0.125000 1.750000 -1.375000 +v 0.125000 0.125000 -0.250000 +v 0.125000 0.625000 -0.625000 +v 0.125000 1.125000 -0.625000 +v 0.125000 1.750000 -0.125000 +v 0.125000 0.125000 -1.375000 +v 0.125000 1.750000 -1.375000 +v 0.000000 3.312500 -1.125000 +v 0.176777 3.239277 -1.125000 +v 0.250000 3.062500 -1.125000 +v 0.176777 2.885723 -1.125000 +v -0.000000 2.812500 -1.125000 +v -0.176777 2.885723 -1.125000 +v -0.250000 3.062500 -1.125000 +v -0.176777 3.239277 -1.125000 +v -0.500000 2.625000 -3.437500 +v 0.500000 2.625000 -3.437500 +v -0.437500 2.125000 1.437500 +v 0.437500 2.125000 1.437500 +v -0.250000 2.875000 -4.000000 +v 0.250000 2.875000 -4.000000 +v -0.250000 2.125000 -4.000000 +v 0.250000 2.125000 -4.000000 +v -0.312500 -3.500000 -5.625000 +v -0.312500 -3.000000 -5.750000 +v -0.312500 -2.500000 -5.750000 +v -0.312500 0.250000 -4.625000 +v 0.312500 -3.500000 -5.625000 +v 0.312500 -3.000000 -5.750000 +v 0.312500 -2.500000 -5.750000 +v 0.312500 0.250000 -4.625000 +v -0.437500 -3.625000 -2.500000 +v -0.437500 -2.875000 -2.625000 +v -0.437500 0.250000 -2.125000 +v -0.437500 1.875000 -1.500000 +v -0.437500 1.875000 -4.750000 +v -0.437500 0.625000 -4.500000 +v -0.437500 0.250000 -4.500000 +v -0.437500 -3.625000 -5.375000 +v -0.812500 1.625000 -4.000000 +v -0.812500 1.625000 -2.250000 +v -0.812500 0.625000 -4.000000 +v -0.812500 0.250000 -4.000000 +v -0.812500 0.250000 -2.625000 +v -0.812500 -3.500000 -3.250000 +v -0.812500 -2.875000 -3.250000 +v -0.812500 -3.500000 -4.625000 +v 0.437500 -3.625000 -2.500000 +v 0.437500 -2.875000 -2.625000 +v 0.437500 0.250000 -4.500000 +v 0.437500 -3.625000 -5.375000 +v 0.437500 0.250000 -2.125000 +v 0.437500 1.875000 -1.500000 +v 0.437500 1.875000 -4.000000 +v 0.437500 1.250000 -4.000000 +v 0.437500 1.250000 -4.250000 +v 0.437500 0.750000 -4.500000 +v 0.812500 -3.500000 -3.250000 +v 0.812500 -3.500000 -4.625000 +v 0.812500 -2.875000 -3.250000 +v 0.812500 0.250000 -2.625000 +v 0.812500 1.625000 -3.750000 +v 0.812500 1.000000 -3.750000 +v 0.812500 1.000000 -4.250000 +v 0.812500 1.625000 -2.125000 +v 0.812500 0.250000 -4.250000 +v 0.437500 1.250000 -4.000000 +v 0.437500 1.750000 -4.000000 +v 0.437500 1.250000 -4.250000 +v 0.437500 0.875000 -4.500000 +v 0.437500 1.750000 -5.000000 +v 0.437500 1.375000 -5.000000 +v 0.437500 1.695083 -5.132583 +v 0.437500 1.562500 -5.187500 +v 0.437500 1.429917 -5.132583 +v 0.437500 0.875000 -4.625000 +v 0.437500 1.125000 -4.750000 +v 0.562500 1.250000 -4.000000 +v 0.562500 1.750000 -4.000000 +v 0.562500 1.250000 -4.250000 +v 0.562500 0.875000 -4.500000 +v 0.562500 1.750000 -5.000000 +v 0.562500 1.375000 -5.000000 +v 0.562500 1.695083 -5.132583 +v 0.562500 1.562500 -5.187500 +v 0.562500 1.429917 -5.132583 +v 0.562500 0.875000 -4.625000 +v 0.562500 1.125000 -4.750000 +v 0.937500 1.625000 -4.125000 +v 0.937500 1.500000 -4.125000 +v 0.937500 1.625000 -4.500000 +v 0.937500 1.500000 -4.500000 +v 0.812500 1.625000 -4.625000 +v 0.812500 1.500000 -4.625000 +v 0.812500 1.625000 -4.000000 +v 0.562500 1.750000 -4.750000 +v 0.562500 1.250000 -4.750000 +v 0.812500 1.500000 -4.000000 +v 0.437500 0.250000 -1.500000 +v 0.437500 0.426777 -1.573223 +v 0.437500 0.500000 -1.750000 +v 0.437500 0.426777 -1.926777 +v 0.437500 0.250000 -2.000000 +v 0.437500 0.073223 -1.926777 +v 0.437500 0.000000 -1.750000 +v 0.437500 0.073223 -1.573223 +v 0.562500 0.250000 -1.500000 +v 0.562500 0.426777 -1.573223 +v 0.562500 0.500000 -1.750000 +v 0.562500 0.426777 -1.926777 +v 0.562500 0.250000 -2.000000 +v 0.562500 0.073223 -1.926777 +v 0.562500 0.000000 -1.750000 +v 0.562500 0.073223 -1.573223 +v -0.187500 3.625000 5.812500 +v -0.187500 3.625000 5.062500 +v 0.187500 3.625000 5.812500 +v 0.187500 3.625000 5.062500 +v -0.062500 3.687500 5.687500 +v -0.062500 3.687500 5.062500 +v 0.062500 3.687500 5.687500 +v 0.062500 3.687500 5.062500 +v -0.062500 3.812500 5.437500 +v -0.062500 3.812500 5.187500 +v 0.062500 3.812500 5.437500 +v 0.062500 3.812500 5.187500 +v 0.250000 2.375000 -3.437500 +v -0.250000 2.375000 -3.437500 +v 0.250000 2.375000 -1.812500 +v -0.250000 2.375000 -1.812500 +vt 0.215278 0.826389 +vt 0.618056 0.861111 +vt 0.215278 0.861111 +vt 0.618056 0.812500 +vt 0.618056 0.826389 +vt 0.215278 0.812500 +vt 0.618056 0.805556 +vt 0.618056 0.916667 +vt 0.618056 0.951389 +vt 0.215278 0.916667 +vt 0.618056 0.965278 +vt 0.215278 0.951389 +vt 0.618056 0.972222 +vt 0.215278 0.965278 +vt 0.215278 0.972222 +vt 0.618056 1.000000 +vt 0.215278 1.000000 +vt 0.173611 0.965278 +vt 0.201389 0.972222 +vt 0.173611 0.972222 +vt 0.187500 0.954861 +vt 0.201389 0.965278 +vt 0.159722 0.916667 +vt 0.187500 0.927083 +vt 0.197321 0.950793 +vt 0.177679 0.950793 +vt 0.159722 0.951389 +vt 0.173611 0.940972 +vt 0.201389 0.940972 +vt 0.197321 0.931151 +vt 0.177679 0.931151 +vt 0.673611 0.888889 +vt 0.701389 0.909722 +vt 0.701389 0.902778 +vt 0.729167 0.902778 +vt 0.756944 0.902778 +vt 0.729167 0.909722 +vt 0.756944 0.909722 +vt 0.798611 0.902778 +vt 0.763889 0.909722 +vt 0.798611 0.909722 +vt 0.840278 0.909722 +vt 0.854167 0.902778 +vt 0.875000 0.937500 +vt 0.902778 0.888889 +vt 0.701389 0.909722 +vt 0.673611 0.888889 +vt 0.701389 0.902778 +vt 0.729167 0.902778 +vt 0.729167 0.909722 +vt 0.756944 0.902778 +vt 0.756944 0.909722 +vt 0.763889 0.909722 +vt 0.798611 0.902778 +vt 0.798611 0.909722 +vt 0.840278 0.909722 +vt 0.875000 0.937500 +vt 0.854167 0.902778 +vt 0.902778 0.888889 +vt 0.833333 0.909722 +vt 0.812500 0.937500 +vt 0.770833 0.909722 +vt 0.361111 0.375000 +vt 0.347222 0.326389 +vt 0.361111 0.326389 +vt 0.541667 0.694444 +vt 0.500000 0.715278 +vt 0.500000 0.701389 +vt 0.430556 0.423611 +vt 0.263889 0.375000 +vt 0.430556 0.375000 +vt 0.250000 0.409722 +vt 0.263889 0.423611 +vt 0.680556 0.465278 +vt 0.520833 0.423611 +vt 0.687500 0.423611 +vt 0.562500 0.645833 +vt 0.701389 0.597222 +vt 0.552083 0.750000 +vt 0.527778 0.736111 +vt 0.715278 0.618056 +vt 0.750000 0.652778 +vt 0.750000 0.638889 +vt 0.743056 0.666667 +vt 0.562500 0.673611 +vt 0.743056 0.687500 +vt 0.756944 0.715278 +vt 0.791667 0.729167 +vt 0.993056 0.736111 +vt 1.000000 0.750000 +vt 0.916667 0.736111 +vt 0.840278 1.000000 +vt 0.770833 1.000000 +vt 0.812500 0.965278 +vt 0.708333 0.909722 +vt 0.770833 0.909722 +vt 0.729167 0.937500 +vt 0.701389 1.000000 +vt 0.729167 0.965278 +vt 0.770833 1.000000 +vt 0.006944 0.736111 +vt 0.083333 0.736111 +vt 0.000000 0.750000 +vt 0.447917 0.750000 +vt 0.458333 0.694444 +vt 0.500000 0.715278 +vt 0.472222 0.736111 +vt 0.437500 0.673611 +vt 0.319444 0.465278 +vt 0.479167 0.423611 +vt 0.493056 0.437500 +vt 0.437500 0.645833 +vt 0.298611 0.597222 +vt 0.284722 0.618056 +vt 0.250000 0.652778 +vt 0.250000 0.638889 +vt 0.256944 0.666667 +vt 0.256944 0.687500 +vt 0.243056 0.715278 +vt 0.208333 0.729167 +vt 0.111111 0.729167 +vt 0.659722 0.972222 +vt 0.631944 0.965278 +vt 0.659722 0.965278 +vt 0.645833 0.954861 +vt 0.655654 0.950793 +vt 0.673611 0.951389 +vt 0.659722 0.940972 +vt 0.673611 0.916667 +vt 0.655654 0.931151 +vt 0.645833 0.927083 +vt 0.636012 0.931151 +vt 0.631944 0.940972 +vt 0.636012 0.950793 +vt 0.250000 0.375000 +vt 0.347222 0.375000 +vt 0.819444 0.861111 +vt 0.791667 0.819444 +vt 0.819444 0.819444 +vt 0.819444 0.750000 +vt 0.791667 0.750000 +vt 0.722222 0.805556 +vt 0.743056 0.819444 +vt 0.888889 0.805556 +vt 0.868056 0.819444 +vt 0.857639 0.840278 +vt 0.753472 0.840278 +vt 0.756944 0.861111 +vt 0.791667 0.861111 +vt 0.854167 0.861111 +vt 0.090278 0.791667 +vt 0.097222 0.847222 +vt 0.034722 1.000000 +vt 0.104167 0.791667 +vt 0.097222 0.847222 +vt 0.097222 0.819444 +vt 0.854167 0.944444 +vt 0.840278 0.937500 +vt 0.854167 0.937500 +vt 0.895833 1.000000 +vt 0.881944 0.993056 +vt 0.895833 0.993056 +vt 0.840278 1.000000 +vt 0.840278 0.944444 +vt 0.812500 0.937500 +vt 0.812500 0.944444 +vt 0.826389 0.958333 +vt 0.819444 0.958333 +vt 0.930977 0.990005 +vt 0.923611 0.993056 +vt 0.923611 0.972222 +vt 0.895833 0.944444 +vt 0.909722 0.958333 +vt 0.881944 0.965278 +vt 0.909722 0.965278 +vt 0.909722 0.993056 +vt 0.840278 0.895833 +vt 0.826389 0.881944 +vt 0.840278 0.868056 +vt 0.604167 0.791667 +vt 0.611111 0.777778 +vt 0.611111 0.798611 +vt 0.673611 0.784722 +vt 0.659722 0.875000 +vt 0.659722 0.784722 +vt 0.618056 0.784722 +vt 0.631944 0.875000 +vt 0.618056 0.913194 +vt 0.618056 0.770833 +vt 0.631944 0.784722 +vt 0.215278 0.805556 +vt 0.673611 0.944444 +vt 0.673611 0.944444 +vt 0.250000 0.388889 +vt 0.506944 0.437500 +vt 0.888889 0.729167 +vt 0.500000 0.701389 +vt 0.312500 0.423611 +vt 0.631944 0.972222 +vt 0.250000 0.326389 +vt 0.097222 0.819444 +vt 0.159722 1.000000 +vt 0.840278 0.993056 +vt 0.930977 0.975273 +vt 0.934028 0.982639 +vt 0.902778 0.944444 +vt 0.830457 0.891765 +vt 0.830457 0.872123 +vt 0.850099 0.872123 +vt 0.854167 0.881944 +vt 0.850099 0.891765 +vt 0.604167 0.784722 +vt 0.673611 0.913194 +vt 0.673611 0.770833 +vt 0.722222 0.840278 +vt 0.711806 0.861111 +vt 0.711806 0.840278 +vt 0.722222 0.819444 +vt 0.673611 0.840278 +vt 0.684028 0.861111 +vt 0.673611 0.861111 +vt 0.673611 0.819444 +vt 0.684028 0.840278 +vt 0.666667 0.770833 +vt 0.666667 0.756944 +vt 0.680556 0.756944 +vt 0.722222 0.798611 +vt 0.711806 0.798611 +vt 0.711806 0.819444 +vt 0.680556 0.750000 +vt 0.684028 0.819444 +vt 0.684028 0.798611 +vt 0.673611 0.798611 +vt 0.673611 0.770833 +vt 0.722222 0.770833 +vt 0.708333 0.756944 +vt 0.687500 0.750000 +vt 0.708333 0.750000 +vt 0.687500 0.756944 +vt 0.965278 0.951389 +vt 1.000000 0.979167 +vt 0.965278 0.979167 +vt 0.965278 0.951389 +vt 0.930556 0.916667 +vt 0.965278 0.916667 +vt 0.965278 0.854167 +vt 1.000000 0.895833 +vt 0.965278 0.895833 +vt 0.930556 0.888889 +vt 0.965278 0.888889 +vt 0.965278 0.923611 +vt 1.000000 0.951389 +vt 0.965278 0.798611 +vt 1.000000 0.854167 +vt 0.930556 0.861111 +vt 0.965278 0.861111 +vt 0.965278 0.750000 +vt 1.000000 0.798611 +vt 0.930556 0.826389 +vt 0.965278 0.826389 +vt 0.930556 0.784722 +vt 0.965278 0.784722 +vt 1.000000 0.923611 +vt 0.930556 0.750000 +vt 0.965278 0.750000 +vt 0.465278 0.375000 +vt 0.437500 0.326389 +vt 0.465278 0.326389 +vt 0.437500 0.375000 +vt 0.756944 0.388889 +vt 0.743056 0.423611 +vt 0.743056 0.375000 +vt 0.701389 0.375000 +vt 0.701389 0.423611 +vt 0.680556 0.375000 +vt 0.680556 0.423611 +vt 0.652778 0.375000 +vt 0.444444 0.423611 +vt 0.444444 0.375000 +vt 0.902778 0.326389 +vt 0.902778 0.340278 +vt 0.861111 0.326389 +vt 0.902778 0.375000 +vt 0.861111 0.375000 +vt 0.902778 0.361111 +vt 0.729167 0.326389 +vt 0.708333 0.375000 +vt 0.708333 0.326389 +vt 0.673611 0.326389 +vt 0.673611 0.375000 +vt 0.659722 0.326389 +vt 0.645833 0.375000 +vt 0.645833 0.326389 +vt 0.625000 0.326389 +vt 0.625000 0.375000 +vt 0.597222 0.326389 +vt 0.597222 0.375000 +vt 0.562500 0.326389 +vt 0.562500 0.375000 +vt 0.652778 0.423611 +vt 0.743056 0.902778 +vt 0.708333 0.888889 +vt 0.743056 0.888889 +vt 0.798611 0.888889 +vt 0.770833 0.902778 +vt 0.770833 0.888889 +vt 0.159722 0.805556 +vt 0.562500 0.798611 +vt 0.159722 0.798611 +vt 0.562500 0.791667 +vt 0.159722 0.791667 +vt 0.562500 0.784722 +vt 0.159722 0.784722 +vt 0.562500 0.777778 +vt 0.159722 0.777778 +vt 0.562500 0.770833 +vt 0.159722 0.770833 +vt 0.562500 0.763889 +vt 0.159722 0.763889 +vt 0.562500 0.756944 +vt 0.159722 0.756944 +vt 0.562500 0.750000 +vt 0.159722 0.750000 +vt 0.034722 1.000000 +vt 0.000000 0.847222 +vt 0.034722 0.847222 +vt 0.000000 0.819444 +vt 0.034722 0.819444 +vt 0.000000 0.791667 +vt 0.034722 0.791667 +vt 0.826389 0.423611 +vt 0.784722 0.402778 +vt 0.902778 0.423611 +vt 0.944444 0.402778 +vt 0.861111 0.708333 +vt 0.958333 0.708333 +vt 0.819444 0.729167 +vt 1.000000 0.729167 +vt 0.944444 0.416667 +vt 0.937500 0.458333 +vt 0.902778 0.458333 +vt 0.833333 0.652778 +vt 0.861111 0.652778 +vt 0.819444 0.722222 +vt 0.784722 0.416667 +vt 0.861111 0.631944 +vt 0.833333 0.631944 +vt 0.965278 0.631944 +vt 0.937500 0.631944 +vt 1.000000 0.722222 +vt 0.173611 0.423611 +vt 0.097222 0.423611 +vt 0.215278 0.402778 +vt 0.055556 0.402778 +vt 0.055556 0.416667 +vt 0.062500 0.458333 +vt 0.097222 0.458333 +vt 0.062500 0.631944 +vt 0.034722 0.631944 +vt 0.152778 0.631944 +vt 0.173611 0.631944 +vt 0.215278 0.416667 +vt 0.145833 0.722222 +vt 0.125000 0.673611 +vt 0.145833 0.687500 +vt 0.125000 0.708333 +vt 0.173611 0.659722 +vt 0.173611 0.694444 +vt 0.152778 0.673611 +vt 0.159722 0.715278 +vt 0.145833 0.694444 +vt 0.173611 0.715278 +vt 0.173611 0.694444 +vt 0.138889 0.729167 +vt 0.034722 0.708333 +vt -0.000000 0.729167 +vt -0.000000 0.722222 +vt 0.902778 1.000000 +vt 0.875000 0.979167 +vt 0.909722 0.944444 +vt 0.895833 0.937500 +vt 0.909722 0.937500 +vt 0.916667 0.937500 +vt 0.909722 0.993056 +vt 0.909722 1.000000 +vt 0.881944 0.944444 +vt 0.875000 0.937500 +vt 0.881944 0.937500 +vt 0.916667 0.993056 +vt 0.916667 1.000000 +vt 0.875000 0.944444 +vt 0.895833 0.944444 +vt 0.868056 0.965278 +vt 0.847222 0.972222 +vt 0.847222 0.965278 +vt 0.875000 0.965278 +vt 0.868056 0.972222 +vt 0.840278 0.979167 +vt 0.895833 0.979167 +vt 0.895833 0.986111 +vt 0.840278 0.958333 +vt 0.840278 0.965278 +vt 0.881944 0.944444 +vt 0.875000 0.958333 +vt 0.847222 0.895833 +vt 0.840278 0.902778 +vt 0.840278 0.895833 +vt 0.805556 0.895833 +vt 0.798611 0.902778 +vt 0.798611 0.895833 +vt 0.819444 0.895833 +vt 0.812500 0.902778 +vt 0.812500 0.895833 +vt 0.833333 0.895833 +vt 0.826389 0.902778 +vt 0.826389 0.895833 +vt 0.854167 0.895833 +vt 0.847222 0.902778 +vt 0.805556 0.902778 +vt 0.819444 0.902778 +vt 0.833333 0.902778 +vt 0.604167 0.770833 +vt 0.569444 0.777778 +vt 0.562500 0.770833 +vt 0.604167 0.805556 +vt 0.569444 0.798611 +vt 0.604167 0.798611 +vt 0.562500 0.777778 +vt 0.569444 0.791667 +vt 0.562500 0.798611 +vt 0.604167 0.777778 +vt 0.583333 0.784722 +vt 0.597222 0.784722 +vt 0.583333 0.791667 +vt 0.597222 0.791667 +vt 0.569444 0.784722 +vt 0.715278 0.750000 +vt 0.729167 0.756944 +vt 0.715278 0.756944 +vt 0.729167 0.770833 +vt 0.722222 0.861111 +vt 0.930556 0.951389 +vt 1.000000 0.750000 +vt 0.756944 0.409722 +vt 0.729167 0.375000 +vt 0.659722 0.375000 +vt 0.708333 0.902778 +vt 0.798611 0.902778 +vt 0.562500 0.805556 +vt 0.000000 1.000000 +vt 0.902778 0.993056 +vt 0.916667 0.944444 +vt 0.875000 0.972222 +vt 0.840278 0.972222 +vt 0.854167 0.902778 +vt 0.562500 0.805556 +vn -1.0000 0.0000 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.4472 0.8944 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.9806 -0.1961 +vn -0.3030 0.2866 -0.9089 +vn -0.3123 0.1562 -0.9370 +vn -0.3013 0.3036 -0.9039 +vn -0.2281 0.6264 -0.7454 +vn 0.3030 0.2866 -0.9089 +vn 0.3123 0.1562 -0.9370 +vn 0.2281 0.6264 -0.7454 +vn 0.3013 0.3036 -0.9039 +vn 0.7071 0.0000 -0.7071 +vn 0.7054 -0.0690 -0.7054 +vn 0.4009 -0.3537 -0.8451 +vn 0.0000 0.8357 -0.5491 +vn -0.0140 0.8211 -0.5706 +vn -0.2349 0.6695 -0.7047 +vn 0.3471 -0.4194 -0.8388 +vn 0.2349 0.6695 -0.7047 +vn 0.0140 0.8211 -0.5706 +vn 0.0000 0.7667 -0.6420 +vn -0.4009 -0.3537 -0.8451 +vn -0.3471 -0.4194 -0.8388 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.2298 0.9732 +vn 0.0000 -0.7809 -0.6247 +vn 0.0000 -0.4332 -0.9013 +vn 0.0000 -0.9871 0.1602 +vn 0.0000 -0.7555 0.6552 +vn 0.0000 0.2567 -0.9665 +vn 0.0000 -0.9903 0.1387 +vn 0.0000 0.7829 -0.6222 +vn 0.0000 -0.9615 0.2747 +vn 0.0000 0.9894 -0.1452 +vn 0.0000 0.9436 0.3310 +vn 0.0000 0.7809 0.6247 +vn 0.0000 -0.9701 0.2425 +vn 0.0000 -0.9925 0.1222 +vn 0.0000 -0.8321 0.5547 +vn 0.0000 -0.9976 0.0687 +vn 0.0000 -0.8892 -0.4576 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 0.1299 -0.9915 +vn 0.0000 -0.2594 -0.9658 +vn 0.0000 -0.7071 -0.7071 +vn -0.7022 0.1170 0.7022 +vn -0.2729 0.3559 0.8938 +vn -0.0959 0.1244 0.9876 +vn 0.7022 0.1170 0.7022 +vn 0.0959 0.1244 0.9876 +vn 0.2729 0.3559 0.8938 +vn 0.0000 -0.3638 0.9315 +vn 0.0000 -0.7237 0.6901 +vn 0.0000 -0.4927 0.8702 +vn 0.0000 0.2298 0.9732 +vn 0.0000 -0.7359 0.6771 +vn 0.0000 -0.9820 0.1891 +vn 0.0000 -0.3310 0.9436 +vn 0.0000 -0.6247 0.7809 +vn 0.0000 0.6000 0.8000 +vn 0.0000 0.3162 0.9487 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 0.3786 -0.9255 +vn 0.0000 0.1929 -0.9812 +vn 0.0000 -0.1222 -0.9925 +vn 0.0000 -0.2425 -0.9701 +vn -0.3162 -0.9487 0.0000 +vn -0.5547 0.8321 0.0000 +vn -0.8867 0.0760 0.4560 +vn -0.8639 -0.0284 0.5029 +vn -0.9647 0.0205 0.2624 +vn -0.9677 -0.0236 0.2510 +vn -0.7984 -0.0625 -0.5988 +vn -0.9538 -0.0197 -0.3000 +vn -0.8611 -0.0455 -0.5064 +vn -0.9685 0.0000 -0.2491 +vn -0.8767 0.0832 -0.4737 +vn -0.9548 0.0304 -0.2956 +vn -0.7980 0.0709 -0.5985 +vn -0.9625 0.0446 -0.2676 +vn -0.7885 -0.1687 0.5914 +vn -0.9525 -0.0730 0.2957 +vn -0.9490 -0.0829 0.3041 +vn -0.8433 -0.1605 0.5129 +vn 0.3162 -0.9487 0.0000 +vn 0.8867 0.0760 0.4560 +vn 0.9647 0.0205 0.2624 +vn 0.8639 -0.0284 0.5029 +vn 0.9677 -0.0236 0.2510 +vn 0.9526 -0.0755 0.2947 +vn 0.7885 -0.1687 0.5914 +vn 0.9662 0.0257 -0.2567 +vn 0.8948 0.0456 -0.4441 +vn 0.5521 0.0962 -0.8282 +vn 0.8693 0.0584 -0.4908 +vn 0.5547 0.0000 -0.8321 +vn 0.9782 0.1470 -0.1470 +vn 0.8443 0.0000 -0.5359 +vn 0.4890 0.1292 -0.8627 +vn 0.2857 0.4286 -0.8571 +vn 0.7853 0.4255 -0.4498 +vn 0.5547 0.8321 0.0000 +vn 0.9151 -0.1378 0.3789 +vn 0.7942 -0.2111 0.5697 +vn 0.0000 0.9239 -0.3827 +vn 0.4472 0.8944 0.0000 +vn 0.3278 0.9447 0.0000 +vn 0.0000 -0.8315 -0.5556 +vn 0.0000 -0.5847 -0.8112 +vn 0.0000 -0.8817 0.4719 +vn 0.0000 -0.5547 0.8321 +vn 0.0000 -0.4472 -0.8944 +vn 0.9239 0.0000 -0.3827 +vn 0.9239 0.0000 0.3827 +vn 0.5596 0.0000 -0.8287 +vn 0.3054 0.9522 0.0000 +vn 0.4472 0.0000 -0.8944 +vn 0.5691 0.0000 -0.8223 +vn 0.5054 -0.8629 0.0000 +vn 0.7071 0.0000 0.7071 +vn 0.5345 -0.8452 0.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.5871 0.8095 0.0000 +vn -0.4472 0.8944 0.0000 +vn -0.5871 0.8095 0.0000 +vn -0.7271 0.6866 0.0000 +vn 0.0000 0.8944 0.4472 +vn 0.7271 0.6866 0.0000 +vn 0.0000 0.9818 -0.1899 +vn 0.0000 0.9398 -0.3417 +vn -0.7054 -0.0690 -0.7054 +vn -0.7071 0.0000 -0.7071 +s off +f 2/1/1 3/2/1 1/3/1 +f 2/1/2 6/4/2 4/5/2 +f 5/6/1 8/7/1 6/4/1 +f 10/8/3 1/3/3 3/2/3 +f 12/9/4 9/10/4 10/8/4 +f 14/11/5 11/12/5 12/9/5 +f 16/13/4 13/14/4 14/11/4 +f 15/15/6 8/16/6 7/17/6 +f 5/18/7 15/19/7 7/20/7 +f 17/21/7 13/22/7 5/18/7 +f 1/23/7 9/10/7 21/24/7 +f 17/21/7 18/25/7 13/22/7 +f 24/26/7 17/21/7 5/18/7 +f 5/18/7 2/27/7 24/26/7 +f 24/26/7 2/27/7 23/28/7 +f 13/22/7 18/25/7 11/12/7 +f 18/25/7 19/29/7 11/12/7 +f 21/24/7 9/10/7 20/30/7 +f 19/29/7 20/30/7 9/10/7 +f 9/10/7 11/12/7 19/29/7 +f 21/24/7 22/31/7 1/23/7 +f 22/31/7 23/28/7 1/23/7 +f 1/23/7 23/28/7 2/27/7 +f 64/32/1 65/33/1 63/34/1 +f 65/33/1 67/35/1 63/34/1 +f 70/36/1 66/37/1 68/38/1 +f 71/39/1 68/40/1 69/41/1 +f 74/42/1 71/39/1 69/41/1 +f 72/43/1 75/44/1 73/45/1 +f 103/46/4 102/47/4 101/48/4 +f 105/49/4 103/46/4 101/48/4 +f 104/50/4 108/51/4 106/52/4 +f 106/53/4 109/54/4 107/55/4 +f 109/54/4 112/56/4 107/55/4 +f 113/57/4 110/58/4 111/59/4 +f 117/60/1 118/61/1 121/62/1 +f 80/63/8 41/64/8 40/65/8 +f 55/66/1 59/67/1 56/68/1 +f 91/69/3 50/70/3 51/71/3 +f 116/72/3 50/70/3 90/73/3 +f 43/74/1 51/75/1 50/76/1 +f 53/77/1 43/74/1 42/78/1 +f 55/66/1 30/79/1 60/80/1 +f 49/81/1 53/77/1 42/78/1 +f 45/82/1 49/81/1 44/83/1 +f 49/81/1 48/84/1 54/85/1 +f 47/86/1 54/85/1 48/84/1 +f 47/86/1 46/87/1 30/79/1 +f 46/87/1 38/88/1 30/79/1 +f 40/89/1 41/90/1 39/91/1 +f 39/91/1 41/90/1 30/79/1 +f 38/88/1 39/91/1 30/79/1 +f 120/92/1 122/93/1 119/94/1 +f 119/94/1 121/62/1 118/61/1 +f 123/95/4 127/96/4 124/97/4 +f 126/98/4 125/99/4 128/100/4 +f 125/99/4 127/96/4 128/100/4 +f 80/101/4 79/102/4 81/103/4 +f 36/104/4 81/103/4 79/102/4 +f 95/105/4 99/106/4 100/107/4 +f 95/105/4 36/104/4 94/108/4 +f 83/109/4 91/110/4 92/111/4 +f 83/109/4 93/112/4 82/113/4 +f 89/114/4 93/112/4 94/108/4 +f 89/114/4 85/115/4 84/116/4 +f 89/114/4 94/108/4 88/117/4 +f 87/118/4 94/108/4 36/104/4 +f 87/118/4 36/104/4 86/119/4 +f 86/119/4 36/104/4 78/120/4 +f 78/120/4 79/102/4 77/121/4 +f 8/122/9 14/123/9 6/124/9 +f 6/124/9 14/123/9 129/125/9 +f 129/125/9 136/126/9 6/124/9 +f 6/124/9 136/126/9 4/127/9 +f 136/126/9 135/128/9 4/127/9 +f 4/127/9 135/128/9 3/129/9 +f 135/128/9 134/130/9 3/129/9 +f 134/130/9 133/131/9 3/129/9 +f 3/129/9 133/131/9 10/8/9 +f 133/131/9 132/132/9 10/8/9 +f 132/132/9 131/133/9 10/8/9 +f 129/125/9 14/123/9 130/134/9 +f 14/123/9 12/9/9 130/134/9 +f 130/134/9 12/9/9 131/133/9 +f 12/9/9 10/8/9 131/133/9 +f 140/135/6 41/64/6 81/136/6 +f 141/137/9 144/138/9 143/139/9 +f 61/140/10 144/138/10 62/141/10 +f 62/142/1 144/138/1 35/143/1 +f 61/144/4 29/145/4 143/139/4 +f 25/146/4 143/139/4 29/145/4 +f 144/138/1 31/147/1 35/143/1 +f 34/148/1 31/147/1 142/149/1 +f 28/150/4 141/137/4 25/146/4 +f 149/151/4 151/152/4 152/153/4 +f 145/154/1 147/155/1 146/156/1 +f 201/157/3 188/158/3 190/159/3 +f 192/160/6 217/161/6 203/162/6 +f 189/163/6 217/161/6 192/160/6 +f 199/164/7 189/165/7 188/158/7 +f 200/166/7 219/167/7 216/168/7 +f 205/169/4 203/170/4 204/171/4 +f 202/172/4 209/173/4 201/174/4 +f 218/175/4 201/174/4 209/173/4 +f 209/173/4 204/171/4 218/175/4 +f 217/176/4 204/171/4 203/170/4 +f 230/177/4 228/178/4 234/179/4 +f 241/180/9 239/181/9 237/182/9 +f 137/183/5 251/184/5 249/185/5 +f 138/186/2 250/187/2 10/188/2 +f 138/189/7 249/185/7 248/190/7 +f 2/1/1 4/5/1 3/2/1 +f 2/1/2 5/6/2 6/4/2 +f 5/6/1 7/191/1 8/7/1 +f 10/8/3 9/10/3 1/3/3 +f 12/9/4 11/12/4 9/10/4 +f 14/11/5 13/14/5 11/12/5 +f 16/13/4 15/15/4 13/14/4 +f 15/15/6 16/13/6 8/16/6 +f 5/18/7 13/22/7 15/19/7 +f 64/32/1 76/192/1 65/33/1 +f 65/33/1 66/37/1 67/35/1 +f 70/36/1 67/35/1 66/37/1 +f 71/39/1 70/36/1 68/40/1 +f 74/42/1 72/43/1 71/39/1 +f 72/43/1 74/42/1 75/44/1 +f 103/46/4 114/193/4 102/47/4 +f 105/49/4 104/50/4 103/46/4 +f 104/50/4 105/49/4 108/51/4 +f 106/53/4 108/51/4 109/54/4 +f 109/54/4 110/58/4 112/56/4 +f 113/57/4 112/56/4 110/58/4 +f 80/63/8 81/136/8 41/64/8 +f 55/66/1 60/80/1 59/67/1 +f 91/69/3 90/73/3 50/70/3 +f 116/72/3 115/194/3 50/70/3 +f 43/74/1 52/195/1 51/75/1 +f 53/77/1 52/195/1 43/74/1 +f 55/66/1 54/85/1 30/79/1 +f 49/81/1 54/85/1 53/77/1 +f 45/82/1 48/84/1 49/81/1 +f 47/86/1 30/79/1 54/85/1 +f 38/88/1 37/196/1 39/91/1 +f 119/94/1 122/93/1 121/62/1 +f 125/99/4 124/97/4 127/96/4 +f 95/105/4 96/197/4 99/106/4 +f 95/105/4 100/107/4 36/104/4 +f 83/109/4 90/198/4 91/110/4 +f 83/109/4 92/111/4 93/112/4 +f 89/114/4 82/113/4 93/112/4 +f 89/114/4 88/117/4 85/115/4 +f 87/118/4 88/117/4 94/108/4 +f 78/120/4 36/104/4 79/102/4 +f 8/122/9 16/199/9 14/123/9 +f 140/135/6 139/200/6 41/64/6 +f 141/137/9 142/149/9 144/138/9 +f 61/140/10 143/139/10 144/138/10 +f 25/146/4 141/137/4 143/139/4 +f 144/138/1 142/149/1 31/147/1 +f 149/151/4 150/201/4 151/152/4 +f 145/154/1 148/202/1 147/155/1 +f 201/157/3 199/164/3 188/158/3 +f 189/163/6 200/203/6 217/161/6 +f 199/164/7 200/166/7 189/165/7 +f 200/166/7 199/164/7 219/167/7 +f 207/204/4 206/205/4 204/171/4 +f 206/205/4 205/169/4 204/171/4 +f 202/172/4 208/206/4 209/173/4 +f 217/176/4 218/175/4 204/171/4 +f 230/177/4 229/207/4 228/178/4 +f 228/178/4 235/208/4 234/179/4 +f 234/179/4 233/209/4 230/177/4 +f 233/209/4 232/210/4 230/177/4 +f 232/210/4 231/211/4 230/177/4 +f 241/180/9 243/212/9 239/181/9 +f 137/183/5 3/213/5 251/184/5 +f 138/186/2 248/190/2 250/187/2 +f 138/189/7 137/214/7 249/185/7 +s 1 +f 26/215/11 28/216/12 25/217/13 +f 25/217/13 30/218/14 26/215/11 +f 32/219/15 34/220/16 33/221/16 +f 36/222/17 31/223/18 32/219/15 +f 99/224/19 96/225/20 98/226/21 +f 60/227/22 30/218/14 61/228/23 +f 30/218/14 29/229/24 61/228/23 +f 97/230/25 98/226/21 96/225/20 +f 35/231/26 36/222/17 62/232/27 +f 62/232/27 36/222/17 100/233/22 +f 100/233/22 99/234/28 62/232/27 +f 60/227/22 61/228/23 59/235/28 +f 62/232/27 59/235/28 61/228/23 +f 58/236/29 97/237/25 57/238/30 +f 59/235/28 98/239/31 58/236/31 +f 63/240/32 102/241/8 64/242/8 +f 76/243/33 103/244/34 65/245/34 +f 71/246/35 108/247/36 70/248/36 +f 65/245/34 104/249/37 66/250/37 +f 67/251/32 101/252/32 63/240/32 +f 72/253/38 109/254/35 71/246/35 +f 66/250/37 106/255/39 68/256/39 +f 73/257/40 110/258/38 72/253/38 +f 68/256/39 107/259/41 69/260/41 +f 69/260/41 112/261/42 74/262/42 +f 70/248/36 105/263/32 67/251/32 +f 74/262/42 113/264/43 75/265/43 +f 77/266/44 39/267/45 37/268/44 +f 79/269/45 40/65/3 39/267/45 +f 57/270/46 96/271/47 56/272/47 +f 96/271/47 55/273/48 56/272/47 +f 95/274/48 54/275/49 55/273/48 +f 94/276/49 53/277/50 54/275/49 +f 92/278/51 51/71/52 52/279/51 +f 50/280/53 115/281/54 43/282/55 +f 90/283/56 83/284/57 116/285/58 +f 83/284/57 115/281/54 116/285/58 +f 83/284/57 42/286/59 43/282/55 +f 42/286/59 89/287/60 49/288/60 +f 89/287/60 44/289/61 49/288/60 +f 84/290/61 45/291/62 44/289/61 +f 45/291/62 88/292/62 48/293/62 +f 88/292/62 47/294/32 48/293/62 +f 87/295/32 46/296/63 47/294/32 +f 86/297/63 38/298/64 46/296/63 +f 78/299/64 37/268/3 38/298/64 +f 93/300/50 52/279/51 53/277/50 +f 125/301/65 120/302/66 119/303/65 +f 117/304/67 124/305/68 118/306/68 +f 118/306/68 125/301/65 119/303/65 +f 21/307/6 134/308/5 22/309/5 +f 22/309/5 135/310/4 23/311/4 +f 23/311/4 136/312/69 24/313/69 +f 24/313/69 129/314/3 17/315/3 +f 17/315/3 130/316/70 18/317/70 +f 18/317/70 131/318/1 19/319/1 +f 19/319/1 132/320/2 20/321/2 +f 20/321/2 133/322/6 21/323/6 +f 148/324/71 151/325/72 147/326/72 +f 147/326/72 150/327/73 146/328/73 +f 146/328/73 149/329/74 145/330/74 +f 168/331/75 160/332/75 166/333/75 +f 153/334/75 166/333/75 160/332/75 +f 161/335/76 162/336/76 157/337/76 +f 157/337/76 162/336/76 156/338/76 +f 153/339/77 154/340/78 166/333/79 +f 167/341/80 166/333/79 154/340/78 +f 158/342/81 163/343/82 157/344/83 +f 161/335/84 157/344/83 163/343/82 +f 160/345/85 164/346/86 159/347/87 +f 168/331/88 164/346/86 160/345/85 +f 155/348/89 165/349/90 154/340/78 +f 167/341/80 154/340/78 165/349/90 +f 159/347/87 164/346/86 158/342/81 +f 163/343/82 158/342/81 164/346/86 +f 162/336/91 165/349/90 156/350/92 +f 165/349/90 155/348/89 156/350/92 +f 163/343/82 164/346/86 165/349/90 +f 165/349/90 164/346/86 167/341/80 +f 166/333/79 167/341/80 168/331/88 +f 164/346/86 168/331/88 167/341/80 +f 180/351/93 179/352/93 172/353/93 +f 172/353/93 179/352/93 169/354/93 +f 169/355/94 179/352/95 170/356/96 +f 179/352/95 181/357/97 170/356/96 +f 170/356/96 182/358/98 173/359/99 +f 170/356/96 181/357/97 182/358/98 +f 180/351/100 181/357/97 179/352/95 +f 182/358/98 181/357/97 187/360/101 +f 171/361/102 187/360/101 172/362/103 +f 180/351/100 172/362/103 187/360/101 +f 175/363/104 184/364/105 176/365/104 +f 183/366/106 184/364/105 175/363/104 +f 178/367/107 177/368/108 185/369/109 +f 176/370/110 184/371/105 177/372/110 +f 185/373/109 177/372/110 184/371/105 +f 171/361/102 178/367/107 187/360/101 +f 178/367/107 185/369/109 187/360/101 +f 183/366/110 175/374/110 186/375/110 +f 174/376/110 186/375/110 175/374/110 +f 162/336/91 161/335/84 163/343/82 +f 165/349/90 162/336/91 163/343/82 +f 186/375/111 174/377/112 182/358/98 +f 173/359/99 182/358/98 174/377/112 +f 186/375/111 184/364/105 183/366/106 +f 186/375/111 182/358/98 184/364/105 +f 181/357/97 180/351/100 187/360/101 +f 185/369/109 184/364/105 187/360/101 +f 184/364/105 182/358/98 187/360/101 +f 203/162/113 194/378/31 192/160/113 +f 200/203/114 214/379/115 217/161/114 +f 204/380/116 198/381/117 193/382/116 +f 196/383/52 204/380/116 193/382/116 +f 194/378/31 206/384/9 195/385/9 +f 208/386/3 191/387/118 197/388/3 +f 195/385/9 207/389/52 196/390/52 +f 202/391/118 190/159/119 191/387/118 +f 209/392/117 197/388/120 198/381/117 +f 213/393/121 210/394/122 211/395/122 +f 215/396/123 212/397/121 213/393/121 +f 212/397/6 216/398/124 210/394/6 +f 215/399/123 217/176/125 214/400/126 +f 219/401/127 213/393/3 211/395/3 +f 210/394/122 219/402/128 211/395/122 +f 218/403/69 215/404/129 201/157/69 +f 201/157/69 219/401/127 199/164/69 +f 227/405/130 228/406/7 220/407/7 +f 225/408/52 234/409/3 226/410/3 +f 223/411/31 232/412/9 224/413/9 +f 221/414/131 230/415/6 222/416/6 +f 226/417/3 235/418/130 227/405/130 +f 224/413/9 233/419/52 225/408/52 +f 222/416/6 231/420/31 223/411/31 +f 220/407/7 229/421/131 221/414/131 +f 239/422/114 242/423/132 238/424/114 +f 237/425/133 240/426/134 241/427/135 +f 238/428/136 240/429/136 236/430/136 +f 243/431/137 246/432/4 242/423/132 +f 241/180/31 247/433/113 243/212/31 +f 241/427/135 244/434/1 245/435/1 +f 242/436/136 244/434/136 240/429/136 +f 246/432/6 245/435/113 244/434/6 +f 251/184/138 248/190/6 249/185/6 +f 250/187/138 3/213/139 10/188/139 +f 57/437/30 56/438/140 58/439/29 +f 59/440/141 58/439/29 56/438/140 +f 26/215/11 27/441/12 28/216/12 +f 25/217/13 29/229/24 30/218/14 +f 32/219/15 31/223/18 34/220/16 +f 36/222/17 35/231/26 31/223/18 +f 62/232/27 99/234/28 59/235/28 +f 58/236/29 98/239/21 97/237/25 +f 59/235/28 99/234/28 98/239/31 +f 63/240/32 101/252/32 102/241/8 +f 76/243/33 114/442/33 103/244/34 +f 71/246/35 109/254/35 108/247/36 +f 65/245/34 103/244/34 104/249/37 +f 67/251/32 105/263/32 101/252/32 +f 72/253/38 110/258/38 109/254/35 +f 66/250/37 104/249/37 106/255/39 +f 73/257/40 111/443/40 110/258/38 +f 68/256/39 106/255/39 107/259/41 +f 69/260/41 107/259/41 112/261/42 +f 70/248/36 108/247/36 105/263/32 +f 74/262/42 112/261/42 113/264/43 +f 77/266/44 79/269/45 39/267/45 +f 79/269/45 80/63/3 40/65/3 +f 57/270/46 97/444/46 96/271/47 +f 96/271/47 95/274/48 55/273/48 +f 95/274/48 94/276/49 54/275/49 +f 94/276/49 93/300/50 53/277/50 +f 92/278/51 91/69/52 51/71/52 +f 83/284/57 43/282/55 115/281/54 +f 83/284/57 82/445/59 42/286/59 +f 42/286/59 82/445/59 89/287/60 +f 89/287/60 84/290/61 44/289/61 +f 84/290/61 85/446/62 45/291/62 +f 45/291/62 85/446/62 88/292/62 +f 88/292/62 87/295/32 47/294/32 +f 87/295/32 86/297/63 46/296/63 +f 86/297/63 78/299/64 38/298/64 +f 78/299/64 77/266/3 37/268/3 +f 93/300/50 92/278/51 52/279/51 +f 125/301/65 126/447/66 120/302/66 +f 117/304/67 123/448/67 124/305/68 +f 118/306/68 124/305/68 125/301/65 +f 21/307/6 133/449/6 134/308/5 +f 22/309/5 134/308/5 135/310/4 +f 23/311/4 135/310/4 136/312/69 +f 24/313/69 136/312/69 129/314/3 +f 17/315/3 129/314/3 130/316/70 +f 18/317/70 130/316/70 131/318/1 +f 19/319/1 131/318/1 132/320/2 +f 20/321/2 132/320/2 133/322/6 +f 148/324/71 152/450/71 151/325/72 +f 147/326/72 151/325/72 150/327/73 +f 146/328/73 150/327/73 149/329/74 +f 203/162/113 205/451/31 194/378/31 +f 200/203/114 216/398/124 214/379/115 +f 204/380/116 209/392/117 198/381/117 +f 196/383/52 207/452/52 204/380/116 +f 194/378/31 205/451/31 206/384/9 +f 208/386/3 202/391/118 191/387/118 +f 195/385/9 206/384/9 207/389/52 +f 202/391/118 201/157/119 190/159/119 +f 209/392/117 208/386/120 197/388/120 +f 213/393/121 212/397/121 210/394/122 +f 215/396/123 214/453/126 212/397/121 +f 212/397/6 214/379/115 216/398/124 +f 215/399/123 218/175/125 217/176/125 +f 219/401/127 215/404/129 213/393/3 +f 210/394/122 216/454/128 219/402/128 +f 201/157/69 215/404/129 219/401/127 +f 227/405/130 235/418/130 228/406/7 +f 225/408/52 233/419/52 234/409/3 +f 223/411/31 231/420/31 232/412/9 +f 221/414/131 229/421/131 230/415/6 +f 226/417/3 234/455/3 235/418/130 +f 224/413/9 232/412/9 233/419/52 +f 222/416/6 230/415/6 231/420/31 +f 220/407/7 228/406/7 229/421/131 +f 239/422/114 243/431/137 242/423/132 +f 237/425/133 236/456/133 240/426/134 +f 238/428/136 242/436/136 240/429/136 +f 243/431/137 247/433/4 246/432/4 +f 241/180/31 245/435/113 247/433/113 +f 241/427/135 240/426/134 244/434/1 +f 242/436/136 246/432/136 244/434/136 +f 246/432/6 247/433/113 245/435/113 +f 251/184/138 250/187/138 248/190/6 +f 250/187/138 251/184/138 3/213/139 +o Slide +v -0.625000 2.000000 3.750000 +v -0.625000 2.000000 -4.687500 +v -0.625000 2.875000 3.750000 +v -0.625000 2.875000 -1.125000 +v -0.625000 2.875000 -4.500000 +v -0.625000 2.500000 -4.562500 +v -0.625000 2.125000 -4.750000 +v 0.625000 2.000000 3.750000 +v 0.625000 2.000000 -4.687500 +v 0.625000 2.875000 3.750000 +v 0.625000 2.875000 -1.125000 +v 0.625000 2.875000 -4.500000 +v 0.625000 2.500000 -4.562500 +v 0.625000 2.125000 -4.750000 +v -0.500000 3.375000 -1.125000 +v -0.250000 3.562500 -1.125000 +v -0.250000 3.687500 -1.125000 +v -0.250000 3.562500 -4.000000 +v -0.250000 3.687500 -4.000000 +v -0.500000 3.375000 -4.375000 +v 0.500000 3.375000 -1.125000 +v 0.500000 3.375000 -4.375000 +v 0.250000 3.562500 -1.125000 +v 0.250000 3.562500 -4.000000 +v 0.250000 3.687500 -1.125000 +v 0.250000 3.687500 -4.000000 +v -0.250000 3.375000 -4.437500 +v -0.250000 2.875000 -4.625000 +v -0.437500 2.500000 -4.625000 +v -0.437500 2.125000 -4.812500 +v -0.437500 2.875000 -4.562500 +v -0.437500 2.000000 -4.750000 +v 0.250000 3.375000 -4.437500 +v 0.250000 2.875000 -4.625000 +v 0.437500 2.875000 -4.562500 +v 0.437500 2.500000 -4.625000 +v 0.437500 2.125000 -4.812500 +v 0.437500 2.000000 -4.750000 +v -0.250000 2.875000 -4.000000 +v 0.250000 2.875000 -4.000000 +v -0.437500 2.000000 -1.687500 +v 0.437500 2.000000 -1.687500 +v -0.437500 2.875000 -1.687500 +v 0.437500 2.875000 -1.687500 +v -0.500000 2.875000 3.750000 +v 0.500000 2.875000 3.750000 +v -0.500000 2.625000 3.750000 +v 0.500000 2.625000 3.750000 +v -0.500000 2.875000 -1.125000 +v 0.500000 2.875000 -1.125000 +v -0.437500 2.000000 3.125000 +v 0.437500 2.000000 3.125000 +v -0.500000 2.625000 -1.125000 +v 0.500000 2.625000 -1.125000 +v -0.500000 2.875000 1.187500 +v 0.500000 2.875000 1.187500 +v -0.500000 2.625000 1.187500 +v 0.500000 2.625000 1.187500 +v -0.250000 3.562500 -3.625000 +v -0.375000 3.562500 -3.625000 +v -0.375000 3.812500 -3.625000 +v -0.375000 3.562500 -3.250000 +v -0.375000 3.687500 -3.250000 +v -0.250000 3.562500 -3.125000 +v -0.250000 3.687500 -3.125000 +v -0.125000 3.812500 -3.625000 +v -0.125000 3.687500 -3.625000 +v -0.375000 3.812500 -3.500000 +v -0.125000 3.812500 -3.500000 +v -0.375000 3.687500 -3.500000 +v -0.250000 3.687500 -3.500000 +v -0.125000 3.687500 -3.500000 +v -0.250000 3.687500 -3.625000 +v 0.250000 3.562500 -3.125000 +v 0.250000 3.687500 -3.125000 +v 0.375000 3.562500 -3.250000 +v 0.375000 3.687500 -3.250000 +v 0.375000 3.562500 -3.625000 +v 0.125000 3.687500 -3.625000 +v 0.250000 3.562500 -3.625000 +v 0.250000 3.687500 -3.625000 +v 0.250000 3.687500 -3.500000 +v 0.375000 3.687500 -3.500000 +v 0.375000 3.812500 -3.625000 +v 0.125000 3.812500 -3.625000 +v 0.125000 3.812500 -3.500000 +v 0.375000 3.812500 -3.500000 +v 0.125000 3.687500 -3.500000 +vt 0.736111 0.090278 +vt 0.576389 0.097222 +vt 0.576389 0.090278 +vt 0.527778 0.152778 +vt 0.798611 0.152778 +vt 0.527778 0.201389 +vt 0.996528 0.201389 +vt 1.000000 0.194444 +vt 0.989583 0.173611 +vt 0.736111 0.062500 +vt 0.576389 0.055556 +vt 0.736111 0.055556 +vt 0.784722 0.055556 +vt 0.812500 0.062500 +vt 0.784722 0.062500 +vt 0.770833 0.041667 +vt 0.812500 0.055556 +vt 0.770833 0.013889 +vt 0.826389 -0.000000 +vt 0.826389 0.013889 +vt 0.743056 0.062500 +vt 0.743056 0.090278 +vt 0.475694 0.173611 +vt 0.486111 0.180556 +vt 0.475694 0.180556 +vt 0.454861 0.173611 +vt 0.444444 0.180556 +vt 0.444444 0.173611 +vt 0.486111 0.236111 +vt 0.524306 0.208333 +vt 0.524306 0.236111 +vt 0.513889 0.260417 +vt 0.486111 0.270833 +vt 0.513889 0.184028 +vt 0.486111 0.208333 +vt 0.486111 0.173611 +vt 0.267361 0.104167 +vt 0.427083 0.104167 +vt 0.263889 0.125000 +vt 0.267361 0.100694 +vt 0.298611 0.090278 +vt 0.427083 0.100694 +vt 0.267361 0.052083 +vt 0.298611 0.062500 +vt 0.263889 0.062500 +vt 0.263889 0.027778 +vt 0.427083 0.048611 +vt 0.267361 0.048611 +vt 0.427083 0.052083 +vt 0.253472 0.006944 +vt 0.256944 -0.000000 +vt 0.427083 -0.000000 +vt 0.256944 0.152778 +vt 0.427083 0.152778 +vt 0.253472 0.145833 +vt 0.465278 0.305556 +vt 0.458333 0.319444 +vt 0.458333 0.270833 +vt 0.520833 0.305556 +vt 0.527778 0.319444 +vt 0.520833 0.319444 +vt 0.527778 0.270833 +vt 0.527778 0.145833 +vt 0.798611 0.145833 +vt 0.527778 0.326389 +vt 0.798611 0.319444 +vt 0.798611 0.326389 +vt 0.996528 0.270833 +vt 0.989583 0.298611 +vt 0.986111 0.319444 +vt 0.562500 0.211806 +vt 0.562500 0.260417 +vt 0.763889 0.013889 +vt 0.826389 0.041667 +vt 0.833333 0.013889 +vt 0.638889 -0.000000 +vt 0.770833 -0.000000 +vt 0.958333 0.013889 +vt 0.784722 0.104167 +vt 0.805556 0.111111 +vt 0.784722 0.111111 +vt 0.784722 0.125000 +vt 0.770833 0.131944 +vt 0.770833 0.125000 +vt 0.791667 0.125000 +vt 0.805556 0.118056 +vt 0.812500 0.125000 +vt 0.791667 0.118056 +vt 0.763889 0.125000 +vt 0.770833 0.118056 +vt 0.784722 0.138889 +vt 0.777778 0.138889 +vt 0.784722 0.131944 +vt 0.770833 0.138889 +vt 0.777778 0.118056 +vt 0.777778 0.111111 +vt 0.770833 0.083333 +vt 0.784722 0.090278 +vt 0.763889 0.090278 +vt 0.791667 0.090278 +vt 0.784722 0.083333 +vt 0.791667 0.076389 +vt 0.770833 0.076389 +vt 0.791667 0.069444 +vt 0.798611 0.083333 +vt 0.798611 0.076389 +vt 0.805556 0.083333 +vt 0.812500 0.090278 +vt 0.805556 0.090278 +vt 0.791667 0.097222 +vt 0.805556 0.097222 +vt 0.791667 0.104167 +vt 0.798611 0.104167 +vt 0.736111 0.097222 +vt 0.986111 0.152778 +vt 0.576389 0.062500 +vt 0.486111 0.173611 +vt 0.454861 0.180556 +vt 0.263889 0.090278 +vt 0.465278 0.319444 +vt 1.000000 0.277778 +vt 1.000000 0.260417 +vt 1.000000 0.211806 +vt 0.638889 0.013889 +vt 0.958333 -0.000000 +vt 0.812500 0.104167 +vt 0.791667 0.125000 +vt 0.763889 0.118056 +vt 0.784722 0.090278 +vt 0.763889 0.069444 +vt 0.812500 0.083333 +vt 0.805556 0.104167 +vt 0.756944 0.111111 +vt 0.576389 0.138889 +vt 0.576389 0.111111 +vt 0.756944 0.041667 +vt 0.576389 0.013889 +vt 0.763889 0.013889 +vt 0.576389 0.041667 +vt 0.479167 0.250000 +vt 0.465278 0.270833 +vt 0.465278 0.250000 +vt 0.465278 0.222222 +vt 0.475694 0.222222 +vt 0.486111 0.201389 +vt 0.486111 0.222222 +vt 0.475694 0.201389 +vt 0.465278 0.250000 +vt 0.451389 0.250000 +vt 0.465278 0.222222 +vt 0.454861 0.222222 +vt 0.444444 0.222222 +vt 0.465278 0.270833 +vt 0.444444 0.201389 +vt 0.454861 0.201389 +vt 0.812500 0.118056 +vt 0.763889 0.083333 +vt 0.763889 0.076389 +vt 0.763889 0.138889 +vt 0.812500 0.111111 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.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.2857 -0.4286 -0.8571 +vn 0.2857 -0.4286 -0.8571 +vn 0.0000 -1.0000 0.0000 +vn -0.9092 0.4164 0.0000 +vn -0.9701 0.2425 0.0000 +vn -0.8331 0.5531 0.0000 +vn -0.6000 0.8000 0.0000 +vn 0.9092 0.4164 0.0000 +vn 0.9701 0.2425 0.0000 +vn 0.6000 0.8000 0.0000 +vn 0.8331 0.5531 0.0000 +vn -0.2075 0.6230 -0.7542 +vn -0.0980 0.9147 -0.3920 +vn -0.1843 0.6502 -0.7371 +vn -0.2799 0.3137 -0.9073 +vn -0.3060 0.2526 -0.9179 +vn -0.3030 0.2866 -0.9089 +vn -0.3080 0.2271 -0.9239 +vn -0.2857 0.4286 -0.8571 +vn -0.3013 0.3036 -0.9039 +vn 0.1843 0.6502 -0.7371 +vn 0.2075 0.6230 -0.7542 +vn 0.2799 0.3137 -0.9073 +vn 0.3060 0.2526 -0.9179 +vn 0.3080 0.2271 -0.9239 +vn 0.0980 0.9147 -0.3920 +vn 0.3030 0.2866 -0.9089 +vn 0.3013 0.3036 -0.9039 +vn 0.2857 0.4286 -0.8571 +vn -0.9239 0.0000 0.3827 +vn -0.7071 0.0000 0.7071 +vn 0.9239 0.0000 0.3827 +vn 0.7071 0.0000 0.7071 +s off +f 270/457/142 267/458/142 268/459/142 +f 254/460/142 255/461/142 252/462/142 +f 253/463/142 255/461/142 258/464/142 +f 255/461/142 257/465/142 258/464/142 +f 277/466/143 274/467/143 275/468/143 +f 268/459/144 277/466/144 270/457/144 +f 267/469/145 276/470/145 268/471/145 +f 266/472/145 274/473/145 267/469/145 +f 300/474/145 305/475/145 301/476/145 +f 270/457/146 275/477/146 269/478/146 +f 283/479/147 258/480/147 281/481/147 +f 289/482/148 265/483/148 260/484/148 +f 291/485/146 269/486/146 275/487/146 +f 275/487/142 284/488/142 291/485/142 +f 285/489/142 291/485/142 284/488/142 +f 278/490/143 269/486/143 290/491/143 +f 278/490/143 290/491/143 279/492/143 +f 282/493/143 294/494/143 280/495/143 +f 282/496/149 290/497/149 294/498/149 +f 286/499/149 291/500/149 285/501/149 +f 287/502/142 295/503/142 286/504/142 +f 295/505/149 290/497/149 291/500/149 +f 288/506/142 295/503/142 287/502/142 +f 295/503/142 289/507/142 293/508/142 +f 283/509/143 294/494/143 292/510/143 +f 281/511/143 280/495/143 294/494/143 +f 298/512/145 254/513/145 252/514/145 +f 299/515/145 261/516/145 297/517/145 +f 299/515/145 252/514/145 259/518/145 +f 255/461/144 296/519/144 300/520/144 +f 297/521/144 262/522/144 301/523/144 +f 261/516/143 259/518/143 262/522/143 +f 260/524/143 262/522/143 259/518/143 +f 262/522/143 264/525/143 263/526/143 +f 259/518/149 302/527/149 303/528/149 +f 303/528/149 260/524/149 259/518/149 +f 253/463/149 302/527/149 252/462/149 +f 266/472/145 255/529/145 300/474/145 +f 272/530/145 301/476/145 262/531/145 +f 272/530/145 300/474/145 301/476/145 +f 300/474/143 308/532/143 304/533/143 +f 305/475/142 307/534/142 301/476/142 +f 310/535/149 313/536/149 311/537/149 +f 312/538/144 320/539/144 317/540/144 +f 322/541/144 314/542/144 316/543/144 +f 321/544/142 312/538/142 311/537/142 +f 320/545/143 318/546/143 317/540/143 +f 321/547/145 322/548/145 319/549/145 +f 320/539/145 322/548/145 323/550/145 +f 311/537/146 324/551/146 310/552/146 +f 312/538/146 324/551/146 311/537/146 +f 317/540/146 324/551/146 312/538/146 +f 328/553/144 333/554/144 326/555/144 +f 335/556/143 334/557/143 329/558/143 +f 327/559/149 331/560/149 329/558/149 +f 332/561/146 329/558/146 331/562/146 +f 330/563/142 337/564/142 336/565/142 +f 338/566/144 336/565/144 337/567/144 +f 336/565/146 332/561/146 330/563/146 +f 334/568/145 338/566/145 333/569/145 +f 337/567/145 333/569/145 338/566/145 +f 270/457/142 269/570/142 267/458/142 +f 253/463/142 252/462/142 255/461/142 +f 255/461/142 256/571/142 257/465/142 +f 277/466/143 276/572/143 274/467/143 +f 268/459/144 276/572/144 277/466/144 +f 267/469/145 274/473/145 276/470/145 +f 266/472/145 272/530/145 274/473/145 +f 300/474/145 304/533/145 305/475/145 +f 270/457/146 277/466/146 275/477/146 +f 283/479/147 253/573/147 258/480/147 +f 289/482/148 288/574/148 265/483/148 +f 291/485/146 290/491/146 269/486/146 +f 282/496/149 279/575/149 290/497/149 +f 286/499/149 295/505/149 291/500/149 +f 295/505/149 294/498/149 290/497/149 +f 295/503/142 288/506/142 289/507/142 +f 283/509/143 281/511/143 294/494/143 +f 298/512/145 296/576/145 254/513/145 +f 299/515/145 259/518/145 261/516/145 +f 299/515/145 298/512/145 252/514/145 +f 255/461/144 254/460/144 296/519/144 +f 297/521/144 261/516/144 262/522/144 +f 260/524/143 265/577/143 262/522/143 +f 262/522/143 265/577/143 264/525/143 +f 259/518/149 252/462/149 302/527/149 +f 303/528/149 289/578/149 260/524/149 +f 253/463/149 283/579/149 302/527/149 +f 272/530/145 266/472/145 300/474/145 +f 300/474/143 306/580/143 308/532/143 +f 305/475/142 309/581/142 307/534/142 +f 310/535/149 315/582/149 313/536/149 +f 312/538/144 319/549/144 320/539/144 +f 322/541/144 321/544/144 314/542/144 +f 321/544/142 319/583/142 312/538/142 +f 320/545/143 323/584/143 318/546/143 +f 320/539/145 319/549/145 322/548/145 +f 317/540/146 318/546/146 324/551/146 +f 328/553/144 334/557/144 333/554/144 +f 335/556/143 338/585/143 334/557/143 +f 327/559/149 325/586/149 331/560/149 +f 332/561/146 335/556/146 329/558/146 +f 330/563/142 339/587/142 337/564/142 +f 338/566/144 335/556/144 336/565/144 +f 336/565/146 335/556/146 332/561/146 +f 337/567/145 339/588/145 333/569/145 +s 1 +f 271/589/150 255/590/151 266/591/152 +f 266/591/152 269/570/153 271/589/150 +f 273/592/154 262/593/155 263/594/155 +f 275/468/156 272/595/157 273/592/154 +f 271/596/158 269/597/159 278/598/160 +f 278/598/160 279/599/161 271/596/158 +f 282/600/162 271/596/158 279/599/161 +f 282/600/162 257/601/163 256/602/164 +f 258/480/165 280/603/166 281/481/165 +f 284/604/167 273/605/168 285/606/169 +f 286/607/170 273/605/168 263/608/171 +f 275/609/172 273/605/168 284/604/167 +f 286/607/170 264/610/173 287/611/174 +f 265/483/175 287/611/174 264/610/173 +f 313/536/176 316/612/177 314/542/176 +f 321/544/142 313/536/176 314/542/176 +f 327/559/178 326/613/179 325/614/179 +f 327/559/178 334/557/143 328/553/178 +f 271/589/150 256/615/151 255/590/151 +f 266/591/152 267/458/153 269/570/153 +f 273/592/154 272/595/157 262/593/155 +f 275/468/156 274/467/156 272/595/157 +f 282/600/162 256/602/164 271/596/158 +f 282/600/162 280/603/166 257/601/163 +f 258/480/165 257/601/163 280/603/166 +f 286/607/170 285/606/169 273/605/168 +f 286/607/170 263/608/171 264/610/173 +f 265/483/175 288/574/175 287/611/174 +f 313/536/176 315/616/177 316/612/177 +f 321/544/142 311/537/142 313/536/176 +f 327/559/178 328/553/178 326/613/179 +f 327/559/178 329/558/143 334/557/143 +o Mag +v -0.437500 -3.750000 -4.500000 +v -0.437500 -3.875000 -4.500000 +v -0.437500 -3.875000 -2.375000 +v -0.437500 -3.750000 -2.375000 +v 0.437500 -3.750000 -4.500000 +v 0.437500 -3.875000 -4.500000 +v 0.437500 -3.875000 -2.375000 +v -0.187500 -3.875000 -2.125000 +v 0.187500 -3.875000 -2.125000 +v 0.437500 -3.750000 -2.375000 +v 0.187500 -3.750000 -2.125000 +v -0.187500 -3.750000 -2.125000 +v -0.312500 -3.750000 -2.875000 +v -0.312500 -3.750000 -4.500000 +v 0.312500 -3.750000 -2.875000 +v 0.312500 -3.750000 -4.500000 +v -0.312500 2.500000 -1.937500 +v 0.312500 2.500000 -1.937500 +v -0.312500 2.500000 -3.562500 +v 0.312500 2.500000 -3.562500 +vt 0.388889 0.326389 +vt 0.395833 0.277778 +vt 0.395833 0.326389 +vt 0.388889 0.222222 +vt 0.270833 0.270833 +vt 0.270833 0.222222 +vt 0.256944 0.256944 +vt 0.270833 0.215278 +vt 0.388889 0.277778 +vt 0.270833 0.277778 +vt 0.256944 0.312500 +vt 0.256944 0.291667 +vt 0.270833 0.326389 +vt 0.034722 0.000000 +vt 0.000000 0.347222 +vt 0.000000 0.000000 +vt 0.159722 0.000000 +vt 0.125000 0.347222 +vt 0.125000 0.000000 +vt 0.250000 0.000000 +vt 0.159722 0.347222 +vt 0.034722 0.381944 +vt 0.034722 0.347222 +vt 0.388889 0.270833 +vt 0.256944 0.236111 +vt 0.388889 0.215278 +vt 0.250000 0.347222 +vt 0.125000 0.381944 +vt 0.250000 0.277778 +vt 0.250000 0.291667 +vt 0.250000 0.312500 +vt 0.250000 0.326389 +vt 0.256944 0.326389 +vt 0.256944 0.277778 +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 1.0000 0.0000 +vn 0.0000 -0.1483 0.9889 +vn 0.0000 0.1483 -0.9889 +vn 0.7071 0.0000 0.7071 +vn 0.3827 0.0000 0.9239 +vn -0.3827 0.0000 0.9239 +vn -0.7071 0.0000 0.7071 +s off +f 340/617/180 345/618/180 341/619/180 +f 341/620/181 346/621/181 342/622/181 +f 348/623/181 342/622/181 346/621/181 +f 343/624/182 341/620/182 342/622/182 +f 346/621/183 344/625/183 349/626/183 +f 349/626/184 351/627/184 350/628/184 +f 343/629/184 344/625/184 340/617/184 +f 354/630/185 356/631/185 352/632/185 +f 353/633/186 359/634/186 355/635/186 +f 352/636/182 358/637/182 353/633/182 +f 359/634/184 356/638/184 357/639/184 +f 359/634/183 354/630/183 355/635/183 +f 340/617/180 344/625/180 345/618/180 +f 341/620/181 345/640/181 346/621/181 +f 348/623/181 347/641/181 342/622/181 +f 343/624/182 340/642/182 341/620/182 +f 346/621/183 345/640/183 344/625/183 +f 349/626/184 343/629/184 351/627/184 +f 343/629/184 349/626/184 344/625/184 +f 354/630/185 357/639/185 356/631/185 +f 353/633/186 358/637/186 359/634/186 +f 352/636/182 356/643/182 358/637/182 +f 359/634/184 358/644/184 356/638/184 +f 359/634/183 357/639/183 354/630/183 +s 1 +f 346/645/187 350/628/188 348/646/188 +f 347/647/189 350/628/188 351/627/189 +f 342/648/190 351/627/189 343/649/190 +f 346/645/187 349/650/187 350/628/188 +f 347/647/189 348/646/188 350/628/188 +f 342/648/190 347/647/189 351/627/189 +o Hammer +v 0.250000 1.937500 -4.000000 +v -0.250000 1.937500 -4.000000 +v 0.250000 1.937500 -4.500000 +v -0.250000 1.937500 -4.500000 +v 0.250000 3.062500 -4.500000 +v -0.250000 3.062500 -4.500000 +v 0.250000 3.437500 -4.750000 +v -0.250000 3.437500 -4.750000 +v 0.250000 3.562500 -4.687500 +v -0.250000 3.562500 -4.687500 +v 0.250000 3.500000 -4.250000 +v -0.250000 3.500000 -4.250000 +v 0.312500 3.500000 -4.937500 +v 0.312500 3.625000 -4.875000 +v 0.312500 3.500000 -5.187500 +v 0.312500 3.625000 -5.187500 +v 0.187500 3.500000 -5.312500 +v 0.187500 3.625000 -5.312500 +v -0.312500 3.625000 -4.875000 +v -0.312500 3.500000 -4.937500 +v -0.312500 3.625000 -5.187500 +v -0.312500 3.500000 -5.187500 +v -0.187500 3.625000 -5.312500 +v -0.187500 3.500000 -5.312500 +v 0.250000 3.562500 -4.000000 +v -0.250000 3.562500 -4.000000 +vt 0.916667 0.062500 +vt 0.944444 0.152778 +vt 0.916667 0.152778 +vt 0.875000 0.069444 +vt 0.878472 0.062500 +vt 0.888889 0.090278 +vt 0.902778 0.065972 +vt 0.986111 0.069444 +vt 0.972222 0.090278 +vt 0.982639 0.062500 +vt 0.958333 0.065972 +vt 0.944444 0.062500 +vt 0.888889 0.152778 +vt 0.972222 0.152778 +vt 1.000000 0.090278 +vt 1.000000 0.152778 +vt 0.840278 0.111111 +vt 0.868056 0.090278 +vt 0.868056 0.111111 +vt 0.944444 0.024306 +vt 0.916667 0.048611 +vt 0.916667 0.024306 +vt 0.895833 0.055556 +vt 0.902778 0.062500 +vt 0.892361 0.062500 +vt 0.875000 0.055556 +vt 0.875000 0.062500 +vt 0.868056 0.055556 +vt 0.843750 0.020833 +vt 0.875000 0.027778 +vt 0.840278 0.027778 +vt 0.902778 0.055556 +vt 0.812500 0.055556 +vt 0.819444 0.055556 +vt 0.812500 0.062500 +vt 0.822917 0.062500 +vt 0.840278 0.055556 +vt 0.840278 0.062500 +vt 0.847222 0.062500 +vt 0.868056 0.062500 +vt 0.840278 0.069444 +vt 0.875000 0.069444 +vt 0.840278 0.083333 +vt 0.871528 0.090278 +vt 0.843750 0.090278 +vt 0.875000 0.083333 +vt 0.847222 0.055556 +vt 0.875000 0.048611 +vt 0.840278 0.048611 +vt 0.944444 0.048611 +vt 0.840278 0.090278 +vt 0.871528 0.020833 +vn 0.0000 0.0000 1.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.2898 -0.9571 +vn 0.0000 -0.8128 -0.5825 +vn 0.0000 0.9899 0.1414 +vn 0.0000 0.9987 -0.0515 +vn 0.9824 -0.0835 0.1670 +vn 0.9526 -0.1361 0.2722 +vn 0.9919 -0.0570 0.1139 +vn 0.9239 0.0000 -0.3827 +vn 0.3827 0.0000 -0.9239 +vn 0.0000 0.9487 0.3162 +vn 0.0000 0.9897 0.1429 +vn -0.9526 -0.1361 0.2722 +vn -0.9824 -0.0835 0.1670 +vn -0.9919 -0.0570 0.1139 +vn -0.9239 0.0000 -0.3827 +vn -0.3827 0.0000 -0.9239 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.9897 -0.1429 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.9701 -0.2425 +s off +f 384/651/191 361/652/191 360/653/191 +f 366/654/192 368/655/192 364/656/192 +f 370/657/192 364/656/192 368/655/192 +f 367/658/193 365/659/193 369/660/193 +f 365/659/193 371/661/193 369/660/193 +f 365/659/193 361/652/193 385/662/193 +f 364/656/192 360/653/192 362/663/192 +f 384/651/191 385/662/191 361/652/191 +f 370/657/192 384/651/192 364/656/192 +f 365/659/193 385/662/193 371/661/193 +f 365/659/193 363/664/193 361/652/193 +f 364/656/192 384/651/192 360/653/192 +s 1 +f 363/664/194 364/665/195 362/666/194 +f 365/667/195 366/668/196 364/669/195 +f 369/670/197 370/671/198 368/672/197 +f 373/673/199 366/674/200 372/675/201 +f 375/676/202 372/675/201 374/677/202 +f 374/677/202 377/678/203 375/676/202 +f 369/679/204 373/680/205 378/681/205 +f 368/682/200 366/674/200 373/673/199 +f 369/683/206 378/684/207 367/685/206 +f 379/686/208 367/685/206 378/684/207 +f 379/686/208 380/687/209 381/688/209 +f 380/687/209 383/689/210 381/688/209 +f 383/689/210 377/678/203 376/690/203 +f 381/691/211 376/690/211 374/692/211 +f 379/693/212 366/694/196 367/695/196 +f 372/696/212 381/691/211 374/692/211 +f 382/697/213 375/698/213 377/678/213 +f 380/699/213 373/680/205 375/698/213 +f 371/700/198 384/651/214 370/671/198 +f 363/664/194 365/659/195 364/665/195 +f 365/667/195 367/701/196 366/668/196 +f 369/670/197 371/700/198 370/671/198 +f 375/676/202 373/673/199 372/675/201 +f 374/677/202 376/690/203 377/678/203 +f 369/679/204 368/702/204 373/680/205 +f 379/686/208 378/684/207 380/687/209 +f 380/687/209 382/697/210 383/689/210 +f 383/689/210 382/697/210 377/678/203 +f 381/691/211 383/689/211 376/690/211 +f 379/693/212 372/696/212 366/694/196 +f 372/696/212 379/693/212 381/691/211 +f 382/697/213 380/699/213 375/698/213 +f 380/699/213 378/681/205 373/680/205 +f 371/700/198 385/662/214 384/651/214 +o Bullet +v 0.000000 2.749049 -3.459289 +v 0.176777 2.676104 -3.452907 +v 0.250000 2.500000 -3.437500 +v 0.176777 2.323896 -3.422093 +v -0.000000 2.250951 -3.415711 +v -0.176777 2.323896 -3.422093 +v -0.250000 2.500000 -3.437500 +v -0.176777 2.676104 -3.452907 +v 0.000000 2.836205 -2.463094 +v 0.176777 2.763260 -2.456712 +v 0.250000 2.587156 -2.441305 +v 0.176777 2.411052 -2.425898 +v -0.000000 2.338107 -2.419516 +v -0.176777 2.411052 -2.425898 +v -0.250000 2.587156 -2.441305 +v -0.176777 2.763260 -2.456712 +v 0.000000 2.806626 -2.084074 +v 0.132583 2.751917 -2.079288 +v 0.187500 2.619839 -2.067732 +v 0.132583 2.487761 -2.056177 +v -0.000000 2.433053 -2.051391 +v -0.132583 2.487761 -2.056177 +v -0.187500 2.619839 -2.067732 +v -0.132583 2.751917 -2.079288 +v 0.000000 2.724127 -1.951379 +v 0.066291 2.696773 -1.948986 +v 0.093750 2.630734 -1.943208 +v 0.066291 2.564695 -1.937430 +v -0.000000 2.537340 -1.935037 +v -0.066291 2.564695 -1.937430 +v -0.093750 2.630734 -1.943208 +v -0.066291 2.696773 -1.948986 +vt 0.347222 0.215278 +vt 0.333333 0.201389 +vt 0.347222 0.187500 +vt 0.337401 0.211210 +vt 0.337401 0.191568 +vt 0.357043 0.191568 +vt 0.361111 0.201389 +vt 0.357043 0.211210 +vt 0.333333 0.215278 +vt 0.277778 0.208333 +vt 0.333333 0.208333 +vt 0.333333 0.166667 +vt 0.277778 0.159722 +vt 0.333333 0.159722 +vt 0.333333 0.180556 +vt 0.277778 0.173611 +vt 0.333333 0.173611 +vt 0.333333 0.194444 +vt 0.277778 0.187500 +vt 0.333333 0.187500 +vt 0.277778 0.201389 +vt 0.277778 0.166667 +vt 0.277778 0.180556 +vt 0.277778 0.194444 +vt 0.256944 0.173611 +vt 0.256944 0.187500 +vt 0.256944 0.201389 +vt 0.256944 0.166667 +vt 0.256944 0.180556 +vt 0.256944 0.194444 +vt 0.277778 0.215278 +vt 0.256944 0.208333 +vt 0.256944 0.159722 +vt 0.250000 0.180556 +vt 0.250000 0.201389 +vt 0.250000 0.194444 +vt 0.250000 0.215278 +vt 0.250000 0.208333 +vt 0.250000 0.159722 +vt 0.250000 0.173611 +vt 0.250000 0.187500 +vt 0.250000 0.166667 +vt 0.347222 0.180556 +vt 0.340278 0.187500 +vt 0.333333 0.180556 +vt 0.256944 0.215278 +vt 0.345188 0.185466 +vt 0.335367 0.185466 +vt 0.335367 0.175645 +vt 0.340278 0.173611 +vt 0.345188 0.175645 +vn 0.0000 -0.0872 -0.9962 +vn 0.0000 0.9962 -0.0872 +vn 0.7071 0.7044 -0.0616 +vn -0.7071 0.7044 -0.0616 +vn -0.7071 -0.7044 0.0616 +vn -1.0000 -0.0000 0.0000 +vn 0.7071 -0.7044 0.0616 +vn 0.0000 -0.9962 0.0872 +vn 1.0000 0.0000 0.0000 +vn -0.6975 -0.6805 0.2246 +vn -0.9275 0.0326 0.3725 +vn -0.9864 0.0143 0.1638 +vn 0.6975 -0.6805 0.2246 +vn 0.0000 -0.8914 0.4533 +vn -0.0000 -0.9683 0.2497 +vn 0.6975 0.7092 0.1030 +vn 0.9275 0.0326 0.3725 +vn 0.9864 0.0143 0.1638 +vn -0.6558 0.6859 0.3153 +vn -0.6975 0.7092 0.1030 +vn -0.6558 -0.6207 0.4296 +vn 0.6558 -0.6207 0.4296 +vn -0.0000 0.9970 0.0778 +vn 0.6558 0.6859 0.3153 +vn 0.0000 0.9565 0.2916 +vn -0.3730 -0.2975 0.8789 +vn 0.5275 0.0740 0.8463 +vn 0.3730 -0.2975 0.8789 +vn -0.0000 0.5995 0.8004 +vn 0.3730 0.4456 0.8138 +vn -0.5275 0.0740 0.8463 +vn -0.0000 -0.4514 0.8923 +vn -0.3730 0.4456 0.8138 +s off +f 386/703/215 388/704/215 390/705/215 +f 386/703/215 387/706/215 388/704/215 +f 388/704/215 389/707/215 390/705/215 +f 390/705/215 391/708/215 392/709/215 +f 392/709/215 393/710/215 390/705/215 +f 393/710/215 386/703/215 390/705/215 +s 1 +f 386/711/216 395/712/217 387/713/217 +f 393/714/218 394/715/216 386/716/216 +f 391/717/219 400/718/220 392/719/220 +f 389/720/221 398/721/222 390/722/222 +f 387/713/217 396/723/223 388/704/223 +f 393/714/218 400/718/220 401/724/218 +f 390/722/222 399/725/219 391/717/219 +f 388/704/223 397/726/221 389/720/221 +f 399/725/224 408/727/225 400/718/226 +f 397/726/227 406/728/228 398/721/229 +f 395/712/230 404/729/231 396/723/232 +f 400/718/226 409/730/233 401/724/234 +f 398/721/229 407/731/235 399/725/224 +f 396/723/232 405/732/236 397/726/227 +f 394/733/237 403/734/238 395/712/230 +f 401/724/234 402/735/239 394/715/237 +f 406/728/228 415/736/240 407/731/235 +f 405/732/236 412/737/241 413/738/242 +f 403/734/238 410/739/243 411/740/244 +f 409/730/233 410/741/243 402/735/239 +f 407/731/235 416/742/245 408/727/225 +f 406/728/228 413/738/242 414/743/246 +f 403/734/238 412/737/241 404/729/231 +f 409/730/233 416/742/245 417/744/247 +f 412/745/241 410/746/243 416/747/245 +f 386/711/216 394/733/216 395/712/217 +f 393/714/218 401/724/218 394/715/216 +f 391/717/219 399/725/219 400/718/220 +f 389/720/221 397/726/221 398/721/222 +f 387/713/217 395/712/217 396/723/223 +f 393/714/218 392/719/220 400/718/220 +f 390/722/222 398/721/222 399/725/219 +f 388/704/223 396/723/223 397/726/221 +f 399/725/224 407/731/235 408/727/225 +f 397/726/227 405/732/236 406/728/228 +f 395/712/230 403/734/238 404/729/231 +f 400/718/226 408/727/225 409/730/233 +f 398/721/229 406/728/228 407/731/235 +f 396/723/232 404/729/231 405/732/236 +f 394/733/237 402/748/239 403/734/238 +f 401/724/234 409/730/233 402/735/239 +f 406/728/228 414/743/246 415/736/240 +f 405/732/236 404/729/231 412/737/241 +f 403/734/238 402/748/239 410/739/243 +f 409/730/233 417/744/247 410/741/243 +f 407/731/235 415/736/240 416/742/245 +f 406/728/228 405/732/236 413/738/242 +f 403/734/238 411/740/244 412/737/241 +f 409/730/233 408/727/225 416/742/245 +f 412/745/241 411/749/244 410/746/243 +f 410/746/243 417/750/247 416/747/245 +f 416/747/245 415/751/240 412/745/241 +f 415/751/240 414/752/246 412/745/241 +f 414/752/246 413/753/242 412/745/241 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/star_f.png b/src/main/resources/assets/hbm/textures/models/weapons/star_f.png new file mode 100644 index 0000000000000000000000000000000000000000..097efbe833ac49fa97bda30e415eb8c2cd9c3d22 GIT binary patch literal 6659 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 literal 0 HcmV?d00001 From 304720b57f0a02d380630b6851c913126355d26f Mon Sep 17 00:00:00 2001 From: mlbv <51232730+mlbv@users.noreply.github.com> Date: Tue, 10 Feb 2026 03:15:06 +1100 Subject: [PATCH 05/11] fix: rbmk overpressure types --- .../machine/rbmk/TileEntityRBMKBase.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index 94e666af3..2b0a8da93 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -2,6 +2,8 @@ package com.hbm.tileentity.machine.rbmk; import api.hbm.fluidmk2.FluidNetMK2; +import api.hbm.fluidmk2.FluidNode; +import api.hbm.fluidmk2.IFluidReceiverMK2; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.rbmk.RBMKBase; import com.hbm.entity.effect.EntitySpear; @@ -41,12 +43,7 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.common.util.ForgeDirection; import org.lwjgl.opengl.GL11; -import java.util.List; -import java.util.Arrays; -import java.util.ArrayList; -import java.util.Set; -import java.util.HashSet; -import java.util.Iterator; +import java.util.*; /** * Base class for all RBMK components, active or passive. Handles heat and the explosion sequence @@ -502,8 +499,8 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase { /* Hanlde overpressure event */ if(RBMKDials.getOverpressure(worldObj) && !pipes.isEmpty()) { - HashSet pipeBlocks = new HashSet<>(); - HashSet pipeReceivers = new HashSet<>(); + HashSet pipeBlocks = new HashSet<>(); + HashSet> pipeReceivers = new HashSet<>(); //unify all parts into single sets to prevent redundancy pipes.forEach(x -> { @@ -513,20 +510,23 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase { int count = 0; int max = Math.min(pipeBlocks.size() / 5, 100); - Iterator itPipes = pipeBlocks.iterator(); - Iterator itReceivers = pipeReceivers.iterator(); + Iterator itPipes = pipeBlocks.iterator(); + Iterator> itReceivers = pipeReceivers.iterator(); while(itPipes.hasNext() && count < max) { - Object pipe = itPipes.next(); - if(pipe instanceof TileEntity) { - TileEntity tile = (TileEntity) pipe; - worldObj.setBlock(tile.xCoord, tile.yCoord, tile.zCoord, Blocks.air); + FluidNode node = itPipes.next(); + for (BlockPos pos : node.positions) { + int x = pos.getX(), y = pos.getY(), z = pos.getZ(); + if (worldObj.getTileEntity(x, y ,z) != null) { + worldObj.setBlock(x, y, z, Blocks.air); + } } count++; } while(itReceivers.hasNext()) { - Object con = itReceivers.next(); + Map.Entry e = itReceivers.next(); + IFluidReceiverMK2 con = e.getKey(); if(con instanceof TileEntity) { TileEntity tile = (TileEntity) con; if(con instanceof IOverpressurable) { @@ -568,6 +568,9 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase { RBMKBase.dropLids = true; RBMKBase.digamma = false; + + columns.clear(); + pipes.clear(); } private void getFF(int x, int y, int z) { From a2c06ce752c44ec2f97f9d56700224b33b75f3fb Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 9 Feb 2026 22:47:41 +0100 Subject: [PATCH 06/11] goober johnson --- .../java/com/hbm/crafting/WeaponRecipes.java | 1 + src/main/java/com/hbm/items/ModItems.java | 2 + .../sedna/factory/GunFactoryClient.java | 2 + .../weapon/sedna/factory/Orchestras.java | 37 ++++ .../weapon/sedna/factory/XFactory22lr.java | 59 ++++- .../sedna/hud/HUDComponentAmmoCounter.java | 2 +- .../weapon/sedna/mods/XWeaponModManager.java | 6 +- .../java/com/hbm/main/ResourceManager.java | 2 + .../item/weapon/sedna/ItemRenderStarF.java | 209 ++++++++++++++++++ src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + src/main/resources/assets/hbm/sounds.json | 1 + .../hbm/sounds/weapon/fire/pistolLight.ogg | Bin 0 -> 10865 bytes 13 files changed, 320 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderStarF.java create mode 100644 src/main/resources/assets/hbm/sounds/weapon/fire/pistolLight.ogg diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index e597fec39..e55644712 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -77,6 +77,7 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_uzi_akimbo, 1), new Object[] { "UMU", 'U', ModItems.gun_uzi, 'M', WEAPONSTEEL.mechanism() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_spas12, 1), new Object[] { "BRM", "BGS", 'B', DESH.lightBarrel(), 'R', DESH.lightReceiver(), 'M', GUNMETAL.mechanism(), 'G', ANY_PLASTIC.grip(), 'S', DESH.stock() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_panzerschreck, 1), new Object[] { "BBB", "PGM", 'B', DESH.heavyBarrel(), 'P', STEEL.plateCast(), 'G', DESH.grip(), 'M', GUNMETAL.mechanism() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_star_f, 1), new Object[] { "BRM", " G", 'B', WEAPONSTEEL.lightBarrel(), 'R', WEAPONSTEEL.lightReceiver(), 'M', WEAPONSTEEL.mechanism(), 'G', ANY_PLASTIC.grip() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_g3, 1), new Object[] { "BRM", "WGS", 'B', WEAPONSTEEL.lightBarrel(), 'R', WEAPONSTEEL.lightReceiver(), 'M', WEAPONSTEEL.mechanism(), 'W', WOOD.grip(), 'G', RUBBER.grip(), 'S', WOOD.stock() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_g3_zebra, 1), new Object[] { " M ", "MPM", " M ", 'M', BIGMT.mechanism(), 'P', ModItems.gun_g3 }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_stinger, 1), new Object[] { "BBB", "PGM", 'B', WEAPONSTEEL.heavyBarrel(), 'P', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'G', WEAPONSTEEL.grip(), 'M', WEAPONSTEEL.mechanism() }); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index aee8db4f7..1067d8620 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1406,6 +1406,7 @@ public class ModItems { public static Item gun_uzi_akimbo; public static Item gun_spas12; public static Item gun_panzerschreck; + public static Item gun_star_f; public static Item gun_g3; public static Item gun_g3_zebra; public static Item gun_stinger; @@ -6283,6 +6284,7 @@ public class ModItems { GameRegistry.registerItem(gun_uzi_akimbo, gun_uzi_akimbo.getUnlocalizedName()); GameRegistry.registerItem(gun_spas12, gun_spas12.getUnlocalizedName()); GameRegistry.registerItem(gun_panzerschreck, gun_panzerschreck.getUnlocalizedName()); + GameRegistry.registerItem(gun_star_f, gun_star_f.getUnlocalizedName()); GameRegistry.registerItem(gun_g3, gun_g3.getUnlocalizedName()); GameRegistry.registerItem(gun_g3_zebra, gun_g3_zebra.getUnlocalizedName()); GameRegistry.registerItem(gun_stinger, gun_stinger.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index cf9acc152..1621f0d08 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -66,6 +66,7 @@ public class GunFactoryClient { MinecraftForgeClient.registerItemRenderer(ModItems.gun_uzi_akimbo, new ItemRenderUziAkimbo()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_spas12, new ItemRenderSPAS12()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_panzerschreck, new ItemRenderPanzerschreck()); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_star_f, new ItemRenderStarF()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_g3, new ItemRenderG3(ResourceManager.g3_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_g3_zebra, new ItemRenderG3(ResourceManager.g3_zebra_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_stinger, new ItemRenderStinger()); @@ -263,6 +264,7 @@ public class GunFactoryClient { ((ItemGunBaseNT) ModItems.gun_uzi) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_spas12) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_panzerschreck) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_star_f) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_g3) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_g3_zebra) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_stinger) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index 61d19e644..c729c1982 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -765,6 +765,43 @@ public class Orchestras { } }; + public static BiConsumer ORCHESTRA_STAR_F = (stack, ctx) -> { + EntityLivingBase entity = ctx.entity; + if(entity.worldObj.isRemote) return; + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); + boolean aiming = ItemGunBaseNT.getIsAiming(stack); + + if(type == GunAnimation.CYCLE) { + if(timer == 0) { + SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); + if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.3125, aiming ? 0 : -0.125, aiming ? 0 : -0.1875D, 0, 0.18, -0.12, 0.01, (float)entity.getRNG().nextGaussian() * 5F, 12.5F + (float)entity.getRNG().nextFloat() * 5F, casing.getName()); + PacketDispatcher.wrapper.sendToAllAround(new MuzzleFlashPacket(entity), new TargetPoint(entity.worldObj.provider.dimensionId, entity.posX, entity.posY, entity.posZ, 100)); + } + } + if(type == GunAnimation.CYCLE_DRY) { + if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.9F); + if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 1.1F); + + } + if(type == GunAnimation.RELOAD) { + if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); + if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); + if(timer == 22) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); + if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1.1F); + } + if(type == GunAnimation.JAMMED) { + if(timer == 15) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); + if(timer == 19) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1.1F); + if(timer == 23) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); + if(timer == 27) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1.1F); + } + if(type == GunAnimation.INSPECT) { + if(timer == 7) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); + if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1.1F); + } + }; + public static BiConsumer ORCHESTRA_G3 = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java index 718892761..5bffc24ae 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java @@ -17,6 +17,7 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.items.weapon.sedna.mods.XWeaponModManager; +import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; @@ -54,11 +55,23 @@ public class XFactory22lr { .setupStandardFire().recoil(LAMBDA_RECOIL_AM180)) .setupStandardConfiguration() .anim(LAMBDA_AM180_ANIMS).orchestra(Orchestras.ORCHESTRA_AM180) - ).setDefaultAmmo(EnumAmmo.P22_SP, 35).setNameMutator(LAMBDA_NAME_AM180) + ).setDefaultAmmo(EnumAmmo.P22_SP, 35).setNameMutator(LAMBDA_NAME_SILENCED) .setUnlocalizedName("gun_am180"); + + ModItems.gun_star_f = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() + .dura(15 * 25).draw(15).inspect(38).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) + .rec(new Receiver(0) + .dmg(12.5F).delay(5).dry(17).spread(0.01F).reload(40).jam(32).sound("hbm:weapon.fire.pistolLight", 1.0F, 1.0F) + .mag(new MagazineFullReload(0, 15).addConfigs(p22_sp, p22_fmj, p22_jhp, p22_ap)) + .offset(1, -0.0625 * 1.5, -0.1875D) + .setupStandardFire().recoil(LAMBDA_RECOIL_STAR_F)) + .setupStandardConfiguration() + .anim(LAMBDA_STAR_F_ANIMS).orchestra(Orchestras.ORCHESTRA_STAR_F) + ).setDefaultAmmo(EnumAmmo.P22_SP, 15).setNameMutator(LAMBDA_NAME_SILENCED) + .setUnlocalizedName("gun_star_f"); } - public static Function LAMBDA_NAME_AM180 = (stack) -> { + public static Function LAMBDA_NAME_SILENCED = (stack) -> { if(XWeaponModManager.hasUpgrade(stack, 0, XWeaponModManager.ID_SILENCER)) return stack.getUnlocalizedName() + "_silenced"; return null; }; @@ -71,6 +84,10 @@ public class XFactory22lr { ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.25), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.25)); }; + public static BiConsumer LAMBDA_RECOIL_STAR_F = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(2.5F, (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); + }; + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_AM180_ANIMS = (stack, type) -> { if(ClientConfig.GUN_ANIMS_LEGACY.get()) { switch(type) { @@ -109,4 +126,42 @@ public class XFactory22lr { return null; }; + + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_STAR_F_ANIMS = (stack, type) -> { + int ammo = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory); + switch(type) { + case EQUIP: return new BusAnimation() + .addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); + case CYCLE: return new BusAnimation() + .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, 0, 50).addPos(0, 0, ItemGunBaseNT.getIsAiming(stack) ? -0.125 : -0.5, 15, IType.SIN_DOWN).addPos(0, 0, 0, 35, IType.SIN_FULL)) + .addBus("SLIDE", new BusAnimationSequence().addPos(0, 0, 0, 50).addPos(0, 0, ItemGunBaseNT.getIsAiming(stack) ? -0.5 : -1, 25, IType.SIN_DOWN).addPos(0, 0, 0, 75, IType.SIN_UP)) + .addBus("HAMMER", new BusAnimationSequence().addPos(1, 0, 0, 50, IType.SIN_UP).addPos(0, 0, 0, 50, IType.SIN_DOWN)) + .addBus("BULLET", ammo <= 1 ? new BusAnimationSequence().setPos(100, 0, 0) : new BusAnimationSequence().addPos(0, 0, 0, 90).addPos(0, 0.5, 2.25, 50)); + case CYCLE_DRY: return new BusAnimation() + .addBus("HAMMER", new BusAnimationSequence().addPos(1, 0, 0, 50, IType.SIN_UP).hold(450).addPos(0, 0, 0, 50, IType.SIN_DOWN)) + .addBus("SLIDE", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(0, 0, ItemGunBaseNT.getIsAiming(stack) ? -0.5 : -1, 100, IType.SIN_FULL).hold(100).addPos(0, 0, 0, 75, IType.SIN_UP)) + .addBus("EQUIP", new BusAnimationSequence().addPos(0, 0, 0, 600).addPos(-3, 0, 0, 175, IType.SIN_DOWN).addPos(0, 0, 0, 100, IType.SIN_FULL)) + .addBus("BULLET", new BusAnimationSequence().setPos(100, 0, 0)); + case RELOAD: + return new BusAnimation() + .addBus("TILT", new BusAnimationSequence().addPos(-30, 0, 0, 250, IType.SIN_FULL).hold(1500).addPos(0, 0, 0, 250, IType.SIN_FULL)) + .addBus("SLIDE", new BusAnimationSequence().addPos(0, 0, 0, 250).addPos(0, 0, -1, 100, IType.SIN_FULL).hold(1125).addPos(0, 0, 0, 100, IType.SIN_UP)) + .addBus("MAG", new BusAnimationSequence().addPos(0, 0, 0, 250).addPos(0, -7, -1.5, 300, IType.SIN_UP).hold(400).addPos(0, 0, 0, 300, IType.SIN_UP)) + .addBus("EQUIP", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(3, 0, 0, 750, IType.SIN_FULL).addPos(-3, 0, 0, 50, IType.SIN_DOWN).addPos(0, 0, 0, 100, IType.SIN_FULL)) + .addBus("TURN", new BusAnimationSequence().addPos(0, 0, 0, 200).addPos(0, 0, 15, 300, IType.SIN_FULL).hold(900).addPos(0, 0, 0, 150, IType.SIN_FULL)) + .addBus("BULLET", new BusAnimationSequence().setPos(ammo <= 1 ? 100 : 0, 0, 0).hold(750).setPos(0, 0, 0).hold(750).addPos(0, 0.5, 2.25, 50)); + case JAMMED: return new BusAnimation() + .addBus("TILT", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(-30, 0, 0, 150, IType.SIN_FULL).hold(800).addPos(0, 0, 0, 150, IType.SIN_FULL)) + .addBus("TURN", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(0, 0, 25, 150, IType.SIN_FULL).hold(800).addPos(0, 0, 0, 150, IType.SIN_FULL)) + .addBus("SLIDE", new BusAnimationSequence().addPos(0, 0, 0, 750).addPos(0, 0, -0.5, 100, IType.SIN_FULL).hold(100).addPos(0, 0, 0, 100, IType.SIN_UP).hold(100).addPos(0, 0, -0.5, 100, IType.SIN_FULL).hold(100).addPos(0, 0, 0, 100, IType.SIN_UP)) + .addBus("BULLET", new BusAnimationSequence().setPos(0, 0.5, 2.25).hold(750).addPos(0, 0.5, 1.25, 100, IType.SIN_FULL).hold(100).addPos(0, 0.5, 2.25, 100, IType.SIN_UP).hold(100).addPos(0, 0.5, 1.25, 100, IType.SIN_FULL).hold(100).addPos(0, 0.5, 2.25, 100, IType.SIN_UP)); + case INSPECT: return new BusAnimation() + .addBus("TILT", new BusAnimationSequence().addPos(-30, 0, 0, 250, IType.SIN_FULL).hold(1500).addPos(0, 0, 0, 250, IType.SIN_FULL)) + .addBus("TURN", new BusAnimationSequence().addPos(0, 0, 25, 250, IType.SIN_FULL).hold(1500).addPos(0, 0, 0, 250, IType.SIN_FULL)) + .addBus("SLIDE", new BusAnimationSequence().addPos(0, 0, 0, 350).addPos(0, 0, -0.5, 100, IType.SIN_FULL).hold(1125).addPos(0, 0, 0, 100, IType.SIN_UP)) + .addBus("BULLET", ammo <= 1 ? new BusAnimationSequence().setPos(100, 0, 0) : new BusAnimationSequence().setPos(0, 0.5, 2.25).hold(350).addPos(0, 0.5, 1.25, 100, IType.SIN_FULL).hold(1125).addPos(0, 0.5, 2.25, 100, IType.SIN_UP)); + } + + return null; + }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/hud/HUDComponentAmmoCounter.java b/src/main/java/com/hbm/items/weapon/sedna/hud/HUDComponentAmmoCounter.java index 63d1ac9a0..f36444ca8 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/hud/HUDComponentAmmoCounter.java +++ b/src/main/java/com/hbm/items/weapon/sedna/hud/HUDComponentAmmoCounter.java @@ -41,7 +41,7 @@ public class HUDComponentAmmoCounter implements IHUDComponent { @Override public int getComponentHeight(EntityPlayer player, ItemStack stack){ - return 19; + return 17; } @Override diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/XWeaponModManager.java b/src/main/java/com/hbm/items/weapon/sedna/mods/XWeaponModManager.java index 25a561aa4..83c48e148 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/XWeaponModManager.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/XWeaponModManager.java @@ -91,6 +91,7 @@ public class XWeaponModManager { ModItems.gun_spas12, ModItems.gun_panzerschreck }; Item[] wsteelGuns = new Item[] { + ModItems.gun_star_f, ModItems.gun_g3, ModItems.gun_g3_zebra, ModItems.gun_stinger, ModItems.gun_chemthrower }; @@ -130,7 +131,7 @@ public class XWeaponModManager { new WeaponModDefinition(EnumModGeneric.BRONZE_DURA).addMod(bronzeGuns, new WeaponModGenericDurability(117)); new WeaponModDefinition(EnumModSpecial.SPEEDLOADER).addMod(ModItems.gun_liberator, new WeaponModLiberatorSpeedloader(200)); - new WeaponModDefinition(EnumModSpecial.SILENCER).addMod(new Item[] {ModItems.gun_am180, ModItems.gun_uzi, ModItems.gun_uzi_akimbo, ModItems.gun_g3, ModItems.gun_amat}, new WeaponModSilencer(ID_SILENCER)); + new WeaponModDefinition(EnumModSpecial.SILENCER).addMod(new Item[] {ModItems.gun_am180, ModItems.gun_uzi, ModItems.gun_uzi_akimbo, ModItems.gun_star_f, ModItems.gun_g3, ModItems.gun_amat}, new WeaponModSilencer(ID_SILENCER)); new WeaponModDefinition(EnumModSpecial.SCOPE).addMod(new Item[] {ModItems.gun_heavy_revolver, ModItems.gun_g3, ModItems.gun_mas36, ModItems.gun_charge_thrower}, new WeaponModScope(ID_SCOPE)); new WeaponModDefinition(EnumModSpecial.SAW) .addMod(new Item[] {ModItems.gun_maresleg, ModItems.gun_double_barrel}, new WeaponModSawedOff(ID_SAWED_OFF)) @@ -176,7 +177,8 @@ public class XWeaponModManager { BulletConfig[] r762 = new BulletConfig[] {XFactory762mm.r762_sp, XFactory762mm.r762_fmj, XFactory762mm.r762_jhp, XFactory762mm.r762_ap, XFactory762mm.r762_du, XFactory762mm.r762_he}; BulletConfig[] bmg50 = new BulletConfig[] {XFactory50.bmg50_sp, XFactory50.bmg50_fmj, XFactory50.bmg50_jhp, XFactory50.bmg50_ap, XFactory50.bmg50_du, XFactory50.bmg50_he}; new WeaponModDefinition(EnumModCaliber.P9) - .addMod(ModItems.gun_henry, new WeaponModCaliber(300, 28, 10F, p9)); + .addMod(ModItems.gun_henry, new WeaponModCaliber(300, 28, 10F, p9)) + .addMod(ModItems.gun_star_f, new WeaponModCaliber(301, 12, 15F, p9)); new WeaponModDefinition(EnumModCaliber.P45) .addMod(ModItems.gun_henry, new WeaponModCaliber(310, 28, 10F, p45)) .addMod(ModItems.gun_greasegun, new WeaponModCaliber(311, 24, 3F, p45)) diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index f67415062..669eaa662 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -913,6 +913,7 @@ public class ResourceManager { public static final IModelCustom uzi = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/uzi.obj")).asVBO(); public static final IModelCustom spas_12 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/spas-12.obj")).asVBO(); public static final IModelCustom panzerschreck = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/panzerschreck.obj")).asVBO(); + public static final IModelCustom star_f = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/star_f.obj")).asVBO(); public static final IModelCustom g3 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/g3.obj")).asVBO(); public static final IModelCustom stinger = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/stinger.obj")).asVBO(); public static final IModelCustom chemthrower = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/chemthrower.obj")).asVBO(); @@ -1037,6 +1038,7 @@ public class ResourceManager { public static final ResourceLocation uzi_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/uzi.png"); public static final ResourceLocation uzi_saturnite_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/uzi_saturnite.png"); public static final ResourceLocation panzerschreck_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/panzerschreck.png"); + public static final ResourceLocation star_f_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/star_f.png"); public static final ResourceLocation g3_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3.png"); public static final ResourceLocation g3_zebra_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_zebra.png"); public static final ResourceLocation g3_green_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_polymer_green.png"); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderStarF.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderStarF.java new file mode 100644 index 000000000..93c4a6d90 --- /dev/null +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderStarF.java @@ -0,0 +1,209 @@ +package com.hbm.render.item.weapon.sedna; + +import org.lwjgl.opengl.GL11; + +import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.items.weapon.sedna.mods.XWeaponModManager; +import com.hbm.main.ResourceManager; +import com.hbm.render.anim.HbmAnimations; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; + +public class ItemRenderStarF extends ItemRenderWeaponBase { + + @Override + protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.25F; } + + @Override + public float getViewFOV(ItemStack stack, float fov) { + float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp; + return fov * (1 - aimingProgress * 0.33F); + } + + @Override + public void setupFirstPerson(ItemStack stack) { + GL11.glTranslated(0, 0, 0.875); + + float offset = 0.8F; + standardAimingTransform(stack, + -1.75F * offset, -1.75F * offset, 2.5F * offset, + 0, -7.625 / 8D, 1); + } + + @Override + public void renderFirstPerson(ItemStack stack) { + + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.star_f_tex); + double scale = 0.25D; + GL11.glScaled(scale, scale, scale); + + double[] equip = HbmAnimations.getRelevantTransformation("EQUIP"); + double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); + double[] hammer = HbmAnimations.getRelevantTransformation("HAMMER"); + double[] tilt = HbmAnimations.getRelevantTransformation("TILT"); + double[] turn = HbmAnimations.getRelevantTransformation("TURN"); + double[] mag = HbmAnimations.getRelevantTransformation("MAG"); + double[] bullet = HbmAnimations.getRelevantTransformation("BULLET"); + double[] slide = HbmAnimations.getRelevantTransformation("SLIDE"); + + GL11.glTranslated(0, -2, -8); + GL11.glRotated(equip[0], 1, 0, 0); + GL11.glTranslated(0, 2, 8); + + GL11.glTranslated(0, 1, -3); + GL11.glRotated(turn[2], 0, 0, 1); + GL11.glRotated(tilt[0], 1, 0, 0); + GL11.glTranslated(0, -1, 3); + + GL11.glTranslated(0, 0, recoil[2]); + + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.star_f.renderPart("Gun"); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 1.75, -4.25); + GL11.glRotated(60 * (hammer[0] - 1), 1, 0, 0); + GL11.glTranslated(0, -1.75, 4.25); + ResourceManager.star_f.renderPart("Hammer"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0, slide[2] * 2.3125); + ResourceManager.star_f.renderPart("Slide"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(mag[0], mag[1], mag[2]); + ResourceManager.star_f.renderPart("Mag"); + GL11.glTranslated(bullet[0], bullet[1], bullet[2]); + ResourceManager.star_f.renderPart("Bullet"); + GL11.glPopMatrix(); + + if(hasSilencer(stack)) { + GL11.glPushMatrix(); + GL11.glTranslated(0, 2.375, -0.25); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + ResourceManager.uzi.renderPart("Silencer"); + GL11.glPopMatrix(); + + } else { + double smokeScale = 0.5; + + GL11.glPushMatrix(); + GL11.glTranslated(0, 3, 6.125); + GL11.glRotated(90, 0, 1, 0); + GL11.glScaled(smokeScale, smokeScale, smokeScale); + this.renderSmokeNodes(gun.getConfig(stack, 0).smokeNodes, 0.75D); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 3, 6.125); + GL11.glScaled(0.75, 0.75, 0.75); + GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(90 * gun.shotRand, 1, 0, 0); + this.renderMuzzleFlash(gun.lastShot[0], 75, 7.5); + GL11.glPopMatrix(); + } + } + + @Override + public void setupThirdPerson(ItemStack stack) { + super.setupThirdPerson(stack); + GL11.glTranslated(0, -0.25, 1.75); + double scale = 0.75D; + GL11.glScaled(scale, scale, scale); + } + + @Override + public void setupInv(ItemStack stack) { + super.setupInv(stack); + double scale = 1.5D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(25, 1, 0, 0); + GL11.glRotated(45, 0, 1, 0); + GL11.glTranslated(-1, -0.5, 0); + } + + @Override + public void setupModTable(ItemStack stack) { + double scale = -6.25D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(90, 0, 1, 0); + GL11.glTranslated(0, -0.25, -5); + } + + @Override + public void renderModTable(ItemStack stack, int index) { + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.star_f_tex); + ResourceManager.star_f.renderPart("Gun"); + ResourceManager.star_f.renderPart("Slide"); + ResourceManager.star_f.renderPart("Mag"); + ResourceManager.star_f.renderPart("Hammer"); + if(hasSilencer(stack)) { + GL11.glTranslated(0, 2.375, -0.25); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + ResourceManager.uzi.renderPart("Silencer"); + } + GL11.glShadeModel(GL11.GL_FLAT); + } + + @Override + public void renderOther(ItemStack stack, ItemRenderType type, Object... data) { + GL11.glEnable(GL11.GL_LIGHTING); + + boolean silenced = hasSilencer(stack); + + if(silenced && type == ItemRenderType.INVENTORY) { + double scale = 0.625D; + GL11.glScaled(scale, scale, scale); + GL11.glTranslated(0, 0, -6); + } + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.star_f_tex); + ResourceManager.star_f.renderPart("Gun"); + ResourceManager.star_f.renderPart("Slide"); + ResourceManager.star_f.renderPart("Mag"); + ResourceManager.star_f.renderPart("Hammer"); + if(silenced) { + GL11.glTranslated(0, 2.375, -0.25); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + ResourceManager.uzi.renderPart("Silencer"); + } + GL11.glShadeModel(GL11.GL_FLAT); + + if(type == ItemRenderType.EQUIPPED && !silenced) { + EntityLivingBase ent = (EntityLivingBase) data[1]; + long shot; + double shotRand = 0; + if(ent == Minecraft.getMinecraft().thePlayer) { + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); + shot = gun.lastShot[0]; + shotRand = gun.shotRand; + } else { + shot = ItemRenderWeaponBase.flashMap.getOrDefault(ent, (long) -1); + if(shot < 0) return; + } + + GL11.glPushMatrix(); + GL11.glTranslated(0, 3, 6.25); + GL11.glScaled(0.75, 0.75, 0.75); + GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(90 * shotRand, 1, 0, 0); + this.renderMuzzleFlash(shot, 75, 7.5); + GL11.glPopMatrix(); + } + } + + public boolean hasSilencer(ItemStack stack) { + return XWeaponModManager.hasUpgrade(stack, 0, XWeaponModManager.ID_SILENCER); + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 8163182e4..8b6106312 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2224,6 +2224,8 @@ item.gun_pepperbox.name=Bündelrevolver item.gun_panzerschreck.name=Panzerschreck item.gun_quadro.name=Vierfachraketenwerfer item.gun_spas12.name=SPAS-12 +item.gun_star_f.name=Sportpistole +item.gun_star_f_silenced.name=Schallgedämpfte Pistole item.gun_stg77.name=StG 77 item.gun_stinger.name=FIM-92 Stinger item.gun_tau.name=Taukanone diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index c1061eeb1..b6cae06c5 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3067,6 +3067,8 @@ item.gun_pepperbox.name=Pepperbox item.gun_panzerschreck.name=Panzerschreck item.gun_quadro.name=Quad Rocket Launcher item.gun_spas12.name=SPAS-12 +item.gun_star_f.name=Target Pistol +item.gun_star_f_silenced.name=Silenced Pistol item.gun_stg77.name=StG 77 item.gun_stinger.name=FIM-92 Stinger item.gun_tau.name=Tau Cannon diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 9b2f9d8a7..c9b6efc3a 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -263,6 +263,7 @@ "weapon.fire.stab": {"category": "player", "sounds": ["weapon/fire/stab1", "weapon/fire/stab2"]}, "weapon.fire.grenade": {"category": "player", "sounds": ["weapon/fire/grenade"]}, "weapon.fire.amat": {"category": "player", "sounds": ["weapon/fire/amat"]}, + "weapon.fire.pistolLight": {"category": "player", "sounds": ["weapon/fire/pistolLight"]}, "weapon.reload.boltClose": {"category": "player", "sounds": ["weapon/reload/boltClose"]}, "weapon.reload.boltOpen": {"category": "player", "sounds": ["weapon/reload/boltOpen"]}, diff --git a/src/main/resources/assets/hbm/sounds/weapon/fire/pistolLight.ogg b/src/main/resources/assets/hbm/sounds/weapon/fire/pistolLight.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ba9b6975e158181961913fff69bca1d2ba20bbf6 GIT binary patch literal 10865 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 T=YmFDl#znJdW|U%*AVzWfOYed literal 0 HcmV?d00001 From 4e0bce27dfceb83e02d4ef83a0a5f6c130fcf0d9 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 10 Feb 2026 22:22:47 +0100 Subject: [PATCH 07/11] new turbine model --- .../models/machines/industrial_turbine.obj | 2976 +++++++++++++++++ .../models/machines/industrial_turbine.png | Bin 0 -> 2825 bytes 2 files changed, 2976 insertions(+) create mode 100644 src/main/resources/assets/hbm/models/machines/industrial_turbine.obj create mode 100644 src/main/resources/assets/hbm/textures/models/machines/industrial_turbine.png diff --git a/src/main/resources/assets/hbm/models/machines/industrial_turbine.obj b/src/main/resources/assets/hbm/models/machines/industrial_turbine.obj new file mode 100644 index 000000000..c09c29df7 --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/industrial_turbine.obj @@ -0,0 +1,2976 @@ +# Blender v2.79 (sub 0) OBJ File: 'industrial_turbine.blend' +# www.blender.org +o Flywheel +v 0.000000 1.625000 -2.000000 +v -0.088388 1.588388 -2.000000 +v -0.125000 1.500000 -2.000000 +v -0.088388 1.411612 -2.000000 +v 0.000000 1.375000 -2.000000 +v 0.088388 1.411612 -2.000000 +v 0.125000 1.500000 -2.000000 +v 0.088388 1.588388 -2.000000 +v 0.000000 1.625000 -1.500000 +v -0.088388 1.588388 -1.500000 +v -0.125000 1.500000 -1.500000 +v -0.088388 1.411612 -1.500000 +v 0.000000 1.375000 -1.500000 +v 0.088388 1.411612 -1.500000 +v 0.125000 1.500000 -1.500000 +v 0.088388 1.588388 -1.500000 +v 0.000000 2.500000 -1.937500 +v 0.000000 2.500000 -1.562500 +v 0.500000 2.366025 -1.937500 +v 0.500000 2.366025 -1.562500 +v 0.866025 2.000000 -1.937500 +v 0.866025 2.000000 -1.562500 +v 1.000000 1.500000 -1.937500 +v 1.000000 1.500000 -1.562500 +v 0.866025 1.000000 -1.937500 +v 0.866025 1.000000 -1.562500 +v 0.500000 0.633975 -1.937500 +v 0.500000 0.633975 -1.562500 +v 0.000000 0.500000 -1.937500 +v 0.000000 0.500000 -1.562500 +v -0.500000 0.633975 -1.937500 +v -0.500000 0.633975 -1.562500 +v -0.866025 1.000000 -1.937500 +v -0.866025 1.000000 -1.562500 +v -1.000000 1.500000 -1.937500 +v -1.000000 1.500000 -1.562500 +v -0.866026 2.000000 -1.937500 +v -0.866026 2.000000 -1.562500 +v -0.500000 2.366025 -1.937500 +v -0.500000 2.366025 -1.562500 +v 0.000000 2.250000 -1.562500 +v -0.375000 2.149519 -1.562500 +v -0.649519 1.875000 -1.562500 +v -0.750000 1.500000 -1.562500 +v -0.649519 1.125000 -1.562500 +v -0.375000 0.850481 -1.562500 +v 0.000000 0.750000 -1.562500 +v 0.375000 0.850481 -1.562500 +v 0.649519 1.125000 -1.562500 +v 0.750000 1.500000 -1.562500 +v 0.649519 1.874999 -1.562500 +v 0.375000 2.149519 -1.562500 +v 0.000000 2.250000 -1.937500 +v -0.375000 2.149519 -1.937500 +v -0.649519 1.875000 -1.937500 +v -0.750000 1.500000 -1.937500 +v -0.649519 1.125000 -1.937500 +v -0.375000 0.850481 -1.937500 +v 0.000000 0.750000 -1.937500 +v 0.375000 0.850481 -1.937500 +v 0.649519 1.125000 -1.937500 +v 0.750000 1.500000 -1.937500 +v 0.649519 1.874999 -1.937500 +v 0.375000 2.149519 -1.937500 +v -0.375000 2.149519 -1.625000 +v 0.000000 2.250000 -1.625000 +v -0.649519 1.875000 -1.625000 +v -0.750000 1.500000 -1.625000 +v -0.649519 1.125000 -1.625000 +v -0.375000 0.850481 -1.625000 +v 0.000000 0.750000 -1.625000 +v 0.375000 0.850481 -1.625000 +v 0.649519 1.125000 -1.625000 +v 0.750000 1.500000 -1.625000 +v 0.649519 1.874999 -1.625000 +v 0.375000 2.149519 -1.625000 +v -0.375000 2.149519 -1.875000 +v 0.000000 2.250000 -1.875000 +v -0.649519 1.875000 -1.875000 +v -0.750000 1.500000 -1.875000 +v -0.649519 1.125000 -1.875000 +v -0.375000 0.850481 -1.875000 +v 0.000000 0.750000 -1.875000 +v 0.375000 0.850481 -1.875000 +v 0.649519 1.125000 -1.875000 +v 0.750000 1.500000 -1.875000 +v 0.649519 1.874999 -1.875000 +v 0.375000 2.149519 -1.875000 +vt 0.981061 0.136364 +vt 0.996212 0.176136 +vt 0.981061 0.181818 +vt 0.996212 0.221591 +vt 0.981061 0.227273 +vt 0.996212 0.267045 +vt 0.981061 0.272727 +vt 0.996212 0.312500 +vt 0.981061 0.318182 +vt 0.996212 0.357955 +vt 0.981061 0.363636 +vt 0.996212 0.403409 +vt 0.981061 0.409091 +vt 0.996212 0.448864 +vt 0.981061 0.454545 +vt 0.996212 0.494318 +vt 0.981061 0.500000 +vt 0.996212 0.539773 +vt 0.981061 0.545455 +vt 0.981061 -0.000000 +vt 0.996212 0.039773 +vt 0.981061 0.045455 +vt 0.996212 0.085227 +vt 0.981061 0.090909 +vt 0.996212 0.096591 +vt 0.958333 0.136364 +vt 0.943182 0.176136 +vt 0.943182 0.142045 +vt 0.958333 0.181818 +vt 0.943182 0.221591 +vt 0.943182 0.187500 +vt 0.958333 0.227273 +vt 0.943182 0.267045 +vt 0.943182 0.232955 +vt 0.958333 0.272727 +vt 0.943182 0.312500 +vt 0.943182 0.278409 +vt 0.958333 0.318182 +vt 0.943182 0.357955 +vt 0.943182 0.323864 +vt 0.958333 0.363636 +vt 0.943182 0.403409 +vt 0.943182 0.369318 +vt 0.958333 0.409091 +vt 0.943182 0.448864 +vt 0.943182 0.414773 +vt 0.958333 0.454545 +vt 0.943182 0.494318 +vt 0.943182 0.460227 +vt 0.958333 0.500000 +vt 0.943182 0.539773 +vt 0.943182 0.505682 +vt 0.958333 -0.000000 +vt 0.943182 0.039773 +vt 0.943182 0.005682 +vt 0.958333 0.045455 +vt 0.943182 0.085227 +vt 0.943182 0.051136 +vt 0.943182 0.096591 +vt 0.958333 0.090909 +vt 0.963603 0.647724 +vt 0.924242 0.681811 +vt 0.884882 0.579549 +vt 0.884882 0.784087 +vt 0.924242 0.681826 +vt 0.963603 0.784087 +vt 0.996212 0.142045 +vt 0.996212 0.187500 +vt 0.996212 0.232955 +vt 0.996212 0.278409 +vt 0.996212 0.323864 +vt 0.996212 0.369318 +vt 0.996212 0.414773 +vt 0.996212 0.460227 +vt 0.996212 0.505682 +vt 0.996212 0.005682 +vt 0.996212 0.051136 +vt 0.996212 0.130682 +vt 0.958333 0.545455 +vt 0.943182 0.130682 +vt 0.901518 0.672677 +vt 0.884882 0.647724 +vt 0.878793 0.613636 +vt 0.901518 0.554596 +vt 0.963603 0.579549 +vt 0.924242 0.545462 +vt 0.946967 0.554596 +vt 0.969692 0.613636 +vt 0.946967 0.672677 +vt 0.946967 0.809041 +vt 0.924242 0.818175 +vt 0.901518 0.809041 +vt 0.878793 0.750000 +vt 0.884882 0.715913 +vt 0.901518 0.690959 +vt 0.946967 0.690959 +vt 0.963603 0.715913 +vt 0.969692 0.750000 +vt 1.000000 0.556818 +vt 0.969697 0.545455 +vt 1.000000 0.545455 +vt 1.000000 0.625000 +vt 0.969697 0.613636 +vt 1.000000 0.613636 +vt 1.000000 0.602273 +vt 0.969697 0.590909 +vt 1.000000 0.590909 +vt 0.969697 0.579545 +vt 1.000000 0.579545 +vt 1.000000 0.568182 +vt 0.969697 0.556818 +vt 1.000000 0.636364 +vt 0.969697 0.625000 +vt 0.969697 0.602273 +vt 0.969697 0.568182 +vt 1.000000 0.403409 +vt 0.939394 0.460227 +vt 0.939394 0.232955 +vt 0.939394 0.323864 +vt 0.939394 0.096591 +vt 0.939394 0.505682 +vt 0.939394 0.369318 +vt 0.939394 0.142045 +vt 0.939394 0.005682 +vt 0.939394 0.414773 +vt 0.939394 0.187500 +vt 0.939394 0.278409 +vt 0.939394 0.051136 +vt 1.000000 0.176136 +vt 1.000000 0.039773 +vt 1.000000 0.448864 +vt 1.000000 0.221591 +vt 1.000000 0.312500 +vt 1.000000 0.085227 +vt 1.000000 0.494318 +vt 1.000000 0.267045 +vt 1.000000 0.357955 +vt 1.000000 0.130682 +vt 1.000000 0.539773 +vt 0.969697 0.636364 +vt 1.000000 0.369318 +vt 0.939394 0.494318 +vt 0.939394 0.267045 +vt 0.939394 0.357955 +vt 0.939394 0.130682 +vt 0.939394 0.539773 +vt 0.939394 0.403409 +vt 0.939394 0.176136 +vt 0.939394 0.039773 +vt 0.939394 0.448864 +vt 0.939394 0.221591 +vt 0.939394 0.312500 +vt 0.939394 0.085227 +vt 1.000000 0.142045 +vt 1.000000 0.005682 +vt 1.000000 0.414773 +vt 1.000000 0.187500 +vt 1.000000 0.278409 +vt 1.000000 0.051136 +vt 1.000000 0.460227 +vt 1.000000 0.232955 +vt 1.000000 0.323864 +vt 1.000000 0.096591 +vt 1.000000 0.505682 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.5000 0.8660 0.0000 +vn 0.8660 0.5000 0.0000 +vn 0.8660 -0.5000 0.0000 +vn 0.5000 -0.8660 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.8660 -0.5000 0.0000 +vn -0.8660 0.5000 0.0000 +vn -0.5000 0.8660 0.0000 +s off +f 23/1/1 63/2/1 21/3/1 +f 21/3/1 64/4/1 19/5/1 +f 19/5/1 53/6/1 17/7/1 +f 17/7/1 54/8/1 39/9/1 +f 39/9/1 55/10/1 37/11/1 +f 37/11/1 56/12/1 35/13/1 +f 35/13/1 57/14/1 33/15/1 +f 33/15/1 58/16/1 31/17/1 +f 31/17/1 59/18/1 29/19/1 +f 29/20/1 60/21/1 27/22/1 +f 27/22/1 61/23/1 25/24/1 +f 61/25/1 23/1/1 25/24/1 +f 24/26/2 51/27/2 50/28/2 +f 22/29/2 52/30/2 51/31/2 +f 20/32/2 41/33/2 52/34/2 +f 18/35/2 42/36/2 41/37/2 +f 40/38/2 43/39/2 42/40/2 +f 38/41/2 44/42/2 43/43/2 +f 36/44/2 45/45/2 44/46/2 +f 34/47/2 46/48/2 45/49/2 +f 32/50/2 47/51/2 46/52/2 +f 30/53/2 48/54/2 47/55/2 +f 28/56/2 49/57/2 48/58/2 +f 24/26/2 49/59/2 26/60/2 +f 75/61/2 66/62/2 69/63/2 +f 87/64/1 83/65/1 79/66/1 +f 23/1/1 62/67/1 63/2/1 +f 21/3/1 63/68/1 64/4/1 +f 19/5/1 64/69/1 53/6/1 +f 17/7/1 53/70/1 54/8/1 +f 39/9/1 54/71/1 55/10/1 +f 37/11/1 55/72/1 56/12/1 +f 35/13/1 56/73/1 57/14/1 +f 33/15/1 57/74/1 58/16/1 +f 31/17/1 58/75/1 59/18/1 +f 29/20/1 59/76/1 60/21/1 +f 27/22/1 60/77/1 61/23/1 +f 61/25/1 62/78/1 23/1/1 +f 24/26/2 22/29/2 51/27/2 +f 22/29/2 20/32/2 52/30/2 +f 20/32/2 18/35/2 41/33/2 +f 18/35/2 40/38/2 42/36/2 +f 40/38/2 38/41/2 43/39/2 +f 38/41/2 36/44/2 44/42/2 +f 36/44/2 34/47/2 45/45/2 +f 34/47/2 32/50/2 46/48/2 +f 32/50/2 30/79/2 47/51/2 +f 30/53/2 28/56/2 48/54/2 +f 28/56/2 26/60/2 49/57/2 +f 24/26/2 50/80/2 49/59/2 +f 66/62/2 65/81/2 67/82/2 +f 67/82/2 68/83/2 69/63/2 +f 69/63/2 70/84/2 73/85/2 +f 70/84/2 71/86/2 73/85/2 +f 71/86/2 72/87/2 73/85/2 +f 73/85/2 74/88/2 75/61/2 +f 75/61/2 76/89/2 66/62/2 +f 66/62/2 67/82/2 69/63/2 +f 73/85/2 75/61/2 69/63/2 +f 79/66/1 77/90/1 87/64/1 +f 77/90/1 78/91/1 87/64/1 +f 78/91/1 88/92/1 87/64/1 +f 87/64/1 86/93/1 85/94/1 +f 85/94/1 84/95/1 83/65/1 +f 83/65/1 82/96/1 79/66/1 +f 82/96/1 81/97/1 79/66/1 +f 81/97/1 80/98/1 79/66/1 +f 87/64/1 85/94/1 83/65/1 +s 1 +f 6/99/3 13/100/4 5/101/4 +f 4/102/5 11/103/6 3/104/6 +f 2/105/7 9/106/8 1/107/8 +f 1/107/8 16/108/9 8/109/9 +f 7/110/10 14/111/3 6/99/3 +f 5/112/4 12/113/5 4/102/5 +f 3/104/6 10/114/7 2/105/7 +f 8/109/9 15/115/10 7/110/10 +f 18/35/8 19/5/11 17/7/8 +f 20/32/11 21/3/12 19/5/11 +f 22/29/12 23/1/10 21/3/12 +f 24/26/10 25/24/13 23/1/10 +f 26/60/13 27/22/14 25/24/13 +f 28/56/14 29/20/4 27/22/14 +f 30/79/4 31/17/15 29/19/4 +f 32/50/15 33/15/16 31/17/15 +f 34/47/16 35/13/6 33/15/16 +f 36/44/6 37/11/17 35/13/6 +f 38/41/17 39/9/18 37/11/17 +f 40/38/18 17/7/8 39/9/18 +f 55/72/13 80/116/10 56/12/10 +f 46/48/11 69/117/12 45/49/12 +f 41/33/4 76/118/15 52/34/15 +f 43/39/13 65/119/14 42/40/14 +f 50/80/6 73/120/17 49/59/17 +f 47/51/8 70/121/11 46/52/11 +f 44/42/10 67/122/13 43/43/13 +f 51/27/16 74/123/6 50/28/6 +f 48/54/18 71/124/8 47/55/8 +f 45/45/12 68/125/10 44/46/10 +f 52/30/15 75/126/16 51/31/16 +f 42/36/14 66/127/4 41/37/4 +f 49/57/17 72/128/18 48/58/18 +f 62/67/6 87/129/16 63/2/16 +f 59/76/8 84/130/18 60/21/18 +f 56/73/10 81/131/12 57/14/12 +f 63/68/16 88/132/15 64/4/15 +f 53/70/4 77/133/14 54/8/14 +f 60/77/18 85/134/17 61/23/17 +f 57/74/12 82/135/11 58/16/11 +f 64/69/15 78/136/4 53/6/4 +f 54/71/14 79/137/13 55/10/13 +f 61/25/17 86/138/6 62/78/6 +f 58/75/11 83/139/8 59/18/8 +f 6/99/3 14/111/3 13/100/4 +f 4/102/5 12/113/5 11/103/6 +f 2/105/7 10/114/7 9/106/8 +f 1/107/8 9/106/8 16/108/9 +f 7/110/10 15/115/10 14/111/3 +f 5/112/4 13/140/4 12/113/5 +f 3/104/6 11/103/6 10/114/7 +f 8/109/9 16/108/9 15/115/10 +f 18/35/8 20/32/11 19/5/11 +f 20/32/11 22/29/12 21/3/12 +f 22/29/12 24/26/10 23/1/10 +f 24/26/10 26/60/13 25/24/13 +f 26/60/13 28/56/14 27/22/14 +f 28/56/14 30/53/4 29/20/4 +f 30/79/4 32/50/15 31/17/15 +f 32/50/15 34/47/16 33/15/16 +f 34/47/16 36/44/6 35/13/6 +f 36/44/6 38/41/17 37/11/17 +f 38/41/17 40/38/18 39/9/18 +f 40/38/18 18/35/8 17/7/8 +f 55/72/13 79/141/13 80/116/10 +f 46/48/11 70/142/11 69/117/12 +f 41/33/4 66/143/4 76/118/15 +f 43/39/13 67/144/13 65/119/14 +f 50/80/6 74/145/6 73/120/17 +f 47/51/8 71/146/8 70/121/11 +f 44/42/10 68/147/10 67/122/13 +f 51/27/16 75/148/16 74/123/6 +f 48/54/18 72/149/18 71/124/8 +f 45/45/12 69/150/12 68/125/10 +f 52/30/15 76/151/15 75/126/16 +f 42/36/14 65/152/14 66/127/4 +f 49/57/17 73/153/17 72/128/18 +f 62/67/6 86/154/6 87/129/16 +f 59/76/8 83/155/8 84/130/18 +f 56/73/10 80/156/10 81/131/12 +f 63/68/16 87/157/16 88/132/15 +f 53/70/4 78/158/4 77/133/14 +f 60/77/18 84/159/18 85/134/17 +f 57/74/12 81/160/12 82/135/11 +f 64/69/15 88/161/15 78/136/4 +f 54/71/14 77/162/14 79/137/13 +f 61/25/17 85/163/17 86/138/6 +f 58/75/11 82/164/11 83/139/8 +o Gauuge_Gauge +v -0.031250 1.531250 3.468750 +v -0.031250 1.468750 3.468750 +v 0.031250 1.531250 3.468750 +v 0.031250 1.468750 3.468750 +v 0.031250 1.531250 3.500000 +v -0.031250 1.531250 3.500000 +v -0.031250 1.468750 3.500000 +v 0.031250 1.468750 3.500000 +v 0.000000 1.656250 3.468750 +v 0.000000 1.656250 3.500000 +vt 0.606061 0.573864 +vt 0.602273 0.551136 +vt 0.606061 0.551136 +vt 0.594697 0.539773 +vt 0.602273 0.539773 +vt 0.606061 0.539773 +vt 0.590909 0.539773 +vt 0.594697 0.551136 +vt 0.590909 0.551136 +vt 0.602273 0.534091 +vt 0.594697 0.534091 +vt 0.594697 0.573864 +vt 0.590909 0.573864 +vt 0.602273 0.573864 +vt 0.598485 0.573864 +vn 0.9701 0.2425 0.0000 +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.9701 0.2425 0.0000 +s off +f 97/165/19 93/166/19 91/167/19 +f 95/168/20 96/169/20 93/166/20 +f 91/167/21 96/169/21 92/170/21 +f 90/171/22 94/172/22 89/173/22 +f 92/174/23 95/168/23 90/175/23 +f 89/173/24 98/176/24 97/177/24 +f 97/165/19 98/178/19 93/166/19 +f 98/179/20 94/172/20 93/166/20 +f 94/172/20 95/168/20 93/166/20 +f 91/167/21 93/166/21 96/169/21 +f 90/171/22 95/168/22 94/172/22 +f 92/174/23 96/169/23 95/168/23 +f 89/173/24 94/172/24 98/176/24 +o Turbine +v -1.250000 0.000000 3.500000 +v 1.250000 0.000000 3.500000 +v -1.250000 0.000000 -3.500000 +v 1.250000 0.000000 -3.500000 +v -1.250000 0.500000 -3.500000 +v -1.250000 0.500000 3.500000 +v 1.250000 0.500000 3.500000 +v 1.250000 0.500000 -3.500000 +v -1.250000 0.500000 3.500000 +v 1.250000 0.500000 3.500000 +v -1.250000 0.500000 2.500000 +v 1.250000 0.500000 2.500000 +v -1.250000 0.625000 3.500000 +v 1.250000 0.625000 3.500000 +v -1.250000 0.625000 2.500000 +v 1.250000 0.625000 2.500000 +v -1.000000 0.875000 3.500000 +v 1.000000 0.875000 3.500000 +v -1.000000 0.875000 2.500000 +v 1.000000 0.875000 2.500000 +v -1.000000 2.250000 3.500000 +v 1.000000 2.250000 3.500000 +v -1.000000 2.250000 2.500000 +v 1.000000 2.250000 2.500000 +v 1.000000 2.250000 -1.500000 +v -1.000000 2.250000 -1.500000 +v 1.000000 2.250000 -0.500000 +v -1.000000 2.250000 -0.500000 +v 1.000000 0.875000 -1.500000 +v -1.000000 0.875000 -1.500000 +v 1.000000 0.875000 -0.500000 +v -1.000000 0.875000 -0.500000 +v 1.250000 0.625000 -1.500000 +v -1.250000 0.625000 -1.500000 +v 1.250000 0.625000 -0.500000 +v -1.250000 0.625000 -0.500000 +v 1.250000 0.500000 -1.500000 +v -1.250000 0.500000 -1.500000 +v 1.250000 0.500000 -0.500000 +v -1.250000 0.500000 -0.500000 +v 0.000000 2.500000 0.000000 +v -0.500000 2.366025 0.000000 +v -0.866025 2.000000 0.000000 +v -1.000000 1.500000 0.000000 +v -0.866025 1.000000 0.000000 +v -0.500000 0.633975 0.000000 +v 0.000000 0.500000 0.000000 +v 0.500000 0.633975 0.000000 +v 0.866025 1.000000 0.000000 +v 1.000000 1.500000 0.000000 +v 0.866026 2.000000 0.000000 +v 0.500000 2.366025 0.000000 +v 0.000000 2.500000 0.750000 +v -0.500000 2.366025 0.750000 +v -0.866025 2.000000 0.750000 +v -1.000000 1.500000 0.750000 +v -0.866025 1.000000 0.750000 +v -0.500000 0.633975 0.750000 +v 0.000000 0.500000 0.750000 +v 0.500000 0.633975 0.750000 +v 0.866025 1.000000 0.750000 +v 1.000000 1.500000 0.750000 +v 0.866026 2.000000 0.750000 +v 0.500000 2.366025 0.750000 +v 0.000000 2.250000 0.000000 +v -0.375000 2.149519 0.000000 +v -0.649519 1.875000 0.000000 +v -0.750000 1.500000 0.000000 +v -0.649519 1.125000 0.000000 +v -0.375000 0.850481 0.000000 +v 0.000000 0.750000 0.000000 +v 0.375000 0.850481 0.000000 +v 0.649519 1.125000 0.000000 +v 0.750000 1.500000 0.000000 +v 0.649519 1.875000 0.000000 +v 0.375000 2.149519 0.000000 +v 0.000000 2.000000 -0.250000 +v -0.250000 1.933013 -0.250000 +v -0.433013 1.750000 -0.250000 +v -0.500000 1.500000 -0.250000 +v -0.433013 1.250000 -0.250000 +v -0.250000 1.066988 -0.250000 +v 0.000000 1.000000 -0.250000 +v 0.250000 1.066988 -0.250000 +v 0.433012 1.250000 -0.250000 +v 0.500000 1.500000 -0.250000 +v 0.433013 1.750000 -0.250000 +v 0.250000 1.933013 -0.250000 +v 0.000000 2.250000 -0.250000 +v -0.375000 2.149519 -0.250000 +v -0.649519 1.875000 -0.250000 +v -0.750000 1.500000 -0.250000 +v -0.649519 1.125000 -0.250000 +v -0.375000 0.850481 -0.250000 +v 0.000000 0.750000 -0.250000 +v 0.375000 0.850481 -0.250000 +v 0.649519 1.125000 -0.250000 +v 0.750000 1.500000 -0.250000 +v 0.649519 1.875000 -0.250000 +v 0.375000 2.149519 -0.250000 +v 0.000000 2.000000 -0.500000 +v -0.250000 1.933013 -0.500000 +v -0.433013 1.750000 -0.500000 +v -0.500000 1.500000 -0.500000 +v -0.433013 1.250000 -0.500000 +v -0.250000 1.066988 -0.500000 +v 0.000000 1.000000 -0.500000 +v 0.250000 1.066988 -0.500000 +v 0.433012 1.250000 -0.500000 +v 0.500000 1.500000 -0.500000 +v 0.433013 1.750000 -0.500000 +v 0.250000 1.933013 -0.500000 +v 0.000000 2.250000 0.750000 +v -0.375000 2.149519 0.750000 +v -0.649519 1.875000 0.750000 +v -0.750000 1.500000 0.750000 +v -0.649519 1.125000 0.750000 +v -0.375000 0.850481 0.750000 +v 0.000000 0.750000 0.750000 +v 0.375000 0.850481 0.750000 +v 0.649519 1.125000 0.750000 +v 0.750000 1.500000 0.750000 +v 0.649519 1.875000 0.750000 +v 0.375000 2.149519 0.750000 +v 0.000000 2.250000 1.750000 +v -0.375000 2.149519 1.750000 +v -0.649519 1.875000 1.750000 +v -0.750000 1.500000 1.750000 +v -0.649519 1.125000 1.750000 +v -0.375000 0.850481 1.750000 +v 0.000000 0.750000 1.750000 +v 0.375000 0.850481 1.750000 +v 0.649519 1.125000 1.750000 +v 0.750000 1.500000 1.750000 +v 0.649519 1.875000 1.750000 +v 0.375000 2.149519 1.750000 +v 0.000000 2.000000 1.750000 +v -0.250000 1.933013 1.750000 +v -0.433013 1.750000 1.750000 +v -0.500000 1.500000 1.750000 +v -0.433013 1.250000 1.750000 +v -0.250000 1.066988 1.750000 +v 0.000000 1.000000 1.750000 +v 0.250000 1.066988 1.750000 +v 0.433012 1.250000 1.750000 +v 0.500000 1.500000 1.750000 +v 0.433013 1.750000 1.750000 +v 0.250000 1.933013 1.750000 +v 0.000000 2.000000 2.500000 +v -0.250000 1.933013 2.500000 +v -0.433013 1.750000 2.500000 +v -0.500000 1.500000 2.500000 +v -0.433013 1.250000 2.500000 +v -0.250000 1.066988 2.500000 +v 0.000000 1.000000 2.500000 +v 0.250000 1.066988 2.500000 +v 0.433012 1.250000 2.500000 +v 0.500000 1.500000 2.500000 +v 0.433013 1.750000 2.500000 +v 0.250000 1.933013 2.500000 +v 1.500000 0.750000 3.250000 +v 1.500000 0.250000 3.250000 +v 1.500000 0.750000 2.750000 +v 1.500000 0.250000 2.750000 +v 1.125000 0.750000 2.750000 +v 1.125000 0.750000 3.250000 +v 1.125000 0.250000 3.250000 +v 1.125000 0.250000 2.750000 +v 1.500000 0.750000 -0.750000 +v 1.500000 0.250000 -0.750000 +v 1.500000 0.750000 -1.250000 +v 1.500000 0.250000 -1.250000 +v 1.125000 0.750000 -1.250000 +v 1.125000 0.750000 -0.750000 +v 1.125000 0.250000 -0.750000 +v 1.125000 0.250000 -1.250000 +v -0.250000 3.000000 3.250000 +v 0.250000 3.000000 3.250000 +v -0.250000 3.000000 2.750000 +v 0.250000 3.000000 2.750000 +v -0.250000 2.750000 2.750000 +v -0.250000 2.750000 3.250000 +v 0.250000 2.750000 3.250000 +v 0.250000 2.750000 2.750000 +v -0.500000 2.750000 3.500000 +v 0.500000 2.750000 3.500000 +v -0.500000 2.750000 2.500000 +v 0.500000 2.750000 2.500000 +v -0.250000 3.000000 -0.750000 +v 0.250000 3.000000 -0.750000 +v -0.250000 3.000000 -1.250000 +v 0.250000 3.000000 -1.250000 +v -0.250000 2.750000 -1.250000 +v -0.250000 2.750000 -0.750000 +v 0.250000 2.750000 -0.750000 +v 0.250000 2.750000 -1.250000 +v -0.500000 2.750000 -0.500000 +v 0.500000 2.750000 -0.500000 +v -0.500000 2.750000 -1.500000 +v 0.500000 2.750000 -1.500000 +v -0.250000 0.625000 2.500000 +v 0.250000 0.625000 2.500000 +v -0.250000 0.625000 -0.500000 +v 0.250000 0.625000 -0.500000 +v -0.250000 1.500000 -0.500000 +v -0.250000 1.500000 2.500000 +v 0.250000 1.500000 2.500000 +v 0.250000 1.500000 -0.500000 +v 0.750000 0.625000 2.500000 +v 0.750000 0.625000 -0.500000 +v -0.750000 0.625000 2.500000 +v -0.750000 0.625000 -0.500000 +v 0.750000 0.500000 2.500000 +v 0.750000 0.500000 -0.500000 +v -0.750000 0.500000 2.500000 +v -0.750000 0.500000 -0.500000 +v -1.382583 0.750000 -0.867417 +v -1.437500 0.750000 -1.000000 +v -1.382583 0.750000 -1.132582 +v -1.250000 0.750000 -1.187500 +v -1.117418 0.750000 -1.132582 +v -1.062500 0.750000 -1.000000 +v -1.117418 0.750000 -0.867418 +v -1.250000 0.750000 -0.812500 +v -1.062500 2.367417 3.132582 +v -1.062500 2.367417 2.867418 +v -1.062500 2.500000 2.812500 +v -1.062500 2.632582 2.867418 +v -1.062500 2.687500 3.000000 +v -1.062500 2.632582 3.132582 +v -0.562500 2.312500 3.000000 +v -0.562500 2.500000 3.187500 +v -0.562500 2.367417 3.132582 +v -0.562500 2.367417 2.867418 +v -0.562500 2.500000 2.812500 +v -0.562500 2.632582 2.867418 +v -0.562500 2.687500 3.000000 +v -0.562500 2.632582 3.132582 +v 0.562500 2.632582 -1.132582 +v 0.562500 2.687500 -1.000000 +v -0.625000 0.625000 2.312500 +v 0.625000 0.625000 2.312500 +v -0.625000 0.625000 2.187500 +v 0.625000 0.625000 2.187500 +v -0.625000 0.875000 2.187500 +v -0.625000 0.875000 2.312500 +v 0.625000 0.875000 2.312500 +v 0.625000 0.875000 2.187500 +v -0.375000 1.125000 2.187500 +v -0.375000 1.125000 2.312500 +v 0.375000 1.125000 2.312500 +v 0.375000 1.125000 2.187500 +v 0.562500 2.632582 -0.867418 +v 0.562500 2.500000 -0.812500 +v 0.562500 2.367417 -0.867418 +v 0.562500 2.367417 -1.132582 +v 0.562500 2.500000 -1.187500 +v 0.562500 2.312500 -1.000000 +v 1.062500 2.632582 -1.132582 +v 1.062500 2.687500 -1.000000 +v 1.062500 2.632582 -0.867418 +v 1.062500 2.500000 -0.812500 +v 1.062500 2.367417 -0.867418 +v 1.062500 2.367417 -1.132582 +v 1.250000 0.750000 2.812500 +v 1.117417 0.750000 2.867418 +v 1.062500 0.750000 3.000000 +v 1.117417 0.750000 3.132582 +v 1.250000 0.750000 3.187500 +v 1.382583 0.750000 3.132582 +v 1.437500 0.750000 3.000000 +v 1.382583 0.750000 2.867418 +v 1.250000 2.312500 2.812500 +v 1.117417 2.312500 2.867418 +v 1.062500 2.312500 3.000000 +v 1.117417 2.312500 3.132582 +v 1.250000 2.312500 3.187500 +v 1.382583 2.312500 3.132582 +v 1.437500 2.312500 3.000000 +v 1.382583 2.312500 2.867418 +v 1.195083 2.445082 2.812500 +v 1.101333 2.351332 2.867418 +v 1.101333 2.351332 3.132582 +v 1.195083 2.445082 3.187500 +v 1.288833 2.538832 3.132582 +v 1.327665 2.577665 3.000000 +v 1.288833 2.538832 2.867418 +v 1.062500 2.500000 2.812500 +v 1.062500 2.367417 2.867418 +v 1.062500 2.367417 3.132582 +v 1.062500 2.500000 3.187500 +v 1.062500 2.632582 3.132582 +v 1.062500 2.687500 3.000000 +v 1.062500 2.632582 2.867418 +v 0.562500 2.312500 3.000000 +v 0.562500 2.500000 2.812500 +v 0.562500 2.367417 2.867418 +v 0.562500 2.367417 3.132582 +v 0.562500 2.500000 3.187500 +v 0.562500 2.632582 3.132582 +v 0.562500 2.687500 3.000000 +v 0.562500 2.632582 2.867418 +v -1.500000 0.750000 -1.250000 +v -1.500000 0.250000 -1.250000 +v -1.500000 0.750000 -0.750000 +v -1.500000 0.250000 -0.750000 +v -1.125000 0.750000 -0.750000 +v -1.125000 0.750000 -1.250000 +v -1.125000 0.250000 -1.250000 +v -1.125000 0.250000 -0.750000 +v -1.500000 0.750000 2.750000 +v -1.500000 0.250000 2.750000 +v -1.500000 0.750000 3.250000 +v -1.500000 0.250000 3.250000 +v -1.125000 0.750000 3.250000 +v -1.125000 0.750000 2.750000 +v -1.125000 0.250000 2.750000 +v -1.125000 0.250000 3.250000 +v 0.000000 2.250000 -2.000000 +v -0.375000 2.149519 -2.000000 +v -0.649519 1.875000 -2.000000 +v -0.750000 1.500000 -2.000000 +v -0.649519 1.125000 -2.000000 +v -0.375000 0.850481 -2.000000 +v 0.000000 0.750000 -2.000000 +v 0.375000 0.850481 -2.000000 +v 0.649519 1.125000 -2.000000 +v 0.750000 1.500000 -2.000000 +v 0.649519 1.875000 -2.000000 +v 0.375000 2.149519 -2.000000 +v 0.000000 2.250000 -3.500000 +v -0.375000 2.149519 -3.500000 +v -0.649519 1.875000 -3.500000 +v -0.750000 1.500000 -3.500000 +v -0.649519 1.125000 -3.500000 +v -0.375000 0.850481 -3.500000 +v 0.000000 0.750000 -3.500000 +v 0.375000 0.850481 -3.500000 +v 0.649519 1.125000 -3.500000 +v 0.750000 1.500000 -3.500000 +v 0.649519 1.875000 -3.500000 +v 0.375000 2.149519 -3.500000 +v 0.250000 0.625000 -2.125000 +v 0.250000 1.500000 -2.125000 +v 0.750000 0.625000 -2.125000 +v 0.750000 0.500000 -2.125000 +v 0.250000 0.625000 -3.375000 +v 0.250000 1.500000 -3.375000 +v 0.750000 0.625000 -3.375000 +v 0.750000 0.500000 -3.375000 +v -0.250000 0.625000 -2.125000 +v -0.250000 1.500000 -2.125000 +v -0.750000 0.625000 -2.125000 +v -0.750000 0.500000 -2.125000 +v -0.250000 0.625000 -3.375000 +v -0.250000 1.500000 -3.375000 +v -0.750000 0.625000 -3.375000 +v -0.750000 0.500000 -3.375000 +v 1.062500 2.500000 -1.187500 +v 1.288833 2.538832 -1.132582 +v 1.327665 2.577665 -1.000000 +v 1.288833 2.538832 -0.867418 +v 1.195083 2.445082 -0.812500 +v 1.101333 2.351332 -0.867418 +v 1.101333 2.351332 -1.132582 +v 1.195083 2.445082 -1.187500 +v 1.382583 2.312500 -1.132582 +v 1.437500 2.312500 -1.000000 +v 1.382583 2.312500 -0.867418 +v 1.250000 2.312500 -0.812500 +v 1.117417 2.312500 -0.867418 +v 1.062500 2.312500 -1.000000 +v 1.117417 2.312500 -1.132582 +v 1.250000 2.312500 -1.187500 +v 1.382583 0.750000 -1.132582 +v 1.437500 0.750000 -1.000000 +v 1.382583 0.750000 -0.867418 +v 1.250000 0.750000 -0.812500 +v 1.117417 0.750000 -0.867418 +v 1.062500 0.750000 -1.000000 +v 1.117417 0.750000 -1.132582 +v 1.250000 0.750000 -1.187500 +v -0.500000 1.000000 3.375000 +v 0.500000 1.000000 3.375000 +v -0.500000 2.000000 3.375000 +v 0.500000 2.000000 3.375000 +v -0.500000 2.250000 3.500000 +v 0.500000 2.250000 3.500000 +v -0.500000 0.750000 3.500000 +v 0.500000 0.750000 3.500000 +v 0.000000 1.750000 3.406250 +v -0.176777 1.676777 3.406250 +v -0.250000 1.500000 3.406250 +v -0.176777 1.323223 3.406250 +v 0.000000 1.250000 3.406250 +v 0.176777 1.323223 3.406250 +v 0.250000 1.500000 3.406250 +v 0.176777 1.676777 3.406250 +v 0.000000 1.750000 3.468750 +v -0.176777 1.676777 3.468750 +v -0.250000 1.500000 3.468750 +v -0.176777 1.323223 3.468750 +v 0.000000 1.250000 3.468750 +v 0.176777 1.323223 3.468750 +v 0.250000 1.500000 3.468750 +v 0.176777 1.676777 3.468750 +v -0.500000 1.468750 3.375000 +v 0.500000 1.468750 3.375000 +v -0.500000 1.531250 3.375000 +v 0.500000 1.531250 3.375000 +v -0.500000 1.531250 3.437500 +v -0.500000 1.468750 3.437500 +v 0.500000 1.468750 3.437500 +v 0.500000 1.531250 3.437500 +v -0.500000 1.593750 3.375000 +v 0.500000 1.593750 3.375000 +v -0.500000 1.656250 3.375000 +v 0.500000 1.656250 3.375000 +v -0.500000 1.656250 3.437500 +v -0.500000 1.593750 3.437500 +v 0.500000 1.593750 3.437500 +v 0.500000 1.656250 3.437500 +v -0.500000 1.343750 3.375000 +v 0.500000 1.343750 3.375000 +v -0.500000 1.406250 3.375000 +v 0.500000 1.406250 3.375000 +v -0.500000 1.406250 3.437500 +v -0.500000 1.343750 3.437500 +v 0.500000 1.343750 3.437500 +v 0.500000 1.406250 3.437500 +v -0.218750 1.062500 3.375000 +v -0.156250 1.062500 3.375000 +v -0.218750 1.125000 3.375000 +v -0.156250 1.125000 3.375000 +v -0.218750 1.125000 3.468750 +v -0.218750 1.062500 3.468750 +v -0.156250 1.062500 3.468750 +v -0.156250 1.125000 3.468750 +v -0.121209 1.160041 3.406250 +v -0.093750 1.093750 3.406250 +v -0.121209 1.027459 3.406250 +v -0.187500 1.000000 3.406250 +v -0.253791 1.027459 3.406250 +v -0.281250 1.093750 3.406250 +v -0.253791 1.160041 3.406250 +v -0.187500 1.187500 3.406250 +v -0.110160 1.038507 3.437500 +v -0.242743 1.171090 3.437500 +v -0.264840 1.148993 3.437500 +v -0.132257 1.016410 3.437500 +v -0.242743 1.016410 3.437500 +v -0.110160 1.148993 3.437500 +v -0.132257 1.171090 3.437500 +v -0.264840 1.038507 3.437500 +v 0.125000 0.937500 3.500000 +v 0.375000 0.937500 3.500000 +v 0.125000 1.187500 3.500000 +v 0.375000 1.187500 3.500000 +v 0.375000 1.187500 3.375000 +v 0.125000 1.187500 3.375000 +v 0.375000 0.937500 3.375000 +v 0.125000 0.937500 3.375000 +v -0.187500 1.218750 3.406250 +v -0.275888 1.182138 3.406250 +v -0.312500 1.093750 3.406250 +v -0.275888 1.005362 3.406250 +v -0.187500 0.968750 3.406250 +v -0.099112 1.005362 3.406250 +v -0.062500 1.093750 3.406250 +v -0.099112 1.182138 3.406250 +v -0.187500 1.187500 3.468750 +v -0.121209 1.160041 3.468750 +v -0.093750 1.093750 3.468750 +v -0.121209 1.027459 3.468750 +v -0.187500 1.000000 3.468750 +v -0.253791 1.027459 3.468750 +v -0.281250 1.093750 3.468750 +v -0.253791 1.160041 3.468750 +v -0.275888 1.182138 3.468750 +v -0.187500 1.218750 3.468750 +v -0.312500 1.093750 3.468750 +v -0.275888 1.005362 3.468750 +v -0.187500 0.968750 3.468750 +v -0.099112 1.005362 3.468750 +v -0.062500 1.093750 3.468750 +v -0.099112 1.182138 3.468750 +v -0.625000 0.625000 1.687500 +v 0.625000 0.625000 1.687500 +v -0.625000 0.625000 1.562500 +v 0.625000 0.625000 1.562500 +v -0.625000 0.875000 1.562500 +v -0.625000 0.875000 1.687500 +v 0.625000 0.875000 1.687500 +v 0.625000 0.875000 1.562500 +v -0.375000 1.125000 1.562500 +v -0.375000 1.125000 1.687500 +v 0.375000 1.125000 1.687500 +v 0.375000 1.125000 1.562500 +v -0.625000 0.625000 1.062500 +v 0.625000 0.625000 1.062500 +v -0.625000 0.625000 0.937500 +v 0.625000 0.625000 0.937500 +v -0.625000 0.875000 0.937500 +v -0.625000 0.875000 1.062500 +v 0.625000 0.875000 1.062500 +v 0.625000 0.875000 0.937500 +v -0.375000 1.125000 0.937500 +v -0.375000 1.125000 1.062500 +v 0.375000 1.125000 1.062500 +v 0.375000 1.125000 0.937500 +v -0.625000 0.625000 -0.187500 +v 0.625000 0.625000 -0.187500 +v -0.625000 0.625000 -0.312500 +v 0.625000 0.625000 -0.312500 +v -0.625000 0.875000 -0.312500 +v -0.625000 0.875000 -0.187500 +v 0.625000 0.875000 -0.187500 +v 0.625000 0.875000 -0.312500 +v -0.375000 1.125000 -0.312500 +v -0.375000 1.125000 -0.187500 +v 0.375000 1.125000 -0.187500 +v 0.375000 1.125000 -0.312500 +v -0.625000 0.625000 -2.312500 +v 0.625000 0.625000 -2.312500 +v -0.625000 0.625000 -2.437500 +v 0.625000 0.625000 -2.437500 +v -0.625000 0.875000 -2.437500 +v -0.625000 0.875000 -2.312500 +v 0.625000 0.875000 -2.312500 +v 0.625000 0.875000 -2.437500 +v -0.375000 1.125000 -2.437500 +v -0.375000 1.125000 -2.312500 +v 0.375000 1.125000 -2.312500 +v 0.375000 1.125000 -2.437500 +v -0.625000 0.625000 -3.062500 +v 0.625000 0.625000 -3.062500 +v -0.625000 0.625000 -3.187500 +v 0.625000 0.625000 -3.187500 +v -0.625000 0.875000 -3.187500 +v -0.625000 0.875000 -3.062500 +v 0.625000 0.875000 -3.062500 +v 0.625000 0.875000 -3.187500 +v -0.375000 1.125000 -3.187500 +v -0.375000 1.125000 -3.062500 +v 0.375000 1.125000 -3.062500 +v 0.375000 1.125000 -3.187500 +v -1.250000 2.312500 -0.812500 +v -1.117418 2.312500 -0.867418 +v -1.062500 2.312500 -1.000000 +v -1.117418 2.312500 -1.132582 +v -1.250000 2.312500 -1.187500 +v -1.382583 2.312500 -1.132582 +v -1.437500 2.312500 -1.000000 +v -1.382583 2.312500 -0.867417 +v -1.195083 2.445082 -0.812500 +v -1.101333 2.351332 -0.867418 +v -1.101333 2.351332 -1.132582 +v -1.195083 2.445082 -1.187500 +v -1.288833 2.538832 -1.132582 +v -1.327665 2.577665 -1.000000 +v -1.288833 2.538832 -0.867418 +v -1.062500 2.500000 -0.812500 +v -1.062500 2.367417 -0.867418 +v -1.062500 2.367417 -1.132582 +v -1.062500 2.500000 -1.187500 +v -1.062500 2.632582 -1.132582 +v -1.062500 2.687500 -1.000000 +v -1.062500 2.632582 -0.867418 +v -0.562500 2.312500 -1.000000 +v -0.562500 2.500000 -0.812500 +v -0.562500 2.367417 -0.867418 +v -0.562500 2.367417 -1.132582 +v -0.562500 2.500000 -1.187500 +v -0.562500 2.632582 -1.132582 +v -0.562500 2.687500 -1.000000 +v -0.562500 2.632582 -0.867418 +v -1.062500 2.500000 3.187500 +v -1.288833 2.538832 3.132582 +v -1.327665 2.577665 3.000000 +v -1.288833 2.538832 2.867418 +v -1.195083 2.445082 2.812500 +v -1.101333 2.351332 2.867418 +v -1.101333 2.351332 3.132582 +v -1.195083 2.445082 3.187500 +v -1.382583 2.312500 3.132582 +v -1.437500 2.312500 3.000000 +v -1.382583 2.312500 2.867418 +v -1.250000 2.312500 2.812500 +v -1.117417 2.312500 2.867418 +v -1.062500 2.312500 3.000000 +v -1.117417 2.312500 3.132582 +v -1.250000 2.312500 3.187500 +v -1.382583 0.750000 3.132582 +v -1.437500 0.750000 3.000000 +v -1.382583 0.750000 2.867418 +v -1.250000 0.750000 2.812500 +v -1.117417 0.750000 2.867418 +v -1.062500 0.750000 3.000000 +v -1.117417 0.750000 3.132582 +v -1.250000 0.750000 3.187500 +vt 0.590909 0.465909 +vt 0.454545 0.500000 +vt 0.469697 0.465909 +vt 0.363636 0.681818 +vt 0.212121 0.045455 +vt 0.363636 0.045455 +vt 0.181818 0.045455 +vt 0.030303 0.681818 +vt 0.030303 0.045455 +vt -0.000000 0.045455 +vt -0.000000 0.681818 +vt 0.030303 0.727273 +vt 0.181818 0.681818 +vt 0.181818 0.727273 +vt 0.181818 0.000000 +vt 0.030303 0.000000 +vt 0.212121 0.681818 +vt 0.363636 0.204545 +vt 0.371212 0.295455 +vt 0.363636 0.295455 +vt 0.409091 0.431818 +vt 0.378788 0.477273 +vt 0.378788 0.431818 +vt 0.696970 0.295455 +vt 0.689394 0.204545 +vt 0.696970 0.204545 +vt 0.371212 0.204545 +vt 0.386364 0.295455 +vt 0.386364 0.704545 +vt 0.469697 0.795455 +vt 0.386364 0.795455 +vt 0.674242 0.795455 +vt 0.590909 0.704545 +vt 0.674242 0.704545 +vt 0.590909 0.795455 +vt 0.560606 0.704545 +vt 0.689394 0.295455 +vt 0.674242 0.204545 +vt 0.689394 0.795455 +vt 0.689394 0.704545 +vt 0.590909 0.295455 +vt 0.560606 0.204545 +vt 0.590909 0.204545 +vt 0.674242 0.295455 +vt 0.560606 0.795455 +vt 0.500000 0.704545 +vt 0.386364 0.204545 +vt 0.469697 0.295455 +vt 0.371212 0.704545 +vt 0.371212 0.795455 +vt 0.696970 0.795455 +vt 0.696970 0.704545 +vt 0.363636 0.704545 +vt 0.363636 0.795455 +vt 0.590909 0.965909 +vt 0.454545 1.000000 +vt 0.469697 0.965909 +vt 0.893939 0.142045 +vt 0.878788 0.181818 +vt 0.878788 0.136364 +vt 0.893939 0.187500 +vt 0.878788 0.227273 +vt 0.893939 0.232955 +vt 0.878788 0.272727 +vt 0.893939 0.312500 +vt 0.878788 0.318182 +vt 0.893939 0.357955 +vt 0.878788 0.363636 +vt 0.893939 0.403409 +vt 0.878788 0.409091 +vt 0.893939 0.448864 +vt 0.878788 0.454545 +vt 0.893939 0.494318 +vt 0.878788 0.500000 +vt 0.893939 0.505682 +vt 0.878788 0.545455 +vt 0.893939 0.005682 +vt 0.878788 0.045455 +vt 0.878788 0.000000 +vt 0.893939 0.051136 +vt 0.878788 0.090909 +vt 0.893939 0.096591 +vt 0.924242 0.170455 +vt 0.909091 0.142045 +vt 0.924242 0.147727 +vt 0.924242 0.193182 +vt 0.909091 0.221591 +vt 0.909091 0.187500 +vt 0.924242 0.238636 +vt 0.909091 0.267045 +vt 0.909091 0.232955 +vt 0.924242 0.306818 +vt 0.909091 0.278409 +vt 0.924242 0.284091 +vt 0.924242 0.329545 +vt 0.909091 0.357955 +vt 0.909091 0.323864 +vt 0.924242 0.375000 +vt 0.909091 0.403409 +vt 0.909091 0.369318 +vt 0.924242 0.443182 +vt 0.909091 0.414773 +vt 0.924242 0.420455 +vt 0.924242 0.465909 +vt 0.909091 0.494318 +vt 0.909091 0.460227 +vt 0.924242 0.534091 +vt 0.909091 0.505682 +vt 0.924242 0.511364 +vt 0.924242 0.034091 +vt 0.909091 0.005682 +vt 0.924242 0.011364 +vt 0.924242 0.079545 +vt 0.909091 0.051136 +vt 0.924242 0.056818 +vt 0.924242 0.102273 +vt 0.909091 0.130682 +vt 0.909091 0.096591 +vt 0.833333 0.227273 +vt 0.818182 0.187500 +vt 0.833333 0.181818 +vt 0.833333 0.272727 +vt 0.818182 0.232955 +vt 0.818182 0.312500 +vt 0.818182 0.278409 +vt 0.833333 0.318182 +vt 0.818182 0.357955 +vt 0.818182 0.323864 +vt 0.833333 0.363636 +vt 0.818182 0.403409 +vt 0.818182 0.369318 +vt 0.833333 0.409091 +vt 0.818182 0.448864 +vt 0.818182 0.414773 +vt 0.833333 0.454545 +vt 0.818182 0.494318 +vt 0.818182 0.460227 +vt 0.833333 0.545455 +vt 0.818182 0.505682 +vt 0.833333 0.500000 +vt 0.833333 0.045455 +vt 0.818182 0.005682 +vt 0.833333 0.000000 +vt 0.833333 0.090909 +vt 0.818182 0.051136 +vt 0.833333 0.136364 +vt 0.818182 0.096591 +vt 0.818182 0.142045 +vt 0.757576 0.176136 +vt 0.742424 0.147727 +vt 0.757576 0.142045 +vt 0.757576 0.221591 +vt 0.742424 0.193182 +vt 0.757576 0.187500 +vt 0.757576 0.267045 +vt 0.742424 0.238636 +vt 0.757576 0.232955 +vt 0.757576 0.278409 +vt 0.742424 0.306818 +vt 0.742424 0.284091 +vt 0.757576 0.357955 +vt 0.742424 0.329545 +vt 0.757576 0.323864 +vt 0.757576 0.403409 +vt 0.742424 0.375000 +vt 0.757576 0.369318 +vt 0.757576 0.414773 +vt 0.742424 0.443182 +vt 0.742424 0.420455 +vt 0.757576 0.494318 +vt 0.742424 0.465909 +vt 0.757576 0.460227 +vt 0.757576 0.505682 +vt 0.742424 0.534091 +vt 0.742424 0.511364 +vt 0.757576 0.039773 +vt 0.742424 0.011364 +vt 0.757576 0.005682 +vt 0.757576 0.085227 +vt 0.742424 0.056818 +vt 0.757576 0.051136 +vt 0.757576 0.130682 +vt 0.742424 0.102273 +vt 0.757576 0.096591 +vt 0.386364 0.329545 +vt 0.416667 0.375000 +vt 0.386364 0.375000 +vt 0.386364 0.329545 +vt 0.416667 0.375000 +vt 0.386364 0.375000 +vt 0.363636 0.329545 +vt 0.416667 0.295455 +vt 0.416667 0.329545 +vt 0.386364 0.409091 +vt 0.439394 0.375000 +vt 0.363636 0.329545 +vt 0.416667 0.295455 +vt 0.416667 0.329545 +vt 0.386364 0.409091 +vt 0.439394 0.375000 +vt 0.409091 0.431818 +vt 0.378788 0.477273 +vt 0.378788 0.431818 +vt 0.560606 0.295455 +vt 0.500000 0.204545 +vt 0.424242 0.477273 +vt 0.409091 0.477273 +vt 0.363636 0.431818 +vt 0.378788 0.500000 +vt 0.409091 0.409091 +vt 0.363636 0.431818 +vt 0.469697 0.204545 +vt 0.500000 0.295455 +vt 0.424242 0.477273 +vt 0.409091 0.477273 +vt 0.446970 0.113636 +vt 0.386364 0.136364 +vt 0.386364 0.113636 +vt 0.378788 0.500000 +vt 0.409091 0.409091 +vt 0.469697 0.704545 +vt 0.500000 0.795455 +vt 0.469697 0.534091 +vt 0.606061 0.500000 +vt 0.590909 0.534091 +vt 0.181818 0.988636 +vt -0.000000 1.000000 +vt -0.000000 0.988636 +vt 0.000000 0.738636 +vt 0.181818 0.727273 +vt 0.181818 0.738636 +vt 0.181818 0.943182 +vt -0.000000 0.943182 +vt 0.000000 0.784091 +vt 0.181818 0.784091 +vt 0.000000 0.863636 +vt 0.181818 0.863636 +vt 0.795455 0.818182 +vt 0.871212 0.818182 +vt 0.856061 0.863636 +vt 0.878788 0.818182 +vt 0.871212 0.840909 +vt 0.954545 0.818182 +vt 0.939394 0.863636 +vt 0.787879 0.840909 +vt 0.787879 0.818182 +vt 0.878788 0.840909 +vt 0.871212 0.863636 +vt 0.795455 0.840909 +vt 0.787879 0.863636 +vt 0.386364 0.329545 +vt 0.416667 0.375000 +vt 0.386364 0.375000 +vt 0.386364 0.329545 +vt 0.416667 0.375000 +vt 0.386364 0.375000 +vt 0.363636 0.329545 +vt 0.416667 0.295455 +vt 0.416667 0.329545 +vt 0.386364 0.409091 +vt 0.439394 0.375000 +vt 0.363636 0.329545 +vt 0.416667 0.295455 +vt 0.416667 0.329545 +vt 0.386364 0.409091 +vt 0.439394 0.375000 +vt 0.872709 0.647736 +vt 0.833333 0.681836 +vt 0.793958 0.579536 +vt 0.793958 0.784100 +vt 0.833333 0.681800 +vt 0.872709 0.784100 +vt 0.287879 0.681818 +vt 0.363636 0.693182 +vt 0.287879 0.693182 +vt 0.363636 0.738636 +vt 0.287879 0.818182 +vt 0.287879 0.738636 +vt 0.287879 0.943182 +vt 0.363636 0.954545 +vt 0.287879 0.954545 +vt 0.287879 0.897727 +vt 0.363636 0.943182 +vt 0.363636 0.818182 +vt 0.287879 0.818182 +vt 0.416667 0.840909 +vt 0.363636 0.886364 +vt 0.363636 0.840909 +vt 0.416667 0.886364 +vt 0.424242 0.795455 +vt 0.287879 0.886364 +vt 0.234848 0.840909 +vt 0.287879 0.840909 +vt 0.234848 0.886364 +vt 0.227273 0.931818 +vt 0.227273 0.795455 +vt 0.446970 0.022727 +vt 0.386364 0.022727 +vt 0.446970 -0.000000 +vt 0.378788 -0.000000 +vt 0.454545 -0.000000 +vt 0.469697 0.034091 +vt 0.454545 0.000000 +vt 0.500000 0.022727 +vt 0.560606 0.022727 +vt 0.606061 0.000000 +vt 0.590909 0.034091 +vt 0.500000 0.159091 +vt 0.560606 0.159091 +vt 0.636364 0.545583 +vt 0.666581 0.590909 +vt 0.636364 0.636235 +vt 0.666667 0.528409 +vt 0.606061 0.534091 +vt 0.606061 0.528409 +vt 0.666667 0.534091 +vt 0.606061 0.539773 +vt 0.606061 0.534091 +vt 0.606061 0.545455 +vt 0.666667 0.539773 +vt 0.666667 0.545455 +vt 0.606061 0.545455 +vt 0.666667 0.539773 +vt 0.666667 0.545455 +vt 0.666667 0.528409 +vt 0.606061 0.528409 +vt 0.666667 0.534091 +vt 0.606061 0.539773 +vt 0.666667 0.528409 +vt 0.606061 0.534091 +vt 0.606061 0.528409 +vt 0.606061 0.545455 +vt 0.666667 0.539773 +vt 0.666667 0.545455 +vt 0.666667 0.534091 +vt 0.606061 0.539773 +vt 0.625000 0.664773 +vt 0.621212 0.670455 +vt 0.621212 0.664773 +vt 0.621212 0.681818 +vt 0.625000 0.670455 +vt 0.625000 0.681818 +vt 0.625000 0.653409 +vt 0.621212 0.653409 +vt 0.632576 0.670455 +vt 0.632576 0.664773 +vt 0.613636 0.664773 +vt 0.613636 0.670455 +vt 0.609848 0.670455 +vt 0.606061 0.653409 +vt 0.609848 0.653409 +vt 0.613636 0.653409 +vt 0.609848 0.670455 +vt 0.609848 0.653409 +vt 0.393939 0.534091 +vt 0.386364 0.511364 +vt 0.393939 0.511364 +vt 0.363636 0.511364 +vt 0.371212 0.534091 +vt 0.363636 0.534091 +vt 0.371212 0.545455 +vt 0.386364 0.534091 +vt 0.386364 0.545455 +vt 0.386364 0.500000 +vt 0.371212 0.511364 +vt 0.371212 0.500000 +vt 0.651515 0.647727 +vt 0.643939 0.642045 +vt 0.651515 0.642045 +vt 0.643939 0.647727 +vt 0.636364 0.642045 +vt 0.636364 0.647727 +vt 0.628788 0.642045 +vt 0.621212 0.647727 +vt 0.621212 0.642045 +vt 0.613636 0.642045 +vt 0.606061 0.647727 +vt 0.606061 0.642045 +vt 0.666667 0.647727 +vt 0.659091 0.642045 +vt 0.666667 0.642045 +vt 0.795455 0.818182 +vt 0.871212 0.818182 +vt 0.856061 0.863636 +vt 0.878788 0.818182 +vt 0.871212 0.840909 +vt 0.954545 0.818182 +vt 0.939394 0.863636 +vt 0.787879 0.840909 +vt 0.787879 0.818182 +vt 0.878788 0.840909 +vt 0.871212 0.863636 +vt 0.795455 0.840909 +vt 0.787879 0.863636 +vt 0.795455 0.818182 +vt 0.871212 0.818182 +vt 0.856061 0.863636 +vt 0.878788 0.818182 +vt 0.871212 0.840909 +vt 0.954545 0.818182 +vt 0.939394 0.863636 +vt 0.787879 0.840909 +vt 0.787879 0.818182 +vt 0.878788 0.840909 +vt 0.871212 0.863636 +vt 0.795455 0.840909 +vt 0.787879 0.863636 +vt 0.795455 0.818182 +vt 0.871212 0.818182 +vt 0.856061 0.863636 +vt 0.878788 0.818182 +vt 0.871212 0.840909 +vt 0.954545 0.818182 +vt 0.939394 0.863636 +vt 0.787879 0.840909 +vt 0.787879 0.818182 +vt 0.878788 0.840909 +vt 0.871212 0.863636 +vt 0.795455 0.840909 +vt 0.787879 0.863636 +vt 0.795455 0.818182 +vt 0.871212 0.818182 +vt 0.856061 0.863636 +vt 0.878788 0.818182 +vt 0.871212 0.840909 +vt 0.954545 0.818182 +vt 0.939394 0.863636 +vt 0.787879 0.840909 +vt 0.787879 0.818182 +vt 0.878788 0.840909 +vt 0.871212 0.863636 +vt 0.795455 0.840909 +vt 0.787879 0.863636 +vt 0.795455 0.818182 +vt 0.871212 0.818182 +vt 0.856061 0.863636 +vt 0.878788 0.818182 +vt 0.871212 0.840909 +vt 0.954545 0.818182 +vt 0.939394 0.863636 +vt 0.787879 0.840909 +vt 0.787879 0.818182 +vt 0.878788 0.840909 +vt 0.871212 0.863636 +vt 0.795455 0.840909 +vt 0.787879 0.863636 +vt 0.469697 0.340909 +vt 0.590909 0.340909 +vt 0.606061 0.488636 +vt 0.606061 0.500000 +vt 0.454545 0.488636 +vt 0.469697 0.840909 +vt 0.590909 0.840909 +vt 0.606061 0.988636 +vt 0.606061 1.000000 +vt 0.454545 0.988636 +vt 0.893939 0.176136 +vt 0.893939 0.221591 +vt 0.893939 0.267045 +vt 0.893939 0.278409 +vt 0.893939 0.323864 +vt 0.893939 0.369318 +vt 0.893939 0.414773 +vt 0.893939 0.460227 +vt 0.893939 0.539773 +vt 0.893939 0.039773 +vt 0.893939 0.085227 +vt 0.893939 0.130682 +vt 0.909091 0.176136 +vt 0.924242 0.215909 +vt 0.924242 0.261364 +vt 0.909091 0.312500 +vt 0.924242 0.352273 +vt 0.924242 0.397727 +vt 0.909091 0.448864 +vt 0.924242 0.488636 +vt 0.909091 0.539773 +vt 0.909091 0.039773 +vt 0.909091 0.085227 +vt 0.924242 0.125000 +vt 0.818182 0.221591 +vt 0.818182 0.267045 +vt 0.818182 0.539773 +vt 0.818182 0.039773 +vt 0.818182 0.085227 +vt 0.818182 0.130682 +vt 0.818182 0.176136 +vt 0.742424 0.170455 +vt 0.742424 0.215909 +vt 0.742424 0.261364 +vt 0.757576 0.312500 +vt 0.742424 0.352273 +vt 0.742424 0.397727 +vt 0.757576 0.448864 +vt 0.742424 0.488636 +vt 0.757576 0.539773 +vt 0.742424 0.034091 +vt 0.742424 0.079545 +vt 0.742424 0.125000 +vt 0.363636 0.375000 +vt 0.386364 0.295455 +vt 0.416667 0.409091 +vt 0.439394 0.329545 +vt 0.363636 0.375000 +vt 0.386364 0.295455 +vt 0.416667 0.409091 +vt 0.439394 0.329545 +vt 0.424242 0.431818 +vt 0.363636 0.477273 +vt 0.409091 0.500000 +vt 0.378788 0.409091 +vt 0.363636 0.477273 +vt 0.424242 0.431818 +vt 0.446970 0.136364 +vt 0.409091 0.500000 +vt 0.378788 0.409091 +vt 0.590909 0.659091 +vt 0.469697 0.659091 +vt 0.454545 0.511364 +vt 0.454545 0.500000 +vt 0.606061 0.511364 +vt 0.181818 1.000000 +vt 0.000000 0.727273 +vt 0.181818 0.863636 +vt -0.000000 0.863636 +vt 0.810606 0.863636 +vt 0.954545 0.840909 +vt 0.893939 0.863636 +vt 0.878788 0.863636 +vt 0.795455 0.863636 +vt 0.363636 0.375000 +vt 0.386364 0.295455 +vt 0.416667 0.409091 +vt 0.439394 0.329545 +vt 0.363636 0.375000 +vt 0.386364 0.295455 +vt 0.416667 0.409091 +vt 0.439394 0.329545 +vt 0.810600 0.672699 +vt 0.793958 0.647736 +vt 0.787867 0.613636 +vt 0.810600 0.554574 +vt 0.833333 0.545437 +vt 0.856067 0.554574 +vt 0.872709 0.579536 +vt 0.878800 0.613636 +vt 0.856067 0.672699 +vt 0.856067 0.809063 +vt 0.833333 0.818200 +vt 0.810600 0.809063 +vt 0.787867 0.750000 +vt 0.793958 0.715900 +vt 0.810600 0.690937 +vt 0.856067 0.690937 +vt 0.872709 0.715900 +vt 0.878800 0.750000 +vt 0.363636 0.681818 +vt 0.363636 0.818182 +vt 0.363636 0.897727 +vt 0.416667 0.795455 +vt 0.424242 0.931818 +vt 0.416667 0.931818 +vt 0.234848 0.795455 +vt 0.234848 0.931818 +vt 0.386364 -0.000000 +vt 0.378788 0.136364 +vt 0.454545 0.136364 +vt 0.454545 0.011364 +vt 0.469697 0.159091 +vt 0.606061 0.011364 +vt 0.590909 0.159091 +vt 0.614997 0.622959 +vt 0.606147 0.590909 +vt 0.614997 0.558859 +vt 0.657730 0.558859 +vt 0.657731 0.622959 +vt 0.606061 0.670455 +vt 0.613636 0.670455 +vt 0.628788 0.647727 +vt 0.613636 0.647727 +vt 0.659091 0.647727 +vt 0.810606 0.863636 +vt 0.954545 0.840909 +vt 0.893939 0.863636 +vt 0.878788 0.863636 +vt 0.795455 0.863636 +vt 0.810606 0.863636 +vt 0.954545 0.840909 +vt 0.893939 0.863636 +vt 0.878788 0.863636 +vt 0.795455 0.863636 +vt 0.810606 0.863636 +vt 0.954545 0.840909 +vt 0.893939 0.863636 +vt 0.878788 0.863636 +vt 0.795455 0.863636 +vt 0.810606 0.863636 +vt 0.954545 0.840909 +vt 0.893939 0.863636 +vt 0.878788 0.863636 +vt 0.795455 0.863636 +vt 0.810606 0.863636 +vt 0.954545 0.840909 +vt 0.893939 0.863636 +vt 0.878788 0.863636 +vt 0.795455 0.863636 +vt 0.939394 0.170455 +vt 0.939394 0.034091 +vt 0.939394 0.420455 +vt 0.939394 0.443182 +vt 0.939394 0.215909 +vt 0.939394 0.284091 +vt 0.939394 0.306818 +vt 0.939394 0.079545 +vt 0.939394 0.488636 +vt 0.939394 0.261364 +vt 0.939394 0.329545 +vt 0.939394 0.352273 +vt 0.939394 0.125000 +vt 0.939394 0.534091 +vt 0.939394 0.397727 +vt 0.696970 0.102273 +vt 0.696970 0.511364 +vt 0.696970 0.375000 +vt 0.696970 0.147727 +vt 0.696970 0.011364 +vt 0.696970 0.420455 +vt 0.696970 0.193182 +vt 0.696970 0.284091 +vt 0.696970 0.056818 +vt 0.696970 0.465909 +vt 0.696970 0.238636 +vt 0.696970 0.329545 +vt 0.666667 0.482955 +vt 0.659091 0.528409 +vt 0.659091 0.482955 +vt 0.651515 0.482955 +vt 0.643939 0.528409 +vt 0.643939 0.482955 +vt 0.613636 0.482955 +vt 0.606061 0.528409 +vt 0.606061 0.482955 +vt 0.651515 0.528409 +vt 0.628788 0.482955 +vt 0.621212 0.528409 +vt 0.621212 0.482955 +vt 0.636364 0.528409 +vt 0.636364 0.482955 +vt 0.613636 0.460227 +vt 0.613636 0.465909 +vt 0.606061 0.460227 +vt 0.613636 0.454545 +vt 0.659091 0.460227 +vt 0.666667 0.460227 +vt 0.659091 0.465909 +vt 0.659091 0.454545 +vt 0.628788 0.460227 +vt 0.651515 0.460227 +vt 0.643939 0.460227 +vt 0.651515 0.471591 +vt 0.621212 0.460227 +vt 0.621212 0.471591 +vt 0.636364 0.460227 +vt 0.621212 0.448864 +vt 0.636364 0.437500 +vt 0.628788 0.437500 +vt 0.621212 0.295455 +vt 0.613636 0.437500 +vt 0.613636 0.295455 +vt 0.666667 0.295455 +vt 0.659091 0.437500 +vt 0.659091 0.295455 +vt 0.643939 0.295455 +vt 0.636364 0.437500 +vt 0.636364 0.295455 +vt 0.628788 0.295455 +vt 0.621212 0.437500 +vt 0.606061 0.437500 +vt 0.606061 0.295455 +vt 0.651515 0.437500 +vt 0.651515 0.295455 +vt 0.643939 0.437500 +vt 0.628788 0.437500 +vt 0.636364 0.460227 +vt 0.621212 0.460227 +vt 0.621212 0.448864 +vt 0.651515 0.448864 +vt 0.659091 0.460227 +vt 0.651515 0.460227 +vt 0.643939 0.460227 +vt 0.628788 0.460227 +vt 0.613636 0.460227 +vt 0.613636 0.454545 +vt 0.613636 0.465909 +vt 0.643939 0.482955 +vt 0.636364 0.482955 +vt 0.621212 0.471591 +vt 0.651515 0.471591 +vt 0.628788 0.482955 +vt 0.659091 0.454545 +vt 0.666667 0.460227 +vt 0.659091 0.465909 +vt 0.606061 0.460227 +vt 0.636364 0.528409 +vt 0.621212 0.528409 +vt 0.621212 0.482955 +vt 0.659091 0.482955 +vt 0.651515 0.528409 +vt 0.651515 0.482955 +vt 0.613636 0.482955 +vt 0.606061 0.528409 +vt 0.606061 0.482955 +vt 0.643939 0.528409 +vt 0.666667 0.482955 +vt 0.659091 0.528409 +vt 0.628788 0.528409 +vt 0.613636 0.528409 +vt 0.787879 0.886364 +vt 0.696970 0.920455 +vt 0.696970 0.886364 +vt 0.787879 0.715909 +vt 0.696970 0.750000 +vt 0.696970 0.715909 +vt 0.787879 0.784091 +vt 0.696970 0.818182 +vt 0.696970 0.784091 +vt 0.787879 0.613636 +vt 0.696970 0.647727 +vt 0.696970 0.613636 +vt 0.787879 0.920455 +vt 0.696970 0.954545 +vt 0.787879 0.818182 +vt 0.696970 0.852273 +vt 0.787879 0.647727 +vt 0.696970 0.681818 +vt 0.787879 0.545455 +vt 0.696970 0.579545 +vt 0.696970 0.545455 +vt 0.787879 0.852273 +vt 0.787879 0.681818 +vt 0.787879 0.750000 +vt 0.787879 0.579545 +vt 0.651515 0.448864 +vt 0.643939 0.437500 +vt 0.636364 0.295455 +vt 0.628788 0.295455 +vt 0.651515 0.295455 +vt 0.643939 0.295455 +vt 0.659091 0.295455 +vt 0.651515 0.437500 +vt 0.613636 0.295455 +vt 0.606061 0.437500 +vt 0.606061 0.295455 +vt 0.621212 0.437500 +vt 0.621212 0.295455 +vt 0.666667 0.295455 +vt 0.659091 0.437500 +vt 0.613636 0.437500 +vt 0.670455 0.619318 +vt 0.666667 0.602273 +vt 0.670455 0.602273 +vt 0.670455 0.585227 +vt 0.666667 0.568182 +vt 0.670455 0.568182 +vt 0.666667 0.551136 +vt 0.670455 0.551136 +vt 0.670455 0.534091 +vt 0.666667 0.517045 +vt 0.670455 0.517045 +vt 0.670455 0.636364 +vt 0.666667 0.619318 +vt 0.666667 0.585227 +vt 0.666667 0.534091 +vt 0.666667 0.500000 +vt 0.670455 0.500000 +vt 0.613636 0.653409 +vt 0.621212 0.653409 +vt 0.651515 0.636364 +vt 0.643939 0.636364 +vt 0.606061 0.653409 +vt 0.659091 0.636364 +vt 0.659091 0.653409 +vt 0.666667 0.653409 +vt 0.666667 0.636364 +vt 0.651515 0.653409 +vt 0.613636 0.636364 +vt 0.606061 0.636364 +vt 0.643939 0.653409 +vt 0.621212 0.636364 +vt 0.636364 0.653409 +vt 0.628788 0.653409 +vt 0.628788 0.636364 +vt 0.636364 0.636364 +vt 0.628788 0.528409 +vt 0.613636 0.528409 +vt 0.659091 0.482955 +vt 0.666667 0.528409 +vt 0.659091 0.528409 +vt 0.651515 0.482955 +vt 0.643939 0.528409 +vt 0.643939 0.482955 +vt 0.613636 0.482955 +vt 0.606061 0.528409 +vt 0.606061 0.482955 +vt 0.651515 0.528409 +vt 0.628788 0.482955 +vt 0.621212 0.528409 +vt 0.621212 0.482955 +vt 0.636364 0.528409 +vt 0.636364 0.482955 +vt 0.613636 0.460227 +vt 0.613636 0.465909 +vt 0.606061 0.460227 +vt 0.613636 0.454545 +vt 0.659091 0.460227 +vt 0.666667 0.460227 +vt 0.659091 0.465909 +vt 0.659091 0.454545 +vt 0.636364 0.460227 +vt 0.628788 0.460227 +vt 0.651515 0.460227 +vt 0.643939 0.460227 +vt 0.651515 0.471591 +vt 0.621212 0.460227 +vt 0.621212 0.471591 +vt 0.621212 0.448864 +vt 0.636364 0.437500 +vt 0.628788 0.437500 +vt 0.621212 0.295455 +vt 0.613636 0.437500 +vt 0.613636 0.295455 +vt 0.666667 0.295455 +vt 0.659091 0.437500 +vt 0.659091 0.295455 +vt 0.643939 0.295455 +vt 0.636364 0.437500 +vt 0.636364 0.295455 +vt 0.628788 0.295455 +vt 0.621212 0.437500 +vt 0.606061 0.437500 +vt 0.606061 0.295455 +vt 0.651515 0.437500 +vt 0.651515 0.295455 +vt 0.643939 0.437500 +vt 0.628788 0.437500 +vt 0.643939 0.460227 +vt 0.636364 0.460227 +vt 0.621212 0.460227 +vt 0.621212 0.448864 +vt 0.651515 0.448864 +vt 0.659091 0.460227 +vt 0.651515 0.460227 +vt 0.628788 0.460227 +vt 0.613636 0.460227 +vt 0.613636 0.454545 +vt 0.621212 0.471591 +vt 0.613636 0.465909 +vt 0.643939 0.482955 +vt 0.636364 0.482955 +vt 0.628788 0.482955 +vt 0.651515 0.471591 +vt 0.659091 0.454545 +vt 0.666667 0.460227 +vt 0.659091 0.465909 +vt 0.606061 0.460227 +vt 0.636364 0.528409 +vt 0.621212 0.528409 +vt 0.621212 0.482955 +vt 0.659091 0.482955 +vt 0.651515 0.528409 +vt 0.651515 0.482955 +vt 0.613636 0.482955 +vt 0.606061 0.528409 +vt 0.606061 0.482955 +vt 0.643939 0.528409 +vt 0.666667 0.482955 +vt 0.659091 0.528409 +vt 0.628788 0.528409 +vt 0.613636 0.528409 +vt 0.651515 0.448864 +vt 0.643939 0.437500 +vt 0.636364 0.295455 +vt 0.628788 0.295455 +vt 0.651515 0.295455 +vt 0.643939 0.295455 +vt 0.659091 0.295455 +vt 0.651515 0.437500 +vt 0.613636 0.295455 +vt 0.606061 0.437500 +vt 0.606061 0.295455 +vt 0.621212 0.437500 +vt 0.621212 0.295455 +vt 0.666667 0.295455 +vt 0.659091 0.437500 +vt 0.613636 0.437500 +vt 0.628788 0.528409 +vt 0.613636 0.528409 +vt 0.939394 0.147727 +vt 0.939394 0.011364 +vt 0.939394 0.193182 +vt 0.939394 0.056818 +vt 0.939394 0.465909 +vt 0.939394 0.238636 +vt 0.939394 0.102273 +vt 0.939394 0.511364 +vt 0.939394 0.375000 +vt 0.696970 0.125000 +vt 0.696970 0.534091 +vt 0.696970 0.397727 +vt 0.696970 0.170455 +vt 0.696970 0.034091 +vt 0.696970 0.443182 +vt 0.696970 0.215909 +vt 0.696970 0.306818 +vt 0.696970 0.079545 +vt 0.696970 0.488636 +vt 0.696970 0.261364 +vt 0.696970 0.352273 +vt 0.666667 0.528409 +vt 0.666667 0.437500 +vt 0.666667 0.528409 +vt 0.787879 0.954545 +vt 0.666667 0.437500 +vt 0.666667 0.636364 +vt 0.666667 0.482955 +vt 0.666667 0.437500 +vt 0.666667 0.528409 +vt 0.666667 0.437500 +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 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.0000 -0.4472 0.8944 +vn 0.0000 0.4472 0.8944 +vn -0.8660 0.5000 0.0000 +vn -0.5000 0.8660 0.0000 +vn 0.8660 -0.5000 0.0000 +vn -0.5000 -0.8660 0.0000 +vn 0.8660 0.5000 0.0000 +vn 0.5000 -0.8660 0.0000 +vn -0.8660 -0.5000 0.0000 +vn 0.5000 0.8660 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 -0.7071 -0.7071 +vn -0.1363 -0.6737 -0.7263 +vn 0.0196 0.0473 -0.9987 +vn 0.0000 0.7071 -0.7071 +vn 0.1448 0.7194 -0.6794 +vn -0.1363 -0.6737 0.7263 +vn 0.1448 0.7194 0.6794 +vn 0.0196 0.0473 0.9987 +vn 0.1866 0.9824 0.0000 +vn -0.4617 -0.4617 0.7574 +vn -0.6737 -0.1363 0.7263 +vn -0.4617 -0.4617 -0.7574 +vn -0.6737 -0.1363 -0.7263 +vn 0.5294 0.5294 0.6630 +vn 0.0671 0.0671 -0.9955 +vn 0.5294 0.5294 -0.6630 +vn 0.0671 0.0671 0.9955 +vn 0.0473 0.0196 0.9987 +vn 0.9824 0.1866 -0.0000 +vn 0.7194 0.1448 0.6794 +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.0473 0.0196 -0.9987 +vn 0.7194 0.1448 -0.6794 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.7071 -0.7071 0.0000 +vn 0.1363 -0.6737 0.7263 +vn -0.0196 0.0473 0.9987 +vn -0.1448 0.7194 0.6794 +vn 0.1363 -0.6737 -0.7263 +vn -0.1448 0.7194 -0.6794 +vn -0.0196 0.0473 -0.9987 +vn -0.1866 0.9824 -0.0000 +vn 0.4617 -0.4617 -0.7574 +vn 0.6737 -0.1363 -0.7263 +vn 0.4617 -0.4617 0.7574 +vn 0.6737 -0.1363 0.7263 +vn -0.5294 0.5294 -0.6630 +vn -0.0671 0.0671 0.9955 +vn -0.5294 0.5294 0.6630 +vn -0.0671 0.0671 -0.9955 +vn -0.0473 0.0196 -0.9987 +vn -0.9824 0.1866 -0.0000 +vn -0.7194 0.1448 -0.6794 +vn -0.0473 0.0196 0.9987 +vn -0.7194 0.1448 0.6794 +s off +f 118/180/25 109/181/25 117/182/25 +f 101/183/26 100/184/26 99/185/26 +f 105/186/27 103/187/27 104/188/27 +f 99/189/28 103/187/28 101/190/28 +f 101/191/25 106/192/25 102/193/25 +f 100/194/29 104/188/29 99/195/29 +f 102/196/30 105/186/30 100/184/30 +f 107/197/28 113/198/28 109/199/28 +f 288/200/27 289/201/27 287/202/27 +f 110/203/30 112/204/30 108/205/30 +f 111/206/31 117/207/31 113/198/31 +f 130/208/28 124/209/28 128/210/28 +f 127/211/30 125/212/30 129/213/30 +f 123/214/32 296/215/32 125/212/32 +f 114/216/32 116/217/32 112/204/32 +f 131/218/32 129/213/32 133/219/32 +f 122/220/32 284/221/32 120/222/32 +f 118/223/30 120/222/30 116/217/30 +f 298/224/27 295/225/27 296/215/27 +f 115/226/28 121/227/28 117/207/28 +f 134/228/31 128/210/31 132/229/31 +f 135/230/30 133/219/30 137/231/30 +f 138/232/28 132/229/28 136/233/28 +f 127/234/25 136/235/25 128/236/25 +f 172/237/25 149/238/25 148/239/25 +f 173/240/25 150/241/25 149/238/25 +f 174/242/25 139/243/25 150/241/25 +f 139/243/25 164/244/25 140/245/25 +f 140/245/25 165/246/25 141/247/25 +f 141/247/25 166/248/25 142/249/25 +f 142/249/25 167/250/25 143/251/25 +f 143/251/25 168/252/25 144/253/25 +f 168/254/25 145/255/25 144/253/25 +f 169/256/25 146/257/25 145/258/25 +f 170/259/25 147/260/25 146/257/25 +f 171/261/25 148/239/25 147/260/25 +f 185/262/25 196/263/25 184/264/25 +f 185/265/25 198/266/25 197/267/25 +f 186/268/25 187/269/25 198/270/25 +f 176/271/25 187/272/25 175/273/25 +f 176/274/25 189/275/25 188/276/25 +f 177/277/25 190/278/25 189/279/25 +f 179/280/25 190/281/25 178/282/25 +f 179/283/25 192/284/25 191/285/25 +f 181/286/25 192/287/25 180/288/25 +f 182/289/25 193/290/25 181/291/25 +f 183/292/25 194/293/25 182/294/25 +f 183/295/25 196/296/25 195/297/25 +f 162/298/29 221/299/29 161/300/29 +f 151/301/29 222/302/29 162/298/29 +f 151/301/29 212/303/29 211/304/29 +f 152/305/29 213/306/29 212/307/29 +f 153/308/29 214/309/29 213/310/29 +f 154/311/29 215/312/29 214/313/29 +f 155/314/29 216/315/29 215/316/29 +f 157/317/29 216/318/29 156/319/29 +f 158/320/29 217/321/29 157/322/29 +f 159/323/29 218/324/29 158/320/29 +f 160/325/29 219/326/29 159/323/29 +f 161/300/29 220/327/29 160/325/29 +f 233/328/29 244/329/29 232/330/29 +f 234/331/29 245/332/29 233/333/29 +f 223/334/29 246/335/29 234/336/29 +f 223/337/29 236/338/29 235/339/29 +f 225/340/29 236/341/29 224/342/29 +f 226/343/29 237/344/29 225/345/29 +f 226/346/29 239/347/29 238/348/29 +f 228/349/29 239/350/29 227/351/29 +f 228/352/29 241/353/29 240/354/29 +f 230/355/29 241/356/29 229/357/29 +f 231/358/29 242/359/29 230/360/29 +f 232/361/29 243/362/29 231/363/29 +f 260/364/30 261/365/30 259/366/30 +f 268/367/30 269/368/30 267/369/30 +f 259/366/29 265/370/29 260/364/29 +f 260/364/26 266/371/26 262/372/26 +f 261/365/27 264/373/27 259/366/27 +f 262/372/25 263/374/25 261/365/25 +f 267/369/29 273/375/29 268/367/29 +f 268/367/26 274/376/26 270/377/26 +f 269/368/27 272/378/27 267/369/27 +f 270/377/25 271/379/25 269/368/25 +f 276/380/27 277/381/27 275/382/27 +f 286/383/27 283/384/27 284/221/27 +f 276/380/30 282/385/30 278/386/30 +f 277/381/28 280/387/28 275/382/28 +f 278/386/25 279/388/25 277/381/25 +f 275/382/29 281/389/29 276/380/29 +f 289/201/28 292/390/28 287/202/28 +f 119/391/31 285/392/31 121/227/31 +f 288/200/30 294/393/30 290/394/30 +f 484/395/33 485/396/33 483/397/33 +f 290/394/25 291/398/25 289/201/25 +f 287/202/29 293/399/29 288/200/29 +f 126/400/31 297/401/31 124/209/31 +f 130/402/29 137/403/29 129/404/29 +f 310/405/28 313/406/28 309/407/28 +f 307/408/30 312/409/30 308/410/30 +f 301/411/27 309/407/27 299/412/27 +f 300/413/27 308/410/27 302/414/27 +f 302/414/30 305/415/30 300/413/30 +f 299/412/28 303/416/28 301/411/28 +f 339/417/29 340/418/29 349/419/29 +f 342/420/30 345/421/30 340/418/30 +f 342/420/25 341/422/25 347/423/25 +f 339/417/28 343/424/28 341/425/28 +f 346/426/32 349/427/32 345/421/32 +f 344/428/31 347/429/31 343/424/31 +f 402/430/28 403/431/28 401/432/28 +f 410/433/28 411/434/28 409/435/28 +f 401/432/25 407/436/25 402/430/25 +f 402/430/26 408/437/26 404/438/26 +f 403/431/27 406/439/27 401/432/27 +f 404/438/29 405/440/29 403/431/29 +f 409/435/25 415/441/25 410/433/25 +f 410/433/26 416/442/26 412/443/26 +f 411/434/27 414/444/27 409/435/27 +f 412/443/29 413/445/29 411/434/29 +f 427/446/29 417/447/29 421/448/29 +f 439/449/25 435/450/25 431/451/25 +f 444/452/30 447/453/30 443/454/30 +f 445/455/30 442/456/30 441/457/30 +f 443/454/27 445/455/27 441/457/27 +f 451/458/28 456/459/28 452/460/28 +f 449/461/27 455/462/27 451/458/27 +f 454/463/28 449/461/28 450/464/28 +f 445/465/25 454/466/25 446/467/25 +f 453/468/25 445/465/25 448/469/25 +f 450/470/29 441/471/29 442/472/29 +f 449/473/29 452/474/29 444/475/29 +f 482/476/29 483/397/29 481/477/29 +f 481/477/34 488/478/34 482/476/34 +f 483/397/30 487/479/30 481/477/30 +f 488/480/28 484/395/28 482/476/28 +f 115/481/29 107/482/29 487/483/29 +f 488/484/29 108/485/29 116/486/29 +f 487/483/29 108/485/29 488/484/29 +f 284/221/29 485/487/29 486/488/29 +f 501/489/29 503/490/29 497/491/29 +f 514/492/26 518/493/26 513/494/26 +f 511/495/29 509/496/29 510/497/29 +f 515/498/27 520/499/27 516/500/27 +f 507/501/27 512/502/27 508/503/27 +f 506/504/26 510/497/26 505/505/26 +f 519/506/29 517/507/29 518/493/29 +f 522/508/26 526/509/26 521/510/26 +f 523/511/27 528/512/27 524/513/27 +f 527/514/29 525/515/29 526/509/29 +f 535/516/29 533/517/29 534/518/29 +f 531/519/27 536/520/27 532/521/27 +f 530/522/26 534/518/26 529/523/26 +f 532/524/30 535/516/30 530/525/30 +f 529/526/28 533/517/28 531/527/28 +f 546/528/29 548/529/29 545/530/29 +f 551/531/29 549/532/29 550/533/29 +f 557/534/30 554/535/30 559/536/30 +f 560/537/28 555/538/28 558/539/28 +f 558/540/27 556/541/27 557/542/27 +f 559/543/26 553/544/26 560/545/26 +f 554/535/29 555/538/29 553/544/29 +f 583/546/29 570/547/29 571/548/29 +f 584/549/29 569/550/29 570/547/29 +f 578/551/29 576/552/29 569/550/29 +f 576/552/29 579/553/29 575/554/29 +f 579/553/29 574/555/29 575/554/29 +f 574/555/29 581/556/29 573/557/29 +f 581/558/29 572/559/29 573/560/29 +f 572/559/29 583/546/29 571/548/29 +f 585/561/29 586/562/29 595/563/29 +f 588/564/30 591/565/30 586/562/30 +f 588/564/25 587/566/25 593/567/25 +f 585/561/28 589/568/28 587/569/28 +f 592/570/32 595/571/32 591/565/32 +f 590/572/31 593/573/31 589/568/31 +f 597/574/29 598/575/29 607/576/29 +f 600/577/30 603/578/30 598/575/30 +f 600/577/25 599/579/25 605/580/25 +f 597/574/28 601/581/28 599/582/28 +f 604/583/32 607/584/32 603/578/32 +f 602/585/31 605/586/31 601/581/31 +f 609/587/29 610/588/29 619/589/29 +f 612/590/30 615/591/30 610/588/30 +f 612/590/25 611/592/25 617/593/25 +f 609/587/28 613/594/28 611/595/28 +f 616/596/32 619/597/32 615/591/32 +f 614/598/31 617/599/31 613/594/31 +f 621/600/29 622/601/29 631/602/29 +f 624/603/30 627/604/30 622/601/30 +f 624/603/25 623/605/25 629/606/25 +f 621/600/28 625/607/28 623/608/28 +f 628/609/32 631/610/32 627/604/32 +f 626/611/31 629/612/31 625/607/31 +f 633/613/29 634/614/29 643/615/29 +f 636/616/30 639/617/30 634/614/30 +f 636/616/25 635/618/25 641/619/25 +f 633/613/28 637/620/28 635/621/28 +f 640/622/32 643/623/32 639/617/32 +f 638/624/31 641/625/31 637/620/31 +f 117/182/25 121/626/25 118/180/25 +f 121/626/25 285/392/25 122/627/25 +f 118/180/25 121/626/25 122/627/25 +f 285/392/25 286/383/25 122/627/25 +f 118/180/25 114/628/25 110/629/25 +f 109/181/25 113/630/25 117/182/25 +f 118/180/25 110/629/25 109/181/25 +f 101/183/26 102/196/26 100/184/26 +f 105/186/27 106/192/27 103/187/27 +f 99/189/28 104/188/28 103/187/28 +f 101/191/25 103/187/25 106/192/25 +f 100/194/29 105/186/29 104/188/29 +f 102/196/30 106/192/30 105/186/30 +f 107/197/28 111/206/28 113/198/28 +f 288/200/27 290/394/27 289/201/27 +f 110/203/30 114/216/30 112/204/30 +f 111/206/31 115/226/31 117/207/31 +f 130/208/28 126/400/28 124/209/28 +f 127/211/30 123/214/30 125/212/30 +f 123/214/32 298/224/32 296/215/32 +f 114/216/32 118/223/32 116/217/32 +f 131/218/32 127/211/32 129/213/32 +f 122/220/32 286/383/32 284/221/32 +f 118/223/30 122/220/30 120/222/30 +f 298/224/27 297/401/27 295/225/27 +f 115/226/28 119/391/28 121/227/28 +f 134/228/31 130/208/31 128/210/31 +f 135/230/30 131/218/30 133/219/30 +f 138/232/28 134/228/28 132/229/28 +f 128/236/25 124/631/25 127/234/25 +f 124/631/25 297/401/25 123/632/25 +f 127/234/25 124/631/25 123/632/25 +f 297/401/25 298/224/25 123/632/25 +f 127/234/25 131/633/25 135/634/25 +f 136/235/25 132/635/25 128/236/25 +f 127/234/25 135/634/25 136/235/25 +f 172/237/25 173/636/25 149/238/25 +f 173/240/25 174/637/25 150/241/25 +f 174/242/25 163/638/25 139/243/25 +f 139/243/25 163/639/25 164/244/25 +f 140/245/25 164/640/25 165/246/25 +f 141/247/25 165/641/25 166/248/25 +f 142/249/25 166/642/25 167/250/25 +f 143/251/25 167/643/25 168/252/25 +f 168/254/25 169/644/25 145/255/25 +f 169/256/25 170/645/25 146/257/25 +f 170/259/25 171/646/25 147/260/25 +f 171/261/25 172/647/25 148/239/25 +f 185/262/25 197/648/25 196/263/25 +f 185/265/25 186/649/25 198/266/25 +f 186/268/25 175/650/25 187/269/25 +f 176/271/25 188/651/25 187/272/25 +f 176/274/25 177/652/25 189/275/25 +f 177/277/25 178/653/25 190/278/25 +f 179/280/25 191/654/25 190/281/25 +f 179/283/25 180/655/25 192/284/25 +f 181/286/25 193/656/25 192/287/25 +f 182/289/25 194/657/25 193/290/25 +f 183/292/25 195/658/25 194/293/25 +f 183/295/25 184/659/25 196/296/25 +f 162/298/29 222/660/29 221/299/29 +f 151/301/29 211/661/29 222/302/29 +f 151/301/29 152/305/29 212/303/29 +f 152/305/29 153/308/29 213/306/29 +f 153/308/29 154/311/29 214/309/29 +f 154/311/29 155/314/29 215/312/29 +f 155/314/29 156/319/29 216/315/29 +f 157/317/29 217/662/29 216/318/29 +f 158/320/29 218/663/29 217/321/29 +f 159/323/29 219/664/29 218/324/29 +f 160/325/29 220/665/29 219/326/29 +f 161/300/29 221/666/29 220/327/29 +f 233/328/29 245/667/29 244/329/29 +f 234/331/29 246/668/29 245/332/29 +f 223/334/29 235/669/29 246/335/29 +f 223/337/29 224/670/29 236/338/29 +f 225/340/29 237/671/29 236/341/29 +f 226/343/29 238/672/29 237/344/29 +f 226/346/29 227/673/29 239/347/29 +f 228/349/29 240/674/29 239/350/29 +f 228/352/29 229/675/29 241/353/29 +f 230/355/29 242/676/29 241/356/29 +f 231/358/29 243/677/29 242/359/29 +f 232/361/29 244/678/29 243/362/29 +f 260/364/30 262/372/30 261/365/30 +f 268/367/30 270/377/30 269/368/30 +f 259/366/29 264/679/29 265/370/29 +f 260/364/26 265/680/26 266/371/26 +f 261/365/27 263/681/27 264/373/27 +f 262/372/25 266/682/25 263/374/25 +f 267/369/29 272/683/29 273/375/29 +f 268/367/26 273/684/26 274/376/26 +f 269/368/27 271/685/27 272/378/27 +f 270/377/25 274/686/25 271/379/25 +f 276/380/27 278/386/27 277/381/27 +f 286/383/27 285/392/27 283/384/27 +f 276/380/30 281/687/30 282/385/30 +f 277/381/28 279/688/28 280/387/28 +f 278/386/25 282/689/25 279/388/25 +f 275/382/29 280/690/29 281/389/29 +f 289/201/28 291/691/28 292/390/28 +f 119/391/31 283/384/31 285/392/31 +f 288/200/30 293/692/30 294/393/30 +f 484/395/33 486/693/33 485/396/33 +f 290/394/25 294/694/25 291/398/25 +f 287/202/29 292/695/29 293/399/29 +f 126/400/31 295/225/31 297/401/31 +f 129/404/29 125/696/29 130/402/29 +f 125/696/29 296/215/29 126/697/29 +f 130/402/29 125/696/29 126/697/29 +f 296/215/29 295/225/29 126/697/29 +f 130/402/29 134/698/29 138/699/29 +f 137/403/29 133/700/29 129/404/29 +f 130/402/29 138/699/29 137/403/29 +f 310/405/28 314/701/28 313/406/28 +f 307/408/30 311/702/30 312/409/30 +f 301/411/27 310/405/27 309/407/27 +f 300/413/27 307/408/27 308/410/27 +f 302/414/30 306/703/30 305/415/30 +f 299/412/28 304/704/28 303/416/28 +f 340/418/29 345/421/29 349/419/29 +f 349/419/29 348/705/29 339/417/29 +f 348/705/29 344/428/29 339/417/29 +f 342/420/30 346/426/30 345/421/30 +f 341/422/25 343/706/25 347/423/25 +f 347/423/25 350/707/25 342/420/25 +f 350/707/25 346/426/25 342/420/25 +f 339/417/28 344/428/28 343/424/28 +f 346/426/32 350/708/32 349/427/32 +f 344/428/31 348/709/31 347/429/31 +f 402/430/28 404/438/28 403/431/28 +f 410/433/28 412/443/28 411/434/28 +f 401/432/25 406/710/25 407/436/25 +f 402/430/26 407/711/26 408/437/26 +f 403/431/27 405/712/27 406/439/27 +f 404/438/29 408/713/29 405/440/29 +f 409/435/25 414/714/25 415/441/25 +f 410/433/26 415/715/26 416/442/26 +f 411/434/27 413/716/27 414/444/27 +f 412/443/29 416/717/29 413/445/29 +f 417/447/29 418/718/29 419/719/29 +f 419/719/29 420/720/29 421/448/29 +f 421/448/29 422/721/29 423/722/29 +f 423/722/29 424/723/29 425/724/29 +f 425/724/29 426/725/29 427/446/29 +f 427/446/29 428/726/29 417/447/29 +f 417/447/29 419/719/29 421/448/29 +f 421/448/29 423/722/29 425/724/29 +f 425/724/29 427/446/29 421/448/29 +f 431/451/25 430/727/25 429/728/25 +f 429/728/25 440/729/25 439/449/25 +f 439/449/25 438/730/25 437/731/25 +f 437/731/25 436/732/25 435/450/25 +f 435/450/25 434/733/25 433/734/25 +f 433/734/25 432/735/25 431/451/25 +f 431/451/25 429/728/25 439/449/25 +f 439/449/25 437/731/25 435/450/25 +f 435/450/25 433/734/25 431/451/25 +f 444/452/30 448/736/30 447/453/30 +f 445/455/30 446/737/30 442/456/30 +f 443/454/27 447/453/27 445/455/27 +f 451/458/28 455/462/28 456/459/28 +f 449/461/27 453/738/27 455/462/27 +f 454/463/28 453/738/28 449/461/28 +f 445/465/25 453/468/25 454/466/25 +f 445/465/25 447/739/25 448/469/25 +f 448/469/25 456/740/25 453/468/25 +f 456/740/25 455/741/25 453/468/25 +f 450/470/29 449/473/29 441/471/29 +f 444/475/29 443/742/29 441/471/29 +f 449/473/29 451/743/29 452/474/29 +f 444/475/29 441/471/29 449/473/29 +f 482/476/29 484/395/29 483/397/29 +f 481/477/34 487/744/34 488/478/34 +f 483/397/30 485/745/30 487/479/30 +f 488/480/28 486/746/28 484/395/28 +f 115/481/29 111/747/29 107/482/29 +f 487/483/29 485/487/29 115/481/29 +f 485/487/29 283/384/29 119/748/29 +f 115/481/29 485/487/29 119/748/29 +f 108/485/29 112/749/29 116/486/29 +f 116/486/29 120/750/29 486/488/29 +f 120/750/29 284/221/29 486/488/29 +f 486/488/29 488/484/29 116/486/29 +f 487/483/29 107/482/29 108/485/29 +f 284/221/29 283/384/29 485/487/29 +f 497/491/29 498/751/29 499/752/29 +f 499/752/29 500/753/29 501/489/29 +f 501/489/29 502/754/29 503/490/29 +f 503/490/29 504/755/29 497/491/29 +f 497/491/29 499/752/29 501/489/29 +f 514/492/26 519/506/26 518/493/26 +f 511/495/29 512/502/29 509/496/29 +f 515/498/27 517/507/27 520/499/27 +f 507/501/27 509/496/27 512/502/27 +f 506/504/26 511/495/26 510/497/26 +f 519/506/29 520/499/29 517/507/29 +f 522/508/26 527/514/26 526/509/26 +f 523/511/27 525/515/27 528/512/27 +f 527/514/29 528/512/29 525/515/29 +f 535/516/29 536/520/29 533/517/29 +f 531/519/27 533/517/27 536/520/27 +f 530/522/26 535/516/26 534/518/26 +f 532/524/30 536/520/30 535/516/30 +f 529/526/28 534/518/28 533/517/28 +f 546/528/29 547/756/29 548/529/29 +f 551/531/29 552/757/29 549/532/29 +f 557/534/30 556/541/30 554/535/30 +f 560/537/28 553/544/28 555/538/28 +f 558/540/27 555/538/27 556/541/27 +f 559/543/26 554/535/26 553/544/26 +f 554/535/29 556/541/29 555/538/29 +f 583/546/29 584/549/29 570/547/29 +f 584/549/29 578/551/29 569/550/29 +f 578/551/29 577/758/29 576/552/29 +f 576/552/29 577/758/29 579/553/29 +f 579/553/29 580/759/29 574/555/29 +f 574/555/29 580/759/29 581/556/29 +f 581/558/29 582/760/29 572/559/29 +f 572/559/29 582/760/29 583/546/29 +f 586/562/29 591/565/29 595/563/29 +f 595/563/29 594/761/29 585/561/29 +f 594/761/29 590/572/29 585/561/29 +f 588/564/30 592/570/30 591/565/30 +f 587/566/25 589/762/25 593/567/25 +f 593/567/25 596/763/25 588/564/25 +f 596/763/25 592/570/25 588/564/25 +f 585/561/28 590/572/28 589/568/28 +f 592/570/32 596/764/32 595/571/32 +f 590/572/31 594/765/31 593/573/31 +f 598/575/29 603/578/29 607/576/29 +f 607/576/29 606/766/29 597/574/29 +f 606/766/29 602/585/29 597/574/29 +f 600/577/30 604/583/30 603/578/30 +f 599/579/25 601/767/25 605/580/25 +f 605/580/25 608/768/25 600/577/25 +f 608/768/25 604/583/25 600/577/25 +f 597/574/28 602/585/28 601/581/28 +f 604/583/32 608/769/32 607/584/32 +f 602/585/31 606/770/31 605/586/31 +f 610/588/29 615/591/29 619/589/29 +f 619/589/29 618/771/29 609/587/29 +f 618/771/29 614/598/29 609/587/29 +f 612/590/30 616/596/30 615/591/30 +f 611/592/25 613/772/25 617/593/25 +f 617/593/25 620/773/25 612/590/25 +f 620/773/25 616/596/25 612/590/25 +f 609/587/28 614/598/28 613/594/28 +f 616/596/32 620/774/32 619/597/32 +f 614/598/31 618/775/31 617/599/31 +f 622/601/29 627/604/29 631/602/29 +f 631/602/29 630/776/29 621/600/29 +f 630/776/29 626/611/29 621/600/29 +f 624/603/30 628/609/30 627/604/30 +f 623/605/25 625/777/25 629/606/25 +f 629/606/25 632/778/25 624/603/25 +f 632/778/25 628/609/25 624/603/25 +f 621/600/28 626/611/28 625/607/28 +f 628/609/32 632/779/32 631/610/32 +f 626/611/31 630/780/31 629/612/31 +f 634/614/29 639/617/29 643/615/29 +f 643/615/29 642/781/29 633/613/29 +f 642/781/29 638/624/29 633/613/29 +f 636/616/30 640/622/30 639/617/30 +f 635/618/25 637/782/25 641/619/25 +f 641/619/25 644/783/25 636/616/25 +f 644/783/25 640/622/25 636/616/25 +f 633/613/28 638/624/28 637/620/28 +f 640/622/32 644/784/32 643/623/32 +f 638/624/31 642/785/31 641/625/31 +s 1 +f 141/247/35 152/305/36 140/245/36 +f 148/239/30 159/323/37 147/260/37 +f 145/255/26 156/319/38 144/253/38 +f 142/249/28 153/308/35 141/247/35 +f 149/238/39 160/325/30 148/239/30 +f 146/257/40 157/322/26 145/258/26 +f 143/251/41 154/311/28 142/249/28 +f 150/241/42 161/300/39 149/238/39 +f 140/245/36 151/301/27 139/243/27 +f 147/260/37 158/320/40 146/257/40 +f 144/253/38 155/314/41 143/251/41 +f 139/243/27 162/298/42 150/241/42 +f 169/256/26 194/657/40 170/645/40 +f 166/642/28 191/654/41 167/250/41 +f 173/240/39 198/266/42 174/637/42 +f 163/639/27 188/651/36 164/244/36 +f 170/259/40 195/658/37 171/646/37 +f 167/643/41 192/284/38 168/252/38 +f 174/242/42 187/269/27 163/638/27 +f 164/640/36 189/275/35 165/246/35 +f 171/261/37 196/296/30 172/647/30 +f 168/254/38 193/656/26 169/644/26 +f 165/641/35 190/278/28 166/248/28 +f 173/636/39 196/263/30 197/648/39 +f 184/264/30 209/786/39 185/262/39 +f 181/291/26 206/787/40 182/289/40 +f 179/280/41 202/788/28 203/789/41 +f 185/265/39 210/790/42 186/649/42 +f 176/271/36 199/791/27 200/792/36 +f 182/294/40 207/793/37 183/292/37 +f 179/283/41 204/794/38 180/655/38 +f 186/268/42 199/795/27 175/650/27 +f 177/652/35 200/796/36 201/797/35 +f 183/295/37 208/798/30 184/659/30 +f 180/288/38 205/799/26 181/286/26 +f 177/277/35 202/800/28 178/653/28 +f 217/662/26 228/352/38 216/318/38 +f 214/309/28 225/345/35 213/310/35 +f 221/666/39 232/330/30 220/327/30 +f 218/663/40 229/357/26 217/321/26 +f 214/313/28 227/673/41 226/346/28 +f 222/660/42 233/333/39 221/299/39 +f 212/303/36 223/337/27 211/304/27 +f 219/664/37 230/360/40 218/324/40 +f 216/315/38 227/351/41 215/316/41 +f 211/661/27 234/336/42 222/302/42 +f 213/306/35 224/342/36 212/307/36 +f 220/665/30 231/363/37 219/326/37 +f 244/678/30 255/801/37 243/362/37 +f 241/353/26 252/802/38 240/354/38 +f 238/672/28 249/803/35 237/344/35 +f 245/667/39 256/804/30 244/329/30 +f 242/676/40 253/805/26 241/356/26 +f 239/347/41 250/806/28 238/348/28 +f 246/668/42 257/807/39 245/332/39 +f 236/338/36 247/808/27 235/339/27 +f 243/677/37 254/809/40 242/359/40 +f 240/674/38 251/810/41 239/350/41 +f 235/669/27 258/811/42 246/335/42 +f 237/671/35 248/812/36 236/341/36 +f 470/813/43 354/814/44 362/815/45 +f 457/816/46 337/817/47 357/818/48 +f 361/819/49 356/820/26 470/821/43 +f 362/815/45 355/822/25 457/816/46 +f 359/823/50 352/824/29 360/825/51 +f 357/818/48 338/826/27 358/827/52 +f 462/828/53 361/829/49 470/830/43 +f 469/831/54 462/828/53 470/830/43 +f 463/832/55 470/833/43 362/834/45 +f 471/835/56 470/833/43 463/832/55 +f 460/836/57 358/827/52 359/823/50 +f 464/837/58 357/818/48 458/838/59 +f 464/837/58 362/834/45 457/839/46 +f 461/840/60 359/823/50 360/841/51 +f 459/842/32 357/818/48 358/827/52 +f 462/828/53 360/841/51 361/829/49 +f 468/843/61 462/828/53 469/831/54 +f 466/844/62 460/836/57 467/845/63 +f 367/846/29 374/847/54 366/848/64 +f 365/849/28 372/850/56 364/851/65 +f 370/852/66 377/853/62 369/854/30 +f 368/855/67 375/856/61 367/846/29 +f 366/848/64 373/857/43 365/858/28 +f 364/851/65 371/859/68 363/860/25 +f 363/860/25 378/861/69 370/852/66 +f 369/854/30 376/862/63 368/855/67 +f 378/861/69 384/863/32 377/853/62 +f 376/862/63 382/864/60 375/865/61 +f 371/866/68 380/867/55 379/868/58 +f 371/866/68 385/869/59 378/861/69 +f 377/853/62 383/870/57 376/862/63 +f 375/865/61 381/871/53 374/872/54 +f 382/864/60 388/873/49 381/871/53 +f 384/863/32 392/874/48 391/875/52 +f 383/870/57 389/876/51 382/864/60 +f 380/867/55 386/877/46 379/868/58 +f 379/868/58 392/874/48 385/869/59 +f 383/870/57 391/875/52 390/878/50 +f 372/879/56 373/880/43 380/867/55 +f 380/867/55 373/880/43 387/881/45 +f 374/872/54 381/871/53 373/882/43 +f 381/871/53 388/873/49 373/882/43 +f 392/874/48 399/883/27 391/875/52 +f 390/878/50 397/884/29 389/885/51 +f 387/886/45 394/887/25 386/888/46 +f 388/889/49 393/890/26 373/891/43 +f 386/888/46 400/892/47 392/874/48 +f 373/893/43 395/894/44 387/886/45 +f 391/875/52 398/895/70 390/878/50 +f 389/885/51 396/896/71 388/889/49 +f 433/897/41 422/898/38 421/899/41 +f 440/900/42 417/901/27 428/902/42 +f 430/903/36 419/904/35 418/905/36 +f 437/906/37 426/907/30 425/908/37 +f 434/909/38 423/910/26 422/898/38 +f 431/911/35 420/912/28 419/904/35 +f 438/913/30 427/914/39 426/907/30 +f 435/915/26 424/916/40 423/917/26 +f 432/918/28 421/899/41 420/912/28 +f 439/919/39 428/902/42 427/914/39 +f 429/920/27 418/905/36 417/901/27 +f 436/921/40 425/908/37 424/916/40 +f 472/922/68 458/838/59 465/923/69 +f 472/922/68 463/832/55 464/837/58 +f 467/845/63 461/840/60 468/843/61 +f 466/844/62 458/838/59 459/842/32 +f 474/924/30 467/845/63 475/925/67 +f 480/926/25 465/923/69 473/927/66 +f 479/928/65 472/929/68 480/926/25 +f 477/930/64 470/931/43 478/932/28 +f 475/925/67 468/933/61 476/934/29 +f 473/927/66 466/844/62 474/924/30 +f 478/935/28 471/936/56 479/928/65 +f 476/934/29 469/937/54 477/930/64 +f 492/938/43 499/939/28 491/940/28 +f 490/941/31 497/942/27 489/943/27 +f 489/943/27 504/944/32 496/945/32 +f 495/946/30 502/947/72 494/948/72 +f 493/949/26 500/950/43 492/938/43 +f 491/940/28 498/951/31 490/941/31 +f 496/945/32 503/952/30 495/946/30 +f 494/948/72 501/953/26 493/954/26 +f 564/955/43 579/553/28 563/956/28 +f 538/957/28 570/547/43 537/958/43 +f 565/959/26 580/759/43 564/955/43 +f 539/960/31 571/548/28 538/957/28 +f 566/961/72 581/558/26 565/962/26 +f 540/963/27 572/559/31 539/960/31 +f 567/964/30 582/760/72 566/961/72 +f 541/965/32 573/557/27 540/966/27 +f 568/967/32 583/546/30 567/964/30 +f 542/968/30 574/555/32 541/965/32 +f 561/969/27 584/549/32 568/967/32 +f 562/970/31 578/551/27 561/969/27 +f 543/971/72 575/554/30 542/968/30 +f 563/956/28 577/758/31 562/970/31 +f 544/972/26 576/552/72 543/971/72 +f 537/958/43 569/550/26 544/972/26 +f 358/827/52 351/973/70 359/823/50 +f 360/825/51 353/974/71 361/819/49 +f 323/975/73 329/976/26 331/977/71 +f 675/978/74 336/979/70 328/980/75 +f 324/981/76 329/982/26 688/983/72 +f 323/975/73 330/984/29 675/978/74 +f 326/985/77 333/986/25 325/987/78 +f 328/980/75 335/988/27 327/989/79 +f 680/990/80 324/991/76 688/992/72 +f 687/993/81 680/990/80 688/992/72 +f 681/994/82 688/995/72 323/996/73 +f 689/997/83 688/995/72 681/994/82 +f 677/998/31 326/985/77 678/999/84 +f 682/1000/85 328/980/75 676/1001/86 +f 682/1000/85 323/996/73 675/1002/74 +f 679/1003/87 326/985/77 325/1004/78 +f 677/998/31 328/980/75 327/989/79 +f 679/1003/87 324/991/76 680/990/80 +f 686/1005/88 680/990/80 687/993/81 +f 684/1006/89 678/999/84 685/1007/90 +f 318/1008/25 648/1009/81 319/1010/66 +f 320/1011/30 646/1012/83 321/1013/67 +f 315/1014/64 651/1015/89 316/1016/28 +f 317/1017/65 649/1018/88 318/1008/25 +f 319/1010/66 647/1019/72 320/1020/30 +f 321/1013/67 645/1021/91 322/1022/29 +f 322/1022/29 652/1023/92 315/1014/64 +f 316/1016/28 650/1024/90 317/1017/65 +f 651/1015/89 659/1025/86 658/1026/31 +f 650/1024/90 656/1027/87 649/1028/88 +f 645/1029/91 654/1030/82 653/1031/85 +f 652/1023/92 653/1031/85 659/1025/86 +f 650/1024/90 658/1026/31 657/1032/84 +f 649/1028/88 655/1033/80 648/1034/81 +f 655/1033/80 663/1035/78 662/1036/76 +f 658/1026/31 666/1037/75 665/1038/79 +f 656/1027/87 664/1039/77 663/1035/78 +f 654/1030/82 660/1040/74 653/1031/85 +f 659/1025/86 660/1040/74 666/1037/75 +f 658/1026/31 664/1039/77 657/1032/84 +f 646/1041/83 647/1042/72 654/1030/82 +f 654/1030/82 647/1042/72 661/1043/73 +f 648/1034/81 655/1033/80 647/1044/72 +f 655/1033/80 662/1036/76 647/1044/72 +f 666/1037/75 673/1045/27 665/1038/79 +f 664/1039/77 671/1046/25 663/1047/78 +f 661/1048/73 668/1049/29 660/1050/74 +f 662/1051/76 667/1052/26 647/1053/72 +f 660/1050/74 674/1054/70 666/1037/75 +f 647/1055/72 669/1056/71 661/1048/73 +f 665/1038/79 672/1057/47 664/1039/77 +f 663/1047/78 670/1058/44 662/1051/76 +f 690/1059/91 676/1001/86 683/1060/92 +f 690/1059/91 681/994/82 682/1000/85 +f 685/1007/90 679/1003/87 686/1005/88 +f 684/1006/89 676/1001/86 677/998/31 +f 692/1061/28 685/1007/90 693/1062/65 +f 698/1063/29 683/1060/92 691/1064/64 +f 697/1065/67 690/1066/91 698/1063/29 +f 695/1067/66 688/1068/72 696/1069/30 +f 693/1062/65 686/1070/88 694/1071/25 +f 691/1064/64 684/1006/89 692/1061/28 +f 696/1072/30 689/1073/83 697/1065/67 +f 694/1071/25 687/1074/81 695/1067/66 +f 326/985/77 335/988/27 334/1075/47 +f 324/981/76 333/986/25 332/1076/44 +f 141/247/35 153/308/35 152/305/36 +f 148/239/30 160/325/30 159/323/37 +f 145/255/26 157/317/26 156/319/38 +f 142/249/28 154/311/28 153/308/35 +f 149/238/39 161/300/39 160/325/30 +f 146/257/40 158/320/40 157/322/26 +f 143/251/41 155/314/41 154/311/28 +f 150/241/42 162/298/42 161/300/39 +f 140/245/36 152/305/36 151/301/27 +f 147/260/37 159/323/37 158/320/40 +f 144/253/38 156/319/38 155/314/41 +f 139/243/27 151/301/27 162/298/42 +f 169/256/26 193/290/26 194/657/40 +f 166/642/28 190/281/28 191/654/41 +f 173/240/39 197/267/39 198/266/42 +f 163/639/27 187/272/27 188/651/36 +f 170/259/40 194/293/40 195/658/37 +f 167/643/41 191/285/41 192/284/38 +f 174/242/42 198/270/42 187/269/27 +f 164/640/36 188/276/36 189/275/35 +f 171/261/37 195/297/37 196/296/30 +f 168/254/38 192/287/38 193/656/26 +f 165/641/35 189/279/35 190/278/28 +f 173/636/39 172/237/30 196/263/30 +f 184/264/30 208/1077/30 209/786/39 +f 181/291/26 205/1078/26 206/787/40 +f 179/280/41 178/282/28 202/788/28 +f 185/265/39 209/1079/39 210/790/42 +f 176/271/36 175/273/27 199/791/27 +f 182/294/40 206/1080/40 207/793/37 +f 179/283/41 203/1081/41 204/794/38 +f 186/268/42 210/1082/42 199/795/27 +f 177/652/35 176/274/36 200/796/36 +f 183/295/37 207/1083/37 208/798/30 +f 180/288/38 204/1084/38 205/799/26 +f 177/277/35 201/1085/35 202/800/28 +f 217/662/26 229/675/26 228/352/38 +f 214/309/28 226/343/28 225/345/35 +f 221/666/39 233/328/39 232/330/30 +f 218/663/40 230/355/40 229/357/26 +f 214/313/28 215/312/41 227/673/41 +f 222/660/42 234/331/42 233/333/39 +f 212/303/36 224/670/36 223/337/27 +f 219/664/37 231/358/37 230/360/40 +f 216/315/38 228/349/38 227/351/41 +f 211/661/27 223/334/27 234/336/42 +f 213/306/35 225/340/35 224/342/36 +f 220/665/30 232/361/30 231/363/37 +f 244/678/30 256/1086/30 255/801/37 +f 241/353/26 253/1087/26 252/802/38 +f 238/672/28 250/1088/28 249/803/35 +f 245/667/39 257/1089/39 256/804/30 +f 242/676/40 254/1090/40 253/805/26 +f 239/347/41 251/1091/41 250/806/28 +f 246/668/42 258/1092/42 257/807/39 +f 236/338/36 248/1093/36 247/808/27 +f 243/677/37 255/1094/37 254/809/40 +f 240/674/38 252/1095/38 251/810/41 +f 235/669/27 247/1096/27 258/811/42 +f 237/671/35 249/1097/35 248/812/36 +f 470/813/43 356/1098/26 354/814/44 +f 457/816/46 355/822/25 337/817/47 +f 361/819/49 353/974/71 356/820/26 +f 362/815/45 354/814/44 355/822/25 +f 359/823/50 351/973/70 352/824/29 +f 357/818/48 337/817/47 338/826/27 +f 460/836/57 459/842/32 358/827/52 +f 464/837/58 457/839/46 357/818/48 +f 464/837/58 463/832/55 362/834/45 +f 461/840/60 460/836/57 359/823/50 +f 459/842/32 458/838/59 357/818/48 +f 462/828/53 461/840/60 360/841/51 +f 468/843/61 461/840/60 462/828/53 +f 466/844/62 459/842/32 460/836/57 +f 367/846/29 375/856/61 374/847/54 +f 365/849/28 373/1099/43 372/850/56 +f 370/852/66 378/861/69 377/853/62 +f 368/855/67 376/862/63 375/856/61 +f 366/848/64 374/847/54 373/857/43 +f 364/851/65 372/850/56 371/859/68 +f 363/860/25 371/859/68 378/861/69 +f 369/854/30 377/853/62 376/862/63 +f 378/861/69 385/869/59 384/863/32 +f 376/862/63 383/870/57 382/864/60 +f 371/866/68 372/879/56 380/867/55 +f 371/866/68 379/868/58 385/869/59 +f 377/853/62 384/863/32 383/870/57 +f 375/865/61 382/864/60 381/871/53 +f 382/864/60 389/876/51 388/873/49 +f 384/863/32 385/869/59 392/874/48 +f 383/870/57 390/878/50 389/876/51 +f 380/867/55 387/881/45 386/877/46 +f 379/868/58 386/877/46 392/874/48 +f 383/870/57 384/863/32 391/875/52 +f 392/874/48 400/892/47 399/883/27 +f 390/878/50 398/895/70 397/884/29 +f 387/886/45 395/894/44 394/887/25 +f 388/889/49 396/896/71 393/890/26 +f 386/888/46 394/887/25 400/892/47 +f 373/893/43 393/1100/26 395/894/44 +f 391/875/52 399/883/27 398/895/70 +f 389/885/51 397/884/29 396/896/71 +f 433/897/41 434/909/38 422/898/38 +f 440/900/42 429/920/27 417/901/27 +f 430/903/36 431/911/35 419/904/35 +f 437/906/37 438/913/30 426/907/30 +f 434/909/38 435/1101/26 423/910/26 +f 431/911/35 432/918/28 420/912/28 +f 438/913/30 439/919/39 427/914/39 +f 435/915/26 436/921/40 424/916/40 +f 432/918/28 433/897/41 421/899/41 +f 439/919/39 440/900/42 428/902/42 +f 429/920/27 430/903/36 418/905/36 +f 436/921/40 437/906/37 425/908/37 +f 472/922/68 464/837/58 458/838/59 +f 472/922/68 471/835/56 463/832/55 +f 467/845/63 460/836/57 461/840/60 +f 466/844/62 465/923/69 458/838/59 +f 474/924/30 466/844/62 467/845/63 +f 480/926/25 472/929/68 465/923/69 +f 479/928/65 471/936/56 472/929/68 +f 477/930/64 469/937/54 470/931/43 +f 475/925/67 467/845/63 468/933/61 +f 473/927/66 465/923/69 466/844/62 +f 478/935/28 470/1102/43 471/936/56 +f 476/934/29 468/933/61 469/937/54 +f 492/938/43 500/950/43 499/939/28 +f 490/941/31 498/951/31 497/942/27 +f 489/943/27 497/942/27 504/944/32 +f 495/946/30 503/952/30 502/947/72 +f 493/949/26 501/1103/26 500/950/43 +f 491/940/28 499/939/28 498/951/31 +f 496/945/32 504/944/32 503/952/30 +f 494/948/72 502/947/72 501/953/26 +f 564/955/43 580/759/43 579/553/28 +f 538/957/28 571/548/28 570/547/43 +f 565/959/26 581/556/26 580/759/43 +f 539/960/31 572/559/31 571/548/28 +f 566/961/72 582/760/72 581/558/26 +f 540/963/27 573/560/27 572/559/31 +f 567/964/30 583/546/30 582/760/72 +f 541/965/32 574/555/32 573/557/27 +f 568/967/32 584/549/32 583/546/30 +f 542/968/30 575/554/30 574/555/32 +f 561/969/27 578/551/27 584/549/32 +f 562/970/31 577/758/31 578/551/27 +f 543/971/72 576/552/72 575/554/30 +f 563/956/28 579/553/28 577/758/31 +f 544/972/26 569/550/26 576/552/72 +f 537/958/43 570/547/43 569/550/26 +f 358/827/52 338/826/27 351/973/70 +f 360/825/51 352/824/29 353/974/71 +f 323/975/73 688/1104/72 329/976/26 +f 675/978/74 330/984/29 336/979/70 +f 324/981/76 332/1076/44 329/982/26 +f 323/975/73 331/977/71 330/984/29 +f 326/985/77 334/1075/47 333/986/25 +f 328/980/75 336/979/70 335/988/27 +f 677/998/31 327/989/79 326/985/77 +f 682/1000/85 675/1002/74 328/980/75 +f 682/1000/85 681/994/82 323/996/73 +f 679/1003/87 678/999/84 326/985/77 +f 677/998/31 676/1001/86 328/980/75 +f 679/1003/87 325/1004/78 324/991/76 +f 686/1005/88 679/1003/87 680/990/80 +f 684/1006/89 677/998/31 678/999/84 +f 318/1008/25 649/1018/88 648/1009/81 +f 320/1011/30 647/1105/72 646/1012/83 +f 315/1014/64 652/1023/92 651/1015/89 +f 317/1017/65 650/1024/90 649/1018/88 +f 319/1010/66 648/1009/81 647/1019/72 +f 321/1013/67 646/1012/83 645/1021/91 +f 322/1022/29 645/1021/91 652/1023/92 +f 316/1016/28 651/1015/89 650/1024/90 +f 651/1015/89 652/1023/92 659/1025/86 +f 650/1024/90 657/1032/84 656/1027/87 +f 645/1029/91 646/1041/83 654/1030/82 +f 652/1023/92 645/1029/91 653/1031/85 +f 650/1024/90 651/1015/89 658/1026/31 +f 649/1028/88 656/1027/87 655/1033/80 +f 655/1033/80 656/1027/87 663/1035/78 +f 658/1026/31 659/1025/86 666/1037/75 +f 656/1027/87 657/1032/84 664/1039/77 +f 654/1030/82 661/1043/73 660/1040/74 +f 659/1025/86 653/1031/85 660/1040/74 +f 658/1026/31 665/1038/79 664/1039/77 +f 666/1037/75 674/1054/70 673/1045/27 +f 664/1039/77 672/1057/47 671/1046/25 +f 661/1048/73 669/1056/71 668/1049/29 +f 662/1051/76 670/1058/44 667/1052/26 +f 660/1050/74 668/1049/29 674/1054/70 +f 647/1055/72 667/1106/26 669/1056/71 +f 665/1038/79 673/1045/27 672/1057/47 +f 663/1047/78 671/1046/25 670/1058/44 +f 690/1059/91 682/1000/85 676/1001/86 +f 690/1059/91 689/997/83 681/994/82 +f 685/1007/90 678/999/84 679/1003/87 +f 684/1006/89 683/1060/92 676/1001/86 +f 692/1061/28 684/1006/89 685/1007/90 +f 698/1063/29 690/1066/91 683/1060/92 +f 697/1065/67 689/1073/83 690/1066/91 +f 695/1067/66 687/1074/81 688/1068/72 +f 693/1062/65 685/1007/90 686/1070/88 +f 691/1064/64 683/1060/92 684/1006/89 +f 696/1072/30 688/1107/72 689/1073/83 +f 694/1071/25 686/1070/88 687/1074/81 +f 326/985/77 327/989/79 335/988/27 +f 324/981/76 325/987/78 333/986/25 diff --git a/src/main/resources/assets/hbm/textures/models/machines/industrial_turbine.png b/src/main/resources/assets/hbm/textures/models/machines/industrial_turbine.png new file mode 100644 index 0000000000000000000000000000000000000000..e72fef4b2b65a13ee39ddec4122b7d605163d081 GIT binary patch literal 2825 zcmZ8j2~ZQ+7VTgLg0ckAArXWoD9BDQpt2?;U{JxZC~9O2kySuhB_aj`5;qndWKoPk z91&SmHW3Nn0D%$2VNpaNA_$5sDoX@R@*A!Cf9iMD?e4l&@7(*&x!vcTr?~8rU%PQF z008n%WRe>Iz!1>;1B5hmpF@3dhaT`KdnXSBbR{6@Yyeo>=tLrToV+nT)DS*s`FrEY z?G#NA&n!KyHhV1;{y6+@tWqHrWn31z=DKYkrEl7O(DJfU;qy+ZdtOEvnB#vpwzQfc zeZ75~j9NFQ?;r+mzVcpEWDDk83X8;@h#qGbD%{^!P(`1*qFk^42LGtcIiKywa$Q)MQhh|KppCAuJo38o`c_AJ5oF7-cfWacET-`Bi8 zUA7K^+?Lrbo7?^HmKu!a=(YpvzC&6)4S+RHZe4_pIr^-4c~V48x*?S1><1Omedz^f z&d`xSNt*HPu1j@G;6h>fUEbd1NW8~tHb51euL=^3BCv)&Y;RthR2tSE7%Blh<-bI4_Hxy*)e@pvRAT&sA@j9gtKmG(2;UT>SpA+O*}EX0d?V1_tN^youjEJdp}uiC7np zv&5Salja{}_Z)9~eT)yb>VMK;?=CcplPG-MsI@Yyvh00nx5$dzP=ynTU&p=(8V=z)hpCk(t069F`XFF&1`;(hjS*wwx4m!>Oo(peA7p!t0^FnHd5&0096r({1S4+*G%r zu3Zr2Du_hA_j+K?<7PnTctK+FCPi0$as~)#@m_h2!=9tpxI5EyE+Q;Cn+UtaFDKcng;8uA%e zVqDYuZs;_Y^@6_2{#~nF5)aa0{b+Jk{hwlEM!eDCGd>d6h}S+n0$F`M-;BrrT4G+D zS2!+v1J4Be?i_&Kravdf8X04eS&X{GL0)q|Z|tCVjR~P+;zT+xfsSPFu1`!zu$qbI zysVJBqm2iPA0~0*y(LOw)WjtqsYv{z%T7bHvs`mA;o-?YBO)TMYWCt@`=9JO<~Vba z`^V(dz1lx{zo!!9BPRvF5+xMZv)MPikCbpE;+5s4>)ZcHYtK5=H&B<^SCXEd{$XT< zkd~eg0+u!sPxsorTL#u81m%g1i$a&UnBTXYIqJ#Pv&l1TtVYddL$=b&=8 z+cDJ@sjr0X>N?O)B0HYTOA&WKeY^FlD#a|$$9Zdbaf!XQl zskW+zl6R8X2pC3BONvE4+{A5~5ybm$IXdDdry#G%Z#8s0NJnOdUB<$5TPU`cU&-jM zHCvq3JUu;G;!P{X)_21vMB>HkJu6yxfa>V19V?tLe=8qOx+(8P-T z8;=SF#O>9k9FzQXqrxsXt18LjG_`vaHIDoA@{qDg53ky0+wx*}QK%WhmnyJi^)J5) zo}#1tD^mFoNVkpW^n_g>kCT@cZ=HrFaR&M8&zT9zyTczM!$->?dKTZlZUlxeN^z_7(ueRDx961OC7SRE7y;oF%A0g z8C4y9RL(1p*`4hwmtU>Um~{+^9WH+k-a&#_s`9Zr0u^P|7_%)i^{7O7@4%OT#WkXz zy4)@^KwD9sPY<(8+ktZd%C$#mIX#7C3!vkhnqlrz&q9>FbP@@t`{T}}!g{WZ-aVOr z!uK%oZZ8b(<$e9FC#NKdfec3=*~PV${TkHAt}A>EL~cNcp1RIkS?YD76)_01kx7BDWr% z@n1_^DwAn4lm?)A{1vSrt)lb5{E)AID1XXv-71)C^_uYZ6uVwlP|X(nSffS6S z1&O$Z;guhxMafE-cWR8P@v38I5^e?kEc{OX7c?H<%L3Ng|D+6l!O;e>y@U2|%a?Mv ztpQ&Efrz4?>Hty&8gL47l2G|p8KhLM&L)&#wr3EU0}RTP{UvOb()y{3|LkA2k*fIo z_@hW(Cc(Eeu)X%)o=I(#86tTncVDFocV7LcSgKlf(<-vc#Qzd-WGx-FIRV1_hWoIC z;7B;jKu$wn#m);@HcF37`AKz@O4PZeH%T!L)=eyQ~Tj1)krVXUvCJB(# zU(Wqn*qrbxv3#V Date: Wed, 11 Feb 2026 14:11:21 +0100 Subject: [PATCH 08/11] bringeth forth the sriracha nuggets --- src/main/java/com/hbm/blocks/ModBlocks.java | 23 +- .../blocks/machine/FurnaceCombination.java | 3 +- .../hbm/blocks/machine/MachineChungus.java | 41 +-- .../machine/MachineIndustrialTurbine.java | 120 ++++++++ .../blocks/machine/MachineLargeTurbine.java | 1 + .../java/com/hbm/entity/mob/EntityFBI.java | 7 +- .../recipes/AssemblyMachineRecipes.java | 4 +- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 16 +- .../hbm/render/loader/HFRWavefrontObject.java | 11 + .../tileentity/RenderIndustrialTurbine.java | 92 ++++++ .../hbm/tileentity/TileEntityProxyCombo.java | 7 +- .../java/com/hbm/tileentity/TileMappings.java | 1 + .../tileentity/machine/TileEntityChungus.java | 279 +++++------------- .../TileEntityMachineIndustrialTurbine.java | 163 ++++++++++ .../TileEntityMachineLargeTurbine.java | 28 +- .../machine/TileEntitySteamEngine.java | 2 +- .../machine/TileEntityTurbineBase.java | 185 ++++++++++++ .../models/machines/industrial_turbine.obj | 2 +- .../hbm/textures/models/machines/chungus.png | Bin 16198 -> 16204 bytes .../models/machines/industrial_turbine.png | Bin 2825 -> 10230 bytes 21 files changed, 691 insertions(+), 295 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/MachineIndustrialTurbine.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderIndustrialTurbine.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityTurbineBase.java diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 3f8ea99fe..cf0f5c50f 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -968,7 +968,14 @@ public class ModBlocks { public static Block machine_steam_engine; public static Block machine_turbine; - public static Block machine_large_turbine; + @Deprecated public static Block machine_large_turbine; + public static Block machine_industrial_turbine; + public static Block machine_chungus; + + public static Block machine_condenser; + public static Block machine_tower_small; + public static Block machine_tower_large; + public static Block machine_condenser_powered; public static Block machine_deuterium_extractor; public static Block machine_deuterium_tower; @@ -979,12 +986,6 @@ public class ModBlocks { public static Block machine_compressor; public static Block machine_compressor_compact; - public static Block machine_chungus; - public static Block machine_condenser; - public static Block machine_tower_small; - public static Block machine_tower_large; - public static Block machine_condenser_powered; - public static Block machine_electrolyser; public static Block machine_excavator; @@ -2244,7 +2245,8 @@ public class ModBlocks { machine_steam_engine = new MachineSteamEngine().setBlockName("machine_steam_engine").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_turbine = new MachineTurbine(Material.iron).setBlockName("machine_turbine").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_turbine"); machine_large_turbine = new MachineLargeTurbine(Material.iron).setBlockName("machine_large_turbine").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_large_turbine"); - machine_chungus = new MachineChungus(Material.iron).setBlockName("machine_chungus").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_chungus"); + machine_industrial_turbine = new MachineIndustrialTurbine().setBlockName("machine_industrial_turbine").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_chungus = new MachineChungus().setBlockName("machine_chungus").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_condenser = new MachineCondenser(Material.iron).setBlockName("machine_condenser").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":condenser"); machine_tower_small = new MachineTowerSmall(Material.iron).setBlockName("machine_tower_small").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_concrete"); machine_tower_large = new MachineTowerLarge(Material.iron).setBlockName("machine_tower_large").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":concrete"); @@ -3282,6 +3284,7 @@ public class ModBlocks { register(machine_steam_engine); register(machine_turbine); register(machine_large_turbine); + register(machine_industrial_turbine); register(machine_chungus); GameRegistry.registerBlock(machine_condenser, machine_condenser.getUnlocalizedName()); GameRegistry.registerBlock(machine_tower_small, machine_tower_small.getUnlocalizedName()); @@ -3289,8 +3292,8 @@ public class ModBlocks { register(machine_condenser_powered); GameRegistry.registerBlock(machine_deuterium_extractor, machine_deuterium_extractor.getUnlocalizedName()); GameRegistry.registerBlock(machine_deuterium_tower, machine_deuterium_tower.getUnlocalizedName()); - GameRegistry.registerBlock(machine_liquefactor, ItemBlockBase.class, machine_liquefactor.getUnlocalizedName()); - GameRegistry.registerBlock(machine_solidifier, ItemBlockBase.class, machine_solidifier.getUnlocalizedName()); + register(machine_liquefactor); + register(machine_solidifier); register(machine_intake); register(machine_compressor); register(machine_compressor_compact); diff --git a/src/main/java/com/hbm/blocks/machine/FurnaceCombination.java b/src/main/java/com/hbm/blocks/machine/FurnaceCombination.java index 4ce96d14d..17a5d903b 100644 --- a/src/main/java/com/hbm/blocks/machine/FurnaceCombination.java +++ b/src/main/java/com/hbm/blocks/machine/FurnaceCombination.java @@ -20,8 +20,7 @@ public class FurnaceCombination extends BlockDummyable implements ITooltipProvid @Override public TileEntity createNewTileEntity(World world, int meta) { - if(meta >= 12) - return new TileEntityFurnaceCombination(); + if(meta >= 12) return new TileEntityFurnaceCombination(); return new TileEntityProxyCombo().inventory().fluid(); } diff --git a/src/main/java/com/hbm/blocks/machine/MachineChungus.java b/src/main/java/com/hbm/blocks/machine/MachineChungus.java index 16bf80634..793b5afbe 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChungus.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChungus.java @@ -28,19 +28,14 @@ import net.minecraftforge.common.util.ForgeDirection; public class MachineChungus extends BlockDummyable implements ITooltipProvider, ILookOverlay { - public MachineChungus(Material mat) { - super(mat); + public MachineChungus() { + super(Material.iron); } @Override public TileEntity createNewTileEntity(World world, int meta) { - - if(meta >= 12) - return new TileEntityChungus(); - - if(meta >= 6) - return new TileEntityProxyCombo(false, true, true); - + if(meta >= 12) return new TileEntityChungus(); + if(meta >= 6) return new TileEntityProxyCombo(false, true, true); return null; } @@ -69,31 +64,7 @@ public class MachineChungus extends BlockDummyable implements ITooltipProvider, world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.chungusLever", 1.5F, 1.0F); if(!world.isRemote) { - FluidType type = entity.tanks[0].getTankType(); - entity.onLeverPull(type); - - if(type == Fluids.STEAM) { - entity.tanks[0].setTankType(Fluids.HOTSTEAM); - entity.tanks[1].setTankType(Fluids.STEAM); - entity.tanks[0].setFill(entity.tanks[0].getFill() / 10); - entity.tanks[1].setFill(0); - } else if(type == Fluids.HOTSTEAM) { - entity.tanks[0].setTankType(Fluids.SUPERHOTSTEAM); - entity.tanks[1].setTankType(Fluids.HOTSTEAM); - entity.tanks[0].setFill(entity.tanks[0].getFill() / 10); - entity.tanks[1].setFill(0); - } else if(type == Fluids.SUPERHOTSTEAM) { - entity.tanks[0].setTankType(Fluids.ULTRAHOTSTEAM); - entity.tanks[1].setTankType(Fluids.SUPERHOTSTEAM); - entity.tanks[0].setFill(entity.tanks[0].getFill() / 10); - entity.tanks[1].setFill(0); - } else { - entity.tanks[0].setTankType(Fluids.STEAM); - entity.tanks[1].setTankType(Fluids.SPENTSTEAM); - entity.tanks[0].setFill(Math.min(entity.tanks[0].getFill() * 1000, entity.tanks[0].getMaxFill())); - entity.tanks[1].setFill(0); - } - entity.markDirty(); + entity.onLeverPull(); } return true; @@ -168,7 +139,7 @@ public class MachineChungus extends BlockDummyable implements ITooltipProvider, text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + inputType.getLocalizedName() + ": " + String.format(Locale.US, "%,d", tankInput.getFill()) + "/" + String.format(Locale.US, "%,d", tankInput.getMaxFill()) + "mB"); text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + outputType.getLocalizedName() + ": " + String.format(Locale.US, "%,d", tankOutput.getFill()) + "/" + String.format(Locale.US, "%,d", tankOutput.getMaxFill()) + "mB"); - text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + BobMathUtil.getShortNumber(chungus.power) + "/" + BobMathUtil.getShortNumber(chungus.getMaxPower()) + "HE"); + text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + BobMathUtil.getShortNumber(chungus.powerBuffer) + "HE"); ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); diff --git a/src/main/java/com/hbm/blocks/machine/MachineIndustrialTurbine.java b/src/main/java/com/hbm/blocks/machine/MachineIndustrialTurbine.java new file mode 100644 index 000000000..72da572c4 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineIndustrialTurbine.java @@ -0,0 +1,120 @@ +package com.hbm.blocks.machine; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.fluid.trait.FT_Coolable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.TileEntityMachineIndustrialTurbine; +import com.hbm.tileentity.machine.TileEntityTurbineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.i18n.I18nUtil; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachineIndustrialTurbine extends BlockDummyable implements ITooltipProvider, ILookOverlay { + + public MachineIndustrialTurbine() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachineIndustrialTurbine(); + if(meta >= 6) return new TileEntityProxyCombo().fluid().power(); + return null; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + + if(!player.isSneaking()) { + + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return true; + + TileEntityTurbineBase entity = (TileEntityTurbineBase) world.getTileEntity(pos[0], pos[1], pos[2]); + if(entity != null) { + + ForgeDirection dir = ForgeDirection.getOrientation(entity.getBlockMetadata() - this.offset); + + if(x == entity.xCoord + dir.offsetX * 3 && z == entity.zCoord + dir.offsetZ * 3 && y == entity.yCoord + 1) { + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.chungusLever", 1.5F, 1.0F); + if(!world.isRemote) entity.onLeverPull(); + return true; + } + } + } + + return false; + } + + @Override public int[] getDimensions() { return new int[] { 2, 0, 3, 3, 1, 1 }; } + @Override public int getOffset() { return 3; } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + x += dir.offsetX * o; + z += dir.offsetZ * o; + + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + this.makeExtra(world, x + dir.offsetX * 3 + rot.offsetX, y, z + dir.offsetZ * 3 + rot.offsetZ); + this.makeExtra(world, x + dir.offsetX * 3 - rot.offsetX, y, z + dir.offsetZ * 3 - rot.offsetZ); + this.makeExtra(world, x - dir.offsetX * 1 + rot.offsetX, y, z - dir.offsetZ * 1 + rot.offsetZ); + this.makeExtra(world, x - dir.offsetX * 1 - rot.offsetX, y, z - dir.offsetZ * 1 - rot.offsetZ); + this.makeExtra(world, x + dir.offsetX * 3, y + 2, z + dir.offsetZ * 3); + this.makeExtra(world, x - dir.offsetX * 1, y + 2, z - dir.offsetZ * 1); + this.makeExtra(world, x - dir.offsetX * 3, y + 1, z - dir.offsetZ * 3); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return; + + TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]); + if(!(te instanceof TileEntityMachineIndustrialTurbine)) return; + + TileEntityMachineIndustrialTurbine chungus = (TileEntityMachineIndustrialTurbine) te; + List text = new ArrayList(); + + FluidTank tankInput = chungus.tanks[0]; + FluidTank tankOutput = chungus.tanks[1]; + + FluidType inputType = tankInput.getTankType(); + FluidType outputType = Fluids.NONE; + + if(inputType.hasTrait(FT_Coolable.class)) { + outputType = inputType.getTrait(FT_Coolable.class).coolsTo; + } + + text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + inputType.getLocalizedName() + ": " + String.format(Locale.US, "%,d", tankInput.getFill()) + "/" + String.format(Locale.US, "%,d", tankInput.getMaxFill()) + "mB"); + text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + outputType.getLocalizedName() + ": " + String.format(Locale.US, "%,d", tankOutput.getFill()) + "/" + String.format(Locale.US, "%,d", tankOutput.getMaxFill()) + "mB"); + text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + BobMathUtil.getShortNumber(chungus.powerBuffer) + "HE (" + (int)(chungus.spin * 100) + "%)"); + + + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } +} diff --git a/src/main/java/com/hbm/blocks/machine/MachineLargeTurbine.java b/src/main/java/com/hbm/blocks/machine/MachineLargeTurbine.java index cc8328dd3..2b36ad1a1 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineLargeTurbine.java +++ b/src/main/java/com/hbm/blocks/machine/MachineLargeTurbine.java @@ -17,6 +17,7 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.List; +@Deprecated public class MachineLargeTurbine extends BlockDummyable implements ITooltipProvider { public MachineLargeTurbine(Material mat) { diff --git a/src/main/java/com/hbm/entity/mob/EntityFBI.java b/src/main/java/com/hbm/entity/mob/EntityFBI.java index a20e5c415..c1f29e7a4 100644 --- a/src/main/java/com/hbm/entity/mob/EntityFBI.java +++ b/src/main/java/com/hbm/entity/mob/EntityFBI.java @@ -150,10 +150,13 @@ public class EntityFBI extends EntityMob implements IRangedAttackMob { canDestroy.add(Blocks.trapdoor); canDestroy.add(ModBlocks.machine_press); canDestroy.add(ModBlocks.machine_epress); - canDestroy.add(ModBlocks.machine_chemplant); + canDestroy.add(ModBlocks.machine_chemical_plant); + canDestroy.add(ModBlocks.machine_chemical_factory); canDestroy.add(ModBlocks.machine_crystallizer); canDestroy.add(ModBlocks.machine_turbine); - canDestroy.add(ModBlocks.machine_large_turbine); + canDestroy.add(ModBlocks.machine_industrial_turbine); + canDestroy.add(ModBlocks.machine_chungus); + canDestroy.add(ModBlocks.machine_purex); canDestroy.add(ModBlocks.crate_iron); canDestroy.add(ModBlocks.crate_steel); canDestroy.add(ModBlocks.machine_diesel); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 5d775ed67..78a78b1b8 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -386,8 +386,8 @@ public class AssemblyMachineRecipes extends GenericRecipes { 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)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(NB.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new ComparableStack(ModBlocks.glass_quartz, 16))); - this.register(new GenericRecipe("ass.iturbine").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_large_turbine, 1)) - .inputItems(new OreDictStack(STEEL.plate(), 12), new OreDictStack(RUBBER.ingot(), 4), new ComparableStack(ModItems.turbine_titanium, 3), new OreDictStack(GOLD.wireDense(), 6), new OreDictStack(DURA.pipe(), 3), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC)) + this.register(new GenericRecipe("ass.iturbine").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_industrial_turbine, 1)) + .inputItems(new OreDictStack(STEEL.plate(), 12), new OreDictStack(RUBBER.ingot(), 4), new ComparableStack(ModItems.turbine_titanium, 3), new OreDictStack(GOLD.wireDense(), 6), new OreDictStack(DURA.pipe(), 4), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.turbine_titanium, 3), new OreDictStack(GOLD.wireDense(), 16), new OreDictStack(DURA.pipe(), 16), new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.leviturbine").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_chungus, 1)) .inputItems(new OreDictStack(STEEL.shell(), 6), new OreDictStack(STEEL.plateWelded(), 16), new OreDictStack(TI.plate(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new ComparableStack(ModItems.turbine_tungsten, 5), new ComparableStack(ModItems.turbine_titanium, 3), new ComparableStack(ModItems.flywheel_beryllium, 1), new OreDictStack(GOLD.wireDense(), 48), new OreDictStack(DURA.pipe(), 16), new OreDictStack(STEEL.pipe(), 16)) diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 115b054f8..366757216 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -312,6 +312,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBatterySocket.class, new RenderBatterySocket()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBatteryREDD.class, new RenderBatteryREDD()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineLargeTurbine.class, new RenderBigTurbine()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineIndustrialTurbine.class, new RenderIndustrialTurbine()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineReactorBreeding.class, new RenderBreeder()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySolarBoiler.class, new RenderSolarBoiler()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityStorageDrum.class, new RenderStorageDrum()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 669eaa662..4f6444ddf 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -105,9 +105,10 @@ public class ResourceManager { public static final IModelCustom pump = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/pump.obj")).asVBO(); //Large Turbine - public static final IModelCustom steam_engine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/steam_engine.obj")).asVBO(); - public static final IModelCustom turbine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/turbine.obj")); - public static final IModelCustom chungus = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chungus.obj")).asVBO(); + public static final IModelCustom steam_engine = new HFRWavefrontObject("models/machines/steam_engine.obj").asVBO(); + public static final IModelCustom turbine = new HFRWavefrontObject("models/machines/turbine.obj").asVBO(); + public static final IModelCustom industrial_turbine = new HFRWavefrontObject("models/machines/industrial_turbine.obj").asVBO(); + public static final IModelCustom chungus = new HFRWavefrontObject("models/machines/chungus.obj").asVBO(); //Cooling Tower public static final IModelCustom tower_small = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/tower_small.obj")).asVBO(); @@ -118,13 +119,13 @@ public class ResourceManager { public static final IModelCustom condenser = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/condenser.obj")).asVBO(); //Wood burner - public static final IModelCustom wood_burner = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/wood_burner.obj")); + public static final IModelCustom wood_burner = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/wood_burner.obj")).asVBO(); //IGen public static final IModelCustom igen = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/igen.obj")); //Combustion Engine - public static final IModelCustom dieselgen = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/dieselgen.obj")); + public static final IModelCustom dieselgen = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/dieselgen.obj")).asVBO(); public static final IModelCustom combustion_engine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/combustion_engine.obj")).asVBO(); //Press @@ -159,7 +160,7 @@ public class ResourceManager { public static final IModelCustom purex = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/purex.obj")).asVBO(); //Mixer - public static final IModelCustom mixer = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/mixer.obj")); + public static final IModelCustom mixer = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/mixer.obj")).asVBO(); //Arc Welder public static final IModelCustom arc_welder = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/arc_welder.obj"), false).asVBO(); @@ -183,7 +184,7 @@ public class ResourceManager { public static final IModelCustom microwave = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/microwave.obj")); //Big Man Johnson - public static final IModelCustom autosaw = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/autosaw.obj")); + public static final IModelCustom autosaw = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/autosaw.obj"), false).asVBO(); //Mining Drill public static final IModelCustom mining_drill = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/mining_drill.obj")).asVBO(); @@ -546,6 +547,7 @@ public class ResourceManager { //Large Turbine public static final ResourceLocation steam_engine_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/steam_engine.png"); public static final ResourceLocation turbine_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/turbine.png"); + public static final ResourceLocation industrial_turbine_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/industrial_turbine.png"); public static final ResourceLocation chungus_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chungus.png"); //Cooling Tower diff --git a/src/main/java/com/hbm/render/loader/HFRWavefrontObject.java b/src/main/java/com/hbm/render/loader/HFRWavefrontObject.java index 2b65efee2..df9af98ff 100644 --- a/src/main/java/com/hbm/render/loader/HFRWavefrontObject.java +++ b/src/main/java/com/hbm/render/loader/HFRWavefrontObject.java @@ -13,6 +13,8 @@ import java.util.regex.Pattern; import org.lwjgl.opengl.GL11; +import com.hbm.lib.RefStrings; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; @@ -51,6 +53,15 @@ public class HFRWavefrontObject implements IModelCustomNamed { private String fileName; private boolean smoothing = true; + public HFRWavefrontObject(String name) throws ModelFormatException { + this(new ResourceLocation(RefStrings.MODID, name)); + } + + public HFRWavefrontObject noSmooth() { + this.smoothing = false; + return this; + } + public HFRWavefrontObject(ResourceLocation resource) throws ModelFormatException { this.resource = resource; this.fileName = resource.toString(); diff --git a/src/main/java/com/hbm/render/tileentity/RenderIndustrialTurbine.java b/src/main/java/com/hbm/render/tileentity/RenderIndustrialTurbine.java new file mode 100644 index 000000000..f412f7171 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderIndustrialTurbine.java @@ -0,0 +1,92 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.TileEntityMachineIndustrialTurbine; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderIndustrialTurbine extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tile, 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.glEnable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); + + switch(tile.getBlockMetadata() - 10) { + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + } + + TileEntityMachineIndustrialTurbine turbine = (TileEntityMachineIndustrialTurbine) tile; + + bindTexture(ResourceManager.industrial_turbine_tex); + ResourceManager.industrial_turbine.renderPart("Turbine"); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 1.5, 0); + GL11.glRotated(135 - (turbine.tanks[0].getTankType().getID() - Fluids.STEAM.getID()) * 90, 0, 0, 1); + GL11.glTranslated(0, -1.5, 0); + ResourceManager.industrial_turbine.renderPart("Gauge"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 1.5, 0); + GL11.glRotated(turbine.lastRotor + (turbine.rotor - turbine.lastRotor) * interp, 0, 0, -1); + GL11.glTranslated(0, -1.5, 0); + ResourceManager.industrial_turbine.renderPart("Flywheel"); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_industrial_turbine); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase( ) { + public void renderInventory() { + GL11.glTranslated(1, 0, 0); + GL11.glScaled(3, 3, 3); + } + public void renderCommon() { + GL11.glRotatef(90, 0F, 1F, 0F); + GL11.glScaled(0.75, 0.75, 0.75); + GL11.glTranslated(0.5, 0, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.industrial_turbine_tex); + + ResourceManager.industrial_turbine.renderPart("Turbine"); + + GL11.glTranslated(0, 1.5, 0); + GL11.glRotated(135, 0, 0, 1); + GL11.glTranslated(0, -1.5, 0); + ResourceManager.industrial_turbine.renderPart("Gauge"); + + double rot = (System.currentTimeMillis() / 5) % 336D; + GL11.glTranslated(0, 1.5, 0); + GL11.glRotated(rot, 0, 0, -1); + GL11.glTranslated(0, -1.5, 0); + ResourceManager.industrial_turbine.renderPart("Flywheel"); + + GL11.glShadeModel(GL11.GL_FLAT); + } + }; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java index 9a7ee5cfb..2eb2b5081 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java @@ -7,6 +7,7 @@ import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.tank.FluidTank; import api.hbm.energymk2.IEnergyConductorMK2; +import api.hbm.energymk2.IEnergyConnectorMK2; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluidmk2.IFluidConnectorMK2; import api.hbm.fluidmk2.IFluidReceiverMK2; @@ -148,15 +149,15 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy @Override public boolean canConnect(ForgeDirection dir) { - if(power && getCoreObject() instanceof IEnergyReceiverMK2) { - return ((IEnergyReceiverMK2)getCoreObject()).canConnect(dir); + if(power && getCoreObject() instanceof IEnergyConnectorMK2) { + return ((IEnergyConnectorMK2)getCoreObject()).canConnect(dir); } if(conductor && getCoreObject() instanceof IEnergyConductorMK2) { return ((IEnergyConductorMK2)getCoreObject()).canConnect(dir); } - return true; + return false; } @Override diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 0b89cb049..6a8791bdf 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -347,6 +347,7 @@ public class TileMappings { put(TileEntitySteamEngine.class, "tileentity_steam_engine"); put(TileEntityMachineTurbine.class, "tileentity_turbine"); put(TileEntityMachineLargeTurbine.class, "tileentity_industrial_turbine"); + put(TileEntityMachineIndustrialTurbine.class, "tileentity_ind_turbine"); put(TileEntityChungus.class, "tileentity_chungus"); put(TileEntityMachineCombustionEngine.class, "tileentity_combustion_engine"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java index c5c922c8f..0b367a1d6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java @@ -7,54 +7,35 @@ import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.blocks.BlockDummyable; import com.hbm.handler.CompatHandler; -import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; -import com.hbm.inventory.fluid.trait.FT_Coolable; -import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; -import com.hbm.tileentity.IBufPacketReceiver; -import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IConfigurableMachine; -import com.hbm.tileentity.TileEntityLoadedBase; -import com.hbm.util.CompatEnergyControl; -import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; -import api.hbm.energymk2.IEnergyProviderMK2; -import api.hbm.fluid.IFluidStandardTransceiver; -import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.Optional; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; 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.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyProviderMK2, IFluidStandardTransceiver, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IConfigurableMachine, IBufPacketReceiver, IFluidCopiable{ +public class TileEntityChungus extends TileEntityTurbineBase implements SimpleComponent, CompatHandler.OCComponent, IConfigurableMachine { - public long power; private int turnTimer; public float rotor; public float lastRotor; public float fanAcceleration = 0F; - public FluidTank[] tanks; - protected double[] info = new double[3]; - private AudioWrapper audio; private float audioDesync; //Configurable values - public static long maxPower = 100000000000L; public static int inputTankSize = 1_000_000_000; public static int outputTankSize = 1_000_000_000; public static double efficiency = 0.85D; @@ -75,7 +56,6 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr @Override public void readIfPresent(JsonObject obj) { - maxPower = IConfigurableMachine.grab(obj, "L:maxPower", maxPower); inputTankSize = IConfigurableMachine.grab(obj, "I:inputTankSize", inputTankSize); outputTankSize = IConfigurableMachine.grab(obj, "I:outputTankSize", outputTankSize); efficiency = IConfigurableMachine.grab(obj, "D:efficiency", efficiency); @@ -83,123 +63,16 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr @Override public void writeConfig(JsonWriter writer) throws IOException { - writer.name("L:maxPower").value(maxPower); writer.name("INFO").value("leviathan steam turbine consumes all availible steam per tick"); writer.name("I:inputTankSize").value(inputTankSize); writer.name("I:outputTankSize").value(outputTankSize); writer.name("D:efficiency").value(efficiency); } - - + + @Override public double consumptionPercent() { return 1D; } + @Override public double getEfficiency() { return efficiency; } @Override - public void updateEntity() { - - if(!worldObj.isRemote) { - - this.power *= 0.95; - - this.info = new double[3]; - - boolean operational = false; - FluidType in = tanks[0].getTankType(); - boolean valid = false; - if(in.hasTrait(FT_Coolable.class)) { - FT_Coolable trait = in.getTrait(FT_Coolable.class); - double eff = trait.getEfficiency(CoolingType.TURBINE) * efficiency; //85% efficiency by default - if(eff > 0) { - tanks[1].setTankType(trait.coolsTo); - int inputOps = tanks[0].getFill() / trait.amountReq; - int outputOps = (tanks[1].getMaxFill() - tanks[1].getFill()) / trait.amountProduced; - int ops = Math.min(inputOps, outputOps); - tanks[0].setFill(tanks[0].getFill() - ops * trait.amountReq); - tanks[1].setFill(tanks[1].getFill() + ops * trait.amountProduced); - this.power += (ops * trait.heatEnergy * eff); - info[0] = ops * trait.amountReq; - info[1] = ops * trait.amountProduced; - info[2] = ops * trait.heatEnergy * eff; - valid = true; - operational = ops > 0; - } - } - - if(!valid) tanks[1].setTankType(Fluids.NONE); - if(power > maxPower) power = maxPower; - - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); - this.tryProvide(worldObj, xCoord - dir.offsetX * 11, yCoord, zCoord - dir.offsetZ * 11, dir.getOpposite()); - - for(DirPos pos : this.getConPos()) { - this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); - this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); - } - - if(power > maxPower) - power = maxPower; - - turnTimer--; - - if(operational) turnTimer = 25; - networkPackNT(150); - - } else { - - this.lastRotor = this.rotor; - this.rotor += this.fanAcceleration; - - if(this.rotor >= 360) { - this.rotor -= 360; - this.lastRotor -= 360; - } - - if(turnTimer > 0) { - // Fan accelerates with a random offset to ensure the audio doesn't perfectly align, makes for a more pleasant hum - this.fanAcceleration = Math.max(0F, Math.min(25F, this.fanAcceleration += 0.075F + audioDesync)); - - Random rand = worldObj.rand; - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); - ForgeDirection side = dir.getRotation(ForgeDirection.UP); - - for(int i = 0; i < 10; i++) { - worldObj.spawnParticle("cloud", - xCoord + 0.5 + dir.offsetX * (rand.nextDouble() + 1.25) + rand.nextGaussian() * side.offsetX * 0.65, - yCoord + 2.5 + rand.nextGaussian() * 0.65, - zCoord + 0.5 + dir.offsetZ * (rand.nextDouble() + 1.25) + rand.nextGaussian() * side.offsetZ * 0.65, - -dir.offsetX * 0.2, 0, -dir.offsetZ * 0.2); - } - - - if(audio == null) { - audio = MainRegistry.proxy.getLoopedSound("hbm:block.chungusTurbineRunning", xCoord, yCoord, zCoord, 1.0F, 20F, 1.0F); - audio.startSound(); - } - - float turbineSpeed = this.fanAcceleration / 25F; - audio.updateVolume(getVolume(0.5f * turbineSpeed)); - audio.updatePitch(0.25F + 0.75F * turbineSpeed); - } else { - this.fanAcceleration = Math.max(0F, Math.min(25F, this.fanAcceleration -= 0.1F)); - - if(audio != null) { - if(this.fanAcceleration > 0) { - float turbineSpeed = this.fanAcceleration / 25F; - audio.updateVolume(getVolume(0.5f * turbineSpeed)); - audio.updatePitch(0.25F + 0.75F * turbineSpeed); - } else { - audio.stopSound(); - audio = null; - } - } - } - } - } - - public void onLeverPull(FluidType previous) { - for(BlockPos pos : getConPos()) { - this.tryUnsubscribe(previous, worldObj, pos.getX(), pos.getY(), pos.getZ()); - } - } - public DirPos[] getConPos() { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); ForgeDirection rot = dir.getRotation(ForgeDirection.UP); @@ -209,37 +82,82 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr new DirPos(xCoord - rot.offsetX * 3, yCoord, zCoord - rot.offsetZ * 3, rot.getOpposite()) }; } + + @Override + public DirPos[] getPowerPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); + return new DirPos[] { new DirPos(xCoord - dir.offsetX * 11, yCoord, zCoord - dir.offsetZ * 11, dir.getOpposite()) }; + } + + @Override + public void onServerTick() { + turnTimer--; + if(operational) turnTimer = 25; + } + + @Override + public void onClientTick() { + + this.lastRotor = this.rotor; + this.rotor += this.fanAcceleration; + + if(this.rotor >= 360) { + this.rotor -= 360; + this.lastRotor -= 360; + } + + if(turnTimer > 0) { + // Fan accelerates with a random offset to ensure the audio doesn't perfectly align, makes for a more pleasant hum + this.fanAcceleration = Math.max(0F, Math.min(25F, this.fanAcceleration += 0.075F + audioDesync)); + + Random rand = worldObj.rand; + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); + ForgeDirection side = dir.getRotation(ForgeDirection.UP); + + for(int i = 0; i < 10; i++) { + worldObj.spawnParticle("cloud", + xCoord + 0.5 + dir.offsetX * (rand.nextDouble() + 1.25) + rand.nextGaussian() * side.offsetX * 0.65, + yCoord + 2.5 + rand.nextGaussian() * 0.65, + zCoord + 0.5 + dir.offsetZ * (rand.nextDouble() + 1.25) + rand.nextGaussian() * side.offsetZ * 0.65, + -dir.offsetX * 0.2, 0, -dir.offsetZ * 0.2); + } + + if(audio == null) { + audio = MainRegistry.proxy.getLoopedSound("hbm:block.chungusTurbineRunning", xCoord, yCoord, zCoord, 1.0F, 20F, 1.0F, 20); + audio.startSound(); + } + + float turbineSpeed = this.fanAcceleration / 25F; + audio.updateVolume(getVolume(0.5f * turbineSpeed)); + audio.updatePitch(0.25F + 0.75F * turbineSpeed); + audio.keepAlive(); + + } else { + this.fanAcceleration = Math.max(0F, Math.min(25F, this.fanAcceleration -= 0.1F)); + + if(audio != null) { + if(this.fanAcceleration > 0) { + float turbineSpeed = this.fanAcceleration / 25F; + audio.updateVolume(getVolume(0.5f * turbineSpeed)); + audio.updatePitch(0.25F + 0.75F * turbineSpeed); + } else { + audio.stopSound(); + audio = null; + } + } + } + } @Override public void serialize(ByteBuf buf) { - buf.writeLong(this.power); + super.serialize(buf); buf.writeInt(this.turnTimer); - this.tanks[0].serialize(buf); - this.tanks[1].serialize(buf); } @Override public void deserialize(ByteBuf buf) { - this.power = buf.readLong(); + super.deserialize(buf); this.turnTimer = buf.readInt(); - this.tanks[0].deserialize(buf); - this.tanks[1].deserialize(buf); - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); - tanks[0].readFromNBT(nbt, "water"); - tanks[1].readFromNBT(nbt, "steam"); - power = nbt.getLong("power"); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - tanks[0].writeToNBT(nbt, "water"); - tanks[1].writeToNBT(nbt, "steam"); - nbt.setLong("power", power); } @Override @@ -247,32 +165,11 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr return TileEntity.INFINITE_EXTENT_AABB; } - @Override - @SideOnly(Side.CLIENT) - public double getMaxRenderDistanceSquared() { - return 65536.0D; - } - @Override public boolean canConnect(ForgeDirection dir) { return dir != ForgeDirection.UP && dir != ForgeDirection.DOWN && dir != ForgeDirection.UNKNOWN; } - @Override - public long getPower() { - return power; - } - - @Override - public long getMaxPower() { - return maxPower; - } - - @Override - public void setPower(long power) { - this.power = power; - } - @Override @Optional.Method(modid = "OpenComputers") public String getComponentName() { @@ -321,13 +218,13 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr @Callback(direct = true, doc = "function():number -- Gets the power buffer of the turbine.") @Optional.Method(modid = "OpenComputers") public Object[] getPower(Context context, Arguments args) { - return new Object[] {power}; + return new Object[] {powerBuffer}; } @Callback(direct = true, doc = "function():table -- Gets information about this turbine. The format is the following: , , , , , ") @Optional.Method(modid = "OpenComputers") public Object[] getInfo(Context context, Arguments args) { - return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill(), CompatHandler.steamTypeToInt(tanks[0].getTankType())[0], power}; + return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill(), CompatHandler.steamTypeToInt(tanks[0].getTankType())[0], powerBuffer}; } @Override @@ -357,34 +254,6 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr case ("getInfo"): return getInfo(context, args); } - throw new NoSuchMethodException(); - } - - @Override - public FluidTank[] getSendingTanks() { - return new FluidTank[] {tanks[1]}; - } - - @Override - public FluidTank[] getReceivingTanks() { - return new FluidTank[] {tanks[0]}; - } - - @Override - public FluidTank[] getAllTanks() { - return tanks; - } - - @Override - public void provideExtraInfo(NBTTagCompound data) { - data.setBoolean(CompatEnergyControl.B_ACTIVE, info[1] > 0); - data.setDouble(CompatEnergyControl.D_CONSUMPTION_MB, info[0]); - data.setDouble(CompatEnergyControl.D_OUTPUT_MB, info[1]); - data.setDouble(CompatEnergyControl.D_OUTPUT_HE, info[2]); - } - - @Override - public FluidTank getTankToPaste() { - return null; + throw new NoSuchMethodException(); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java new file mode 100644 index 000000000..7c2045a71 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java @@ -0,0 +1,163 @@ +package com.hbm.tileentity.machine; + +import java.io.IOException; + +import com.google.gson.JsonObject; +import com.google.gson.stream.JsonWriter; +import com.hbm.blocks.BlockDummyable; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.fluid.trait.FT_Coolable; +import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; +import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.util.fauxpointtwelve.DirPos; + +import io.netty.buffer.ByteBuf; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase implements IConfigurableMachine { + + public static int inputTankSize = 1_000_000_000; + public static int outputTankSize = 1_000_000_000; + public static double efficiency = 1D; + + public float rotor; + public float lastRotor; + + public double spin = 0; + public static double ACCELERATION = 1D / 400D; + public long lastPowerTarget = 0; + + @Override + public String getConfigName() { + return "steamturbineIndustrial"; + } + + @Override + public void readIfPresent(JsonObject obj) { + inputTankSize = IConfigurableMachine.grab(obj, "I:inputTankSize", inputTankSize); + outputTankSize = IConfigurableMachine.grab(obj, "I:outputTankSize", outputTankSize); + efficiency = IConfigurableMachine.grab(obj, "D:efficiency", efficiency); + } + + @Override + public void writeConfig(JsonWriter writer) throws IOException { + writer.name("INFO").value("industrial steam turbine consumes 20% of availible steam per tick"); + writer.name("I:inputTankSize").value(inputTankSize); + writer.name("I:outputTankSize").value(outputTankSize); + writer.name("D:efficiency").value(efficiency); + } + + public TileEntityMachineIndustrialTurbine() { + tanks = new FluidTank[2]; + tanks[0] = new FluidTank(Fluids.STEAM, inputTankSize); + tanks[1] = new FluidTank(Fluids.SPENTSTEAM, outputTankSize); + } + + // sets the power target so we know how much this steam type can theoretically make, and increments the spin based on actual throughput + @Override + public void generatePower(long power, int steamConsumed) { + FT_Coolable trait = tanks[0].getTankType().getTrait(FT_Coolable.class); + double eff = trait.getEfficiency(CoolingType.TURBINE) * getEfficiency(); + int maxOps = (int) Math.ceil((tanks[0].getMaxFill() * consumptionPercent()) / trait.amountReq); + this.lastPowerTarget = (long) (maxOps * trait.heatEnergy * eff); // theoretical max output at full blast with this type + double fraction = (double) steamConsumed / (double) (trait.amountReq * maxOps); // % of max steam throughput currently achieved + + if(Math.abs(spin - fraction) <= ACCELERATION) { + this.spin = fraction; + } else if(spin < fraction) { + this.spin += ACCELERATION; + } else if(spin > fraction) { + this.spin -= ACCELERATION; + } + } + + @Override + public void onServerTick() { + if(!operational) { + this.spin -= ACCELERATION; + } + + if(this.spin <= 0) { + this.spin = 0; + } else { + this.powerBuffer = (long) (this.lastPowerTarget * this.spin); + } + } + + @Override + public void onClientTick() { + + this.lastRotor = this.rotor; + this.rotor += this.spin * 30; + + if(this.rotor >= 360) { + this.lastRotor -= 360; + this.rotor -= 360; + } + } + + @Override + public boolean canConnect(ForgeDirection dir) { + ForgeDirection myDir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); + return dir == myDir.getOpposite(); + } + + @Override + public boolean canConnect(FluidType type, ForgeDirection dir) { + if(!type.hasTrait(FT_Coolable.class)) return false; + ForgeDirection myDir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); + return dir != myDir && dir != myDir.getOpposite(); + } + + @Override public double consumptionPercent() { return 0.2D; } + @Override public double getEfficiency() { return efficiency; } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeDouble(this.spin); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.spin = buf.readDouble(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + lastPowerTarget = nbt.getLong("lastPowerTarget"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setLong("lastPowerTarget", lastPowerTarget); + } + + @Override + public DirPos[] getConPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + return new DirPos[] { + new DirPos(xCoord + dir.offsetX * 3 + rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 3 + rot.offsetZ * 2, rot), + new DirPos(xCoord + dir.offsetX * 3 - rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 3 - rot.offsetZ * 2, rot.getOpposite()), + new DirPos(xCoord - dir.offsetX * 1 + rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 1 + rot.offsetZ * 2, rot), + new DirPos(xCoord - dir.offsetX * 1 - rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 1 - rot.offsetZ * 2, rot.getOpposite()), + new DirPos(xCoord + dir.offsetX * 3, yCoord + 3, zCoord + dir.offsetZ * 3, ForgeDirection.UP), + new DirPos(xCoord - dir.offsetX * 1, yCoord + 3, zCoord - dir.offsetZ * 1, ForgeDirection.UP), + }; + } + + @Override + public DirPos[] getPowerPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); + return new DirPos[] { + new DirPos(xCoord - dir.offsetX * 4, yCoord + 1, zCoord - dir.offsetZ * 4, dir.getOpposite()) + }; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java index 33f318fb1..28c9ab943 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java @@ -1,10 +1,7 @@ package com.hbm.tileentity.machine; import java.util.Random; -import java.io.IOException; -import com.google.gson.JsonObject; -import com.google.gson.stream.JsonWriter; import com.hbm.blocks.BlockDummyable; import com.hbm.handler.CompatHandler; import com.hbm.inventory.container.ContainerMachineLargeTurbine; @@ -18,7 +15,6 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IFluidCopiable; -import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -44,7 +40,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 TileEntityMachineLargeTurbine extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IConfigurableMachine, IFluidCopiable { +public class TileEntityMachineLargeTurbine extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IFluidCopiable { public long power; public FluidTank[] tanks; @@ -76,28 +72,6 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme audioDesync = rand.nextFloat() * 0.05F; } - @Override - public String getConfigName() { - return "steamturbineIndustrial"; - } - - @Override - public void readIfPresent(JsonObject obj) { - maxPower = IConfigurableMachine.grab(obj, "L:maxPower", maxPower); - inputTankSize = IConfigurableMachine.grab(obj, "I:inputTankSize", inputTankSize); - outputTankSize = IConfigurableMachine.grab(obj, "I:outputTankSize", outputTankSize); - efficiency = IConfigurableMachine.grab(obj, "D:efficiency", efficiency); - } - - @Override - public void writeConfig(JsonWriter writer) throws IOException { - writer.name("L:maxPower").value(maxPower); - writer.name("INFO").value("industrial steam turbine consumes 20% of availible steam per tick"); - writer.name("I:inputTankSize").value(inputTankSize); - writer.name("I:outputTankSize").value(outputTankSize); - writer.name("D:efficiency").value(efficiency); - } - @Override public String getName() { return "container.machineLargeTurbine"; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java index d0297d2f8..f32c6e9ed 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java @@ -70,7 +70,7 @@ public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEner writer.name("D:efficiency").value(efficiency); } - ByteBuf buf; + protected ByteBuf buf; @Override public void updateEntity() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityTurbineBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityTurbineBase.java new file mode 100644 index 000000000..b516b11b4 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityTurbineBase.java @@ -0,0 +1,185 @@ +package com.hbm.tileentity.machine; + +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.fluid.trait.FT_Coolable; +import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; +import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.IFluidCopiable; +import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.util.CompatEnergyControl; +import com.hbm.util.fauxpointtwelve.DirPos; + +import api.hbm.energymk2.IEnergyProviderMK2; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import api.hbm.tile.IInfoProviderEC; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import net.minecraft.nbt.NBTTagCompound; + +public abstract class TileEntityTurbineBase extends TileEntityLoadedBase implements IEnergyProviderMK2, IFluidStandardTransceiverMK2, IInfoProviderEC, IBufPacketReceiver, IFluidCopiable { + + protected ByteBuf buf; + public long powerBuffer; + + public FluidTank[] tanks; + protected double[] info = new double[3]; + public boolean operational = false; + + public abstract double getEfficiency(); + public abstract DirPos[] getConPos(); + public abstract DirPos[] getPowerPos(); + public abstract double consumptionPercent(); + + public void generatePower(long power, int steamConsumed) { + this.powerBuffer += power; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + this.powerBuffer = 0; + this.info = new double[3]; + + if(this.buf != null) this.buf.release(); + this.buf = Unpooled.buffer(); + + this.tanks[0].serialize(buf); + + operational = false; + FluidType in = tanks[0].getTankType(); + boolean valid = false; + if(in.hasTrait(FT_Coolable.class)) { + FT_Coolable trait = in.getTrait(FT_Coolable.class); + double eff = trait.getEfficiency(CoolingType.TURBINE) * getEfficiency(); + if(eff > 0) { + tanks[1].setTankType(trait.coolsTo); + int inputOps = (int) Math.ceil((tanks[0].getFill() * consumptionPercent()) / trait.amountReq); + int outputOps = (tanks[1].getMaxFill() - tanks[1].getFill()) / trait.amountProduced; + int ops = Math.min(inputOps, outputOps); + if(ops > 0) { + tanks[0].setFill(tanks[0].getFill() - ops * trait.amountReq); + tanks[1].setFill(tanks[1].getFill() + ops * trait.amountProduced); + this.generatePower((long) (ops * trait.heatEnergy * eff), tanks[0].getFill() - ops * trait.amountReq); + } + info[0] = ops * trait.amountReq; + info[1] = ops * trait.amountProduced; + info[2] = ops * trait.heatEnergy * eff; + valid = true; + operational = ops > 0; + } + } + + onServerTick(); + + this.tanks[1].serialize(buf); + this.buf.writeLong(this.powerBuffer); + + if(!valid) tanks[1].setTankType(Fluids.NONE); + + for(DirPos pos : this.getPowerPos()) { + this.tryProvide(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + + for(DirPos pos : this.getConPos()) { + this.tryProvide(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + networkPackNT(150); + + } else { + onClientTick(); + } + } + + public void onServerTick() { } + public void onClientTick() { } + + public void onLeverPull() { + + FluidType type = tanks[0].getTankType(); + + if(type == Fluids.STEAM) { + tanks[0].setTankType(Fluids.HOTSTEAM); + tanks[1].setTankType(Fluids.STEAM); + tanks[0].setFill(tanks[0].getFill() / 10); + tanks[1].setFill(0); + } else if(type == Fluids.HOTSTEAM) { + tanks[0].setTankType(Fluids.SUPERHOTSTEAM); + tanks[1].setTankType(Fluids.HOTSTEAM); + tanks[0].setFill(tanks[0].getFill() / 10); + tanks[1].setFill(0); + } else if(type == Fluids.SUPERHOTSTEAM) { + tanks[0].setTankType(Fluids.ULTRAHOTSTEAM); + tanks[1].setTankType(Fluids.SUPERHOTSTEAM); + tanks[0].setFill(tanks[0].getFill() / 10); + tanks[1].setFill(0); + } else { + tanks[0].setTankType(Fluids.STEAM); + tanks[1].setTankType(Fluids.SPENTSTEAM); + tanks[0].setFill(Math.min(tanks[0].getFill() * 1000, tanks[0].getMaxFill())); + tanks[1].setFill(0); + } + + markDirty(); + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBytes(this.buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.tanks[0].deserialize(buf); + this.tanks[1].deserialize(buf); + this.powerBuffer = buf.readLong(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + tanks[0].readFromNBT(nbt, "water"); + tanks[1].readFromNBT(nbt, "steam"); + powerBuffer = nbt.getLong("power"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + tanks[0].writeToNBT(nbt, "water"); + tanks[1].writeToNBT(nbt, "steam"); + nbt.setLong("power", powerBuffer); + } + + @Override public long getPower() { return powerBuffer; } + @Override public long getMaxPower() { return powerBuffer; } + @Override public void setPower(long power) { this.powerBuffer = power; } + + @Override public FluidTank[] getSendingTanks() { return new FluidTank[] {tanks[1]}; } + @Override public FluidTank[] getReceivingTanks() { return new FluidTank[] {tanks[0]}; } + @Override public FluidTank[] getAllTanks() { return tanks; } + + @Override + public void provideExtraInfo(NBTTagCompound data) { + data.setBoolean(CompatEnergyControl.B_ACTIVE, info[1] > 0); + data.setDouble(CompatEnergyControl.D_CONSUMPTION_MB, info[0]); + data.setDouble(CompatEnergyControl.D_OUTPUT_MB, info[1]); + data.setDouble(CompatEnergyControl.D_OUTPUT_HE, info[2]); + } + + @Override public FluidTank getTankToPaste() { return null; } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } +} diff --git a/src/main/resources/assets/hbm/models/machines/industrial_turbine.obj b/src/main/resources/assets/hbm/models/machines/industrial_turbine.obj index c09c29df7..a551b8a5f 100644 --- a/src/main/resources/assets/hbm/models/machines/industrial_turbine.obj +++ b/src/main/resources/assets/hbm/models/machines/industrial_turbine.obj @@ -429,7 +429,7 @@ f 64/69/15 88/161/15 78/136/4 f 54/71/14 77/162/14 79/137/13 f 61/25/17 85/163/17 86/138/6 f 58/75/11 82/164/11 83/139/8 -o Gauuge_Gauge +o Gauge v -0.031250 1.531250 3.468750 v -0.031250 1.468750 3.468750 v 0.031250 1.531250 3.468750 diff --git a/src/main/resources/assets/hbm/textures/models/machines/chungus.png b/src/main/resources/assets/hbm/textures/models/machines/chungus.png index 30b90952229a41a2bb91ef8296264cb5d028d838..88a65a58b6b3e513922ff02fc6cefc724924fbe9 100644 GIT binary patch literal 16204 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 literal 16198 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 I$QlRz9~2?_`v3p{ diff --git a/src/main/resources/assets/hbm/textures/models/machines/industrial_turbine.png b/src/main/resources/assets/hbm/textures/models/machines/industrial_turbine.png index e72fef4b2b65a13ee39ddec4122b7d605163d081..2f8060c7dd6e0756977a01b51a78436da17cec6e 100644 GIT binary patch literal 10230 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±^eSj$fY@nJ4u16OOzc9r*$X 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 Date: Thu, 12 Feb 2026 08:57:24 +0100 Subject: [PATCH 09/11] skim milk: stick ya dick in it:tm: --- .../machine/MachineIndustrialTurbine.java | 8 +++- .../TileEntityMachineIndustrialTurbine.java | 7 ++-- .../machine/TileEntityTurbineBase.java | 38 ++++++++++--------- src/main/resources/assets/hbm/lang/de_DE.lang | 4 +- src/main/resources/assets/hbm/lang/en_US.lang | 4 +- 5 files changed, 38 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineIndustrialTurbine.java b/src/main/java/com/hbm/blocks/machine/MachineIndustrialTurbine.java index 72da572c4..54cdda6cf 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineIndustrialTurbine.java +++ b/src/main/java/com/hbm/blocks/machine/MachineIndustrialTurbine.java @@ -89,6 +89,8 @@ public class MachineIndustrialTurbine extends BlockDummyable implements ITooltip this.addStandardInfo(stack, player, list, ext); } + private static String[] blocks = new String[] {"▖ ", "▘ ", " ▘", " ▖"}; // right hand side quarter blocks break the renderer so we cheat a little + @Override public void printHook(Pre event, World world, int x, int y, int z) { int[] pos = this.findCore(world, x, y, z); @@ -110,9 +112,13 @@ public class MachineIndustrialTurbine extends BlockDummyable implements ITooltip outputType = inputType.getTrait(FT_Coolable.class).coolsTo; } + int color = ((int) (0xFF - 0xFF * chungus.spin)) << 16 | ((int)(0xFF * chungus.spin) << 8); + int time = (int) ((world.getTotalWorldTime() / 4) % 4); + text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + inputType.getLocalizedName() + ": " + String.format(Locale.US, "%,d", tankInput.getFill()) + "/" + String.format(Locale.US, "%,d", tankInput.getMaxFill()) + "mB"); text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + outputType.getLocalizedName() + ": " + String.format(Locale.US, "%,d", tankOutput.getFill()) + "/" + String.format(Locale.US, "%,d", tankOutput.getMaxFill()) + "mB"); - text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + BobMathUtil.getShortNumber(chungus.powerBuffer) + "HE (" + (int)(chungus.spin * 100) + "%)"); + text.add("&[" + color + "&]" + EnumChatFormatting.RED + "<- " + EnumChatFormatting.WHITE + BobMathUtil.getShortNumber(chungus.powerBuffer) + "HE (" + + EnumChatFormatting.RESET + blocks[time] + (int) Math.round(chungus.spin * 100) + "%" + EnumChatFormatting.WHITE + ")"); ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java index 7c2045a71..11d075769 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java @@ -18,9 +18,9 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase implements IConfigurableMachine { - - public static int inputTankSize = 1_000_000_000; - public static int outputTankSize = 1_000_000_000; + + public static int inputTankSize = 512_000; + public static int outputTankSize = 10_240_000; public static double efficiency = 1D; public float rotor; @@ -114,6 +114,7 @@ public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase im @Override public double consumptionPercent() { return 0.2D; } @Override public double getEfficiency() { return efficiency; } + @Override public boolean doesResizeCompressor() { return true; } @Override public void serialize(ByteBuf buf) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityTurbineBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityTurbineBase.java index b516b11b4..a57e2b3ec 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityTurbineBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityTurbineBase.java @@ -65,7 +65,7 @@ public abstract class TileEntityTurbineBase extends TileEntityLoadedBase impleme if(ops > 0) { tanks[0].setFill(tanks[0].getFill() - ops * trait.amountReq); tanks[1].setFill(tanks[1].getFill() + ops * trait.amountProduced); - this.generatePower((long) (ops * trait.heatEnergy * eff), tanks[0].getFill() - ops * trait.amountReq); + this.generatePower((long) (ops * trait.heatEnergy * eff), ops * trait.amountReq); } info[0] = ops * trait.amountReq; info[1] = ops * trait.amountProduced; @@ -103,32 +103,36 @@ public abstract class TileEntityTurbineBase extends TileEntityLoadedBase impleme public void onLeverPull() { FluidType type = tanks[0].getTankType(); + boolean resize = this.doesResizeCompressor(); if(type == Fluids.STEAM) { - tanks[0].setTankType(Fluids.HOTSTEAM); - tanks[1].setTankType(Fluids.STEAM); - tanks[0].setFill(tanks[0].getFill() / 10); - tanks[1].setFill(0); + tanks[0].setTankType(Fluids.HOTSTEAM); tanks[1].setTankType(Fluids.STEAM); + tanks[0].setFill(tanks[0].getFill() / 10); tanks[1].setFill(0); + if(resize) { tanks[0].changeTankSize(tanks[0].getMaxFill() / 10); tanks[1].changeTankSize(tanks[1].getMaxFill() / 10); } } else if(type == Fluids.HOTSTEAM) { - tanks[0].setTankType(Fluids.SUPERHOTSTEAM); - tanks[1].setTankType(Fluids.HOTSTEAM); - tanks[0].setFill(tanks[0].getFill() / 10); - tanks[1].setFill(0); + tanks[0].setTankType(Fluids.SUPERHOTSTEAM); tanks[1].setTankType(Fluids.HOTSTEAM); + tanks[0].setFill(tanks[0].getFill() / 10); tanks[1].setFill(0); + if(resize) { tanks[0].changeTankSize(tanks[0].getMaxFill() / 10); tanks[1].changeTankSize(tanks[1].getMaxFill() / 10); } } else if(type == Fluids.SUPERHOTSTEAM) { - tanks[0].setTankType(Fluids.ULTRAHOTSTEAM); - tanks[1].setTankType(Fluids.SUPERHOTSTEAM); - tanks[0].setFill(tanks[0].getFill() / 10); - tanks[1].setFill(0); + tanks[0].setTankType(Fluids.ULTRAHOTSTEAM); tanks[1].setTankType(Fluids.SUPERHOTSTEAM); + tanks[0].setFill(tanks[0].getFill() / 10); tanks[1].setFill(0); + if(resize) { tanks[0].changeTankSize(tanks[0].getMaxFill() / 10); tanks[1].changeTankSize(tanks[1].getMaxFill() / 10); } + } else if(type == Fluids.ULTRAHOTSTEAM) { + tanks[0].setTankType(Fluids.STEAM); tanks[1].setTankType(Fluids.SPENTSTEAM); + tanks[0].setFill(Math.min(tanks[0].getFill() * 1000, tanks[0].getMaxFill())); tanks[1].setFill(0); + if(resize) { tanks[0].changeTankSize(tanks[0].getMaxFill() * 1000); tanks[1].changeTankSize(tanks[1].getMaxFill() * 1000); } } else { - tanks[0].setTankType(Fluids.STEAM); - tanks[1].setTankType(Fluids.SPENTSTEAM); - tanks[0].setFill(Math.min(tanks[0].getFill() * 1000, tanks[0].getMaxFill())); - tanks[1].setFill(0); + tanks[0].setTankType(Fluids.STEAM); tanks[1].setTankType(Fluids.SPENTSTEAM); + tanks[0].setFill(Math.min(tanks[0].getFill() * 1000, tanks[0].getMaxFill())); tanks[1].setFill(0); } markDirty(); } + public boolean doesResizeCompressor() { + return false; + } + @Override public void serialize(ByteBuf buf) { super.serialize(buf); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 8b6106312..6c6cd6163 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4561,9 +4561,11 @@ tile.machine_icf_press.name=ICF-Brennstoffpellet-Fabrikant tile.machine_industrial_boiler.name=Industrieller Boiler tile.machine_industrial_boiler.desc=Großer Boiler zum Verdampfen von Wasser oder$Erhitzen von Öl. Benötigt externe Hitzequelle.$Wärmestransferrate: ΔT*0.1 TU/t$Überdrucksicher tile.machine_industrial_generator.name=Industrieller Generator +tile.machine_industrial_turbine.name=Industrielle Dampfturbine +tile.machine_industrial_turbine.desc=Effizienz: 100%% tile.machine_intake.name=Lufteinlass tile.machine_keyforge.name=Schlossertisch -tile.machine_large_turbine.name=Industrielle Dampfturbine +tile.machine_large_turbine.name=Industrielle Dampfturbine (LEGACY) tile.machine_large_turbine.desc=Effizienz: 100%% tile.machine_lithium_battery.name=Li-Ion-Energiespeicherblock (LEGACY) tile.machine_microwave.name=Mikrowelle diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index b6cae06c5..ceda0768c 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5826,9 +5826,11 @@ tile.machine_icf_press.desc=Fills ICF Fuel pellets$Left fuel slot is accepted by tile.machine_industrial_boiler.name=Industrial Boiler tile.machine_industrial_boiler.desc=Large boiler that can boil water or heat up oil.$Requires external heat source.$Heat transfer rate: ΔT*0.1 TU/t$Cannot explode tile.machine_industrial_generator.name=Industrial Generator +tile.machine_industrial_turbine.name=Industrial Steam Turbine +tile.machine_industrial_turbine.desc=Efficiency: 100%% tile.machine_intake.name=Air Intake tile.machine_keyforge.name=Locksmith Table -tile.machine_large_turbine.name=Industrial Steam Turbine +tile.machine_large_turbine.name=Industrial Steam Turbine (LEGACY) tile.machine_large_turbine.desc=Efficiency: 100%% tile.machine_liquefactor.name=Industrial Liquefaction Machine tile.machine_liquefactor.desc=Powerful universal machine to turn items into fluids.$Comes with versatile catalytic components, heating elements$and a built-in hydrator for petrochemical liquefaction. From ecab0fbcb31482c00ec6f8ddd4cf180bbe2a437d Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 12 Feb 2026 13:04:32 +0100 Subject: [PATCH 10/11] massacre of blibble's field --- changelog | 18 ++++++++++++- .../hbm/blocks/machine/MachineChungus.java | 9 +++++-- .../machine/MachineIndustrialTurbine.java | 13 +++++++--- .../TileEntityMachineIndustrialTurbine.java | 24 +++++++++++++++++- .../machine/TileEntityTurbineBase.java | 5 ---- .../{canned_jizz.png => canned_slime.png} | Bin 6 files changed, 57 insertions(+), 12 deletions(-) rename src/main/resources/assets/hbm/textures/items/{canned_jizz.png => canned_slime.png} (100%) diff --git a/changelog b/changelog index 790dde47c..10990a0bc 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,20 @@ +## Added +* Target pistol + * Weapon steel tier pistol that holds 15 rounds and shoots .22 LR + * Accepts silencers + ## Changed +* Reworked the industrial turbine + * New model and texture + * Removed the GUI, it now uses the same in-world compressor toggle as the leviathan turbine + * No longer has a volatile power buffer, power isn't buffered at all anymore, similar to steam engines and MHD turbines + * Steam capacity changes based on compression level, the ratio for turbine cascades is now 1:1:1:1 + * Comes with a flywheel, energy output slowly ramps up as steam is supplied and slowly goes down as steam cuts out +* Leviathan turbines no longer have a power buffer +* Updated russian and chinese localization * The PWR can now be controlled via RoR * The RoR value reader can read core and hull heat as well as fuel depletion in percent - * The RoR controller can set the control rod level in percent as well as jetison all loaded fuel \ No newline at end of file + * The RoR controller can set the control rod level in percent as well as jetison all loaded fuel + +# Fixed +* Fixed proxy tiles that do not use electricity at all visually connecting to cables \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/MachineChungus.java b/src/main/java/com/hbm/blocks/machine/MachineChungus.java index 793b5afbe..8972ca7ac 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChungus.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChungus.java @@ -21,6 +21,7 @@ import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; @@ -61,10 +62,14 @@ public class MachineChungus extends BlockDummyable implements ITooltipProvider, int iZ2 = entity.zCoord + dir.offsetZ * 2 + turn.offsetZ * 2; if((x == iX || x == iX2) && (z == iZ || z == iZ2) && y < entity.yCoord + 2) { - world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.chungusLever", 1.5F, 1.0F); if(!world.isRemote) { - entity.onLeverPull(); + if(!entity.operational) { + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.chungusLever", 1.5F, 1.0F); + entity.onLeverPull(); + } else { + player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Cannot change compressor setting while operational!")); + } } return true; diff --git a/src/main/java/com/hbm/blocks/machine/MachineIndustrialTurbine.java b/src/main/java/com/hbm/blocks/machine/MachineIndustrialTurbine.java index 54cdda6cf..aedf34003 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineIndustrialTurbine.java +++ b/src/main/java/com/hbm/blocks/machine/MachineIndustrialTurbine.java @@ -21,6 +21,7 @@ import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; @@ -53,8 +54,14 @@ public class MachineIndustrialTurbine extends BlockDummyable implements ITooltip ForgeDirection dir = ForgeDirection.getOrientation(entity.getBlockMetadata() - this.offset); if(x == entity.xCoord + dir.offsetX * 3 && z == entity.zCoord + dir.offsetZ * 3 && y == entity.yCoord + 1) { - world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.chungusLever", 1.5F, 1.0F); - if(!world.isRemote) entity.onLeverPull(); + if(!world.isRemote) { + if(!entity.operational) { + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.chungusLever", 1.5F, 1.0F); + entity.onLeverPull(); + } else { + player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Cannot change compressor setting while operational!")); + } + } return true; } } @@ -118,7 +125,7 @@ public class MachineIndustrialTurbine extends BlockDummyable implements ITooltip text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + inputType.getLocalizedName() + ": " + String.format(Locale.US, "%,d", tankInput.getFill()) + "/" + String.format(Locale.US, "%,d", tankInput.getMaxFill()) + "mB"); text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + outputType.getLocalizedName() + ": " + String.format(Locale.US, "%,d", tankOutput.getFill()) + "/" + String.format(Locale.US, "%,d", tankOutput.getMaxFill()) + "mB"); text.add("&[" + color + "&]" + EnumChatFormatting.RED + "<- " + EnumChatFormatting.WHITE + BobMathUtil.getShortNumber(chungus.powerBuffer) + "HE (" + - EnumChatFormatting.RESET + blocks[time] + (int) Math.round(chungus.spin * 100) + "%" + EnumChatFormatting.WHITE + ")"); + EnumChatFormatting.RESET + blocks[chungus.powerBuffer <= 0 ? 0 : time] + (int) Math.round(chungus.spin * 100) + "%" + EnumChatFormatting.WHITE + ")"); ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java index 11d075769..cb0d6aafb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java @@ -15,12 +15,13 @@ import com.hbm.util.fauxpointtwelve.DirPos; import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase implements IConfigurableMachine { public static int inputTankSize = 512_000; - public static int outputTankSize = 10_240_000; + public static int outputTankSize = 2_048_000; public static double efficiency = 1D; public float rotor; @@ -132,12 +133,14 @@ public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase im public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); lastPowerTarget = nbt.getLong("lastPowerTarget"); + spin = nbt.getDouble("spin"); } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setLong("lastPowerTarget", lastPowerTarget); + nbt.setDouble("spin", spin); } @Override @@ -161,4 +164,23 @@ public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase im new DirPos(xCoord - dir.offsetX * 4, yCoord + 1, zCoord - dir.offsetZ * 4, dir.getOpposite()) }; } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 3, + yCoord, + zCoord - 3, + xCoord + 4, + yCoord + 3, + zCoord + 4 + ); + } + + return bb; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityTurbineBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityTurbineBase.java index a57e2b3ec..7e4bedee8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityTurbineBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityTurbineBase.java @@ -107,23 +107,18 @@ public abstract class TileEntityTurbineBase extends TileEntityLoadedBase impleme if(type == Fluids.STEAM) { tanks[0].setTankType(Fluids.HOTSTEAM); tanks[1].setTankType(Fluids.STEAM); - tanks[0].setFill(tanks[0].getFill() / 10); tanks[1].setFill(0); if(resize) { tanks[0].changeTankSize(tanks[0].getMaxFill() / 10); tanks[1].changeTankSize(tanks[1].getMaxFill() / 10); } } else if(type == Fluids.HOTSTEAM) { tanks[0].setTankType(Fluids.SUPERHOTSTEAM); tanks[1].setTankType(Fluids.HOTSTEAM); - tanks[0].setFill(tanks[0].getFill() / 10); tanks[1].setFill(0); if(resize) { tanks[0].changeTankSize(tanks[0].getMaxFill() / 10); tanks[1].changeTankSize(tanks[1].getMaxFill() / 10); } } else if(type == Fluids.SUPERHOTSTEAM) { tanks[0].setTankType(Fluids.ULTRAHOTSTEAM); tanks[1].setTankType(Fluids.SUPERHOTSTEAM); - tanks[0].setFill(tanks[0].getFill() / 10); tanks[1].setFill(0); if(resize) { tanks[0].changeTankSize(tanks[0].getMaxFill() / 10); tanks[1].changeTankSize(tanks[1].getMaxFill() / 10); } } else if(type == Fluids.ULTRAHOTSTEAM) { tanks[0].setTankType(Fluids.STEAM); tanks[1].setTankType(Fluids.SPENTSTEAM); - tanks[0].setFill(Math.min(tanks[0].getFill() * 1000, tanks[0].getMaxFill())); tanks[1].setFill(0); if(resize) { tanks[0].changeTankSize(tanks[0].getMaxFill() * 1000); tanks[1].changeTankSize(tanks[1].getMaxFill() * 1000); } } else { tanks[0].setTankType(Fluids.STEAM); tanks[1].setTankType(Fluids.SPENTSTEAM); - tanks[0].setFill(Math.min(tanks[0].getFill() * 1000, tanks[0].getMaxFill())); tanks[1].setFill(0); } markDirty(); diff --git a/src/main/resources/assets/hbm/textures/items/canned_jizz.png b/src/main/resources/assets/hbm/textures/items/canned_slime.png similarity index 100% rename from src/main/resources/assets/hbm/textures/items/canned_jizz.png rename to src/main/resources/assets/hbm/textures/items/canned_slime.png From 720fb07b0fe8813799541bc38bd7a1ea0f51d0a1 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 12 Feb 2026 21:25:41 +0100 Subject: [PATCH 11/11] brick by brick, suck my dick --- .../java/com/hbm/crafting/WeaponRecipes.java | 1 + src/main/java/com/hbm/items/ModItems.java | 2 + .../sedna/factory/GunFactoryClient.java | 3 + .../weapon/sedna/factory/Orchestras.java | 38 +++ .../weapon/sedna/factory/XFactory22lr.java | 23 +- .../weapon/sedna/mods/XWeaponModManager.java | 7 +- .../java/com/hbm/main/ResourceManager.java | 1 + .../item/weapon/sedna/ItemRenderStarF.java | 43 ++- .../weapon/sedna/ItemRenderStarFAkimbo.java | 293 ++++++++++++++++++ .../TileEntityMachineIndustrialTurbine.java | 51 +++ src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../hbm/textures/models/weapons/star_f.png | Bin 6659 -> 4602 bytes .../textures/models/weapons/star_f_elite.png | Bin 0 -> 4468 bytes 14 files changed, 436 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderStarFAkimbo.java create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/star_f_elite.png diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index e55644712..ef8d2b503 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -78,6 +78,7 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_spas12, 1), new Object[] { "BRM", "BGS", 'B', DESH.lightBarrel(), 'R', DESH.lightReceiver(), 'M', GUNMETAL.mechanism(), 'G', ANY_PLASTIC.grip(), 'S', DESH.stock() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_panzerschreck, 1), new Object[] { "BBB", "PGM", 'B', DESH.heavyBarrel(), 'P', STEEL.plateCast(), 'G', DESH.grip(), 'M', GUNMETAL.mechanism() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_star_f, 1), new Object[] { "BRM", " G", 'B', WEAPONSTEEL.lightBarrel(), 'R', WEAPONSTEEL.lightReceiver(), 'M', WEAPONSTEEL.mechanism(), 'G', ANY_PLASTIC.grip() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_star_f_akimbo, 1), new Object[] { "UMU", 'U', ModItems.gun_star_f, 'M', BIGMT.mechanism() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_g3, 1), new Object[] { "BRM", "WGS", 'B', WEAPONSTEEL.lightBarrel(), 'R', WEAPONSTEEL.lightReceiver(), 'M', WEAPONSTEEL.mechanism(), 'W', WOOD.grip(), 'G', RUBBER.grip(), 'S', WOOD.stock() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_g3_zebra, 1), new Object[] { " M ", "MPM", " M ", 'M', BIGMT.mechanism(), 'P', ModItems.gun_g3 }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_stinger, 1), new Object[] { "BBB", "PGM", 'B', WEAPONSTEEL.heavyBarrel(), 'P', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'G', WEAPONSTEEL.grip(), 'M', WEAPONSTEEL.mechanism() }); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 1067d8620..1f364ce9b 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1407,6 +1407,7 @@ public class ModItems { public static Item gun_spas12; public static Item gun_panzerschreck; public static Item gun_star_f; + public static Item gun_star_f_akimbo; public static Item gun_g3; public static Item gun_g3_zebra; public static Item gun_stinger; @@ -6285,6 +6286,7 @@ public class ModItems { GameRegistry.registerItem(gun_spas12, gun_spas12.getUnlocalizedName()); GameRegistry.registerItem(gun_panzerschreck, gun_panzerschreck.getUnlocalizedName()); GameRegistry.registerItem(gun_star_f, gun_star_f.getUnlocalizedName()); + GameRegistry.registerItem(gun_star_f_akimbo, gun_star_f_akimbo.getUnlocalizedName()); GameRegistry.registerItem(gun_g3, gun_g3.getUnlocalizedName()); GameRegistry.registerItem(gun_g3_zebra, gun_g3_zebra.getUnlocalizedName()); GameRegistry.registerItem(gun_stinger, gun_stinger.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index 1621f0d08..2f280d990 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -67,6 +67,7 @@ public class GunFactoryClient { MinecraftForgeClient.registerItemRenderer(ModItems.gun_spas12, new ItemRenderSPAS12()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_panzerschreck, new ItemRenderPanzerschreck()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_star_f, new ItemRenderStarF()); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_star_f_akimbo, new ItemRenderStarFAkimbo()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_g3, new ItemRenderG3(ResourceManager.g3_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_g3_zebra, new ItemRenderG3(ResourceManager.g3_zebra_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_stinger, new ItemRenderStinger()); @@ -307,6 +308,8 @@ public class GunFactoryClient { ((ItemGunBaseNT) ModItems.gun_maresleg_akimbo) .getConfig(null, 1).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_uzi_akimbo) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY_MIRROR, LegoClient.HUD_COMPONENT_AMMO_MIRROR); ((ItemGunBaseNT) ModItems.gun_uzi_akimbo) .getConfig(null, 1).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_star_f_akimbo) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY_MIRROR, LegoClient.HUD_COMPONENT_AMMO_MIRROR); + ((ItemGunBaseNT) ModItems.gun_star_f_akimbo) .getConfig(null, 1).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_minigun_dual) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY_MIRROR, LegoClient.HUD_COMPONENT_AMMO_MIRROR); ((ItemGunBaseNT) ModItems.gun_minigun_dual) .getConfig(null, 1).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_aberrator_eott) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_AMMO_MIRROR); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index c729c1982..c4c909308 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -802,6 +802,44 @@ public class Orchestras { } }; + public static BiConsumer ORCHESTRA_STAR_F_AKIMBO = (stack, ctx) -> { + EntityLivingBase entity = ctx.entity; + if(entity.worldObj.isRemote) return; + GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); + boolean aiming = ItemGunBaseNT.getIsAiming(stack); + + if(type == GunAnimation.CYCLE) { + if(timer == 0) { + int side = ctx.configIndex == 0 ? -1 : 1; + SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); + if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.3125, aiming ? 0 : -0.125, aiming ? 0 : -0.1875D * side, 0, 0.18, -0.12 * side, 0.01, (float)entity.getRNG().nextGaussian() * 5F, 12.5F + (float)entity.getRNG().nextFloat() * 5F, casing.getName()); + PacketDispatcher.wrapper.sendToAllAround(new MuzzleFlashPacket(entity), new TargetPoint(entity.worldObj.provider.dimensionId, entity.posX, entity.posY, entity.posZ, 100)); + } + } + if(type == GunAnimation.CYCLE_DRY) { + if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.9F); + if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.pistolCock", 1F, 1.1F); + + } + if(type == GunAnimation.RELOAD) { + if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); + if(timer == 5) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); + if(timer == 22) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); + if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1.1F); + } + if(type == GunAnimation.JAMMED) { + if(timer == 15) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); + if(timer == 19) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1.1F); + if(timer == 23) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); + if(timer == 27) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1.1F); + } + if(type == GunAnimation.INSPECT) { + if(timer == 7) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); + if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1.1F); + } + }; + public static BiConsumer ORCHESTRA_G3 = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java index 5bffc24ae..94f15dcd6 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java @@ -69,6 +69,27 @@ public class XFactory22lr { .anim(LAMBDA_STAR_F_ANIMS).orchestra(Orchestras.ORCHESTRA_STAR_F) ).setDefaultAmmo(EnumAmmo.P22_SP, 15).setNameMutator(LAMBDA_NAME_SILENCED) .setUnlocalizedName("gun_star_f"); + + ModItems.gun_star_f_akimbo = new ItemGunBaseNT(WeaponQuality.B_SIDE, + new GunConfig().dura(15 * 25).draw(15).inspect(38).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) + .rec(new Receiver(0) + .dmg(12.5F).delay(5).dry(17).spread(0.01F).reload(40).jam(32).sound("hbm:weapon.fire.pistolLight", 1.0F, 1.0F) + .mag(new MagazineFullReload(0, 15).addConfigs(p22_sp, p22_fmj, p22_jhp, p22_ap)) + .offset(1, -0.0625 * 1.5, 0.25D) + .setupStandardFire().recoil(LAMBDA_RECOIL_STAR_F)) + .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) + .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) + .anim(LAMBDA_STAR_F_ANIMS).orchestra(Orchestras.ORCHESTRA_STAR_F_AKIMBO), + new GunConfig().dura(15 * 25).draw(15).inspect(38).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) + .rec(new Receiver(0) + .dmg(12.5F).delay(5).dry(17).spread(0.01F).reload(40).jam(32).sound("hbm:weapon.fire.pistolLight", 1.0F, 1.0F) + .mag(new MagazineFullReload(1, 15).addConfigs(p22_sp, p22_fmj, p22_jhp, p22_ap)) + .offset(1, -0.0625 * 1.5, -0.25D) + .setupStandardFire().recoil(LAMBDA_RECOIL_STAR_F)) + .ps(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) + .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) + .anim(LAMBDA_STAR_F_ANIMS).orchestra(Orchestras.ORCHESTRA_STAR_F_AKIMBO) + ).setDefaultAmmo(EnumAmmo.P9_SP, 30).setUnlocalizedName("gun_star_f_akimbo"); } public static Function LAMBDA_NAME_SILENCED = (stack) -> { @@ -77,7 +98,7 @@ public class XFactory22lr { }; public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { - Lego.handleStandardSmoke(ctx.entity, stack, 3000, 0.05D, 1.1D, 0); + Lego.handleStandardSmoke(ctx.entity, stack, 3000, 0.05D, 1.1D, ctx.configIndex); }; public static BiConsumer LAMBDA_RECOIL_AM180 = (stack, ctx) -> { diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/XWeaponModManager.java b/src/main/java/com/hbm/items/weapon/sedna/mods/XWeaponModManager.java index 83c48e148..c65d4d64b 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/XWeaponModManager.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/XWeaponModManager.java @@ -91,7 +91,7 @@ public class XWeaponModManager { ModItems.gun_spas12, ModItems.gun_panzerschreck }; Item[] wsteelGuns = new Item[] { - ModItems.gun_star_f, + ModItems.gun_star_f, ModItems.gun_star_f_akimbo, ModItems.gun_g3, ModItems.gun_g3_zebra, ModItems.gun_stinger, ModItems.gun_chemthrower }; @@ -131,7 +131,7 @@ public class XWeaponModManager { new WeaponModDefinition(EnumModGeneric.BRONZE_DURA).addMod(bronzeGuns, new WeaponModGenericDurability(117)); new WeaponModDefinition(EnumModSpecial.SPEEDLOADER).addMod(ModItems.gun_liberator, new WeaponModLiberatorSpeedloader(200)); - new WeaponModDefinition(EnumModSpecial.SILENCER).addMod(new Item[] {ModItems.gun_am180, ModItems.gun_uzi, ModItems.gun_uzi_akimbo, ModItems.gun_star_f, ModItems.gun_g3, ModItems.gun_amat}, new WeaponModSilencer(ID_SILENCER)); + new WeaponModDefinition(EnumModSpecial.SILENCER).addMod(new Item[] {ModItems.gun_am180, ModItems.gun_uzi, ModItems.gun_uzi_akimbo, ModItems.gun_star_f, ModItems.gun_star_f_akimbo, ModItems.gun_g3, ModItems.gun_amat}, new WeaponModSilencer(ID_SILENCER)); new WeaponModDefinition(EnumModSpecial.SCOPE).addMod(new Item[] {ModItems.gun_heavy_revolver, ModItems.gun_g3, ModItems.gun_mas36, ModItems.gun_charge_thrower}, new WeaponModScope(ID_SCOPE)); new WeaponModDefinition(EnumModSpecial.SAW) .addMod(new Item[] {ModItems.gun_maresleg, ModItems.gun_double_barrel}, new WeaponModSawedOff(ID_SAWED_OFF)) @@ -178,7 +178,8 @@ public class XWeaponModManager { BulletConfig[] bmg50 = new BulletConfig[] {XFactory50.bmg50_sp, XFactory50.bmg50_fmj, XFactory50.bmg50_jhp, XFactory50.bmg50_ap, XFactory50.bmg50_du, XFactory50.bmg50_he}; new WeaponModDefinition(EnumModCaliber.P9) .addMod(ModItems.gun_henry, new WeaponModCaliber(300, 28, 10F, p9)) - .addMod(ModItems.gun_star_f, new WeaponModCaliber(301, 12, 15F, p9)); + .addMod(ModItems.gun_star_f, new WeaponModCaliber(301, 12, 15F, p9)) + .addMod(ModItems.gun_star_f_akimbo, new WeaponModCaliber(302, 12, 15F, p9)); new WeaponModDefinition(EnumModCaliber.P45) .addMod(ModItems.gun_henry, new WeaponModCaliber(310, 28, 10F, p45)) .addMod(ModItems.gun_greasegun, new WeaponModCaliber(311, 24, 3F, p45)) diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 4f6444ddf..faa76ada0 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1041,6 +1041,7 @@ public class ResourceManager { public static final ResourceLocation uzi_saturnite_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/uzi_saturnite.png"); public static final ResourceLocation panzerschreck_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/panzerschreck.png"); public static final ResourceLocation star_f_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/star_f.png"); + public static final ResourceLocation star_f_elite_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/star_f_elite.png"); public static final ResourceLocation g3_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3.png"); public static final ResourceLocation g3_zebra_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_zebra.png"); public static final ResourceLocation g3_green_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_polymer_green.png"); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderStarF.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderStarF.java index 93c4a6d90..7f79b31ef 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderStarF.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderStarF.java @@ -141,18 +141,7 @@ public class ItemRenderStarF extends ItemRenderWeaponBase { public void renderModTable(ItemStack stack, int index) { GL11.glEnable(GL11.GL_LIGHTING); - GL11.glShadeModel(GL11.GL_SMOOTH); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.star_f_tex); - ResourceManager.star_f.renderPart("Gun"); - ResourceManager.star_f.renderPart("Slide"); - ResourceManager.star_f.renderPart("Mag"); - ResourceManager.star_f.renderPart("Hammer"); - if(hasSilencer(stack)) { - GL11.glTranslated(0, 2.375, -0.25); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); - ResourceManager.uzi.renderPart("Silencer"); - } - GL11.glShadeModel(GL11.GL_FLAT); + renderStandardGun(stack); } @Override @@ -167,18 +156,7 @@ public class ItemRenderStarF extends ItemRenderWeaponBase { GL11.glTranslated(0, 0, -6); } - GL11.glShadeModel(GL11.GL_SMOOTH); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.star_f_tex); - ResourceManager.star_f.renderPart("Gun"); - ResourceManager.star_f.renderPart("Slide"); - ResourceManager.star_f.renderPart("Mag"); - ResourceManager.star_f.renderPart("Hammer"); - if(silenced) { - GL11.glTranslated(0, 2.375, -0.25); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); - ResourceManager.uzi.renderPart("Silencer"); - } - GL11.glShadeModel(GL11.GL_FLAT); + renderStandardGun(stack); if(type == ItemRenderType.EQUIPPED && !silenced) { EntityLivingBase ent = (EntityLivingBase) data[1]; @@ -206,4 +184,21 @@ public class ItemRenderStarF extends ItemRenderWeaponBase { public boolean hasSilencer(ItemStack stack) { return XWeaponModManager.hasUpgrade(stack, 0, XWeaponModManager.ID_SILENCER); } + + public void renderStandardGun(ItemStack stack) { + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.star_f_tex); + ResourceManager.star_f.renderPart("Gun"); + ResourceManager.star_f.renderPart("Slide"); + ResourceManager.star_f.renderPart("Mag"); + ResourceManager.star_f.renderPart("Hammer"); + boolean silenced = hasSilencer(stack); + if(silenced) { + GL11.glTranslated(0, 2.375, -0.25); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + ResourceManager.uzi.renderPart("Silencer"); + } + GL11.glShadeModel(GL11.GL_FLAT); + } } diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderStarFAkimbo.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderStarFAkimbo.java new file mode 100644 index 000000000..10687a6db --- /dev/null +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderStarFAkimbo.java @@ -0,0 +1,293 @@ +package com.hbm.render.item.weapon.sedna; + +import org.lwjgl.opengl.GL11; + +import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.items.weapon.sedna.mods.XWeaponModManager; +import com.hbm.main.ResourceManager; +import com.hbm.render.anim.HbmAnimations; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; + +public class ItemRenderStarFAkimbo extends ItemRenderWeaponBase { + + @Override public boolean isAkimbo() { return true; } + + @Override + protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.25F; } + + @Override + public float getViewFOV(ItemStack stack, float fov) { + float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp; + return fov * (1 - aimingProgress * 0.33F); + } + + @Override + public void setupFirstPerson(ItemStack stack) { + GL11.glTranslated(0, 0, 0.875); + } + + @Override + public void renderFirstPerson(ItemStack stack) { + + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); + + float offset = 0.8F; + + for(int i = -1; i <= 1; i += 2) { + int index = i == -1 ? 0 : 1; + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.star_f_elite_tex); + + GL11.glPushMatrix(); + standardAimingTransform(stack, -2F * offset * i, -1.75F * offset, 2.5F * offset, 0, -7.625 / 8D, 1); + + double scale = 0.25D; + GL11.glScaled(scale, scale, scale); + + double[] equip = HbmAnimations.getRelevantTransformation("EQUIP", index); + double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL", index); + double[] hammer = HbmAnimations.getRelevantTransformation("HAMMER", index); + double[] tilt = HbmAnimations.getRelevantTransformation("TILT", index); + double[] turn = HbmAnimations.getRelevantTransformation("TURN", index); + double[] mag = HbmAnimations.getRelevantTransformation("MAG", index); + double[] bullet = HbmAnimations.getRelevantTransformation("BULLET", index); + double[] slide = HbmAnimations.getRelevantTransformation("SLIDE", index); + + GL11.glTranslated(0, -2, -8); + GL11.glRotated(equip[0], 1, 0, 0); + GL11.glTranslated(0, 2, 8); + + GL11.glTranslated(0, 1, -3); + GL11.glRotated(turn[2] * i, 0, 0, 1); + GL11.glRotated(tilt[0], 1, 0, 0); + GL11.glTranslated(0, -1, 3); + + GL11.glTranslated(0, 0, recoil[2]); + + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.star_f.renderPart("Gun"); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 1.75, -4.25); + GL11.glRotated(60 * (hammer[0] - 1), 1, 0, 0); + GL11.glTranslated(0, -1.75, 4.25); + ResourceManager.star_f.renderPart("Hammer"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0, slide[2] * 2.3125); + ResourceManager.star_f.renderPart("Slide"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(mag[0], mag[1], mag[2]); + ResourceManager.star_f.renderPart("Mag"); + GL11.glTranslated(bullet[0], bullet[1], bullet[2]); + ResourceManager.star_f.renderPart("Bullet"); + GL11.glPopMatrix(); + + if(hasSilencer(stack, index)) { + GL11.glPushMatrix(); + GL11.glTranslated(0, 2.375, -0.25); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + ResourceManager.uzi.renderPart("Silencer"); + GL11.glPopMatrix(); + + } else { + double smokeScale = 0.5; + + GL11.glPushMatrix(); + GL11.glTranslated(0, 3, 6.125); + GL11.glRotated(90, 0, 1, 0); + GL11.glScaled(smokeScale, smokeScale, smokeScale); + this.renderSmokeNodes(gun.getConfig(stack, index).smokeNodes, 0.75D); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + + renderMuzzleFlash(gun.shotRand, gun.lastShot[index]); + } + + GL11.glPopMatrix(); + } + } + + @Override + public void setupThirdPerson(ItemStack stack) { + super.setupThirdPerson(stack); + GL11.glTranslated(0, -0.25, 1.75); + double scale = 0.75D; + GL11.glScaled(scale, scale, scale); + } + + @Override + public void setupThirdPersonAkimbo(ItemStack stack) { + super.setupThirdPersonAkimbo(stack); + GL11.glTranslated(0, -0.25, 1.75); + double scale = 0.75D; + GL11.glScaled(scale, scale, scale); + } + + @Override + public void setupInv(ItemStack stack) { + GL11.glAlphaFunc(GL11.GL_GREATER, 0F); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glScaled(1, 1, -1); + GL11.glTranslated(8, 8, 0); + double scale = 1.5D; + GL11.glScaled(scale, scale, scale); + } + + @Override + public void setupModTable(ItemStack stack) { + double scale = -6.25D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(90, 0, 1, 0); + GL11.glTranslated(0, -0.25, -5); + } + + @Override + public void renderEquipped(ItemStack stack, Object... data) { + renderStandardGun(stack, 1); + if(!hasSilencer(stack, 1)) renderThirdPersonFlash((EntityLivingBase) data[1], stack, 1); + } + + @Override + public void renderEquippedAkimbo(ItemStack stack, EntityLivingBase ent) { + renderStandardGun(stack, 0); + if(!hasSilencer(stack, 0)) renderThirdPersonFlash(ent, stack, 0); + } + + @Override + public void renderModTable(ItemStack stack, int index) { + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.star_f_elite_tex); + ResourceManager.star_f.renderPart("Gun"); + ResourceManager.star_f.renderPart("Slide"); + ResourceManager.star_f.renderPart("Mag"); + ResourceManager.star_f.renderPart("Hammer"); + if(hasSilencer(stack, index)) { + GL11.glTranslated(0, 2.375, -0.25); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + ResourceManager.uzi.renderPart("Silencer"); + } + GL11.glShadeModel(GL11.GL_FLAT); + } + + @Override + public void renderEntity(ItemStack stack) { + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glShadeModel(GL11.GL_SMOOTH); + + boolean anySilenced = hasSilencer(stack, 0) || hasSilencer(stack, 1); + + if(anySilenced) { + GL11.glScaled(0.75, 0.75, 0.75); + } + + GL11.glPushMatrix(); + GL11.glTranslated(-1, 1, 0); + renderStandardGun(stack, 1); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(1, 1, 0); + renderStandardGun(stack, 0); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + } + + @Override + public void renderOther(ItemStack stack, ItemRenderType type, Object... data) { + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glShadeModel(GL11.GL_SMOOTH); + + boolean anySilenced = hasSilencer(stack, 0) || hasSilencer(stack, 1); + + GL11.glPushMatrix(); + GL11.glRotated(225, 0, 0, 1); + GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(25, 1, 0, 0); + GL11.glRotated(45, 0, 1, 0); + GL11.glTranslated(0.5, 0, 0); + if(anySilenced) { + double scale = 0.625D; + GL11.glScaled(scale, scale, scale); + GL11.glTranslated(0, 0, -4); + } + renderStandardGun(stack, 1); + GL11.glPopMatrix(); + + GL11.glTranslated(0, 0, 5); + + GL11.glPushMatrix(); + GL11.glRotated(225, 0, 0, 1); + GL11.glRotated(-90, 0, 1, 0); + GL11.glRotated(-90, 1, 0, 0); + GL11.glRotated(25, 1, 0, 0); + GL11.glRotated(-45, 0, 1, 0); + GL11.glTranslated(-0.5, 0, 0); + if(anySilenced) { + double scale = 0.625D; + GL11.glScaled(scale, scale, scale); + GL11.glTranslated(0, 0, -4); + } + renderStandardGun(stack, 0); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + } + + public boolean hasSilencer(ItemStack stack, int cfg) { + return XWeaponModManager.hasUpgrade(stack, cfg, XWeaponModManager.ID_SILENCER); + } + + public void renderStandardGun(ItemStack stack, int index) { + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.star_f_elite_tex); + ResourceManager.star_f.renderPart("Gun"); + ResourceManager.star_f.renderPart("Slide"); + ResourceManager.star_f.renderPart("Mag"); + ResourceManager.star_f.renderPart("Hammer"); + boolean silenced = hasSilencer(stack, index); + if(silenced) { + GL11.glTranslated(0, 2.375, -0.25); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + ResourceManager.uzi.renderPart("Silencer"); + } + GL11.glShadeModel(GL11.GL_FLAT); + } + + public void renderThirdPersonFlash(Entity ent, ItemStack stack, int config) { + + long shot; + double shotRand = 0; + if(ent == Minecraft.getMinecraft().thePlayer) { + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); + shot = gun.lastShot[config]; + shotRand = gun.shotRand; + } else { + shot = ItemRenderWeaponBase.flashMap.getOrDefault(ent, (long) -1); + if(shot < 0) return; + } + + renderMuzzleFlash(shotRand, shot); + } + + public void renderMuzzleFlash(double shotRand, long shot) { + + GL11.glPushMatrix(); + GL11.glTranslated(0, 3, 6.125); + GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(90 * shotRand, 1, 0, 0); + this.renderMuzzleFlash(shot, 75, 7.5); + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java index cb0d6aafb..d124daadb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.machine; import java.io.IOException; +import java.util.Random; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; @@ -10,6 +11,8 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.fluid.trait.FT_Coolable; import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; +import com.hbm.main.MainRegistry; +import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.util.fauxpointtwelve.DirPos; @@ -31,6 +34,9 @@ public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase im public static double ACCELERATION = 1D / 400D; public long lastPowerTarget = 0; + private AudioWrapper audio; + private float audioDesync; + @Override public String getConfigName() { return "steamturbineIndustrial"; @@ -55,6 +61,9 @@ public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase im tanks = new FluidTank[2]; tanks[0] = new FluidTank(Fluids.STEAM, inputTankSize); tanks[1] = new FluidTank(Fluids.SPENTSTEAM, outputTankSize); + + Random rand = new Random(); + audioDesync = rand.nextFloat() * 0.05F; } // sets the power target so we know how much this steam type can theoretically make, and increments the spin based on actual throughput @@ -98,6 +107,28 @@ public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase im this.lastRotor -= 360; this.rotor -= 360; } + + if(this.spin > 0 && MainRegistry.proxy.me().getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) <= 35) { + + float spinNum = (float) Math.min(1F, spin * 2); + float volume = this.getVolume(0.25F + spinNum * 0.75F); + float pitch = 0.5F + spinNum * 0.5F + this.audioDesync; + + if(audio == null) { + audio = MainRegistry.proxy.getLoopedSound("hbm:block.largeTurbineRunning", xCoord + 0.5F, yCoord + 0.5F, zCoord + 0.5F, volume, 20F, pitch, 20); + audio.startSound(); + } + + audio.keepAlive(); + audio.updatePitch(pitch); + audio.updateVolume(volume); + + } else { + if(audio != null) { + audio.stopSound(); + audio = null; + } + } } @Override @@ -117,6 +148,26 @@ public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase im @Override public double getEfficiency() { return efficiency; } @Override public boolean doesResizeCompressor() { return true; } + @Override + public void onChunkUnload() { + super.onChunkUnload(); + + if(audio != null) { + audio.stopSound(); + audio = null; + } + } + + @Override + public void invalidate() { + super.invalidate(); + + if(audio != null) { + audio.stopSound(); + audio = null; + } + } + @Override public void serialize(ByteBuf buf) { super.serialize(buf); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 6c6cd6163..87a180b00 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2225,6 +2225,7 @@ item.gun_panzerschreck.name=Panzerschreck item.gun_quadro.name=Vierfachraketenwerfer item.gun_spas12.name=SPAS-12 item.gun_star_f.name=Sportpistole +item.gun_star_f_akimbo.name=Sportpistolen item.gun_star_f_silenced.name=Schallgedämpfte Pistole item.gun_stg77.name=StG 77 item.gun_stinger.name=FIM-92 Stinger diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index ceda0768c..46b0ec7c6 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3068,6 +3068,7 @@ item.gun_panzerschreck.name=Panzerschreck item.gun_quadro.name=Quad Rocket Launcher item.gun_spas12.name=SPAS-12 item.gun_star_f.name=Target Pistol +item.gun_star_f_akimbo.name=Target Pistols item.gun_star_f_silenced.name=Silenced Pistol item.gun_stg77.name=StG 77 item.gun_stinger.name=FIM-92 Stinger diff --git a/src/main/resources/assets/hbm/textures/models/weapons/star_f.png b/src/main/resources/assets/hbm/textures/models/weapons/star_f.png index 097efbe833ac49fa97bda30e415eb8c2cd9c3d22..d4f55b7625db4e13b59ecd743e43a5a520aa8179 100644 GIT binary patch literal 4602 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 literal 6659 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 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/star_f_elite.png b/src/main/resources/assets/hbm/textures/models/weapons/star_f_elite.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2486120327a4624cdff6fe83d0a6c697d587d7 GIT binary patch literal 4468 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