From 81ec6e48b910d99f58a48432fcfa760b6281cd56 Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Sat, 11 Apr 2020 00:17:14 +0200 Subject: [PATCH] Setup --- Readme.md | 39 + init.lua | 5 + main.lua | 44 + media/adv_weapons_gatlin_barrel.obj | 301 +++++++ media/adv_weapons_grappling_hook.obj | 826 ++++++++++++++++++ media/adv_weapons_landmine.obj | 136 +++ media/adv_weapons_landmine_buried.obj | 134 +++ media/adv_weapons_turret_base.mtl | 12 + media/adv_weapons_turret_base.obj | 572 ++++++++++++ mine.lua | 108 +++ mod.conf | 4 + special.lua | 369 ++++++++ textures/adv_weapons_bullet.png | Bin 0 -> 149 bytes textures/adv_weapons_crosshair.png | Bin 0 -> 167 bytes textures/adv_weapons_grappling_hook.png | Bin 0 -> 224 bytes .../adv_weapons_grappling_hook_texture.png | Bin 0 -> 855 bytes textures/adv_weapons_landmine.png | Bin 0 -> 2409 bytes textures/adv_weapons_rope_end.png | Bin 0 -> 1067 bytes textures/adv_weapons_rope_side.png | Bin 0 -> 50862 bytes textures/adv_weapons_whip.png | Bin 0 -> 187 bytes textures/aw_bs.png | Bin 0 -> 109 bytes textures/aw_rs.png | Bin 0 -> 109 bytes turret.lua | 172 ++++ 23 files changed, 2722 insertions(+) create mode 100644 Readme.md create mode 100644 init.lua create mode 100644 main.lua create mode 100644 media/adv_weapons_gatlin_barrel.obj create mode 100644 media/adv_weapons_grappling_hook.obj create mode 100644 media/adv_weapons_landmine.obj create mode 100644 media/adv_weapons_landmine_buried.obj create mode 100644 media/adv_weapons_turret_base.mtl create mode 100644 media/adv_weapons_turret_base.obj create mode 100644 mine.lua create mode 100644 mod.conf create mode 100644 special.lua create mode 100644 textures/adv_weapons_bullet.png create mode 100644 textures/adv_weapons_crosshair.png create mode 100644 textures/adv_weapons_grappling_hook.png create mode 100644 textures/adv_weapons_grappling_hook_texture.png create mode 100644 textures/adv_weapons_landmine.png create mode 100644 textures/adv_weapons_rope_end.png create mode 100644 textures/adv_weapons_rope_side.png create mode 100644 textures/adv_weapons_whip.png create mode 100644 textures/aw_bs.png create mode 100644 textures/aw_rs.png create mode 100644 turret.lua diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..4704e9d --- /dev/null +++ b/Readme.md @@ -0,0 +1,39 @@ +# Advanced Weapons + +Adds a variety of advanced weapons. + +## About + +Depends on `modlib` and `tnt`. +Written by LMD aka appguru(eu). Licensed under the GPLv3. + +## Features + +* Explosives + * Landmines + * Place them on full height blocks + * Walking on them triggers explosion + * Can be (un)buried by digging node below them + * Buried landmines are harder to spot & can't be easily picked up +* Special + * ~~Whips~~ temporarily cancelled as unfinished + * High range, average damage + * Causes bleeding & stunning (by chance) + * Right-click to "capture" player + * Drops their wielded item + * Player can't attack while captured + * Can be dragged around + * Unleashed as soon as RMB is released + * Futuristic Grappling Hook + * Throw to hook it somewhere + * Creates Force Beam + * Right-click ascent aid to (de)attach + * Go forwards/backwards on the beam + * Turrets + * Gatlin Gun + * High reload rate, low damage & range + * Turns slowly, so you can try dodging + * Only attacks owners opponents + * Destroying/digging the base destroys the turret +* Many more! + * Soon \ No newline at end of file diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..e7de6f2 --- /dev/null +++ b/init.lua @@ -0,0 +1,5 @@ +adv_weapons = {} +modlib.mod.extend("adv_weapons", "main") +modlib.mod.extend("adv_weapons", "mine") +modlib.mod.extend("adv_weapons", "special") +modlib.mod.extend("adv_weapons", "turret") \ No newline at end of file diff --git a/main.lua b/main.lua new file mode 100644 index 0000000..1f1bafe --- /dev/null +++ b/main.lua @@ -0,0 +1,44 @@ +adv_weapons.is_opponent = function(a, b) return a == b end + +players = {} +last_use = {} + +minetest.register_on_joinplayer(function(player) + players[player:get_player_name()] = {} + last_use[player:get_player_name()] = minetest.get_us_time() +end) + +minetest.register_globalstep(function() + for _, player in pairs(minetest.get_connected_players()) do + local controls = player:get_player_control_bits() + local rmb = controls >= math.pow(2, 8) + if rmb then + local wielded = minetest.registered_items[player:get_wielded_item():get_name()] + if wielded then + local action = wielded.on_place or wielded.on_secondary_use or wielded.on_rightclick + if not action then + local lmb = controls >= math.pow(2, 7) + if lmb then + action = wielded.on_punch or wielded.on_use + end + end + if action then + last_use[player:get_player_name()] = minetest.get_us_time() + end + end + end + end +end) + +minetest.register_on_leaveplayer(function(player) + players[player:get_player_name()] = nil + last_use[player:get_player_name()] = nil +end) + +function get_rotation(direction) + return {x = math.atan2(direction.y, math.sqrt(direction.z*direction.z+direction.x*direction.x)), y = -math.atan2(direction.x, direction.z), z = 0} +end + +function get_rotation_smooth(direction) + return {x = math.pi + math.atan2(direction.y, math.sqrt(direction.z*direction.z+direction.x*direction.x)), y = math.pi-math.atan2(direction.x, direction.z), z = 0} +end \ No newline at end of file diff --git a/media/adv_weapons_gatlin_barrel.obj b/media/adv_weapons_gatlin_barrel.obj new file mode 100644 index 0000000..6f85c63 --- /dev/null +++ b/media/adv_weapons_gatlin_barrel.obj @@ -0,0 +1,301 @@ +# Blender v2.82 (sub 7) OBJ File: '' +# www.blender.org +o mesh_turret_gatlin_gun +v 0.095460 0.030142 0.001832 +v 0.095460 -0.032358 0.001832 +v 0.157960 -0.032358 0.001832 +v 0.157960 0.030142 0.001832 +v 0.095460 -0.032358 0.814332 +v 0.095460 0.030142 0.814332 +v 0.157960 -0.032358 0.814332 +v 0.157960 0.030142 0.814332 +v 0.032960 -0.032358 0.001832 +v 0.032960 -0.094858 0.001832 +v 0.095460 -0.094858 0.001832 +v 0.032960 -0.094858 0.814332 +v 0.032960 -0.032358 0.814332 +v 0.095460 -0.094858 0.814332 +v 0.032960 0.092642 0.001832 +v 0.032960 0.030142 0.001832 +v 0.095460 0.092642 0.001832 +v 0.032960 0.030142 0.814332 +v 0.032960 0.092642 0.814332 +v 0.095460 0.092642 0.814332 +v -0.029540 0.030142 0.001832 +v -0.029540 -0.032358 0.001832 +v -0.029540 -0.032358 0.814332 +v -0.029540 0.030142 0.814332 +v -0.092040 -0.032358 0.001832 +v -0.092040 -0.094858 0.001832 +v -0.029540 -0.094858 0.001832 +v -0.092040 -0.094858 0.814332 +v -0.092040 -0.032358 0.814332 +v -0.029540 -0.094858 0.814332 +v -0.092040 0.092642 0.001832 +v -0.092040 0.030142 0.001832 +v -0.029540 0.092642 0.001832 +v -0.092040 0.030142 0.814332 +v -0.092040 0.092642 0.814332 +v -0.029540 0.092642 0.814332 +v -0.154540 0.030142 0.001832 +v -0.154540 -0.032358 0.001832 +v -0.154540 -0.032358 0.814332 +v -0.154540 0.030142 0.814332 +vt 0.200000 0.500000 +vt 0.240000 0.538462 +vt 0.200000 0.538462 +vt 0.040000 0.500000 +vt 0.000000 1.000000 +vt 0.000000 0.500000 +vt 0.480000 0.500000 +vt 0.520000 0.000000 +vt 0.520000 0.500000 +vt 0.200000 0.000000 +vt 0.160000 0.500000 +vt 0.160000 0.000000 +vt 0.400000 0.538462 +vt 0.360000 0.500000 +vt 0.400000 0.500000 +vt 0.640000 0.000000 +vt 0.680000 0.500000 +vt 0.640000 0.500000 +vt 0.080000 0.500000 +vt 0.040000 1.000000 +vt 0.040000 0.500000 +vt 0.160000 0.538462 +vt 0.200000 0.500000 +vt 0.200000 0.538462 +vt 0.200000 0.576923 +vt 0.160000 0.538462 +vt 0.200000 0.538462 +vt 0.280000 0.500000 +vt 0.320000 0.538462 +vt 0.280000 0.538462 +vt 0.280000 0.500000 +vt 0.320000 0.000000 +vt 0.320000 0.500000 +vt 0.440000 0.500000 +vt 0.480000 0.000000 +vt 0.480000 0.500000 +vt 0.160000 0.500000 +vt 0.120000 0.538462 +vt 0.120000 0.500000 +vt 0.200000 0.538462 +vt 0.240000 0.576923 +vt 0.200000 0.576923 +vt 0.800000 0.000000 +vt 0.840000 0.500000 +vt 0.800000 0.500000 +vt 0.720000 0.000000 +vt 0.760000 0.500000 +vt 0.720000 0.500000 +vt 0.520000 0.500000 +vt 0.560000 0.538462 +vt 0.520000 0.538462 +vt 1.000000 0.000000 +vt 0.960000 0.500000 +vt 0.960000 0.000000 +vt 0.080000 0.000000 +vt 0.040000 0.500000 +vt 0.040000 0.000000 +vt 0.440000 0.538462 +vt 0.480000 0.500000 +vt 0.480000 0.538462 +vt 0.600000 0.500000 +vt 0.560000 0.000000 +vt 0.600000 0.000000 +vt 0.120000 0.500000 +vt 0.160000 0.000000 +vt 0.160000 0.500000 +vt 0.000000 0.500000 +vt 0.040000 0.000000 +vt 0.040000 0.500000 +vt 0.240000 0.500000 +vt 0.280000 0.000000 +vt 0.280000 0.500000 +vt 0.200000 0.500000 +vt 0.240000 0.000000 +vt 0.240000 0.500000 +vt 0.160000 0.576923 +vt 0.120000 0.538462 +vt 0.160000 0.538462 +vt 0.960000 0.000000 +vt 0.920000 0.500000 +vt 0.920000 0.000000 +vt 0.400000 0.500000 +vt 0.440000 0.000000 +vt 0.440000 0.500000 +vt 0.240000 0.500000 +vt 0.280000 0.538462 +vt 0.240000 0.538462 +vt 0.120000 0.500000 +vt 0.080000 1.000000 +vt 0.080000 0.500000 +vt 0.600000 0.000000 +vt 0.640000 0.500000 +vt 0.600000 0.500000 +vt 0.920000 0.000000 +vt 0.880000 0.500000 +vt 0.880000 0.000000 +vt 0.680000 0.000000 +vt 0.720000 0.500000 +vt 0.680000 0.500000 +vt 0.360000 0.500000 +vt 0.400000 0.000000 +vt 0.400000 0.500000 +vt 0.320000 0.500000 +vt 0.360000 0.000000 +vt 0.360000 0.500000 +vt 0.520000 0.538462 +vt 0.480000 0.500000 +vt 0.520000 0.500000 +vt 0.400000 0.538462 +vt 0.440000 0.500000 +vt 0.440000 0.538462 +vt 0.080000 0.500000 +vt 0.120000 0.000000 +vt 0.120000 0.500000 +vt 0.560000 0.000000 +vt 0.520000 0.500000 +vt 0.520000 0.000000 +vt 0.840000 0.500000 +vt 0.880000 0.000000 +vt 0.880000 0.500000 +vt 0.360000 0.538462 +vt 0.320000 0.500000 +vt 0.360000 0.500000 +vt 0.760000 0.000000 +vt 0.800000 0.500000 +vt 0.760000 0.500000 +vt 0.240000 0.500000 +vt 0.040000 1.000000 +vt 0.480000 0.000000 +vt 0.200000 0.500000 +vt 0.360000 0.538462 +vt 0.680000 0.000000 +vt 0.080000 1.000000 +vt 0.160000 0.500000 +vt 0.160000 0.576923 +vt 0.320000 0.500000 +vt 0.280000 0.000000 +vt 0.440000 0.000000 +vt 0.160000 0.538462 +vt 0.240000 0.538462 +vt 0.840000 0.000000 +vt 0.760000 0.000000 +vt 0.560000 0.500000 +vt 1.000000 0.500000 +vt 0.080000 0.500000 +vt 0.440000 0.500000 +vt 0.560000 0.500000 +vt 0.120000 0.000000 +vt 0.000000 0.000000 +vt 0.240000 0.000000 +vt 0.200000 0.000000 +vt 0.120000 0.576923 +vt 0.960000 0.500000 +vt 0.400000 0.000000 +vt 0.280000 0.500000 +vt 0.120000 1.000000 +vt 0.640000 0.000000 +vt 0.920000 0.500000 +vt 0.720000 0.000000 +vt 0.360000 0.000000 +vt 0.320000 0.000000 +vt 0.480000 0.538462 +vt 0.080000 0.000000 +vt 0.560000 0.500000 +vt 0.840000 0.000000 +vt 0.320000 0.538462 +vt 0.800000 0.000000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +s 1 +f 1/1/1 3/2/1 2/3/1 +f 16/4/2 13/5/2 9/6/2 +f 9/7/3 23/8/3 22/9/3 +f 24/10/4 22/11/4 23/12/4 +f 8/13/5 5/14/5 7/15/5 +f 35/16/6 33/17/6 31/18/6 +f 17/19/2 6/20/2 1/21/2 +f 9/22/1 11/23/1 10/24/1 +f 5/25/5 12/26/5 14/27/5 +f 15/28/1 1/29/1 16/30/1 +f 3/31/3 5/32/3 2/33/3 +f 11/34/3 12/35/3 10/36/3 +f 20/37/5 18/38/5 6/39/5 +f 21/40/1 9/41/1 22/42/1 +f 6/43/6 4/44/6 1/45/6 +f 24/46/6 16/47/6 21/48/6 +f 18/49/5 23/50/5 13/51/5 +f 4/52/2 7/53/2 3/54/2 +f 35/55/4 32/56/4 34/57/4 +f 25/58/1 27/59/1 26/60/1 +f 13/61/6 2/62/6 9/63/6 +f 2/64/4 6/65/4 1/66/4 +f 16/67/4 19/68/4 15/69/4 +f 26/70/4 29/71/4 25/72/4 +f 10/73/4 13/74/4 9/75/4 +f 23/76/5 28/77/5 30/78/5 +f 22/79/2 30/80/2 27/81/2 +f 1/82/3 18/83/3 16/84/3 +f 31/85/1 21/86/1 32/87/1 +f 33/88/2 24/89/2 21/90/2 +f 29/91/6 22/92/6 25/93/6 +f 2/94/2 14/95/2 11/96/2 +f 19/97/6 17/98/6 15/99/6 +f 21/100/3 34/101/3 32/102/3 +f 27/103/3 28/104/3 26/105/3 +f 36/106/5 34/107/5 24/108/5 +f 37/109/1 25/110/1 38/111/1 +f 38/112/4 40/113/4 37/114/4 +f 39/115/3 25/116/3 29/117/3 +f 32/118/2 29/119/2 25/120/2 +f 34/121/5 39/122/5 29/123/5 +f 40/124/6 32/125/6 37/126/6 +f 1/1/1 4/127/1 3/2/1 +f 16/4/2 18/128/2 13/5/2 +f 9/7/3 13/129/3 23/8/3 +f 24/10/4 21/130/4 22/11/4 +f 8/13/5 6/131/5 5/14/5 +f 35/16/6 36/132/6 33/17/6 +f 17/19/2 20/133/2 6/20/2 +f 9/22/1 2/134/1 11/23/1 +f 5/25/5 13/135/5 12/26/5 +f 15/28/1 17/136/1 1/29/1 +f 3/31/3 7/137/3 5/32/3 +f 11/34/3 14/138/3 12/35/3 +f 20/37/5 19/139/5 18/38/5 +f 21/40/1 16/140/1 9/41/1 +f 6/43/6 8/141/6 4/44/6 +f 24/46/6 18/142/6 16/47/6 +f 18/49/5 24/143/5 23/50/5 +f 4/52/2 8/144/2 7/53/2 +f 35/55/4 31/145/4 32/56/4 +f 25/58/1 22/146/1 27/59/1 +f 13/61/6 5/147/6 2/62/6 +f 2/64/4 5/148/4 6/65/4 +f 16/67/4 18/149/4 19/68/4 +f 26/70/4 28/150/4 29/71/4 +f 10/73/4 12/151/4 13/74/4 +f 23/76/5 29/152/5 28/77/5 +f 22/79/2 23/153/2 30/80/2 +f 1/82/3 6/154/3 18/83/3 +f 31/85/1 33/155/1 21/86/1 +f 33/88/2 36/156/2 24/89/2 +f 29/91/6 23/157/6 22/92/6 +f 2/94/2 5/158/2 14/95/2 +f 19/97/6 20/159/6 17/98/6 +f 21/100/3 24/160/3 34/101/3 +f 27/103/3 30/161/3 28/104/3 +f 36/106/5 35/162/5 34/107/5 +f 37/109/1 32/102/1 25/110/1 +f 38/112/4 39/163/4 40/113/4 +f 39/115/3 38/164/3 25/116/3 +f 32/118/2 34/165/2 29/119/2 +f 34/121/5 40/166/5 39/122/5 +f 40/124/6 34/167/6 32/125/6 diff --git a/media/adv_weapons_grappling_hook.obj b/media/adv_weapons_grappling_hook.obj new file mode 100644 index 0000000..4b2048a --- /dev/null +++ b/media/adv_weapons_grappling_hook.obj @@ -0,0 +1,826 @@ +# Blender v2.82 (sub 7) OBJ File: 'grappling.blend' +# www.blender.org +o mesh_grappling +v 0.312500 -0.312500 -0.062500 +v 0.312500 -0.312500 -0.000000 +v 0.312500 -0.250000 -0.000000 +v 0.312500 -0.250000 -0.062500 +v 0.375000 -0.312500 -0.062500 +v 0.375000 -0.250000 -0.062500 +v 0.312500 -0.250000 0.062500 +v 0.375000 -0.250000 0.062500 +v 0.312500 -0.312500 0.062500 +v 0.375000 -0.312500 0.062500 +v 0.250000 -0.375000 -0.062500 +v 0.250000 -0.312500 -0.000000 +v 0.250000 -0.312500 -0.062500 +v 0.312500 -0.375000 -0.062500 +v 0.250000 -0.250000 -0.000000 +v 0.250000 -0.250000 0.062500 +v 0.250000 -0.187500 0.062500 +v 0.250000 -0.187500 -0.000000 +v 0.312500 -0.187500 -0.000000 +v 0.250000 -0.375000 0.062500 +v 0.250000 -0.312500 0.062500 +v 0.312500 -0.375000 0.062500 +v 0.250000 -0.187500 0.125000 +v 0.312500 -0.187500 0.125000 +v 0.312500 -0.312500 0.125000 +v 0.187500 -0.312500 -0.000000 +v 0.187500 -0.250000 0.062500 +v 0.187500 -0.250000 -0.000000 +v 0.187500 -0.125000 0.062500 +v 0.250000 -0.125000 0.062500 +v 0.187500 -0.125000 0.125000 +v 0.250000 -0.125000 0.125000 +v 0.187500 -0.250000 0.125000 +v 0.187500 -0.312500 0.125000 +v 0.125000 -0.062500 0.062500 +v 0.187500 -0.062500 0.062500 +v 0.125000 -0.062500 0.125000 +v 0.187500 -0.062500 0.125000 +v 0.125000 -0.187500 0.062500 +v 0.125000 -0.187500 0.125000 +v 0.125000 -0.250000 0.062500 +v 0.125000 -0.250000 0.125000 +v 0.062500 -0.062500 0.062500 +v 0.062500 -0.000000 0.062500 +v 0.125000 -0.000000 0.062500 +v 0.062500 -0.000000 0.125000 +v 0.125000 -0.000000 0.125000 +v 0.062500 -0.062500 0.125000 +v 0.062500 -0.125000 0.062500 +v 0.062500 -0.125000 0.125000 +v 0.062500 -0.187500 0.062500 +v 0.062500 -0.187500 0.125000 +v 0.062500 0.062500 -0.500000 +v 0.062500 -0.062500 -0.500000 +v 0.062500 0.312500 -0.062500 +v 0.062500 0.375000 -0.062500 +v 0.062500 0.312500 0.000000 +v 0.062500 0.375000 0.062500 +v 0.062500 0.312500 0.062500 +v 0.062500 0.250000 0.000000 +v 0.062500 0.250000 0.062500 +v 0.062500 0.062500 0.062500 +v 0.062500 0.312500 0.125000 +v 0.062500 0.062500 0.125000 +v 0.062500 0.062500 0.187500 +v 0.062500 -0.062500 0.187500 +v -0.062500 0.062500 -0.500000 +v -0.062500 -0.062500 -0.500000 +v -0.062500 0.312500 -0.062500 +v -0.062500 0.312500 0.000000 +v -0.062500 0.375000 -0.062500 +v -0.062500 0.312500 0.062500 +v -0.062500 0.375000 0.062500 +v -0.062500 0.250000 0.000000 +v -0.062500 0.250000 0.062500 +v -0.062500 -0.000000 0.062500 +v -0.062500 0.062500 0.062500 +v -0.062500 -0.062500 0.062500 +v -0.062500 0.312500 0.125000 +v -0.062500 0.062500 0.125000 +v -0.062500 -0.000000 0.125000 +v -0.062500 -0.125000 0.062500 +v -0.062500 -0.062500 0.125000 +v -0.062500 -0.125000 0.125000 +v -0.062500 0.062500 0.187500 +v -0.062500 -0.062500 0.187500 +v -0.125000 -0.062500 0.062500 +v -0.125000 -0.062500 0.125000 +v -0.125000 -0.000000 0.125000 +v -0.125000 -0.000000 0.062500 +v -0.062500 -0.187500 0.062500 +v -0.125000 -0.187500 0.062500 +v -0.125000 -0.187500 0.125000 +v -0.062500 -0.187500 0.125000 +v -0.187500 -0.125000 0.062500 +v -0.187500 -0.125000 0.125000 +v -0.187500 -0.062500 0.125000 +v -0.187500 -0.062500 0.062500 +v -0.125000 -0.250000 0.062500 +v -0.187500 -0.250000 0.062500 +v -0.187500 -0.250000 0.125000 +v -0.125000 -0.250000 0.125000 +v -0.187500 -0.312500 -0.000000 +v -0.250000 -0.312500 -0.000000 +v -0.250000 -0.250000 -0.000000 +v -0.187500 -0.250000 -0.000000 +v -0.250000 -0.250000 0.062500 +v -0.250000 -0.312500 0.062500 +v -0.250000 -0.187500 0.062500 +v -0.250000 -0.187500 0.125000 +v -0.250000 -0.125000 0.125000 +v -0.250000 -0.125000 0.062500 +v -0.187500 -0.312500 0.125000 +v -0.312500 -0.375000 -0.062500 +v -0.312500 -0.312500 -0.000000 +v -0.312500 -0.312500 -0.062500 +v -0.250000 -0.375000 -0.062500 +v -0.250000 -0.312500 -0.062500 +v -0.312500 -0.250000 -0.000000 +v -0.312500 -0.250000 0.062500 +v -0.312500 -0.187500 -0.000000 +v -0.250000 -0.187500 -0.000000 +v -0.312500 -0.375000 0.062500 +v -0.312500 -0.312500 0.062500 +v -0.250000 -0.375000 0.062500 +v -0.312500 -0.187500 0.125000 +v -0.312500 -0.312500 0.125000 +v -0.375000 -0.312500 -0.062500 +v -0.375000 -0.250000 -0.062500 +v -0.312500 -0.250000 -0.062500 +v -0.375000 -0.312500 0.062500 +v -0.375000 -0.250000 0.062500 +vt 0.811688 0.906926 +vt 0.854978 0.950216 +vt 0.811688 0.950216 +vt 0.807359 0.859307 +vt 0.764069 0.902597 +vt 0.764069 0.859307 +vt 0.525974 0.718615 +vt 0.569264 0.718615 +vt 0.569264 0.761905 +vt 0.668831 0.902597 +vt 0.712121 0.859307 +vt 0.712121 0.902597 +vt 0.997835 0.002165 +vt 0.954545 0.045455 +vt 0.954545 0.002165 +vt 0.049784 0.954545 +vt 0.093074 0.997835 +vt 0.049784 0.997835 +vt 0.575758 0.528138 +vt 0.662338 0.614719 +vt 0.575758 0.614718 +vt 0.954545 0.049784 +vt 0.997835 0.093074 +vt 0.954545 0.093074 +vt 0.521645 0.805195 +vt 0.478355 0.761905 +vt 0.521645 0.718615 +vt 0.906926 0.764069 +vt 0.950216 0.807359 +vt 0.906926 0.807359 +vt 0.002165 0.997835 +vt 0.045455 0.954545 +vt 0.045455 0.997835 +vt 0.859307 0.859307 +vt 0.902597 0.902597 +vt 0.859307 0.902597 +vt 0.573593 0.906926 +vt 0.616883 0.950216 +vt 0.573593 0.950216 +vt 0.287879 0.766234 +vt 0.331169 0.852814 +vt 0.287879 0.852814 +vt 0.811688 0.859307 +vt 0.854978 0.902597 +vt 0.811688 0.902597 +vt 0.906926 0.573593 +vt 0.950216 0.616883 +vt 0.906926 0.616883 +vt 0.906926 0.525974 +vt 0.950216 0.569264 +vt 0.906926 0.569264 +vt 0.950216 0.664502 +vt 0.906926 0.621212 +vt 0.950216 0.621212 +vt 0.480520 0.709957 +vt 0.480520 0.666667 +vt 0.523810 0.666667 +vt 0.906926 0.759740 +vt 0.950216 0.716450 +vt 0.950216 0.759740 +vt 0.906926 0.290043 +vt 0.950216 0.290043 +vt 0.950216 0.333333 +vt 0.383117 0.906926 +vt 0.426407 0.950216 +vt 0.383117 0.950216 +vt 0.525974 0.906926 +vt 0.569264 0.950216 +vt 0.525974 0.950216 +vt 0.712121 0.906926 +vt 0.668831 0.950216 +vt 0.668831 0.906926 +vt 0.621212 0.718615 +vt 0.664502 0.718615 +vt 0.664502 0.761905 +vt 0.906926 0.194805 +vt 0.950216 0.281385 +vt 0.906926 0.281385 +vt 0.430736 0.900433 +vt 0.474026 0.813853 +vt 0.474026 0.900433 +vt 0.902597 0.757576 +vt 0.859307 0.714286 +vt 0.902597 0.670996 +vt 0.859307 0.766234 +vt 0.902597 0.766234 +vt 0.902597 0.809524 +vt 0.662338 0.666667 +vt 0.619048 0.709957 +vt 0.619048 0.666667 +vt 0.902597 0.662338 +vt 0.859307 0.662338 +vt 0.859307 0.619048 +vt 0.099567 0.932900 +vt 0.186147 0.543290 +vt 0.186147 0.932900 +vt 0.331169 0.948052 +vt 0.287879 0.948052 +vt 0.287879 0.904762 +vt 0.859307 0.480519 +vt 0.902597 0.480519 +vt 0.902597 0.523809 +vt 0.426407 0.900433 +vt 0.383117 0.813853 +vt 0.426407 0.813853 +vt 0.564935 0.067100 +vt 0.564935 0.110390 +vt 0.435065 0.110390 +vt 0.192641 0.900433 +vt 0.235931 0.813853 +vt 0.235931 0.900433 +vt 0.761905 0.796537 +vt 0.718615 0.839827 +vt 0.675325 0.796537 +vt 0.385281 0.805195 +vt 0.471861 0.718615 +vt 0.471862 0.805195 +vt 0.428571 0.666667 +vt 0.471861 0.623377 +vt 0.471861 0.709957 +vt 0.335498 0.766234 +vt 0.378788 0.852814 +vt 0.335498 0.852814 +vt 0.281385 0.805195 +vt 0.194805 0.718615 +vt 0.281385 0.718615 +vt 0.664502 0.900433 +vt 0.621212 0.813853 +vt 0.664502 0.813853 +vt 0.283550 0.900433 +vt 0.240260 0.813853 +vt 0.283550 0.813853 +vt 0.523810 0.614718 +vt 0.480520 0.571428 +vt 0.523810 0.571428 +vt 0.569264 0.900433 +vt 0.525974 0.813853 +vt 0.569264 0.813853 +vt 0.621212 0.906926 +vt 0.664502 0.950216 +vt 0.621212 0.950216 +vt 0.764069 0.906926 +vt 0.807359 0.950216 +vt 0.764069 0.950216 +vt 0.764069 0.064935 +vt 0.807359 0.108225 +vt 0.720779 0.108225 +vt 0.101732 0.067100 +vt 0.101732 0.110390 +vt 0.058442 0.110390 +vt 0.759740 0.950216 +vt 0.716450 0.906926 +vt 0.759740 0.906926 +vt 0.906926 0.668831 +vt 0.950216 0.712121 +vt 0.906926 0.712121 +vt 0.478355 0.906926 +vt 0.521645 0.950216 +vt 0.478355 0.950216 +vt 0.950216 0.950216 +vt 0.906926 0.906926 +vt 0.950216 0.906926 +vt 0.004329 0.543290 +vt 0.090909 0.932900 +vt 0.004329 0.932900 +vt 0.906926 0.478355 +vt 0.950216 0.521645 +vt 0.906926 0.521645 +vt 0.240260 0.906926 +vt 0.283550 0.950216 +vt 0.240260 0.950216 +vt 0.906926 0.902597 +vt 0.950216 0.859307 +vt 0.950216 0.902597 +vt 0.521645 0.900433 +vt 0.478355 0.813853 +vt 0.521645 0.813853 +vt 0.430736 0.906926 +vt 0.474026 0.950216 +vt 0.430736 0.950216 +vt 0.140693 0.997835 +vt 0.097403 0.954545 +vt 0.140693 0.954545 +vt 0.573593 0.900433 +vt 0.616883 0.813853 +vt 0.616883 0.900433 +vt 0.385281 0.614719 +vt 0.385281 0.571428 +vt 0.428571 0.571428 +vt 0.188312 0.954545 +vt 0.145022 0.997835 +vt 0.145022 0.954545 +vt 0.950216 0.811688 +vt 0.906926 0.854978 +vt 0.906926 0.811688 +vt 0.290043 0.660173 +vt 0.376623 0.530303 +vt 0.376623 0.660173 +vt 0.194805 0.532467 +vt 0.281385 0.705628 +vt 0.194805 0.705628 +vt 0.906926 0.099567 +vt 0.950216 0.186147 +vt 0.906926 0.186147 +vt 0.997836 0.097403 +vt 0.954545 0.140693 +vt 0.954545 0.097403 +vt 0.192641 0.954545 +vt 0.235931 0.997835 +vt 0.192641 0.997835 +vt 0.333333 0.714286 +vt 0.290043 0.670996 +vt 0.376623 0.670996 +vt 0.906926 0.385281 +vt 0.950216 0.385281 +vt 0.950216 0.428571 +vt 0.759740 0.859307 +vt 0.716450 0.902597 +vt 0.716450 0.859307 +vt 0.573593 0.718615 +vt 0.616883 0.805195 +vt 0.573593 0.805195 +vt 0.335498 0.861472 +vt 0.378788 0.861472 +vt 0.378788 0.904762 +vt 0.859307 0.950216 +vt 0.902597 0.906926 +vt 0.902597 0.950216 +vt 0.235931 0.950216 +vt 0.192641 0.906926 +vt 0.235931 0.906926 +vt 0.906926 0.004329 +vt 0.950216 0.047619 +vt 0.906926 0.090909 +vt 0.854978 0.906926 +vt 0.807359 0.902597 +vt 0.569264 0.805195 +vt 0.525974 0.805195 +vt 0.668831 0.859307 +vt 0.997835 0.045455 +vt 0.093074 0.954545 +vt 0.662338 0.528138 +vt 0.997835 0.049784 +vt 0.478355 0.805195 +vt 0.478355 0.718615 +vt 0.950216 0.764069 +vt 0.002165 0.954545 +vt 0.902597 0.859307 +vt 0.616883 0.906926 +vt 0.331169 0.766234 +vt 0.854978 0.859307 +vt 0.950216 0.573593 +vt 0.950216 0.525974 +vt 0.906926 0.664502 +vt 0.523810 0.623377 +vt 0.567100 0.623377 +vt 0.567100 0.709957 +vt 0.906926 0.716450 +vt 0.950216 0.376623 +vt 0.906926 0.376623 +vt 0.426407 0.906926 +vt 0.569264 0.906926 +vt 0.712121 0.950216 +vt 0.664502 0.805195 +vt 0.621212 0.805195 +vt 0.950216 0.194805 +vt 0.430736 0.813853 +vt 0.859307 0.757576 +vt 0.859307 0.670996 +vt 0.902597 0.852814 +vt 0.859307 0.852814 +vt 0.575758 0.623376 +vt 0.619048 0.623376 +vt 0.662338 0.623376 +vt 0.662338 0.709957 +vt 0.575758 0.666667 +vt 0.859307 0.575758 +vt 0.902597 0.575758 +vt 0.099567 0.543290 +vt 0.287879 0.861472 +vt 0.331169 0.861472 +vt 0.902597 0.567100 +vt 0.859307 0.567100 +vt 0.383117 0.900433 +vt 0.391775 0.153680 +vt 0.391775 0.196970 +vt 0.348485 0.196970 +vt 0.348485 0.110390 +vt 0.391775 0.110390 +vt 0.391775 0.067100 +vt 0.564935 0.023810 +vt 0.608225 0.067100 +vt 0.651515 0.023810 +vt 0.651515 0.067100 +vt 0.608225 0.110390 +vt 0.651515 0.110390 +vt 0.651515 0.500000 +vt 0.564935 0.500000 +vt 0.435065 0.153680 +vt 0.192641 0.813853 +vt 0.675325 0.493506 +vt 0.718615 0.493506 +vt 0.675325 0.536797 +vt 0.761905 0.493506 +vt 0.761905 0.536797 +vt 0.805195 0.536797 +vt 0.805195 0.580087 +vt 0.718615 0.580087 +vt 0.675325 0.580087 +vt 0.848485 0.580087 +vt 0.848485 0.623377 +vt 0.761905 0.623377 +vt 0.718615 0.623377 +vt 0.805195 0.623377 +vt 0.805195 0.709957 +vt 0.848485 0.709957 +vt 0.848485 0.753247 +vt 0.805195 0.753247 +vt 0.718615 0.753247 +vt 0.718615 0.709957 +vt 0.761905 0.709957 +vt 0.805195 0.796537 +vt 0.675325 0.753247 +vt 0.761905 0.839827 +vt 0.675325 0.839827 +vt 0.385281 0.718615 +vt 0.428571 0.623377 +vt 0.385281 0.709957 +vt 0.385281 0.666667 +vt 0.378788 0.766234 +vt 0.194805 0.805195 +vt 0.621212 0.900433 +vt 0.240260 0.900433 +vt 0.480520 0.614718 +vt 0.480520 0.528138 +vt 0.523810 0.528138 +vt 0.567100 0.571428 +vt 0.567100 0.614718 +vt 0.525974 0.900433 +vt 0.664502 0.906926 +vt 0.807359 0.906926 +vt 0.677489 0.454545 +vt 0.677489 0.367965 +vt 0.720779 0.367965 +vt 0.720779 0.324675 +vt 0.764069 0.324675 +vt 0.764069 0.281385 +vt 0.807359 0.281385 +vt 0.807359 0.194805 +vt 0.764069 0.194805 +vt 0.764069 0.151515 +vt 0.764069 0.411255 +vt 0.807359 0.367965 +vt 0.764069 0.454545 +vt 0.807359 0.411255 +vt 0.850649 0.324675 +vt 0.850649 0.367965 +vt 0.893939 0.281385 +vt 0.893939 0.324675 +vt 0.850649 0.281385 +vt 0.893939 0.151515 +vt 0.893939 0.194805 +vt 0.850649 0.194805 +vt 0.850649 0.151515 +vt 0.720779 0.151515 +vt 0.850649 0.108225 +vt 0.677489 0.108225 +vt 0.677489 0.021645 +vt 0.807359 0.064935 +vt 0.764069 0.021645 +vt 0.058442 0.067100 +vt 0.015152 0.067100 +vt 0.015152 0.023810 +vt 0.101732 0.023810 +vt 0.274892 0.067100 +vt 0.231602 0.110390 +vt 0.274892 0.110390 +vt 0.318182 0.110390 +vt 0.274892 0.153680 +vt 0.318182 0.196970 +vt 0.274892 0.196970 +vt 0.231602 0.153680 +vt 0.101732 0.500000 +vt 0.015152 0.500000 +vt 0.015152 0.110390 +vt 0.716450 0.950216 +vt 0.950216 0.668831 +vt 0.521645 0.906926 +vt 0.906926 0.950216 +vt 0.090909 0.543290 +vt 0.950216 0.478355 +vt 0.283550 0.906926 +vt 0.906926 0.859307 +vt 0.478355 0.900433 +vt 0.474026 0.906926 +vt 0.097403 0.997835 +vt 0.573593 0.813853 +vt 0.428571 0.528138 +vt 0.471861 0.528138 +vt 0.471861 0.614718 +vt 0.188312 0.997835 +vt 0.950216 0.854978 +vt 0.290043 0.530303 +vt 0.281385 0.532467 +vt 0.950216 0.099567 +vt 0.997836 0.140693 +vt 0.235931 0.954545 +vt 0.290043 0.714286 +vt 0.376623 0.757576 +vt 0.333333 0.757576 +vt 0.950216 0.471861 +vt 0.906926 0.471861 +vt 0.759740 0.902597 +vt 0.616883 0.718615 +vt 0.378788 0.948052 +vt 0.335498 0.948052 +vt 0.859307 0.906926 +vt 0.192641 0.950216 +vt 0.950216 0.004329 +vt 0.950216 0.090909 +vn 1.0000 -0.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +s 1 +f 2/1/1 4/2/1 1/3/1 +f 1/4/2 6/5/2 5/6/2 +f 123/7/1 124/8/1 115/9/1 +f 9/10/3 8/11/3 7/12/3 +f 11/13/2 1/14/2 14/15/2 +f 12/16/4 1/17/4 13/18/4 +f 86/19/3 65/20/3 85/21/3 +f 16/22/1 18/23/1 15/24/1 +f 19/25/4 17/26/4 24/27/4 +f 20/28/3 9/29/3 21/30/3 +f 27/31/4 15/32/4 28/33/4 +f 31/34/4 30/35/4 29/36/4 +f 17/37/5 32/38/5 23/39/5 +f 5/40/5 8/41/5 10/42/5 +f 37/43/4 36/44/4 35/45/4 +f 29/46/5 38/47/5 31/48/5 +f 42/49/1 39/50/1 41/51/1 +f 33/52/6 41/53/6 27/54/6 +f 26/55/6 12/56/6 21/57/6 +f 46/58/4 45/59/4 44/60/4 +f 34/61/1 33/62/1 27/63/1 +f 35/64/5 47/65/5 37/66/5 +f 52/67/1 49/68/1 51/69/1 +f 40/70/6 51/71/6 39/72/6 +f 14/73/5 1/74/5 2/75/5 +f 84/76/6 49/77/6 50/78/6 +f 85/79/4 64/80/4 80/81/4 +f 6/82/4 3/83/4 8/84/4 +f 20/85/1 21/86/1 12/87/1 +f 119/88/2 122/89/2 105/90/2 +f 126/91/4 110/92/4 109/93/4 +f 67/94/4 62/95/4 53/96/4 +f 10/97/6 9/98/6 2/99/6 +f 117/100/5 118/101/5 104/102/5 +f 75/103/6 60/104/6 61/105/6 +f 64/106/5 62/107/5 61/108/5 +f 79/109/4 59/110/4 72/111/4 +f 29/112/2 17/113/2 27/114/2 +f 53/115/2 68/116/2 67/117/2 +f 7/118/5 19/119/5 24/120/5 +f 86/121/6 48/122/6 66/123/6 +f 73/124/4 56/125/4 71/126/4 +f 22/127/6 11/128/6 14/129/6 +f 70/130/6 55/131/6 57/132/6 +f 3/133/2 12/134/2 15/135/2 +f 69/136/2 56/137/2 55/138/2 +f 88/139/1 90/140/1 87/141/1 +f 89/142/4 76/143/4 90/144/4 +f 23/145/3 31/146/3 33/147/3 +f 80/148/1 77/149/1 76/150/1 +f 94/151/6 92/152/6 91/153/6 +f 91/154/5 84/155/5 94/156/5 +f 96/157/1 98/158/1 95/159/1 +f 97/160/4 87/161/4 98/162/4 +f 43/163/6 68/164/6 54/165/6 +f 102/166/6 100/167/6 99/168/6 +f 99/169/5 93/170/5 102/171/5 +f 107/172/4 106/173/4 105/174/4 +f 74/175/2 57/176/2 60/177/2 +f 110/178/1 112/179/1 109/180/1 +f 111/181/4 95/182/4 112/183/4 +f 72/184/3 58/185/3 73/186/3 +f 127/187/6 124/188/6 108/189/6 +f 114/190/2 118/191/2 117/192/2 +f 115/193/4 118/194/4 116/195/4 +f 61/196/2 77/197/2 75/198/2 +f 80/199/3 63/200/3 79/201/3 +f 125/202/6 114/203/6 117/204/6 +f 105/205/5 109/206/5 107/207/5 +f 123/208/3 108/209/3 124/210/3 +f 120/211/1 127/212/1 126/213/1 +f 103/214/5 106/215/5 100/216/5 +f 128/217/2 130/218/2 116/219/2 +f 131/220/1 129/221/1 128/222/1 +f 132/223/4 120/224/4 119/225/4 +f 116/226/5 119/227/5 115/228/5 +f 131/229/3 120/230/3 132/231/3 +f 128/232/6 115/233/6 131/234/6 +f 2/1/1 3/235/1 4/2/1 +f 1/4/2 4/236/2 6/5/2 +f 116/237/1 114/238/1 115/9/1 +f 114/238/1 123/7/1 115/9/1 +f 9/10/3 10/239/3 8/11/3 +f 11/13/2 13/240/2 1/14/2 +f 12/16/4 2/241/4 1/17/4 +f 86/19/3 66/242/3 65/20/3 +f 16/22/1 17/243/1 18/23/1 +f 18/244/4 17/26/4 19/25/4 +f 17/26/4 23/245/4 24/27/4 +f 20/28/3 22/246/3 9/29/3 +f 27/31/4 16/247/4 15/32/4 +f 31/34/4 32/248/4 30/35/4 +f 17/37/5 30/249/5 32/38/5 +f 5/40/5 6/250/5 8/41/5 +f 37/43/4 38/251/4 36/44/4 +f 29/46/5 36/252/5 38/47/5 +f 42/49/1 40/253/1 39/50/1 +f 33/52/6 42/254/6 41/53/6 +f 9/255/6 25/256/6 21/57/6 +f 25/256/6 34/257/6 21/57/6 +f 34/257/6 26/55/6 21/57/6 +f 46/58/4 47/258/4 45/59/4 +f 28/259/1 26/260/1 27/63/1 +f 26/260/1 34/61/1 27/63/1 +f 35/64/5 45/261/5 47/65/5 +f 52/67/1 50/262/1 49/68/1 +f 40/70/6 52/263/6 51/71/6 +f 9/264/5 22/265/5 2/75/5 +f 22/265/5 14/73/5 2/75/5 +f 84/76/6 82/266/6 49/77/6 +f 85/79/4 65/267/4 64/80/4 +f 4/268/4 3/83/4 6/82/4 +f 3/83/4 7/269/4 8/84/4 +f 13/270/1 11/271/1 12/87/1 +f 11/271/1 20/85/1 12/87/1 +f 103/272/2 104/273/2 105/90/2 +f 104/273/2 115/274/2 119/88/2 +f 119/88/2 121/275/2 122/89/2 +f 104/273/2 119/88/2 105/90/2 +f 105/90/2 106/276/2 103/272/2 +f 122/277/4 121/278/4 109/93/4 +f 121/278/4 126/91/4 109/93/4 +f 67/94/4 77/279/4 62/95/4 +f 1/280/6 5/281/6 2/99/6 +f 5/281/6 10/97/6 2/99/6 +f 108/282/5 125/283/5 104/102/5 +f 125/283/5 117/100/5 104/102/5 +f 75/103/6 74/284/6 60/104/6 +f 57/285/5 55/286/5 56/287/5 +f 56/287/5 58/288/5 57/285/5 +f 58/288/5 59/289/5 57/285/5 +f 59/289/5 63/290/5 61/108/5 +f 63/290/5 64/106/5 61/108/5 +f 64/106/5 65/291/5 46/292/5 +f 65/291/5 66/293/5 46/292/5 +f 66/293/5 48/294/5 46/292/5 +f 44/295/5 43/296/5 54/297/5 +f 44/295/5 54/297/5 53/298/5 +f 64/106/5 46/292/5 44/295/5 +f 61/108/5 60/299/5 57/285/5 +f 44/295/5 53/298/5 62/107/5 +f 61/108/5 57/285/5 59/289/5 +f 64/106/5 44/295/5 62/107/5 +f 79/109/4 63/300/4 59/110/4 +f 107/301/2 109/302/2 100/303/2 +f 109/302/2 112/304/2 95/305/2 +f 95/305/2 98/306/2 87/307/2 +f 109/302/2 95/305/2 100/303/2 +f 92/308/2 99/309/2 100/303/2 +f 87/307/2 90/310/2 76/311/2 +f 100/303/2 95/305/2 92/308/2 +f 95/305/2 87/307/2 92/308/2 +f 82/312/2 91/313/2 92/308/2 +f 87/307/2 76/311/2 78/314/2 +f 43/315/2 44/316/2 45/317/2 +f 92/308/2 87/307/2 82/312/2 +f 87/307/2 78/314/2 82/312/2 +f 43/315/2 45/317/2 35/318/2 +f 39/319/2 51/320/2 49/321/2 +f 49/321/2 82/312/2 78/314/2 +f 43/315/2 35/318/2 49/321/2 +f 35/318/2 36/322/2 29/112/2 +f 49/321/2 78/314/2 43/315/2 +f 27/114/2 41/323/2 39/319/2 +f 39/319/2 49/321/2 29/112/2 +f 29/112/2 49/321/2 35/318/2 +f 29/112/2 30/324/2 17/113/2 +f 17/113/2 16/325/2 27/114/2 +f 27/114/2 39/319/2 29/112/2 +f 53/115/2 54/326/2 68/116/2 +f 7/118/5 3/327/5 19/119/5 +f 24/120/5 25/328/5 7/118/5 +f 25/328/5 9/329/5 7/118/5 +f 86/121/6 83/330/6 48/122/6 +f 73/124/4 58/331/4 56/125/4 +f 22/127/6 20/332/6 11/128/6 +f 70/130/6 69/333/6 55/131/6 +f 3/133/2 2/334/2 12/134/2 +f 12/134/2 26/335/2 28/336/2 +f 15/135/2 18/337/2 19/338/2 +f 12/134/2 28/336/2 15/135/2 +f 19/338/2 3/133/2 15/135/2 +f 69/136/2 71/339/2 56/137/2 +f 88/139/1 89/340/1 90/140/1 +f 89/142/4 81/341/4 76/143/4 +f 127/342/3 113/343/3 101/344/3 +f 101/344/3 102/345/3 93/346/3 +f 93/346/3 94/347/3 84/348/3 +f 50/349/3 52/350/3 40/351/3 +f 101/344/3 93/346/3 110/352/3 +f 93/346/3 84/348/3 96/353/3 +f 101/344/3 110/352/3 127/342/3 +f 110/352/3 126/354/3 127/342/3 +f 96/353/3 111/355/3 110/352/3 +f 88/356/3 97/357/3 96/353/3 +f 81/358/3 89/359/3 88/356/3 +f 83/360/3 81/358/3 88/356/3 +f 96/353/3 110/352/3 93/346/3 +f 83/360/3 88/356/3 84/348/3 +f 88/356/3 96/353/3 84/348/3 +f 47/361/3 46/362/3 48/363/3 +f 48/363/3 83/360/3 84/348/3 +f 84/348/3 50/349/3 48/363/3 +f 37/364/3 47/361/3 48/363/3 +f 40/351/3 42/365/3 33/147/3 +f 48/363/3 50/349/3 37/364/3 +f 50/349/3 40/351/3 37/364/3 +f 31/146/3 38/366/3 37/364/3 +f 33/147/3 34/367/3 25/368/3 +f 37/364/3 40/351/3 31/146/3 +f 40/351/3 33/147/3 31/146/3 +f 23/145/3 32/369/3 31/146/3 +f 33/147/3 25/368/3 23/145/3 +f 25/368/3 24/370/3 23/145/3 +f 81/371/1 83/372/1 86/373/1 +f 86/373/1 85/374/1 81/371/1 +f 85/374/1 80/148/1 81/371/1 +f 80/148/1 79/375/1 75/376/1 +f 79/375/1 72/377/1 75/376/1 +f 72/377/1 73/378/1 70/379/1 +f 73/378/1 71/380/1 70/379/1 +f 71/380/1 69/381/1 70/379/1 +f 70/379/1 74/382/1 75/376/1 +f 77/149/1 67/383/1 76/150/1 +f 67/383/1 68/384/1 76/150/1 +f 70/379/1 75/376/1 72/377/1 +f 80/148/1 75/376/1 77/149/1 +f 76/150/1 81/371/1 80/148/1 +f 68/384/1 78/385/1 76/150/1 +f 94/151/6 93/386/6 92/152/6 +f 91/154/5 82/387/5 84/155/5 +f 96/157/1 97/388/1 98/158/1 +f 97/160/4 88/389/4 87/161/4 +f 43/163/6 78/390/6 68/164/6 +f 102/166/6 101/391/6 100/167/6 +f 99/169/5 92/392/5 93/170/5 +f 107/172/4 100/393/4 106/173/4 +f 74/175/2 70/394/2 57/176/2 +f 110/178/1 111/395/1 112/179/1 +f 111/181/4 96/396/4 95/182/4 +f 72/184/3 59/397/3 58/185/3 +f 104/398/6 103/399/6 108/189/6 +f 103/399/6 113/400/6 108/189/6 +f 113/400/6 127/187/6 108/189/6 +f 114/190/2 116/401/2 118/191/2 +f 115/193/4 104/402/4 118/194/4 +f 61/196/2 62/403/2 77/197/2 +f 80/199/3 64/404/3 63/200/3 +f 125/202/6 123/405/6 114/203/6 +f 105/205/5 122/406/5 109/206/5 +f 123/208/3 125/407/3 108/209/3 +f 120/211/1 124/408/1 127/212/1 +f 126/213/1 121/409/1 120/211/1 +f 121/409/1 119/410/1 120/211/1 +f 101/411/5 113/412/5 100/216/5 +f 113/412/5 103/214/5 100/216/5 +f 128/217/2 129/413/2 130/218/2 +f 131/220/1 132/414/1 129/221/1 +f 130/415/4 129/416/4 119/225/4 +f 129/416/4 132/223/4 119/225/4 +f 116/226/5 130/417/5 119/227/5 +f 131/229/3 124/418/3 120/230/3 +f 116/419/6 115/233/6 128/232/6 +f 115/233/6 124/420/6 131/234/6 diff --git a/media/adv_weapons_landmine.obj b/media/adv_weapons_landmine.obj new file mode 100644 index 0000000..040186f --- /dev/null +++ b/media/adv_weapons_landmine.obj @@ -0,0 +1,136 @@ +# Blender v2.82 (sub 7) OBJ File: '' +# www.blender.org +mtllib adv_weapons_landmine.mtl +o mesh_landmine +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.375000 -0.500000 +v 0.375000 -0.375000 -0.375000 +v 0.375000 -0.375000 0.375000 +v 0.500000 -0.500000 0.500000 +v 0.500000 -0.375000 0.500000 +v 0.375000 -0.250000 -0.375000 +v 0.375000 -0.250000 0.375000 +v 0.125000 -0.250000 -0.125000 +v 0.125000 -0.250000 0.125000 +v 0.125000 -0.125000 -0.125000 +v 0.125000 -0.125000 0.125000 +v -0.125000 -0.375000 -0.500000 +v -0.125000 -0.375000 -0.375000 +v -0.125000 -0.375000 0.375000 +v -0.125000 -0.375000 0.500000 +v -0.125000 -0.250000 -0.375000 +v -0.125000 -0.250000 -0.125000 +v -0.125000 -0.250000 0.125000 +v -0.125000 -0.250000 0.375000 +v -0.125000 -0.125000 -0.125000 +v -0.125000 -0.125000 0.125000 +v -0.375000 -0.375000 -0.375000 +v -0.375000 -0.375000 0.375000 +v -0.375000 -0.250000 -0.375000 +v -0.375000 -0.250000 0.375000 +v -0.500000 -0.375000 -0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 0.500000 +v -0.500000 -0.375000 0.500000 +vt 0.500000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 0.937500 0.750000 +vt 0.937500 0.875000 +vt 0.875000 0.875000 +vt 0.875000 0.750000 +vt 0.687500 0.875000 +vt 0.687500 0.562500 +vt 0.687500 0.375000 +vt 0.750000 0.375000 +vt 0.750000 0.875000 +vt 0.750000 0.875000 +vt 0.750000 0.750000 +vt 0.875000 0.750000 +vt 0.875000 0.875000 +vt 0.875000 0.000000 +vt 0.875000 0.250000 +vt 0.750000 0.250000 +vt 0.750000 0.125000 +vt 0.625000 0.125000 +vt 0.625000 0.250000 +vt 0.500000 0.250000 +vt 0.500000 0.000000 +vt 0.875000 0.375000 +vt 0.500000 0.375000 +vt 0.437500 0.062500 +vt 0.312500 0.062500 +vt 0.312500 0.000000 +vt 0.500000 0.000000 +vt 0.500000 0.500000 +vt 0.312500 0.500000 +vt 0.312500 0.437500 +vt 0.437500 0.437500 +vt 0.875000 0.375000 +vt 0.937500 0.375000 +vt 0.937500 0.750000 +vt 0.875000 0.750000 +vt 0.875000 0.375000 +vt 0.875000 0.625000 +vt 0.875000 0.750000 +vt 0.812500 0.750000 +vt 0.812500 0.625000 +vt 0.812500 0.375000 +vt 0.062500 0.062500 +vt 0.062500 0.437500 +vt 0.000000 0.500000 +vt 0.000000 0.000000 +vt 0.937500 0.250000 +vt 1.000000 0.250000 +vt 1.000000 0.375000 +vt 0.937500 0.375000 +vt 0.750000 0.375000 +vt 0.812500 0.375000 +vt 0.812500 0.750000 +vt 0.750000 0.750000 +vt 1.000000 0.125000 +vt 0.937500 0.125000 +vt 0.937500 0.000000 +vt 1.000000 0.000000 +vt 0.937500 0.125000 +vt 1.000000 0.125000 +vt 0.562500 0.687500 +vt 0.562500 0.375000 +vt 0.625000 0.375000 +vt 0.625000 0.875000 +vt 0.562500 0.875000 +vt 0.937500 0.000000 +vt 0.937500 0.250000 +vt 0.937500 0.375000 +vt 0.687500 0.375000 +vt 0.625000 0.875000 +vt 0.500000 0.875000 +vt 0.500000 0.375000 +vt 0.562500 0.375000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 -0.0000 +usemtl Default_OBJ +s 1 +f 28/1/1 1/2/1 5/3/1 29/4/1 +f 12/5/2 22/6/2 19/7/2 10/8/2 +f 6/9/2 16/10/2 30/11/2 29/12/2 5/13/2 +f 21/14/3 22/15/3 12/16/3 11/17/3 +f 7/18/3 17/19/3 18/20/3 9/21/3 10/22/3 19/23/3 20/24/3 8/25/3 +f 20/24/3 19/23/3 18/20/3 17/19/3 25/26/3 26/27/3 +f 23/28/3 14/29/3 13/30/3 27/31/3 30/32/3 16/33/3 15/34/3 24/35/3 +f 3/36/4 7/37/4 8/38/4 4/39/4 +f 8/40/2 20/41/2 26/42/2 24/43/2 15/44/2 4/45/2 +f 13/30/3 14/29/3 3/46/3 4/47/3 15/34/3 16/33/3 6/48/3 2/49/3 +f 18/50/5 21/51/5 11/52/5 9/53/5 +f 24/54/6 26/55/6 25/56/6 23/57/6 +f 12/58/4 10/59/4 9/60/4 11/61/4 +f 19/62/6 22/63/6 21/51/6 18/50/6 +f 13/64/5 2/65/5 1/66/5 28/67/5 27/68/5 +f 7/18/5 3/69/5 14/70/5 23/71/5 25/26/5 17/19/5 +f 1/66/4 2/72/4 6/9/4 5/73/4 +f 27/68/6 28/74/6 29/75/6 30/76/6 diff --git a/media/adv_weapons_landmine_buried.obj b/media/adv_weapons_landmine_buried.obj new file mode 100644 index 0000000..cf10e45 --- /dev/null +++ b/media/adv_weapons_landmine_buried.obj @@ -0,0 +1,134 @@ +# Blender v2.82 (sub 7) OBJ File: '' +# www.blender.org +o mesh_landmine +v 0.500000 -0.775869 -0.500000 +v 0.500000 -0.650869 -0.500000 +v 0.375000 -0.650869 -0.375000 +v 0.375000 -0.650869 0.375000 +v 0.500000 -0.775869 0.500000 +v 0.500000 -0.650869 0.500000 +v 0.375000 -0.525869 -0.375000 +v 0.375000 -0.525869 0.375000 +v 0.125000 -0.525869 -0.125000 +v 0.125000 -0.525869 0.125000 +v 0.125000 -0.400869 -0.125000 +v 0.125000 -0.400869 0.125000 +v -0.125000 -0.650869 -0.500000 +v -0.125000 -0.650869 -0.375000 +v -0.125000 -0.650869 0.375000 +v -0.125000 -0.650869 0.500000 +v -0.125000 -0.525869 -0.375000 +v -0.125000 -0.525869 -0.125000 +v -0.125000 -0.525869 0.125000 +v -0.125000 -0.525869 0.375000 +v -0.125000 -0.400869 -0.125000 +v -0.125000 -0.400869 0.125000 +v -0.375000 -0.650869 -0.375000 +v -0.375000 -0.650869 0.375000 +v -0.375000 -0.525869 -0.375000 +v -0.375000 -0.525869 0.375000 +v -0.500000 -0.650869 -0.500000 +v -0.500000 -0.775869 -0.500000 +v -0.500000 -0.775869 0.500000 +v -0.500000 -0.650869 0.500000 +vt 0.500000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 0.937500 0.750000 +vt 0.937500 0.875000 +vt 0.875000 0.875000 +vt 0.875000 0.750000 +vt 0.687500 0.875000 +vt 0.687500 0.562500 +vt 0.687500 0.375000 +vt 0.750000 0.375000 +vt 0.750000 0.875000 +vt 0.750000 0.875000 +vt 0.750000 0.750000 +vt 0.875000 0.750000 +vt 0.875000 0.875000 +vt 0.875000 0.000000 +vt 0.875000 0.250000 +vt 0.750000 0.250000 +vt 0.750000 0.125000 +vt 0.625000 0.125000 +vt 0.625000 0.250000 +vt 0.500000 0.250000 +vt 0.500000 0.000000 +vt 0.875000 0.375000 +vt 0.500000 0.375000 +vt 0.437500 0.062500 +vt 0.312500 0.062500 +vt 0.312500 0.000000 +vt 0.500000 0.000000 +vt 0.500000 0.500000 +vt 0.312500 0.500000 +vt 0.312500 0.437500 +vt 0.437500 0.437500 +vt 0.875000 0.375000 +vt 0.937500 0.375000 +vt 0.937500 0.750000 +vt 0.875000 0.750000 +vt 0.875000 0.375000 +vt 0.875000 0.625000 +vt 0.875000 0.750000 +vt 0.812500 0.750000 +vt 0.812500 0.625000 +vt 0.812500 0.375000 +vt 0.062500 0.062500 +vt 0.062500 0.437500 +vt 0.000000 0.500000 +vt 0.000000 0.000000 +vt 0.937500 0.250000 +vt 1.000000 0.250000 +vt 1.000000 0.375000 +vt 0.937500 0.375000 +vt 0.750000 0.375000 +vt 0.812500 0.375000 +vt 0.812500 0.750000 +vt 0.750000 0.750000 +vt 1.000000 0.125000 +vt 0.937500 0.125000 +vt 0.937500 0.000000 +vt 1.000000 0.000000 +vt 0.937500 0.125000 +vt 1.000000 0.125000 +vt 0.562500 0.687500 +vt 0.562500 0.375000 +vt 0.625000 0.375000 +vt 0.625000 0.875000 +vt 0.562500 0.875000 +vt 0.937500 0.000000 +vt 0.937500 0.250000 +vt 0.937500 0.375000 +vt 0.687500 0.375000 +vt 0.625000 0.875000 +vt 0.500000 0.875000 +vt 0.500000 0.375000 +vt 0.562500 0.375000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 -0.0000 +s 1 +f 28/1/1 1/2/1 5/3/1 29/4/1 +f 12/5/2 22/6/2 19/7/2 10/8/2 +f 6/9/2 16/10/2 30/11/2 29/12/2 5/13/2 +f 21/14/3 22/15/3 12/16/3 11/17/3 +f 7/18/3 17/19/3 18/20/3 9/21/3 10/22/3 19/23/3 20/24/3 8/25/3 +f 20/24/3 19/23/3 18/20/3 17/19/3 25/26/3 26/27/3 +f 23/28/3 14/29/3 13/30/3 27/31/3 30/32/3 16/33/3 15/34/3 24/35/3 +f 3/36/4 7/37/4 8/38/4 4/39/4 +f 8/40/2 20/41/2 26/42/2 24/43/2 15/44/2 4/45/2 +f 13/30/3 14/29/3 3/46/3 4/47/3 15/34/3 16/33/3 6/48/3 2/49/3 +f 18/50/5 21/51/5 11/52/5 9/53/5 +f 24/54/6 26/55/6 25/56/6 23/57/6 +f 12/58/4 10/59/4 9/60/4 11/61/4 +f 19/62/6 22/63/6 21/51/6 18/50/6 +f 13/64/5 2/65/5 1/66/5 28/67/5 27/68/5 +f 7/18/5 3/69/5 14/70/5 23/71/5 25/26/5 17/19/5 +f 1/66/4 2/72/4 6/9/4 5/73/4 +f 27/68/6 28/74/6 29/75/6 30/76/6 diff --git a/media/adv_weapons_turret_base.mtl b/media/adv_weapons_turret_base.mtl new file mode 100644 index 0000000..8e756d5 --- /dev/null +++ b/media/adv_weapons_turret_base.mtl @@ -0,0 +1,12 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl Default_OBJ +Ns 225.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 diff --git a/media/adv_weapons_turret_base.obj b/media/adv_weapons_turret_base.obj new file mode 100644 index 0000000..e3ae78b --- /dev/null +++ b/media/adv_weapons_turret_base.obj @@ -0,0 +1,572 @@ +# Blender v2.82 (sub 7) OBJ File: '' +# www.blender.org +o mesh_turret_new +v 0.300000 -0.490814 -0.300000 +v 0.300000 -0.490814 -0.450000 +v 0.450000 -0.490814 -0.300000 +v 0.450000 -0.490814 -0.450000 +v 0.300000 -0.490814 0.450000 +v 0.300000 -0.490814 0.300000 +v 0.450000 -0.490814 0.450000 +v 0.450000 -0.490814 0.300000 +v 0.300000 -0.190814 -0.300000 +v 0.300000 -0.190814 -0.450000 +v 0.450000 -0.190814 -0.300000 +v 0.300000 -0.190814 0.450000 +v 0.300000 -0.190814 0.300000 +v 0.450000 -0.190814 0.300000 +v 0.450000 -0.190814 -0.150000 +v 0.300000 -0.190814 -0.150000 +v 0.450000 -0.040814 -0.150000 +v 0.300000 -0.040814 -0.150000 +v 0.300000 -0.190814 0.150000 +v 0.450000 -0.190814 0.150000 +v 0.300000 -0.040814 0.150000 +v 0.450000 -0.040814 0.150000 +v 0.450000 0.109186 -0.450000 +v 0.300000 0.109186 -0.300000 +v 0.300000 0.109186 0.300000 +v 0.450000 0.109186 0.450000 +v 0.150000 -0.190814 -0.300000 +v 0.150000 -0.040814 -0.300000 +v 0.150000 -0.040814 -0.450000 +v 0.150000 -0.190814 -0.450000 +v 0.150000 -0.190814 -0.150000 +v 0.150000 -0.190814 -0.000000 +v 0.300000 -0.190814 -0.000000 +v 0.150000 -0.190814 0.150000 +v 0.150000 -0.190814 0.300000 +v 0.150000 -0.190814 0.450000 +v 0.150000 -0.040814 0.450000 +v 0.150000 -0.040814 0.300000 +v 0.150000 0.109186 -0.150000 +v 0.150000 0.109186 0.150000 +v 0.300000 0.259186 -0.300000 +v 0.150000 0.259186 -0.150000 +v 0.150000 0.259186 0.150000 +v 0.300000 0.259186 0.300000 +v 0.150000 0.409186 -0.150000 +v 0.150000 0.409186 0.150000 +v -0.150000 -0.190814 -0.150000 +v -0.150000 -0.190814 -0.300000 +v -0.150000 -0.040814 -0.300000 +v -0.150000 -0.190814 0.300000 +v -0.150000 -0.190814 0.150000 +v -0.150000 -0.040814 0.300000 +v -0.150000 -0.040814 -0.450000 +v -0.150000 0.109186 -0.450000 +v -0.150000 0.109186 -0.300000 +v -0.150000 0.109186 -0.150000 +v -0.150000 0.109186 0.150000 +v -0.150000 -0.040814 0.450000 +v -0.150000 0.109186 0.300000 +v -0.150000 0.109186 0.450000 +v -0.150000 0.259186 -0.300000 +v -0.150000 0.259186 -0.150000 +v -0.150000 0.259186 0.150000 +v -0.150000 0.259186 0.300000 +v -0.150000 0.409186 -0.150000 +v -0.150000 0.409186 0.150000 +v -0.300000 -0.190814 -0.300000 +v -0.300000 -0.190814 -0.450000 +v -0.150000 -0.190814 -0.450000 +v -0.300000 -0.190814 -0.150000 +v -0.300000 -0.040814 -0.150000 +v -0.300000 -0.190814 0.150000 +v -0.300000 -0.040814 0.150000 +v -0.300000 -0.190814 0.300000 +v -0.150000 -0.190814 0.450000 +v -0.300000 -0.190814 0.450000 +v -0.300000 0.109186 -0.300000 +v -0.300000 0.109186 0.300000 +v -0.300000 0.259186 -0.300000 +v -0.300000 0.259186 0.300000 +v -0.450000 -0.490814 -0.300000 +v -0.450000 -0.490814 -0.450000 +v -0.300000 -0.490814 -0.300000 +v -0.300000 -0.490814 -0.450000 +v -0.450000 -0.490814 0.450000 +v -0.450000 -0.490814 0.300000 +v -0.300000 -0.490814 0.450000 +v -0.300000 -0.490814 0.300000 +v -0.450000 -0.190814 -0.300000 +v -0.450000 -0.190814 0.300000 +v -0.450000 -0.190814 -0.150000 +v -0.450000 -0.040814 -0.150000 +v -0.450000 -0.040814 0.150000 +v -0.450000 -0.190814 0.150000 +v -0.450000 0.109186 -0.450000 +v -0.450000 0.109186 0.450000 +vt 1.000000 0.470588 +vt 0.941176 0.529412 +vt 0.941176 0.470588 +vt 0.941176 0.705882 +vt 0.882353 0.823529 +vt 0.882353 0.705882 +vt 0.529412 0.941176 +vt 0.470588 1.000000 +vt 0.470588 0.941176 +vt 0.882353 0.705882 +vt 0.823529 0.823529 +vt 0.823529 0.705882 +vt 0.705882 0.823529 +vt 0.647059 0.941176 +vt 0.647059 0.823529 +vt 0.882353 0.823529 +vt 0.941176 0.941176 +vt 0.882353 0.941177 +vt 0.647059 0.941176 +vt 0.588235 0.823529 +vt 0.647059 0.823529 +vt 0.058824 0.764706 +vt 0.000000 0.705882 +vt 0.235294 0.705882 +vt 0.117647 1.000000 +vt 0.058824 0.941177 +vt 0.117647 0.941176 +vt 0.705882 0.705882 +vt 0.529412 0.941176 +vt 0.588235 1.000000 +vt 0.529412 1.000000 +vt 0.529412 0.823529 +vt 0.470588 0.941176 +vt 0.470588 0.823529 +vt 0.588235 0.941176 +vt 0.529412 0.823529 +vt 0.588235 0.823529 +vt 0.882353 0.352941 +vt 0.941177 0.470588 +vt 0.882353 0.470588 +vt 1.000000 0.117647 +vt 0.941177 0.235294 +vt 0.941176 0.117647 +vt 0.117647 0.941176 +vt 0.176471 1.000000 +vt 0.117647 1.000000 +vt 0.470588 0.705882 +vt 0.470588 0.823529 +vt 0.411765 0.823529 +vt 0.941176 0.000000 +vt 1.000000 0.117647 +vt 0.941177 0.117647 +vt 0.117647 0.588235 +vt 0.176471 0.647059 +vt 0.117647 0.647059 +vt 0.411765 0.882353 +vt 0.411765 0.823529 +vt 0.470588 0.823529 +vt 0.000000 0.941176 +vt 0.058824 1.000000 +vt 0.000000 1.000000 +vt 0.647059 0.235294 +vt 0.705882 0.294118 +vt 0.588235 0.352941 +vt 0.882353 0.470588 +vt 0.823529 0.705882 +vt 0.823529 0.470588 +vt 0.882353 0.470588 +vt 0.941176 0.588235 +vt 0.882353 0.588235 +vt 0.352941 0.352941 +vt 0.352941 0.000000 +vt 0.411765 0.235294 +vt 0.352941 0.823529 +vt 0.411765 0.941177 +vt 0.352941 0.941177 +vt 0.235294 0.470588 +vt 0.235294 0.411765 +vt 0.294118 0.411765 +vt 0.882353 0.823529 +vt 0.823529 0.941176 +vt 0.823529 0.823529 +vt 0.352941 0.705882 +vt 0.235294 0.823529 +vt 0.235294 0.705882 +vt 0.941176 0.235294 +vt 1.000000 0.352941 +vt 0.941176 0.352941 +vt 0.235294 0.941176 +vt 0.294118 1.000000 +vt 0.235294 1.000000 +vt 0.823529 0.235294 +vt 0.882353 0.000000 +vt 0.882353 0.235294 +vt 0.058824 0.058824 +vt 0.000000 0.000000 +vt 0.352941 0.000000 +vt 1.000000 0.470588 +vt 0.941176 0.352941 +vt 1.000000 0.352941 +vt 0.176471 0.941176 +vt 0.235294 1.000000 +vt 0.176471 1.000000 +vt 0.823529 0.411765 +vt 0.823529 0.235294 +vt 0.882353 0.235294 +vt 0.764706 0.588235 +vt 0.764706 0.470588 +vt 0.823529 0.588235 +vt 0.764706 0.941176 +vt 0.823529 0.823529 +vt 0.823529 0.941176 +vt 0.470588 0.941176 +vt 0.411765 1.000000 +vt 0.411765 0.941176 +vt 0.882353 0.235294 +vt 0.941177 0.352941 +vt 0.882353 0.352941 +vt 0.941176 0.705882 +vt 0.882353 0.588235 +vt 0.941176 0.588235 +vt 0.411765 0.941176 +vt 0.352941 1.000000 +vt 0.352941 0.941176 +vt 0.000000 0.941177 +vt 0.058824 0.882353 +vt 0.176471 0.882353 +vt 0.882353 0.058824 +vt 0.882353 0.000000 +vt 0.941176 0.000000 +vt 0.764706 0.941176 +vt 0.705882 0.823529 +vt 0.764706 0.823529 +vt 0.352941 0.941176 +vt 0.235294 0.823529 +vt 0.352941 0.823529 +vt 0.588235 0.941176 +vt 0.647059 1.000000 +vt 0.588235 1.000000 +vt 0.588235 0.705882 +vt 0.705882 0.823529 +vt 0.588235 0.823529 +vt 0.352941 1.000000 +vt 0.294118 0.941177 +vt 0.352941 0.941176 +vt 0.588235 0.705882 +vt 0.470588 0.823529 +vt 0.470588 0.705882 +vt 0.529412 0.470588 +vt 0.588235 0.352941 +vt 0.588235 0.705882 +vt 0.352941 0.352941 +vt 0.000000 0.352941 +vt 0.294118 0.294118 +vt 1.000000 0.529412 +vt 0.941176 0.823529 +vt 0.529412 1.000000 +vt 0.882353 0.823529 +vt 0.705882 0.941176 +vt 0.941176 0.823529 +vt 0.588235 0.941177 +vt 0.000000 0.882353 +vt 0.235294 0.882353 +vt 0.176471 0.764706 +vt 0.058824 1.000000 +vt 0.705882 0.823529 +vt 0.588235 0.941176 +vt 0.529412 0.941176 +vt 0.529412 0.941176 +vt 0.941176 0.352941 +vt 1.000000 0.235294 +vt 0.176471 0.941176 +vt 0.352941 0.823529 +vt 0.352941 0.705882 +vt 1.000000 0.000000 +vt 0.176471 0.588235 +vt 0.470588 0.941177 +vt 0.411765 0.941176 +vt 0.058824 0.941176 +vt 0.588235 0.000000 +vt 0.823529 0.000000 +vt 0.705882 0.058824 +vt 0.823529 0.058824 +vt 0.705882 0.117647 +vt 0.647059 0.117647 +vt 0.588235 0.235294 +vt 0.705882 0.235294 +vt 0.823529 0.294118 +vt 0.823529 0.352941 +vt 0.882353 0.705882 +vt 0.941176 0.470588 +vt 0.470588 0.294118 +vt 0.588235 0.294118 +vt 0.588235 0.352941 +vt 0.588235 0.000000 +vt 0.470588 0.058824 +vt 0.588235 0.058824 +vt 0.470588 0.117647 +vt 0.411765 0.117647 +vt 0.470588 0.235294 +vt 0.411765 0.823529 +vt 0.117647 0.470588 +vt 0.058824 0.588235 +vt 0.058824 0.647059 +vt 0.117647 0.705882 +vt 0.058824 0.705882 +vt 0.000000 0.647059 +vt 0.000000 0.588235 +vt 0.058824 0.470588 +vt 0.000000 0.470588 +vt 0.000000 0.411765 +vt 0.058824 0.411765 +vt 0.117647 0.411765 +vt 0.058824 0.352941 +vt 0.117647 0.352941 +vt 0.235294 0.588235 +vt 0.235294 0.647059 +vt 0.294118 0.705882 +vt 0.235294 0.705882 +vt 0.352941 0.588235 +vt 0.352941 0.647059 +vt 0.294118 0.647059 +vt 0.294118 0.588235 +vt 0.352941 0.411765 +vt 0.352941 0.470588 +vt 0.294118 0.470588 +vt 0.235294 0.352941 +vt 0.294118 0.352941 +vt 0.882353 0.941176 +vt 0.352941 0.823529 +vt 1.000000 0.235294 +vt 0.294118 0.941176 +vt 0.823529 0.000000 +vt 0.352941 0.235294 +vt 0.294118 0.058824 +vt 0.294118 0.235294 +vt 0.058824 0.235294 +vt 0.000000 0.235294 +vt 0.941176 0.470588 +vt 0.235294 0.941176 +vt 0.882353 0.411765 +vt 0.882353 0.470588 +vt 0.823529 0.470588 +vt 0.705882 0.470588 +vt 0.705882 0.411765 +vt 0.588235 0.411765 +vt 0.588235 0.352941 +vt 0.823529 0.352941 +vt 0.823529 0.705882 +vt 0.588235 0.705882 +vt 0.705882 0.647059 +vt 0.588235 0.647059 +vt 0.705882 0.588235 +vt 0.764706 0.823529 +vt 0.470588 1.000000 +vt 0.941177 0.235294 +vt 0.882353 0.705882 +vt 0.411765 1.000000 +vt 0.235294 0.941176 +vt 0.941176 0.058824 +vt 0.941176 0.235294 +vt 0.882353 0.235294 +vt 0.705882 0.941176 +vt 0.235294 0.941176 +vt 0.647059 0.941176 +vt 0.705882 0.705882 +vt 0.294118 1.000000 +vt 0.588235 0.823529 +vt 0.352941 0.705882 +vt 0.352941 0.647059 +vt 0.470588 0.647059 +vt 0.470588 0.588235 +vt 0.529412 0.588235 +vt 0.470588 0.470588 +vt 0.470588 0.411765 +vt 0.352941 0.411765 +vt 0.352941 0.352941 +vt 0.058824 0.294118 +vn 0.0000 -1.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +s 1 +f 1/1/1 4/2/1 3/3/1 +f 21/4/1 17/5/1 22/6/1 +f 5/7/1 8/8/1 7/9/1 +f 43/10/2 45/11/2 46/12/2 +f 66/13/3 62/14/3 63/15/3 +f 9/16/3 2/17/3 1/18/3 +f 49/19/1 29/20/1 28/21/1 +f 43/22/4 44/23/4 41/24/4 +f 17/25/5 16/26/5 15/27/5 +f 45/11/4 66/28/4 46/12/4 +f 21/29/6 20/30/6 19/31/6 +f 73/32/3 70/33/3 72/34/3 +f 58/35/1 38/36/1 37/37/1 +f 90/38/6 88/39/6 86/40/6 +f 65/41/6 42/42/6 62/43/6 +f 28/44/3 30/45/3 27/46/3 +f 39/47/3 31/48/3 32/49/3 +f 11/50/5 1/51/5 3/52/5 +f 34/53/1 33/54/1 19/55/1 +f 33/56/2 16/57/2 18/58/2 +f 37/59/3 35/60/3 36/61/3 +f 53/62/6 68/63/6 95/64/6 +f 41/65/2 25/66/2 24/67/2 +f 12/68/3 6/69/3 5/70/3 +f 23/71/2 26/72/2 17/73/2 +f 87/74/2 74/75/2 76/76/2 +f 47/77/1 70/78/1 67/79/1 +f 93/80/1 71/81/1 73/82/1 +f 57/83/1 39/84/1 40/85/1 +f 66/86/5 43/87/5 46/88/5 +f 48/89/2 53/90/2 49/91/2 +f 77/92/3 80/93/3 79/94/3 +f 25/95/4 26/96/4 23/97/4 +f 13/98/6 8/99/6 6/100/6 +f 75/101/2 52/102/2 58/103/2 +f 59/104/5 25/105/5 44/106/5 +f 58/107/5 37/108/5 60/109/5 +f 49/110/6 27/111/6 48/112/6 +f 81/113/1 84/114/1 83/115/1 +f 83/116/2 68/117/2 67/118/2 +f 67/119/5 81/120/5 83/121/5 +f 85/122/1 88/123/1 87/124/1 +f 80/125/4 63/126/4 62/127/4 +f 55/128/6 77/129/6 79/130/6 +f 52/131/5 35/132/5 38/133/5 +f 57/134/6 34/135/6 51/136/6 +f 71/137/5 91/138/5 70/139/5 +f 31/140/5 56/141/5 47/142/5 +f 93/143/6 72/144/6 94/145/6 +f 47/146/2 57/147/2 51/148/2 +f 93/149/3 96/150/3 95/151/3 +f 95/152/4 96/153/4 77/154/4 +f 1/1/1 2/155/1 4/2/1 +f 21/4/1 18/156/1 17/5/1 +f 5/7/1 6/157/1 8/8/1 +f 43/10/2 42/158/2 45/11/2 +f 66/13/3 65/159/3 62/14/3 +f 9/16/3 10/160/3 2/17/3 +f 49/19/1 53/161/1 29/20/1 +f 43/22/4 63/126/4 64/162/4 +f 41/24/4 61/163/4 42/164/4 +f 61/163/4 62/127/4 42/164/4 +f 43/22/4 64/162/4 44/23/4 +f 41/24/4 42/164/4 43/22/4 +f 17/25/5 18/165/5 16/26/5 +f 45/11/4 65/166/4 66/28/4 +f 21/29/6 22/167/6 20/30/6 +f 73/32/3 71/168/3 70/33/3 +f 58/35/1 52/169/1 38/36/1 +f 90/38/6 74/170/6 88/39/6 +f 65/41/6 45/171/6 42/42/6 +f 28/44/3 29/172/3 30/45/3 +f 32/49/3 34/173/3 40/174/3 +f 40/174/3 39/47/3 32/49/3 +f 11/50/5 9/175/5 1/51/5 +f 34/53/1 32/176/1 33/54/1 +f 18/58/2 21/177/2 33/56/2 +f 21/177/2 19/178/2 33/56/2 +f 37/59/3 38/179/3 35/60/3 +f 23/180/6 4/181/6 10/182/6 +f 4/181/6 2/183/6 10/182/6 +f 10/182/6 30/184/6 29/185/6 +f 95/64/6 54/186/6 53/62/6 +f 54/186/6 23/180/6 29/185/6 +f 53/62/6 54/186/6 29/185/6 +f 23/180/6 10/182/6 29/185/6 +f 53/62/6 69/187/6 68/63/6 +f 84/188/6 82/189/6 68/63/6 +f 82/189/6 95/64/6 68/63/6 +f 41/65/2 44/190/2 25/66/2 +f 12/68/3 13/191/3 6/69/3 +f 11/192/2 3/193/2 4/194/2 +f 26/72/2 7/195/2 14/196/2 +f 7/195/2 8/197/2 14/196/2 +f 14/196/2 20/198/2 22/199/2 +f 11/192/2 4/194/2 23/71/2 +f 17/73/2 15/200/2 11/192/2 +f 26/72/2 14/196/2 22/199/2 +f 17/73/2 11/192/2 23/71/2 +f 26/72/2 22/199/2 17/73/2 +f 87/74/2 88/201/2 74/75/2 +f 51/202/1 34/53/1 35/203/1 +f 34/53/1 19/55/1 13/204/1 +f 19/55/1 20/205/1 14/206/1 +f 13/204/1 12/207/1 36/208/1 +f 19/55/1 14/206/1 13/204/1 +f 34/53/1 13/204/1 35/203/1 +f 13/204/1 36/208/1 35/203/1 +f 50/209/1 75/210/1 76/211/1 +f 50/209/1 76/211/1 74/212/1 +f 51/202/1 35/203/1 50/209/1 +f 47/77/1 51/202/1 72/213/1 +f 51/202/1 50/209/1 74/212/1 +f 74/212/1 90/214/1 94/215/1 +f 51/202/1 74/212/1 72/213/1 +f 33/54/1 32/176/1 31/216/1 +f 16/217/1 33/54/1 31/216/1 +f 11/218/1 15/219/1 16/217/1 +f 30/220/1 10/221/1 9/222/1 +f 9/222/1 11/218/1 16/217/1 +f 16/217/1 31/216/1 27/223/1 +f 31/216/1 47/77/1 27/223/1 +f 30/220/1 9/222/1 27/223/1 +f 9/222/1 16/217/1 27/223/1 +f 68/224/1 69/225/1 48/226/1 +f 48/226/1 27/223/1 47/77/1 +f 74/212/1 94/215/1 72/213/1 +f 70/78/1 91/227/1 89/228/1 +f 70/78/1 89/228/1 67/79/1 +f 47/77/1 72/213/1 70/78/1 +f 68/224/1 48/226/1 67/79/1 +f 48/226/1 47/77/1 67/79/1 +f 93/80/1 92/229/1 71/81/1 +f 57/83/1 56/230/1 39/84/1 +f 66/86/5 63/231/5 43/87/5 +f 48/89/2 69/232/2 53/90/2 +f 77/92/3 78/233/3 80/93/3 +f 23/97/4 54/234/4 24/235/4 +f 54/234/4 55/236/4 24/235/4 +f 59/237/4 60/238/4 25/95/4 +f 60/238/4 26/96/4 25/95/4 +f 23/97/4 24/235/4 25/95/4 +f 13/98/6 14/239/6 8/99/6 +f 75/101/2 50/240/2 52/102/2 +f 44/106/5 64/241/5 59/104/5 +f 64/241/5 80/242/5 59/104/5 +f 80/242/5 78/243/5 59/104/5 +f 37/108/5 36/244/5 12/245/5 +f 12/245/5 5/246/5 7/247/5 +f 26/248/5 60/109/5 37/108/5 +f 60/109/5 96/249/5 58/107/5 +f 96/249/5 85/250/5 76/251/5 +f 85/250/5 87/252/5 76/251/5 +f 76/251/5 75/253/5 58/107/5 +f 12/245/5 7/247/5 26/248/5 +f 37/108/5 12/245/5 26/248/5 +f 96/249/5 76/251/5 58/107/5 +f 49/110/6 28/254/6 27/111/6 +f 81/113/1 82/255/1 84/114/1 +f 83/116/2 84/256/2 68/117/2 +f 67/119/5 89/257/5 81/120/5 +f 85/122/1 86/258/1 88/123/1 +f 61/163/4 79/259/4 62/127/4 +f 79/259/4 80/125/4 62/127/4 +f 80/125/4 64/162/4 63/126/4 +f 79/130/6 61/260/6 55/128/6 +f 61/260/6 41/261/6 55/128/6 +f 41/261/6 24/262/6 55/128/6 +f 52/131/5 50/263/5 35/132/5 +f 57/134/6 40/264/6 34/135/6 +f 71/137/5 92/265/5 91/138/5 +f 31/140/5 39/266/5 56/141/5 +f 93/143/6 73/267/6 72/144/6 +f 47/146/2 56/268/2 57/147/2 +f 82/269/3 81/270/3 89/271/3 +f 89/271/3 91/272/3 92/273/3 +f 93/149/3 94/274/3 90/275/3 +f 90/275/3 86/276/3 85/277/3 +f 95/151/3 82/269/3 89/271/3 +f 95/151/3 89/271/3 92/273/3 +f 90/275/3 85/277/3 96/150/3 +f 95/151/3 92/273/3 93/149/3 +f 93/149/3 90/275/3 96/150/3 +f 96/153/4 60/238/4 78/278/4 +f 60/238/4 59/237/4 78/278/4 +f 55/236/4 54/234/4 77/154/4 +f 54/234/4 95/152/4 77/154/4 +f 96/153/4 78/278/4 77/154/4 diff --git a/mine.lua b/mine.lua new file mode 100644 index 0000000..b5fb887 --- /dev/null +++ b/mine.lua @@ -0,0 +1,108 @@ +minetest.register_craft({ + output = 'adv_weapons:landmine_placed 3', + recipe = { + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'default:steel_ingot', 'tnt:tnt', 'default:steel_ingot'}, + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'} + } +}) + + +local size = 0.99 -- in order to get rid of z fighting +local box = { + type = "fixed", + fixed = { + {-size/2, -0.5, -size/2, size/2, -0.5 + size * 3/8, size/2}, + }, +} + +function clear_meta(pos) + minetest.get_meta(pos):set_string("owner", "") +end + +function on_walk(player) + if is_opponent(player:get_player_name(), minetest.get_meta(player:get_pos()):get_string("owner")) then + minetest.remove_node(player:get_pos()) + tnt.boom(player:get_pos(), {radius = 3}) + clear_meta(player:get_pos()) + end +end + +local def = { + description = "Landmine", + drawtype = "mesh", + visual_scale = size, + mesh = "adv_weapons_landmine.obj", + tiles = {"adv_weapons_landmine.png"}, + selection_box = box, + collision_box = box, + sunlight_propagates = true, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return + end + if pointed_thing.above.y <= pointed_thing.under.y then + return + end + local pointed_node = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name] + if pointed_node and pointed_node.collision_box and pointed_node.collision_box.type == "fixed" then + local is_high_enough = false + for _, box in pairs(pointed_node.collision_box.fixed) do + if box[5] == 0.5 then + is_high_enough = true + break + end + end + if not is_high_enough then + return + end + end + minetest.item_place(itemstack, placer, pointed_thing) + local meta = minetest.get_meta(pointed_thing.above) + meta:set_string("owner", placer:get_player_name()) + itemstack:take_item() + return itemstack + end, + on_blast = function(pos) + clear_meta(pos) + minetest.remove_node(pos) + tnt.boom(pos, {radius = 3}) + end, + on_punch = function(...) + clear_meta(...) + return unpack({minetest.node_dig(...)}) + end +} +local landmines = modlib.table.set({"adv_weapons:landmine_placed", "adv_weapons:landmine_buried"}) +-- landmines can be (un)buried by digging below them +minetest.register_on_dignode(function(pos, oldnode, _) + pos.y = pos.y + 1 + local nodename = minetest.get_node(pos).name + if nodename == "adv_weapons:landmine_placed" then + minetest.swap_node(pos, {name = "adv_weapons:landmine_buried"}) + pos.y = pos.y - 1 + minetest.set_node(pos, oldnode) + elseif nodename == "adv_weapons:landmine_buried" then + minetest.swap_node(pos, {name = "adv_weapons:landmine_placed"}) + minetest.spawn_falling_node(pos) + end +end) +minetest.register_node("adv_weapons:landmine_placed", def) +local b = box.fixed[1] +b[2] = b[2] - 0.4 +b[5] = b[5] - 0.4 +def = modlib.table.copy(def) +-- moving the box down +def.mesh = "adv_weapons_landmine_buried.obj" +def.groups = {not_in_creative_inventory = 1, falling_node = 1} +def.on_punch = def.on_blast +minetest.register_node("adv_weapons:landmine_buried", def) + +minetest.register_globalstep(function() + for _, player in pairs(minetest.get_connected_players()) do + local standing_on = minetest.get_node(player:get_pos()) + if landmines[standing_on.name] then + on_walk(player) + end + end +end) \ No newline at end of file diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..cb2f332 --- /dev/null +++ b/mod.conf @@ -0,0 +1,4 @@ +name = adv_weapons +description = Adds a variety of advanced weapons. +depends = modlib, tnt +optional_depends = player_api \ No newline at end of file diff --git a/special.lua b/special.lua new file mode 100644 index 0000000..bc2c180 --- /dev/null +++ b/special.lua @@ -0,0 +1,369 @@ +minetest.register_craft({ + output = 'adv_weapons:grappling_hook', + recipe = { + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'', 'default:mese_crystal', 'default:steel_ingot'}, + {'default:diamond', '', 'default:steel_ingot'} + } +}) + +function set_rotation(obj, size) + obj:set_rotation({x = math.atan2(size.y, math.sqrt(size.z*size.z+size.x*size.x)), y = -math.atan2(size.x, size.z), z = 0}) +end + +--[[minetest.register_tool("adv_weapons:whip", { + description = "Whip", + range = 7, + inventory_image = "adv_weapons_whip.png", + tool_capabilities = {bloody = 1, stunny = 1}, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing and pointed_thing.type == "object" then + local victim = pointed_thing.ref + if user then + local time_since_last = (minetest.get_us_time() - last_use[user:get_player_name()]) / 1000000 + victim:punch(user, time_since_last, {bloody = 1, stunny = 1}) + itemstack:add_wear(1000) + end + end + itemstack:add_wear(100) + return itemstack + end, + on_secondary_use = function(itemstack, user, pointed_thing) + if pointed_thing and pointed_thing.type == "object" then + local victim = pointed_thing.ref + if victim:is_player() then + local wield_name = victim:get_wielded_item():get_name() + local wield_def = minetest.registered_items[wield_name] + if wield_name and wield_def and wield_def.on_drop then + victim:set_wielded_item(wield_def.on_drop(victim:get_wielded_item(), victim, {x=0, y=victim:get_properties().eye_height, z=0})) + end + end + itemstack:add_wear(2000) + end + itemstack:add_wear(100) + return itemstack + end +})]] + +local re = "aw_bs.png" +local rs = "blank.png" +minetest.register_entity("adv_weapons:beam", { + initial_properties = { + hp = 1, + visual = "cube", + visual_size = {x = 0, y = 0, z = 0}, + textures = {rs,rs,rs,rs,re,re}, + physical = false, + collide_with_objects = false, + collisionbox = {0,0,0,0,0,0}, + pointable = false, + infotext = "Rope", + glow = 14 + }, + on_activate = function(self, staticdata) + self.object:set_armor_groups({immortal = 1}) + if staticdata == "deleteme" then + self.object:remove() + return + end + if staticdata ~= "" then + local size = minetest.parse_json(staticdata) + adjust_rope(self.object, size) + end + end, + get_staticdata = function(self) + return "deleteme" + --return (self._size and minetest.write_json(self._size)) or "" + end, +}) + +function check_pos(pos) + local node = minetest.registered_nodes[minetest.get_node(pos).name] + return node and node.walkable ~= false +end + +function check_hooked(self) + local obj = self.object + local checked = {} + for _, offset in pairs({vector.multiply(vector.normalize(self._.last_velocity), 0.4), {x = 0, y = -0.2, z = 0}}) do + local hook_pos = vector.add(obj:get_pos(), offset) + local check = true + for _, pos in pairs(checked) do + if vector.equals(pos, hook_pos) then + check = false + break + end + end + if check then + if check_pos(hook_pos) then + return true + end + table.insert(checked, vector.floor(hook_pos)) + end + end +end + +local function remove_ascent_aid(self) + if self._owner then + local clicker = minetest.get_player_by_name(self._owner) + clicker:set_properties({visual_size = vector.new(1,1,1)}) + if player_api then + player_api.player_attached[clicker:get_player_name()] = nil + minetest.after(0.1, function() + player_api.set_animation(clicker, "stand", 30) + end) + end + end +end + +local gt = "adv_weapons_grappling_hook_texture.png" +minetest.register_entity("adv_weapons:grappling_hook", { + initial_properties = { + hp = 1, + visual = "mesh", + mesh = "adv_weapons_grappling_hook.obj", + visual_size = {x = 10, y = 10, z = 10}, + textures = {gt,gt,gt,gt,gt,gt}, + physical = true, + collide_with_objects = true, + collisionbox = {-0.2,-0.2,-0.2,0.2,0.2,0.2}, + infotext = "Grappling Hook" + }, + on_step = function(self, dtime) + local obj = self.object + if self._.last_velocity then + if self._.hooked then + if self._last_check < 0.5 then + self._last_check = self._last_check + dtime + elseif not check_hooked(self) then + if self._ascent_aid then + remove_ascent_aid(self._ascent_aid:get_luaentity()) + self._ascent_aid:remove() + self._ascent_aid = nil + end + if self._rope then + self._rope:remove() + self._rope = nil + end + self._.hooked = false + self._.last_velocity = obj:get_velocity() + obj:set_acceleration{x=0, y=-9.81, z=0} + end + return + end + local expected_vel = vector.add(self._.last_velocity, vector.multiply(obj:get_acceleration(), dtime)) + local thresh_diff = vector.length(vector.subtract(expected_vel, obj:get_velocity())) + if thresh_diff >= 0.05 and check_hooked(self) then + self._.hooked = true + self._last_check = 0 + obj:set_velocity{x=0, y=0, z=0} + obj:set_acceleration{x=0, y=0, z=0} + set_rotation(obj, self._.last_velocity) + if self._origin then + local end_pos = vector.add(obj:get_pos(), vector.multiply(vector.normalize(self._.last_velocity), -0.4)) + local d = vector.distance(end_pos, self._origin) + if d < 1 then + return + end + if d > 20 then + local dir = vector.normalize(vector.subtract(self._origin, end_pos)) + self._origin = vector.add(vector.multiply(dir, 20), end_pos) + end + local ascent_aid = minetest.add_entity(self._origin, "adv_weapons:ascent_aid") + self._ascent_aid = ascent_aid + local aid_dir = vector.subtract(end_pos, self._origin) + ascent_aid:get_luaentity()._direction = vector.normalize(aid_dir) + ascent_aid:get_luaentity()._origin = self._origin + ascent_aid:get_luaentity()._length = vector.length(aid_dir) + set_rotation(ascent_aid, vector.normalize(aid_dir)) + self._rope = spawn_rope(end_pos, self._origin) + end + return + end + end + -- slowdown (air resistance) + obj:set_velocity(vector.multiply(obj:get_velocity(), math.pow(0.99, dtime))) + local size = obj:get_velocity() + self._.last_velocity = obj:get_velocity() + -- rotate properly + set_rotation(obj, size) + end, + on_punch = function(self, clicker) + if self._.hooked then + local inv = clicker:get_inventory() + if inv:room_for_item("main", "adv_weapons:grappling_hook") then + inv:add_item("main", "adv_weapons:grappling_hook") + if self._ascent_aid then + remove_ascent_aid(self._ascent_aid:get_luaentity()) + self._ascent_aid:remove() + self._ascent_aid = nil + end + if self._rope then + self._rope:remove() + self._rope = nil + end + self.object:remove() + end + end + end, + on_activate = function(self, staticdata) + self.object:set_armor_groups({immortal = 1}) + self._ = self._ or {} + if staticdata ~= "" then + local parsed = minetest.parse_json(staticdata) + if parsed then + modlib.table.add_all(self._, parsed) + end + end + if self._.hooked then + self._last_check = 0 + end + end, + get_staticdata = function(self) + return minetest.write_json(self._) + end, +}) + +local aa_box = {-0.1,0.01,-0.1,0.1,0.1,0.1} +minetest.register_entity("adv_weapons:ascent_aid", { + initial_properties = { + hp = 1, + visual = "cube", + visual_size = {x = 0.4, y = 0.2, z = 0.4}, + textures = {gt,gt,gt,gt,gt,gt}, + collisionbox = aa_box, + selectionbox = {-0.2,-0.1,-0.2,0.2,0.1,0.2}, + physical = true, + infotext = "Ascent Aid" + }, + on_activate = function(self, staticdata) + self.object:set_armor_groups({immortal = 1}) + if staticdata == "deleteme" then + self.object:remove() + return + end + if staticdata ~= "" then + self._size = minetest.parse_json(staticdata) + adjust_rope(self.object, size) + end + end, + get_staticdata = function(self) + return "deleteme" + --return (self._size and minetest.write_json(self._size)) or "" + end, + on_rightclick = function(self, clicker) + if vector.distance(self.object:get_pos(), clicker:get_pos()) >= 1 then + return + end + if clicker:get_attach() == self.object then + clicker:set_detach() + self.object:set_properties({collisionbox = aa_box, selectionbox = {-0.2,-0.1,-0.2,0.2,0.1,0.2}}) + self._owner = nil + clicker:set_properties({visual_size = vector.new(1,1,1)}) + if player_api then + player_api.player_attached[clicker:get_player_name()] = nil + minetest.after(0.1, function() + player_api.set_animation(clicker, "stand", 30) + end) + end + return + end + clicker:set_attach(self.object, "", {x = 0, y = 12, z = 0}, {x = 180, y = 0, z = 0}) + --local box = modlib.table.copy(clicker:get_properties().collisionbox) + --box[2] = box[2] + 0.01 + --self.object:set_properties({collisionbox = box, selectionbox = {-0.2,-0.1,-0.2,0.2,0.1,0.2}}) + clicker:set_properties({visual_size = vector.divide(vector.new(1,1,1), {x = 0.4, y = 0.2, z = 0.4})}) + self._owner = clicker:get_player_name() + if player_api then + player_api.player_attached[clicker:get_player_name()] = true + minetest.after(0.1, function() + player_api.set_animation(clicker, "lay", 30) + end) + end + clicker:set_look_horizontal(self.object:get_yaw()) + end, + on_step = function(self, dtime) + local obj = self.object + obj:set_velocity(vector.multiply(obj:get_velocity(), math.pow(0.75, dtime))) + local speed = vector.length(obj:get_velocity()) + if speed < 0.1 then + obj:set_velocity(vector.new(0,0,0)) + end + local line_off + if self._origin then + local translated = vector.subtract(obj:get_pos(), self._origin) + line_off = math.min(self._length-0.1, math.max(0.1, vector.dot(translated, self._direction))) + local closest = vector.add(vector.multiply(self._direction, line_off), self._origin) + local diff = vector.length(vector.subtract(obj:get_pos(), closest)) + if diff >= 0.11 then + obj:set_velocity(vector.new(0,0,0)) + obj:set_pos(closest) + return + end + end + if speed > 5 then + return + end + if self._owner then + local clicker = minetest.get_player_by_name(self._owner) + clicker:set_properties({visual_size = vector.divide(vector.new(1,1,1), {x = 0.4, y = 0.2, z = 0.4})}) + local control = clicker:get_player_control() + local direction = self._direction--clicker:get_look_dir() + set_rotation(obj, direction) + local factor = 0 + if control.up and line_off < self._length - 0.2 then + factor = 1 + elseif control.down and line_off > 0.2 then + factor = -1 + end + obj:set_velocity(vector.add(obj:get_velocity(), vector.multiply(direction, factor*0.5))) + end + end +}) + +function adjust_rope(rope, size) + rope:get_luaentity()._size = size + local length = vector.length(size) + local segments = {} + for i=0, length*2 do + table.insert(segments, "0,"..(i*19).."=aw_bs.png") + end + local rs = "[combine:16x"..(#segments*19)..":"..table.concat(segments, ":") + segments = {} + for i=0, length*2 do + table.insert(segments, (i*19)..",0=aw_rs.png") + end + local rss = "[combine:"..(#segments*19).."x16:"..table.concat(segments, ":") + rope:set_properties({visual_size = {x = 0.1, y = 0.1, z = length}, textures = {rs, rs, rss, rss, re, re}}) + size = vector.normalize(size) + set_rotation(rope, size) +end + +function spawn_rope(origin, target) + local size = vector.subtract(target, origin) + local rope = minetest.add_entity(vector.add(origin, vector.divide(size, 2)), "adv_weapons:beam") + adjust_rope(rope, size) + return rope +end + +minetest.register_tool("adv_weapons:grappling_hook", { + description = "Grappling Hook", + range = 20, + inventory_image = "adv_weapons_grappling_hook.png", + on_use = function(itemstack, user, pointed_thing) + local pos = vector.add(user:get_pos(), vector.new(0,user:get_properties().eye_height,0)) + pos = vector.add(pos, vector.multiply(user:get_look_dir(), 0.5)) + local hook = minetest.add_entity(pos, "adv_weapons:grappling_hook") + hook:get_luaentity()._origin = vector.add(user:get_pos(), vector.new(0, 0.01, 0)) + hook:get_luaentity()._owner = user:get_player_name() + local velocity = vector.normalize(vector.add(user:get_look_dir(), vector.multiply( + vector.subtract({x = math.random(), y = math.random(), z = math.random()}, 0.5), 0.1))) + hook:set_velocity(vector.multiply(velocity, 10)) + hook:set_acceleration({x=0, y=-9.81, z=0}) + itemstack:take_item() + return itemstack + --[[if pointed_thing.under then + spawn_rope(user:get_pos(), pointed_thing.under) + end]] + end +}) \ No newline at end of file diff --git a/textures/adv_weapons_bullet.png b/textures/adv_weapons_bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..13188634fc011c300f9da50e2561b25c9e6df493 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5M?jcysy3fAP|)4e z#WBR9H#y}1-@nHK=_)D>-pYQpC)fm5OS^rPDV6{L literal 0 HcmV?d00001 diff --git a/textures/adv_weapons_crosshair.png b/textures/adv_weapons_crosshair.png new file mode 100644 index 0000000000000000000000000000000000000000..784fd5a2c522233dde948ddcb7830481c64e0d54 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5M?jcysy3fAP%zTd z#WBR9ckN_PJ_ZF2=9T~d7w=tBczA<_`(-iF1{04U8HNV;^_R7)^EOnZEmnPU;r+7k z6QR|{JI-zCnzr1QS!Y5@=Pc{2hMm^;?G3LUyQ0wQZh1Q5mdKI;Vst0JXb26aWAK literal 0 HcmV?d00001 diff --git a/textures/adv_weapons_grappling_hook.png b/textures/adv_weapons_grappling_hook.png new file mode 100644 index 0000000000000000000000000000000000000000..eb3657806ef6a88c93217d1fd792a5715dc6b295 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5M?jcysy3fAP;io` zi(`mI@6t(*d`A^HTsD48kjd>cGk?6^W0{!l&$*&XHUcu+1RHMrXrI^4_FT20;Jc8| zC$^cHJ9aa2>{Yq>+F^BC(5>u4tGrLDoV}ZSy>98utG6Y)k7XvLonJUrHf6!8-#shY z*G@UVYTM#nTIq*MHte>{W#qDQjANAbsP1KGN~wwb&0O?nnYu^a*ZmBfhQ_}c8D{6s U;QQQs66iVxPgg&ebxsLQ0DF#9uK)l5 literal 0 HcmV?d00001 diff --git a/textures/adv_weapons_grappling_hook_texture.png b/textures/adv_weapons_grappling_hook_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..45eb34ed58adcb760464055e6779c37417e703a0 GIT binary patch literal 855 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 b_jct!oKZ!!^r7Bp00000NkvXXu0mjfADDbN literal 0 HcmV?d00001 diff --git a/textures/adv_weapons_rope_end.png b/textures/adv_weapons_rope_end.png new file mode 100644 index 0000000000000000000000000000000000000000..cd0404b12d146e83c5aaee04181ba5934b02c1b1 GIT binary patch literal 1067 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 literal 0 HcmV?d00001 diff --git a/textures/adv_weapons_whip.png b/textures/adv_weapons_whip.png new file mode 100644 index 0000000000000000000000000000000000000000..15134db7d4bbd2176a92609a2cff05058f22a837 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5M?jcysy3fAP%zii z#WBR9ckLu^p#usW&d$r(UtcWRa<6Bd)mP@Gu;~+Rm^oDVJ-3#4R!mLdJXK*=JVk*! z(rk9-HmAP*N6Hqx<-T_0>cz8i&bnES0y&Nh4dEN#-~Jnu?^{~W#<}ZwjN!~ApV-C{ g*UbW(6WBg6Y!*{x>ssb31GJdI)78&qol`;+0QC?)ga7~l literal 0 HcmV?d00001 diff --git a/textures/aw_bs.png b/textures/aw_bs.png new file mode 100644 index 0000000000000000000000000000000000000000..ef9e22e283fe98cdc1fa616bf35def524a79cd05 GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRx!3HE}ruUu)Qk(@Ik;M!Qd`Cc-ajG_-G*D39 z)5S5wqBl9^$N&HKhbOT0ERK_4Nw~t@%-B=a*vQE6eUixMm(`5{K&1?xu6{1-oD!M< DG@>32 literal 0 HcmV?d00001 diff --git a/textures/aw_rs.png b/textures/aw_rs.png new file mode 100644 index 0000000000000000000000000000000000000000..071dc35ba806814e5190df2bf6118fde9b06491a GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^!a&T=!3HGRT)yZ4Db50q$YKTtz9S&aI8~cZ8Yn35 z>Eak-(VLv`= self.object:get_pos().y + and minetest.line_of_sight(eye_pos, player_pos) then + local distance = vector.distance(self.object:get_pos(), player_pos) + if distance < 20 then + return distance + end + end + return false +end + +minetest.register_entity("adv_weapons:turret_gatlin_barrel", { + initial_properties = { + hp = 1, + visual = "mesh", + mesh = "adv_weapons_gatlin_barrel.obj", + visual_size = {x = 8, y = 8, z = 8}, + textures = {"adv_weapons_grappling_hook_texture.png"}, + physical = false, + collide_with_objects = false, + collisionbox = {0,0,0,0,0,0}, + pointable = false, + infotext = "Gatlin Barrel" + }, + on_activate = function(self, staticdata) + self.object:set_armor_groups({immortal = 1}) + self._dtime = 0 + self._owner = staticdata + end, + get_staticdata = function(self) + return self._owner + end, + on_step = function(self, dtime) + if minetest.get_node(self.object:get_pos()).name ~= "adv_weapons:turret_base" then + self.object:remove() + minetest.add_item(self.object:get_pos(), "adv_weapons:gatlin_barrel") + return + end + self._dtime = self._dtime + dtime + local target_ref + if self._target then + target_ref = minetest.get_player_by_name(self._target) + if not target_player(self, target_ref) then + target_ref = nil + end + end + if not target_ref then + local min_distance = math.huge + for _, player in pairs(minetest.get_connected_players()) do + local distance = target_player(self, player) + if distance then + if distance < min_distance then + min_distance = distance + target_ref = player + end + end + end + end + if target_ref then + local player_pos = target_ref:get_pos() + player_pos.y = player_pos.y + target_ref:get_properties().eye_height + self._target_rotation = get_rotation(vector.direction(self.object:get_pos(), player_pos)) + end + if self._target_rotation then + local total_diff = vector.subtract(self._target_rotation, self.object:get_rotation()) + total_diff = vector.apply(total_diff, function(c) + if math.abs(c) > math.pi then + return -(2*math.pi-c) + end + return c + end) + local diff = vector.length(total_diff) + if diff < 0.1 then -- time for SHOOT + if self._dtime > 0.5 then + local r = self.object:get_rotation() + local d = {} + -- x rotation + d.y = math.sin(r.x) + d.z = math.cos(r.x) + -- y rotation + d.x = -(d.z * math.sin(r.y)) + d.z = d.z * math.cos(r.y) + local start = vector.add(self.object:get_pos(), vector.multiply(d, 0.75)) + minetest.add_particle({ + pos = start, + velocity = vector.multiply(d, 10), + --acceleration = {x=0, y=0, z=0}, + expirationtime = 10, + size = 0.2, + collisiondetection = true, + collision_removal = true, + object_collision = true, + glow = 14, + texture = "adv_weapons_bullet.png", + }) + for thing in minetest.raycast(start, vector.add(start, vector.multiply(d, 20)), true, true) do + if thing.type ~= "object" then + break + end + thing.ref:punch(self.object, 1, {full_punch_interval=1, damage_groups = {fleshy=2}}, d) + end + self._dtime = 0 + end + end + if diff < 0.05 then + self.object:set_rotation(self._target_rotation) + else + local rotate = vector.add(self.object:get_rotation(), vector.multiply(total_diff, math.min(1, dtime*2))) + self.object:set_rotation(rotate) + end + end + end +}) + +-- HACK should use item instead +minetest.register_node("adv_weapons:gatlin_barrel", { + groups = {not_in_creative_inventory = 1}, + description = "Gatlin Barrel", + drawtype = "mesh", + mesh = "adv_weapons_gatlin_barrel.obj", + tiles = {"adv_weapons_grappling_hook_texture.png"}, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return + end + if minetest.get_node(pointed_thing.under).name ~= "adv_weapons:turret_base" then + return + end + local above = vector.add(pointed_thing.under, {x=0, y=0.3, z=0}) + local ent = minetest.add_entity(above, "adv_weapons:turret_gatlin_barrel") + ent:get_luaentity()._owner = placer:get_player_name() + itemstack:take_item() + return itemstack + end +}) + +minetest.register_node("adv_weapons:turret_base", { + paramtype = "light", + sunlight_propagates = true, + groups = {cracky = 1, level = 3, falling_node = 1}, + --[[collisionbox = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + },]] + description = "Turret Base", + drawtype = "mesh", + mesh = "adv_weapons_turret_base.obj", + tiles = {"adv_weapons_grappling_hook_texture.png"} +}) \ No newline at end of file