From 60ab47e7201d31a4515ab0ea5ada453ad7587155 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Sun, 26 May 2019 21:23:48 +0200 Subject: [PATCH] large launch table, SMP fixes, lag-free scaffold block --- assets/hbm/lang/de_DE.lang | 9 + assets/hbm/lang/en_US.lang | 9 + .../models/launch_table/launch_table_base.obj | 128 +++++ .../launch_table/launch_table_large_pad.obj | 138 +++++ .../launch_table_large_scaffold_base.obj | 311 +++++++++++ .../launch_table_large_scaffold_connector.obj | 491 +++++++++++++++++ .../launch_table_large_scaffold_empty.obj | 150 +++++ .../launch_table/launch_table_small_pad.obj | 136 +++++ .../launch_table_small_scaffold_base.obj | 309 +++++++++++ .../launch_table_small_scaffold_connector.obj | 487 ++++++++++++++++ .../launch_table_small_scaffold_empty.obj | 150 +++++ .../models/missile_parts/mp_w_10_taint.obj | 414 ++++++++++++++ assets/hbm/models/scaffold.obj | 414 ++++++++++++++ .../hbm/textures/blocks/struct_launcher.png | Bin 0 -> 399 bytes .../textures/blocks/struct_launcher_core.png | Bin 0 -> 507 bytes .../blocks/struct_launcher_core_large.png | Bin 0 -> 462 bytes .../hbm/textures/blocks/struct_scaffold.png | Bin 0 -> 372 bytes assets/hbm/textures/gui/gui_launch_table.png | Bin 2973 -> 4761 bytes assets/hbm/textures/hazmat blocs1.png | Bin 144 -> 0 bytes assets/hbm/textures/hazmat blocs10.png | Bin 916 -> 0 bytes assets/hbm/textures/hazmat blocs11.png | Bin 849 -> 0 bytes assets/hbm/textures/hazmat blocs12.png | Bin 877 -> 0 bytes assets/hbm/textures/hazmat blocs2.png | Bin 336 -> 0 bytes assets/hbm/textures/hazmat blocs3.png | Bin 356 -> 0 bytes assets/hbm/textures/hazmat blocs4.png | Bin 191 -> 0 bytes assets/hbm/textures/hazmat blocs5.png | Bin 394 -> 0 bytes assets/hbm/textures/hazmat blocs6.png | Bin 501 -> 0 bytes assets/hbm/textures/hazmat blocs8.png | Bin 168 -> 0 bytes assets/hbm/textures/hazmat blocs9.png | Bin 484 -> 0 bytes assets/hbm/textures/hazmat blocsDirty1.png | Bin 563 -> 0 bytes assets/hbm/textures/hazmat blocsDirty2.png | Bin 604 -> 0 bytes assets/hbm/textures/hazmat blocsDirty3.png | Bin 611 -> 0 bytes assets/hbm/textures/hazmat blocsDirty4.png | Bin 592 -> 0 bytes assets/hbm/textures/hazmat blocsDirty5.png | Bin 599 -> 0 bytes assets/hbm/textures/hazmat blocsDirty6.png | Bin 613 -> 0 bytes assets/hbm/textures/hazmat blocsDirty7.png | Bin 603 -> 0 bytes assets/hbm/textures/hazmat blocsnuke1.png | Bin 433 -> 0 bytes assets/hbm/textures/hazmat blocsnuke2.png | Bin 441 -> 0 bytes assets/hbm/textures/hazmat_custom.png | Bin 775 -> 0 bytes assets/hbm/textures/hazmat_custom2.png | Bin 663 -> 0 bytes assets/hbm/textures/models/launch_table.png | Bin 8755 -> 0 bytes .../models/launch_table_large_pad.png | Bin 2697 -> 0 bytes .../launch_table_large_scaffold_base.png | Bin 1214 -> 0 bytes .../models/launch_table_small_pad.png | Bin 2304 -> 0 bytes .../launch_table_small_scaffold_base.png | Bin 922 -> 0 bytes .../models/missile_parts/launch_table.png | Bin 0 -> 7332 bytes .../missile_parts/launch_table_large_pad.png | Bin 0 -> 1118 bytes .../launch_table_large_scaffold_base.png | Bin 0 -> 1198 bytes .../launch_table_large_scaffold_connector.png | Bin .../missile_parts/launch_table_small_pad.png | Bin 0 -> 893 bytes .../launch_table_small_scaffold_base.png | Bin 0 -> 934 bytes .../launch_table_small_scaffold_connector.png | Bin 0 -> 1652 bytes .../missile_parts/warheads/mp_w_10_taint.png | Bin 0 -> 3014 bytes com/hbm/blocks/ModBlocks.java | 24 +- com/hbm/blocks/generic/DecoBlock.java | 8 +- com/hbm/blocks/machine/BlockStruct.java | 26 + .../blocks/machine/MachineLaunchTable.java | 3 +- com/hbm/creativetabs/MissileTab.java | 69 +++ .../entity/missile/EntityMissileCustom.java | 47 +- com/hbm/handler/GUIHandler.java | 18 + com/hbm/handler/MissileStruct.java | 91 +++ .../container/ContainerLaunchTable.java | 77 +++ .../gui/GUIMachineCompactLauncher.java | 10 +- .../inventory/gui/GUIMachineLaunchTable.java | 165 ++++++ com/hbm/items/ModItems.java | 5 +- com/hbm/items/weapon/ItemCustomMissile.java | 35 +- com/hbm/items/weapon/ItemMissile.java | 72 +-- com/hbm/lib/Library.java | 14 +- com/hbm/lib/RefStrings.java | 2 +- com/hbm/main/ClientProxy.java | 5 +- com/hbm/main/CraftingManager.java | 5 + com/hbm/main/MainRegistry.java | 3 +- com/hbm/main/ResourceManager.java | 22 + com/hbm/packet/AuxButtonPacket.java | 8 + com/hbm/packet/AuxGaugePacket.java | 10 + com/hbm/packet/TEMissileMultipartPacket.java | 15 +- com/hbm/render/block/ObjUtil.java | 49 ++ com/hbm/render/block/RenderRoofBlock.java | 44 +- com/hbm/render/item/ItemRenderMissile.java | 4 +- com/hbm/render/misc/MissileMultipart.java | 23 +- com/hbm/render/misc/MissilePart.java | 1 + .../tileentity/RenderCompactLauncher.java | 2 +- .../render/tileentity/RenderLaunchTable.java | 96 +++- .../tileentity/RenderMissileAssembly.java | 2 +- .../render/tileentity/RenderMultiblock.java | 152 +++++ com/hbm/render/tileentity/RenderPylon.java | 34 +- .../bomb/TileEntityCompactLauncher.java | 38 +- .../bomb/TileEntityLaunchTable.java | 519 +++++++++++++++++- .../tileentity/machine/TileEntityDummy.java | 1 - .../TileEntityMachineMissileAssembly.java | 17 +- .../machine/TileEntityMultiblock.java | 205 +++++++ 91 files changed, 4930 insertions(+), 137 deletions(-) create mode 100644 assets/hbm/models/launch_table/launch_table_base.obj create mode 100644 assets/hbm/models/launch_table/launch_table_large_pad.obj create mode 100644 assets/hbm/models/launch_table/launch_table_large_scaffold_base.obj create mode 100644 assets/hbm/models/launch_table/launch_table_large_scaffold_connector.obj create mode 100644 assets/hbm/models/launch_table/launch_table_large_scaffold_empty.obj create mode 100644 assets/hbm/models/launch_table/launch_table_small_pad.obj create mode 100644 assets/hbm/models/launch_table/launch_table_small_scaffold_base.obj create mode 100644 assets/hbm/models/launch_table/launch_table_small_scaffold_connector.obj create mode 100644 assets/hbm/models/launch_table/launch_table_small_scaffold_empty.obj create mode 100644 assets/hbm/models/missile_parts/mp_w_10_taint.obj create mode 100644 assets/hbm/models/scaffold.obj create mode 100644 assets/hbm/textures/blocks/struct_launcher.png create mode 100644 assets/hbm/textures/blocks/struct_launcher_core.png create mode 100644 assets/hbm/textures/blocks/struct_launcher_core_large.png create mode 100644 assets/hbm/textures/blocks/struct_scaffold.png delete mode 100644 assets/hbm/textures/hazmat blocs1.png delete mode 100644 assets/hbm/textures/hazmat blocs10.png delete mode 100644 assets/hbm/textures/hazmat blocs11.png delete mode 100644 assets/hbm/textures/hazmat blocs12.png delete mode 100644 assets/hbm/textures/hazmat blocs2.png delete mode 100644 assets/hbm/textures/hazmat blocs3.png delete mode 100644 assets/hbm/textures/hazmat blocs4.png delete mode 100644 assets/hbm/textures/hazmat blocs5.png delete mode 100644 assets/hbm/textures/hazmat blocs6.png delete mode 100644 assets/hbm/textures/hazmat blocs8.png delete mode 100644 assets/hbm/textures/hazmat blocs9.png delete mode 100644 assets/hbm/textures/hazmat blocsDirty1.png delete mode 100644 assets/hbm/textures/hazmat blocsDirty2.png delete mode 100644 assets/hbm/textures/hazmat blocsDirty3.png delete mode 100644 assets/hbm/textures/hazmat blocsDirty4.png delete mode 100644 assets/hbm/textures/hazmat blocsDirty5.png delete mode 100644 assets/hbm/textures/hazmat blocsDirty6.png delete mode 100644 assets/hbm/textures/hazmat blocsDirty7.png delete mode 100644 assets/hbm/textures/hazmat blocsnuke1.png delete mode 100644 assets/hbm/textures/hazmat blocsnuke2.png delete mode 100644 assets/hbm/textures/hazmat_custom.png delete mode 100644 assets/hbm/textures/hazmat_custom2.png delete mode 100644 assets/hbm/textures/models/launch_table.png delete mode 100644 assets/hbm/textures/models/launch_table_large_pad.png delete mode 100644 assets/hbm/textures/models/launch_table_large_scaffold_base.png delete mode 100644 assets/hbm/textures/models/launch_table_small_pad.png delete mode 100644 assets/hbm/textures/models/launch_table_small_scaffold_base.png create mode 100644 assets/hbm/textures/models/missile_parts/launch_table.png create mode 100644 assets/hbm/textures/models/missile_parts/launch_table_large_pad.png create mode 100644 assets/hbm/textures/models/missile_parts/launch_table_large_scaffold_base.png rename assets/hbm/textures/models/{ => missile_parts}/launch_table_large_scaffold_connector.png (100%) create mode 100644 assets/hbm/textures/models/missile_parts/launch_table_small_pad.png create mode 100644 assets/hbm/textures/models/missile_parts/launch_table_small_scaffold_base.png create mode 100644 assets/hbm/textures/models/missile_parts/launch_table_small_scaffold_connector.png create mode 100644 assets/hbm/textures/models/missile_parts/warheads/mp_w_10_taint.png create mode 100644 com/hbm/blocks/machine/BlockStruct.java create mode 100644 com/hbm/handler/MissileStruct.java create mode 100644 com/hbm/inventory/container/ContainerLaunchTable.java create mode 100644 com/hbm/inventory/gui/GUIMachineLaunchTable.java create mode 100644 com/hbm/render/block/ObjUtil.java create mode 100644 com/hbm/render/tileentity/RenderMultiblock.java create mode 100644 com/hbm/tileentity/machine/TileEntityMultiblock.java diff --git a/assets/hbm/lang/de_DE.lang b/assets/hbm/lang/de_DE.lang index 3cf246ba6..5a2b115e5 100644 --- a/assets/hbm/lang/de_DE.lang +++ b/assets/hbm/lang/de_DE.lang @@ -329,6 +329,11 @@ tile.crate_metal.name=Maschinenkiste tile.crate_red.name=Rote Kiste tile.marker_structure.name=Multiblock-Strukturvorlage +tile.struct_launcher.name=Startrampe-Komponentenblock +tile.struct_scaffold.name=Startrampe-Gerüstblock +tile.struct_launcher_core.name=Kompaktrampe-Kernkomponente +tile.struct_launcher_core_large.name=Startrampe-Kernkomponente + tile.machine_difurnace_off.name=Hochofen tile.machine_difurnace_on.name=Hochofen container.diFurnace=Hochofen @@ -1671,6 +1676,7 @@ item.mp_warhead_15_incendiary.name=Größe 15 Brandsprengkopf item.mp_warhead_15_nuclear.name=Größe 15 Atomsprengkopf "Tantchen Bertha" item.mp_warhead_15_nuclear_shark.name=Größe 15 Atomsprengkopf "Billigsdorfer Kugelwilli" item.mp_warhead_15_boxcar.name=Größe 15 Güterwagon? +item.mp_warhead_15_n2.name=Größe 15 N²-Mine item.mp_fuselage_10_kerosene.name=Größe 10 Kerosintank item.mp_fuselage_10_kerosene_camo.name=Größe 10 Kerosintank (Camouflage) @@ -1710,11 +1716,13 @@ item.mp_fuselage_15_kerosene_insulation.name=Größe 15 Kerosintank (Oranger Iso item.mp_fuselage_15_kerosene_metal.name=Größe 15 Kerosintank (Metall) item.mp_fuselage_15_kerosene_decorated.name=Größe 15 Kerosintank (Dekoriertes Metall) item.mp_fuselage_15_kerosene_steampunk.name=Größe 15 Kerosintank (Steampunk) +item.mp_fuselage_15_kerosene_polite.name=Größe 15 Kerosintank (Höflich) item.mp_fuselage_15_kerosene_blackjack.name=Größe 15 Kerosintank (Queen Whiskey) item.mp_fuselage_15_solid.name=Größe 15 Festbrennstofftank item.mp_fuselage_15_solid_insulation.name=Größe 15 Festbrennstofftank (Oranger Isolator) item.mp_fuselage_15_solid_soviet_glory.name=Größe 15 Festbrennstofftank (Sowjetischer Ruhm) item.mp_fuselage_15_solid_soviet_stank.name=Größe 15 Festbrennstofftank (Sowjetischer Mief) +item.mp_fuselage_15_solid_desh.name=Größe 15 Festbrennstofftank (Deshverkleidung) item.mp_fuselage_15_hydrogen.name=Größe 15 Wasserstofftank item.mp_fuselage_15_balefire.name=Größe 15 BF-Kraftstofftank @@ -1758,6 +1766,7 @@ item.sat_laser.name=Orbitaler Todesstrahl item.sat_foeq.name=PEAF - Mk.I FOEQ Dunasonde mit experimenter nuklearer Schubdüse item.sat_resonator.name=Xenium-Resonator-Satellit item.sat_miner.name=Asteroiden-Förderschiff +item.sat_gerald.name=Gerald der Konstruktionsandroid item.sat_chip.name=Satelliten-ID-Chip item.sat_interface.name=Satelliten-Kontrollinterface tile.sat_mapper.name=Oberflächen-Abtastungssatellit (Dekoblock) diff --git a/assets/hbm/lang/en_US.lang b/assets/hbm/lang/en_US.lang index 161eb1f80..8af1c0342 100644 --- a/assets/hbm/lang/en_US.lang +++ b/assets/hbm/lang/en_US.lang @@ -329,6 +329,11 @@ tile.crate_metal.name=Machine Crate tile.crate_red.name=Red Crate tile.marker_structure.name=Multiblock Structure Marker +tile.struct_launcher.name=Launch Pad Component Block +tile.struct_scaffold.name=Launch Pad Scaffold Block +tile.struct_launcher_core.name=Compact Launcher Core Component +tile.struct_launcher_core_large.name=Launch Table Core Component + tile.machine_difurnace_off.name=Blast Furnace tile.machine_difurnace_on.name=Blast Furnace container.diFurnace=Blast Furnace @@ -1671,6 +1676,7 @@ item.mp_warhead_10_nuclear_large.name=Size 10 Nuclear Warhead "Chernobyl Boris" item.mp_warhead_15_nuclear.name=Size 15 Nuclear Warhead "Auntie Bertha" item.mp_warhead_15_nuclear_shark.name=Size 15 Nuclear Warhead "Discount Bullet Bill" item.mp_warhead_15_boxcar.name=Size 15 Boxcar? +item.mp_warhead_15_n2.name=Size 15 N² Mine item.mp_fuselage_10_kerosene.name=Size 10 Kerosene Fuselage item.mp_fuselage_10_kerosene_camo.name=Size 10 Kerosene Fuselage (Camo) @@ -1710,11 +1716,13 @@ item.mp_fuselage_15_kerosene_insulation.name=Size 15 Kerosene Fuselage (Orange I item.mp_fuselage_15_kerosene_metal.name=Size 15 Kerosene Fuselage (Metal) item.mp_fuselage_15_kerosene_decorated.name=Size 15 Kerosene Fuselage (Decorated Metal) item.mp_fuselage_15_kerosene_steampunk.name=Size 15 Kerosene Fuselage (Steampunk) +item.mp_fuselage_15_kerosene_polite.name=Size 15 Kerosene Fuselage (Polite) item.mp_fuselage_15_kerosene_blackjack.name=Size 15 Kerosene Fuselage (Queen Whiskey) item.mp_fuselage_15_solid.name=Size 15 Solid Fuel Fuselage item.mp_fuselage_15_solid_insulation.name=Size 15 Solid Fuel Fuselage (Orange Insulation) item.mp_fuselage_15_solid_soviet_glory.name=Size 15 Solid Fuel Fuselage (Soviet Glory) item.mp_fuselage_15_solid_soviet_stank.name=Size 15 Solid Fuel Fuselage (Soviet Stank) +item.mp_fuselage_15_solid_desh.name=Size 15 Solid Fuel Fuselage (Desh Plating) item.mp_fuselage_15_hydrogen.name=Size 15 Hydrogen Fuselage item.mp_fuselage_15_balefire.name=Size 15 BF Fuselage @@ -1758,6 +1766,7 @@ item.sat_laser.name=Orbital Death Ray item.sat_foeq.name=PEAF - Mk.I FOEQ Duna Probe with experimental Nuclear Propulsion item.sat_resonator.name=Xenium Resonator Satellite item.sat_miner.name=Asteroid Mining Ship +item.sat_gerald.name=Gerald The Construction Android item.sat_chip.name=Satellite ID-Chip item.sat_interface.name=Satellite Control Interface tile.sat_mapper.name=Surface Mapping Satellite (Deco Block) diff --git a/assets/hbm/models/launch_table/launch_table_base.obj b/assets/hbm/models/launch_table/launch_table_base.obj new file mode 100644 index 000000000..ba8ad2ce0 --- /dev/null +++ b/assets/hbm/models/launch_table/launch_table_base.obj @@ -0,0 +1,128 @@ +# Blender v2.76 (sub 0) OBJ File: 'launch_table_base.blend' +# www.blender.org +o Cube_Cube.001 +v -4.500000 0.000000 4.500000 +v -4.500000 1.000000 4.500000 +v -4.500000 0.000000 0.500000 +v -4.500000 1.000000 0.500000 +v 4.500000 0.000000 4.500000 +v 4.500000 1.000000 4.500000 +v 4.500000 0.000000 0.500000 +v 4.500000 1.000000 0.500000 +v -4.500000 0.000000 -0.500000 +v -4.500000 1.000000 -0.500000 +v -4.500000 0.000000 -4.500000 +v -4.500000 1.000000 -4.500000 +v 4.500000 0.000000 -0.500000 +v 4.500000 1.000000 -0.500000 +v 4.500000 0.000000 -4.500000 +v 4.500000 1.000000 -4.500000 +v -0.500000 0.000000 0.500000 +v 0.500000 0.000000 0.500000 +v -0.500000 0.000000 -0.500000 +v 0.500000 0.000000 -0.500000 +v 0.000000 0.500000 0.500000 +v 0.000000 0.500000 -0.500000 +v -0.500000 1.000000 0.500000 +v 0.500000 1.000000 0.500000 +v -0.500000 1.000000 -0.500000 +v 0.500000 1.000000 -0.500000 +v 4.500000 1.000000 0.500000 +v 4.500000 1.000000 -0.500000 +v -4.500000 1.000000 0.500000 +v -4.500000 1.000000 -0.500000 +v -0.500000 1.000000 0.500000 +v 0.500000 1.000000 0.500000 +v -0.500000 1.000000 -0.500000 +v 0.500000 1.000000 -0.500000 +v 4.500000 1.000000 0.500000 +v 4.500000 1.000000 -0.500000 +v -4.500000 1.000000 0.500000 +v -4.500000 1.000000 -0.500000 +vt 0.722222 0.333333 +vt 0.722222 0.277778 +vt 0.944444 0.277778 +vt 0.500000 0.222222 +vt 0.500000 0.166667 +vt 1.000000 0.166667 +vt 0.500000 0.277778 +vt 0.722222 0.222222 +vt 0.500000 0.111111 +vt 0.500000 0.055556 +vt 1.000000 0.055556 +vt 0.222222 1.000000 +vt 0.222222 0.500000 +vt 0.444444 0.500000 +vt 0.222222 0.000000 +vt 0.000000 0.500000 +vt 0.500000 0.333333 +vt 0.500000 -0.000000 +vt 1.000000 -0.000000 +vt 0.944444 0.222222 +vt 1.000000 0.111111 +vt -0.000000 1.000000 +vt 0.500000 0.500000 +vt 0.277778 0.500000 +vt 0.555556 0.361111 +vt 0.611111 0.361111 +vt 0.611111 0.388889 +vt 0.555556 0.333333 +vt 0.277778 0.277778 +vt 0.222222 0.222222 +vt 0.277778 0.000000 +vt 0.555556 0.388889 +vt 0.944444 0.333333 +vt 1.000000 0.222222 +vt 0.444444 1.000000 +vt 0.000000 0.000000 +vt 0.611111 0.333333 +vt 0.222222 0.277778 +vt 0.277778 0.222222 +vt 0.500000 0.388889 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.707100 0.707100 0.000000 +s off +f 4/1/1 3/2/1 1/3/1 +f 8/4/2 7/5/2 3/6/2 +f 6/7/3 5/4/3 7/8/3 +f 2/9/4 1/10/4 5/11/4 +f 3/12/5 7/13/5 5/14/5 +f 8/15/6 4/13/6 2/16/6 +f 12/17/1 11/7/1 9/2/1 +f 16/10/2 15/18/2 11/19/2 +f 14/2/3 13/8/3 15/20/3 +f 10/5/4 9/9/4 13/21/4 +f 11/22/5 15/16/5 13/13/5 +f 16/18/6 12/23/6 10/24/6 +f 21/25/7 22/26/7 19/27/7 +f 22/26/8 21/25/8 18/28/8 +f 25/29/6 30/24/6 29/13/6 +f 24/30/6 27/15/6 28/31/6 +f 20/17/5 18/28/5 17/32/5 +f 37/13/5 38/24/5 33/29/5 +f 36/31/5 35/15/5 32/30/5 +f 2/33/1 4/1/1 1/3/1 +f 4/34/2 8/4/2 3/6/2 +f 8/2/3 6/7/3 7/8/3 +f 6/21/4 2/9/4 5/11/4 +f 1/35/5 3/12/5 5/14/5 +f 6/36/6 8/15/6 2/16/6 +f 10/1/1 12/17/1 9/2/1 +f 12/11/2 16/10/2 11/19/2 +f 16/3/3 14/2/3 15/20/3 +f 14/6/4 10/5/4 13/21/4 +f 9/12/5 11/22/5 13/13/5 +f 14/31/6 16/18/6 10/24/6 +f 17/32/7 21/25/7 19/27/7 +f 20/37/8 22/26/8 18/28/8 +f 23/38/6 25/29/6 29/13/6 +f 26/39/6 24/30/6 28/31/6 +f 19/40/5 20/17/5 17/32/5 +f 31/38/5 37/13/5 33/29/5 +f 34/39/5 36/31/5 32/30/5 diff --git a/assets/hbm/models/launch_table/launch_table_large_pad.obj b/assets/hbm/models/launch_table/launch_table_large_pad.obj new file mode 100644 index 000000000..799d11ea8 --- /dev/null +++ b/assets/hbm/models/launch_table/launch_table_large_pad.obj @@ -0,0 +1,138 @@ +# Blender v2.76 (sub 0) OBJ File: 'launch_table_large_pad.blend' +# www.blender.org +o Cube.002_Cube.003 +v 3.000000 1.000000 0.500001 +v 2.500000 2.000000 0.500001 +v 3.000000 1.000000 2.500001 +v 2.500000 2.000000 2.500001 +v -3.000000 1.000000 0.500000 +v -2.500000 2.000000 0.500000 +v -3.000000 1.000000 2.500000 +v -2.500000 2.000000 2.500000 +v 3.000000 1.000000 -2.999999 +v 2.500000 2.000000 -2.499999 +v 3.000000 1.000000 -0.499999 +v 2.500000 2.000000 -0.500000 +v -3.000000 1.000000 -3.000000 +v -2.500000 2.000000 -2.500000 +v -3.000000 1.000000 -0.500000 +v -2.500000 2.000000 -0.500000 +v 0.500000 1.000000 0.500000 +v 0.500000 1.000000 -0.500000 +v -0.500000 1.000000 0.500000 +v -0.500000 1.000000 -0.500000 +v 0.500000 2.000000 0.500000 +v 0.500000 2.000000 -0.500000 +v -0.500000 2.000000 0.500000 +v -0.500000 2.000000 -0.500000 +v 0.500000 2.000000 0.500000 +v 0.500000 2.000000 -0.500000 +v -0.500000 2.000000 0.500000 +v -0.500000 2.000000 -0.500000 +vt 0.000000 0.545455 +vt 0.000000 0.454545 +vt 0.181818 0.454545 +vt 0.045455 0.090909 +vt 0.000041 0.000041 +vt 0.545455 0.000000 +vt 0.318182 0.454545 +vt 0.318182 0.363636 +vt 0.500000 0.363636 +vt 0.318182 0.181818 +vt 0.318182 0.272727 +vt 0.227273 0.272727 +vt 0.454545 0.545455 +vt 0.272727 0.545455 +vt 0.272727 0.454545 +vt 0.727273 0.181818 +vt 0.545455 0.454545 +vt 0.045455 0.454545 +vt 0.000000 0.363636 +vt 0.227273 0.363636 +vt 0.045455 0.181818 +vt -0.000000 0.090909 +vt 0.545455 0.090909 +vt 1.000000 -0.000000 +vt 1.000000 0.454545 +vt 0.818182 0.272727 +vt 0.636364 0.454545 +vt 0.636364 0.545455 +vt 0.727273 0.454545 +vt 0.181818 0.545455 +vt 0.727273 -0.000000 +vt 0.818182 -0.000000 +vt 0.818182 0.454545 +vt 0.227273 0.454545 +vt 0.818182 0.181818 +vt 0.727273 0.272727 +vt 0.500000 0.090909 +vt 0.500000 0.454545 +vt 0.045455 0.272727 +vt 0.227273 0.181818 +vt -0.000000 0.181818 +vt 0.545455 0.181818 +vt 0.500000 0.272727 +vt 0.500000 0.181818 +vt 0.045455 0.363636 +vt 0.000000 0.272727 +vt 0.545455 0.272727 +vt 0.545455 0.545455 +vt 0.727273 0.545455 +vn 0.894400 0.447200 0.000000 +vn -0.000000 0.000000 1.000000 +vn -0.894400 0.447200 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.447200 -0.894400 +vn -1.000000 0.000000 -0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +s off +f 4/1/1 3/2/1 1/3/1 +f 8/4/2 7/5/2 3/6/2 +f 6/7/3 5/8/3 7/9/3 +f 19/10/4 23/11/4 21/12/4 +f 10/13/1 12/14/1 11/15/1 +f 21/16/5 8/17/5 4/6/5 +f 14/18/3 13/19/3 15/20/3 +f 10/21/6 9/22/6 13/23/6 +f 12/9/2 22/8/2 18/11/2 +f 10/24/5 14/25/5 24/26/5 +f 18/17/7 17/27/7 21/28/7 +f 23/28/8 19/27/8 20/29/8 +f 2/30/1 1/3/1 11/15/1 +f 21/16/5 2/31/5 12/32/5 +f 24/26/5 16/33/5 6/29/5 +f 16/34/3 15/20/3 5/8/3 +f 22/35/5 24/26/5 23/36/5 +f 27/36/9 28/26/9 26/35/9 +f 2/30/1 4/1/1 1/3/1 +f 4/37/2 8/4/2 3/6/2 +f 8/38/3 6/7/3 7/9/3 +f 21/12/4 2/39/4 17/40/4 +f 1/41/4 17/40/4 2/39/4 +f 19/10/4 5/42/4 6/43/4 +f 6/43/4 23/11/4 19/10/4 +f 21/12/4 17/40/4 19/10/4 +f 9/38/1 10/13/1 11/15/1 +f 4/6/5 2/31/5 21/16/5 +f 21/16/5 23/36/5 8/17/5 +f 6/29/5 8/17/5 23/36/5 +f 16/34/3 14/18/3 15/20/3 +f 14/44/6 10/21/6 13/23/6 +f 16/45/2 15/46/2 20/12/2 +f 20/12/2 18/11/2 22/8/2 +f 11/47/2 12/9/2 18/11/2 +f 22/8/2 24/20/2 20/12/2 +f 16/45/2 20/12/2 24/20/2 +f 24/26/5 22/35/5 10/24/5 +f 12/32/5 10/24/5 22/35/5 +f 14/25/5 16/33/5 24/26/5 +f 22/48/7 18/17/7 21/28/7 +f 24/49/8 23/28/8 20/29/8 +f 12/14/1 2/30/1 11/15/1 +f 22/35/5 21/16/5 12/32/5 +f 23/36/5 24/26/5 6/29/5 +f 6/7/3 16/34/3 5/8/3 +f 21/16/5 22/35/5 23/36/5 +f 25/16/9 27/36/9 26/35/9 diff --git a/assets/hbm/models/launch_table/launch_table_large_scaffold_base.obj b/assets/hbm/models/launch_table/launch_table_large_scaffold_base.obj new file mode 100644 index 000000000..531852d63 --- /dev/null +++ b/assets/hbm/models/launch_table/launch_table_large_scaffold_base.obj @@ -0,0 +1,311 @@ +# Blender v2.76 (sub 0) OBJ File: 'launch_table_large_scaffold_base.blend' +# www.blender.org +o Cube.003_Cube.004 +v 1.000000 0.000000 0.749996 +v 1.000000 1.000000 0.749996 +v 1.000000 0.000000 0.999996 +v 1.000000 1.000000 0.999996 +v 0.750000 0.000000 0.749996 +v 0.750000 1.000000 0.749996 +v 0.750000 0.000000 0.999996 +v 0.750000 1.000000 0.999996 +v -0.750000 0.000000 0.749996 +v -0.750000 1.000000 0.749996 +v -0.750000 0.000000 0.999996 +v -0.750000 1.000000 0.999996 +v -1.000000 0.000000 0.749996 +v -1.000000 1.000000 0.749996 +v -1.000000 0.000000 0.999996 +v -1.000000 1.000000 0.999996 +v -0.750000 0.000000 -1.000004 +v -0.750000 1.000000 -1.000004 +v -0.750000 0.000000 -0.750004 +v -0.750000 1.000000 -0.750004 +v -1.000000 0.000000 -1.000004 +v -1.000000 1.000000 -1.000004 +v -1.000000 0.000000 -0.750004 +v -1.000000 1.000000 -0.750004 +v 1.000000 0.000000 -1.000004 +v 1.000000 1.000000 -1.000004 +v 1.000000 0.000000 -0.750004 +v 1.000000 1.000000 -0.750004 +v 0.750000 0.000000 -1.000004 +v 0.750000 1.000000 -1.000004 +v 0.750000 0.000000 -0.750004 +v 0.750000 1.000000 -0.750004 +v 0.750000 0.000000 0.874996 +v 0.750000 1.000000 0.874996 +v -0.750000 0.000000 0.874996 +v -0.750000 1.000000 0.874996 +v 0.750000 0.000000 -0.875004 +v 0.750000 1.000000 -0.875004 +v -0.750000 0.000000 -0.875004 +v -0.750000 1.000000 -0.875004 +v 0.875000 0.000000 -0.750004 +v 0.875000 1.000000 -0.750004 +v 0.875000 0.000000 0.749996 +v 0.875000 1.000000 0.749996 +v -0.875000 0.000000 -0.750004 +v -0.875000 1.000000 -0.750004 +v -0.875000 0.000000 0.749996 +v -0.875000 1.000000 0.749996 +v 0.500000 1.000000 -0.250004 +v 0.500000 0.000000 -0.250004 +v -0.500000 0.000000 -0.250004 +v -0.500000 1.000000 -0.250004 +v -0.676777 0.000000 -0.323227 +v -0.676777 1.000000 -0.323227 +v -0.750000 0.000000 -0.500004 +v -0.750000 1.000000 -0.500004 +v -0.676777 0.000000 -0.676780 +v -0.676777 1.000000 -0.676780 +v -0.500000 0.000000 -0.750004 +v -0.500000 1.000000 -0.750004 +v -0.323223 0.000000 -0.676780 +v -0.323223 1.000000 -0.676780 +v -0.250000 0.000000 -0.500004 +v -0.250000 1.000000 -0.500004 +v -0.323223 0.000000 -0.323227 +v -0.323223 1.000000 -0.323227 +v 0.323223 0.000000 -0.323227 +v 0.323223 1.000000 -0.323227 +v 0.250000 0.000000 -0.500004 +v 0.250000 1.000000 -0.500004 +v 0.323223 0.000000 -0.676780 +v 0.323223 1.000000 -0.676780 +v 0.500000 0.000000 -0.750004 +v 0.500000 1.000000 -0.750004 +v 0.676777 0.000000 -0.676780 +v 0.676777 1.000000 -0.676780 +v 0.750000 0.000000 -0.500004 +v 0.750000 1.000000 -0.500004 +v 0.676777 0.000000 -0.323227 +v 0.676777 1.000000 -0.323227 +v 0.156250 0.000000 -0.156254 +v 0.156250 1.000000 -0.156254 +v 0.156250 0.000000 0.156246 +v 0.156250 1.000000 0.156246 +v -0.156250 0.000000 -0.156254 +v -0.156250 1.000000 -0.156254 +v -0.156250 0.000000 0.156246 +v -0.156250 1.000000 0.156246 +v 0.750000 0.000000 0.874996 +v 0.750000 1.000000 0.874996 +v -0.750000 0.000000 0.874996 +v -0.750000 1.000000 0.874996 +v 0.750000 0.000000 -0.875004 +v 0.750000 1.000000 -0.875004 +v -0.750000 0.000000 -0.875004 +v -0.750000 1.000000 -0.875004 +v 0.875000 0.000000 -0.750004 +v 0.875000 1.000000 -0.750004 +v 0.875000 0.000000 0.749996 +v 0.875000 1.000000 0.749996 +v -0.875000 0.000000 -0.750004 +v -0.875000 1.000000 -0.750004 +v -0.875000 0.000000 0.749996 +v -0.875000 1.000000 0.749996 +vt 0.176471 0.235294 +vt 0.176471 -0.000000 +vt 0.235294 -0.000000 +vt 0.117647 0.235294 +vt 0.117647 0.000000 +vt 0.058824 0.235294 +vt 0.058824 0.000000 +vt 0.000000 0.235294 +vt 0.000000 -0.000000 +vt 0.779412 0.544118 +vt 0.705882 0.544118 +vt 0.705882 0.470588 +vt 0.058824 0.294118 +vt 0.000000 0.294118 +vt 0.852941 0.470588 +vt 0.852941 0.235294 +vt 0.926471 0.235294 +vt 0.926471 0.470588 +vt 1.000000 0.235294 +vt 0.705882 0.588235 +vt 0.352941 0.588235 +vt 0.352941 0.352941 +vt -0.000000 0.588235 +vt 0.705882 0.823529 +vt 0.352941 0.823529 +vt 0.000000 0.823529 +vt 0.720588 0.235294 +vt 0.676471 0.235294 +vt 0.676471 0.000000 +vt 0.588235 0.235294 +vt 0.544118 0.235294 +vt 0.544118 -0.000000 +vt 0.764706 0.235294 +vt 0.720588 0.000000 +vt 0.500000 0.235294 +vt 0.500000 -0.000000 +vt 0.808824 0.235294 +vt 0.764706 0.000000 +vt 0.455882 0.235294 +vt 0.455882 -0.000000 +vt 0.705882 0.235294 +vt 0.779412 0.235294 +vt 0.808824 0.000000 +vt 0.411765 0.235294 +vt 0.411765 -0.000000 +vt 0.632353 0.235294 +vt 0.632353 0.000000 +vt 0.897059 0.235294 +vt 0.852941 0.000000 +vt 0.367647 0.235294 +vt 0.367647 -0.000000 +vt 0.588235 0.000000 +vt 0.941176 0.235294 +vt 0.897059 0.000000 +vt 0.323529 0.235294 +vt 0.323529 -0.000000 +vt 0.235294 0.294118 +vt 0.338235 0.250000 +vt 0.352941 0.294118 +vt 0.279412 0.235294 +vt 0.235294 0.235294 +vt 0.279412 -0.000000 +vt 0.588235 0.294118 +vt 0.647059 0.235294 +vt 0.647059 0.352941 +vt 0.779412 0.470588 +vt 1.000000 0.470588 +vt 0.705882 0.352941 +vt 0.000000 0.352941 +vt 0.941176 0.000000 +vt 0.338235 0.338235 +vt 0.294118 0.352941 +vt 0.250000 0.338235 +vt 0.250000 0.250000 +vt 0.294118 0.235294 +vt 0.705882 0.294118 +vt 0.691176 0.338235 +vt 0.602941 0.338235 +vt 0.602941 0.250000 +vt 0.691176 0.250000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.923900 0.000000 -0.382700 +vn -0.382700 0.000000 0.923900 +vn 0.382700 0.000000 -0.923900 +vn -0.923900 0.000000 0.382700 +vn -0.382700 0.000000 -0.923900 +vn -0.923900 0.000000 -0.382700 +vn 0.923900 0.000000 0.382700 +vn 0.382700 0.000000 0.923900 +s off +f 4/1/1 3/2/1 1/3/1 +f 8/4/2 7/5/2 3/2/2 +f 6/6/3 5/7/3 7/5/3 +f 2/8/4 1/9/4 5/7/4 +f 88/10/5 84/11/5 82/12/5 +f 6/6/5 8/13/5 4/14/5 +f 12/1/1 11/2/1 9/3/1 +f 16/4/2 15/5/2 11/2/2 +f 14/6/3 13/7/3 15/5/3 +f 10/8/4 9/9/4 13/7/4 +f 14/6/5 16/13/5 12/14/5 +f 20/1/1 19/2/1 17/3/1 +f 24/4/2 23/5/2 19/2/2 +f 22/6/3 21/7/3 23/5/3 +f 18/8/4 17/9/4 21/7/4 +f 82/15/4 81/16/4 85/17/4 +f 24/13/5 20/14/5 18/8/5 +f 28/1/1 27/2/1 25/3/1 +f 32/4/2 31/5/2 27/2/2 +f 30/6/3 29/7/3 31/5/3 +f 26/8/4 25/9/4 29/7/4 +f 86/18/3 85/17/3 87/19/3 +f 32/13/5 28/14/5 26/8/5 +f 34/20/2 36/21/2 35/22/2 +f 39/22/4 40/21/4 38/23/4 +f 42/24/1 44/25/1 43/21/1 +f 47/21/3 48/25/3 46/26/3 +f 76/27/6 78/28/6 77/29/6 +f 52/30/7 54/31/7 53/32/7 +f 74/33/8 76/27/8 75/34/8 +f 54/31/9 56/35/9 55/36/9 +f 72/37/10 74/33/10 73/38/10 +f 56/35/11 58/39/11 57/40/11 +f 88/12/2 87/41/2 83/42/2 +f 70/16/11 72/37/11 71/43/11 +f 58/39/10 60/44/10 59/45/10 +f 78/28/12 80/46/12 79/47/12 +f 68/48/9 70/16/9 69/49/9 +f 60/44/8 62/50/8 61/51/8 +f 80/46/13 49/30/13 50/52/13 +f 49/53/7 68/48/7 67/54/7 +f 62/50/6 64/55/6 63/56/6 +f 64/57/5 58/58/5 56/59/5 +f 66/60/13 52/61/13 51/3/13 +f 64/55/12 66/60/12 65/62/12 +f 78/63/5 74/64/5 49/65/5 +f 84/66/1 83/42/1 81/16/1 +f 91/22/4 92/21/4 90/20/4 +f 94/23/2 96/21/2 95/22/2 +f 99/21/3 100/25/3 98/24/3 +f 102/26/1 104/25/1 103/21/1 +f 2/61/1 4/1/1 1/3/1 +f 4/1/2 8/4/2 3/2/2 +f 8/4/3 6/6/3 7/5/3 +f 6/6/4 2/8/4 5/7/4 +f 86/66/5 88/10/5 82/12/5 +f 2/8/5 6/6/5 4/14/5 +f 10/61/1 12/1/1 9/3/1 +f 12/1/2 16/4/2 11/2/2 +f 16/4/3 14/6/3 15/5/3 +f 14/6/4 10/8/4 13/7/4 +f 10/8/5 14/6/5 12/14/5 +f 18/61/1 20/1/1 17/3/1 +f 20/1/2 24/4/2 19/2/2 +f 24/4/3 22/6/3 23/5/3 +f 22/6/4 18/8/4 21/7/4 +f 86/18/4 82/15/4 85/17/4 +f 22/6/5 24/13/5 18/8/5 +f 26/61/1 28/1/1 25/3/1 +f 28/1/2 32/4/2 27/2/2 +f 32/4/3 30/6/3 31/5/3 +f 30/6/4 26/8/4 29/7/4 +f 88/67/3 86/18/3 87/19/3 +f 30/6/5 32/13/5 26/8/5 +f 33/68/2 34/20/2 35/22/2 +f 37/69/4 39/22/4 38/23/4 +f 41/20/1 42/24/1 43/21/1 +f 45/23/3 47/21/3 46/26/3 +f 75/34/6 76/27/6 77/29/6 +f 51/52/7 52/30/7 53/32/7 +f 73/38/8 74/33/8 75/34/8 +f 53/32/9 54/31/9 55/36/9 +f 71/43/10 72/37/10 73/38/10 +f 55/36/11 56/35/11 57/40/11 +f 84/66/2 88/12/2 83/42/2 +f 69/49/11 70/16/11 71/43/11 +f 57/40/10 58/39/10 59/45/10 +f 77/29/12 78/28/12 79/47/12 +f 67/54/9 68/48/9 69/49/9 +f 59/45/8 60/44/8 61/51/8 +f 79/47/13 80/46/13 50/52/13 +f 50/70/7 49/53/7 67/54/7 +f 61/51/6 62/50/6 63/56/6 +f 56/59/5 54/71/5 52/72/5 +f 52/72/5 66/73/5 56/59/5 +f 64/57/5 62/74/5 60/75/5 +f 60/75/5 58/58/5 64/57/5 +f 56/59/5 66/73/5 64/57/5 +f 65/62/13 66/60/13 51/3/13 +f 63/56/12 64/55/12 65/62/12 +f 70/76/5 68/77/5 49/65/5 +f 49/65/5 80/78/5 78/63/5 +f 78/63/5 76/79/5 74/64/5 +f 74/64/5 72/80/5 70/76/5 +f 70/76/5 49/65/5 74/64/5 +f 82/15/1 84/66/1 81/16/1 +f 89/68/4 91/22/4 90/20/4 +f 93/69/2 94/23/2 95/22/2 +f 97/20/3 99/21/3 98/24/3 +f 101/23/1 102/26/1 103/21/1 diff --git a/assets/hbm/models/launch_table/launch_table_large_scaffold_connector.obj b/assets/hbm/models/launch_table/launch_table_large_scaffold_connector.obj new file mode 100644 index 000000000..cf39ea655 --- /dev/null +++ b/assets/hbm/models/launch_table/launch_table_large_scaffold_connector.obj @@ -0,0 +1,491 @@ +# Blender v2.76 (sub 0) OBJ File: 'launch_table_large_scaffold_connector.blend' +# www.blender.org +o Cube.004_Cube.005 +v 1.000000 0.000000 0.750000 +v 1.000000 1.000000 0.750000 +v 1.000000 0.000000 1.000000 +v 1.000000 1.000000 1.000000 +v 0.750000 0.000000 0.750000 +v 0.750000 1.000000 0.750000 +v 0.750000 0.000000 1.000000 +v 0.750000 1.000000 1.000000 +v -0.750000 0.000000 0.750000 +v -0.750000 1.000000 0.750000 +v -0.750000 0.000000 1.000000 +v -0.750000 1.000000 1.000000 +v -1.000000 0.000000 0.750000 +v -1.000000 1.000000 0.750000 +v -1.000000 0.000000 1.000000 +v -1.000000 1.000000 1.000000 +v -0.750000 0.000000 -1.000000 +v -0.750000 1.000000 -1.000000 +v -0.750000 0.000000 -0.750000 +v -0.750000 1.000000 -0.750000 +v -1.000000 0.000000 -1.000000 +v -1.000000 1.000000 -1.000000 +v -1.000000 0.000000 -0.750000 +v -1.000000 1.000000 -0.750000 +v 1.000000 0.000000 -1.000000 +v 1.000000 1.000000 -1.000000 +v 1.000000 0.000000 -0.750000 +v 1.000000 1.000000 -0.750000 +v 0.750000 0.000000 -1.000000 +v 0.750000 1.000000 -1.000000 +v 0.750000 0.000000 -0.750000 +v 0.750000 1.000000 -0.750000 +v 0.750000 0.000000 0.875000 +v 0.750000 1.000000 0.875000 +v -0.750000 0.000000 0.875000 +v -0.750000 1.000000 0.875000 +v 0.750000 0.000000 -0.875000 +v 0.750000 1.000000 -0.875000 +v -0.750000 0.000000 -0.875000 +v -0.750000 1.000000 -0.875000 +v 0.875000 0.000000 -0.750000 +v 0.875000 1.000000 -0.750000 +v 0.875000 0.000000 0.750000 +v 0.875000 1.000000 0.750000 +v -0.875000 0.000000 -0.750000 +v -0.875000 1.000000 -0.750000 +v -0.875000 0.000000 0.750000 +v -0.875000 1.000000 0.750000 +v 0.500000 0.000000 -0.250000 +v 0.676777 0.250000 -0.323223 +v -0.676777 0.250000 -0.676777 +v -0.500000 0.000000 -0.250000 +v -0.750000 0.250000 -0.500000 +v -0.676777 0.000000 -0.323223 +v 0.323223 0.250000 -0.323223 +v -0.750000 0.000000 -0.500000 +v 0.250000 0.250000 -0.500000 +v -0.676777 0.000000 -0.676777 +v -0.500000 0.250000 -0.250000 +v -0.500000 0.000000 -0.750000 +v -0.676777 0.250000 -0.323223 +v -0.323223 0.000000 -0.676777 +v -0.250000 0.000000 -0.500000 +v 0.676777 0.250000 -0.676777 +v -0.323223 0.000000 -0.323223 +v 0.750000 0.250000 -0.500000 +v 0.323223 0.000000 -0.323223 +v -0.323223 0.250000 -0.323223 +v 0.250000 0.000000 -0.500000 +v -0.250000 0.250000 -0.500000 +v 0.323223 0.000000 -0.676777 +v 0.500000 0.250000 -0.250000 +v 0.500000 0.000000 -0.750000 +v -0.323223 0.250000 -0.676777 +v 0.676777 0.000000 -0.676777 +v 0.750000 0.000000 -0.500000 +v 0.323223 0.250000 -0.676777 +v 0.676777 0.000000 -0.323223 +v 0.156250 0.000000 -0.156250 +v 0.156250 0.000000 0.156250 +v -0.156250 0.000000 -0.156250 +v -0.156250 0.000000 0.156250 +v 0.500001 0.750000 -3.500000 +v -0.499999 0.750000 -3.500000 +v -0.676776 0.676777 -3.500000 +v -0.749999 0.500000 -3.500000 +v -0.676776 0.323223 -3.500000 +v -0.499999 0.250000 -3.500000 +v -0.323223 0.323223 -3.500000 +v -0.249999 0.500000 -3.500000 +v -0.323223 0.676777 -3.500000 +v 0.323224 0.676777 -3.500000 +v 0.250001 0.500000 -3.500000 +v 0.323224 0.323223 -3.500000 +v 0.500001 0.250000 -3.500000 +v 0.676777 0.323223 -3.500000 +v 0.750001 0.500000 -3.500000 +v 0.676777 0.676777 -3.500000 +v 0.676777 0.323223 -0.750000 +v 0.500000 0.250000 -0.750000 +v -0.676777 0.676777 -0.750000 +v -0.500000 0.750000 -0.750000 +v 0.250000 0.500000 -0.750000 +v 0.323223 0.676777 -0.750000 +v -0.750000 0.500000 -0.750000 +v -0.676777 0.323223 -0.750000 +v 0.323223 0.323223 -0.750000 +v -0.500000 0.250000 -0.750000 +v -0.323223 0.323223 -0.750000 +v 0.500000 0.750000 -0.750000 +v -0.250000 0.500000 -0.750000 +v -0.323223 0.676777 -0.750000 +v 0.750000 0.500000 -0.750000 +v 0.676777 0.676777 -0.750000 +v 0.156250 0.343750 -0.156250 +v 0.156250 0.656250 -0.156250 +v 0.156250 0.343750 0.156250 +v 0.156250 0.656250 0.156250 +v -0.156250 0.343750 -0.156250 +v -0.156250 0.656250 -0.156250 +v -0.156250 0.343750 0.156250 +v -0.156250 0.656250 0.156250 +v 0.156251 0.343750 -3.500000 +v 0.156251 0.656250 -3.500000 +v -0.156249 0.656250 -3.500000 +v -0.156249 0.343750 -3.500000 +v 0.750000 0.000000 0.875000 +v 0.750000 1.000000 0.875000 +v -0.750000 0.000000 0.875000 +v -0.750000 1.000000 0.875000 +v 0.750000 0.000000 -0.875000 +v 0.750000 1.000000 -0.875000 +v -0.750000 0.000000 -0.875000 +v -0.750000 1.000000 -0.875000 +v 0.875000 0.000000 -0.750000 +v 0.875000 1.000000 -0.750000 +v 0.875000 0.000000 0.750000 +v 0.875000 1.000000 0.750000 +v -0.875000 0.000000 -0.750000 +v -0.875000 1.000000 -0.750000 +v -0.875000 0.000000 0.750000 +v -0.875000 1.000000 0.750000 +vt 0.107143 0.142857 +vt 0.107143 0.000000 +vt 0.142857 0.000000 +vt 0.071429 0.142857 +vt 0.071429 -0.000000 +vt 0.035714 0.142857 +vt 0.035714 -0.000000 +vt -0.000000 0.142857 +vt -0.000000 0.000000 +vt 0.133929 0.375000 +vt 0.133929 0.330357 +vt 0.178571 0.330357 +vt 0.035714 0.178571 +vt 0.000000 0.178571 +vt 0.571429 0.142857 +vt 0.357143 0.142857 +vt 0.357143 -0.000000 +vt 0.142857 0.142857 +vt 0.571429 0.285714 +vt 0.357143 0.285714 +vt 0.142857 0.285714 +vt 0.732143 -0.000000 +vt 0.732143 0.035714 +vt 0.705357 0.035714 +vt 0.758929 -0.000000 +vt 0.758929 0.035714 +vt 0.946429 -0.000000 +vt 0.946429 0.035714 +vt 0.919643 0.035714 +vt 1.000000 -0.000000 +vt 1.000000 0.035714 +vt 0.973214 0.035714 +vt 0.839286 -0.000000 +vt 0.839286 0.035714 +vt 0.812500 0.035714 +vt 0.973214 -0.000000 +vt 0.812500 -0.000000 +vt 0.785714 0.035714 +vt 0.625000 -0.000000 +vt 0.625000 0.035714 +vt 0.598214 0.035714 +vt 0.598214 -0.000000 +vt 0.571429 0.035714 +vt 0.651786 -0.000000 +vt 0.651786 0.035714 +vt 0.866071 -0.000000 +vt 0.866071 0.035714 +vt 0.785714 -0.000000 +vt 0.964286 0.089286 +vt 0.571429 0.089286 +vt 0.571429 0.062500 +vt 0.964286 0.464286 +vt 0.571429 0.464286 +vt 0.571429 0.437500 +vt 0.964286 0.116071 +vt 0.571429 0.116071 +vt 0.964286 0.276786 +vt 0.571429 0.276786 +vt 0.571429 0.250000 +vt 0.964286 0.062500 +vt 0.964286 0.142857 +vt 0.964286 0.169643 +vt 0.571429 0.169643 +vt 0.964286 0.383929 +vt 0.571429 0.383929 +vt 0.571429 0.357143 +vt 0.964286 0.303571 +vt 0.571429 0.303571 +vt 0.964286 0.196429 +vt 0.571429 0.196429 +vt 0.964286 0.223214 +vt 0.571429 0.223214 +vt 0.964286 0.410714 +vt 0.571429 0.410714 +vt 0.964286 0.330357 +vt 0.571429 0.330357 +vt 0.964286 0.437500 +vt 0.964286 0.357143 +vt 0.964286 0.250000 +vt 0.705357 -0.000000 +vt 0.678571 0.035714 +vt 0.678571 -0.000000 +vt 0.892857 0.035714 +vt 0.892857 -0.000000 +vt 0.919643 -0.000000 +vt 0.482143 0.517857 +vt 0.508929 0.508929 +vt 0.508929 0.526786 +vt 0.696429 0.517857 +vt 0.669643 0.526786 +vt 0.669643 0.508929 +vt 0.642857 0.535714 +vt 0.642857 0.491071 +vt 0.616071 0.562500 +vt 0.535714 0.535714 +vt 0.562500 0.473214 +vt 0.562500 0.562500 +vt 0.589286 0.562500 +vt 0.589286 0.464286 +vt 0.723214 0.508929 +vt 0.723214 0.526786 +vt 0.910714 0.517857 +vt 0.883929 0.526786 +vt 0.883929 0.508929 +vt 0.857143 0.535714 +vt 0.857143 0.491071 +vt 0.750000 0.535714 +vt 0.776786 0.473214 +vt 0.776786 0.562500 +vt 0.830357 0.562500 +vt 0.803571 0.562500 +vt 0.803571 0.464286 +vt 0.089286 0.375000 +vt 0.089286 0.330357 +vt 0.044643 0.375000 +vt 0.044643 0.330357 +vt -0.000000 0.508929 +vt 0.482143 0.508929 +vt 0.482143 0.553571 +vt 0.089286 0.285714 +vt -0.000000 0.375000 +vt -0.000000 0.330357 +vt 0.133929 0.285714 +vt -0.000000 0.285714 +vt 0.044643 0.285714 +vt 0.178571 0.375000 +vt 0.223214 0.330357 +vt -0.000000 0.464286 +vt 0.482143 0.464286 +vt 0.482143 0.375000 +vt 0.482143 0.419643 +vt 0.000000 0.419643 +vt 0.571429 0.000000 +vt 0.964286 0.035714 +vt 0.616071 0.473214 +vt 0.535714 0.491071 +vt 0.750000 0.491071 +vt 0.830357 0.473214 +vt -0.000000 0.553571 +vt 0.178571 0.285714 +vt 0.223214 0.375000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn -0.923900 0.000000 -0.382700 +vn -0.923900 0.000000 0.382700 +vn -0.382700 0.000000 0.923900 +vn 0.923900 0.000000 0.382700 +vn 0.382700 0.000000 0.923900 +vn 0.923900 0.000000 -0.382700 +vn 0.923900 -0.382700 0.000000 +vn -0.382700 -0.923900 -0.000000 +vn 0.923900 0.382700 0.000000 +vn 0.382700 -0.923900 0.000000 +vn 0.382700 0.923900 0.000000 +vn -0.382700 0.923900 -0.000000 +vn -0.923900 0.382700 -0.000000 +vn -0.923900 -0.382700 -0.000000 +vn -0.382700 0.000000 -0.923900 +vn 0.382700 0.000000 -0.923900 +vn -0.281100 -0.678600 -0.678600 +vn 0.281100 -0.678600 -0.678600 +vn 0.862900 -0.357400 -0.357400 +vn 0.862900 0.357400 0.357400 +vn -0.862900 -0.357400 -0.357400 +vn -0.862900 0.357400 0.357400 +vn -0.281100 0.678600 0.678600 +vn 0.281100 0.678600 0.678600 +vn 0.000000 -1.000000 -0.000000 +s off +f 4/1/1 3/2/1 1/3/1 +f 8/4/2 7/5/2 3/2/2 +f 6/6/3 5/7/3 7/5/3 +f 2/8/4 1/9/4 5/7/4 +f 118/10/1 117/11/1 115/12/1 +f 6/6/5 8/13/5 4/14/5 +f 12/1/1 11/2/1 9/3/1 +f 16/4/2 15/5/2 11/2/2 +f 14/6/3 13/7/3 15/5/3 +f 10/8/4 9/9/4 13/7/4 +f 16/13/5 12/14/5 10/8/5 +f 20/1/1 19/2/1 17/3/1 +f 24/4/2 23/5/2 19/2/2 +f 22/6/3 21/7/3 23/5/3 +f 18/8/4 17/9/4 21/7/4 +f 22/6/5 24/13/5 20/14/5 +f 28/1/1 27/2/1 25/3/1 +f 32/4/2 31/5/2 27/2/2 +f 30/6/3 29/7/3 31/5/3 +f 26/8/4 25/9/4 29/7/4 +f 32/13/5 28/14/5 26/8/5 +f 34/15/2 36/16/2 35/17/2 +f 39/17/4 40/16/4 38/18/4 +f 42/19/1 44/20/1 43/16/1 +f 47/16/3 48/20/3 46/21/3 +f 56/22/6 53/23/6 51/24/6 +f 54/25/7 61/26/7 53/23/7 +f 69/27/6 57/28/6 77/29/6 +f 49/30/8 72/31/8 55/32/8 +f 76/33/9 66/34/9 50/35/9 +f 67/36/7 55/32/7 57/28/7 +f 78/37/10 50/35/10 72/38/10 +f 63/39/9 70/40/9 68/41/9 +f 65/42/10 68/41/10 59/43/10 +f 62/44/11 74/45/11 70/40/11 +f 75/46/11 64/47/11 66/34/11 +f 52/48/8 59/38/8 61/26/8 +f 97/49/12 113/50/12 99/51/12 +f 88/52/13 108/53/13 106/54/13 +f 98/55/14 114/56/14 113/50/14 +f 89/57/15 109/58/15 108/59/15 +f 96/60/15 99/51/15 100/43/15 +f 83/61/16 110/15/16 114/56/16 +f 92/62/17 104/63/17 110/15/17 +f 85/64/17 101/65/17 102/66/17 +f 90/67/12 111/68/12 109/58/12 +f 93/69/18 103/70/18 104/63/18 +f 94/71/19 107/72/19 103/70/19 +f 86/73/18 105/74/18 101/65/18 +f 91/75/14 112/76/14 111/68/14 +f 87/77/19 106/54/19 105/74/19 +f 84/78/16 102/66/16 112/76/16 +f 95/79/13 100/59/13 107/72/13 +f 58/80/20 51/24/20 108/81/20 +f 62/44/21 60/82/21 108/81/21 +f 100/83/21 64/47/21 75/46/21 +f 100/83/20 73/84/20 71/85/20 +f 108/86/22 51/87/22 106/88/22 +f 108/89/23 109/90/23 74/91/23 +f 109/90/24 111/92/24 70/93/24 +f 70/93/25 111/92/25 112/94/25 +f 105/95/26 106/88/26 51/87/26 +f 61/96/27 101/97/27 105/95/27 +f 102/98/28 101/97/28 61/96/28 +f 112/94/29 102/98/29 59/99/29 +f 100/89/22 77/100/22 107/101/22 +f 100/102/23 99/103/23 64/104/23 +f 99/103/24 113/105/24 66/106/24 +f 103/107/26 107/101/26 77/100/26 +f 55/108/27 104/109/27 103/107/27 +f 66/106/25 113/105/25 114/110/25 +f 114/110/29 110/111/29 72/112/29 +f 110/111/28 104/109/28 55/108/28 +f 122/113/2 121/114/2 117/11/2 +f 120/115/3 119/116/3 121/114/3 +f 115/117/1 123/118/1 124/119/1 +f 117/11/2 121/114/2 82/120/2 +f 122/115/5 118/121/5 116/122/5 +f 115/12/1 117/11/1 80/123/1 +f 119/116/4 115/122/4 79/124/4 +f 121/114/3 119/116/3 81/125/3 +f 124/126/4 123/12/4 126/127/4 +f 119/128/30 126/129/30 123/118/30 +f 116/121/5 124/130/5 125/131/5 +f 120/132/3 125/131/3 126/129/3 +f 129/17/4 130/16/4 128/15/4 +f 132/18/2 134/16/2 133/17/2 +f 137/16/3 138/20/3 136/19/3 +f 140/21/1 142/20/1 141/16/1 +f 2/18/1 4/1/1 1/3/1 +f 4/1/2 8/4/2 3/2/2 +f 8/4/3 6/6/3 7/5/3 +f 6/6/4 2/8/4 5/7/4 +f 116/126/1 118/10/1 115/12/1 +f 2/8/5 6/6/5 4/14/5 +f 10/18/1 12/1/1 9/3/1 +f 12/1/2 16/4/2 11/2/2 +f 16/4/3 14/6/3 15/5/3 +f 14/6/4 10/8/4 13/7/4 +f 14/6/5 16/13/5 10/8/5 +f 18/18/1 20/1/1 17/3/1 +f 20/1/2 24/4/2 19/2/2 +f 24/4/3 22/6/3 23/5/3 +f 22/6/4 18/8/4 21/7/4 +f 18/8/5 22/6/5 20/14/5 +f 26/18/1 28/1/1 25/3/1 +f 28/1/2 32/4/2 27/2/2 +f 32/4/3 30/6/3 31/5/3 +f 30/6/4 26/8/4 29/7/4 +f 30/6/5 32/13/5 26/8/5 +f 33/133/2 34/15/2 35/17/2 +f 37/3/4 39/17/4 38/18/4 +f 41/15/1 42/19/1 43/16/1 +f 45/18/3 47/16/3 46/21/3 +f 58/80/6 56/22/6 51/24/6 +f 56/22/7 54/25/7 53/23/7 +f 71/85/6 69/27/6 77/29/6 +f 67/36/8 49/30/8 55/32/8 +f 78/37/9 76/33/9 50/35/9 +f 69/27/7 67/36/7 57/28/7 +f 49/48/10 78/37/10 72/38/10 +f 65/42/9 63/39/9 68/41/9 +f 52/133/10 65/42/10 59/43/10 +f 63/39/11 62/44/11 70/40/11 +f 76/33/11 75/46/11 66/34/11 +f 54/25/8 52/48/8 61/26/8 +f 96/60/12 97/49/12 99/51/12 +f 87/77/13 88/52/13 106/54/13 +f 97/49/14 98/55/14 113/50/14 +f 88/79/15 89/57/15 108/59/15 +f 95/134/15 96/60/15 100/43/15 +f 98/55/16 83/61/16 114/56/16 +f 83/61/17 92/62/17 110/15/17 +f 84/78/17 85/64/17 102/66/17 +f 89/57/12 90/67/12 109/58/12 +f 92/62/18 93/69/18 104/63/18 +f 93/69/19 94/71/19 103/70/19 +f 85/64/18 86/73/18 101/65/18 +f 90/67/14 91/75/14 111/68/14 +f 86/73/19 87/77/19 105/74/19 +f 91/75/16 84/78/16 112/76/16 +f 94/71/13 95/79/13 107/72/13 +f 60/82/20 58/80/20 108/81/20 +f 74/45/21 62/44/21 108/81/21 +f 73/84/21 100/83/21 75/46/21 +f 77/29/20 100/83/20 71/85/20 +f 74/91/24 109/90/24 70/93/24 +f 68/135/25 70/93/25 112/94/25 +f 53/136/26 105/95/26 51/87/26 +f 53/136/27 61/96/27 105/95/27 +f 59/99/28 102/98/28 61/96/28 +f 68/135/29 112/94/29 59/99/29 +f 64/104/24 99/103/24 66/106/24 +f 57/137/26 103/107/26 77/100/26 +f 57/137/27 55/108/27 103/107/27 +f 50/138/25 66/106/25 114/110/25 +f 50/138/29 114/110/29 72/112/29 +f 72/112/28 110/111/28 55/108/28 +f 118/10/2 122/113/2 117/11/2 +f 122/113/3 120/115/3 121/114/3 +f 116/139/1 115/117/1 124/119/1 +f 80/123/2 117/11/2 82/120/2 +f 120/116/5 122/115/5 116/122/5 +f 79/140/1 115/12/1 80/123/1 +f 81/125/4 119/116/4 79/124/4 +f 82/120/3 121/114/3 81/125/3 +f 125/141/4 124/126/4 126/127/4 +f 115/117/30 119/128/30 123/118/30 +f 120/132/5 116/121/5 125/131/5 +f 119/128/3 120/132/3 126/129/3 +f 127/133/4 129/17/4 128/15/4 +f 131/3/2 132/18/2 133/17/2 +f 135/15/3 137/16/3 136/19/3 +f 139/18/1 140/21/1 141/16/1 diff --git a/assets/hbm/models/launch_table/launch_table_large_scaffold_empty.obj b/assets/hbm/models/launch_table/launch_table_large_scaffold_empty.obj new file mode 100644 index 000000000..e94372ff0 --- /dev/null +++ b/assets/hbm/models/launch_table/launch_table_large_scaffold_empty.obj @@ -0,0 +1,150 @@ +# Blender v2.76 (sub 0) OBJ File: 'launch_table_large_scaffold_empty.blend' +# www.blender.org +o Cube.005_Cube.006 +v -1.000000 0.000000 -0.750000 +v -1.000000 1.000000 -0.750000 +v -1.000000 0.000000 -1.000000 +v -1.000000 1.000000 -1.000000 +v -0.750000 0.000000 -0.750000 +v -0.750000 1.000000 -0.750000 +v -0.750000 0.000000 -1.000000 +v -0.750000 1.000000 -1.000000 +v 0.750000 0.000000 -0.750000 +v 0.750000 1.000000 -0.750000 +v 0.750000 0.000000 -1.000000 +v 0.750000 1.000000 -1.000000 +v 1.000000 0.000000 -0.750000 +v 1.000000 1.000000 -0.750000 +v 1.000000 0.000000 -1.000000 +v 1.000000 1.000000 -1.000000 +v 0.750000 0.000000 1.000000 +v 0.750000 1.000000 1.000000 +v 0.750000 0.000000 0.750000 +v 0.750000 1.000000 0.750000 +v 1.000000 0.000000 1.000000 +v 1.000000 1.000000 1.000000 +v 1.000000 0.000000 0.750000 +v 1.000000 1.000000 0.750000 +v -1.000000 0.000000 1.000000 +v -1.000000 1.000000 1.000000 +v -1.000000 0.000000 0.750000 +v -1.000000 1.000000 0.750000 +v -0.750000 0.000000 1.000000 +v -0.750000 1.000000 1.000000 +v -0.750000 0.000000 0.750000 +v -0.750000 1.000000 0.750000 +v -0.750000 0.000000 -0.875000 +v -0.750000 1.000000 -0.875000 +v 0.750000 0.000000 -0.875000 +v 0.750000 1.000000 -0.875000 +v -0.750000 0.000000 0.875000 +v -0.750000 1.000000 0.875000 +v 0.750000 0.000000 0.875000 +v 0.750000 1.000000 0.875000 +v -0.875000 0.000000 0.750000 +v -0.875000 1.000000 0.750000 +v -0.875000 0.000000 -0.750000 +v -0.875000 1.000000 -0.750000 +v 0.875000 0.000000 0.750000 +v 0.875000 1.000000 0.750000 +v 0.875000 0.000000 -0.750000 +v 0.875000 1.000000 -0.750000 +v -0.750000 0.000000 -0.875000 +v -0.750000 1.000000 -0.875000 +v 0.750000 0.000000 -0.875000 +v 0.750000 1.000000 -0.875000 +v -0.750000 0.000000 0.875000 +v -0.750000 1.000000 0.875000 +v 0.750000 0.000000 0.875000 +v 0.750000 1.000000 0.875000 +v -0.875000 0.000000 0.750000 +v -0.875000 1.000000 0.750000 +v -0.875000 0.000000 -0.750000 +v -0.875000 1.000000 -0.750000 +v 0.875000 0.000000 0.750000 +v 0.875000 1.000000 0.750000 +v 0.875000 0.000000 -0.750000 +v 0.875000 1.000000 -0.750000 +vt 0.058824 0.235294 +vt 0.058824 -0.000000 +vt 0.117647 0.000000 +vt -0.000000 0.235294 +vt -0.000000 -0.000000 +vt 0.176471 0.235294 +vt 0.176471 -0.000000 +vt 0.235294 0.000000 +vt 0.117647 0.235294 +vt 0.058824 0.294118 +vt 0.352941 0.588235 +vt 0.000000 0.588235 +vt 0.000000 0.352941 +vt 0.705882 0.352941 +vt 0.705882 0.588235 +vt 0.352941 0.823529 +vt 0.000000 0.823529 +vt 0.705882 0.823529 +vt 0.235294 0.235294 +vt -0.000000 0.294118 +vt 0.352941 0.352941 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +s off +f 4/1/1 3/2/1 1/3/1 +f 8/4/2 7/5/2 3/2/2 +f 6/6/3 5/7/3 7/8/3 +f 2/9/4 1/3/4 5/7/4 +f 8/4/5 4/1/5 2/10/5 +f 12/1/1 11/2/1 9/3/1 +f 16/4/2 15/5/2 11/2/2 +f 14/6/3 13/7/3 15/8/3 +f 10/9/4 9/3/4 13/7/4 +f 16/4/5 12/1/5 10/10/5 +f 20/1/1 19/2/1 17/3/1 +f 24/4/2 23/5/2 19/2/2 +f 22/6/3 21/7/3 23/8/3 +f 18/9/4 17/3/4 21/7/4 +f 24/4/5 20/1/5 18/10/5 +f 28/1/1 27/2/1 25/3/1 +f 32/4/2 31/5/2 27/2/2 +f 30/6/3 29/7/3 31/8/3 +f 26/9/4 25/3/4 29/7/4 +f 32/4/5 28/1/5 26/10/5 +f 34/11/2 36/12/2 35/13/2 +f 39/14/4 40/15/4 38/11/4 +f 42/16/1 44/17/1 43/12/1 +f 47/15/3 48/18/3 46/16/3 +f 51/13/4 52/12/4 50/11/4 +f 54/11/2 56/15/2 55/14/2 +f 59/12/3 60/17/3 58/16/3 +f 62/16/1 64/18/1 63/15/1 +f 2/9/1 4/1/1 1/3/1 +f 4/1/2 8/4/2 3/2/2 +f 8/19/3 6/6/3 7/8/3 +f 6/6/4 2/9/4 5/7/4 +f 6/20/5 8/4/5 2/10/5 +f 10/9/1 12/1/1 9/3/1 +f 12/1/2 16/4/2 11/2/2 +f 16/19/3 14/6/3 15/8/3 +f 14/6/4 10/9/4 13/7/4 +f 14/20/5 16/4/5 10/10/5 +f 18/9/1 20/1/1 17/3/1 +f 20/1/2 24/4/2 19/2/2 +f 24/19/3 22/6/3 23/8/3 +f 22/6/4 18/9/4 21/7/4 +f 22/20/5 24/4/5 18/10/5 +f 26/9/1 28/1/1 25/3/1 +f 28/1/2 32/4/2 27/2/2 +f 32/19/3 30/6/3 31/8/3 +f 30/6/4 26/9/4 29/7/4 +f 30/20/5 32/4/5 26/10/5 +f 33/21/2 34/11/2 35/13/2 +f 37/21/4 39/14/4 38/11/4 +f 41/11/1 42/16/1 43/12/1 +f 45/11/3 47/15/3 46/16/3 +f 49/21/4 51/13/4 50/11/4 +f 53/21/2 54/11/2 55/14/2 +f 57/11/3 59/12/3 58/16/3 +f 61/11/1 62/16/1 63/15/1 diff --git a/assets/hbm/models/launch_table/launch_table_small_pad.obj b/assets/hbm/models/launch_table/launch_table_small_pad.obj new file mode 100644 index 000000000..e5646475f --- /dev/null +++ b/assets/hbm/models/launch_table/launch_table_small_pad.obj @@ -0,0 +1,136 @@ +# Blender v2.76 (sub 0) OBJ File: 'launch_table_small_pad.blend' +# www.blender.org +o Cube.001_Cube.002 +v -2.000000 1.000000 -0.500000 +v -1.500000 2.000000 -0.500000 +v -2.000000 1.000000 -2.000000 +v -1.500000 2.000000 -1.500000 +v 2.000000 1.000000 -0.500000 +v 1.500000 2.000000 -0.500000 +v 2.000000 1.000000 -2.000000 +v 1.500000 2.000000 -1.500000 +v -2.000000 1.000000 2.000000 +v -1.500000 2.000000 1.500000 +v -2.000000 1.000000 0.500000 +v -1.500000 2.000000 0.500000 +v 2.000000 1.000000 2.000000 +v 1.500000 2.000000 1.500000 +v 2.000000 1.000000 0.500000 +v 1.500000 2.000000 0.500000 +v 0.500000 2.000000 -0.500000 +v -0.500000 2.000000 -0.500000 +v -0.500000 2.000000 0.500000 +v 0.500000 2.000000 0.500000 +v -0.500000 1.000000 -0.500000 +v 0.500000 1.000000 -0.500000 +v 0.500000 1.000000 0.500000 +v -0.500000 1.000000 0.500000 +v 0.500000 2.000000 -0.500000 +v -0.500000 2.000000 -0.500000 +v -0.500000 2.000000 0.500000 +v 0.500000 2.000000 0.500000 +vt 0.071429 0.571429 +vt 0.000000 0.428571 +vt 0.214286 0.428571 +vt 0.071429 0.142857 +vt 0.000000 0.000000 +vt 0.571429 -0.000000 +vt 0.500000 0.428571 +vt 0.357143 0.428571 +vt 0.357143 0.285714 +vt 0.071429 0.714286 +vt 0.214286 0.571429 +vt 0.214286 0.714286 +vt 1.000000 0.428571 +vt 0.857143 0.285714 +vt 0.857143 0.142857 +vt 0.500000 0.571429 +vt 0.357143 0.571429 +vt 0.071429 0.857143 +vt 0.214286 0.857143 +vt 0.071429 0.428571 +vt 0.000000 0.285714 +vt 0.214286 0.285714 +vt 0.071429 0.285714 +vt 0.000000 0.142857 +vt 0.571429 0.142857 +vt 0.714286 0.142857 +vt 0.714286 0.285714 +vt 0.857143 0.428571 +vt 0.714286 0.428571 +vt 0.714286 0.000000 +vt 0.857143 0.000000 +vt 0.571429 0.571429 +vt 0.571429 0.428571 +vt 0.857143 0.571429 +vt 0.500000 0.142857 +vt 0.571429 0.285714 +vt 0.500000 0.714286 +vt 0.357143 0.714286 +vt 0.000000 0.571429 +vt 1.000000 0.000000 +vt 0.571429 0.714286 +vt 0.500000 0.857143 +vt 0.357143 0.857143 +vt 0.000000 0.714286 +vt 0.500000 0.285714 +vt 0.714286 0.571429 +vn -0.894400 0.447200 0.000000 +vn 0.000000 0.447200 -0.894400 +vn 0.894400 0.447200 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.447200 0.894400 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +s off +f 4/1/1 3/2/1 1/3/1 +f 8/4/2 7/5/2 3/6/2 +f 8/7/3 6/8/3 5/9/3 +f 2/10/4 21/11/4 18/12/4 +f 4/13/5 18/14/5 17/15/5 +f 10/16/1 12/17/1 11/8/1 +f 16/18/6 23/12/6 20/19/6 +f 14/20/3 13/21/3 15/22/3 +f 10/23/7 9/24/7 13/25/7 +f 20/26/5 19/27/5 14/6/5 +f 18/14/5 2/28/5 12/29/5 +f 16/30/5 6/31/5 17/15/5 +f 16/3/3 15/22/3 5/9/3 +f 17/32/8 22/33/8 23/29/8 +f 24/29/9 21/28/9 18/34/9 +f 1/3/1 11/8/1 12/17/1 +f 17/15/5 18/14/5 19/27/5 +f 27/27/10 26/14/10 25/15/10 +f 2/11/1 4/1/1 1/3/1 +f 4/35/2 8/4/2 3/6/2 +f 7/36/3 8/7/3 5/9/3 +f 5/32/4 6/37/4 22/17/4 +f 17/38/4 18/12/4 21/11/4 +f 2/10/4 1/39/4 21/11/4 +f 21/11/4 22/17/4 17/38/4 +f 6/37/4 17/38/4 22/17/4 +f 17/15/5 6/31/5 8/40/5 +f 8/40/5 4/13/5 17/15/5 +f 2/28/5 18/14/5 4/13/5 +f 9/33/1 10/16/1 11/8/1 +f 11/41/6 12/42/6 24/38/6 +f 19/43/6 20/19/6 23/12/6 +f 16/18/6 15/44/6 23/12/6 +f 23/12/6 24/38/6 19/43/6 +f 12/42/6 19/43/6 24/38/6 +f 16/3/3 14/20/3 15/22/3 +f 14/45/7 10/23/7 13/25/7 +f 10/33/5 14/6/5 19/27/5 +f 16/30/5 20/26/5 14/6/5 +f 19/27/5 12/29/5 10/33/5 +f 19/27/5 18/14/5 12/29/5 +f 20/26/5 16/30/5 17/15/5 +f 6/8/3 16/3/3 5/9/3 +f 20/46/8 17/32/8 23/29/8 +f 19/46/9 24/29/9 18/34/9 +f 2/11/1 1/3/1 12/17/1 +f 20/26/5 17/15/5 19/27/5 +f 28/26/10 27/27/10 25/15/10 diff --git a/assets/hbm/models/launch_table/launch_table_small_scaffold_base.obj b/assets/hbm/models/launch_table/launch_table_small_scaffold_base.obj new file mode 100644 index 000000000..7670c8782 --- /dev/null +++ b/assets/hbm/models/launch_table/launch_table_small_scaffold_base.obj @@ -0,0 +1,309 @@ +# Blender v2.76 (sub 0) OBJ File: 'launch_table_small_scaffold_base.blend' +# www.blender.org +o Cube.006_Cube.007 +v 0.500000 0.000000 0.375000 +v 0.500000 1.000000 0.375000 +v 0.500000 0.000000 0.500000 +v 0.500000 1.000000 0.500000 +v 0.375000 0.000000 0.375000 +v 0.375000 1.000000 0.375000 +v 0.375000 0.000000 0.500000 +v 0.375000 1.000000 0.500000 +v 0.500000 0.000000 -0.500000 +v 0.500000 1.000000 -0.500000 +v 0.500000 0.000000 -0.375000 +v 0.500000 1.000000 -0.375000 +v 0.375000 0.000000 -0.500000 +v 0.375000 1.000000 -0.500000 +v 0.375000 0.000000 -0.375000 +v 0.375000 1.000000 -0.375000 +v -0.375000 0.000000 -0.500000 +v -0.375000 1.000000 -0.500000 +v -0.375000 0.000000 -0.375000 +v -0.375000 1.000000 -0.375000 +v -0.500000 0.000000 -0.500000 +v -0.500000 1.000000 -0.500000 +v -0.500000 0.000000 -0.375000 +v -0.500000 1.000000 -0.375000 +v -0.375000 0.000000 0.375000 +v -0.375000 1.000000 0.375000 +v -0.375000 0.000000 0.500000 +v -0.375000 1.000000 0.500000 +v -0.500000 0.000000 0.375000 +v -0.500000 1.000000 0.375000 +v -0.500000 0.000000 0.500000 +v -0.500000 1.000000 0.500000 +v 0.375000 0.000000 0.437500 +v 0.375000 1.000000 0.437500 +v -0.375000 0.000000 0.437500 +v -0.375000 1.000000 0.437500 +v 0.375000 0.000000 -0.437500 +v 0.375000 1.000000 -0.437500 +v -0.375000 0.000000 -0.437500 +v -0.375000 1.000000 -0.437500 +v 0.437500 0.000000 -0.375000 +v 0.437500 1.000000 -0.375000 +v 0.437500 0.000000 0.375000 +v 0.437500 1.000000 0.375000 +v -0.437500 0.000000 -0.375000 +v -0.437500 1.000000 -0.375000 +v -0.437500 0.000000 0.375000 +v -0.437500 1.000000 0.375000 +v 0.406250 0.000000 -0.156250 +v 0.406250 1.000000 -0.156250 +v 0.406250 0.000000 0.156250 +v 0.406250 1.000000 0.156250 +v 0.093750 0.000000 -0.156250 +v 0.093750 1.000000 -0.156250 +v 0.093750 0.000000 0.156250 +v 0.093750 1.000000 0.156250 +v -0.250000 1.000000 0.375000 +v -0.250000 0.000000 0.375000 +v -0.250000 0.000000 -0.125000 +v -0.250000 1.000000 -0.125000 +v -0.338388 0.000000 -0.161612 +v -0.338388 1.000000 -0.161612 +v -0.375000 0.000000 -0.250000 +v -0.375000 1.000000 -0.250000 +v -0.338388 0.000000 -0.338388 +v -0.338388 1.000000 -0.338388 +v -0.250000 0.000000 -0.375000 +v -0.250000 1.000000 -0.375000 +v -0.161612 0.000000 -0.338388 +v -0.161612 1.000000 -0.338388 +v -0.125000 0.000000 -0.250000 +v -0.125000 1.000000 -0.250000 +v -0.161612 0.000000 -0.161612 +v -0.161612 1.000000 -0.161612 +v -0.338388 0.000000 0.338388 +v -0.338388 1.000000 0.338388 +v -0.375000 0.000000 0.250000 +v -0.375000 1.000000 0.250000 +v -0.338388 0.000000 0.161612 +v -0.338388 1.000000 0.161612 +v -0.250000 0.000000 0.125000 +v -0.250000 1.000000 0.125000 +v -0.161612 0.000000 0.161612 +v -0.161612 1.000000 0.161612 +v -0.125000 0.000000 0.250000 +v -0.125000 1.000000 0.250000 +v -0.161612 0.000000 0.338388 +v -0.161612 1.000000 0.338388 +v 0.375000 0.000000 0.437500 +v 0.375000 1.000000 0.437500 +v -0.375000 0.000000 0.437500 +v -0.375000 1.000000 0.437500 +v 0.375000 0.000000 -0.437500 +v 0.375000 1.000000 -0.437500 +v -0.375000 0.000000 -0.437500 +v -0.375000 1.000000 -0.437500 +v 0.437500 0.000000 -0.375000 +v 0.437500 1.000000 -0.375000 +v 0.437500 0.000000 0.375000 +v 0.437500 1.000000 0.375000 +v -0.437500 0.000000 -0.375000 +v -0.437500 1.000000 -0.375000 +v -0.437500 0.000000 0.375000 +v -0.437500 1.000000 0.375000 +vt 0.107143 0.285714 +vt 0.107143 -0.000000 +vt 0.142857 0.000000 +vt 0.071429 0.285714 +vt 0.071429 0.000000 +vt 0.035714 0.285714 +vt 0.035714 0.000000 +vt 0.000000 0.285714 +vt 0.000000 0.000000 +vt 0.035714 0.321429 +vt -0.000000 0.321429 +vt 0.428571 0.714286 +vt 0.214286 0.714286 +vt 0.214286 0.428571 +vt -0.000000 0.714286 +vt 0.428571 1.000000 +vt 0.214286 1.000000 +vt -0.000000 1.000000 +vt 0.607143 0.714286 +vt 0.607143 0.428571 +vt 0.696429 0.428571 +vt 0.517857 0.714286 +vt 0.517857 0.428571 +vt 0.428571 0.428571 +vt 0.696429 0.714286 +vt 0.785714 0.428571 +vt 0.517857 0.803571 +vt 0.428571 0.803571 +vt 0.196429 0.285714 +vt 0.142857 0.285714 +vt 0.892857 0.285714 +vt 0.839286 0.285714 +vt 0.839286 0.000000 +vt 0.250000 0.285714 +vt 0.196429 -0.000000 +vt 0.785714 0.285714 +vt 0.785714 0.000000 +vt 0.303571 0.285714 +vt 0.250000 -0.000000 +vt 0.732143 0.285714 +vt 0.732143 0.000000 +vt 0.357143 0.285714 +vt 0.303571 -0.000000 +vt 0.678571 0.285714 +vt 0.678571 0.000000 +vt 0.571429 0.285714 +vt 0.517857 0.285714 +vt 0.517857 -0.000000 +vt 0.410714 0.285714 +vt 0.357143 -0.000000 +vt 0.625000 0.285714 +vt 0.625000 0.000000 +vt 0.464286 0.285714 +vt 0.464286 -0.000000 +vt 0.410714 -0.000000 +vt 0.571429 0.000000 +vt 0.571429 0.357143 +vt 0.642857 0.285714 +vt 0.642857 0.428571 +vt 0.946429 0.285714 +vt 0.892857 -0.000000 +vt 1.000000 0.285714 +vt 0.946429 -0.000000 +vt 0.142857 0.357143 +vt 0.267857 0.303571 +vt 0.285714 0.357143 +vt -0.000000 0.428571 +vt 0.785714 0.714286 +vt 0.714286 0.357143 +vt 0.696429 0.410714 +vt 0.589286 0.410714 +vt 0.589286 0.303571 +vt 0.696429 0.303571 +vt 1.000000 -0.000000 +vt 0.267857 0.410714 +vt 0.160714 0.410714 +vt 0.160714 0.303571 +vt 0.214286 0.285714 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.923900 0.000000 -0.382700 +vn -0.382700 0.000000 0.923900 +vn 0.382700 0.000000 -0.923900 +vn -0.923900 0.000000 0.382700 +vn -0.382700 0.000000 -0.923900 +vn -0.923900 0.000000 -0.382700 +vn 0.923900 0.000000 0.382700 +vn 0.382700 0.000000 0.923900 +s off +f 4/1/1 3/2/1 1/3/1 +f 8/4/2 7/5/2 3/2/2 +f 6/6/3 5/7/3 7/5/3 +f 2/8/4 1/9/4 5/7/4 +f 6/6/5 8/10/5 4/11/5 +f 12/1/1 11/2/1 9/3/1 +f 16/4/2 15/5/2 11/2/2 +f 14/6/3 13/7/3 15/5/3 +f 10/8/4 9/9/4 13/7/4 +f 16/10/5 12/11/5 10/8/5 +f 20/1/1 19/2/1 17/3/1 +f 24/4/2 23/5/2 19/2/2 +f 22/6/3 21/7/3 23/5/3 +f 18/8/4 17/9/4 21/7/4 +f 22/6/5 24/10/5 20/11/5 +f 28/1/1 27/2/1 25/3/1 +f 32/4/2 31/5/2 27/2/2 +f 30/6/3 29/7/3 31/5/3 +f 26/8/4 25/9/4 29/7/4 +f 32/10/5 28/11/5 26/8/5 +f 34/12/2 36/13/2 35/14/2 +f 39/14/4 40/13/4 38/15/4 +f 42/16/1 44/17/1 43/13/1 +f 47/13/3 48/17/3 46/18/3 +f 52/19/1 51/20/1 49/21/1 +f 56/22/2 55/23/2 51/20/2 +f 54/12/3 53/24/3 55/23/3 +f 50/25/4 49/21/4 53/26/4 +f 56/27/5 52/28/5 50/12/5 +f 84/29/6 86/30/6 85/3/6 +f 60/31/7 62/32/7 61/33/7 +f 82/34/8 84/29/8 83/35/8 +f 62/32/9 64/36/9 63/37/9 +f 80/38/10 82/34/10 81/39/10 +f 64/36/11 66/40/11 65/41/11 +f 78/42/11 80/38/11 79/43/11 +f 66/40/10 68/44/10 67/45/10 +f 86/46/12 88/47/12 87/48/12 +f 76/49/9 78/42/9 77/50/9 +f 68/44/8 70/51/8 69/52/8 +f 88/47/13 57/53/13 58/54/13 +f 57/53/7 76/49/7 75/55/7 +f 70/51/6 72/46/6 71/56/6 +f 72/57/5 68/58/5 60/59/5 +f 74/60/13 60/31/13 59/61/13 +f 72/62/12 74/60/12 73/63/12 +f 86/64/5 80/65/5 78/66/5 +f 91/14/4 92/13/4 90/12/4 +f 94/15/2 96/13/2 95/14/2 +f 99/13/3 100/17/3 98/16/3 +f 102/18/1 104/17/1 103/13/1 +f 2/30/1 4/1/1 1/3/1 +f 4/1/2 8/4/2 3/2/2 +f 8/4/3 6/6/3 7/5/3 +f 6/6/4 2/8/4 5/7/4 +f 2/8/5 6/6/5 4/11/5 +f 10/30/1 12/1/1 9/3/1 +f 12/1/2 16/4/2 11/2/2 +f 16/4/3 14/6/3 15/5/3 +f 14/6/4 10/8/4 13/7/4 +f 14/6/5 16/10/5 10/8/5 +f 18/30/1 20/1/1 17/3/1 +f 20/1/2 24/4/2 19/2/2 +f 24/4/3 22/6/3 23/5/3 +f 22/6/4 18/8/4 21/7/4 +f 18/8/5 22/6/5 20/11/5 +f 26/30/1 28/1/1 25/3/1 +f 28/1/2 32/4/2 27/2/2 +f 32/4/3 30/6/3 31/5/3 +f 30/6/4 26/8/4 29/7/4 +f 30/6/5 32/10/5 26/8/5 +f 33/24/2 34/12/2 35/14/2 +f 37/67/4 39/14/4 38/15/4 +f 41/12/1 42/16/1 43/13/1 +f 45/15/3 47/13/3 46/18/3 +f 50/25/1 52/19/1 49/21/1 +f 52/19/2 56/22/2 51/20/2 +f 56/22/3 54/12/3 55/23/3 +f 54/68/4 50/25/4 53/26/4 +f 54/22/5 56/27/5 50/12/5 +f 83/35/6 84/29/6 85/3/6 +f 59/61/7 60/31/7 61/33/7 +f 81/39/8 82/34/8 83/35/8 +f 61/33/9 62/32/9 63/37/9 +f 79/43/10 80/38/10 81/39/10 +f 63/37/11 64/36/11 65/41/11 +f 77/50/11 78/42/11 79/43/11 +f 65/41/10 66/40/10 67/45/10 +f 85/56/12 86/46/12 87/48/12 +f 75/55/9 76/49/9 77/50/9 +f 67/45/8 68/44/8 69/52/8 +f 87/48/13 88/47/13 58/54/13 +f 58/54/7 57/53/7 75/55/7 +f 69/52/6 70/51/6 71/56/6 +f 64/69/5 62/70/5 60/59/5 +f 60/59/5 74/71/5 72/57/5 +f 72/57/5 70/72/5 68/58/5 +f 68/58/5 66/73/5 64/69/5 +f 64/69/5 60/59/5 68/58/5 +f 73/63/13 74/60/13 59/61/13 +f 71/74/12 72/62/12 73/63/12 +f 78/66/5 76/75/5 57/14/5 +f 57/14/5 88/76/5 86/64/5 +f 86/64/5 84/77/5 82/78/5 +f 82/78/5 80/65/5 86/64/5 +f 78/66/5 57/14/5 86/64/5 +f 89/24/4 91/14/4 90/12/4 +f 93/67/2 94/15/2 95/14/2 +f 97/12/3 99/13/3 98/16/3 +f 101/15/1 102/18/1 103/13/1 diff --git a/assets/hbm/models/launch_table/launch_table_small_scaffold_connector.obj b/assets/hbm/models/launch_table/launch_table_small_scaffold_connector.obj new file mode 100644 index 000000000..32f387829 --- /dev/null +++ b/assets/hbm/models/launch_table/launch_table_small_scaffold_connector.obj @@ -0,0 +1,487 @@ +# Blender v2.76 (sub 0) OBJ File: 'launch_table_small_scaffold_connector.blend' +# www.blender.org +o Cube.007_Cube.008 +v 0.500000 0.000000 0.375000 +v 0.500000 1.000000 0.375000 +v 0.500000 0.000000 0.500000 +v 0.500000 1.000000 0.500000 +v 0.375000 0.000000 0.375000 +v 0.375000 1.000000 0.375000 +v 0.375000 0.000000 0.500000 +v 0.375000 1.000000 0.500000 +v 0.500000 0.000000 -0.500000 +v 0.500000 1.000000 -0.500000 +v 0.500000 0.000000 -0.375000 +v 0.500000 1.000000 -0.375000 +v 0.375000 0.000000 -0.500000 +v 0.375000 1.000000 -0.500000 +v 0.375000 0.000000 -0.375000 +v 0.375000 1.000000 -0.375000 +v -0.375000 0.000000 -0.500000 +v -0.375000 1.000000 -0.500000 +v -0.375000 0.000000 -0.375000 +v -0.375000 1.000000 -0.375000 +v -0.500000 0.000000 -0.500000 +v -0.500000 1.000000 -0.500000 +v -0.500000 0.000000 -0.375000 +v -0.500000 1.000000 -0.375000 +v -0.375000 0.000000 0.375000 +v -0.375000 1.000000 0.375000 +v -0.375000 0.000000 0.500000 +v -0.375000 1.000000 0.500000 +v -0.500000 0.000000 0.375000 +v -0.500000 1.000000 0.375000 +v -0.500000 0.000000 0.500000 +v -0.500000 1.000000 0.500000 +v 0.375000 0.000000 0.437500 +v 0.375000 1.000000 0.437500 +v -0.375000 0.000000 0.437500 +v -0.375000 1.000000 0.437500 +v 0.375000 0.000000 -0.437500 +v 0.375000 1.000000 -0.437500 +v -0.375000 0.000000 -0.437500 +v -0.375000 1.000000 -0.437500 +v 0.437500 0.000000 -0.375000 +v 0.437500 1.000000 -0.375000 +v 0.437500 0.000000 0.375000 +v 0.437500 1.000000 0.375000 +v -0.437500 0.000000 -0.375000 +v -0.437500 1.000000 -0.375000 +v -0.437500 0.000000 0.375000 +v -0.437500 1.000000 0.375000 +v 0.406250 0.000000 -0.156250 +v 0.406250 0.656250 0.156250 +v 0.406250 0.000000 0.156250 +v 0.406250 0.343750 0.156250 +v 0.093750 0.000000 -0.156250 +v 0.406250 0.656250 -0.156250 +v 0.093750 0.000000 0.156250 +v 0.406250 0.343750 -0.156250 +v -0.250000 0.000000 0.375000 +v -0.161612 0.338388 -0.375000 +v -0.161612 0.125000 -0.161612 +v -0.250000 0.000000 -0.125000 +v -0.125000 0.125000 -0.250000 +v -0.338388 0.000000 -0.161612 +v -0.161612 0.125000 -0.338388 +v -0.375000 0.000000 -0.250000 +v -0.250000 0.125000 -0.375000 +v -0.338388 0.000000 -0.338388 +v -0.338388 0.125000 -0.338388 +v -0.250000 0.000000 -0.375000 +v -0.375000 0.125000 -0.250000 +v -0.161612 0.000000 -0.338388 +v -0.250000 0.125000 -0.125000 +v -0.125000 0.000000 -0.250000 +v -0.338388 0.125000 -0.161612 +v -0.161612 0.000000 -0.161612 +v -0.125000 0.250000 -0.375000 +v -0.338388 0.000000 0.338388 +v -0.161612 0.161612 -0.375000 +v -0.375000 0.000000 0.250000 +v -0.338388 0.000000 0.161612 +v -0.338388 0.161612 -0.375000 +v -0.250000 0.000000 0.125000 +v -0.375000 0.250000 -0.375000 +v -0.161612 0.000000 0.161612 +v -0.250000 0.375000 -0.375000 +v -0.125000 0.000000 0.250000 +v -0.338388 0.338388 -0.375000 +v -0.161612 0.000000 0.338388 +v -0.250000 0.875000 -2.500000 +v -0.250000 0.375000 -2.500000 +v -0.338388 0.338388 -2.500000 +v -0.375000 0.250000 -2.500000 +v -0.338388 0.161612 -2.500000 +v -0.250000 0.125000 -2.500000 +v -0.161611 0.161612 -2.500000 +v -0.125000 0.250000 -2.500000 +v -0.161611 0.338388 -2.500000 +v -0.338388 0.838388 -2.500000 +v -0.375000 0.750000 -2.500000 +v -0.338388 0.661612 -2.500000 +v -0.250000 0.625000 -2.500000 +v -0.161611 0.661612 -2.500000 +v -0.125000 0.750000 -2.500000 +v -0.161611 0.838388 -2.500000 +v -0.161612 0.661612 0.125000 +v -0.250000 0.625000 0.125000 +v -0.375000 0.750000 0.125000 +v -0.338388 0.838388 0.125000 +v -0.338388 0.661612 0.125000 +v -0.250000 0.875000 0.125000 +v -0.125000 0.750000 0.125000 +v -0.161612 0.838388 0.125000 +v -0.161612 0.625000 0.161612 +v -0.375000 0.625000 0.250000 +v -0.338388 0.625000 0.338388 +v -0.338388 0.625000 0.161612 +v -0.250000 0.625000 0.375000 +v -0.125000 0.625000 0.250000 +v -0.161612 0.625000 0.338388 +v 0.093750 0.343750 -0.156250 +v 0.093750 0.656250 -0.156250 +v 0.093750 0.343750 0.156250 +v 0.093750 0.656250 0.156250 +v 0.406250 0.343750 -2.500000 +v 0.406250 0.656250 -2.500000 +v 0.093750 0.656250 -2.500000 +v 0.093750 0.343750 -2.500000 +v 0.375000 0.000000 0.437500 +v 0.375000 1.000000 0.437500 +v -0.375000 0.000000 0.437500 +v -0.375000 1.000000 0.437500 +v 0.375000 0.000000 -0.437500 +v 0.375000 1.000000 -0.437500 +v -0.375000 0.000000 -0.437500 +v -0.375000 1.000000 -0.437500 +v 0.437500 0.000000 -0.375000 +v 0.437500 1.000000 -0.375000 +v 0.437500 0.000000 0.375000 +v 0.437500 1.000000 0.375000 +v -0.437500 0.000000 -0.375000 +v -0.437500 1.000000 -0.375000 +v -0.437500 0.000000 0.375000 +v -0.437500 1.000000 0.375000 +vt 0.069767 0.186047 +vt 0.069767 -0.000000 +vt 0.093023 0.000000 +vt 0.046512 0.186047 +vt 0.046512 -0.000000 +vt 0.023256 0.186047 +vt 0.023256 0.000000 +vt 0.000000 0.186047 +vt -0.000000 -0.000000 +vt 0.023256 0.209302 +vt -0.000000 0.209302 +vt 0.372093 0.186047 +vt 0.232558 0.186047 +vt 0.232558 -0.000000 +vt 0.093023 0.186047 +vt 0.372093 0.372093 +vt 0.232558 0.372093 +vt 0.093023 0.372093 +vt 0.558140 0.651163 +vt 1.000000 0.651163 +vt 1.000000 0.709302 +vt 0.546512 0.197674 +vt 0.546512 0.255814 +vt 0.488372 0.255814 +vt 0.604651 0.197674 +vt 0.604651 0.255814 +vt 0.430233 0.197674 +vt 0.372093 0.197674 +vt 0.372093 0.139535 +vt 0.430233 0.255814 +vt 0.488372 0.197674 +vt 0.511628 0.116279 +vt 0.511628 0.139535 +vt 0.476744 0.139535 +vt 0.906977 0.325581 +vt 0.511628 0.325581 +vt 0.511628 0.290698 +vt 0.406977 0.116279 +vt 0.406977 0.139535 +vt 0.906977 0.360465 +vt 0.511628 0.360465 +vt 0.546512 0.116279 +vt 0.546512 0.139535 +vt 0.906977 0.500000 +vt 0.511628 0.500000 +vt 0.511628 0.465116 +vt 0.441860 0.116279 +vt 0.441860 0.139535 +vt 0.906977 0.430233 +vt 0.511628 0.430233 +vt 0.511628 0.395349 +vt 0.581395 0.116279 +vt 0.581395 0.139535 +vt 0.906977 0.395349 +vt 0.651163 0.116279 +vt 0.651163 0.139535 +vt 0.616279 0.139535 +vt 0.476744 -0.000000 +vt 0.511628 -0.000000 +vt 0.279070 0.720930 +vt 0.244186 0.732558 +vt 0.244186 0.709302 +vt 0.906977 0.465116 +vt 0.616279 0.116279 +vt 0.476744 0.116279 +vt 0.209302 0.686047 +vt 0.511628 0.581395 +vt 0.511628 0.616279 +vt 0.000000 0.616279 +vt 0.511628 0.546512 +vt 0.000000 0.546512 +vt 0.000000 0.511628 +vt 0.511628 0.511628 +vt 0.000000 0.476744 +vt 0.511628 0.441860 +vt 0.000000 0.441860 +vt 0.000000 0.406977 +vt 0.000000 0.581395 +vt 0.511628 0.406977 +vt 0.000000 0.372093 +vt 0.511628 0.651163 +vt 0.000000 0.651163 +vt 0.511628 0.476744 +vt 0.906977 0.290698 +vt 0.511628 0.255814 +vt 0.406977 -0.000000 +vt 0.372093 0.116279 +vt 0.616279 -0.000000 +vt 0.651163 -0.000000 +vt 0.441860 -0.000000 +vt 0.581395 -0.000000 +vt 0.906977 0.534884 +vt 0.511628 0.534884 +vt 0.174419 0.662791 +vt 0.209302 0.744186 +vt 0.174419 0.779070 +vt 0.139535 0.779070 +vt 0.139535 0.651163 +vt 0.104651 0.779070 +vt 0.000000 0.720930 +vt 0.034884 0.709302 +vt 0.034884 0.732558 +vt 0.069767 0.686047 +vt 0.069767 0.744186 +vt 0.104651 0.662791 +vt 0.558140 0.720930 +vt 0.523256 0.732558 +vt 0.523256 0.709302 +vt 0.313953 0.709302 +vt 0.313953 0.732558 +vt 0.348837 0.686047 +vt 0.348837 0.744186 +vt 0.383721 0.662791 +vt 0.488372 0.686047 +vt 0.453488 0.779070 +vt 0.453488 0.662791 +vt 0.418605 0.651163 +vt 0.418605 0.779070 +vt 0.488372 0.139535 +vt 0.430233 0.139535 +vt 0.662791 0.197674 +vt 0.558140 0.534884 +vt 1.000000 0.534884 +vt 1.000000 0.593023 +vt 0.558140 0.593023 +vt 0.558140 0.709302 +vt 1.000000 0.767442 +vt 0.372093 0.000000 +vt 0.546512 -0.000000 +vt 0.604651 0.139535 +vt 0.372093 0.255814 +vt 0.511628 0.372093 +vt 0.906977 0.255814 +vt 0.383721 0.779070 +vt 0.488372 0.744186 +vt 0.662791 0.255814 +vt 0.558140 0.767442 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.382700 0.000000 -0.923900 +vn 0.923900 -0.382700 0.000000 +vn 0.382700 0.000000 0.923900 +vn 0.923900 0.382700 0.000000 +vn -0.382700 0.000000 -0.923900 +vn -0.923900 -0.382700 -0.000000 +vn 0.923900 0.000000 0.382700 +vn -0.382700 0.923900 -0.000000 +vn -0.923900 0.000000 -0.382700 +vn 0.382700 0.923900 0.000000 +vn -0.382700 0.000000 0.923900 +vn -0.281100 -0.678600 -0.678600 +vn -0.923900 0.382700 -0.000000 +vn -0.923900 0.000000 0.382700 +vn 0.923900 0.000000 -0.382700 +vn -0.862900 -0.357400 -0.357400 +vn 0.382700 -0.923900 0.000000 +vn -0.382700 -0.923900 -0.000000 +vn -0.862900 0.357400 0.357400 +vn -0.281100 0.678600 0.678600 +vn 0.281100 0.678600 0.678600 +vn 0.281100 -0.678600 -0.678600 +vn 0.862900 -0.357400 -0.357400 +vn 0.862900 0.357400 0.357400 +s off +f 4/1/1 3/2/1 1/3/1 +f 8/4/2 7/5/2 3/2/2 +f 6/6/3 5/7/3 7/5/3 +f 2/8/4 1/9/4 5/7/4 +f 6/6/5 8/10/5 4/11/5 +f 12/1/1 11/2/1 9/3/1 +f 16/4/2 15/5/2 11/2/2 +f 14/6/3 13/7/3 15/5/3 +f 10/8/4 9/9/4 13/7/4 +f 16/10/5 12/11/5 10/8/5 +f 20/1/1 19/2/1 17/3/1 +f 24/4/2 23/5/2 19/2/2 +f 22/6/3 21/7/3 23/5/3 +f 18/8/4 17/9/4 21/7/4 +f 22/6/5 24/10/5 20/11/5 +f 28/1/1 27/2/1 25/3/1 +f 32/4/2 31/5/2 27/2/2 +f 30/6/3 29/7/3 31/5/3 +f 26/8/4 25/9/4 29/7/4 +f 32/10/5 28/11/5 26/8/5 +f 34/12/2 36/13/2 35/14/2 +f 39/14/4 40/13/4 38/15/4 +f 42/16/1 44/17/1 43/13/1 +f 47/13/3 48/17/3 46/18/3 +f 119/19/6 126/20/6 123/21/6 +f 122/22/2 121/23/2 52/24/2 +f 50/25/1 52/26/1 56/23/1 +f 119/27/4 56/28/4 49/29/4 +f 120/30/3 119/27/3 121/31/3 +f 68/32/7 65/33/7 63/34/7 +f 95/35/8 75/36/8 77/37/8 +f 74/38/9 59/39/9 71/29/9 +f 96/40/10 58/41/10 75/36/10 +f 66/42/11 67/43/11 65/33/11 +f 92/44/12 80/45/12 82/46/12 +f 72/47/13 61/48/13 59/39/13 +f 90/49/14 86/50/14 84/51/14 +f 64/52/15 69/53/15 67/43/15 +f 89/54/16 84/51/16 58/41/16 +f 60/55/17 71/56/17 73/57/17 +f 83/58/7 81/59/7 105/32/7 +f 105/60/18 115/61/18 108/62/18 +f 91/63/19 82/46/19 86/50/19 +f 115/42/11 105/32/11 81/59/11 +f 56/25/1 52/22/1 51/43/1 +f 122/28/5 50/27/5 54/30/5 +f 62/64/20 73/57/20 69/53/20 +f 70/65/21 63/34/21 61/48/21 +f 106/66/22 108/62/22 115/61/22 +f 98/67/12 99/68/12 108/69/12 +f 97/70/14 107/71/14 109/72/14 +f 88/73/16 109/72/16 111/74/16 +f 102/75/8 110/76/8 104/77/8 +f 98/67/19 106/78/19 107/71/19 +f 101/79/23 104/77/23 105/80/23 +f 100/81/24 105/82/24 108/69/24 +f 103/83/10 111/74/10 110/76/10 +f 94/84/23 77/37/23 65/85/23 +f 87/86/9 118/38/9 116/87/9 +f 76/88/20 114/64/20 113/52/20 +f 83/58/21 112/65/21 117/47/21 +f 57/89/17 116/55/17 114/64/17 +f 85/90/13 117/47/13 118/38/13 +f 78/91/15 113/52/15 115/42/15 +f 93/92/24 65/93/24 80/45/24 +f 107/94/25 106/66/25 113/95/25 +f 107/94/26 114/96/26 116/97/26 +f 109/98/27 116/97/27 118/99/27 +f 105/100/28 104/101/28 112/102/28 +f 110/103/29 117/104/29 112/102/29 +f 111/105/30 118/99/30 117/104/30 +f 65/106/18 67/107/18 80/108/18 +f 65/60/28 77/109/28 63/110/28 +f 77/109/29 75/111/29 61/112/29 +f 61/112/30 75/111/30 58/113/30 +f 82/114/22 80/108/22 67/107/22 +f 73/115/25 86/116/25 82/114/25 +f 84/117/26 86/116/26 73/115/26 +f 58/113/27 84/117/27 71/118/27 +f 121/31/2 55/119/2 51/43/2 +f 121/31/3 119/27/3 53/120/3 +f 124/26/4 123/25/4 126/121/4 +f 54/122/5 124/123/5 125/124/5 +f 120/125/3 125/124/3 126/20/3 +f 56/126/1 123/21/1 124/127/1 +f 129/14/4 130/13/4 128/12/4 +f 132/15/2 134/13/2 133/14/2 +f 137/13/3 138/17/3 136/16/3 +f 140/18/1 142/17/1 141/13/1 +f 2/15/1 4/1/1 1/3/1 +f 4/1/2 8/4/2 3/2/2 +f 8/4/3 6/6/3 7/5/3 +f 6/6/4 2/8/4 5/7/4 +f 2/8/5 6/6/5 4/11/5 +f 10/15/1 12/1/1 9/3/1 +f 12/1/2 16/4/2 11/2/2 +f 16/4/3 14/6/3 15/5/3 +f 14/6/4 10/8/4 13/7/4 +f 14/6/5 16/10/5 10/8/5 +f 18/15/1 20/1/1 17/3/1 +f 20/1/2 24/4/2 19/2/2 +f 24/4/3 22/6/3 23/5/3 +f 22/6/4 18/8/4 21/7/4 +f 18/8/5 22/6/5 20/11/5 +f 26/15/1 28/1/1 25/3/1 +f 28/1/2 32/4/2 27/2/2 +f 32/4/3 30/6/3 31/5/3 +f 30/6/4 26/8/4 29/7/4 +f 30/6/5 32/10/5 26/8/5 +f 33/128/2 34/12/2 35/14/2 +f 37/3/4 39/14/4 38/15/4 +f 41/12/1 42/16/1 43/13/1 +f 45/15/3 47/13/3 46/18/3 +f 56/126/6 119/19/6 123/21/6 +f 50/31/2 122/22/2 52/24/2 +f 54/22/1 50/25/1 56/23/1 +f 53/120/4 119/27/4 49/29/4 +f 122/24/3 120/30/3 121/31/3 +f 70/65/7 68/32/7 63/34/7 +f 94/84/8 95/35/8 77/37/8 +f 60/87/9 74/38/9 71/29/9 +f 95/35/10 96/40/10 75/36/10 +f 68/32/11 66/42/11 65/33/11 +f 91/63/12 92/44/12 82/46/12 +f 74/38/13 72/47/13 59/39/13 +f 89/54/14 90/49/14 84/51/14 +f 66/42/15 64/52/15 67/43/15 +f 96/40/16 89/54/16 58/41/16 +f 62/64/17 60/55/17 73/57/17 +f 112/65/7 83/58/7 105/32/7 +f 90/49/19 91/63/19 86/50/19 +f 79/129/11 115/42/11 81/59/11 +f 49/130/1 56/25/1 51/43/1 +f 120/131/5 122/28/5 54/30/5 +f 64/52/20 62/64/20 69/53/20 +f 72/47/21 70/65/21 61/48/21 +f 113/95/22 106/66/22 115/61/22 +f 106/78/12 98/67/12 108/69/12 +f 88/73/14 97/70/14 109/72/14 +f 103/83/16 88/73/16 111/74/16 +f 101/79/8 102/75/8 104/77/8 +f 97/70/19 98/67/19 107/71/19 +f 100/132/23 101/79/23 105/80/23 +f 99/68/24 100/81/24 108/69/24 +f 102/75/10 103/83/10 110/76/10 +f 93/133/23 94/84/23 65/85/23 +f 57/128/9 87/86/9 116/87/9 +f 78/91/20 76/88/20 113/52/20 +f 85/90/21 83/58/21 117/47/21 +f 76/88/17 57/89/17 114/64/17 +f 87/86/13 85/90/13 118/38/13 +f 79/129/15 78/91/15 115/42/15 +f 92/44/24 93/92/24 80/45/24 +f 114/96/25 107/94/25 113/95/25 +f 109/98/26 107/94/26 116/97/26 +f 111/105/27 109/98/27 118/99/27 +f 104/101/29 110/103/29 112/102/29 +f 110/103/30 111/105/30 117/104/30 +f 63/110/29 77/109/29 61/112/29 +f 59/134/30 61/112/30 58/113/30 +f 69/135/22 82/114/22 67/107/22 +f 69/135/25 73/115/25 82/114/25 +f 71/118/26 84/117/26 73/115/26 +f 59/134/27 58/113/27 71/118/27 +f 52/22/2 121/31/2 51/43/2 +f 55/119/3 121/31/3 53/120/3 +f 125/136/4 124/26/4 126/121/4 +f 120/125/5 54/122/5 125/124/5 +f 119/19/3 120/125/3 126/20/3 +f 54/137/1 56/126/1 124/127/1 +f 127/128/4 129/14/4 128/12/4 +f 131/3/2 132/15/2 133/14/2 +f 135/12/3 137/13/3 136/16/3 +f 139/15/1 140/18/1 141/13/1 diff --git a/assets/hbm/models/launch_table/launch_table_small_scaffold_empty.obj b/assets/hbm/models/launch_table/launch_table_small_scaffold_empty.obj new file mode 100644 index 000000000..239c0b74f --- /dev/null +++ b/assets/hbm/models/launch_table/launch_table_small_scaffold_empty.obj @@ -0,0 +1,150 @@ +# Blender v2.76 (sub 0) OBJ File: 'launch_table_small_scaffold_empty.blend' +# www.blender.org +o Cube.008_Cube.009 +v -0.500000 0.000000 -0.375000 +v -0.500000 1.000000 -0.375000 +v -0.500000 0.000000 -0.500000 +v -0.500000 1.000000 -0.500000 +v -0.375000 0.000000 -0.375000 +v -0.375000 1.000000 -0.375000 +v -0.375000 0.000000 -0.500000 +v -0.375000 1.000000 -0.500000 +v -0.500000 0.000000 0.500000 +v -0.500000 1.000000 0.500000 +v -0.500000 0.000000 0.375000 +v -0.500000 1.000000 0.375000 +v -0.375000 0.000000 0.500000 +v -0.375000 1.000000 0.500000 +v -0.375000 0.000000 0.375000 +v -0.375000 1.000000 0.375000 +v 0.375000 0.000000 0.500000 +v 0.375000 1.000000 0.500000 +v 0.375000 0.000000 0.375000 +v 0.375000 1.000000 0.375000 +v 0.500000 0.000000 0.500000 +v 0.500000 1.000000 0.500000 +v 0.500000 0.000000 0.375000 +v 0.500000 1.000000 0.375000 +v 0.375000 0.000000 -0.375000 +v 0.375000 1.000000 -0.375000 +v 0.375000 0.000000 -0.500000 +v 0.375000 1.000000 -0.500000 +v 0.500000 0.000000 -0.375000 +v 0.500000 1.000000 -0.375000 +v 0.500000 0.000000 -0.500000 +v 0.500000 1.000000 -0.500000 +v -0.375000 0.000000 -0.437500 +v -0.375000 1.000000 -0.437500 +v 0.375000 0.000000 -0.437500 +v 0.375000 1.000000 -0.437500 +v -0.375000 0.000000 0.437500 +v -0.375000 1.000000 0.437500 +v 0.375000 0.000000 0.437500 +v 0.375000 1.000000 0.437500 +v -0.437500 0.000000 0.375000 +v -0.437500 1.000000 0.375000 +v -0.437500 0.000000 -0.375000 +v -0.437500 1.000000 -0.375000 +v 0.437500 0.000000 0.375000 +v 0.437500 1.000000 0.375000 +v 0.437500 0.000000 -0.375000 +v 0.437500 1.000000 -0.375000 +v -0.375000 0.000000 -0.437500 +v -0.375000 1.000000 -0.437500 +v 0.375000 0.000000 -0.437500 +v 0.375000 1.000000 -0.437500 +v -0.375000 0.000000 0.437500 +v -0.375000 1.000000 0.437500 +v 0.375000 0.000000 0.437500 +v 0.375000 1.000000 0.437500 +v -0.437500 0.000000 0.375000 +v -0.437500 1.000000 0.375000 +v -0.437500 0.000000 -0.375000 +v -0.437500 1.000000 -0.375000 +v 0.437500 0.000000 0.375000 +v 0.437500 1.000000 0.375000 +v 0.437500 0.000000 -0.375000 +v 0.437500 1.000000 -0.375000 +vt 0.035714 0.285714 +vt 0.035714 -0.000000 +vt 0.071429 0.000000 +vt 0.000000 0.285714 +vt -0.000000 0.000000 +vt 0.107143 0.285714 +vt 0.107143 -0.000000 +vt 0.142857 -0.000000 +vt 0.071429 0.285714 +vt 0.035714 0.321429 +vt 0.214286 0.714286 +vt 0.000000 0.714286 +vt -0.000000 0.428571 +vt 0.428571 0.428571 +vt 0.428571 0.714286 +vt 0.214286 1.000000 +vt 0.000000 1.000000 +vt 0.428571 1.000000 +vt 0.142857 0.285714 +vt 0.000000 0.321429 +vt 0.214286 0.428571 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +s off +f 4/1/1 3/2/1 1/3/1 +f 8/4/2 7/5/2 3/2/2 +f 6/6/3 5/7/3 7/8/3 +f 2/9/4 1/3/4 5/7/4 +f 8/4/5 4/1/5 2/10/5 +f 12/1/1 11/2/1 9/3/1 +f 16/4/2 15/5/2 11/2/2 +f 14/6/3 13/7/3 15/8/3 +f 10/9/4 9/3/4 13/7/4 +f 16/4/5 12/1/5 10/10/5 +f 20/1/1 19/2/1 17/3/1 +f 24/4/2 23/5/2 19/2/2 +f 22/6/3 21/7/3 23/8/3 +f 18/9/4 17/3/4 21/7/4 +f 24/4/5 20/1/5 18/10/5 +f 28/1/1 27/2/1 25/3/1 +f 32/4/2 31/5/2 27/2/2 +f 30/6/3 29/7/3 31/8/3 +f 26/9/4 25/3/4 29/7/4 +f 32/4/5 28/1/5 26/10/5 +f 34/11/2 36/12/2 35/13/2 +f 39/14/4 40/15/4 38/11/4 +f 42/16/1 44/17/1 43/12/1 +f 47/15/3 48/18/3 46/16/3 +f 51/13/4 52/12/4 50/11/4 +f 54/11/2 56/15/2 55/14/2 +f 59/12/3 60/17/3 58/16/3 +f 62/16/1 64/18/1 63/15/1 +f 2/9/1 4/1/1 1/3/1 +f 4/1/2 8/4/2 3/2/2 +f 8/19/3 6/6/3 7/8/3 +f 6/6/4 2/9/4 5/7/4 +f 6/20/5 8/4/5 2/10/5 +f 10/9/1 12/1/1 9/3/1 +f 12/1/2 16/4/2 11/2/2 +f 16/19/3 14/6/3 15/8/3 +f 14/6/4 10/9/4 13/7/4 +f 14/20/5 16/4/5 10/10/5 +f 18/9/1 20/1/1 17/3/1 +f 20/1/2 24/4/2 19/2/2 +f 24/19/3 22/6/3 23/8/3 +f 22/6/4 18/9/4 21/7/4 +f 22/20/5 24/4/5 18/10/5 +f 26/9/1 28/1/1 25/3/1 +f 28/1/2 32/4/2 27/2/2 +f 32/19/3 30/6/3 31/8/3 +f 30/6/4 26/9/4 29/7/4 +f 30/20/5 32/4/5 26/10/5 +f 33/21/2 34/11/2 35/13/2 +f 37/21/4 39/14/4 38/11/4 +f 41/11/1 42/16/1 43/12/1 +f 45/11/3 47/15/3 46/16/3 +f 49/21/4 51/13/4 50/11/4 +f 53/21/2 54/11/2 55/14/2 +f 57/11/3 59/12/3 58/16/3 +f 61/11/1 62/16/1 63/15/1 diff --git a/assets/hbm/models/missile_parts/mp_w_10_taint.obj b/assets/hbm/models/missile_parts/mp_w_10_taint.obj new file mode 100644 index 000000000..b4a327ef6 --- /dev/null +++ b/assets/hbm/models/missile_parts/mp_w_10_taint.obj @@ -0,0 +1,414 @@ +# Blender v2.76 (sub 0) OBJ File: 'mp_w_10_taint.blend' +# www.blender.org +o Cylinder +v 0.000000 0.000000 -0.500000 +v 0.000000 0.750000 -0.500000 +v 0.250000 0.000000 -0.433013 +v 0.250000 0.750000 -0.433013 +v 0.433013 0.000000 -0.250000 +v 0.433013 0.750000 -0.250000 +v 0.500000 0.000000 0.000000 +v 0.500000 0.750000 0.000000 +v 0.433013 0.000000 0.250000 +v 0.433013 0.750000 0.250000 +v 0.250000 0.000000 0.433013 +v 0.250000 0.750000 0.433013 +v 0.000000 0.000000 0.500000 +v 0.000000 0.750000 0.500000 +v -0.250000 0.000000 0.433013 +v -0.250000 0.750000 0.433013 +v -0.433013 0.000000 0.250000 +v -0.433013 0.750000 0.250000 +v -0.500000 0.000000 0.000000 +v -0.500000 0.750000 0.000000 +v -0.433013 0.000000 -0.250000 +v -0.433013 0.750000 -0.250000 +v -0.250000 0.000000 -0.433013 +v -0.250000 0.750000 -0.433013 +v 0.223421 1.250000 -0.386976 +v 0.000000 1.250000 -0.446841 +v 0.386976 1.250000 -0.223421 +v 0.446841 1.250000 0.000000 +v 0.386976 1.250000 0.223421 +v 0.223421 1.250000 0.386976 +v 0.000000 1.250000 0.446841 +v -0.223421 1.250000 0.386976 +v -0.386976 1.250000 0.223421 +v -0.446841 1.250000 0.000000 +v -0.386976 1.250000 -0.223420 +v -0.223421 1.250000 -0.386976 +v 0.171690 1.750000 -0.297376 +v 0.000000 1.750000 -0.343380 +v 0.297376 1.750000 -0.171690 +v 0.343380 1.750000 0.000000 +v 0.297376 1.750000 0.171690 +v 0.171690 1.750000 0.297376 +v 0.000000 1.750000 0.343380 +v -0.171690 1.750000 0.297376 +v -0.297376 1.750000 0.171690 +v -0.343380 1.750000 0.000000 +v -0.297376 1.750000 -0.171690 +v -0.171690 1.750000 -0.297376 +v 0.114020 2.000000 -0.197488 +v 0.000000 2.000000 -0.228040 +v 0.197488 2.000000 -0.114020 +v 0.228040 2.000000 0.000000 +v 0.197488 2.000000 0.114020 +v 0.114020 2.000000 0.197488 +v 0.000000 2.000000 0.228040 +v -0.114020 2.000000 0.197488 +v -0.197488 2.000000 0.114020 +v -0.228040 2.000000 0.000000 +v -0.197488 2.000000 -0.114020 +v -0.114020 2.000000 -0.197488 +v 0.029487 2.250000 -0.051072 +v 0.000000 2.250000 -0.058973 +v 0.051073 2.250000 -0.029487 +v 0.058974 2.250000 0.000000 +v 0.051073 2.250000 0.029487 +v 0.029487 2.250000 0.051073 +v 0.000000 2.250000 0.058973 +v -0.029487 2.250000 0.051073 +v -0.051072 2.250000 0.029487 +v -0.058973 2.250000 0.000000 +v -0.051072 2.250000 -0.029487 +v -0.029487 2.250000 -0.051072 +vt 0.642857 0.214286 +vt 0.571429 0.214286 +vt 0.571429 0.000000 +vt 0.500000 0.214286 +vt 0.500000 0.000000 +vt 0.428571 0.214286 +vt 0.428571 0.000000 +vt 0.357143 0.214286 +vt 0.357143 0.000000 +vt 0.285714 0.214286 +vt 0.285714 0.000000 +vt 0.214286 0.214286 +vt 0.214286 0.000000 +vt 0.142857 0.214286 +vt 0.142857 0.000000 +vt 0.071429 0.214286 +vt 0.071429 0.000000 +vt -0.000000 0.214286 +vt -0.000000 0.000000 +vt 0.857143 0.214286 +vt 0.785714 0.214286 +vt 0.785714 0.000000 +vt 0.071429 0.357143 +vt -0.000000 0.357143 +vt 0.714286 0.214286 +vt 0.642857 0.000000 +vt 0.714286 0.000000 +vt 0.285714 0.839286 +vt 0.000000 0.839286 +vt 0.071429 0.714286 +vt 0.571429 0.357143 +vt 0.642857 0.357143 +vt 0.625000 0.517857 +vt 0.142857 0.357143 +vt 0.214286 0.357143 +vt 0.285714 0.357143 +vt 0.357143 0.357143 +vt 0.428571 0.357143 +vt 0.714286 0.357143 +vt 0.500000 0.357143 +vt 0.785714 0.357143 +vt 0.857143 0.357143 +vt 0.714286 0.517857 +vt 0.767857 0.517857 +vt 0.767857 0.589286 +vt 0.125000 0.517857 +vt 0.339286 0.517857 +vt 0.285714 0.517857 +vt 0.696429 0.517857 +vt 0.642857 0.517857 +vt 0.553571 0.517857 +vt 0.053571 0.517857 +vt -0.000000 0.517857 +vt 0.267857 0.517857 +vt 0.482143 0.517857 +vt 0.839286 0.517857 +vt 0.196429 0.517857 +vt 0.410714 0.517857 +vt 0.410714 0.589286 +vt 0.392857 0.696429 +vt 0.375000 0.696429 +vt 0.571429 0.517857 +vt 0.625000 0.589286 +vt 0.071429 0.517857 +vt 0.125000 0.589286 +vt 0.339286 0.589286 +vt 0.303571 0.589286 +vt 0.696429 0.589286 +vt 0.660714 0.589286 +vt 0.553571 0.589286 +vt 0.517857 0.589286 +vt 0.053571 0.589286 +vt 0.017857 0.589286 +vt 0.267857 0.589286 +vt 0.232143 0.589286 +vt 0.428571 0.517857 +vt 0.482143 0.589286 +vt 0.839286 0.589286 +vt 0.803571 0.589286 +vt 0.196429 0.589286 +vt 0.160714 0.589286 +vt 0.357143 0.517857 +vt 0.312022 0.699693 +vt 0.295528 0.699693 +vt 0.295528 0.728262 +vt 0.732143 0.589286 +vt 0.750000 0.696429 +vt 0.589286 0.589286 +vt 0.607143 0.696429 +vt 0.107143 0.696429 +vt 0.089286 0.696429 +vt 0.321429 0.696429 +vt 0.303571 0.696429 +vt 0.678571 0.696429 +vt 0.535714 0.696429 +vt 0.517857 0.696429 +vt 0.035714 0.696429 +vt 0.017857 0.696429 +vt 0.250000 0.696429 +vt 0.232143 0.696429 +vt 0.446429 0.589286 +vt 0.464286 0.696429 +vt 0.821429 0.696429 +vt 0.803571 0.696429 +vt 0.178571 0.696429 +vt 0.160714 0.696429 +vt 0.857143 0.000000 +vt 0.142857 0.696429 +vt 0.214286 0.714286 +vt 0.267857 0.767857 +vt 0.267857 0.910714 +vt 0.214286 0.964286 +vt 0.142857 0.982143 +vt 0.071429 0.964286 +vt 0.017857 0.910714 +vt 0.017857 0.767857 +vt 0.500000 0.517857 +vt 0.214286 0.517857 +vt 0.785714 0.517857 +vt 0.142857 0.517857 +vt 0.375000 0.589286 +vt 0.089286 0.589286 +vt 0.303775 0.730472 +vt 0.312022 0.728262 +vt 0.318059 0.722225 +vt 0.320269 0.713978 +vt 0.318059 0.705731 +vt 0.303775 0.697484 +vt 0.289490 0.705731 +vt 0.287280 0.713978 +vt 0.289490 0.722225 +vt 0.732143 0.696429 +vt 0.589286 0.696429 +vt 0.660714 0.696429 +vt 0.446429 0.696429 +vn 0.258800 0.000000 -0.965900 +vn 0.707100 0.000000 -0.707100 +vn 0.965900 0.000000 -0.258800 +vn 0.965900 0.000000 0.258800 +vn 0.707100 0.000000 0.707100 +vn 0.258800 0.000000 0.965900 +vn -0.258800 0.000000 0.965900 +vn -0.707100 0.000000 0.707100 +vn -0.965900 0.000000 0.258800 +vn -0.965900 0.000000 -0.258800 +vn -0.960900 0.102200 0.257500 +vn -0.258800 0.000000 -0.965900 +vn -0.707100 0.000000 -0.707100 +vn 0.000000 -1.000000 0.000000 +vn 0.253800 0.196000 -0.947200 +vn -0.703400 0.102200 0.703400 +vn -0.257500 0.102200 0.960900 +vn 0.257500 0.102200 0.960900 +vn 0.703400 0.102200 0.703400 +vn 0.960900 0.102200 0.257500 +vn -0.257500 0.102200 -0.960900 +vn 0.257500 0.102200 -0.960900 +vn 0.960900 0.102200 -0.257500 +vn -0.703400 0.102200 -0.703400 +vn 0.703400 0.102200 -0.703400 +vn -0.960900 0.102200 -0.257500 +vn -0.645900 0.407100 -0.645900 +vn -0.693400 0.196000 0.693400 +vn 0.693400 0.196000 0.693400 +vn -0.253800 0.196000 -0.947200 +vn 0.693400 0.196000 -0.693400 +vn -0.947200 0.196000 0.253800 +vn 0.253800 0.196000 0.947200 +vn 0.947200 0.196000 -0.253800 +vn -0.947200 0.196000 -0.253800 +vn -0.253800 0.196000 0.947200 +vn 0.947200 0.196000 0.253800 +vn -0.693400 0.196000 -0.693400 +vn 0.808700 0.546900 0.216700 +vn 0.236400 0.407100 -0.882300 +vn -0.645900 0.407100 0.645900 +vn 0.645900 0.407100 0.645900 +vn -0.236400 0.407100 -0.882300 +vn 0.645900 0.407100 -0.645900 +vn -0.882300 0.407100 0.236400 +vn 0.236400 0.407000 0.882300 +vn 0.882300 0.407100 -0.236400 +vn -0.882300 0.407100 -0.236400 +vn -0.236400 0.407100 0.882300 +vn 0.882300 0.407100 0.236400 +vn 0.000000 1.000000 0.000000 +vn -0.592000 0.546900 -0.592000 +vn 0.216700 0.546900 -0.808700 +vn -0.592000 0.546900 0.592000 +vn 0.592000 0.546900 0.592000 +vn -0.216700 0.546900 -0.808700 +vn 0.592000 0.546900 -0.592000 +vn -0.808700 0.546900 0.216700 +vn 0.216700 0.546900 0.808700 +vn 0.808700 0.546900 -0.216700 +vn -0.808700 0.546900 -0.216700 +vn -0.216700 0.546900 0.808700 +vn 0.236400 0.407100 0.882300 +s off +f 2/1/1 4/2/1 3/3/1 +f 4/2/2 6/4/2 5/5/2 +f 6/4/3 8/6/3 7/7/3 +f 8/6/4 10/8/4 9/9/4 +f 10/8/5 12/10/5 11/11/5 +f 12/10/6 14/12/6 13/13/6 +f 14/12/7 16/14/7 15/15/7 +f 16/14/8 18/16/8 17/17/8 +f 18/16/9 20/18/9 19/19/9 +f 20/20/10 22/21/10 21/22/10 +f 18/16/11 33/23/11 34/24/11 +f 24/25/12 2/1/12 1/26/12 +f 22/21/13 24/25/13 23/27/13 +f 7/28/14 19/29/14 23/30/14 +f 25/31/15 26/32/15 38/33/15 +f 16/14/16 32/34/16 33/23/16 +f 14/12/17 31/35/17 32/34/17 +f 12/10/18 30/36/18 31/35/18 +f 10/8/19 29/37/19 30/36/19 +f 8/6/20 28/38/20 29/37/20 +f 24/25/21 36/39/21 26/32/21 +f 4/2/22 2/1/22 26/32/22 +f 8/6/23 6/4/23 27/40/23 +f 22/21/24 35/41/24 36/39/24 +f 4/2/25 25/31/25 27/40/25 +f 20/20/26 34/42/26 35/41/26 +f 48/43/27 47/44/27 59/45/27 +f 33/23/28 32/34/28 44/46/28 +f 29/37/29 41/47/29 42/48/29 +f 36/39/30 48/49/30 38/50/30 +f 27/40/31 25/31/31 37/51/31 +f 33/23/32 45/52/32 46/53/32 +f 31/35/33 30/36/33 42/54/33 +f 28/38/34 27/40/34 39/55/34 +f 35/41/35 34/42/35 46/56/35 +f 32/34/36 31/35/36 43/57/36 +f 29/37/37 28/38/37 40/58/37 +f 35/41/38 47/44/38 48/43/38 +f 52/59/39 64/60/39 65/61/39 +f 37/62/40 38/33/40 50/63/40 +f 45/64/41 44/46/41 56/65/41 +f 41/47/42 53/66/42 54/67/42 +f 48/49/43 60/68/43 50/69/43 +f 37/51/44 49/70/44 51/71/44 +f 45/52/45 57/72/45 58/73/45 +f 42/54/46 54/74/46 55/75/46 +f 40/76/47 39/55/47 51/77/47 +f 46/56/48 58/78/48 59/79/48 +f 43/57/49 55/80/49 56/81/49 +f 41/82/50 40/58/50 52/59/50 +f 69/83/51 67/84/51 63/85/51 +f 60/86/52 59/45/52 71/87/52 +f 49/88/53 50/63/53 62/89/53 +f 56/65/54 68/90/54 69/91/54 +f 53/66/55 65/92/55 66/93/55 +f 50/69/56 60/68/56 72/94/56 +f 49/70/57 61/95/57 63/96/57 +f 57/72/58 69/97/58 70/98/58 +f 54/74/59 66/99/59 67/100/59 +f 52/101/60 51/77/60 63/102/60 +f 58/78/61 70/103/61 71/104/61 +f 55/80/62 67/105/62 68/106/62 +f 1/26/1 2/1/1 3/3/1 +f 3/3/2 4/2/2 5/5/2 +f 5/5/3 6/4/3 7/7/3 +f 7/7/4 8/6/4 9/9/4 +f 9/9/5 10/8/5 11/11/5 +f 11/11/6 12/10/6 13/13/6 +f 13/13/7 14/12/7 15/15/7 +f 15/15/8 16/14/8 17/17/8 +f 17/17/9 18/16/9 19/19/9 +f 19/107/10 20/20/10 21/22/10 +f 20/18/11 18/16/11 34/24/11 +f 23/27/12 24/25/12 1/26/12 +f 21/22/13 22/21/13 23/27/13 +f 23/30/14 1/108/14 3/109/14 +f 3/109/14 5/110/14 7/28/14 +f 7/28/14 9/111/14 11/112/14 +f 11/112/14 13/113/14 15/114/14 +f 15/114/14 17/115/14 19/29/14 +f 19/29/14 21/116/14 23/30/14 +f 23/30/14 3/109/14 7/28/14 +f 7/28/14 11/112/14 15/114/14 +f 15/114/14 19/29/14 7/28/14 +f 37/62/15 25/31/15 38/33/15 +f 18/16/16 16/14/16 33/23/16 +f 16/14/17 14/12/17 32/34/17 +f 14/12/18 12/10/18 31/35/18 +f 12/10/19 10/8/19 30/36/19 +f 10/8/20 8/6/20 29/37/20 +f 2/1/21 24/25/21 26/32/21 +f 25/31/22 4/2/22 26/32/22 +f 28/38/23 8/6/23 27/40/23 +f 24/25/24 22/21/24 36/39/24 +f 6/4/25 4/2/25 27/40/25 +f 22/21/26 20/20/26 35/41/26 +f 60/86/27 48/43/27 59/45/27 +f 45/64/28 33/23/28 44/46/28 +f 30/36/29 29/37/29 42/48/29 +f 26/32/30 36/39/30 38/50/30 +f 39/117/31 27/40/31 37/51/31 +f 34/24/32 33/23/32 46/53/32 +f 43/118/33 31/35/33 42/54/33 +f 40/76/34 28/38/34 39/55/34 +f 47/119/35 35/41/35 46/56/35 +f 44/120/36 32/34/36 43/57/36 +f 41/82/37 29/37/37 40/58/37 +f 36/39/38 35/41/38 48/43/38 +f 53/121/39 52/59/39 65/61/39 +f 49/88/40 37/62/40 50/63/40 +f 57/122/41 45/64/41 56/65/41 +f 42/48/42 41/47/42 54/67/42 +f 38/50/43 48/49/43 50/69/43 +f 39/117/44 37/51/44 51/71/44 +f 46/53/45 45/52/45 58/73/45 +f 43/118/63 42/54/63 55/75/63 +f 52/101/47 40/76/47 51/77/47 +f 47/119/48 46/56/48 59/79/48 +f 44/120/49 43/57/49 56/81/49 +f 53/121/50 41/82/50 52/59/50 +f 63/85/51 61/123/51 62/124/51 +f 62/124/51 72/125/51 63/85/51 +f 71/126/51 70/127/51 69/83/51 +f 69/83/51 68/128/51 67/84/51 +f 67/84/51 66/129/51 65/130/51 +f 65/130/51 64/131/51 63/85/51 +f 63/85/51 72/125/51 71/126/51 +f 71/126/51 69/83/51 63/85/51 +f 67/84/51 65/130/51 63/85/51 +f 72/132/52 60/86/52 71/87/52 +f 61/133/53 49/88/53 62/89/53 +f 57/122/54 56/65/54 69/91/54 +f 54/67/55 53/66/55 66/93/55 +f 62/134/56 50/69/56 72/94/56 +f 51/71/57 49/70/57 63/96/57 +f 58/73/58 57/72/58 70/98/58 +f 55/75/59 54/74/59 67/100/59 +f 64/135/60 52/101/60 63/102/60 +f 59/79/61 58/78/61 71/104/61 +f 56/81/62 55/80/62 68/106/62 diff --git a/assets/hbm/models/scaffold.obj b/assets/hbm/models/scaffold.obj new file mode 100644 index 000000000..74229560a --- /dev/null +++ b/assets/hbm/models/scaffold.obj @@ -0,0 +1,414 @@ +# Blender v2.76 (sub 0) OBJ File: 'scaffold.blend' +# www.blender.org +o Cube_Cube.001 +v -0.375000 0.000000 0.500000 +v -0.375000 1.000000 0.500000 +v -0.375000 0.000000 -0.500000 +v -0.375000 1.000000 -0.500000 +v 0.375000 0.000000 0.500000 +v 0.375000 1.000000 0.500000 +v 0.375000 0.000000 -0.500000 +v 0.375000 1.000000 -0.500000 +v -0.250000 0.000000 0.500000 +v -0.250000 1.000000 0.500000 +v -0.250000 0.000000 -0.500000 +v -0.250000 1.000000 -0.500000 +v 0.250000 0.000000 0.500000 +v 0.250000 1.000000 0.500000 +v 0.250000 0.000000 -0.500000 +v 0.250000 1.000000 -0.500000 +v -0.250000 0.000000 0.375000 +v -0.250000 1.000000 0.375000 +v 0.250000 0.000000 0.375000 +v 0.250000 1.000000 0.375000 +v -0.250000 0.000000 -0.375000 +v -0.250000 1.000000 -0.375000 +v 0.250000 0.000000 -0.375000 +v 0.250000 1.000000 -0.375000 +v -0.375000 0.000000 -0.375000 +v -0.375000 1.000000 -0.375000 +v 0.375000 0.000000 -0.375000 +v 0.375000 1.000000 -0.375000 +v -0.375000 0.000000 0.375000 +v -0.375000 1.000000 0.375000 +v 0.375000 0.000000 0.375000 +v 0.375000 1.000000 0.375000 +v -0.250000 0.062500 0.375000 +v -0.250000 0.062500 -0.375000 +v -0.375000 0.062500 -0.375000 +v -0.375000 0.062500 0.375000 +v -0.250000 0.937500 0.375000 +v -0.250000 0.937500 -0.375000 +v -0.375000 0.937500 -0.375000 +v -0.375000 0.937500 0.375000 +v -0.250000 0.562500 0.000000 +v -0.375000 0.562500 0.000000 +v -0.250000 0.437500 0.000000 +v -0.375000 0.437500 0.000000 +v -0.250000 0.187500 0.375000 +v -0.250000 0.187500 -0.375000 +v -0.375000 0.187500 -0.375000 +v -0.375000 0.187500 0.375000 +v -0.250000 0.812500 0.375000 +v -0.250000 0.812500 -0.375000 +v -0.375000 0.812500 -0.375000 +v -0.375000 0.812500 0.375000 +v -0.250000 0.500000 0.062500 +v -0.375000 0.500000 0.062500 +v -0.250000 0.500000 -0.062500 +v -0.375000 0.500000 -0.062500 +v 0.375000 0.062500 0.375000 +v 0.375000 0.062500 -0.375000 +v 0.250000 0.062500 -0.375000 +v 0.250000 0.062500 0.375000 +v 0.375000 0.937500 0.375000 +v 0.375000 0.937500 -0.375000 +v 0.250000 0.937500 -0.375000 +v 0.250000 0.937500 0.375000 +v 0.375000 0.562500 0.000000 +v 0.250000 0.562500 0.000000 +v 0.375000 0.437500 0.000000 +v 0.250000 0.437500 0.000000 +v 0.375000 0.187500 0.375000 +v 0.375000 0.187500 -0.375000 +v 0.250000 0.187500 -0.375000 +v 0.250000 0.187500 0.375000 +v 0.375000 0.812500 0.375000 +v 0.375000 0.812500 -0.375000 +v 0.250000 0.812500 -0.375000 +v 0.250000 0.812500 0.375000 +v 0.375000 0.500000 0.062500 +v 0.250000 0.500000 0.062500 +v 0.375000 0.500000 -0.062500 +v 0.250000 0.500000 -0.062500 +v 0.250000 0.062500 0.375000 +v -0.250000 0.062500 0.375000 +v -0.250000 0.062500 0.500000 +v 0.250000 0.062500 0.500000 +v 0.250000 0.937500 0.375000 +v -0.250000 0.937500 0.375000 +v -0.250000 0.937500 0.500000 +v 0.250000 0.937500 0.500000 +v -0.000000 0.562500 0.375000 +v -0.000000 0.562500 0.500000 +v -0.000000 0.437500 0.375000 +v -0.000000 0.437500 0.500000 +v 0.250000 0.187500 0.375000 +v -0.250000 0.187500 0.375000 +v -0.250000 0.187500 0.500000 +v 0.250000 0.187500 0.500000 +v 0.250000 0.812500 0.375000 +v -0.250000 0.812500 0.375000 +v -0.250000 0.812500 0.500000 +v 0.250000 0.812500 0.500000 +v 0.041667 0.500000 0.375000 +v 0.041667 0.500000 0.500000 +v -0.041667 0.500000 0.375000 +v -0.041667 0.500000 0.500000 +v 0.250000 0.062500 -0.500000 +v -0.250000 0.062500 -0.500000 +v -0.250000 0.062500 -0.375000 +v 0.250000 0.062500 -0.375000 +v 0.250000 0.937500 -0.500000 +v -0.250000 0.937500 -0.500000 +v -0.250000 0.937500 -0.375000 +v 0.250000 0.937500 -0.375000 +v 0.000000 0.562500 -0.500000 +v 0.000000 0.562500 -0.375000 +v 0.000000 0.437500 -0.500000 +v 0.000000 0.437500 -0.375000 +v 0.250000 0.187500 -0.500000 +v -0.250000 0.187500 -0.500000 +v -0.250000 0.187500 -0.375000 +v 0.250000 0.187500 -0.375000 +v 0.250000 0.812500 -0.500000 +v -0.250000 0.812500 -0.500000 +v -0.250000 0.812500 -0.375000 +v 0.250000 0.812500 -0.375000 +v 0.041667 0.500000 -0.500000 +v 0.041667 0.500000 -0.375000 +v -0.041667 0.500000 -0.500000 +v -0.041667 0.500000 -0.375000 +vt 0.875000 0.875000 +vt 0.875000 0.750000 +vt 1.000000 0.750000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.875000 1.000000 +vt 0.250000 0.000000 +vt 0.250000 1.000000 +vt 0.125000 1.000000 +vt 0.125027 0.000035 +vt 0.000035 0.999965 +vt 0.875000 0.000000 +vt 0.750000 1.000000 +vt 1.000000 0.250000 +vt 0.875000 0.250000 +vt 0.875000 0.125000 +vt 0.000035 0.000035 +vt 0.750000 0.000000 +vt 0.000000 0.250000 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.875000 +vt -0.000000 0.875000 +vt 0.000000 0.750000 +vt 1.000000 0.125000 +vt 1.000000 0.875000 +vt 0.500000 0.250000 +vt 0.500000 0.125000 +vt 0.437500 0.750000 +vt 0.437500 0.875000 +vt 0.437500 0.125000 +vt 0.437500 0.250000 +vt 0.500000 0.750000 +vt 0.500000 0.875000 +vt 0.562500 0.250000 +vt 0.562500 0.125000 +vt 0.562500 0.875000 +vt 0.562500 0.750000 +vt 0.500000 0.562500 +vt 0.562500 0.500000 +vt 0.875000 0.812500 +vt 0.500000 0.437500 +vt 0.875000 0.062500 +vt 0.875000 0.187500 +vt 0.125000 0.937500 +vt 0.125000 0.812500 +vt 0.437500 0.500000 +vt 0.125000 0.187500 +vt 0.125000 0.750000 +vt 0.125000 0.250000 +vt 0.250000 0.750000 +vt 0.250000 0.875000 +vt 0.125000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.541667 +vt 0.125000 0.541667 +vt 0.125000 0.458333 +vt 0.000000 0.458333 +vt 0.541667 0.500000 +vt 0.750000 0.812500 +vt 0.750000 0.062500 +vt 0.750000 0.187500 +vt 0.250000 0.937500 +vt 0.250000 0.812500 +vt 0.458333 0.500000 +vt 0.250000 0.187500 +vt 1.000000 0.500000 +vt 0.875000 0.500000 +vt 0.875000 0.541667 +vt 1.000000 0.541667 +vt 1.000000 0.458333 +vt 0.875000 0.458333 +vt 0.875000 0.937500 +vt 0.125000 0.062500 +vt 0.750000 0.937500 +vt 0.250000 0.062500 +vn 0.000000 1.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 -0.707100 0.707100 +vn 0.000000 -0.707100 -0.707100 +vn 0.000000 0.707100 0.707100 +vn 0.000000 0.707100 -0.707100 +vn 0.832100 -0.554700 0.000000 +vn -0.832100 -0.554700 0.000000 +vn 0.832100 0.554700 0.000000 +vn -0.832100 0.554700 -0.000000 +s off +f 26/1/1 22/2/1 12/3/1 +f 11/4/2 12/5/2 22/6/2 +f 21/7/3 22/8/3 26/9/3 +f 25/10/4 26/9/4 4/11/4 +f 3/12/5 4/6/5 12/13/5 +f 11/14/6 21/15/6 25/16/6 +f 9/17/2 17/10/2 18/9/2 +f 1/10/3 9/7/3 10/8/3 +f 17/18/5 29/12/5 30/6/5 +f 30/6/4 29/12/4 1/4/4 +f 9/19/6 1/20/6 29/21/6 +f 30/22/1 2/23/1 10/24/1 +f 20/8/5 32/9/5 31/10/5 +f 31/10/2 32/9/2 6/11/2 +f 6/6/3 14/13/3 13/18/3 +f 14/5/4 20/6/4 19/12/4 +f 31/22/6 5/23/6 13/24/6 +f 14/19/1 6/20/1 32/21/1 +f 8/5/2 28/6/2 27/12/2 +f 15/7/5 16/8/5 8/9/5 +f 23/10/4 24/9/4 16/11/4 +f 27/12/3 28/6/3 24/13/3 +f 8/25/1 16/14/1 24/15/1 +f 23/2/6 15/3/6 7/26/6 +f 43/27/7 44/28/7 35/16/7 +f 36/21/8 44/28/8 43/27/8 +f 53/29/9 54/30/9 48/22/9 +f 52/21/7 54/31/7 53/32/7 +f 41/33/10 42/34/10 40/22/10 +f 39/1/9 42/34/9 41/33/9 +f 55/35/8 56/36/8 51/16/8 +f 47/1/10 56/37/10 55/38/10 +f 42/39/4 54/40/4 52/41/4 +f 44/42/4 36/43/4 48/44/4 +f 42/39/4 39/45/4 51/46/4 +f 44/42/4 56/47/4 47/48/4 +f 43/42/2 34/43/2 46/44/2 +f 41/39/2 55/40/2 50/41/2 +f 41/39/2 37/45/2 49/46/2 +f 54/40/4 42/39/4 56/47/4 +f 43/42/2 53/47/2 45/48/2 +f 41/39/2 53/47/2 43/42/2 +f 67/34/7 68/33/7 59/2/7 +f 60/49/8 68/33/8 67/34/8 +f 77/31/9 78/32/9 72/50/9 +f 76/49/7 78/51/7 77/52/7 +f 65/28/10 66/27/10 64/50/10 +f 63/15/9 66/27/9 65/28/9 +f 79/37/8 80/38/8 75/2/8 +f 71/15/10 80/35/10 79/36/10 +f 66/39/4 78/40/4 76/41/4 +f 68/42/4 60/43/4 72/44/4 +f 66/39/4 63/45/4 75/46/4 +f 68/42/4 80/47/4 71/48/4 +f 67/42/2 58/43/2 70/44/2 +f 65/39/2 79/40/2 74/41/2 +f 65/39/2 61/45/2 73/46/2 +f 78/40/4 66/39/4 80/47/4 +f 67/42/2 77/47/2 69/48/2 +f 65/39/2 77/47/2 67/42/2 +f 91/53/11 92/54/11 83/19/11 +f 84/24/12 92/54/12 91/53/12 +f 101/55/13 102/56/13 96/49/13 +f 100/24/11 102/55/11 101/56/11 +f 89/53/14 90/54/14 88/19/14 +f 87/24/13 90/54/13 89/53/13 +f 103/19/12 104/50/12 99/57/12 +f 95/58/14 104/19/14 103/50/14 +f 90/39/3 102/59/3 100/60/3 +f 92/42/3 84/61/3 96/62/3 +f 90/39/3 87/63/3 99/64/3 +f 92/42/3 104/65/3 95/66/3 +f 91/42/5 82/61/5 94/62/5 +f 89/39/5 103/59/5 98/60/5 +f 89/39/5 85/63/5 97/64/5 +f 102/59/3 90/39/3 104/65/3 +f 91/42/5 101/65/5 93/66/5 +f 103/59/5 89/39/5 101/65/5 +f 115/67/11 116/68/11 107/15/11 +f 108/2/12 116/68/12 115/67/12 +f 125/69/13 126/70/13 120/3/13 +f 124/2/11 126/69/11 125/70/11 +f 113/67/14 114/68/14 112/15/14 +f 111/2/13 114/68/13 113/67/13 +f 127/15/12 128/14/12 123/71/12 +f 119/72/14 128/15/14 127/14/14 +f 114/39/3 126/59/3 124/60/3 +f 116/42/3 108/61/3 120/62/3 +f 114/39/3 111/63/3 123/64/3 +f 116/42/3 128/65/3 119/66/3 +f 115/42/5 106/61/5 118/62/5 +f 113/39/5 127/59/5 122/60/5 +f 113/39/5 109/63/5 121/64/5 +f 126/59/3 114/39/3 128/65/3 +f 115/42/5 125/65/5 117/66/5 +f 127/59/5 113/39/5 125/65/5 +f 4/26/1 26/1/1 12/3/1 +f 21/12/2 11/4/2 22/6/2 +f 25/10/3 21/7/3 26/9/3 +f 3/17/4 25/10/4 4/11/4 +f 11/18/5 3/12/5 12/13/5 +f 3/25/6 11/14/6 25/16/6 +f 10/11/2 9/17/2 18/9/2 +f 2/9/3 1/10/3 10/8/3 +f 18/13/5 17/18/5 30/6/5 +f 2/5/4 30/6/4 1/4/4 +f 17/50/6 9/19/6 29/21/6 +f 18/49/1 30/22/1 10/24/1 +f 19/7/5 20/8/5 31/10/5 +f 5/17/2 31/10/2 6/11/2 +f 5/12/3 6/6/3 13/18/3 +f 13/4/4 14/5/4 19/12/4 +f 19/49/6 31/22/6 13/24/6 +f 20/50/1 14/19/1 32/21/1 +f 7/4/2 8/5/2 27/12/2 +f 7/10/5 15/7/5 8/9/5 +f 15/17/4 23/10/4 16/11/4 +f 23/18/3 27/12/3 24/13/3 +f 28/16/1 8/25/1 24/15/1 +f 27/1/6 23/2/6 7/26/6 +f 34/15/7 43/27/7 35/16/7 +f 33/50/8 36/21/8 43/27/8 +f 45/49/9 53/29/9 48/22/9 +f 49/50/7 52/21/7 53/32/7 +f 37/49/10 41/33/10 40/22/10 +f 38/2/9 39/1/9 41/33/9 +f 50/15/8 55/35/8 51/16/8 +f 46/2/10 47/1/10 55/38/10 +f 40/73/4 42/39/4 52/41/4 +f 54/40/4 44/42/4 48/44/4 +f 56/47/4 42/39/4 51/46/4 +f 35/74/4 44/42/4 47/48/4 +f 55/40/2 43/42/2 46/44/2 +f 38/73/2 41/39/2 50/41/2 +f 53/47/2 41/39/2 49/46/2 +f 44/42/4 54/40/4 56/47/4 +f 33/74/2 43/42/2 45/48/2 +f 55/40/2 41/39/2 43/42/2 +f 58/1/7 67/34/7 59/2/7 +f 57/22/8 60/49/8 67/34/8 +f 69/21/9 77/31/9 72/50/9 +f 73/22/7 76/49/7 77/52/7 +f 61/21/10 65/28/10 64/50/10 +f 62/16/9 63/15/9 65/28/9 +f 74/1/8 79/37/8 75/2/8 +f 70/16/10 71/15/10 79/36/10 +f 64/73/4 66/39/4 76/41/4 +f 78/40/4 68/42/4 72/44/4 +f 80/47/4 66/39/4 75/46/4 +f 59/74/4 68/42/4 71/48/4 +f 79/40/2 67/42/2 70/44/2 +f 62/73/2 65/39/2 74/41/2 +f 77/47/2 65/39/2 73/46/2 +f 68/42/4 78/40/4 80/47/4 +f 57/74/2 67/42/2 69/48/2 +f 79/40/2 65/39/2 67/42/2 +f 82/50/11 91/53/11 83/19/11 +f 81/49/12 84/24/12 91/53/12 +f 93/24/13 101/55/13 96/49/13 +f 97/49/11 100/24/11 101/56/11 +f 85/50/14 89/53/14 88/19/14 +f 86/49/13 87/24/13 89/53/13 +f 98/58/12 103/19/12 99/57/12 +f 94/57/14 95/58/14 103/50/14 +f 88/75/3 90/39/3 100/60/3 +f 102/59/3 92/42/3 96/62/3 +f 104/65/3 90/39/3 99/64/3 +f 83/76/3 92/42/3 95/66/3 +f 103/59/5 91/42/5 94/62/5 +f 86/75/5 89/39/5 98/60/5 +f 101/65/5 89/39/5 97/64/5 +f 92/42/3 102/59/3 104/65/3 +f 81/76/5 91/42/5 93/66/5 +f 91/42/5 103/59/5 101/65/5 +f 106/14/11 115/67/11 107/15/11 +f 105/3/12 108/2/12 115/67/12 +f 117/2/13 125/69/13 120/3/13 +f 121/3/11 124/2/11 125/70/11 +f 109/14/14 113/67/14 112/15/14 +f 110/3/13 111/2/13 113/67/13 +f 122/72/12 127/15/12 123/71/12 +f 118/71/14 119/72/14 127/14/14 +f 112/75/3 114/39/3 124/60/3 +f 126/59/3 116/42/3 120/62/3 +f 128/65/3 114/39/3 123/64/3 +f 107/76/3 116/42/3 119/66/3 +f 127/59/5 115/42/5 118/62/5 +f 110/75/5 113/39/5 122/60/5 +f 125/65/5 113/39/5 121/64/5 +f 116/42/3 126/59/3 128/65/3 +f 105/76/5 115/42/5 117/66/5 +f 115/42/5 127/59/5 125/65/5 diff --git a/assets/hbm/textures/blocks/struct_launcher.png b/assets/hbm/textures/blocks/struct_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..102de3fc8d3ea68b049c2897fbe874d4ff389b83 GIT binary patch literal 399 zcmV;A0dW3_P)b>!3`JjpkPr-b(qPS*GUhm$at=>9YeswUPLM-7v{IF% z?NUyJ!7qP4lDp&a_~0v4wWg$$=)=rf?(Qw$1Ke&muGcH>&Nz;YZj& zpAK@)xI1P>N(ohEU02-wS8>i6fJ3#Cb8hx4z;#_)Yd?tr_O)0t+mP| zrS#cC53H0zL||sj^UURP!OVz=#-#_l=a1-V{}#LR`TVF>fj3~)YTp7tL=X`i%nT7B zBHEm*AR^kIDywB#8bmYuZsAqz?o89fG)-?KuG4A^eiHYMPvah>cX}`|7M!#(H tJh$64vTgtX literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/blocks/struct_launcher_core.png b/assets/hbm/textures/blocks/struct_launcher_core.png new file mode 100644 index 0000000000000000000000000000000000000000..cac4e139a747653f1176ba55da044ad204169b5f GIT binary patch literal 507 zcmV`3Lj)yyIS4>mFi^;jx@^9*c;_ zF93O-v)ODA5yCJe3`3Ms1VKO$1SqBax`=qb7dRe|zJsP|08mPywMJ`=QVM{kY0z4G zKEPnHSac$S)*53B&N)PcIF8w+DF9hnQdQLlj@FtHfVI}&Y>c7IG63GJ1@JfKgK5y!FjB8npa)+mao>l(mw z+P1|Qb2G6wY?r3ISxb^6)OAf1MII+f!ke}1()7vL7e1*V2)JA>pHUbrm&;Bm!wi5)nj%wrzo1*hJ)c7QQ;p{{Z?y^b50Ni~Rrq002ovPDHLkV1g@>=lcKv literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/blocks/struct_launcher_core_large.png b/assets/hbm/textures/blocks/struct_launcher_core_large.png new file mode 100644 index 0000000000000000000000000000000000000000..e64ee06e02083e2d4fe59a21c88fa7f4a77bb6e1 GIT binary patch literal 462 zcmV;<0WtoGP)*Oa*2o#LLh`dQ51OZ@!nGug}sZ2)dSoCq?AlS&Y2h^uaEaP3g+t_IcJ=6 zRu3>~+x9FXIOizKl3zc*05I&2Hw1n$1K@M_!Z?m7X41CpIfOvYncvS}4fqs-c_Jb_ z^t};%`u39;BYodrJOGF>+HVT3>zcZ*anA7+0`JvM)$P~Edxrhdz*SX|QX-{9RaHhZ z?2qP8S(X@QWD_eUFHkY;8d&;TJRJ>m6{}PHQ3OZ0z6PNYupZG5%fq@kMHy=G=81DJ8bs zEh6&YRbH)Dq?FifHn+E+Ui$pa1{>07*qoM6N<$ Ef+IxFm;e9( literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/blocks/struct_scaffold.png b/assets/hbm/textures/blocks/struct_scaffold.png new file mode 100644 index 0000000000000000000000000000000000000000..abf5723f97eaee213b8686ff596bc8c7972ada01 GIT binary patch literal 372 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 NO^y)>d4}Z3e*s!#4yphE diff --git a/assets/hbm/textures/hazmat blocs1.png b/assets/hbm/textures/hazmat blocs1.png deleted file mode 100644 index 532b26dcf42fff33f7912504379f0de6b465b85d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)3s6a00984WI~Tfk$L9 z0|Vb75M~tB@M-`GvX^-Jy0SlFW*5^@+Ie;P380Xyr;B5V#p&dlFRp*=nOPe;8=VZY h4y<5Y%*G?e%phCI%%gHIs(x6tor}}10hL7 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 diff --git a/assets/hbm/textures/hazmat blocs3.png b/assets/hbm/textures/hazmat blocs3.png deleted file mode 100644 index 1bd73cfb227281d9f51ed25219c735dbacb755a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)3s6a00984WI~Tfk$L9 z0|Vb75M~tB@M-`GvX^-Jy0SlFW*5_y649s@q^jqOsV&y7yrvyxGn_xzMZcf; yd~}BJ4>z_GyIhvcUSq$o=h#v~-ITqbdGnjR15YUL-qZy2JcFmJpUXO@geCySUXe2Z diff --git a/assets/hbm/textures/hazmat blocs4.png b/assets/hbm/textures/hazmat blocs4.png deleted file mode 100644 index 865722b99e2af24901a1a9a309c7cfe9859f7c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)3s6a00984WI~Tfk$L9 z0|Vb75M~tB@M-`GvX^-Jy0SlFW*5^n36W9;sq^u4aSX9IoxJCh&l`JY)`r$bAn5O( zsB?C{-QV_u68}GG?k3?dC<}!G?`njxgN@xNA`}{ma diff --git a/assets/hbm/textures/hazmat blocs5.png b/assets/hbm/textures/hazmat blocs5.png deleted file mode 100644 index 8c910d3d90fc890c45421ccf3000fef35562f224..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmV;50d@X~P)Y36)FX3Cj&el2{;grWPqdO0q7`MYajpQ# z4Zwf`$&unx$XSa;jXd@;a?|HX(O#NNUBbDTU@r(K_jbS_mC2@6ihysRAnK)qeks{x zQ!n(L39 zW&?=A;rwXN7u~(>GMIa88oE}a{^qUl0O|!mWzlyw>YZuV*v_N!e>&g|fL6Wbrr5ZP oER5HyP~!ph-?e=^sBQs%0pkC5GKtZ$8~^|S07*qoM6N<$g2W!C!2kdN diff --git a/assets/hbm/textures/hazmat blocs6.png b/assets/hbm/textures/hazmat blocs6.png deleted file mode 100644 index 4e7e0b7b92ef0ebf5a50a1014eb042c61c51ce02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 501 zcmVzSX+mj9Hir zc8AmpxXA(zhc;-x0^D#BRZQX#x^$0WFWnX8t$3?-&#!iK&TCn-jd^q1T3wO_QM_xr0G!J6xQ7(5Kz%AZC0a^zj3d;j

H=O_D9Sd9L55ln$vy(g-ktN978NlC;$1``_P`5wV|~U z2zq^c7aWS;pO+YV{D_01glPj8n?cYlKDK+@i!~>50qqUVIV36Adc^<$0dYx0 zK~y-)ZBxOn;y?_ulR-%ENBjRD!+{f}LM)Sb4JAJ2KKmhQ1#q05i z$K_%d1Gs(o*)I<7wLQ@3-FPvz_PE%*-Uo(dIdd)m0lD03sCb@X8}4699~IogzZf$!4$?kOU(T z?Y!2cm_hcln)LbTvn;t}Dr+H23$lB!*68l=Q6FRyH&@N( diff --git a/assets/hbm/textures/hazmat blocsDirty1.png b/assets/hbm/textures/hazmat blocsDirty1.png deleted file mode 100644 index ce8281e0c03531cf56f7178e38a444d45acb19fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 zcmV-30?hr1P)4AAmD)0J9^JK>Gt)Evxi{Y8-vY{{8(UTMjbl0cl|1 zUpt6;GVnyLK7+zxbXt(xL@n{z3JfS5R)dxWc9HwU(oh;2iAK=B8~ke{p9dz#Rzp1i zs$pB?KG9g%YK2Qjo^(3~b`1190K?7>rrO$qcrGj&8Vij@zCNgB4VU2>3tAu-7S8v} z#{@YhyRT6%4QPpa6zzPT#P1K57xx}uHC@|8BWkb-KRPyhEn5u>r?>Zh$so)HCe#Bv zI~svZu+6F)XsmMNk#Ke#S*Z`;#obo9Ve6`63=9Sg_p7^U)lRsv1r^B{kHs(C-_iffV3?H1{{_K7_4_v0st>9Cx99uV#4f|j)R z14L1@q~C&=%9_K_UbzR*Ht&S`v0<~}@u=EZ{0FPaL@&bb2v-0A002ovPDHLkV1l@d B@ZA6a diff --git a/assets/hbm/textures/hazmat blocsDirty2.png b/assets/hbm/textures/hazmat blocsDirty2.png deleted file mode 100644 index d13b70f5fc2d8e3f17faa014615c089e432d8a99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;BzjP)-o!KVeoe#ZTiko@JmPDk`vQj|-#3A+Pzu)HbM59Bg@b?c~ zZM}Pg8u;-G-46Wy3t~ev@o~VMgwOwx68nOyqr70N(B1&6aWCYtBR4!dmeBhJ`$2fi z)m#B4Xu{~Q2W$bmFekX;Vf^)lw!rNKK`39iPSh^w9p4I)@K%3B3f=={!!uDkN$(H^ zT^}O%0cVHW(VQ?Z@_R=)vAm}04Ufc8VHlMY`h-jZfAFJ#COR9gKo#yCEEs@FSBuKxloIaS_Hy;2qQ;=qDKRNHBOaYLyJ5Pr(9>C6Y(N zt)L%67ZG`X;xLwx1qrx00q{vg zK~y-)Et5-j961aG10<`eHP)5qrgH{Azmd9|MSRi=YK0YmKxV>z|M#!x1I(a-dZ8A; zLh;7#C(0Wvz!$m_?gi%5FK6)a36-cfh$qCtSkwiWqn_BjK|wtVyB#S|PwKcCU~pcL zFBm`uYJysTqg+@9br#%CJp$y^Sm>Gzt_y}B47q~^brkr*e1Zi!3o0-rWsc5;&WUO< z$QOElqoYtOtO6<^ZY0OT(UGVU?!Y3^2qXtNgV!IZ2_D!G_#5kiYGLz6J)j&~?8dP+ z%_?*SL%q<^Pzn3~LPufGHx>?-=t^`3>JB*77i3Z&FU%W5he0}azaSUpv6VgxGJ!zm z)Nw-(G$yu+HV^7@hDKuFPt+2#+>LjFC+fR$BsPT(M>x71dI8XQ{=c{Mr2hG_@hqSq z3zP_lwy4Jw#sb(@W3>8g=oID)S%3ma>I~?KPKWN~=ND>@TA?EWpo~Uy>QU5ZVX-!L zC1fGns@Ir%a4Tqqc?T0Zg2sHq{oXmZM9o2k9*epbbxqndkfD)~4UNKlppi7}$74Bl z`o{lQXgKxjh1v~G*cuzV{}7a6(HUZY76ev~dZ1%b$AmsgURu;|!2_zS%{sRDc$UQ7T0002ovPDHLkV1jLl0uKNH diff --git a/assets/hbm/textures/hazmat blocsDirty4.png b/assets/hbm/textures/hazmat blocsDirty4.png deleted file mode 100644 index 3758a431e20a6266da7ee8e94431f13bcd79183b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmV-W0OF<#e$EHny)ab373nuWO9ejJ7n@u!3J16F6h zXdfHc2we@$*a^J%J|>zC4A~cCKqeUKd|kLSvX3pKL8ES@vcN)T2PJNE-#Huk0$5Z( z2VTNqvJcAdHz99oC5f*NA@tQZz1NLKp{RaW(3yW-XjHUw%4-| z7Hw5(xesC;xNw`~YyZx-k=Dn# zsQ_Aqy6VJHaX%k3wQZ7z($6dlT?b12IMb1Y>%#p;SKAK5XjJlj;it(+Jt7K?ie;#a z$U?+uI}j$m`lhjhxGOG+&W1*%e7?5>1wJ+{V=79{{|Z_`EMu9HgB*!RA-FkKBQ&X_ e^RyXYLgs(X>@ilc4&2%R0000gFyRi$o=z1<%J*XZWf(RIbC&2}0V2T*v03V<%;#Fi7;p2oc zsGmQ9g8RZFAb`0*28_et!o5I6{aEB!bjAs%(bq40G%&Cpj1k5|H~4yA1FYKMx>0(sqk>@^pgD0*+>FNr zlG3D`ME`tk`8ofmtV-%Pa1?HddSVv-xUm;*lXZU4l1ey!l+b$KVg;_9@`gp*J z+XE~BA{%}CT*O!66IkAfyK}Gfk&uZNxGh*l>Zm1cil`xwsqexR9y?`JK^A)aK0!~Q z6<~<#pkE(!$bH$yhl$UvAYSk2%Cu+aLD4~tIwvY|es(%l5QUzCquyQ@j)g7}ufT#R zK@C(w$By{88(nkZZ^pfFB%;6xwf}&Y(CWy73Vcko8p?o#ZkfCj&mw!G)IbacL&~(P%<#A?cjXeSc-_!tr-skMz0g(){lR|!`YE;tbYrhK?D_{C z&_O*ntde>-C=f|+jjy0afs(1?J97wIALz#ycoi&x52h8`2Id6@M8is$&9tK4VOlP5 zqrV++{l#{JxgiA_4xWgH2-q6yhO6;}Rx`C9um_eeG(>MZNC*%M>qgcvgnbBm6}E&- zjMJIYg1Qh*@ApOAZd8ii1YP*QLSE1YYCy=vlnYUyg{e^|vV>V^6kH3k>0{yVh0I_U z_HsO&X&-;!$Bw$_304VlfiJWdR)MXAD9A?7f(0B&*WMSW?G@MPk`75{rRd`~6BgPA*srv=9NY zK8q9dWi_T-)uGPbQsQ ze}mkUdb>%;pk^QoEDA4Y1dQca8{6rifoAX@odlqN?%0p!00000NkvXXu0mjf7ApKm diff --git a/assets/hbm/textures/hazmat blocsDirty7.png b/assets/hbm/textures/hazmat blocsDirty7.png deleted file mode 100644 index 439ef7d20f9114e7bb42024499d84f91f28daa56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmV-h0;K(kP)q0bK~82!aM>d@Pv7o{j30 z&nkMX9eKmMh}ED1LXd(0S`er4?k96%CAetwphpfEjW`G10@UFIHR0X>&|Ij5m!O23 zKw`T(eI3PU0W;9m@ZO*YwqP5u5+4mHPyq=IbVI*_E*iK24W-}$|FNSOa3zd^t{ZP1 zNW4H-Jx*mh5kR046!2psE<+fWaNj^ib76s|0rCHZGKlLz^VZOvV8Kl2JDNc2KtO`5 zCr2RYgz*N-r=DLMFwhd%5FJ8z2>rV8-Y~|MWE4GHf&DOaK{LA7ZtfMv2Lol5GxP&OC|SA*jjlhbHk&lfM_ zF1QW(yRVXt6LL|nKn~&t_fA}ed%*Uz@hE&0J`(N)b5iG`n~CEQc7r-hd* z)hWnZ?1*k>m78U}rU?MK`3C{7Y2xm_Ud&)W1c2CGMGV^}@IwnxuvWxYySlqe70nMV z*fs&l#wZ6fn{qfVMHHj}IQ-C33Y?x*zI!Y0L3tus7Oi#_mkm=Xq|IP9<;pY1)yGA3 zU+?!)JU(o&m~$-VJfHt?piauzm;3Pv{Z$vVysq-UXUJWYS6K=1`RViEMqFJV9WL-! bDE`S8KRT+LUwCrf00000NkvXXu0mjfN}aQI diff --git a/assets/hbm/textures/hazmat blocsnuke2.png b/assets/hbm/textures/hazmat blocsnuke2.png deleted file mode 100644 index 50398ce58aeda142ee62e8f29dadd2ebf50d2810..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 441 zcmV;q0Y?6bP)%9e8l|@()Y^+cvOmgXKcdtj}34gz`o9+W$;w zDgnUI5Aoc9m*+K}8!+@kbnWhTm8xZG^}^NLRH$G8e<0}hLQc<2q(svU{6R>+7g8!` zv2q4R*LP&IK3Bmy<%$KMf_F&D6^rYegIx>zF#x%>I9Y&3tAOVQ39(wsZ(pl~)@T(r zsk^=-ZQFC-*OW5Sm&pLzRsOAu(DpI5Bc2eNFB z=Zz#uNz+7}&oM&E9?x@`CKqFT4u=%i9m%o-@8AE8lm_3|_NgQHVTGX&QyrK9@^K z6kVw6h+&XCJZ#u(9@+0#+}!K{2O$P-ZhkVGT}aacQB`vs2l`&&`v-=>qwjtCUh?|& z6N^PnnwG3qJJ#z1;Gk4XQC#8s29c%()(WK5D5Z&_4r>MT`I#W-sj3*)wP>vBXnIrRmHTe!djQ-=T``0Joft~Wtq^n9lKqI z>rR|b*BB$Yz5SP~tBS6BS@%4P<4i0THC&3doGtbT89)xOrBpeO%O#b{{fUybN|Ura$x`f002ovPDHLk FV1fq-YN7xD diff --git a/assets/hbm/textures/hazmat_custom2.png b/assets/hbm/textures/hazmat_custom2.png deleted file mode 100644 index 049f1bae850a987108109d4cfe27d51d2e3c0552..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmV;I0%-k-P)h0OW{w!GT~P2%4&B zB;0X#%d9g!)1L-Co()9@#as1$l=}HoYAM1nJZ8QA&3=Dmnji#+_xCa8NZ-F=w>xLO zzCo#iwUv}0gbt%rMkG^;r4(VBKq=_^=bW8=Kx+_rht?TuGa`^Pl%fF8&VjYy+z*^P zAOc+no6T1ML?ERT#_=IBLI`kq`IMAS06|X^cyB4i5~D>ah!ILL48s{QLf^k;wYqK_ zHEg%vh|!@`!i3PFR3&H2dVQeQe-tgwU1AJ4_lfoT2Ip8wJ;St6h5t%3@QER~a9i@2-|20Gym0NlD1LBWFXcnpzD|mi{$bgE8DnHM`viGx|X` zYsV$dCQs`Io+gK3d9}7*sfsZZT^C5H4K=0#b7t|Ym9=9V5F^a9Bc+*XIz{WmY89we z2%#AXkh2iNhLn106}-QPDFwWDgs??x%P_nIBHrIn%3XH5k61gBl0m78Qf->GnVkP% zhQX4v!MTe?<7c+pi`$KxOCU8$=RHCFc1FIa|Dc!JRwjfTrty@fXq@PoG|d@2LO)002ovPDHLkV1kv4DG&ev diff --git a/assets/hbm/textures/models/launch_table.png b/assets/hbm/textures/models/launch_table.png deleted file mode 100644 index 5fdde1b7b6a13dcc223246af8859637cd4222cde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8755 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 diff --git a/assets/hbm/textures/models/launch_table_large_pad.png b/assets/hbm/textures/models/launch_table_large_pad.png deleted file mode 100644 index 0789fde8ca63be989c3c350b74ea1f0b857d0172..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2697 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 YR5tj)>U%cj*ALI?I?AHT%=7X80Mw8(?f?J) diff --git a/assets/hbm/textures/models/launch_table_large_scaffold_base.png b/assets/hbm/textures/models/launch_table_large_scaffold_base.png deleted file mode 100644 index 95c6c07ffb4247000e075c70c8a2ceffd3c78503..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1214 zcmV;v1VQ_WP)l%6dL5mUNg z!D~h6p?`v>UcB_55WHDLNb!`!HA)kcZVzGNWZYkwd7}yJcX8(JzHi>Vee>qcs6dJo zDN@M8cxeLwzz2NRHULBHvv>G5|9qe8e-7ve@$)}lYs#kqG5cWpHR?qU^H>D z&&$O3!!Q#L@c}<*(hNb9iFzLZ_5puC;+-)4Y!vBpBIy_8-wm4-i;OUbMCs3rLzri>MSSQb@tr-QD#q%R;?gpQr`nvh4VE};Zy1s4OxV^oN{Sv&f2L}g<^mX%7VoaW7&>&-z>g(pGLgGQAj7@5^ zZhi_RGCGN|NsZRcuZq|&!4g{%V}tbLoT7tY1%ZdVdcAJQ8Y}9*1iuPGPrJOamSs&% z9H*z7UlxH5QLO`b{g>cZ!ILmmtpnl`q;7syB;NW|>xk#zr@)w0wGL2m1_eJANa_Fz zXQ=Q~!jKtknmR%^KQ%I{bwHfHZhmTHRO^7G^@c8fYNYoe0@C{s0ds#J(*E_{FO*i0 zbJo!Je&hb;50>8ily=&$Lg+J%4!M1JKRsptcBj>D5>w^i*{e8&xyDJ+jM_CREXN zU0*4sLF406<#yq zFijJ=Ty9)T0Faht^Z7iswzdEOCnqOTMzKf;S~3(Uudbse@UtaD9Ui=FekA!N!{-L8wEzc_c*4GHiNQ5DwT>VMI_ALf>wSJ z$`0{755wUQrfC8IdAnyW;$h%pAv=m}9c>;n@gG&Q1hO157!1ZT$~Ma({BqaPW=M00 zfHa2)NOOpQG=~UCbBKVs$RT{m&98kbIgd1l2$-83!k;_%wNE8yNOOn)k{qJ*_%G%V c9c>=}0b7)md2P(*3;+NC07*qoM6N<$f^(KXssI20 diff --git a/assets/hbm/textures/models/launch_table_small_pad.png b/assets/hbm/textures/models/launch_table_small_pad.png deleted file mode 100644 index 89dd25c9e3a3597464b64d1287ae4c6bf8fa396f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2304 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 diff --git a/assets/hbm/textures/models/missile_parts/launch_table.png b/assets/hbm/textures/models/missile_parts/launch_table.png new file mode 100644 index 0000000000000000000000000000000000000000..389b8cbadb3ce34e090fff37f8b17088aa0a2de7 GIT binary patch literal 7332 zcmZWu2UJr{(@yB2BVBqE1W{1wNRiMip-2gx00JUSx`G&r5~YhEBB6@(CW3SXghc5| zuVO%?_fFtneBbXc=jXt=huzs{W_M$*l%;3tU60Rw?>Tj;{ojRI1aC)`}Qb{|u&t*-0bcz4Uf>(^)^-#d7c z;K*~08pO4C9xNmfcz&aRXG+7*fejSI^ud_;lQD$XuXlC&TquhpZO;H9MTJMBh(oInGgu_1>AG0 zFFUz&7V--5tX}eMoB!lv_CPO%@VlJxc1%4@oAiirUv>$Bjrt7#78hf+0XD(2JTDSG z3WKiEB2^_GMVyhpnW?W3)W3d0`E#?iRbE(EUg=60=FIij`c3*q<*P=U!P~J-s_8i9 z*O%-)RANccq6dfT?$M0*w~AIWVnw}|!i{al?%aP_yHJDL_GxC*WIBA+;d0JiI+f#W zOOKNy& z)p^44)VT8NeTzfrHcRAe$I8k|!C{}};!1nVIJe(#FJv^lV6v%iZ|h3Uc{Rq!l>PXw!@C9LA8sQT(vnlZq*>B4&DJO@DLhZmj{UV; zmBvZVsf4na^VzbIGoQ;gX43gKLWrXt6c!Q=_ z>LeO>iiNblrLQImM>$=Vudl`gWTJa6ND8EU{W+F0me)hzdPDnibCXeq)fky1fWMrU zoYG>G+WJj45%u`A}RD>&6IJzCnU9NCE51oV+wtXvb5~`{q$TvM!f~dvaUFw|eecOT3 zyBM*&xL9pg)Bmhzej3#&e8%@!r_##!T%D;VQ~7o1r5wXQiSN3 (#eFZLp`wb$DS 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 F0RS5M6{`RM literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/models/missile_parts/launch_table_large_scaffold_base.png b/assets/hbm/textures/models/missile_parts/launch_table_large_scaffold_base.png new file mode 100644 index 0000000000000000000000000000000000000000..53bfecb5bb89ad28e90258d13e3dfd2faa2974b1 GIT binary patch literal 1198 zcmV;f1X25mP)l%6dL5w~=~ zg4c@BL;nO%y?E(AA$YThkm4yn)+CUabbAQ1j^qBy&Kotb-^H2Pec!zO_RZTjqXHQ+ zWXO;n+H*Sq03P76wgzZopWVZ^`RfN<|4TqWh@bz-`;w!6xHQlJO>~U!^A8ks9hg42 z*yqQ@`@`@e1n~eb=%E>c9wzF305|}=gNS>=?DJ8iPl=>&kiR$Vp;%;u2@+-hVgzB% z1v$&w{Mr}o`G*e@A}*pbWXO;T+TPxtXBY+=jmAth3A5|>`-rkv%}j3*`!XZ=9fk6n_!78iL*iWaiXZ;mqFm>uF+^{X`L1ApMzfpp}Sq)S;H`9 zCXTaH&7T&5g2>hZy!~_V%ivL%%GLpK2~st`EE0eEWb25h;HQ93Dq9E0h(Ws}|DyKxS8CDx(w!x;u<(rgTEy9_;xAQ}adLcvpWn}Ma(shQWqDQ&9^k=V zCT!BApU$+R$nY1eHJGLe(_ ztJOlg-39=p9h>{}5b_8~>SPpb+YU^Gwr!K}?|l6h$bYoIt5HXYw8Oj@&1Mq-u(Gnk zUzeJL7o&512>__BuKU+t8wJujgzT>no6ROJE-w5&FA4=Z*Oxy32JS_1T^G8pqfjXL zUkU)J$4CTWVzgQ<0Pr2B5`~Gu^D|NSJTMxKFqupMAoW;&Yir9Z7K;FY;c$qvv$H2T z%%uW(gcOTKY;SJ^08UR&Q#r*V!4K(;4bml3U0uh9z|WQpd4#Y@udc47oaP0f&L6h-!TMI`j$f>M4F(t^0Ii^*gHUDpACygk$x zaX0p`ke^1jiZ+iI@gG$$31m5BJRbXFlx>zn_~ovm&5-2~0a*?akmV2oSq>49<21>W-H;XQXUtsd{%!>0Z*D&;`qUu71&x`gx_<*!sMp)UFFJO`SgkbGv)5 zc%G;GNcWgl%b!xmU~#J>&0O}T2H|O0ubkQ|R<5?%XE6^a+#w z1&bez#}4wF@YO9S{J`AXET19s$Kmkvchy{RWe05uMykUS^p< zV*=l^A2Ql3Jmd9RAI)F;_)BB=+x~esyGcG{PCZx8tIs=1szMUW>;r`5CJO-#fA!ZP z;+b*dJ*)E~_pE||mfmstaJO>Vhee0p)GY|xqoNITk={q^d$X1m@{C6BQRr6-D|2ZK0Joej*snZyUNvj=JbwEE^_|Bv@+UoDmvgv0@91swl6jgc8|SY*ve>f`=&{-9>vbj> zA6xf&)wbOGzL#aJ?B@HQeEX4k>6YBzb$jF5`-5)CYb?o}_3C4VjGfm(evzQ4#vhGN zeb@F?Ou0AzZ==%{%?qESXUb^ltabR~ptw}@#6Jf`t=$3rr_=Skv<2(~JYGtHg+yNL z{OnUWjmsM>n8~`yKA>Zk-j~_a&Kqljv?lfh+52+=gY1TUg@A5nuY3iAZ*r6T4&mJ7 zL;nuQW(38t*cT{A2}{`FVdQ&MBb@09z`T AWB>pF literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/models/missile_parts/launch_table_small_scaffold_base.png b/assets/hbm/textures/models/missile_parts/launch_table_small_scaffold_base.png new file mode 100644 index 0000000000000000000000000000000000000000..891a52106e3d5e8e57a5dd96f38e8db9459965cc GIT binary patch literal 934 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 x && guiTop + 98 < y && guiTop + 98 + 18 >= y) { + + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(launcher.xCoord, launcher.yCoord, launcher.zCoord, PartSize.SIZE_10.ordinal(), 0)); + } + + if(guiLeft + 25 <= x && guiLeft + 25 + 18 > x && guiTop + 98 < y && guiTop + 98 + 18 >= y) { + + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(launcher.xCoord, launcher.yCoord, launcher.zCoord, PartSize.SIZE_15.ordinal(), 0)); + } + + if(guiLeft + 43 <= x && guiLeft + 43 + 18 > x && guiTop + 98 < y && guiTop + 98 + 18 >= y) { + + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(launcher.xCoord, launcher.yCoord, launcher.zCoord, PartSize.SIZE_20.ordinal(), 0)); + } + } + + @Override + protected void drawGuiContainerForegroundLayer( int i, int j) { + String name = this.launcher.hasCustomInventoryName() ? this.launcher.getInventoryName() : I18n.format(this.launcher.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int i = (int)launcher.getPowerScaled(34); + drawTexturedModalRect(guiLeft + 134, guiTop + 113, 176, 96, i, 6); + + int j = (int)launcher.getSolidScaled(52); + drawTexturedModalRect(guiLeft + 152, guiTop + 88 - j, 176, 96 - j, 16, j); + + if(launcher.isMissileValid()) + drawTexturedModalRect(guiLeft + 25, guiTop + 35, 176, 26, 18, 18); + + if(launcher.hasDesignator()) + drawTexturedModalRect(guiLeft + 25, guiTop + 71, 176, 26, 18, 18); + + if(launcher.liquidState() == 1) + drawTexturedModalRect(guiLeft + 121, guiTop + 23, 176, 0, 6, 8); + if(launcher.liquidState() == 0) + drawTexturedModalRect(guiLeft + 121, guiTop + 23, 182, 0, 6, 8); + + if(launcher.oxidizerState() == 1) + drawTexturedModalRect(guiLeft + 139, guiTop + 23, 176, 0, 6, 8); + if(launcher.oxidizerState() == 0) + drawTexturedModalRect(guiLeft + 139, guiTop + 23, 182, 0, 6, 8); + + if(launcher.solidState() == 1) + drawTexturedModalRect(guiLeft + 157, guiTop + 23, 176, 0, 6, 8); + if(launcher.solidState() == 0) + drawTexturedModalRect(guiLeft + 157, guiTop + 23, 182, 0, 6, 8); + + switch(launcher.padSize) { + + case SIZE_10: + drawTexturedModalRect(guiLeft + 7, guiTop + 98, 176, 8, 18, 18); + break; + case SIZE_15: + drawTexturedModalRect(guiLeft + 25, guiTop + 98, 194, 8, 18, 18); + break; + case SIZE_20: + drawTexturedModalRect(guiLeft + 43, guiTop + 98, 212, 8, 18, 18); + break; + default: + break; + + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(launcher.tanks[0].getSheet()); + launcher.tanks[0].renderTank(this, guiLeft + 116, guiTop + 88, launcher.tanks[0].getTankType().textureX() * FluidTank.x, launcher.tanks[0].getTankType().textureY() * FluidTank.y, 16, 52); + + Minecraft.getMinecraft().getTextureManager().bindTexture(launcher.tanks[1].getSheet()); + launcher.tanks[1].renderTank(this, guiLeft + 134, guiTop + 88, launcher.tanks[1].getTankType().textureX() * FluidTank.x, launcher.tanks[1].getTankType().textureY() * FluidTank.y, 16, 52); + + /// DRAW MISSILE START + GL11.glPushMatrix(); + + MissileMultipart missile; + + if(launcher.isMissileValid()) { + ItemStack custom = launcher.getStackInSlot(0); + + missile = new MissileMultipart(); + + missile = MissileMultipart.loadFromStruct(ItemCustomMissile.getStruct(custom)); + + GL11.glTranslatef(guiLeft + 88, guiTop + 115, 100); + + double size = 5 * 18; + double scale = size / Math.max(missile.getHeight(), 6); + + GL11.glRotatef(90, 0, 1, 0); + GL11.glTranslated(missile.getHeight() / 2D * scale, 0, 0); + GL11.glScaled(scale, scale, scale); + + GL11.glScalef(-1, -1, -1); + + MissilePronter.prontMissile(missile, Minecraft.getMinecraft().getTextureManager()); + } + + GL11.glPopMatrix(); + /// DRAW MISSILE END + } +} diff --git a/com/hbm/items/ModItems.java b/com/hbm/items/ModItems.java index 53ce6c13d..5633e7f08 100644 --- a/com/hbm/items/ModItems.java +++ b/com/hbm/items/ModItems.java @@ -900,6 +900,7 @@ public class ModItems { public static Item mp_warhead_10_buster; public static Item mp_warhead_10_nuclear; public static Item mp_warhead_10_nuclear_large; + public static Item mp_warhead_10_taint; public static Item mp_warhead_15_he; public static Item mp_warhead_15_incendiary; public static Item mp_warhead_15_nuclear; @@ -2494,11 +2495,12 @@ public class ModItems { mp_warhead_10_buster = new ItemMissile().makeWarhead(WarheadType.BUSTER, 5F, 1.5F, PartSize.SIZE_10) .setUnlocalizedName("mp_warhead_10_buster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_warhead_10_nuclear = new ItemMissile().makeWarhead(WarheadType.NUCLEAR, 35F, 1.5F, PartSize.SIZE_10) .setUnlocalizedName("mp_warhead_10_nuclear").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_warhead_10_nuclear_large = new ItemMissile().makeWarhead(WarheadType.NUCLEAR, 75F, 2.5F, PartSize.SIZE_10) .setUnlocalizedName("mp_warhead_10_nuclear_large").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_10_taint = new ItemMissile().makeWarhead(WarheadType.TAINT, 15F, 1.5F, PartSize.SIZE_10) .setUnlocalizedName("mp_warhead_10_taint").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_warhead_15_he = new ItemMissile().makeWarhead(WarheadType.HE, 50F, 2.5F, PartSize.SIZE_15) .setUnlocalizedName("mp_warhead_15_he").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_warhead_15_incendiary = new ItemMissile().makeWarhead(WarheadType.INC, 35F, 2.5F, PartSize.SIZE_15) .setUnlocalizedName("mp_warhead_15_incendiary").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_warhead_15_nuclear = new ItemMissile().makeWarhead(WarheadType.NUCLEAR, 125F, 5F, PartSize.SIZE_15) .setUnlocalizedName("mp_warhead_15_nuclear").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_warhead_15_nuclear_shark = new ItemMissile().makeWarhead(WarheadType.NUCLEAR, 125F, 5F, PartSize.SIZE_15) .setUnlocalizedName("mp_warhead_15_nuclear_shark").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); - mp_warhead_15_boxcar = new ItemMissile().makeWarhead(WarheadType.NUCLEAR, 15F, 7.5F, PartSize.SIZE_15) .setUnlocalizedName("mp_warhead_15_boxcar").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); + mp_warhead_15_boxcar = new ItemMissile().makeWarhead(WarheadType.TX, 250F, 7.5F, PartSize.SIZE_15) .setUnlocalizedName("mp_warhead_15_boxcar").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_warhead_15_n2 = new ItemMissile().makeWarhead(WarheadType.N2, 100F, 5F, PartSize.SIZE_15) .setUnlocalizedName("mp_warhead_15_n2").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_warhead_20_he = new ItemMissile().makeWarhead(WarheadType.HE, 15F, 1F, PartSize.SIZE_20) .setUnlocalizedName("mp_w_20").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_warhead"); mp_chip_1 = new ItemMissile().makeChip(0.1F) .setUnlocalizedName("mp_c_1").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_1"); @@ -4263,6 +4265,7 @@ public class ModItems { GameRegistry.registerItem(mp_warhead_10_buster, mp_warhead_10_buster.getUnlocalizedName()); GameRegistry.registerItem(mp_warhead_10_nuclear, mp_warhead_10_nuclear.getUnlocalizedName()); GameRegistry.registerItem(mp_warhead_10_nuclear_large, mp_warhead_10_nuclear_large.getUnlocalizedName()); + GameRegistry.registerItem(mp_warhead_10_taint, mp_warhead_10_taint.getUnlocalizedName()); GameRegistry.registerItem(mp_warhead_15_he, mp_warhead_15_he.getUnlocalizedName()); GameRegistry.registerItem(mp_warhead_15_incendiary, mp_warhead_15_incendiary.getUnlocalizedName()); GameRegistry.registerItem(mp_warhead_15_nuclear, mp_warhead_15_nuclear.getUnlocalizedName()); diff --git a/com/hbm/items/weapon/ItemCustomMissile.java b/com/hbm/items/weapon/ItemCustomMissile.java index 23d4c16d7..3927aab0e 100644 --- a/com/hbm/items/weapon/ItemCustomMissile.java +++ b/com/hbm/items/weapon/ItemCustomMissile.java @@ -2,10 +2,10 @@ package com.hbm.items.weapon; import java.util.List; +import com.hbm.handler.MissileStruct; import com.hbm.items.ModItems; import com.hbm.items.weapon.ItemMissile.FuelType; import com.hbm.items.weapon.ItemMissile.WarheadType; -import com.hbm.render.misc.MissileMultipart; import com.hbm.render.misc.MissilePart; import net.minecraft.client.resources.I18n; @@ -13,9 +13,19 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; public class ItemCustomMissile extends Item { + + public static ItemStack buildMissile(Item chip, Item warhead, Item fuselage, Item stability, Item thruster) { + + if(stability == null) { + return buildMissile(new ItemStack(chip), new ItemStack(warhead), new ItemStack(fuselage), null, new ItemStack(thruster)); + } else { + return buildMissile(new ItemStack(chip), new ItemStack(warhead), new ItemStack(fuselage), new ItemStack(stability), new ItemStack(thruster)); + } + } public static ItemStack buildMissile(ItemStack chip, ItemStack warhead, ItemStack fuselage, ItemStack stability, ItemStack thruster) { @@ -53,15 +63,19 @@ public class ItemCustomMissile extends Item { ItemMissile stability = (ItemMissile) Item.getItemById(readFromNBT(stack, "stability")); ItemMissile thruster = (ItemMissile) Item.getItemById(readFromNBT(stack, "thruster")); - list.add(I18n.format(StatCollector.translateToLocal(chip.getUnlocalizedName() + ".name")).trim()); - list.add(I18n.format(StatCollector.translateToLocal(warhead.getUnlocalizedName() + ".name")).trim()); - list.add(I18n.format(StatCollector.translateToLocal(fuselage.getUnlocalizedName() + ".name")).trim()); + list.add(EnumChatFormatting.BOLD + "Warhead: " + EnumChatFormatting.GRAY + warhead.getWarhead((WarheadType)warhead.attributes[0])); + list.add(EnumChatFormatting.BOLD + "Strength: " + EnumChatFormatting.GRAY + (Float)warhead.attributes[1]); + list.add(EnumChatFormatting.BOLD + "Fuel Type: " + EnumChatFormatting.GRAY + fuselage.getFuel((FuelType)fuselage.attributes[0])); + list.add(EnumChatFormatting.BOLD + "Fuel amount: " + EnumChatFormatting.GRAY + (Float)fuselage.attributes[1] + "l"); + list.add(EnumChatFormatting.BOLD + "Chip inaccuracy: " + EnumChatFormatting.GRAY + (Float)chip.attributes[0] * 100 + "%"); if(stability != null) - list.add(I18n.format(StatCollector.translateToLocal(stability.getUnlocalizedName() + ".name")).trim()); - list.add(I18n.format(StatCollector.translateToLocal(thruster.getUnlocalizedName() + ".name")).trim()); + list.add(EnumChatFormatting.BOLD + "Fin inaccuracy: " + EnumChatFormatting.GRAY + (Float)stability.attributes[0] * 100 + "%"); + else + list.add(EnumChatFormatting.BOLD + "Fin inaccuracy: " + EnumChatFormatting.GRAY + "100%"); + list.add(EnumChatFormatting.BOLD + "Size: " + EnumChatFormatting.GRAY + fuselage.getSize(fuselage.top) + "/" + fuselage.getSize(fuselage.bottom)); } - public static MissileMultipart getMultipart(ItemStack stack) { + public static MissileStruct getStruct(ItemStack stack) { if(stack == null || !(stack.getItem() instanceof ItemCustomMissile)) return null; @@ -71,12 +85,7 @@ public class ItemCustomMissile extends Item { ItemMissile stability = (ItemMissile) Item.getItemById(readFromNBT(stack, "stability")); ItemMissile thruster = (ItemMissile) Item.getItemById(readFromNBT(stack, "thruster")); - MissileMultipart missile = new MissileMultipart(); - - missile.warhead = MissilePart.getPart(warhead); - missile.fuselage = MissilePart.getPart(fuselage); - missile.fins = MissilePart.getPart(stability); - missile.thruster = MissilePart.getPart(thruster); + MissileStruct missile = new MissileStruct(warhead, fuselage, stability, thruster); return missile; } diff --git a/com/hbm/items/weapon/ItemMissile.java b/com/hbm/items/weapon/ItemMissile.java index 7b61a5e2f..14c6d481a 100644 --- a/com/hbm/items/weapon/ItemMissile.java +++ b/com/hbm/items/weapon/ItemMissile.java @@ -153,29 +153,29 @@ public class ItemMissile extends Item { try { switch(type) { case CHIP: - list.add("Inaccuracy: " + (Float)attributes[0]); + list.add(EnumChatFormatting.BOLD + "Inaccuracy: " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%"); break; case WARHEAD: - list.add("Size: " + getSize(bottom)); - list.add("Type: " + getWarhead((WarheadType)attributes[0])); - list.add("Strength: " + (Float)attributes[1]); - list.add("Weight: " + (Float)attributes[2] + "t"); + list.add(EnumChatFormatting.BOLD + "Size: " + EnumChatFormatting.GRAY + getSize(bottom)); + list.add(EnumChatFormatting.BOLD + "Type: " + EnumChatFormatting.GRAY + getWarhead((WarheadType)attributes[0])); + list.add(EnumChatFormatting.BOLD + "Strength: " + EnumChatFormatting.GRAY + (Float)attributes[1]); + list.add(EnumChatFormatting.BOLD + "Weight: " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t"); break; case FUSELAGE: - list.add("Top size: " + getSize(top)); - list.add("Bottom size: " + getSize(bottom)); - list.add("Fuel type: " + getFuel((FuelType)attributes[0])); - list.add("Fuel amount: " + (Float)attributes[1] + "l"); + list.add(EnumChatFormatting.BOLD + "Top size: " + EnumChatFormatting.GRAY + getSize(top)); + list.add(EnumChatFormatting.BOLD + "Bottom size: " + EnumChatFormatting.GRAY + getSize(bottom)); + list.add(EnumChatFormatting.BOLD + "Fuel type: " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0])); + list.add(EnumChatFormatting.BOLD + "Fuel amount: " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l"); break; case FINS: - list.add("Size: " + getSize(top)); - list.add("Inaccuracy: " + (Float)attributes[0]); + list.add(EnumChatFormatting.BOLD + "Size: " + EnumChatFormatting.GRAY + getSize(top)); + list.add(EnumChatFormatting.BOLD + "Inaccuracy: " + EnumChatFormatting.GRAY + (Float)attributes[0] * 100 + "%"); break; case THRUSTER: - list.add("Size: " + getSize(top)); - list.add("Fuel type: " + getFuel((FuelType)attributes[0])); - list.add("Fuel consumption: " + (Float)attributes[1] + "l/tick"); - list.add("Max. payload: " + (Float)attributes[2] + "t"); + list.add(EnumChatFormatting.BOLD + "Size: " + EnumChatFormatting.GRAY + getSize(top)); + list.add(EnumChatFormatting.BOLD + "Fuel type: " + EnumChatFormatting.GRAY + getFuel((FuelType)attributes[0])); + list.add(EnumChatFormatting.BOLD + "Fuel consumption: " + EnumChatFormatting.GRAY + (Float)attributes[1] + "l/tick"); + list.add(EnumChatFormatting.BOLD + "Max. payload: " + EnumChatFormatting.GRAY + (Float)attributes[2] + "t"); break; } } catch(Exception ex) { @@ -183,7 +183,7 @@ public class ItemMissile extends Item { } } - private String getSize(PartSize size) { + public String getSize(PartSize size) { switch(size) { case ANY: @@ -199,51 +199,51 @@ public class ItemMissile extends Item { } } - private String getWarhead(WarheadType type) { + public String getWarhead(WarheadType type) { switch(type) { case HE: - return "HE"; + return EnumChatFormatting.YELLOW + "HE"; case INC: - return "Incendiary"; + return EnumChatFormatting.GOLD + "Incendiary"; case CLUSTER: - return "Cluster"; + return EnumChatFormatting.GRAY + "Cluster"; case BUSTER: - return "Bunker Buster"; + return EnumChatFormatting.WHITE + "Bunker Buster"; case NUCLEAR: - return "Nuclear"; + return EnumChatFormatting.DARK_GREEN + "Nuclear"; case TX: - return "Thermonuclear"; + return EnumChatFormatting.DARK_PURPLE + "Thermonuclear (TX)"; case N2: - return "N²"; + return EnumChatFormatting.RED + "N²"; case BALEFIRE: - return "BF"; + return EnumChatFormatting.GREEN + "BF"; case SCHRAB: - return "Schrabidium"; + return EnumChatFormatting.AQUA + "Schrabidium"; case TAINT: - return "Taint"; + return EnumChatFormatting.DARK_PURPLE + "Taint"; case CLOUD: - return "Cloud"; + return EnumChatFormatting.LIGHT_PURPLE + "Cloud"; default: - return "N/A"; + return EnumChatFormatting.BOLD + "N/A"; } } - private String getFuel(FuelType type) { + public String getFuel(FuelType type) { switch(type) { case KEROSENE: - return "Kerosene"; + return EnumChatFormatting.LIGHT_PURPLE + "Kerosene / Peroxide"; case SOLID: - return "Solid Fuel"; + return EnumChatFormatting.GOLD + "Solid Fuel"; case HYDROGEN: - return "Hydrogen"; + return EnumChatFormatting.DARK_AQUA + "Hydrogen / Oxygen"; case XENON: - return "Xenon Gas"; + return EnumChatFormatting.DARK_PURPLE + "Xenon Gas"; case BALEFIRE: - return "BF Inferno Fuel"; + return EnumChatFormatting.GREEN + "BF Inferno Fuel / Peroxide"; default: - return "N/A"; + return EnumChatFormatting.BOLD + "N/A"; } } diff --git a/com/hbm/lib/Library.java b/com/hbm/lib/Library.java index 6fe597bed..417006ca9 100644 --- a/com/hbm/lib/Library.java +++ b/com/hbm/lib/Library.java @@ -426,7 +426,8 @@ public class Library { world.getBlock(x, y, z) == ModBlocks.dummy_port_ams_emitter || world.getBlock(x, y, z) == ModBlocks.dummy_port_ams_base || world.getBlock(x, y, z) == ModBlocks.dummy_port_radgen || - world.getBlock(x, y, z) == ModBlocks.dummy_port_compact_launcher) + world.getBlock(x, y, z) == ModBlocks.dummy_port_compact_launcher || + world.getBlock(x, y, z) == ModBlocks.dummy_port_launch_table) { return true; } @@ -456,7 +457,8 @@ public class Library { world.getBlock(x, y, z) == ModBlocks.dummy_port_ams_emitter || world.getBlock(x, y, z) == ModBlocks.dummy_port_ams_base || world.getBlock(x, y, z) == ModBlocks.dummy_port_reactor_small || - world.getBlock(x, y, z) == ModBlocks.dummy_port_compact_launcher) + world.getBlock(x, y, z) == ModBlocks.dummy_port_compact_launcher || + world.getBlock(x, y, z) == ModBlocks.dummy_port_launch_table) { return true; } @@ -911,8 +913,8 @@ public class Library { { tileentity = worldObj.getTileEntity(((TileEntityDummy)worldObj.getTileEntity(x, y, z)).targetX, ((TileEntityDummy)worldObj.getTileEntity(x, y, z)).targetY, ((TileEntityDummy)worldObj.getTileEntity(x, y, z)).targetZ); } - //Compact Launcher - if(block == ModBlocks.dummy_port_compact_launcher) + //Launchers + if(block == ModBlocks.dummy_port_compact_launcher || block == ModBlocks.dummy_port_launch_table) { tileentity = worldObj.getTileEntity(((TileEntityDummy)worldObj.getTileEntity(x, y, z)).targetX, ((TileEntityDummy)worldObj.getTileEntity(x, y, z)).targetY, ((TileEntityDummy)worldObj.getTileEntity(x, y, z)).targetZ); } @@ -1138,8 +1140,8 @@ public class Library { { tileentity = worldObj.getTileEntity(((TileEntityDummy)worldObj.getTileEntity(x, y, z)).targetX, ((TileEntityDummy)worldObj.getTileEntity(x, y, z)).targetY, ((TileEntityDummy)worldObj.getTileEntity(x, y, z)).targetZ); } - //Compact Launcher - if(block == ModBlocks.dummy_port_compact_launcher) + //Launchers + if(block == ModBlocks.dummy_port_compact_launcher || block == ModBlocks.dummy_port_launch_table) { tileentity = worldObj.getTileEntity(((TileEntityDummy)worldObj.getTileEntity(x, y, z)).targetX, ((TileEntityDummy)worldObj.getTileEntity(x, y, z)).targetY, ((TileEntityDummy)worldObj.getTileEntity(x, y, z)).targetZ); } diff --git a/com/hbm/lib/RefStrings.java b/com/hbm/lib/RefStrings.java index 913426f32..737d1ac42 100644 --- a/com/hbm/lib/RefStrings.java +++ b/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (3111)"; + public static final String VERSION = "1.0.27 BETA (3147B)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/com/hbm/main/ClientProxy.java b/com/hbm/main/ClientProxy.java index 1befe5ff4..986c862c8 100644 --- a/com/hbm/main/ClientProxy.java +++ b/com/hbm/main/ClientProxy.java @@ -327,6 +327,7 @@ public class ClientProxy extends ServerProxy ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPylonRedWire.class, new RenderPylon()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityStructureMarker.class, new RenderStructureMaker()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMultiblock.class, new RenderMultiblock()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSBase.class, new RenderAMSBase()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSEmitter.class, new RenderAMSEmitter()); @@ -401,7 +402,7 @@ public class ClientProxy extends ServerProxy MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_corner), new ItemRenderDecoBlock()); MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_roof), new ItemRenderDecoBlock()); MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_beam), new ItemRenderDecoBlock()); - MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_scaffold), new ItemRenderDecoBlock()); + //MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_scaffold), new ItemRenderDecoBlock()); RenderingRegistry.registerEntityRenderingHandler(EntityNuclearCreeper.class, new RenderNuclearCreeper()); RenderingRegistry.registerEntityRenderingHandler(EntityTaintedCreeper.class, new RenderTaintedCreeper()); @@ -442,6 +443,8 @@ public class ClientProxy extends ServerProxy @Override public void registerMissileItems() { + MissilePart.registerAllParts(); + Iterator it = MissilePart.parts.entrySet().iterator(); while (it.hasNext()) { diff --git a/com/hbm/main/CraftingManager.java b/com/hbm/main/CraftingManager.java index c1aed73c5..99aa7720c 100644 --- a/com/hbm/main/CraftingManager.java +++ b/com/hbm/main/CraftingManager.java @@ -1561,6 +1561,11 @@ public class CraftingManager { GameRegistry.addShapelessRecipe(new ItemStack(ModItems.bobmazon_machines), new Object[] { Items.book, Items.gold_nugget, new ItemStack(Items.dye, 1, 1) }); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.bobmazon_weapons), new Object[] { Items.book, Items.gold_nugget, new ItemStack(Items.dye, 1, 8) }); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.bobmazon_tools), new Object[] { Items.book, Items.gold_nugget, new ItemStack(Items.dye, 1, 2) }); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_missile_assembly, 1), new Object[] { "PWP", "SSS", "CCC", 'P', ModItems.pedestal_steel, 'W', ModItems.wrench, 'S', "plateSteel", 'C', ModBlocks.steel_scaffold })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.struct_launcher, 1), new Object[] { "PPP", "SDS", "CCC", 'P', "plateSteel", 'S', ModBlocks.steel_scaffold, 'D', ModItems.pipes_steel, 'C', ModBlocks.concrete_smooth })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.struct_launcher, 1), new Object[] { "PPP", "SDS", "CCC", 'P', "plateSteel", 'S', ModBlocks.steel_scaffold, 'D', ModItems.pipes_steel, 'C', ModBlocks.concrete })); + GameRegistry.addRecipe(new ItemStack(ModBlocks.struct_scaffold, 1), new Object[] { "SSS", "DCD", "SSS", 'S', ModBlocks.steel_scaffold, 'D', ModBlocks.fluid_duct, 'C', ModBlocks.red_cable }); } public static void AddSmeltingRec() diff --git a/com/hbm/main/MainRegistry.java b/com/hbm/main/MainRegistry.java index dc06fc52c..88d8354af 100644 --- a/com/hbm/main/MainRegistry.java +++ b/com/hbm/main/MainRegistry.java @@ -529,6 +529,7 @@ public class MainRegistry GameRegistry.registerTileEntity(TileEntityMachineMissileAssembly.class, "tileentity_missile_assembly"); GameRegistry.registerTileEntity(TileEntityLaunchTable.class, "tileentity_large_launch_table"); GameRegistry.registerTileEntity(TileEntityCompactLauncher.class, "tileentity_small_launcher"); + GameRegistry.registerTileEntity(TileEntityMultiblock.class, "tileentity_multi_core"); EntityRegistry.registerModEntity(EntityRocket.class, "entity_rocket", 0, this, 250, 1, true); EntityRegistry.registerModEntity(EntityNukeExplosion.class, "entity_nuke_explosion", 1, this, 250, 1, true); @@ -1472,8 +1473,6 @@ public class MainRegistry TileEntityMachineReactorLarge.registerWasteEntry(12, ReactorFuelType.THORIUM, ModItems.rod_dual_empty, ModItems.rod_dual_thorium_fuel_depleted); TileEntityMachineReactorLarge.registerWasteEntry(24, ReactorFuelType.THORIUM, ModItems.rod_quad_empty, ModItems.rod_quad_thorium_fuel_depleted); - MissilePart.registerAllParts(); - proxy.registerMissileItems(); } diff --git a/com/hbm/main/ResourceManager.java b/com/hbm/main/ResourceManager.java index f7ec126ee..7dd05db9b 100644 --- a/com/hbm/main/ResourceManager.java +++ b/com/hbm/main/ResourceManager.java @@ -321,6 +321,15 @@ public class ResourceManager { public static final IModelCustom missile_assembly = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_assembly.obj")); public static final IModelCustom strut = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/strut.obj")); public static final IModelCustom compact_launcher = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/compact_launcher.obj")); + public static final IModelCustom launch_table_base = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/launch_table/launch_table_base.obj")); + public static final IModelCustom launch_table_large_pad = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/launch_table/launch_table_large_pad.obj")); + public static final IModelCustom launch_table_small_pad = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/launch_table/launch_table_small_pad.obj")); + public static final IModelCustom launch_table_large_scaffold_base = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/launch_table/launch_table_large_scaffold_base.obj")); + public static final IModelCustom launch_table_large_scaffold_connector = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/launch_table/launch_table_large_scaffold_connector.obj")); + public static final IModelCustom launch_table_large_scaffold_empty = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/launch_table/launch_table_large_scaffold_empty.obj")); + public static final IModelCustom launch_table_small_scaffold_base = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/launch_table/launch_table_small_scaffold_base.obj")); + public static final IModelCustom launch_table_small_scaffold_connector = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/launch_table/launch_table_small_scaffold_connector.obj")); + public static final IModelCustom launch_table_small_scaffold_empty = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/launch_table/launch_table_small_scaffold_empty.obj")); public static final IModelCustom mp_t_10_kerosene = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_t_10_kerosene.obj")); public static final IModelCustom mp_t_10_solid = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_t_10_solid.obj")); @@ -354,6 +363,7 @@ public class ResourceManager { public static final IModelCustom mp_w_10_buster = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_w_10_buster.obj")); public static final IModelCustom mp_w_10_nuclear = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_w_10_nuclear.obj")); public static final IModelCustom mp_w_10_nuclear_large = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_w_10_nuclear_large.obj")); + public static final IModelCustom mp_w_10_taint = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_w_10_taint.obj")); public static final IModelCustom mp_w_15_he = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_w_15_he.obj")); public static final IModelCustom mp_w_15_incendiary = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_w_15_incendiary.obj")); public static final IModelCustom mp_w_15_nuclear = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/missile_parts/mp_w_15_nuclear.obj")); @@ -426,6 +436,13 @@ public class ResourceManager { public static final ResourceLocation missile_assembly_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_assembly.png"); public static final ResourceLocation strut_tex = new ResourceLocation(RefStrings.MODID, "textures/models/strut.png"); public static final ResourceLocation compact_launcher_tex = new ResourceLocation(RefStrings.MODID, "textures/models/compact_launcher.png"); + public static final ResourceLocation launch_table_base_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/launch_table.png"); + public static final ResourceLocation launch_table_large_pad_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/launch_table_large_pad.png"); + public static final ResourceLocation launch_table_small_pad_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/launch_table_small_pad.png"); + public static final ResourceLocation launch_table_large_scaffold_base_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/launch_table_large_scaffold_base.png"); + public static final ResourceLocation launch_table_large_scaffold_connector_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/launch_table_large_scaffold_connector.png"); + public static final ResourceLocation launch_table_small_scaffold_base_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/launch_table_small_scaffold_base.png"); + public static final ResourceLocation launch_table_small_scaffold_connector_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/launch_table_small_scaffold_connector.png"); public static final ResourceLocation mp_t_10_kerosene_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/thrusters/mp_t_10_kerosene.png"); public static final ResourceLocation mp_t_10_solid_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/thrusters/mp_t_10_solid.png"); @@ -497,9 +514,14 @@ public class ResourceManager { public static final ResourceLocation mp_w_10_buster_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/warheads/mp_w_10_buster.png"); public static final ResourceLocation mp_w_10_nuclear_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/warheads/mp_w_10_nuclear.png"); public static final ResourceLocation mp_w_10_nuclear_large_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/warheads/mp_w_10_nuclear_large.png"); + public static final ResourceLocation mp_w_10_taint_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/warheads/mp_w_10_taint.png"); public static final ResourceLocation mp_w_15_he_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/warheads/mp_w_15_he.png"); public static final ResourceLocation mp_w_15_incendiary_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/warheads/mp_w_15_incendiary.png"); public static final ResourceLocation mp_w_15_nuclear_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/warheads/mp_w_15_nuclear.png"); public static final ResourceLocation mp_w_15_nuclear_shark_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/warheads/mp_w_15_nuclear_shark.png"); public static final ResourceLocation mp_w_15_n2_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_parts/warheads/mp_w_15_n2.png"); + + //ISBRHs + public static final IModelCustom scaffold = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/scaffold.obj")); + } diff --git a/com/hbm/packet/AuxButtonPacket.java b/com/hbm/packet/AuxButtonPacket.java index c23122c55..04e2e8955 100644 --- a/com/hbm/packet/AuxButtonPacket.java +++ b/com/hbm/packet/AuxButtonPacket.java @@ -2,8 +2,10 @@ package com.hbm.packet; import com.hbm.explosion.ExplosionLarge; import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.items.weapon.ItemMissile.PartSize; import com.hbm.saveddata.SatelliteSaveStructure; import com.hbm.saveddata.SatelliteSavedData; +import com.hbm.tileentity.bomb.TileEntityLaunchTable; import com.hbm.tileentity.bomb.TileEntityTurretCIWS; import com.hbm.tileentity.bomb.TileEntityTurretCheapo; import com.hbm.tileentity.machine.TileEntityAMSBase; @@ -211,6 +213,12 @@ public class AuxButtonPacket implements IMessage { assembly.construct(); } + if (te instanceof TileEntityLaunchTable) { + TileEntityLaunchTable launcher = (TileEntityLaunchTable)te; + + launcher.padSize = PartSize.values()[m.value]; + } + //} catch (Exception x) { } return null; diff --git a/com/hbm/packet/AuxGaugePacket.java b/com/hbm/packet/AuxGaugePacket.java index da92634c4..aaf2d6692 100644 --- a/com/hbm/packet/AuxGaugePacket.java +++ b/com/hbm/packet/AuxGaugePacket.java @@ -2,7 +2,9 @@ package com.hbm.packet; import com.hbm.interfaces.IConsumer; import com.hbm.interfaces.ISource; +import com.hbm.items.weapon.ItemMissile.PartSize; import com.hbm.tileentity.bomb.TileEntityCompactLauncher; +import com.hbm.tileentity.bomb.TileEntityLaunchTable; import com.hbm.tileentity.bomb.TileEntityNukeCustom; import com.hbm.tileentity.bomb.TileEntityNukeN45; import com.hbm.tileentity.bomb.TileEntityTurretCIWS; @@ -242,6 +244,14 @@ public class AuxGaugePacket implements IMessage { launcher.solid = m.value; } + if (te instanceof TileEntityLaunchTable) { + TileEntityLaunchTable launcher = (TileEntityLaunchTable)te; + + if(m.id == 0) + launcher.solid = m.value; + if(m.id == 1) + launcher.padSize = PartSize.values()[m.value]; + } } catch (Exception x) {} return null; diff --git a/com/hbm/packet/TEMissileMultipartPacket.java b/com/hbm/packet/TEMissileMultipartPacket.java index 67920cbdf..e4106dc2d 100644 --- a/com/hbm/packet/TEMissileMultipartPacket.java +++ b/com/hbm/packet/TEMissileMultipartPacket.java @@ -1,8 +1,9 @@ package com.hbm.packet; +import com.hbm.handler.MissileStruct; import com.hbm.main.MainRegistry; -import com.hbm.render.misc.MissileMultipart; import com.hbm.tileentity.bomb.TileEntityCompactLauncher; +import com.hbm.tileentity.bomb.TileEntityLaunchTable; import com.hbm.tileentity.conductor.TileEntityFluidDuct; import com.hbm.tileentity.machine.TileEntityMachineMissileAssembly; @@ -18,14 +19,14 @@ public class TEMissileMultipartPacket implements IMessage { int x; int y; int z; - MissileMultipart missile; + MissileStruct missile; public TEMissileMultipartPacket() { } - public TEMissileMultipartPacket(int x, int y, int z, MissileMultipart missile) + public TEMissileMultipartPacket(int x, int y, int z, MissileStruct missile) { this.x = x; this.y = y; @@ -38,7 +39,7 @@ public class TEMissileMultipartPacket implements IMessage { x = buf.readInt(); y = buf.readInt(); z = buf.readInt(); - missile = MissileMultipart.readFromByteBuffer(buf); + missile = MissileStruct.readFromByteBuffer(buf); } @Override @@ -62,6 +63,12 @@ public class TEMissileMultipartPacket implements IMessage { launcher.load = m.missile; } + if (te != null && te instanceof TileEntityLaunchTable) { + + TileEntityLaunchTable launcher = (TileEntityLaunchTable) te; + launcher.load = m.missile; + } + if (te != null && te instanceof TileEntityMachineMissileAssembly) { TileEntityMachineMissileAssembly rack = (TileEntityMachineMissileAssembly) te; diff --git a/com/hbm/render/block/ObjUtil.java b/com/hbm/render/block/ObjUtil.java new file mode 100644 index 000000000..e2dd745c4 --- /dev/null +++ b/com/hbm/render/block/ObjUtil.java @@ -0,0 +1,49 @@ +package com.hbm.render.block; + +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.util.Vec3; +import net.minecraftforge.client.model.obj.Face; +import net.minecraftforge.client.model.obj.GroupObject; +import net.minecraftforge.client.model.obj.TextureCoordinate; +import net.minecraftforge.client.model.obj.Vertex; +import net.minecraftforge.client.model.obj.WavefrontObject; + +public class ObjUtil { + + public static void renderWithIcon(WavefrontObject model, IIcon icon, Tessellator tes, float rot, boolean shadow) + { + for(GroupObject go : model.groupObjects) + { + for(Face f : go.faces) { + + Vertex n = f.faceNormal; + tes.setNormal(n.x, n.y, n.z); + + if(shadow) { + float brightness = (n.y + 1) * 0.65F; + tes.setColorOpaque_F(brightness, brightness, brightness); + } + + for(int i = 0; i < f.vertices.length; i++) { + + Vertex v = f.vertices[i]; + + Vec3 vec = Vec3.createVectorHelper(v.x, v.y, v.z); + vec.rotateAroundY(rot); + + float x = (float)vec.xCoord; + float y = (float)vec.yCoord; + float z = (float)vec.zCoord; + + TextureCoordinate t = f.textureCoordinates[i]; + tes.addVertexWithUV(x, y, z, icon.getInterpolatedU(t.u * 16), icon.getInterpolatedV(t.v * 16)); + + //The shoddy way of rendering a tringulated model with a quad tessellator + if(i % 3 == 2) + tes.addVertexWithUV(x, y, z, icon.getInterpolatedU(t.u * 16), icon.getInterpolatedV(t.v * 16)); + } + } + } + } +} diff --git a/com/hbm/render/block/RenderRoofBlock.java b/com/hbm/render/block/RenderRoofBlock.java index 31a4e5e41..f2b787286 100644 --- a/com/hbm/render/block/RenderRoofBlock.java +++ b/com/hbm/render/block/RenderRoofBlock.java @@ -3,6 +3,7 @@ package com.hbm.render.block; import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; +import com.hbm.main.ResourceManager; import com.hbm.render.model.ModelSteelRoof; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; @@ -13,11 +14,30 @@ import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; import net.minecraft.world.IBlockAccess; +import net.minecraftforge.client.model.obj.WavefrontObject; public class RenderRoofBlock implements ISimpleBlockRenderingHandler { @Override - public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { } + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + GL11.glPushMatrix(); + Tessellator tessellator = Tessellator.instance; + IIcon iicon = block.getIcon(0, 0); + tessellator.setColorOpaque_F(1, 1, 1); + + if (renderer.hasOverrideBlockTexture()) + { + iicon = renderer.overrideBlockTexture; + } + + GL11.glTranslated(0, -0.5, 0); + tessellator.startDrawingQuads(); + ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.scaffold, iicon, tessellator, 0, false); + tessellator.draw(); + + GL11.glPopMatrix(); + } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { @@ -36,12 +56,32 @@ public class RenderRoofBlock implements ISimpleBlockRenderingHandler { Tessellator.instance.startDrawing(0);*/ + Tessellator tessellator = Tessellator.instance; + IIcon iicon = block.getIcon(0, world.getBlockMetadata(x, y, z)); + + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + tessellator.setColorOpaque_F(1, 1, 1); + + if (renderer.hasOverrideBlockTexture()) + { + iicon = renderer.overrideBlockTexture; + } + + float rotation = (float) -Math.PI; + + if(world.getBlockMetadata(x, y, z) < 4) + rotation = -90F / 180F * (float)Math.PI; + + tessellator.addTranslation(x + 0.5F, y, z + 0.5F); + ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.scaffold, iicon, tessellator, rotation, true); + tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F); + return true; } @Override public boolean shouldRender3DInInventory(int modelId) { - return false; + return true; } @Override diff --git a/com/hbm/render/item/ItemRenderMissile.java b/com/hbm/render/item/ItemRenderMissile.java index 76830c2c4..9b6607020 100644 --- a/com/hbm/render/item/ItemRenderMissile.java +++ b/com/hbm/render/item/ItemRenderMissile.java @@ -38,9 +38,7 @@ public class ItemRenderMissile implements IItemRenderer { @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { - MissileMultipart missile = new MissileMultipart(); - - missile = ItemCustomMissile.getMultipart(item); + MissileMultipart missile = MissileMultipart.loadFromStruct(ItemCustomMissile.getStruct(item)); GL11.glPushMatrix(); diff --git a/com/hbm/render/misc/MissileMultipart.java b/com/hbm/render/misc/MissileMultipart.java index 156f55c17..63828d7d7 100644 --- a/com/hbm/render/misc/MissileMultipart.java +++ b/com/hbm/render/misc/MissileMultipart.java @@ -1,10 +1,14 @@ package com.hbm.render.misc; +import com.hbm.handler.MissileStruct; import com.hbm.items.weapon.ItemMissile.PartType; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.item.Item; +@SideOnly(Side.CLIENT) public class MissileMultipart { public MissilePart warhead; @@ -26,7 +30,22 @@ public class MissileMultipart { return height; } - public void writeToByteBuffer(ByteBuf buf) { + public static MissileMultipart loadFromStruct(MissileStruct struct) { + + if(struct == null) + return null; + + MissileMultipart multipart = new MissileMultipart(); + + multipart.warhead = MissilePart.getPart(struct.warhead); + multipart.fuselage = MissilePart.getPart(struct.fuselage); + multipart.fins = MissilePart.getPart(struct.fins); + multipart.thruster = MissilePart.getPart(struct.thruster); + + return multipart; + } + + /*public void writeToByteBuffer(ByteBuf buf) { if(warhead != null && warhead.type == PartType.WARHEAD) @@ -72,5 +91,5 @@ public class MissileMultipart { multipart.thruster = MissilePart.getPart(Item.getItemById(t)); return multipart; - } + }*/ } diff --git a/com/hbm/render/misc/MissilePart.java b/com/hbm/render/misc/MissilePart.java index d227ccf82..5c3bef639 100644 --- a/com/hbm/render/misc/MissilePart.java +++ b/com/hbm/render/misc/MissilePart.java @@ -123,6 +123,7 @@ public class MissilePart { MissilePart.registerPart(ModItems.mp_warhead_10_buster, PartType.WARHEAD, 0.5, 1, ResourceManager.mp_w_10_buster, ResourceManager.mp_w_10_buster_tex); MissilePart.registerPart(ModItems.mp_warhead_10_nuclear, PartType.WARHEAD, 2, 1.5, ResourceManager.mp_w_10_nuclear, ResourceManager.mp_w_10_nuclear_tex); MissilePart.registerPart(ModItems.mp_warhead_10_nuclear_large, PartType.WARHEAD, 2.5, 1.5, ResourceManager.mp_w_10_nuclear_large, ResourceManager.mp_w_10_nuclear_large_tex); + MissilePart.registerPart(ModItems.mp_warhead_10_taint, PartType.WARHEAD, 2.25, 1.5, ResourceManager.mp_w_10_taint, ResourceManager.mp_w_10_taint_tex); // MissilePart.registerPart(ModItems.mp_warhead_15_he, PartType.WARHEAD, 2, 1.5, ResourceManager.mp_w_15_he, ResourceManager.mp_w_15_he_tex); MissilePart.registerPart(ModItems.mp_warhead_15_incendiary, PartType.WARHEAD, 2, 1.5, ResourceManager.mp_w_15_incendiary, ResourceManager.mp_w_15_incendiary_tex); diff --git a/com/hbm/render/tileentity/RenderCompactLauncher.java b/com/hbm/render/tileentity/RenderCompactLauncher.java index e5bd76f53..78b683b7d 100644 --- a/com/hbm/render/tileentity/RenderCompactLauncher.java +++ b/com/hbm/render/tileentity/RenderCompactLauncher.java @@ -44,7 +44,7 @@ public class RenderCompactLauncher extends TileEntitySpecialRenderer { //missile = ItemCustomMissile.getMultipart(custom); - MissilePronter.prontMissile(launcher.load, Minecraft.getMinecraft().getTextureManager()); + MissilePronter.prontMissile(MissileMultipart.loadFromStruct(launcher.load), Minecraft.getMinecraft().getTextureManager()); // } diff --git a/com/hbm/render/tileentity/RenderLaunchTable.java b/com/hbm/render/tileentity/RenderLaunchTable.java index 6d08ac881..aefa844f4 100644 --- a/com/hbm/render/tileentity/RenderLaunchTable.java +++ b/com/hbm/render/tileentity/RenderLaunchTable.java @@ -2,12 +2,21 @@ package com.hbm.render.tileentity; import org.lwjgl.opengl.GL11; +import com.hbm.items.weapon.ItemMissile; +import com.hbm.items.weapon.ItemMissile.PartSize; import com.hbm.main.ResourceManager; import com.hbm.render.misc.ErrorPronter; +import com.hbm.render.misc.MissileMultipart; +import com.hbm.render.misc.MissilePronter; import com.hbm.render.misc.SoyuzPronter; +import com.hbm.tileentity.bomb.TileEntityCompactLauncher; +import com.hbm.tileentity.bomb.TileEntityLaunchTable; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModelCustom; public class RenderLaunchTable extends TileEntitySpecialRenderer { @@ -17,8 +26,93 @@ public class RenderLaunchTable extends TileEntitySpecialRenderer { GL11.glPushMatrix(); GL11.glTranslatef((float) x + 0.5F, (float) y, (float) z + 0.5F); + GL11.glEnable(GL11.GL_CULL_FACE); - SoyuzPronter.prontSoyuz(); + switch(tileentity.getBlockMetadata()) + { + case 2: + GL11.glRotatef(0, 0F, 1F, 0F); break; + case 0: + GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: + GL11.glRotatef(180, 0F, 1F, 0F); break; + case 1: + GL11.glRotatef(270, 0F, 1F, 0F); break; + } + + TileEntityLaunchTable launcher = (TileEntityLaunchTable)tileentity; + + bindTexture(ResourceManager.launch_table_base_tex); + ResourceManager.launch_table_base.renderAll(); + + if(launcher.padSize == PartSize.SIZE_10 || launcher.padSize == PartSize.SIZE_15) { + bindTexture(ResourceManager.launch_table_small_pad_tex); + ResourceManager.launch_table_small_pad.renderAll(); + } + if(launcher.padSize == PartSize.SIZE_20) { + bindTexture(ResourceManager.launch_table_large_pad_tex); + ResourceManager.launch_table_large_pad.renderAll(); + } + + GL11.glPushMatrix(); + + if(launcher.load != null) { + MissileMultipart mp = MissileMultipart.loadFromStruct(launcher.load); + + if(mp != null && mp.fuselage != null) + launcher.height = (int) mp.getHeight(); + } + + int height = (int) (launcher.height * 0.75); + ResourceLocation base = ResourceManager.launch_table_large_scaffold_base_tex; + ResourceLocation connector = ResourceManager.launch_table_large_scaffold_connector_tex; + IModelCustom baseM = ResourceManager.launch_table_large_scaffold_base; + IModelCustom connectorM = ResourceManager.launch_table_large_scaffold_connector; + IModelCustom emptyM = ResourceManager.launch_table_large_scaffold_empty; + + + if(launcher.padSize == PartSize.SIZE_10) { + base = ResourceManager.launch_table_small_scaffold_base_tex; + connector = ResourceManager.launch_table_small_scaffold_connector_tex; + baseM = ResourceManager.launch_table_small_scaffold_base; + connectorM = ResourceManager.launch_table_small_scaffold_connector; + emptyM = ResourceManager.launch_table_small_scaffold_empty; + GL11.glTranslatef(0F, 0F, -1F); + } + GL11.glTranslatef(0F, 1F, 3.5F); + for(int i = 0; i < launcher.height + 1; i++) { + + if(i < height) { + bindTexture(base); + baseM.renderAll(); + } else if(i > height) { + bindTexture(base); + emptyM.renderAll(); + } else { + + if(launcher.load != null && launcher.load.fuselage != null && ((ItemMissile)launcher.load.fuselage).top == launcher.padSize) { + bindTexture(connector); + connectorM.renderAll(); + } else { + bindTexture(base); + baseM.renderAll(); + } + } + + GL11.glTranslatef(0F, 1F, 0F); + } + GL11.glPopMatrix(); + + GL11.glTranslatef(0F, 2.0625F, 0F); + + /// DRAW MISSILE START + GL11.glPushMatrix(); + + if(launcher.load != null && launcher.load.fuselage != null && launcher.load.fuselage.top == launcher.padSize) + MissilePronter.prontMissile(MissileMultipart.loadFromStruct(launcher.load), Minecraft.getMinecraft().getTextureManager()); + + GL11.glPopMatrix(); + /// DRAW MISSILE END GL11.glPopMatrix(); } diff --git a/com/hbm/render/tileentity/RenderMissileAssembly.java b/com/hbm/render/tileentity/RenderMissileAssembly.java index a99db0b3d..0b8eaf3ff 100644 --- a/com/hbm/render/tileentity/RenderMissileAssembly.java +++ b/com/hbm/render/tileentity/RenderMissileAssembly.java @@ -46,7 +46,7 @@ public class RenderMissileAssembly extends TileEntitySpecialRenderer { bindTexture(ResourceManager.missile_assembly_tex); ResourceManager.missile_assembly.renderAll(); - MissileMultipart missile = te.load; + MissileMultipart missile = MissileMultipart.loadFromStruct(te.load); if(missile != null) { diff --git a/com/hbm/render/tileentity/RenderMultiblock.java b/com/hbm/render/tileentity/RenderMultiblock.java new file mode 100644 index 000000000..165232cb7 --- /dev/null +++ b/com/hbm/render/tileentity/RenderMultiblock.java @@ -0,0 +1,152 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.lib.RefStrings; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; + +public class RenderMultiblock extends TileEntitySpecialRenderer { + + float pixel = 1F/16F; + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float f) { + + GL11.glPushMatrix(); + + GL11.glTranslatef((float)x + 1, (float)y + 1, (float)z); + + GL11.glEnable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_CULL_FACE); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.75F); + GL11.glDisable(GL11.GL_ALPHA_TEST); + + Block b = te.getBlockType(); + + if(b == ModBlocks.struct_launcher_core) + renderCompactLauncher(); + + if(b == ModBlocks.struct_launcher_core_large) + renderLaunchTable(); + + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + + GL11.glPopMatrix(); + } + + private void renderCompactLauncher() { + + RenderBlocks rb = RenderBlocks.getInstance(); + + IIcon icon = rb.getBlockIconFromSide(ModBlocks.struct_launcher, 1); + + ResourceLocation loc = new ResourceLocation(RefStrings.MODID + ":textures/blocks/" + icon.getIconName().substring(4, icon.getIconName().length()) + ".png"); + + for(int i = -1; i <= 1; i++) + for(int j = -1; j <= 1; j++) + if(i != 0 || j != 0) + renderSmolBlockAt(loc, i, 0, j); + } + + private void renderLaunchTable() { + + RenderBlocks rb = RenderBlocks.getInstance(); + + IIcon icon = rb.getBlockIconFromSide(ModBlocks.struct_launcher, 1); + ResourceLocation loc = new ResourceLocation(RefStrings.MODID + ":textures/blocks/" + icon.getIconName().substring(4, icon.getIconName().length()) + ".png"); + + for(int i = -4; i <= 4; i++) + for(int j = -4; j <= 4; j++) + if(i != 0 || j != 0) + renderSmolBlockAt(loc, i, 0, j); + + icon = rb.getBlockIconFromSide(ModBlocks.struct_scaffold, 1); + loc = new ResourceLocation(RefStrings.MODID + ":textures/blocks/" + icon.getIconName().substring(4, icon.getIconName().length()) + ".png"); + + switch((int)(System.currentTimeMillis() % 4000 / 1000)) { + case 0: + for(int k = 1; k < 12; k++) + renderSmolBlockAt(loc, 3, k, 0); + break; + + case 1: + for(int k = 1; k < 12; k++) + renderSmolBlockAt(loc, 0, k, 3); + break; + + case 2: + for(int k = 1; k < 12; k++) + renderSmolBlockAt(loc, -3, k, 0); + break; + + case 3: + for(int k = 1; k < 12; k++) + renderSmolBlockAt(loc, 0, k, -3); + break; + } + } + + public void renderSmolBlockAt(ResourceLocation loc, int x, int y, int z) { + GL11.glPushMatrix(); + GL11.glTranslatef(x, y, z); + GL11.glRotatef(180, 0F, 0F, 1F); + + Tessellator tesseract = Tessellator.instance; + tesseract.startDrawingQuads(); + this.bindTexture(loc); + tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 1, 0); + tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 0, 0); + tesseract.addVertexWithUV(11 * pixel / 2, 11 * pixel / 2, 1 - 11 * pixel / 2, 0, 1); + tesseract.addVertexWithUV(1 - 11 * pixel / 2, 11 * pixel / 2, 1 - 11 * pixel / 2, 1, 1); + tesseract.draw(); + + tesseract.startDrawingQuads(); + tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 1, 0); + tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 0, 0); + tesseract.addVertexWithUV(1 - 11 * pixel / 2, 11 * pixel / 2, 1 - 11 * pixel / 2, 0, 1); + tesseract.addVertexWithUV(1 - 11 * pixel / 2, 11 * pixel / 2, 11 * pixel / 2, 1, 1); + tesseract.draw(); + + tesseract.startDrawingQuads(); + tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 1, 0); + tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 0, 0); + tesseract.addVertexWithUV(1 - 11 * pixel / 2, 11 * pixel / 2, 11 * pixel / 2, 0, 1); + tesseract.addVertexWithUV(11 * pixel / 2, 11 * pixel / 2, 11 * pixel / 2, 1, 1); + tesseract.draw(); + + tesseract.startDrawingQuads(); + tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 1, 0); + tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 0, 0); + tesseract.addVertexWithUV(11 * pixel / 2, 11 * pixel / 2, 11 * pixel / 2, 0, 1); + tesseract.addVertexWithUV(11 * pixel / 2, 11 * pixel / 2, 1 - 11 * pixel / 2, 1, 1); + tesseract.draw(); + + tesseract.startDrawingQuads(); + tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 1, 0); + tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 0, 0); + tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 0, 1); + tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 1, 1); + tesseract.draw(); + + tesseract.startDrawingQuads(); + tesseract.addVertexWithUV(11 * pixel / 2, 11 * pixel / 2, 11 * pixel / 2, 1, 0); + tesseract.addVertexWithUV(1 - 11 * pixel / 2, 11 * pixel / 2, 11 * pixel / 2, 0, 0); + tesseract.addVertexWithUV(1 - 11 * pixel / 2, 11 * pixel / 2, 1 - 11 * pixel / 2, 0, 1); + tesseract.addVertexWithUV(11 * pixel / 2, 11 * pixel / 2, 1 - 11 * pixel / 2, 1, 1); + tesseract.draw(); + GL11.glPopMatrix(); + + } + +} diff --git a/com/hbm/render/tileentity/RenderPylon.java b/com/hbm/render/tileentity/RenderPylon.java index 75d0da8c7..d6fbc11f1 100644 --- a/com/hbm/render/tileentity/RenderPylon.java +++ b/com/hbm/render/tileentity/RenderPylon.java @@ -31,8 +31,29 @@ public class RenderPylon extends TileEntitySpecialRenderer { this.pylon.renderAll(0.0625F); GL11.glPopMatrix(); GL11.glPushMatrix(); - for(TileEntityPylonRedWire wire : pyl.connected) - drawPowerLine(x + 0.5, y + 5.3, z + 0.5, x + (wire.xCoord - pyl.xCoord) + 0.5, y + (wire.yCoord - pyl.yCoord) + 5.3, z + (wire.zCoord - pyl.zCoord) + 0.5); + + for(int i = 0; i < pyl.connected.size(); i++) { + + TileEntityPylonRedWire wire = pyl.connected.get(i); + + float wX = (wire.xCoord - pyl.xCoord) / 2F; + float wY = (wire.yCoord - pyl.yCoord) / 2F; + float wZ = (wire.zCoord - pyl.zCoord) / 2F; + + float count = 10; + for(float j = 0; j < count; j++) { + + float k = j + 1; + + drawPowerLine( + x + 0.5 + (wX * j / count), + y + 5.4 + (wY * j / count) - Math.sin(j / count * Math.PI * 0.5), + z + 0.5 + (wZ * j / count), + x + 0.5 + (wX * k / count), + y + 5.4 + (wY * k / count) - Math.sin(k / count * Math.PI * 0.5), + z + 0.5 + (wZ * k / count)); + } + } GL11.glPopMatrix(); } @@ -42,21 +63,24 @@ public class RenderPylon extends TileEntitySpecialRenderer { GL11.glDisable(GL11.GL_CULL_FACE); Tessellator tessellator = Tessellator.instance; tessellator.startDrawing(5); - tessellator.setColorRGBA_F(0.683F, 0.089F, 0.0F, 1.0F); + tessellator.setColorOpaque_I(0xBB3311); + //tessellator.setColorRGBA_F(0.683F, 0.089F, 0.0F, 1.0F); tessellator.addVertex(x, y + 0.05F, z); tessellator.addVertex(x, y - 0.05F, z); tessellator.addVertex(a, b + 0.05F, c); tessellator.addVertex(a, b - 0.05F, c); tessellator.draw(); tessellator.startDrawing(5); - tessellator.setColorRGBA_F(0.683F, 0.089F, 0.0F, 1.0F); + tessellator.setColorOpaque_I(0xBB3311); + //tessellator.setColorRGBA_F(0.683F, 0.089F, 0.0F, 1.0F); tessellator.addVertex(x + 0.05F, y, z); tessellator.addVertex(x - 0.05F, y, z); tessellator.addVertex(a + 0.05F, b, c); tessellator.addVertex(a - 0.05F, b, c); tessellator.draw(); tessellator.startDrawing(5); - tessellator.setColorRGBA_F(0.683F, 0.089F, 0.0F, 1.0F); + tessellator.setColorOpaque_I(0xBB3311); + //tessellator.setColorRGBA_F(0.683F, 0.089F, 0.0F, 1.0F); tessellator.addVertex(x, y, z + 0.05F); tessellator.addVertex(x, y, z - 0.05F); tessellator.addVertex(a, b, c + 0.05F); diff --git a/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java b/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java index e972f36dd..1288dce8d 100644 --- a/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java +++ b/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java @@ -5,6 +5,7 @@ import java.util.List; import com.hbm.entity.missile.EntityMissileCustom; import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.handler.MissileStruct; import com.hbm.interfaces.IConsumer; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidContainer; @@ -21,7 +22,6 @@ import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.TEMissileMultipartPacket; -import com.hbm.render.misc.MissileMultipart; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -44,7 +44,7 @@ public class TileEntityCompactLauncher extends TileEntity implements ISidedInven public static final int maxSolid = 25000; public FluidTank[] tanks; - public MissileMultipart load; + public MissileStruct load; private static final int[] access = new int[] { 0 }; @@ -179,12 +179,12 @@ public class TileEntityCompactLauncher extends TileEntity implements ISidedInven PacketDispatcher.wrapper.sendToAll(new AuxElectricityPacket(xCoord, yCoord, zCoord, power)); PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, solid, 0)); - MissileMultipart multipart = getMultipart(slots[0]); + MissileStruct multipart = getStruct(slots[0]); if(multipart != null) PacketDispatcher.wrapper.sendToAll(new TEMissileMultipartPacket(xCoord, yCoord, zCoord, multipart)); else - PacketDispatcher.wrapper.sendToAll(new TEMissileMultipartPacket(xCoord, yCoord, zCoord, new MissileMultipart())); + PacketDispatcher.wrapper.sendToAll(new TEMissileMultipartPacket(xCoord, yCoord, zCoord, new MissileStruct())); if(power >= maxPower * 0.75 && isMissileValid() && hasDesignator() && hasFuel()) { @@ -223,7 +223,7 @@ public class TileEntityCompactLauncher extends TileEntity implements ISidedInven int tX = slots[1].stackTagCompound.getInteger("xCoord"); int tZ = slots[1].stackTagCompound.getInteger("zCoord"); - EntityMissileCustom missile = new EntityMissileCustom(worldObj, xCoord + 0.5F, yCoord + 2.5F, zCoord + 0.5F, tX, tZ, getMultipart(slots[0])); + EntityMissileCustom missile = new EntityMissileCustom(worldObj, xCoord + 0.5F, yCoord + 2.5F, zCoord + 0.5F, tX, tZ, getStruct(slots[0])); worldObj.spawnEntityInWorld(missile); subtractFuel(); @@ -238,12 +238,12 @@ public class TileEntityCompactLauncher extends TileEntity implements ISidedInven private void subtractFuel() { - MissileMultipart multipart = getMultipart(slots[0]); + MissileStruct multipart = getStruct(slots[0]); if(multipart == null || multipart.fuselage == null) return; - ItemMissile fuselage = (ItemMissile)multipart.fuselage.part; + ItemMissile fuselage = (ItemMissile)multipart.fuselage; float f = (Float)fuselage.attributes[1]; int fuel = (int)f; @@ -272,19 +272,19 @@ public class TileEntityCompactLauncher extends TileEntity implements ISidedInven this.power -= maxPower * 0.75; } - public static MissileMultipart getMultipart(ItemStack stack) { + public static MissileStruct getStruct(ItemStack stack) { - return ItemCustomMissile.getMultipart(stack); + return ItemCustomMissile.getStruct(stack); } public boolean isMissileValid() { - MissileMultipart multipart = getMultipart(slots[0]); + MissileStruct multipart = getStruct(slots[0]); if(multipart == null || multipart.fuselage == null) return false; - ItemMissile fuselage = (ItemMissile)multipart.fuselage.part; + ItemMissile fuselage = (ItemMissile)multipart.fuselage; return fuselage.top == PartSize.SIZE_10; } @@ -301,12 +301,12 @@ public class TileEntityCompactLauncher extends TileEntity implements ISidedInven public int solidState() { - MissileMultipart multipart = getMultipart(slots[0]); + MissileStruct multipart = getStruct(slots[0]); if(multipart == null || multipart.fuselage == null) return -1; - ItemMissile fuselage = (ItemMissile)multipart.fuselage.part; + ItemMissile fuselage = (ItemMissile)multipart.fuselage; if((FuelType)fuselage.attributes[0] == FuelType.SOLID) { @@ -321,12 +321,12 @@ public class TileEntityCompactLauncher extends TileEntity implements ISidedInven public int liquidState() { - MissileMultipart multipart = getMultipart(slots[0]); + MissileStruct multipart = getStruct(slots[0]); if(multipart == null || multipart.fuselage == null) return -1; - ItemMissile fuselage = (ItemMissile)multipart.fuselage.part; + ItemMissile fuselage = (ItemMissile)multipart.fuselage; switch((FuelType)fuselage.attributes[0]) { case KEROSENE: @@ -346,12 +346,12 @@ public class TileEntityCompactLauncher extends TileEntity implements ISidedInven public int oxidizerState() { - MissileMultipart multipart = getMultipart(slots[0]); + MissileStruct multipart = getStruct(slots[0]); if(multipart == null || multipart.fuselage == null) return -1; - ItemMissile fuselage = (ItemMissile)multipart.fuselage.part; + ItemMissile fuselage = (ItemMissile)multipart.fuselage; switch((FuelType)fuselage.attributes[0]) { case KEROSENE: @@ -370,12 +370,12 @@ public class TileEntityCompactLauncher extends TileEntity implements ISidedInven public void updateTypes() { - MissileMultipart multipart = getMultipart(slots[0]); + MissileStruct multipart = getStruct(slots[0]); if(multipart == null || multipart.fuselage == null) return; - ItemMissile fuselage = (ItemMissile)multipart.fuselage.part; + ItemMissile fuselage = (ItemMissile)multipart.fuselage; switch((FuelType)fuselage.attributes[0]) { case KEROSENE: diff --git a/com/hbm/tileentity/bomb/TileEntityLaunchTable.java b/com/hbm/tileentity/bomb/TileEntityLaunchTable.java index 7bda360e8..498eec694 100644 --- a/com/hbm/tileentity/bomb/TileEntityLaunchTable.java +++ b/com/hbm/tileentity/bomb/TileEntityLaunchTable.java @@ -1,11 +1,514 @@ package com.hbm.tileentity.bomb; +import java.util.ArrayList; +import java.util.List; + +import com.hbm.entity.missile.EntityMissileCustom; +import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.handler.MissileStruct; +import com.hbm.interfaces.IConsumer; +import com.hbm.interfaces.IFluidAcceptor; +import com.hbm.interfaces.IFluidContainer; +import com.hbm.inventory.FluidTank; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.ItemCustomMissile; +import com.hbm.items.weapon.ItemMissile; +import com.hbm.items.weapon.ItemMissile.FuelType; +import com.hbm.items.weapon.ItemMissile.PartSize; +import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; +import com.hbm.packet.AuxElectricityPacket; +import com.hbm.packet.AuxGaugePacket; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.TEMissileMultipartPacket; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -public class TileEntityLaunchTable extends TileEntity { +public class TileEntityLaunchTable extends TileEntity implements ISidedInventory, IConsumer, IFluidContainer, IFluidAcceptor { + + private ItemStack slots[]; + + public long power; + public static final long maxPower = 100000; + public int solid; + public static final int maxSolid = 100000; + public FluidTank[] tanks; + public PartSize padSize; + public int height; + + public MissileStruct load; + + private static final int[] access = new int[] { 0 }; + + private String customName; + + public TileEntityLaunchTable() { + slots = new ItemStack[6]; + tanks = new FluidTank[2]; + tanks[0] = new FluidTank(FluidType.NONE, 100000, 0); + tanks[1] = new FluidTank(FluidType.NONE, 100000, 1); + padSize = PartSize.SIZE_10; + height = 10; + } + + @Override + public int getSizeInventory() { + return slots.length; + } + + @Override + public ItemStack getStackInSlot(int i) { + return slots[i]; + } + + @Override + public ItemStack getStackInSlotOnClosing(int i) { + if (slots[i] != null) { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } else { + return null; + } + } + + @Override + public void setInventorySlotContents(int i, ItemStack itemStack) { + slots[i] = itemStack; + if (itemStack != null && itemStack.stackSize > getInventoryStackLimit()) { + itemStack.stackSize = getInventoryStackLimit(); + } + } + + @Override + public String getInventoryName() { + return this.hasCustomInventoryName() ? this.customName : "container.launchTable"; + } + + @Override + public boolean hasCustomInventoryName() { + return this.customName != null && this.customName.length() > 0; + } + + public void setCustomName(String name) { + this.customName = name; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + if (worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) { + return false; + } else { + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 64; + } + } + + // You scrubs aren't needed for anything (right now) + @Override + public void openInventory() { + } + + @Override + public void closeInventory() { + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack) { + return false; + } + + @Override + public ItemStack decrStackSize(int i, int j) { + if (slots[i] != null) { + if (slots[i].stackSize <= j) { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } + ItemStack itemStack1 = slots[i].splitStack(j); + if (slots[i].stackSize == 0) { + slots[i] = null; + } + + return itemStack1; + } else { + return null; + } + } + + public long getPowerScaled(long i) { + return (power * i) / maxPower; + } + + public int getSolidScaled(int i) { + return (solid * i) / maxSolid; + } + + @Override + public void updateEntity() { + + if (!worldObj.isRemote) { + + updateTypes(); + + tanks[0].loadTank(2, 3, slots); + tanks[1].loadTank(2, 3, slots); + + for (int i = 0; i < 2; i++) + tanks[i].updateTank(xCoord, yCoord, zCoord); + + power = Library.chargeTEFromItems(slots, 5, power, maxPower); + + if(slots[4] != null && slots[4].getItem() == ModItems.rocket_fuel && solid + 250 <= maxSolid) { + + this.decrStackSize(4, 1); + solid += 250; + } + + PacketDispatcher.wrapper.sendToAll(new AuxElectricityPacket(xCoord, yCoord, zCoord, power)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, solid, 0)); + PacketDispatcher.wrapper.sendToAll(new AuxGaugePacket(xCoord, yCoord, zCoord, padSize.ordinal(), 1)); + + MissileStruct multipart = getStruct(slots[0]); + + if(multipart != null) + PacketDispatcher.wrapper.sendToAll(new TEMissileMultipartPacket(xCoord, yCoord, zCoord, multipart)); + else + PacketDispatcher.wrapper.sendToAll(new TEMissileMultipartPacket(xCoord, yCoord, zCoord, new MissileStruct())); + + if(power >= maxPower * 0.75 && isMissileValid() && hasDesignator() && hasFuel()) { + + outer: + for(int x = -4; x <= 4; x++) { + for(int z = -4; z <= 4; z++) { + + if(worldObj.isBlockIndirectlyGettingPowered(xCoord + x, yCoord, zCoord + z)) { + launch(); + break outer; + } + } + } + } + } else { + + List entities = worldObj.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(xCoord - 0.5, yCoord, zCoord - 0.5, xCoord + 1.5, yCoord + 10, zCoord + 1.5)); + + for(Entity e : entities) { + + if(e instanceof EntityMissileCustom) { + + for(int i = 0; i < 15; i++) + MainRegistry.proxy.spawnParticle(xCoord + 0.5, yCoord + 0.25, zCoord + 0.5, "largelaunchsmoke", null); + + break; + } + } + } + } + + private void launch() { + + worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:weapon.missileTakeOff", 10.0F, 1.0F); + + int tX = slots[1].stackTagCompound.getInteger("xCoord"); + int tZ = slots[1].stackTagCompound.getInteger("zCoord"); + + EntityMissileCustom missile = new EntityMissileCustom(worldObj, xCoord + 0.5F, yCoord + 2.5F, zCoord + 0.5F, tX, tZ, getStruct(slots[0])); + worldObj.spawnEntityInWorld(missile); + + subtractFuel(); + + slots[0] = null; + } + + private boolean hasFuel() { + + return solidState() != 0 && liquidState() != 0 && oxidizerState() != 0; + } + + private void subtractFuel() { + + MissileStruct multipart = getStruct(slots[0]); + + if(multipart == null || multipart.fuselage == null) + return; + + ItemMissile fuselage = (ItemMissile)multipart.fuselage; + + float f = (Float)fuselage.attributes[1]; + int fuel = (int)f; + + switch((FuelType)fuselage.attributes[0]) { + case KEROSENE: + tanks[0].setFill(tanks[0].getFill() - fuel); + tanks[1].setFill(tanks[1].getFill() - fuel); + break; + case HYDROGEN: + tanks[0].setFill(tanks[0].getFill() - fuel); + tanks[1].setFill(tanks[1].getFill() - fuel); + break; + case XENON: + tanks[0].setFill(tanks[0].getFill() - fuel); + break; + case BALEFIRE: + tanks[0].setFill(tanks[0].getFill() - fuel); + tanks[1].setFill(tanks[1].getFill() - fuel); + break; + case SOLID: + this.solid -= fuel; break; + default: break; + } + + this.power -= maxPower * 0.75; + } + + public static MissileStruct getStruct(ItemStack stack) { + + return ItemCustomMissile.getStruct(stack); + } + + public boolean isMissileValid() { + + MissileStruct multipart = getStruct(slots[0]); + + if(multipart == null || multipart.fuselage == null) + return false; + + ItemMissile fuselage = (ItemMissile)multipart.fuselage; + + return fuselage.top == padSize; + } + + public boolean hasDesignator() { + + if(slots[1] != null) { + + return (slots[1].getItem() == ModItems.designator || slots[1].getItem() == ModItems.designator_range || slots[1].getItem() == ModItems.designator_manual) && slots[1].hasTagCompound(); + } + + return false; + } + + public int solidState() { + + MissileStruct multipart = getStruct(slots[0]); + + if(multipart == null || multipart.fuselage == null) + return -1; + + ItemMissile fuselage = (ItemMissile)multipart.fuselage; + + if((FuelType)fuselage.attributes[0] == FuelType.SOLID) { + + if(solid >= (Float)fuselage.attributes[1]) + return 1; + else + return 0; + } + + return -1; + } + + public int liquidState() { + + MissileStruct multipart = getStruct(slots[0]); + + if(multipart == null || multipart.fuselage == null) + return -1; + + ItemMissile fuselage = (ItemMissile)multipart.fuselage; + + switch((FuelType)fuselage.attributes[0]) { + case KEROSENE: + case HYDROGEN: + case XENON: + case BALEFIRE: + + if(tanks[0].getFill() >= (Float)fuselage.attributes[1]) + return 1; + else + return 0; + default: break; + } + + return -1; + } + + public int oxidizerState() { + + MissileStruct multipart = getStruct(slots[0]); + + if(multipart == null || multipart.fuselage == null) + return -1; + + ItemMissile fuselage = (ItemMissile)multipart.fuselage; + + switch((FuelType)fuselage.attributes[0]) { + case KEROSENE: + case HYDROGEN: + case BALEFIRE: + + if(tanks[1].getFill() >= (Float)fuselage.attributes[1]) + return 1; + else + return 0; + default: break; + } + + return -1; + } + + public void updateTypes() { + + MissileStruct multipart = getStruct(slots[0]); + + if(multipart == null || multipart.fuselage == null) + return; + + ItemMissile fuselage = (ItemMissile)multipart.fuselage; + + switch((FuelType)fuselage.attributes[0]) { + case KEROSENE: + tanks[0].setTankType(FluidType.KEROSENE); + tanks[1].setTankType(FluidType.ACID); + break; + case HYDROGEN: + tanks[0].setTankType(FluidType.HYDROGEN); + tanks[1].setTankType(FluidType.OXYGEN); + break; + case XENON: + tanks[0].setTankType(FluidType.XENON); + break; + case BALEFIRE: + tanks[0].setTankType(FluidType.BALEFIRE); + tanks[1].setTankType(FluidType.ACID); + break; + default: break; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + NBTTagList list = nbt.getTagList("items", 10); + + tanks[0].readFromNBT(nbt, "fuel"); + tanks[1].readFromNBT(nbt, "oxidizer"); + solid = nbt.getInteger("solidfuel"); + power = nbt.getLong("power"); + padSize = PartSize.values()[nbt.getInteger("padSize")]; + + slots = new ItemStack[getSizeInventory()]; + + for (int i = 0; i < list.tagCount(); i++) { + NBTTagCompound nbt1 = list.getCompoundTagAt(i); + byte b0 = nbt1.getByte("slot"); + if (b0 >= 0 && b0 < slots.length) { + slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + NBTTagList list = new NBTTagList(); + + tanks[0].writeToNBT(nbt, "fuel"); + tanks[1].writeToNBT(nbt, "oxidizer"); + nbt.setInteger("solidfuel", solid); + nbt.setLong("power", power); + nbt.setInteger("padSize", padSize.ordinal()); + + for (int i = 0; i < slots.length; i++) { + if (slots[i] != null) { + NBTTagCompound nbt1 = new NBTTagCompound(); + nbt1.setByte("slot", (byte) i); + slots[i].writeToNBT(nbt1); + list.appendTag(nbt1); + } + } + nbt.setTag("items", list); + } + + @Override + public int[] getAccessibleSlotsFromSide(int p_94128_1_) { + return access; + } + + @Override + public boolean canInsertItem(int i, ItemStack itemStack, int j) { + return this.isItemValidForSlot(i, itemStack); + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return false; + } + + @Override + public int getMaxFluidFill(FluidType type) { + if (type.name().equals(tanks[0].getTankType().name())) + return tanks[0].getMaxFill(); + else if (type.name().equals(tanks[1].getTankType().name())) + return tanks[1].getMaxFill(); + else + return 0; + } + + @Override + public void setFillstate(int fill, int index) { + if (index < 2 && tanks[index] != null) + tanks[index].setFill(fill); + } + + @Override + public void setFluidFill(int fill, FluidType type) { + if (type.name().equals(tanks[0].getTankType().name())) + tanks[0].setFill(fill); + else if (type.name().equals(tanks[1].getTankType().name())) + tanks[1].setFill(fill); + } + + @Override + public void setType(FluidType type, int index) { + if (index < 2 && tanks[index] != null) + tanks[index].setTankType(type); + } + + @Override + public List getTanks() { + List list = new ArrayList(); + list.add(tanks[0]); + list.add(tanks[1]); + + return list; + } + + @Override + public int getFluidFill(FluidType type) { + if (type.name().equals(tanks[0].getTankType().name())) + return tanks[0].getFill(); + else if (type.name().equals(tanks[1].getTankType().name())) + return tanks[1].getFill(); + else + return 0; + } @Override public AxisAlignedBB getRenderBoundingBox() { @@ -19,4 +522,18 @@ public class TileEntityLaunchTable extends TileEntity { return 65536.0D; } + @Override + public void setPower(long i) { + this.power = i; + } + + @Override + public long getPower() { + return this.power; + } + + @Override + public long getMaxPower() { + return this.maxPower; + } } diff --git a/com/hbm/tileentity/machine/TileEntityDummy.java b/com/hbm/tileentity/machine/TileEntityDummy.java index 121fb3bb4..3ef22edfb 100644 --- a/com/hbm/tileentity/machine/TileEntityDummy.java +++ b/com/hbm/tileentity/machine/TileEntityDummy.java @@ -17,7 +17,6 @@ public class TileEntityDummy extends TileEntity { if(!this.worldObj.isRemote) { if(!(this.worldObj.getBlock(targetX, targetY, targetZ) instanceof IMultiblock)) { worldObj.func_147480_a(xCoord, yCoord, zCoord, false); - //worldObj.setBlock(targetX, targetY, targetZ, Blocks.gold_block); } } } diff --git a/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java b/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java index 26c0edd07..c617c7666 100644 --- a/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java +++ b/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.hbm.handler.FluidTypeHandler.FluidType; +import com.hbm.handler.MissileStruct; import com.hbm.interfaces.IConsumer; import com.hbm.inventory.FluidContainerRegistry; import com.hbm.inventory.FluidTank; @@ -32,7 +33,7 @@ public class TileEntityMachineMissileAssembly extends TileEntity implements ISid private ItemStack slots[]; - public MissileMultipart load; + public MissileStruct load; private static final int[] access = new int[] { 0 }; @@ -185,19 +186,7 @@ public class TileEntityMachineMissileAssembly extends TileEntity implements ISid if(!worldObj.isRemote) { - MissileMultipart multipart = new MissileMultipart(); - - if(slots[1] != null) - multipart.warhead = MissilePart.getPart(slots[1].getItem()); - - if(slots[2] != null) - multipart.fuselage = MissilePart.getPart(slots[2].getItem()); - - if(slots[3] != null) - multipart.fins = MissilePart.getPart(slots[3].getItem()); - - if(slots[4] != null) - multipart.thruster = MissilePart.getPart(slots[4].getItem()); + MissileStruct multipart = new MissileStruct(slots[1], slots[2], slots[3], slots[4]); PacketDispatcher.wrapper.sendToAll(new TEMissileMultipartPacket(xCoord, yCoord, zCoord, multipart)); } diff --git a/com/hbm/tileentity/machine/TileEntityMultiblock.java b/com/hbm/tileentity/machine/TileEntityMultiblock.java new file mode 100644 index 000000000..d5dbb58c5 --- /dev/null +++ b/com/hbm/tileentity/machine/TileEntityMultiblock.java @@ -0,0 +1,205 @@ +package com.hbm.tileentity.machine; + +import com.hbm.blocks.ModBlocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +public class TileEntityMultiblock extends TileEntity { + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(this.getBlockType() == ModBlocks.struct_launcher_core && isCompact()) { + buildCompact(); + } + + if(this.getBlockType() == ModBlocks.struct_launcher_core_large) { + + int meta = isTable(); + + if(meta != -1) + buildTable(meta); + } + } + } + + private boolean isCompact() { + + for(int i = -1; i <= 1; i++) + for(int j = -1; j <= 1; j++) + if(!(i == 0 && j == 0)) + if(worldObj.getBlock(xCoord + i, yCoord, zCoord + j) != ModBlocks.struct_launcher) + return false; + + return true; + } + + private int isTable() { + + for(int i = -4; i <= 4; i++) + for(int j = -4; j <= -4; j++) + if(!(i == 0 && j == 0)) + if(worldObj.getBlock(xCoord + i, yCoord, zCoord + j) != ModBlocks.struct_launcher) + return -1; + + boolean flag = true; + + for(int k = 1; k < 12; k++) { + if(worldObj.getBlock(xCoord + 3, yCoord + k, zCoord) != ModBlocks.struct_scaffold) + flag = false; + } + + if(flag) + return 0; + flag = true; + + for(int k = 1; k < 12; k++) { + if(worldObj.getBlock(xCoord - 3, yCoord + k, zCoord) != ModBlocks.struct_scaffold) + flag = false; + } + + if(flag) + return 1; + flag = true; + + for(int k = 1; k < 12; k++) { + if(worldObj.getBlock(xCoord, yCoord + k, zCoord + 3) != ModBlocks.struct_scaffold) + flag = false; + } + + if(flag) + return 2; + flag = true; + + for(int k = 1; k < 12; k++) { + if(worldObj.getBlock(xCoord, yCoord + k, zCoord - 3) != ModBlocks.struct_scaffold) + flag = false; + } + + if(flag) + return 3; + + return -1; + + } + + private void buildCompact() { + + worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.compact_launcher); + + placeDummy(xCoord + 1, yCoord, zCoord + 1, xCoord, yCoord, zCoord, ModBlocks.dummy_port_compact_launcher); + placeDummy(xCoord + 1, yCoord, zCoord, xCoord, yCoord, zCoord, ModBlocks.dummy_plate_compact_launcher); + placeDummy(xCoord + 1, yCoord, zCoord - 1, xCoord, yCoord, zCoord, ModBlocks.dummy_port_compact_launcher); + placeDummy(xCoord, yCoord, zCoord - 1, xCoord, yCoord, zCoord, ModBlocks.dummy_plate_compact_launcher); + placeDummy(xCoord - 1, yCoord, zCoord - 1, xCoord, yCoord, zCoord, ModBlocks.dummy_port_compact_launcher); + placeDummy(xCoord - 1, yCoord, zCoord, xCoord, yCoord, zCoord, ModBlocks.dummy_plate_compact_launcher); + placeDummy(xCoord - 1, yCoord, zCoord + 1, xCoord, yCoord, zCoord, ModBlocks.dummy_port_compact_launcher); + placeDummy(xCoord, yCoord, zCoord + 1, xCoord, yCoord, zCoord, ModBlocks.dummy_plate_compact_launcher); + } + + private void buildTable(int meta) { + + worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.launch_table, meta, 2); + + switch(meta) { + case 0: + for(int i = 1; i < 12; i++) + worldObj.setBlock(xCoord + 3, yCoord + i, zCoord, Blocks.air); + + for(int i = -4; i <= 4; i++) + if(i != 0) + placeDummy(xCoord + i, yCoord, zCoord, xCoord, yCoord, zCoord, ModBlocks.dummy_port_launch_table); + + for(int i = -4; i <= 4; i++) + if(i != 0) + placeDummy(xCoord, yCoord, zCoord + i, xCoord, yCoord, zCoord, ModBlocks.dummy_plate_launch_table); + + break; + + case 1: + for(int i = 1; i < 12; i++) + worldObj.setBlock(xCoord - 3, yCoord + i, zCoord, Blocks.air); + + for(int i = -4; i <= 4; i++) + if(i != 0) + placeDummy(xCoord + i, yCoord, zCoord, xCoord, yCoord, zCoord, ModBlocks.dummy_port_launch_table); + + for(int i = -4; i <= 4; i++) + if(i != 0) + placeDummy(xCoord, yCoord, zCoord + i, xCoord, yCoord, zCoord, ModBlocks.dummy_plate_launch_table); + + break; + + case 2: + for(int i = 1; i < 12; i++) + worldObj.setBlock(xCoord, yCoord + i, zCoord + 3, Blocks.air); + + for(int i = -4; i <= 4; i++) + if(i != 0) + placeDummy(xCoord + i, yCoord, zCoord, xCoord, yCoord, zCoord, ModBlocks.dummy_plate_launch_table); + + for(int i = -4; i <= 4; i++) + if(i != 0) + placeDummy(xCoord, yCoord, zCoord + i, xCoord, yCoord, zCoord, ModBlocks.dummy_port_launch_table); + + break; + + case 3: + for(int i = 1; i < 12; i++) + worldObj.setBlock(xCoord, yCoord + i, zCoord - 3, Blocks.air); + + for(int i = -4; i <= 4; i++) + if(i != 0) + placeDummy(xCoord + i, yCoord, zCoord, xCoord, yCoord, zCoord, ModBlocks.dummy_plate_launch_table); + + for(int i = -4; i <= 4; i++) + if(i != 0) + placeDummy(xCoord, yCoord, zCoord + i, xCoord, yCoord, zCoord, ModBlocks.dummy_port_launch_table); + + break; + + } + + for(int i = -4; i <= 4; i++) + for(int j = -4; j <= 4; j++) + if(i != 0 && j != 0) + placeDummy(xCoord + i, yCoord, zCoord + j, xCoord, yCoord, zCoord, ModBlocks.dummy_port_launch_table); + + + } + + private void placeDummy(int x, int y, int z, int xCoord, int yCoord, int zCoord, Block block) { + + worldObj.setBlock(x, y, z, block); + + TileEntity te = worldObj.getTileEntity(x, y, z); + + if(te instanceof TileEntityDummy) { + TileEntityDummy dummy = (TileEntityDummy)te; + dummy.targetX = xCoord; + dummy.targetY = yCoord; + dummy.targetZ = zCoord; + } + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return TileEntity.INFINITE_EXTENT_AABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return 65536.0D; + } + +}