Add files via upload

This commit is contained in:
AiTechEye 2018-08-17 21:08:20 +02:00 committed by GitHub
parent b7758c2208
commit a9eeec268a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
75 changed files with 4973 additions and 0 deletions

274
craft.lua Normal file

@ -0,0 +1,274 @@
minetest.register_craft({
output = "portalgun:turretgun",
recipe = {
{"", "portalgun:secam_off", ""},
{"", "default:mese_crystal",""},
{"default:steel_ingot", "dye:white", "default:steel_ingot"},
}
})
minetest.register_craft({
output = "portalgun:cplps1",
recipe = {{"default:mese_crystal_fragment","dye:grey","dye:grey"},
{"portalgun:apb","dye:grey","dye:grey"},
{"default:mese_crystal_fragment","dye:grey","dye:grey"},
}
})
minetest.register_craft({
output = "portalgun:sign_numa1 3",
recipe = {{"dye:black","dye:black","dye:white"},
{"portalgun:testblock","dye:black","dye:white"},
{"dye:white","dye:black","dye:white"},
}
})
minetest.register_craft({
output = "portalgun:sign_x 2",
recipe = {{"dye:blue","portalgun:testblock","dye:blue"},
{"default:glass","dye:blue","default:glass"},
{"dye:blue","default:mese_crystal_fragment","dye:blue"},
}
})
minetest.register_craft({
output = "portalgun:warntape 3",
recipe = {{"dye:black","dye:yellow","dye:black"},
{"default:stick","default:stick","default:stick"},
}
})
minetest.register_craft({
output = "portalgun:door_1",
recipe = {{"","portalgun:testblock","portalgun:testblock"},
{"","portalgun:testblock","portalgun:testblock"},
{"default:mese_crystal_fragment","portalgun:testblock","portalgun:testblock"},
}
})
minetest.register_craft({
output = "portalgun:toxwater_1 9",
recipe = {{"default:dirt","default:dirt","default:dirt"},
{"default:dirt","bucket:bucket_lava","default:dirt"},
{"default:dirt","default:dirt","default:dirt"},
}
})
minetest.register_craft({
output = "portalgun:portaltarget_1",
recipe = {{"","portalgun:testblock",""},
{"default:mese_crystal_fragment","dye:blue","default:mese_crystal_fragment"},
}
})
minetest.register_craft({
output = "portalgun:portaltarget_2",
recipe = {{"","portalgun:testblock",""},
{"default:mese_crystal_fragment","dye:orange","default:mese_crystal_fragment"},
}
})
minetest.register_craft({
output = "portalgun:sign2",
recipe = {{"","portalgun:testblock",""},
{"dye:white","dye:black","dye:orange"},
}
})
minetest.register_craft({
output = "portalgun:sign1",
recipe = {{"","portalgun:testblock",""},
{"dye:white","dye:black","dye:blue"},
}
})
minetest.register_craft({
output = "portalgun:planthole",
recipe = {
{"portalgun:testblock", "portalgun:testblock", "portalgun:testblock"},
{"portalgun:testblock", "portalgun:plantform1_1", "portalgun:testblock"},
{"portalgun:testblock", "portalgun:testblock", "portalgun:testblock"}
}
})
minetest.register_craft({
output = "portalgun:delayer",
recipe = {
{"dye:yellow", "default:mese_crystal", "dye:yellow"},
{"default:stone", "portalgun:testblock", "default:stone"},
{"dye:yellow", "default:steel_ingot", "dye:yellow"},
}
})
minetest.register_craft({
output = "portalgun:testblocks 2",
recipe = {
{"portalgun:testblock", "default:mese_crystal"},
}
})
minetest.register_craft({
output = "portalgun:hard_glass",
recipe = {
{"default:glass", "default:glass"},
{"default:glass", "default:glass"},
}
})
minetest.register_craft({
output = "portalgun:apg",
recipe = {
{"default:glass", "dye:white"},
}
})
minetest.register_craft({
output = "portalgun:powerballspawner2",
recipe = {
{"portalgun:powerballspawner", "default:mese_crystal"},
}
})
minetest.register_craft({
output = "portalgun:objdestroyer_1",
recipe = {
{"default:obsidian_glass", "default:obsidian_glass", "portalgun:dmgblock_1"},
{"default:obsidian_glass", "default:obsidian_glass", ""},
}
})
minetest.register_craft({
output = "portalgun:dmgblock_1",
recipe = {
{"default:obsidian_glass", "default:obsidian_glass", "default:mese_crystal"},
{"default:obsidian_glass", "default:obsidian_glass", ""},
}
})
minetest.register_craft({
output = "portalgun:button",
recipe = {
{"", "dye:red", ""},
{"", "portalgun:testblock", ""},
{"", "portalgun:testblock", ""},
}
})
minetest.register_craft({
output = "portalgun:cake",
recipe = {
{"dye:red", "portalgun:testblock", "dye:red"},
{"default:dirt", "default:torch", "default:dirt"},
{"dye:red", "default:dirt", "dye:red"},
}
})
minetest.register_craft({
output = "portalgun:powerdoor1_1",
recipe = {
{"default:obsidian_glass", "default:mese_crystal", "default:obsidian_glass"},
{"default:obsidian_glass", "default:obsidian", "default:obsidian_glass"},
{"default:obsidian_glass", "default:mese_crystal", "default:obsidian_glass"},
}
})
minetest.register_craft({
output = "portalgun:autocheckpoint",
recipe = {
{"default:mese_crystal", "default:mese_crystal","default:mese_crystal"},
}
})
minetest.register_craft({
output = "portalgun:testblock 3",
recipe = {
{"default:steel_ingot", "default:steel_ingot"},
{"default:steel_ingot", "dye:white"},
}
})
minetest.register_craft({
output = "portalgun:apb",
recipe = {
{"default:stonebrick", "dye:white"},
}
})
minetest.register_craft({
output = "portalgun:secam_off",
recipe = {
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
{"dye:black", "default:glass", "dye:black"},
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
}
})
minetest.register_craft({
output = "portalgun:powerballspawner",
recipe = {
{"default:steel_ingot", "", "default:steel_ingot"},
{"dye:yellow", "default:mese_crystal", "dye:yellow"},
{"default:steel_ingot", "", "default:steel_ingot"},
}
})
minetest.register_craft({
output = "portalgun:powerballtarget",
recipe = {
{"portalgun:powerballspawner"},
}
})
minetest.register_craft({output = "portalgun:wscspawner2",
recipe = {{"portalgun:wscspawner1"}}})
minetest.register_craft({output = "portalgun:wscspawner3",
recipe = {{"portalgun:wscspawner2"}}})
minetest.register_craft({output = "portalgun:wscspawner4",
recipe = {{"portalgun:wscspawner3"}}})
minetest.register_craft({output = "portalgun:wscspawner1",
recipe = {{"portalgun:wscspawner4"}}})
minetest.register_craft({
output = "portalgun:wscspawner1",
recipe = {
{"", "default:steel_ingot", ""},
{"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"},
{"", "default:steel_ingot", ""},}})
minetest.register_craft({output = "portalgun:wscspawner2_2",
recipe = {{"portalgun:wscspawner2_1"}}})
minetest.register_craft({output = "portalgun:wscspawner2_3",
recipe = {{"portalgun:wscspawner2_2"}}})
minetest.register_craft({output = "portalgun:wscspawner2_4",
recipe = {{"portalgun:wscspawner2_3"}}})
minetest.register_craft({output = "portalgun:wscspawner2_1",
recipe = {{"portalgun:wscspawner2_4"}}})
minetest.register_craft({
output = "portalgun:wscspawner2_1",
recipe = {
{"", "default:steel_ingot", "default:steel_ingot"},
{"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"},
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},}})
minetest.register_craft({
output = "portalgun:plantform1_1",
recipe = {
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
{"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"},
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},}})
minetest.register_craft({output = "portalgun:plantform1_2",
recipe = {{"portalgun:plantform1_1"}}})
minetest.register_craft({output = "portalgun:plantform1_3",
recipe = {{"portalgun:plantform1_2"}}})
minetest.register_craft({output = "portalgun:plantform1_4",
recipe = {{"portalgun:plantform1_3"}}})
minetest.register_craft({output = "portalgun:plantform_nu1",
recipe = {{"portalgun:plantform1_4"}}})
minetest.register_craft({output = "portalgun:plantform1_1",
recipe = {{"portalgun:plantform_nu1"}}})
minetest.register_craft({
output = "portalgun:gun",
recipe = {
{"", "default:diamond", ""},
{"default:diamond", "default:mese", "default:mese"},
{"", "default:steel_ingot", "default:steel_ingot"},
},
})

BIN
craft2.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

2
depends.txt Normal file

@ -0,0 +1,2 @@
default
mesecons?

1
description.txt Normal file

@ -0,0 +1 @@
Portals and stuff

153
gravityuse.lua Normal file

@ -0,0 +1,153 @@
-- Code by UjEdwin
portalgun_power={}
portalgun_power_tmp_power=0
function portalgun_gravity(itemstack, user, pointed_thing)
local ob=pointed_thing.ref
if ob:get_luaentity() and ob:get_luaentity().portalgun_power then
ob:get_luaentity().target:set_detach()
if ob:get_luaentity().target:get_luaentity() and (ob:get_luaentity().target:get_luaentity().itemstring or ob:get_luaentity().target:get_luaentity().wsc) then
ob:get_luaentity().target:set_velocity({x=0, y=-1, z=0})
ob:get_luaentity().target:set_acceleration({x=0, y=-8, z=0})
end
return itemstack
end
if not ob:get_attach() and (ob:is_player() or (ob:get_luaentity() and ob:get_luaentity().powerball~=1)) then
portalgun_power.user=user
portalgun_power.target=ob
if ob:is_player() then portalgun_power.player=1 end
local m=minetest.add_entity(ob:get_pos(), "portalgun:power")
ob:set_attach(m, "", {x=0,y=0,z=0}, {x=0,y=0,z=0})
return itemstack
end
return itemstack
end
minetest.register_entity("portalgun:power",{
hp_max = 100,
physical = false,
weight = 0,
collisionbox = {-0.2,-0.2,-0.2, 0.2,0.2,0.2},
visual = "sprite",
visual_size = {x=1, y=1},
textures = {"portalgun_gravity.png"},
spritediv = {x=1, y=1},
is_visible = true,
makes_footstep_sound = false,
automatic_rotate = false,
timer=0,
time=0.1,
portalgun_power=1,
portalgun=1,
lifelime=100,
on_activate=function(self, staticdata)
if portalgun_power.user then
self.user=portalgun_power.user
self.target=portalgun_power.target
self.player=portalgun_power.player
portalgun_power={}
else
self.object:remove()
end
end,
on_punch=function(self, puncher, time_from_last_punch, tool_capabilities, dir)
if self.target and self.target:get_attach() then
self.target:set_detach()
self.target:set_hp(0)
self.target:punch(self.object, {full_punch_interval=1.0,damage_groups={fleshy=4}}, "default:bronze_pick", nil)
end
end,
on_step= function(self, dtime)
self.timer=self.timer+dtime
if self.timer<self.time then return self end
self.timer=0
if self.target==nil or (not self.target:get_attach()) then
self.object:set_hp(0)
self.object:punch(self.object, {full_punch_interval=1.0,damage_groups={fleshy=4}}, "default:bronze_pick", nil)
if self.sound then minetest.sound_stop(self.sound) end
end
if self.player then
self.lifelime=self.lifelime-1
if self.lifelime<0 then
self.target:set_detach()
return self
end
end
local pos = self.user:get_pos()
if pos==nil then return self end
pos.y=pos.y+1.6
local dir = self.user:get_look_dir()
local npos={x=pos.x+(dir.x*2), y=pos.y+(dir.y*2), z=pos.z+(dir.z*2)}
if minetest.registered_nodes[minetest.get_node(npos).name].walkable then
return self
end
self.object:move_to(npos)
return self
end,
})
minetest.register_entity("portalgun:power2",{
hp_max = 100,
physical = true,
weight = 10,
collisionbox = {-0.35,0,-0.35, 0.35,1,0.35},
visual = "sprite",
visual_size = {x=1, y=1},
textures = {"portalgun_gravity.png"},
spritediv = {x=1, y=1},
is_visible = true,
makes_footstep_sound = false,
automatic_rotate = false,
timer=0,
time=0.025,
portalgun_power=1,
portalgun=1,
lifelime=1000,
v=0.3,
ltime=0,
on_activate=function(self, staticdata)
if portalgun_power.user then
self.user=portalgun_power.user
self.target=portalgun_power.target
self.ltime=portalgun_power_tmp_power
portalgun_power={}
else
self.object:remove()
end
end,
on_step= function(self, dtime)
local pos=self.object:get_pos()
local v=self.object:get_velocity()
local v2={x=v.x-self.v,y=(v.y-self.v)*0.99,z=v.z-self.v}
if v2.x<0.5 and v2.x>-0.5 then v2.x=0 end
if v2.y<0.5 and v2.y>-0.5 then v2.y=0 end
if v2.z<0.5 and v2.z>-0.5 then v2.z=0 end
self.object:set_velocity(v2)
self.ltime=self.ltime-self.v
if self.ltime<self.v or (v2.x+v2.y+v2.z==0) then
self.lifelime=-1
end
local nexpos={x=pos.x+(v.x*0.05),y=pos.y+(v.y*0.05)+1,z=pos.z+(v.z*0.05)}
if minetest.registered_nodes[minetest.get_node(nexpos).name].walkable then
self.lifelime=-1
end
self.lifelime=self.lifelime-1
if self.lifelime<0 then
self.target:set_detach()
end
if self.target==nil or (not self.target:get_attach()) then
self.object:set_hp(0)
self.object:punch(self.object, {full_punch_interval=1.0,damage_groups={fleshy=4}}, "default:bronze_pick", nil)
return self
end
return self
end,
})

583
init.lua Normal file

@ -0,0 +1,583 @@
disable_portal_stuff=false
portalgun={new=0,checkpoints={}}
dofile(minetest.get_modpath("portalgun") .. "/gravityuse.lua") -- the gravity part of portalgun
dofile(minetest.get_modpath("portalgun") .. "/craft.lua")
dofile(minetest.get_modpath("portalgun") .. "/stuff.lua") -- security cam
if disable_portal_stuff==false and minetest.get_modpath("mesecons")~=nil then
dofile(minetest.get_modpath("portalgun") .. "/weightedstoragecube.lua") -- weighted storage cube
dofile(minetest.get_modpath("portalgun") .. "/powerball.lua") -- the poweball
dofile(minetest.get_modpath("portalgun") .. "/other.lua")
end
portalgun_portal={}
portalgun_portal_tmp_user_abort=0
portalgun_portal_tmp_user=""
local portalgun_timer=1.2
local portalgun_time=0
portalgun_lifelime=1200 --deletes portals that not used after a while
portalgun_max_rage=100
portalgun_max_use_per_secund_time=4 --destroys the portal if excessive used
portalgun_max_use_per_secund=25 --4 & 25 is default = teleported (teleported 25 times in 4 sec)
function portalgun_param2(pos,param2,r)
local pos2={x=pos.x,y=pos.y,z=pos.z}
if r then
if param2==0 then
pos2.x=pos2.x-1
elseif param2==1 then pos2.z=pos2.z+1
elseif param2==2 then pos2.x=pos2.x+1
elseif param2==3 then pos2.z=pos2.z-1
end
else
if param2==0 then
pos2.x=pos2.x+1
elseif param2==1 then pos2.z=pos2.z-1
elseif param2==2 then pos2.x=pos2.x-1
elseif param2==3 then pos2.z=pos2.z+1
end
end
return pos2
end
local function portalgun_getLength(a)-- get length of an array / table
local count = 0
for _ in pairs(a) do count = count + 1 end
return count
end
function portal_delete(name,n) -- using set_hp & :punch instand of :remove ... no risk for crash if something attach it
if portalgun_portal[name]==nil then return end
if (n==1 or n==0) and portalgun_portal[name].portal1~=nil then
if n==0 then
local pos=portalgun_portal[name].portal1:get_pos()
if pos~=nil then minetest.sound_play("portalgun_closeportals", {pos=pos,max_hear_distance = 20, gain = 1}) end
end
portalgun_portal[name].portal1_active=false
portalgun_portal[name].portal1:set_hp(0)
portalgun_portal[name].portal1:punch(portalgun_portal[name].portal1, {full_punch_interval=1.0,damage_groups={fleshy=9000}}, "default:bronze_pick", nil)
end
if (n==2 or n==0) and portalgun_portal[name].portal2~=nil then
if n==0 then
local pos=portalgun_portal[name].portal2:get_pos()
if pos~=nil then minetest.sound_play("portalgun_closeportals", {pos=pos,max_hear_distance = 20, gain = 1}) end
end
portalgun_portal[name].portal2_active=false
portalgun_portal[name].portal2:set_hp(0)
portalgun_portal[name].portal2:punch(portalgun_portal[name].portal2, {full_punch_interval=1.0,damage_groups={fleshy=9000}}, "default:bronze_pick", nil)
end
if n==0 then portalgun_portal[name]=nil end
end
minetest.register_on_leaveplayer(function(player)-- deletes user the profile (saveing memory)
local name=player:get_player_name()
portal_delete(name,0)
portalgun_portal[name]=nil
end)
minetest.register_on_dieplayer(function(player)
local name=player:get_player_name()
portal_delete(name,0)
portalgun_portal[name]=nil
end)
portalgun_on_step=function(self, dtime)
local name=self.user
if portalgun_portal[self.user]==nil then
self.object:remove()
return self
end
if (self.project==1 and self.use~=portalgun_portal[self.user].portal1_use)
or (self.project==2 and self.use~=portalgun_portal[self.user].portal2_use) then
self.object:remove()
return self
end
if portalgun_portal[name].lifelime<0 then
portal_delete(name,0)
return self
end
if portalgun_portal[name].portal1_active and portalgun_portal[name].portal2_active then -- makes lifetime equal when both is acive, or it will be half
portalgun_portal[name].lifelime=portalgun_portal[name].lifelime-0.5
else
portalgun_portal[name].lifelime=portalgun_portal[name].lifelime-1
return self -- abort when only 1 is active (saves cpu)
end
if portalgun_portal[name].timer>0 then -- makes teleported stuff wont move back at same time (bug fix)
portalgun_portal[name].timer=portalgun_portal[name].timer-dtime
return self
end
if self.portal_max_use>0 then -- makes teleported stuff wont move back at same time (bug fix)
self.portal_max_use_time=self.portal_max_use_time+dtime
if self.portal_max_use>=portalgun_max_use_per_secund then
portal_delete(name,self.project)
return self
elseif self.portal_max_use_time>=portalgun_max_use_per_secund_time then
self.portal_max_use_time=0
self.portal_max_use=0
end
end
local pos1=0
local pos2=0
local d1=0
local d2=0
if self.project==1 then
pos1=portalgun_portal[name].portal1_pos
pos2=portalgun_portal[name].portal2_pos
d1=portalgun_portal[name].portal1_dir
d2=portalgun_portal[name].portal2_dir
else
pos1=portalgun_portal[name].portal2_pos
pos2=portalgun_portal[name].portal1_pos
d1=portalgun_portal[name].portal2_dir
d2=portalgun_portal[name].portal1_dir
end
if pos2~=0 and pos1~=0 then
for ii, ob in pairs(minetest.get_objects_inside_radius(pos1, self.area)) do
if pos2~=0 then
if (ob:is_player() ) or (ob:get_luaentity() and ob:get_luaentity().portalgun~=1 and ob:get_luaentity().name:find(":text",4)==nil) then
if ob:get_attach() then
ob:set_detach()
ob:set_acceleration({x=0, y=-10, z=0})
end
--set velocity then teleport
local p=pos2
local x=0
local y=0
local z=0
local dis=2
if p==nil or p.x==nil then
return self
end
if ob:is_player() then
local v=ob:get_player_velocity()
local player_name=ob:get_player_name()
portalgun_power.user=player_name
portalgun_power.target=ob
local vv={x=v.x,y=v.y,z=v.z}
-- get the highest velocity
dis=2
if vv.x+vv.y+vv.z<=0.3 then
if self.small==true then
vv.x=1.4
else
vv.x=2
end
end
if vv.x+vv.y+vv.z==0 then vv.x=2 end
if vv.x<0 then vv.x=vv.x*-1 end
if vv.y<0 then vv.y=vv.y*-1 end
if vv.z<0 then vv.z=vv.z*-1 end
if vv.x>vv.z then vv.a=vv.x else vv.a=vv.z end
if vv.a<vv.y then vv.a=vv.y end
portalgun_power_tmp_power=vv.a
local m=minetest.add_entity(ob:get_pos(), "portalgun:power2")
ob:set_attach(m, "", {x=0,y=0,z=0}, {x=0,y=0,z=0})
m:set_velocity(v)
m:set_acceleration({x=0,y=-10,z=0})
ob=m
end
if ob:is_player()==false then
local v=ob:get_velocity()
if v.x<0 then v.x=v.x*-1 end
if v.y<0 then v.y=v.y*-1 end
if v.z<0 then v.z=v.z*-1 end
local vv=0 -- get the highest velocity
if v.x>v.z then vv=v.x else vv=v.z end
if vv<v.y then vv=v.y end
v.x=0
v.y=0
v.z=0
if d2=="x+" then v.x=vv end
if d2=="x-" then v.x=vv*-1 end
if d2=="y+" then v.y=vv end
if d2=="y-" then v.y=vv*-1 end
if d2=="z+" then v.z=vv end
if d2=="z-" then v.z=vv*-1 end
ob:set_velocity({x=v.x, y=v.y, z=v.z})
end
if d2=="x+" then x=2
elseif d2=="x-" then x=-dis
elseif d2=="y+" then y=dis
elseif d2=="y-" then y=-dis
elseif d2=="z+" then z=dis
elseif d2=="z-" then z=-dis
end
local obpos={x=p.x+x,y=p.y+y,z=p.z+z}
portalgun_portal[name].timer=0.2
self.portal_max_use=self.portal_max_use+1
ob:move_to(obpos,false)
portalgun_portal[name].lifelime=portalgun_lifelime
minetest.sound_play("portalgun_teleport", {pos=portalgun_portal[name].portal1_pos,max_hear_distance = 10, gain = 30})
minetest.sound_play("portalgun_teleport", {pos=portalgun_portal[name].portal2_pos,max_hear_distance = 10, gain = 30})
end --end of set velocity part then teleport
end
end
end
end
minetest.register_entity("portalgun:portal",{ -- the portals
hp_max=10000,
visual = "mesh",
mesh = "portalgun_portal_xp.obj",
physical = false,
textures ={"portalgun_blue.png"},
visual_size = {x=1, y=1},
spritediv = {x=7, y=0},
collisionbox = {0,0,0,0,0,0},
timer=0,
user="",
project=1,
portalgun=1,
portal_max_use=0,
portal_max_use_time=0,
area=2,
small=false,
get_staticdata = function(self)
return minetest.serialize({
user= self.user,
project=self.project,
use=self.use
})
end,
on_activate= function(self, staticdata)
local data=minetest.deserialize(staticdata)
if data and type(data) == "table" then
self.user = data.user
self.project = data.project
self.use=data.use
if portalgun_portal[self.user]==nil then
self.object:remove()
return self
end
if (self.project==1 and self.use~=portalgun_portal[self.user].portal1_use)
or (self.project==2 and self.use~=portalgun_portal[self.user].portal2_use) then
self.object:remove()
return self
end
elseif portalgun_portal_tmp_user~="" then
self.user=portalgun_portal_tmp_user
portalgun_portal_tmp_user=""
self.project=portalgun_portal[self.user].project
if self.project==1 then-- if inactivated then activated and another portal is created: remove
self.use=portalgun_portal[self.user].portal1_use
else
self.use=portalgun_portal[self.user].portal2_use
end
else
self.object:remove()
return self
end
if portalgun_portal[self.user]==nil then
self.object:remove()
return self
end
local d=""
if self.project==1 then
d=portalgun_portal[self.user].portal1_dir
self.object:set_properties({textures = {"portalgun_blue.png"}})
else
d=portalgun_portal[self.user].portal2_dir
self.object:set_properties({textures = {"portalgun_orange.png"}})
end
if d=="x+" then self.object:set_yaw(math.pi * 0)
elseif d=="x-" then self.object:set_yaw(math.pi * 1)
elseif d=="y+" then self.object:set_properties({mesh = "portalgun_portal_yp.obj",}) -- becaouse there is no "setpitch"
elseif d=="y-" then self.object:set_properties({mesh = "portalgun_portal_ym.obj",}) -- becaouse there is no "setpitch"
elseif d=="z+" then self.object:set_yaw(math.pi * 0.5)
elseif d=="z-" then self.object:set_yaw(math.pi * 1.5)
end
if d=="y+" then
local pos1={}
if self.project==1 then
pos1=portalgun_portal[self.user].portal1_pos
else
pos1=portalgun_portal[self.user].portal2_pos
end
if portalgun_portal[self.user].y>8 then
pos1.y=pos1.y+1
end
if portalgun_portal[self.user].y>12 then
pos1.y=pos1.y+1
end
if self.project==1 then
portalgun_portal[self.user].portal1_pos=pos1
else
portalgun_portal[self.user].portal2_pos=pos1
end
elseif string.find(d,"y",1)==nil and (portalgun_portal[self.user].x+portalgun_portal[self.user].z<2.5) then
self.area=1.2
self.small=true
self.object:set_properties({visual_size = {x=0.7, y=0.7},})
end
end,
on_step=portalgun_on_step,
})
minetest.register_tool("portalgun:gun1", {
description = "Portalgun (blue)",
inventory_image = "portalgun_gun_blue.png",
range = 5,
wield_image = "portalgun_gun_blue.png",
groups = {not_in_creative_inventory=1},
on_place=function(itemstack, user, pointed_thing)
portalgun_mode(itemstack, user, pointed_thing)
return itemstack
end,
on_use = function(itemstack, user, pointed_thing)
portalgun_onuse(itemstack, user, pointed_thing)
return itemstack
end
})
minetest.register_tool("portalgun:gun2", {
description = "Portalgun (orange)",
inventory_image = "portalgun_gun_orange.png",
range = 5,
wield_image = "portalgun_gun_orange.png",
groups = {not_in_creative_inventory=1},
on_place=function(itemstack, user, pointed_thing)
portalgun_mode(itemstack, user, pointed_thing)
return itemstack
end,
on_use = function(itemstack, user, pointed_thing)
portalgun_onuse(itemstack, user, pointed_thing)
return itemstack
end
})
minetest.register_tool("portalgun:gun", {
description = "Portalgun",
inventory_image = "portalgun_gun.png",
range = 5,
wield_image = "portalgun_gun.png",
groups = {not_in_creative_inventory=0},
on_place=function(itemstack, user, pointed_thing)
portalgun_mode(itemstack, user, pointed_thing)
return itemstack
end,
on_use = function(itemstack, user, pointed_thing)
portalgun_onuse(itemstack, user, pointed_thing)
return itemstack
end
})
function portalgun_mode(itemstack, user, pointed_thing) -- change modes
local item=itemstack:to_table()
local meta=minetest.deserialize(item["metadata"])
local mode=0
if meta==nil then
meta={}
mode=1
minetest.chat_send_player(user:get_player_name(), "<Portalgun> PLACE to change portal mode (or LEFT+RIGHTCLICK to use the other)")
minetest.chat_send_player(user:get_player_name(), "<Portalgun> LEFTCLICK on an object to carry it, CLICK AGAIN to release")
minetest.chat_send_player(user:get_player_name(), "<Portalgun> SHIFT+LEFTCLICK to close both portals (or wait 40sec until it removes it self)")
end
if meta.mode==nil then meta.mode=2 end
mode=(meta.mode)
if mode==1 then
mode=2
else
mode=1
end
meta.mode=mode
item.name="portalgun:gun"..mode
item.metadata=minetest.serialize(meta)
itemstack:replace(item)
minetest.sound_play("portalgun_mode", {pos=user:get_pos(),max_hear_distance = 5, gain = 1})
end
local function rnd(r)
return math.floor(r+ 0.5)
end
function portalgun_onuse(itemstack, user, pointed_thing) -- using the gun
if pointed_thing.type=="object" then
portalgun_gravity(itemstack, user, pointed_thing)
return itemstack
end
local pos = user:get_pos()
local dir = user:get_look_dir()
local key = user:get_player_control()
local name=user:get_player_name()
local exist=0
local item=itemstack:to_table()
local mode=minetest.deserialize(item["metadata"])
if mode==nil then
portalgun_mode(itemstack, user, pointed_thing)
return itemstack
else
mode=mode.mode
end
local ob={}
ob.project=1
ob.lifelime=portalgun_lifelime
ob.portal1=0
ob.portal2=0
ob.portal1_dir=0
ob.portal2_dir=0
ob.portal2_pos=0
ob.portal1_pos=0
ob.user = user:get_player_name()
if portalgun_portal[name]==nil then -- new portal profile
portalgun_portal[name]={lifelime=portalgun_lifelime,project=1,timer=0,portal1_active=false,portal2_active=false,portal1_use=0,portal2_use=0}
end
if key.RMB and mode==2 then -- hold rmbutton to use the other one (like diplazer)
mode=1
elseif key.RMB and mode==1 then
mode=2
end
if key.sneak then
portal_delete(name,0)
return itemstack
end
pos.y=pos.y+1.5
-- the project
for i=1, portalgun_max_rage,0.5 do
local nname=minetest.get_node({x=pos.x+(dir.x*i), y=pos.y+(dir.y*i), z=pos.z+(dir.z*i)}).name
if minetest.registered_nodes[nname].walkable then
portalgun_portal[name].lifelime=portalgun_lifelime
if minetest.get_node_group(nname, "antiportal")>0 then
minetest.sound_play("portalgun_error", {pos=pos,max_hear_distance = 5, gain = 3})
return itemstack
end
if minetest.registered_nodes[minetest.get_node({x=rnd(pos.x+(dir.x*i)), y=rnd(pos.y+(dir.y*i)+1), z=rnd(pos.z+(dir.z*i))}).name].walkable==false and rnd(user:get_pos().y)>rnd(pos.y+(dir.y*i)) then
portalgun_setportal(pos,name,dir,i,mode,"y+")
return itemstack
elseif minetest.registered_nodes[minetest.get_node({x=rnd(pos.x+(dir.x*i)), y=rnd(pos.y+(dir.y*i)-1), z=rnd(pos.z+(dir.z*i))}).name].walkable==false and rnd(user:get_pos().y)<rnd(pos.y+(dir.y*i)) then
portalgun_setportal(pos,name,dir,i,mode,"y-")
return itemstack
elseif minetest.registered_nodes[minetest.get_node({x=rnd(pos.x+(dir.x*i)-1), y=rnd(pos.y+(dir.y*i)), z=rnd(pos.z+(dir.z*i))}).name].walkable==false and rnd(user:get_pos().x)<rnd(pos.x+(dir.x*i)) then
portalgun_setportal(pos,name,dir,i,mode,"x-")
return itemstack
elseif minetest.registered_nodes[minetest.get_node({x=rnd(pos.x+(dir.x*i))+1, y=rnd(pos.y+(dir.y*i)), z=rnd(pos.z+(dir.z*i))}).name].walkable==false and rnd(user:get_pos().x)>rnd(pos.x+(dir.x*i)) then
portalgun_setportal(pos,name,dir,i,mode,"x+")
return itemstack
elseif minetest.registered_nodes[minetest.get_node({x=rnd(pos.x+(dir.x*i)), y=rnd(pos.y+(dir.y*i)), z=rnd(pos.z+(dir.z*i)-1)}).name].walkable==false and rnd(user:get_pos().z)<rnd(pos.z+(dir.z*i)) then
portalgun_setportal(pos,name,dir,i,mode,"z-")
return itemstack
elseif minetest.registered_nodes[minetest.get_node({x=rnd(pos.x+(dir.x*i)), y=rnd(pos.y+(dir.y*i)), z=rnd(pos.z+(dir.z*i)+1)}).name].walkable==false and rnd(user:get_pos().z)>rnd(pos.z+(dir.z*i)) then
portalgun_setportal(pos,name,dir,i,mode,"z+")
return itemstack
end
minetest.sound_play("portalgun_error", {pos=pos,max_hear_distance = 20, gain = 3})
return itemstack
end
end
return itemstack
end
function portalgun_setportal(pos,name,dir,i,mode,portal_dir)
local lpos={x=pos.x+(dir.x*(i-1)), y=pos.y+(dir.y*(i-1)), z=pos.z+(dir.z*(i-1))} -- last pos
local cpos={x=pos.x+(dir.x*i), y=pos.y+(dir.y*i), z=pos.z+(dir.z*i)} -- corrent poss
if portal_dir=="y+" then cpos.y=(math.floor(cpos.y+ 0.5))+0.524
elseif portal_dir=="y-" then cpos.y=(math.floor(cpos.y+ 0.5))-0.524
elseif portal_dir=="z+" then cpos.z=(math.floor(cpos.z+ 0.5))+0.524
elseif portal_dir=="z-" then cpos.z=(math.floor(cpos.z+ 0.5))-0.524
elseif portal_dir=="x+" then cpos.x=(math.floor(cpos.x+ 0.5))+0.524
elseif portal_dir=="x-" then cpos.x=(math.floor(cpos.x+ 0.5))-0.524
end
if portal_dir=="x+" or portal_dir=="x-" then -- auto correct (place in center)
cpos.y=(math.floor(cpos.y+ 0.5))
cpos.z=(math.floor(cpos.z+ 0.5))
elseif portal_dir=="y+" or portal_dir=="y-" then
cpos.x=(math.floor(cpos.x+ 0.5))
cpos.z=(math.floor(cpos.z+ 0.5))
elseif portal_dir=="z+" or portal_dir=="z-" then
cpos.x=(math.floor(cpos.x+ 0.5))
cpos.y=(math.floor(cpos.y+ 0.5))
end
if minetest.registered_nodes[minetest.get_node(cpos).name].walkable then
minetest.sound_play("portalgun_error", {pos=pos,max_hear_distance = 5, gain = 3})
return false
end
if string.find(portal_dir,"x",1) or string.find(portal_dir,"z",1) then-- auto correct (move from bottom / top)
local testpos1={x=cpos.x,y=cpos.y-1,z=cpos.z}
local testpos2={x=cpos.x,y=cpos.y+1,z=cpos.z}
if minetest.registered_nodes[minetest.get_node(testpos1).name].walkable
and minetest.registered_nodes[minetest.get_node(testpos2).name].walkable==false then
cpos.y=cpos.y+0.5
elseif minetest.registered_nodes[minetest.get_node(testpos2).name].walkable
and minetest.registered_nodes[minetest.get_node(testpos1).name].walkable==false then
cpos.y=cpos.y-0.5
end
end
portalgun_portal_tmp_user=name
portalgun_portal[name].x=pos.x-lpos.x
portalgun_portal[name].y=pos.y-lpos.y
portalgun_portal[name].z=pos.z-lpos.z
portalgun_portal[name].project=mode
if portalgun_portal[name].x<0 then
portalgun_portal[name].x=portalgun_portal[name].x*-1
end
if portalgun_portal[name].z<0 then
portalgun_portal[name].z=portalgun_portal[name].z*-1
end
if mode==1 then
portal_delete(name,1)
portalgun_portal[name].portal1_use=portalgun_portal[name].portal1_use+1
portalgun_portal[name].portal1_dir=portal_dir
portalgun_portal[name].portal1_pos=cpos
portalgun_portal[name].portal1=minetest.add_entity(cpos, "portalgun:portal")
portalgun_portal[name].portal1_active=true
minetest.sound_play("portalgun_portalblue", {pos=cpos, max_hear_distance = 20, gain = 1})
else
portal_delete(name,2)
portalgun_portal[name].portal2_use=portalgun_portal[name].portal2_use+1
portalgun_portal[name].portal2_dir=portal_dir
portalgun_portal[name].portal2_pos=cpos
portalgun_portal[name].portal2=minetest.add_entity(cpos, "portalgun:portal")
portalgun_portal[name].portal2_active=true
minetest.sound_play("portalgun_portalorange", {pos=cpos,max_hear_distance = 20, gain = 1})
end
end

@ -0,0 +1,233 @@
# Blender v2.78 (sub 0) OBJ File: 'portalgun_portal_ym.blend'
# www.blender.org
mtllib portalgun_portal_ym.mtl
o Plane
v 0.000000 0.000000 0.000000
v -0.000000 1.652609 0.000000
v -0.000000 3.305217 0.000000
v -0.000000 4.957826 0.000000
v -0.000000 0.000000 -1.652609
v -0.000000 0.000000 -3.305217
v -0.000000 0.000000 -4.957826
v 0.000000 -1.652609 -0.000000
v 0.000000 -3.305217 -0.000000
v 0.000000 -4.957826 -0.000000
v 0.000000 -0.000000 1.652609
v 0.000000 -0.000000 3.305217
v 0.000000 -0.000000 4.957826
v 0.000000 1.624598 1.624598
v -0.000000 3.249197 1.554573
v -0.000000 4.873795 1.456536
v 0.000000 1.554573 3.249197
v 0.000000 3.102143 3.102143
v -0.000000 4.635707 2.885062
v 0.000000 1.456536 4.873795
v 0.000000 2.885062 4.635707
v 0.000000 4.257568 4.257568
v -0.000000 1.624598 -1.624598
v -0.000000 1.554573 -3.249197
v -0.000000 1.456536 -4.873795
v -0.000000 3.249197 -1.554573
v -0.000000 3.102143 -3.102143
v -0.000000 2.885062 -4.635707
v -0.000000 4.873795 -1.456536
v -0.000000 4.635707 -2.885062
v -0.000000 4.257568 -4.257568
v 0.000000 -1.624598 -1.624598
v 0.000000 -3.249197 -1.554573
v 0.000000 -4.873795 -1.456536
v -0.000000 -1.554573 -3.249197
v 0.000000 -3.102143 -3.102143
v 0.000000 -4.635707 -2.885062
v -0.000000 -1.456536 -4.873795
v -0.000000 -2.885062 -4.635707
v 0.000000 -4.257568 -4.257568
v 0.000000 -1.624598 1.624598
v 0.000000 -1.554573 3.249197
v 0.000000 -1.456536 4.873795
v 0.000000 -3.249197 1.554573
v 0.000000 -3.102143 3.102143
v 0.000000 -2.885062 4.635707
v 0.000000 -4.873795 1.456536
v 0.000000 -4.635707 2.885062
v 0.000000 -4.257568 4.257568
v 0.000000 -3.809403 5.602063
v 0.000000 -2.632970 6.162270
v 0.000000 -1.344495 6.498394
v 0.000000 -0.000000 6.610435
v 0.000000 1.344495 6.498394
v 0.000000 2.632970 6.162270
v 0.000000 3.809403 5.602063
v -0.000000 5.602063 3.809403
v -0.000000 6.162270 2.632970
v -0.000000 6.498394 1.344495
v -0.000000 6.610435 0.000000
v -0.000000 6.498394 -1.344495
v -0.000000 6.162270 -2.632970
v -0.000000 5.602063 -3.809403
v -0.000000 3.809403 -5.602063
v -0.000000 2.632970 -6.162270
v -0.000000 1.344495 -6.498394
v -0.000000 0.000000 -6.610435
v -0.000000 -1.344495 -6.498394
v -0.000000 -2.632970 -6.162270
v -0.000000 -3.809403 -5.602063
v 0.000000 -5.602063 -3.809403
v 0.000000 -6.162270 -2.632970
v 0.000000 -6.498394 -1.344495
v 0.000000 -6.610435 -0.000000
v 0.000000 -6.498394 1.344495
v 0.000000 -6.162270 2.632970
v 0.000000 -5.602063 3.809403
v 0.000000 4.817774 4.817774
v -0.000000 4.817774 -4.817774
v 0.000000 -4.817774 4.817774
v 0.000000 -4.817774 -4.817774
vt 0.5000 0.5000
vt 0.3757 0.5000
vt 0.3778 0.3778
vt 0.5000 0.3757
vt 0.3831 0.2556
vt 0.5000 0.2514
vt 0.3904 0.1334
vt 0.5000 0.1270
vt 0.3989 0.0111
vt 0.5000 0.0027
vt 0.2514 0.5000
vt 0.2556 0.3831
vt 0.2666 0.2666
vt 0.2830 0.1513
vt 0.3019 0.0364
vt 0.1270 0.5000
vt 0.1334 0.3904
vt 0.1513 0.2830
vt 0.1797 0.1797
vt 0.2134 0.0786
vt 0.0027 0.5000
vt 0.0111 0.3989
vt 0.0364 0.3019
vt 0.0786 0.2134
vt 0.1376 0.1376
vt 0.6222 0.3778
vt 0.6243 0.5000
vt 0.7444 0.3831
vt 0.7486 0.5000
vt 0.8666 0.3904
vt 0.8730 0.5000
vt 0.9889 0.3989
vt 0.9973 0.5000
vt 0.6169 0.2556
vt 0.7334 0.2666
vt 0.8487 0.2830
vt 0.9636 0.3019
vt 0.6096 0.1334
vt 0.7170 0.1513
vt 0.8203 0.1797
vt 0.9214 0.2134
vt 0.6011 0.0111
vt 0.6981 0.0364
vt 0.7866 0.0786
vt 0.8624 0.1376
vt 0.6222 0.6222
vt 0.5000 0.6243
vt 0.6169 0.7444
vt 0.5000 0.7486
vt 0.6096 0.8666
vt 0.5000 0.8730
vt 0.6011 0.9889
vt 0.5000 0.9973
vt 0.7444 0.6169
vt 0.7334 0.7334
vt 0.7170 0.8487
vt 0.6981 0.9636
vt 0.8666 0.6096
vt 0.8487 0.7170
vt 0.8203 0.8203
vt 0.7866 0.9214
vt 0.9889 0.6011
vt 0.9636 0.6981
vt 0.9214 0.7866
vt 0.8624 0.8624
vt 0.3778 0.6222
vt 0.2556 0.6169
vt 0.1334 0.6096
vt 0.0111 0.6011
vt 0.3831 0.7444
vt 0.2666 0.7334
vt 0.1513 0.7170
vt 0.0364 0.6981
vt 0.3904 0.8666
vt 0.2830 0.8487
vt 0.1797 0.8203
vt 0.0786 0.7866
vt 0.3989 0.9889
vt 0.3019 0.9636
vt 0.2134 0.9214
vt 0.1376 0.8624
vn -1.0000 0.0000 0.0000
usemtl None
s 1
f 1/1/1 11/2/1 14/3/1 2/4/1
f 2/4/1 14/3/1 15/5/1 3/6/1
f 3/6/1 15/5/1 16/7/1 4/8/1
f 4/8/1 16/7/1 59/9/1 60/10/1
f 11/2/1 12/11/1 17/12/1 14/3/1
f 14/3/1 17/12/1 18/13/1 15/5/1
f 15/5/1 18/13/1 19/14/1 16/7/1
f 16/7/1 19/14/1 58/15/1 59/9/1
f 12/11/1 13/16/1 20/17/1 17/12/1
f 17/12/1 20/17/1 21/18/1 18/13/1
f 18/13/1 21/18/1 22/19/1 19/14/1
f 19/14/1 22/19/1 57/20/1 58/15/1
f 13/16/1 53/21/1 54/22/1 20/17/1
f 20/17/1 54/22/1 55/23/1 21/18/1
f 21/18/1 55/23/1 56/24/1 22/19/1
f 22/19/1 56/24/1 78/25/1 57/20/1
f 1/1/1 2/4/1 23/26/1 5/27/1
f 5/27/1 23/26/1 24/28/1 6/29/1
f 6/29/1 24/28/1 25/30/1 7/31/1
f 7/31/1 25/30/1 66/32/1 67/33/1
f 2/4/1 3/6/1 26/34/1 23/26/1
f 23/26/1 26/34/1 27/35/1 24/28/1
f 24/28/1 27/35/1 28/36/1 25/30/1
f 25/30/1 28/36/1 65/37/1 66/32/1
f 3/6/1 4/8/1 29/38/1 26/34/1
f 26/34/1 29/38/1 30/39/1 27/35/1
f 27/35/1 30/39/1 31/40/1 28/36/1
f 28/36/1 31/40/1 64/41/1 65/37/1
f 4/8/1 60/10/1 61/42/1 29/38/1
f 29/38/1 61/42/1 62/43/1 30/39/1
f 30/39/1 62/43/1 63/44/1 31/40/1
f 31/40/1 63/44/1 79/45/1 64/41/1
f 1/1/1 5/27/1 32/46/1 8/47/1
f 8/47/1 32/46/1 33/48/1 9/49/1
f 9/49/1 33/48/1 34/50/1 10/51/1
f 10/51/1 34/50/1 73/52/1 74/53/1
f 5/27/1 6/29/1 35/54/1 32/46/1
f 32/46/1 35/54/1 36/55/1 33/48/1
f 33/48/1 36/55/1 37/56/1 34/50/1
f 34/50/1 37/56/1 72/57/1 73/52/1
f 6/29/1 7/31/1 38/58/1 35/54/1
f 35/54/1 38/58/1 39/59/1 36/55/1
f 36/55/1 39/59/1 40/60/1 37/56/1
f 37/56/1 40/60/1 71/61/1 72/57/1
f 7/31/1 67/33/1 68/62/1 38/58/1
f 38/58/1 68/62/1 69/63/1 39/59/1
f 39/59/1 69/63/1 70/64/1 40/60/1
f 40/60/1 70/64/1 81/65/1 71/61/1
f 1/1/1 8/47/1 41/66/1 11/2/1
f 11/2/1 41/66/1 42/67/1 12/11/1
f 12/11/1 42/67/1 43/68/1 13/16/1
f 13/16/1 43/68/1 52/69/1 53/21/1
f 8/47/1 9/49/1 44/70/1 41/66/1
f 41/66/1 44/70/1 45/71/1 42/67/1
f 42/67/1 45/71/1 46/72/1 43/68/1
f 43/68/1 46/72/1 51/73/1 52/69/1
f 9/49/1 10/51/1 47/74/1 44/70/1
f 44/70/1 47/74/1 48/75/1 45/71/1
f 45/71/1 48/75/1 49/76/1 46/72/1
f 46/72/1 49/76/1 50/77/1 51/73/1
f 10/51/1 74/53/1 75/78/1 47/74/1
f 47/74/1 75/78/1 76/79/1 48/75/1
f 48/75/1 76/79/1 77/80/1 49/76/1
f 49/76/1 77/80/1 80/81/1 50/77/1

@ -0,0 +1,233 @@
# Blender v2.78 (sub 0) OBJ File: 'portalgun_portal_ym.blend'
# www.blender.org
mtllib portalgun_portal_ym.mtl
o Plane
v 0.000000 0.000000 0.000000
v -0.000000 -0.000000 1.652609
v -0.000000 -0.000001 3.305217
v -0.000000 -0.000001 4.957826
v -1.652609 0.000000 0.000000
v -3.305217 0.000000 0.000000
v -4.957826 0.000001 0.000000
v 0.000000 0.000000 -1.652609
v 0.000000 0.000001 -3.305217
v 0.000000 0.000001 -4.957826
v 1.652609 -0.000000 -0.000000
v 3.305217 -0.000000 -0.000000
v 4.957826 -0.000001 -0.000000
v 1.624598 -0.000001 1.624598
v 1.554573 -0.000001 3.249197
v 1.456536 -0.000002 4.873795
v 3.249197 -0.000001 1.554573
v 3.102143 -0.000001 3.102143
v 2.885062 -0.000002 4.635707
v 4.873795 -0.000001 1.456536
v 4.635707 -0.000001 2.885062
v 4.257568 -0.000002 4.257568
v -1.624598 -0.000000 1.624598
v -3.249197 0.000000 1.554573
v -4.873795 0.000000 1.456536
v -1.554573 -0.000001 3.249197
v -3.102143 -0.000000 3.102143
v -4.635707 -0.000000 2.885062
v -1.456536 -0.000001 4.873795
v -2.885062 -0.000001 4.635707
v -4.257568 -0.000001 4.257568
v -1.624598 0.000001 -1.624598
v -1.554573 0.000001 -3.249197
v -1.456536 0.000002 -4.873795
v -3.249197 0.000001 -1.554573
v -3.102143 0.000001 -3.102143
v -2.885062 0.000002 -4.635707
v -4.873795 0.000001 -1.456536
v -4.635707 0.000001 -2.885062
v -4.257568 0.000002 -4.257568
v 1.624598 0.000000 -1.624598
v 3.249197 -0.000000 -1.554573
v 4.873795 -0.000000 -1.456536
v 1.554573 0.000001 -3.249197
v 3.102143 0.000000 -3.102143
v 4.635707 0.000000 -2.885062
v 1.456536 0.000001 -4.873795
v 2.885062 0.000001 -4.635707
v 4.257568 0.000001 -4.257568
v 5.602063 0.000000 -3.809403
v 6.162270 -0.000000 -2.632970
v 6.498394 -0.000001 -1.344495
v 6.610435 -0.000001 -0.000000
v 6.498394 -0.000001 1.344495
v 6.162270 -0.000002 2.632970
v 5.602063 -0.000002 3.809403
v 3.809403 -0.000002 5.602063
v 2.632970 -0.000002 6.162270
v 1.344495 -0.000002 6.498394
v -0.000000 -0.000002 6.610435
v -1.344495 -0.000002 6.498394
v -2.632970 -0.000001 6.162270
v -3.809403 -0.000001 5.602063
v -5.602063 -0.000000 3.809403
v -6.162270 0.000000 2.632970
v -6.498394 0.000001 1.344495
v -6.610435 0.000001 0.000000
v -6.498394 0.000001 -1.344495
v -6.162270 0.000002 -2.632970
v -5.602063 0.000002 -3.809403
v -3.809403 0.000002 -5.602063
v -2.632970 0.000002 -6.162270
v -1.344495 0.000002 -6.498394
v 0.000000 0.000002 -6.610435
v 1.344495 0.000002 -6.498394
v 2.632970 0.000001 -6.162270
v 3.809403 0.000001 -5.602063
v 4.817774 -0.000002 4.817774
v -4.817774 -0.000001 4.817774
v 4.817774 0.000001 -4.817774
v -4.817774 0.000002 -4.817774
vt 0.5000 0.5000
vt 0.3757 0.5000
vt 0.3778 0.3778
vt 0.5000 0.3757
vt 0.3831 0.2556
vt 0.5000 0.2514
vt 0.3904 0.1334
vt 0.5000 0.1270
vt 0.3989 0.0111
vt 0.5000 0.0027
vt 0.2514 0.5000
vt 0.2556 0.3831
vt 0.2666 0.2666
vt 0.2830 0.1513
vt 0.3019 0.0364
vt 0.1270 0.5000
vt 0.1334 0.3904
vt 0.1513 0.2830
vt 0.1797 0.1797
vt 0.2134 0.0786
vt 0.0027 0.5000
vt 0.0111 0.3989
vt 0.0364 0.3019
vt 0.0786 0.2134
vt 0.1376 0.1376
vt 0.6222 0.3778
vt 0.6243 0.5000
vt 0.7444 0.3831
vt 0.7486 0.5000
vt 0.8666 0.3904
vt 0.8730 0.5000
vt 0.9889 0.3989
vt 0.9973 0.5000
vt 0.6169 0.2556
vt 0.7334 0.2666
vt 0.8487 0.2830
vt 0.9636 0.3019
vt 0.6096 0.1334
vt 0.7170 0.1513
vt 0.8203 0.1797
vt 0.9214 0.2134
vt 0.6011 0.0111
vt 0.6981 0.0364
vt 0.7866 0.0786
vt 0.8624 0.1376
vt 0.6222 0.6222
vt 0.5000 0.6243
vt 0.6169 0.7444
vt 0.5000 0.7486
vt 0.6096 0.8666
vt 0.5000 0.8730
vt 0.6011 0.9889
vt 0.5000 0.9973
vt 0.7444 0.6169
vt 0.7334 0.7334
vt 0.7170 0.8487
vt 0.6981 0.9636
vt 0.8666 0.6096
vt 0.8487 0.7170
vt 0.8203 0.8203
vt 0.7866 0.9214
vt 0.9889 0.6011
vt 0.9636 0.6981
vt 0.9214 0.7866
vt 0.8624 0.8624
vt 0.3778 0.6222
vt 0.2556 0.6169
vt 0.1334 0.6096
vt 0.0111 0.6011
vt 0.3831 0.7444
vt 0.2666 0.7334
vt 0.1513 0.7170
vt 0.0364 0.6981
vt 0.3904 0.8666
vt 0.2830 0.8487
vt 0.1797 0.8203
vt 0.0786 0.7866
vt 0.3989 0.9889
vt 0.3019 0.9636
vt 0.2134 0.9214
vt 0.1376 0.8624
vn 0.0000 -1.0000 0.0000
usemtl None
s 1
f 1/1/1 11/2/1 14/3/1 2/4/1
f 2/4/1 14/3/1 15/5/1 3/6/1
f 3/6/1 15/5/1 16/7/1 4/8/1
f 4/8/1 16/7/1 59/9/1 60/10/1
f 11/2/1 12/11/1 17/12/1 14/3/1
f 14/3/1 17/12/1 18/13/1 15/5/1
f 15/5/1 18/13/1 19/14/1 16/7/1
f 16/7/1 19/14/1 58/15/1 59/9/1
f 12/11/1 13/16/1 20/17/1 17/12/1
f 17/12/1 20/17/1 21/18/1 18/13/1
f 18/13/1 21/18/1 22/19/1 19/14/1
f 19/14/1 22/19/1 57/20/1 58/15/1
f 13/16/1 53/21/1 54/22/1 20/17/1
f 20/17/1 54/22/1 55/23/1 21/18/1
f 21/18/1 55/23/1 56/24/1 22/19/1
f 22/19/1 56/24/1 78/25/1 57/20/1
f 1/1/1 2/4/1 23/26/1 5/27/1
f 5/27/1 23/26/1 24/28/1 6/29/1
f 6/29/1 24/28/1 25/30/1 7/31/1
f 7/31/1 25/30/1 66/32/1 67/33/1
f 2/4/1 3/6/1 26/34/1 23/26/1
f 23/26/1 26/34/1 27/35/1 24/28/1
f 24/28/1 27/35/1 28/36/1 25/30/1
f 25/30/1 28/36/1 65/37/1 66/32/1
f 3/6/1 4/8/1 29/38/1 26/34/1
f 26/34/1 29/38/1 30/39/1 27/35/1
f 27/35/1 30/39/1 31/40/1 28/36/1
f 28/36/1 31/40/1 64/41/1 65/37/1
f 4/8/1 60/10/1 61/42/1 29/38/1
f 29/38/1 61/42/1 62/43/1 30/39/1
f 30/39/1 62/43/1 63/44/1 31/40/1
f 31/40/1 63/44/1 79/45/1 64/41/1
f 1/1/1 5/27/1 32/46/1 8/47/1
f 8/47/1 32/46/1 33/48/1 9/49/1
f 9/49/1 33/48/1 34/50/1 10/51/1
f 10/51/1 34/50/1 73/52/1 74/53/1
f 5/27/1 6/29/1 35/54/1 32/46/1
f 32/46/1 35/54/1 36/55/1 33/48/1
f 33/48/1 36/55/1 37/56/1 34/50/1
f 34/50/1 37/56/1 72/57/1 73/52/1
f 6/29/1 7/31/1 38/58/1 35/54/1
f 35/54/1 38/58/1 39/59/1 36/55/1
f 36/55/1 39/59/1 40/60/1 37/56/1
f 37/56/1 40/60/1 71/61/1 72/57/1
f 7/31/1 67/33/1 68/62/1 38/58/1
f 38/58/1 68/62/1 69/63/1 39/59/1
f 39/59/1 69/63/1 70/64/1 40/60/1
f 40/60/1 70/64/1 81/65/1 71/61/1
f 1/1/1 8/47/1 41/66/1 11/2/1
f 11/2/1 41/66/1 42/67/1 12/11/1
f 12/11/1 42/67/1 43/68/1 13/16/1
f 13/16/1 43/68/1 52/69/1 53/21/1
f 8/47/1 9/49/1 44/70/1 41/66/1
f 41/66/1 44/70/1 45/71/1 42/67/1
f 42/67/1 45/71/1 46/72/1 43/68/1
f 43/68/1 46/72/1 51/73/1 52/69/1
f 9/49/1 10/51/1 47/74/1 44/70/1
f 44/70/1 47/74/1 48/75/1 45/71/1
f 45/71/1 48/75/1 49/76/1 46/72/1
f 46/72/1 49/76/1 50/77/1 51/73/1
f 10/51/1 74/53/1 75/78/1 47/74/1
f 47/74/1 75/78/1 76/79/1 48/75/1
f 48/75/1 76/79/1 77/80/1 49/76/1
f 49/76/1 77/80/1 80/81/1 50/77/1

@ -0,0 +1,233 @@
# Blender v2.78 (sub 0) OBJ File: 'portalgun_portal_ym.blend'
# www.blender.org
mtllib portalgun_portal_ym.mtl
o Plane
v 0.000000 0.000000 0.000000
v 0.000000 0.000000 1.652609
v 0.000000 0.000000 3.305217
v 0.000000 0.000000 4.957826
v 1.652609 0.000000 0.000000
v 3.305217 0.000000 0.000000
v 4.957826 0.000000 0.000000
v 0.000000 0.000000 -1.652609
v 0.000000 0.000000 -3.305217
v 0.000000 0.000000 -4.957826
v -1.652609 0.000000 0.000000
v -3.305217 0.000000 0.000000
v -4.957826 0.000000 0.000000
v -1.624598 0.000000 1.624598
v -1.554573 0.000000 3.249197
v -1.456536 0.000000 4.873795
v -3.249197 0.000000 1.554573
v -3.102143 0.000000 3.102143
v -2.885062 0.000000 4.635707
v -4.873795 0.000000 1.456536
v -4.635707 0.000000 2.885062
v -4.257568 0.000000 4.257568
v 1.624598 0.000000 1.624598
v 3.249197 0.000000 1.554573
v 4.873795 0.000000 1.456536
v 1.554573 0.000000 3.249197
v 3.102143 0.000000 3.102143
v 4.635707 0.000000 2.885062
v 1.456536 0.000000 4.873795
v 2.885062 0.000000 4.635707
v 4.257568 0.000000 4.257568
v 1.624598 0.000000 -1.624598
v 1.554573 0.000000 -3.249197
v 1.456536 0.000000 -4.873795
v 3.249197 0.000000 -1.554573
v 3.102143 0.000000 -3.102143
v 2.885062 0.000000 -4.635707
v 4.873795 0.000000 -1.456536
v 4.635707 0.000000 -2.885062
v 4.257568 0.000000 -4.257568
v -1.624598 0.000000 -1.624598
v -3.249197 0.000000 -1.554573
v -4.873795 0.000000 -1.456536
v -1.554573 0.000000 -3.249197
v -3.102143 0.000000 -3.102143
v -4.635707 0.000000 -2.885062
v -1.456536 0.000000 -4.873795
v -2.885062 0.000000 -4.635707
v -4.257568 0.000000 -4.257568
v -5.602063 0.000000 -3.809403
v -6.162270 0.000000 -2.632970
v -6.498394 0.000000 -1.344495
v -6.610435 0.000000 0.000000
v -6.498394 0.000000 1.344495
v -6.162270 0.000000 2.632970
v -5.602063 0.000000 3.809403
v -3.809403 0.000000 5.602063
v -2.632970 0.000000 6.162270
v -1.344495 0.000000 6.498394
v 0.000000 0.000000 6.610435
v 1.344495 0.000000 6.498394
v 2.632970 0.000000 6.162270
v 3.809403 0.000000 5.602063
v 5.602063 0.000000 3.809403
v 6.162270 0.000000 2.632970
v 6.498394 0.000000 1.344495
v 6.610435 0.000000 0.000000
v 6.498394 0.000000 -1.344495
v 6.162270 0.000000 -2.632970
v 5.602063 0.000000 -3.809403
v 3.809403 0.000000 -5.602063
v 2.632970 0.000000 -6.162270
v 1.344495 0.000000 -6.498394
v 0.000000 0.000000 -6.610435
v -1.344495 0.000000 -6.498394
v -2.632970 0.000000 -6.162270
v -3.809403 0.000000 -5.602063
v -4.817774 0.000000 4.817774
v 4.817774 0.000000 4.817774
v -4.817774 0.000000 -4.817774
v 4.817774 0.000000 -4.817774
vt 0.5000 0.5000
vt 0.3757 0.5000
vt 0.3778 0.3778
vt 0.5000 0.3757
vt 0.3831 0.2556
vt 0.5000 0.2514
vt 0.3904 0.1334
vt 0.5000 0.1270
vt 0.3989 0.0111
vt 0.5000 0.0027
vt 0.2514 0.5000
vt 0.2556 0.3831
vt 0.2666 0.2666
vt 0.2830 0.1513
vt 0.3019 0.0364
vt 0.1270 0.5000
vt 0.1334 0.3904
vt 0.1513 0.2830
vt 0.1797 0.1797
vt 0.2134 0.0786
vt 0.0027 0.5000
vt 0.0111 0.3989
vt 0.0364 0.3019
vt 0.0786 0.2134
vt 0.1376 0.1376
vt 0.6222 0.3778
vt 0.6243 0.5000
vt 0.7444 0.3831
vt 0.7486 0.5000
vt 0.8666 0.3904
vt 0.8730 0.5000
vt 0.9889 0.3989
vt 0.9973 0.5000
vt 0.6169 0.2556
vt 0.7334 0.2666
vt 0.8487 0.2830
vt 0.9636 0.3019
vt 0.6096 0.1334
vt 0.7170 0.1513
vt 0.8203 0.1797
vt 0.9214 0.2134
vt 0.6011 0.0111
vt 0.6981 0.0364
vt 0.7866 0.0786
vt 0.8624 0.1376
vt 0.6222 0.6222
vt 0.5000 0.6243
vt 0.6169 0.7444
vt 0.5000 0.7486
vt 0.6096 0.8666
vt 0.5000 0.8730
vt 0.6011 0.9889
vt 0.5000 0.9973
vt 0.7444 0.6169
vt 0.7334 0.7334
vt 0.7170 0.8487
vt 0.6981 0.9636
vt 0.8666 0.6096
vt 0.8487 0.7170
vt 0.8203 0.8203
vt 0.7866 0.9214
vt 0.9889 0.6011
vt 0.9636 0.6981
vt 0.9214 0.7866
vt 0.8624 0.8624
vt 0.3778 0.6222
vt 0.2556 0.6169
vt 0.1334 0.6096
vt 0.0111 0.6011
vt 0.3831 0.7444
vt 0.2666 0.7334
vt 0.1513 0.7170
vt 0.0364 0.6981
vt 0.3904 0.8666
vt 0.2830 0.8487
vt 0.1797 0.8203
vt 0.0786 0.7866
vt 0.3989 0.9889
vt 0.3019 0.9636
vt 0.2134 0.9214
vt 0.1376 0.8624
vn 0.0000 1.0000 0.0000
usemtl None
s 1
f 1/1/1 11/2/1 14/3/1 2/4/1
f 2/4/1 14/3/1 15/5/1 3/6/1
f 3/6/1 15/5/1 16/7/1 4/8/1
f 4/8/1 16/7/1 59/9/1 60/10/1
f 11/2/1 12/11/1 17/12/1 14/3/1
f 14/3/1 17/12/1 18/13/1 15/5/1
f 15/5/1 18/13/1 19/14/1 16/7/1
f 16/7/1 19/14/1 58/15/1 59/9/1
f 12/11/1 13/16/1 20/17/1 17/12/1
f 17/12/1 20/17/1 21/18/1 18/13/1
f 18/13/1 21/18/1 22/19/1 19/14/1
f 19/14/1 22/19/1 57/20/1 58/15/1
f 13/16/1 53/21/1 54/22/1 20/17/1
f 20/17/1 54/22/1 55/23/1 21/18/1
f 21/18/1 55/23/1 56/24/1 22/19/1
f 22/19/1 56/24/1 78/25/1 57/20/1
f 1/1/1 2/4/1 23/26/1 5/27/1
f 5/27/1 23/26/1 24/28/1 6/29/1
f 6/29/1 24/28/1 25/30/1 7/31/1
f 7/31/1 25/30/1 66/32/1 67/33/1
f 2/4/1 3/6/1 26/34/1 23/26/1
f 23/26/1 26/34/1 27/35/1 24/28/1
f 24/28/1 27/35/1 28/36/1 25/30/1
f 25/30/1 28/36/1 65/37/1 66/32/1
f 3/6/1 4/8/1 29/38/1 26/34/1
f 26/34/1 29/38/1 30/39/1 27/35/1
f 27/35/1 30/39/1 31/40/1 28/36/1
f 28/36/1 31/40/1 64/41/1 65/37/1
f 4/8/1 60/10/1 61/42/1 29/38/1
f 29/38/1 61/42/1 62/43/1 30/39/1
f 30/39/1 62/43/1 63/44/1 31/40/1
f 31/40/1 63/44/1 79/45/1 64/41/1
f 1/1/1 5/27/1 32/46/1 8/47/1
f 8/47/1 32/46/1 33/48/1 9/49/1
f 9/49/1 33/48/1 34/50/1 10/51/1
f 10/51/1 34/50/1 73/52/1 74/53/1
f 5/27/1 6/29/1 35/54/1 32/46/1
f 32/46/1 35/54/1 36/55/1 33/48/1
f 33/48/1 36/55/1 37/56/1 34/50/1
f 34/50/1 37/56/1 72/57/1 73/52/1
f 6/29/1 7/31/1 38/58/1 35/54/1
f 35/54/1 38/58/1 39/59/1 36/55/1
f 36/55/1 39/59/1 40/60/1 37/56/1
f 37/56/1 40/60/1 71/61/1 72/57/1
f 7/31/1 67/33/1 68/62/1 38/58/1
f 38/58/1 68/62/1 69/63/1 39/59/1
f 39/59/1 69/63/1 70/64/1 40/60/1
f 40/60/1 70/64/1 81/65/1 71/61/1
f 1/1/1 8/47/1 41/66/1 11/2/1
f 11/2/1 41/66/1 42/67/1 12/11/1
f 12/11/1 42/67/1 43/68/1 13/16/1
f 13/16/1 43/68/1 52/69/1 53/21/1
f 8/47/1 9/49/1 44/70/1 41/66/1
f 41/66/1 44/70/1 45/71/1 42/67/1
f 42/67/1 45/71/1 46/72/1 43/68/1
f 43/68/1 46/72/1 51/73/1 52/69/1
f 9/49/1 10/51/1 47/74/1 44/70/1
f 44/70/1 47/74/1 48/75/1 45/71/1
f 45/71/1 48/75/1 49/76/1 46/72/1
f 46/72/1 49/76/1 50/77/1 51/73/1
f 10/51/1 74/53/1 75/78/1 47/74/1
f 47/74/1 75/78/1 76/79/1 48/75/1
f 48/75/1 76/79/1 77/80/1 49/76/1
f 49/76/1 77/80/1 80/81/1 50/77/1

BIN
models/torret.blend Normal file

Binary file not shown.

792
models/torret1.obj Normal file

@ -0,0 +1,792 @@
# Blender v2.79 (sub 0) OBJ File: 'torret2.blend'
# www.blender.org
mtllib torret1.mtl
o Cube.003_Cube.006
v 0.189895 0.163143 -0.372653
v 0.189895 0.201097 -0.378580
v 0.080336 0.159674 -0.394870
v 0.080336 0.197628 -0.400796
v 0.242297 0.123751 -0.624923
v 0.242297 0.161705 -0.630850
v 0.132738 0.120282 -0.647140
v 0.132738 0.158236 -0.653066
v -0.132041 0.120282 -0.647140
v -0.241600 0.161705 -0.630850
v -0.241600 0.123751 -0.624923
v -0.079638 0.197628 -0.400796
v -0.079638 0.159674 -0.394870
v -0.189198 0.201097 -0.378580
v -0.189198 0.163143 -0.372653
v -0.132041 0.158236 -0.653066
v 0.063142 0.001380 0.512074
v 0.063142 0.035815 0.538953
v -0.064046 0.001380 0.512074
v -0.064046 0.035815 0.538953
v 0.063142 0.183763 0.278415
v 0.063142 0.218199 0.305294
v -0.064046 0.183763 0.278415
v -0.064046 0.218199 0.305294
v -0.132739 0.274292 0.122505
v -0.132738 0.815413 0.122505
v -0.194069 0.274292 0.122505
v -0.194069 0.815413 0.122505
v -0.132739 0.274292 -0.191426
v -0.132739 0.815413 -0.191426
v -0.194069 0.274292 -0.191426
v -0.194069 0.815413 -0.191426
v 0.128914 0.144853 0.197599
v 0.128914 0.944853 0.197599
v -0.133743 0.144853 0.197599
v -0.133743 0.944853 0.197599
v 0.128913 0.144853 -0.266520
v 0.128914 0.944853 -0.266520
v -0.133743 0.144853 -0.266520
v -0.133743 0.944853 -0.266520
v 0.189656 0.274292 0.122505
v 0.189656 0.815413 0.122505
v 0.128325 0.274292 0.122505
v 0.128325 0.815413 0.122505
v 0.189656 0.274292 -0.191426
v 0.189656 0.815413 -0.191426
v 0.128325 0.274292 -0.191426
v 0.128325 0.815413 -0.191426
v -0.058777 0.548149 -0.265845
v -0.058777 0.548149 -0.273879
v -0.043146 0.510413 -0.265845
v -0.043146 0.510413 -0.273879
v -0.005410 0.494783 -0.265845
v -0.005410 0.494783 -0.273879
v 0.032325 0.510413 -0.265845
v 0.032325 0.510413 -0.273879
v 0.047956 0.548149 -0.265845
v 0.047956 0.548149 -0.273879
v 0.032325 0.585884 -0.265845
v 0.032325 0.585884 -0.273879
v -0.005410 0.601515 -0.265845
v -0.005410 0.601515 -0.273879
v -0.043146 0.585884 -0.265845
v -0.043146 0.585884 -0.273879
v -0.000109 0.149264 -0.268848
v -0.000109 0.940441 -0.268848
v -0.004799 0.149264 -0.268848
v -0.004799 0.940441 -0.268848
v -0.000109 0.149264 -0.260088
v -0.000109 0.940441 -0.260088
v -0.004799 0.149264 -0.260088
v -0.004799 0.940441 -0.260088
v 0.119911 0.086846 -0.114011
v 0.111512 0.130445 -0.112341
v 0.038877 0.064643 -0.136101
v 0.030478 0.108242 -0.134431
v 0.209056 0.123944 -0.552177
v 0.200657 0.167543 -0.550507
v 0.128022 0.101741 -0.574268
v 0.138016 0.145340 -0.572597
v 0.048662 0.033870 0.495340
v 0.048662 0.022144 0.452483
v -0.053491 0.033870 0.495340
v -0.053491 0.022144 0.452483
v 0.048662 -0.476361 0.634943
v 0.048662 -0.488087 0.592086
v -0.053491 -0.476361 0.634943
v -0.053491 -0.488087 0.592086
v 0.209056 0.123944 -0.552177
v 0.128022 0.101741 -0.574268
v 0.219790 0.123944 -0.595985
v 0.211391 0.167543 -0.594315
v 0.157149 0.101741 -0.618075
v 0.148750 0.145340 -0.616405
v 0.312716 -0.500601 -0.680111
v 0.231681 -0.496988 -0.702201
v 0.323449 -0.500601 -0.723919
v 0.242415 -0.496988 -0.746009
v 0.080352 0.075744 -0.125056
v 0.094276 0.014385 -0.314219
v 0.169496 0.112843 -0.563222
v 0.175310 0.036588 -0.292129
v 0.135751 0.025487 -0.303174
v 0.071953 0.119343 -0.123386
v 0.085877 0.057984 -0.312549
v 0.161097 0.156442 -0.561552
v 0.166911 0.080187 -0.290458
v 0.127351 0.069086 -0.301503
v -0.124589 0.086846 -0.114011
v -0.116189 0.130445 -0.112341
v -0.043554 0.064643 -0.136101
v -0.035155 0.108242 -0.134431
v -0.213733 0.123944 -0.552177
v -0.205334 0.167543 -0.550507
v -0.132699 0.101741 -0.574268
v -0.124300 0.145340 -0.572597
v -0.213733 0.123944 -0.552177
v -0.132699 0.101741 -0.574268
v -0.224467 0.123944 -0.595985
v -0.216068 0.167543 -0.594315
v -0.143433 0.101741 -0.618075
v -0.135034 0.145340 -0.616405
v -0.317393 -0.500601 -0.680111
v -0.236359 -0.496988 -0.702201
v -0.328127 -0.500601 -0.723919
v -0.247093 -0.496988 -0.746009
v -0.085029 0.075744 -0.125056
v -0.098953 0.014385 -0.314219
v -0.174174 0.112843 -0.563222
v -0.179988 0.036588 -0.292129
v -0.140428 0.025487 -0.303174
v -0.076630 0.119343 -0.123386
v -0.090554 0.057984 -0.312549
v -0.165774 0.156442 -0.561552
v -0.171588 0.080187 -0.290458
v -0.132029 0.069086 -0.301504
v 0.048662 0.269229 0.190763
v 0.048662 0.257503 0.147906
v -0.053491 0.269229 0.190763
v -0.053491 0.257503 0.147906
v 0.119911 0.086846 -0.114011
v 0.111512 0.130445 -0.112341
v 0.038877 0.064643 -0.136101
v 0.030478 0.108242 -0.134431
v -0.124589 0.086846 -0.114011
v -0.116189 0.130445 -0.112341
v -0.043554 0.064643 -0.136101
v -0.035155 0.108242 -0.134431
v 0.080352 0.075744 -0.125056
v 0.071953 0.119343 -0.123386
v -0.085029 0.075744 -0.125056
v -0.076630 0.119343 -0.123386
v 0.119911 0.086846 -0.114011
v 0.111512 0.130445 -0.112341
v 0.038877 0.064643 -0.136101
v 0.030478 0.108242 -0.134431
v -0.124589 0.086846 -0.114011
v -0.116189 0.130445 -0.112341
v -0.043554 0.064643 -0.136101
v -0.035155 0.108242 -0.134431
v -0.124589 0.171454 -0.009180
v -0.116189 0.215053 -0.007510
v -0.043554 0.149251 -0.031270
v -0.035155 0.192850 -0.029600
v -0.085029 0.160352 -0.020225
v -0.076630 0.203951 -0.018555
v 0.119911 0.157397 -0.053308
v 0.111512 0.200996 -0.051637
v 0.038877 0.135194 -0.075398
v 0.030478 0.178793 -0.073728
v 0.080352 0.146295 -0.064353
v 0.071953 0.189894 -0.062682
vt 0.489132 0.748949
vt 0.489132 0.718137
vt 0.519717 0.718145
vt 0.519717 0.748957
vt 0.090171 0.693043
vt 0.090171 0.723854
vt 0.061402 0.723899
vt 0.061402 0.693087
vt 0.210985 0.718395
vt 0.210985 0.749207
vt 0.180404 0.749215
vt 0.180404 0.718403
vt 0.246514 0.722337
vt 0.246514 0.753149
vt 0.217065 0.753184
vt 0.217065 0.722372
vt 0.000000 0.693043
vt 0.030701 0.693043
vt 0.030701 0.723855
vt 0.000000 0.723855
vt 0.030701 0.693043
vt 0.061402 0.693043
vt 0.061402 0.723855
vt 0.030701 0.723855
vt 0.113868 0.693092
vt 0.144569 0.693034
vt 0.144569 0.729449
vt 0.113868 0.729507
vt 0.028567 0.723863
vt 0.028567 0.754674
vt 0.000000 0.754666
vt 0.000000 0.723855
vt 0.057131 0.723855
vt 0.057131 0.754666
vt 0.028567 0.754674
vt 0.028567 0.723863
vt 0.144569 0.693102
vt 0.175270 0.693034
vt 0.175270 0.728196
vt 0.144569 0.728264
vt 0.113868 0.693034
vt 0.113868 0.733059
vt 0.090234 0.749387
vt 0.090234 0.709362
vt 0.453595 0.706535
vt 0.429961 0.690207
vt 0.429961 0.730233
vt 0.453595 0.746561
vt 0.491495 0.718137
vt 0.489132 0.694236
vt 0.523439 0.692892
vt 0.525802 0.716793
vt 0.690895 0.620228
vt 0.683350 0.597128
vt 0.683350 0.421757
vt 0.690895 0.444858
vt 0.180404 0.543450
vt 0.182758 0.519548
vt 0.217065 0.520887
vt 0.214711 0.544789
vt 0.797976 0.023111
vt 0.805454 0.000000
vt 0.805454 0.175364
vt 0.797976 0.198475
vt 0.182758 0.717056
vt 0.217065 0.718395
vt 0.525802 0.519284
vt 0.491495 0.520628
vt 0.666799 0.889843
vt 0.653710 0.461156
vt 0.670262 0.460793
vt 0.683350 0.889480
vt 0.573487 0.421757
vt 0.573487 0.850735
vt 0.533024 0.888570
vt 0.533024 0.459592
vt 0.292521 0.928144
vt 0.305565 0.499455
vt 0.322117 0.499817
vt 0.309072 0.928506
vt 0.613599 0.850721
vt 0.613599 0.421757
vt 0.653710 0.459650
vt 0.653710 0.888614
vt 0.305565 0.967176
vt 0.322117 0.967538
vt 0.683350 0.421757
vt 0.666799 0.422120
vt 0.019350 0.693043
vt 0.000000 0.059266
vt 0.070884 0.057711
vt 0.090234 0.691487
vt 0.348156 0.690141
vt 0.348156 0.055936
vt 0.407978 0.000000
vt 0.407978 0.634205
vt 0.090234 0.633779
vt 0.109519 0.000000
vt 0.180404 0.001550
vt 0.161119 0.635328
vt 0.407978 0.634186
vt 0.407978 0.000000
vt 0.467279 0.056021
vt 0.467279 0.690207
vt 0.109519 0.691484
vt 0.180404 0.693034
vt 0.090234 0.000000
vt 0.019350 0.001555
vt 0.927182 0.678965
vt 0.914094 0.250278
vt 0.930645 0.249915
vt 0.943734 0.678602
vt 0.863881 0.210879
vt 0.863881 0.639856
vt 0.823417 0.677691
vt 0.823417 0.248714
vt 0.262925 0.928144
vt 0.275969 0.499455
vt 0.292521 0.499817
vt 0.279476 0.928506
vt 0.573487 0.850721
vt 0.573487 0.421757
vt 0.613599 0.459650
vt 0.613599 0.888614
vt 0.275969 0.967176
vt 0.292521 0.967538
vt 0.943734 0.210879
vt 0.927182 0.211242
vt 0.526837 0.561436
vt 0.525802 0.562405
vt 0.526922 0.532534
vt 0.527957 0.531566
vt 0.529626 0.520252
vt 0.530662 0.519284
vt 0.261228 0.519548
vt 0.262254 0.520518
vt 0.260242 0.532918
vt 0.259216 0.531948
vt 0.259409 0.562836
vt 0.258382 0.561866
vt 0.260242 0.592746
vt 0.259216 0.591777
vt 0.262254 0.605128
vt 0.261228 0.604158
vt 0.737396 0.137634
vt 0.745741 0.166619
vt 0.745741 0.196863
vt 0.737396 0.210649
vt 0.725595 0.199902
vt 0.717250 0.170917
vt 0.717250 0.140673
vt 0.725595 0.126887
vt 0.530662 0.603896
vt 0.529626 0.604865
vt 0.526922 0.592365
vt 0.527957 0.591397
vt 0.401848 0.734172
vt 0.393503 0.763157
vt 0.381702 0.773903
vt 0.373357 0.760116
vt 0.373357 0.729872
vt 0.381702 0.700888
vt 0.393503 0.690141
vt 0.401848 0.703928
vt 0.994427 0.211965
vt 0.996089 0.839044
vt 0.994823 0.839036
vt 0.993161 0.211957
vt 0.998881 0.838070
vt 0.998881 0.210879
vt 1.000000 0.211936
vt 1.000000 0.839128
vt 0.997751 0.210879
vt 0.997355 0.837960
vt 0.996089 0.837970
vt 0.996485 0.210889
vt 0.998881 0.210879
vt 0.998881 0.838089
vt 0.997751 0.839145
vt 0.997751 0.211935
vt 0.993557 0.210879
vt 0.994823 0.210887
vt 0.997751 0.839037
vt 0.996485 0.839048
vt 0.419228 0.746897
vt 0.407978 0.755091
vt 0.407978 0.706561
vt 0.419228 0.698367
vt 0.698133 0.347193
vt 0.699215 0.312870
vt 0.717830 0.331470
vt 0.749646 0.231355
vt 0.749881 0.265758
vt 0.716748 0.365793
vt 0.527891 0.514099
vt 0.526949 0.479752
vt 0.532082 0.484937
vt 0.533024 0.519284
vt 0.494398 0.414124
vt 0.474975 0.432859
vt 0.474033 0.398513
vt 0.493456 0.379778
vt 0.729140 0.108574
vt 0.729140 0.007234
vt 0.740514 0.000000
vt 0.740514 0.101340
vt 0.714070 0.736164
vt 0.691363 0.739897
vt 0.691363 0.728510
vt 0.714070 0.724777
vt 0.889098 0.635769
vt 0.894914 0.632147
vt 0.914094 0.858058
vt 0.908277 0.861681
vt 0.863881 0.436785
vt 0.869749 0.440407
vt 0.889098 0.861661
vt 0.883230 0.858039
vt 0.531090 0.632539
vt 0.525802 0.634527
vt 0.525802 0.606852
vt 0.531090 0.604865
vt 0.908277 0.214502
vt 0.914094 0.210879
vt 0.782198 0.435213
vt 0.789035 0.856782
vt 0.761467 0.857408
vt 0.754630 0.435839
vt 0.823417 0.211502
vt 0.816603 0.633071
vt 0.789035 0.632448
vt 0.795849 0.210879
vt 0.717250 0.014459
vt 0.717250 0.014459
vt 0.740514 0.000000
vt 0.974576 0.259453
vt 0.973975 0.225057
vt 0.992560 0.210879
vt 0.993161 0.245275
vt 0.753548 0.260468
vt 0.754630 0.719567
vt 0.749646 0.724777
vt 0.746721 0.223758
vt 0.742617 0.216089
vt 0.747601 0.210879
vt 0.754630 0.226145
vt 0.992000 0.730186
vt 0.969399 0.723737
vt 0.970561 0.718371
vt 0.993161 0.724820
vt 0.527891 0.000000
vt 0.533024 0.005185
vt 0.345667 0.978998
vt 0.334150 0.971992
vt 0.322117 0.965006
vt 0.323063 0.505903
vt 0.345667 0.499455
vt 0.061471 0.735801
vt 0.084178 0.739534
vt 0.084178 0.750921
vt 0.061471 0.747188
vt 0.061402 0.723899
vt 0.084109 0.727632
vt 0.717250 0.115799
vt 0.756487 0.007782
vt 0.751525 0.109002
vt 0.740514 0.101220
vt 0.745477 0.000000
vt 0.763052 0.015426
vt 0.763052 0.116800
vt 0.714001 0.748065
vt 0.691294 0.751799
vt 0.217065 0.543224
vt 0.229350 0.547359
vt 0.239504 0.600770
vt 0.227219 0.596635
vt 0.273697 0.117994
vt 0.274601 0.083610
vt 0.300568 0.103478
vt 0.341486 0.004919
vt 0.340582 0.039303
vt 0.299664 0.137862
vt 0.256530 0.514540
vt 0.255685 0.480181
vt 0.262080 0.485189
vt 0.262925 0.519548
vt 0.217130 0.415552
vt 0.192246 0.435023
vt 0.191402 0.400664
vt 0.216286 0.381193
vt 0.788994 0.009371
vt 0.788994 0.112674
vt 0.780519 0.121944
vt 0.780519 0.018640
vt 0.244691 0.719359
vt 0.229677 0.694175
vt 0.241808 0.691006
vt 0.256822 0.716189
vt 0.797976 0.103304
vt 0.797976 0.103304
vt 0.780519 0.121944
vt 0.947478 0.258507
vt 0.947551 0.224056
vt 0.969399 0.210879
vt 0.969325 0.245330
vt 0.347253 0.034384
vt 0.348156 0.494536
vt 0.341486 0.499455
vt 0.256822 0.663851
vt 0.256859 0.653076
vt 0.256822 0.642815
vt 0.262650 0.638760
vt 0.262651 0.659797
vt 0.348156 0.000000
vt 0.964146 0.731052
vt 0.943734 0.723818
vt 0.948987 0.718813
vt 0.969399 0.726048
vt 0.256530 0.000000
vt 0.262925 0.005008
vt 0.489132 1.000000
vt 0.478463 0.993392
vt 0.467279 0.986825
vt 0.468717 0.526520
vt 0.489132 0.519284
vt 0.246593 0.523683
vt 0.258382 0.527964
vt 0.241139 0.551640
vt 0.234309 0.519548
vt 0.797976 0.000000
vt 0.772039 0.112663
vt 0.772039 0.009368
vt 0.780519 0.018635
vt 0.780519 0.121930
vt 0.763052 0.103295
vt 0.763052 0.000000
vt 0.232080 0.722337
vt 0.217065 0.697153
vt 0.531090 0.664189
vt 0.525802 0.662201
vt 0.525802 0.634527
vt 0.531090 0.636514
vt 0.823417 0.857402
vt 0.795849 0.856779
vt 0.761467 0.211505
vt 0.789035 0.210879
vt 0.883230 0.210879
vt 0.889098 0.214501
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.251293 0.605051
vt 0.258382 0.638760
vt 0.246593 0.634479
vt 0.234309 0.630343
vt 0.262925 0.062943
vt 0.263829 0.028558
vt 0.181248 0.489979
vt 0.180404 0.455620
vt 0.244691 0.641929
vt 0.256822 0.638760
vt 0.232080 0.644908
vt 0.348156 0.724456
vt 0.350583 0.690141
vt 0.361712 0.697753
vt 0.373357 0.705372
vt 0.370930 0.739687
vt 0.359285 0.732067
vt 0.361712 0.780537
vt 0.350583 0.772925
vt 0.429961 0.738737
vt 0.429961 0.690207
vt 0.691294 0.298430
vt 0.692376 0.264107
vt 0.468221 0.481611
vt 0.467279 0.447264
vt 0.373357 0.788156
vn -0.2010 0.1511 0.9679
vn -0.9796 -0.0310 -0.1986
vn 0.2010 -0.1511 -0.9679
vn 0.9796 0.0310 0.1986
vn -0.0000 -0.9880 0.1543
vn -0.0000 0.9880 -0.1543
vn -0.9796 0.0310 0.1986
vn -0.2010 -0.1511 -0.9679
vn 0.2010 0.1511 0.9679
vn 0.9796 -0.0310 -0.1986
vn 0.0000 -0.6153 0.7883
vn -1.0000 -0.0000 0.0000
vn 0.0000 0.6153 -0.7883
vn 1.0000 0.0000 -0.0000
vn 0.0000 -0.7883 -0.6153
vn 0.0000 0.7883 0.6153
vn 0.0000 0.0000 1.0000
vn 0.0000 -0.0000 -1.0000
vn -0.0000 -1.0000 -0.0000
vn -0.0000 1.0000 0.0000
vn -0.9239 -0.3827 -0.0000
vn -0.3827 -0.9239 0.0000
vn 0.3827 -0.9239 -0.0000
vn 0.9239 -0.3827 -0.0000
vn 0.9239 0.3827 0.0000
vn 0.3827 0.9239 0.0000
vn -0.3827 0.9239 -0.0000
vn -0.9239 0.3827 0.0000
vn 0.0273 0.6520 -0.7577
vn -0.9793 -0.0575 -0.1940
vn 0.9562 0.1752 0.2343
vn 0.9614 0.1771 0.2106
vn 0.3279 -0.9076 -0.2623
vn -0.1732 0.9325 -0.3170
vn 0.0000 -0.9645 0.2639
vn -0.0000 0.2639 0.9645
vn 0.0000 -0.2639 -0.9645
vn 0.0000 0.7053 -0.7089
vn 0.3012 0.0944 -0.9489
vn -0.9088 -0.0550 -0.4135
vn -0.3003 0.9484 -0.1018
vn -0.9097 0.0325 -0.4139
vn -0.0418 -0.9991 -0.0102
vn 0.9652 0.1118 0.2365
vn -0.2303 -0.2363 0.9440
vn 0.2576 0.2358 -0.9370
vn 0.1732 -0.9325 0.3170
vn 0.1661 -0.9343 0.3153
vn 0.3146 -0.9114 -0.2653
vn -0.3279 0.9076 0.2623
vn -0.3872 0.8914 0.2355
vn -0.1661 0.9343 -0.3153
vn 0.0410 0.7775 -0.6275
vn -0.9614 0.1771 0.2106
vn 0.9562 -0.1752 -0.2343
vn 0.9614 -0.1771 -0.2106
vn 0.3279 0.9076 0.2623
vn -0.1732 -0.9325 0.3170
vn -0.0001 -0.7054 0.7089
vn 0.2407 -0.0834 0.9670
vn -0.9647 0.1165 0.2364
vn -0.2490 -0.9668 0.0583
vn -0.9562 0.1752 0.2343
vn -0.0418 0.9991 0.0102
vn 0.9652 -0.1118 -0.2365
vn -0.2303 0.2363 -0.9440
vn 0.2302 -0.2365 0.9440
vn 0.1732 0.9325 -0.3170
vn 0.1661 0.9343 -0.3153
vn 0.3146 0.9114 0.2653
vn -0.3279 -0.9076 -0.2623
vn -0.3146 -0.9114 -0.2653
vn -0.1661 -0.9343 0.3153
vn 0.0000 0.9645 -0.2639
vn 0.0000 -0.7913 -0.6115
vn -0.0000 0.7913 0.6115
vn -0.2407 0.0834 -0.9670
vn -0.9689 0.1926 -0.1555
vn 0.9689 -0.1926 0.1555
vn -0.0430 -0.7775 0.6275
vn -0.0410 -0.7775 0.6275
vn 0.0430 0.7775 -0.6275
vn -0.2407 -0.0834 0.9670
vn -0.0286 -0.6520 0.7577
vn 0.0286 0.6520 -0.7577
vn -0.9554 -0.1926 0.2239
vn 0.9554 0.1926 -0.2239
vn -0.0273 -0.6520 0.7577
usemtl Material.001
s off
f 1/1/1 2/2/1 4/3/1 3/4/1
f 3/5/2 4/6/2 8/7/2 7/8/2
f 7/9/3 8/10/3 6/11/3 5/12/3
f 5/13/4 6/14/4 2/15/4 1/16/4
f 3/17/5 7/18/5 5/19/5 1/20/5
f 8/21/6 4/22/6 2/23/6 6/24/6
f 13/25/7 12/26/7 16/27/7 9/28/7
f 15/29/8 14/30/8 12/31/8 13/32/8
f 9/33/9 16/34/9 10/35/9 11/36/9
f 11/37/10 10/38/10 14/39/10 15/40/10
f 13/41/6 9/42/6 11/43/6 15/44/6
f 16/45/6 10/46/6 14/47/6 12/48/6
f 17/49/11 18/50/11 20/51/11 19/52/11
f 19/53/12 20/54/12 24/55/12 23/56/12
f 23/57/13 24/58/13 22/59/13 21/60/13
f 21/61/14 22/62/14 18/63/14 17/64/14
f 19/65/15 23/57/15 21/60/15 17/66/15
f 24/67/16 20/51/16 18/50/16 22/68/16
f 25/69/17 26/70/17 28/71/17 27/72/17
f 27/73/12 28/74/12 32/75/12 31/76/12
f 31/77/18 32/78/18 30/79/18 29/80/18
f 29/81/14 30/82/14 26/83/14 25/84/14
f 27/85/19 31/77/19 29/80/19 25/86/19
f 32/87/20 28/71/20 26/70/20 30/88/20
f 33/89/17 34/90/17 36/91/17 35/92/17
f 35/93/12 36/94/12 40/95/12 39/96/12
f 39/97/18 40/98/18 38/99/18 37/100/18
f 37/101/14 38/102/14 34/103/14 33/104/14
f 35/105/19 39/97/19 37/100/19 33/106/19
f 40/107/20 36/91/20 34/90/20 38/108/20
f 41/109/17 42/110/17 44/111/17 43/112/17
f 43/113/12 44/114/12 48/115/12 47/116/12
f 47/117/18 48/118/18 46/119/18 45/120/18
f 45/121/14 46/122/14 42/123/14 41/124/14
f 43/125/19 47/117/19 45/120/19 41/126/19
f 48/127/20 44/111/20 42/110/20 46/128/20
f 49/129/21 50/130/21 52/131/21 51/132/21
f 51/132/22 52/131/22 54/133/22 53/134/22
f 53/135/23 54/136/23 56/137/23 55/138/23
f 55/138/24 56/137/24 58/139/24 57/140/24
f 57/140/25 58/139/25 60/141/25 59/142/25
f 59/142/26 60/141/26 62/143/26 61/144/26
f 52/145/18 50/146/18 64/147/18 62/148/18 60/149/18 58/150/18 56/151/18 54/152/18
f 61/153/27 62/154/27 64/155/27 63/156/27
f 63/156/28 64/155/28 50/130/28 49/129/28
f 49/157/17 51/158/17 53/159/17 55/160/17 57/161/17 59/162/17 61/163/17 63/164/17
f 65/165/17 66/166/17 68/167/17 67/168/17
f 67/169/14 68/170/14 72/171/14 71/172/14
f 71/173/18 72/174/18 70/175/18 69/176/18
f 69/177/12 70/178/12 66/179/12 65/180/12
f 67/168/20 71/181/20 69/182/20 65/165/20
f 72/174/19 68/183/19 66/184/19 70/175/19
f 104/185/29 76/186/29 170/187/29 172/188/29
f 75/189/30 76/190/30 105/191/30 80/192/30 79/193/30 100/194/30
f 78/195/31 77/196/31 91/197/31 92/198/31
f 77/196/32 78/195/32 107/199/32 74/200/32 73/201/32 102/202/32
f 103/203/33 101/204/33 77/205/33 102/206/33
f 108/207/34 104/208/34 74/209/34 107/210/34
f 81/211/14 82/212/14 138/213/14 137/214/14
f 83/215/12 84/216/12 88/217/12 87/218/12
f 87/219/35 88/220/35 86/221/35 85/222/35
f 85/223/14 86/224/14 82/212/14 81/211/14
f 83/225/36 87/226/36 85/227/36 81/228/36
f 88/229/37 84/230/37 82/231/37 86/232/37
f 77/205/38 101/204/38 79/233/38 90/234/38 89/235/38
f 93/236/39 94/237/39 92/238/39 91/239/39
f 79/193/40 93/240/40 98/241/40 96/242/40
f 80/192/41 106/243/41 78/244/41 92/245/41 94/246/41
f 79/193/42 80/192/42 94/246/42 93/240/42
f 95/247/43 96/248/43 98/249/43 97/250/43
f 91/197/44 77/196/44 95/251/44 97/252/44
f 77/253/45 101/254/45 79/255/45 96/256/45 95/257/45
f 93/236/46 91/239/46 97/250/46 98/249/46
f 99/258/47 103/259/47 102/260/47 73/261/47
f 75/262/48 100/263/48 103/259/48 99/258/48
f 100/264/49 79/233/49 101/204/49 103/203/49
f 106/265/50 108/266/50 107/267/50 78/268/50
f 80/269/51 105/270/51 108/266/51 106/265/51
f 105/271/52 76/272/52 104/208/52 108/207/52
f 111/273/53 127/274/53 165/275/53 163/276/53
f 111/277/54 112/278/54 133/279/54 116/280/54 115/281/54 128/282/54
f 114/283/55 113/284/55 119/285/55 120/286/55
f 113/284/56 114/283/56 135/287/56 110/288/56 109/289/56 130/290/56
f 131/291/57 129/292/57 113/293/57 130/294/57
f 136/295/58 132/296/58 110/297/58 135/298/58
f 113/293/59 129/292/59 115/299/59 118/300/59 117/301/59
f 121/302/60 122/303/60 120/304/60 119/305/60
f 115/281/61 121/306/61 126/307/61 124/308/61
f 116/309/62 134/310/62 114/311/62 120/312/62 122/313/62
f 115/281/63 116/280/63 122/314/63 121/306/63
f 123/315/64 124/316/64 126/317/64 125/318/64
f 119/285/65 113/284/65 123/319/65 125/320/65
f 113/321/66 129/322/66 115/323/66 124/324/66 123/325/66
f 121/302/67 119/305/67 125/318/67 126/317/67
f 127/274/68 131/326/68 130/327/68 109/328/68
f 111/273/69 128/329/69 131/326/69 127/274/69
f 128/330/70 115/299/70 129/292/70 131/291/70
f 134/331/71 136/332/71 135/333/71 114/334/71
f 116/335/72 133/336/72 136/332/72 134/331/72
f 133/337/73 112/338/73 132/296/73 136/295/73
f 137/339/74 138/340/74 140/341/74 139/342/74
f 82/231/75 84/230/75 140/343/75 138/344/75
f 83/225/76 81/228/76 137/345/76 139/346/76
f 84/216/12 83/215/12 139/347/12 140/348/12
f 112/349/17 111/350/17 147/351/17 148/352/17
f 109/353/17 110/354/17 146/355/17 145/356/17
f 76/357/17 75/358/17 143/359/17 144/360/17
f 73/361/17 74/362/17 142/363/17 141/364/17
f 148/352/17 147/351/17 159/365/17 160/366/17
f 144/360/17 143/359/17 155/367/17 156/368/17
f 145/356/17 146/355/17 158/369/17 157/370/17
f 141/364/17 142/363/17 154/371/17 153/372/17
f 161/373/77 162/374/77 166/375/77 164/376/77 163/276/77 165/275/77
f 112/278/78 111/277/78 163/377/78 164/378/78
f 109/289/79 110/288/79 162/379/79 161/380/79
f 110/297/80 132/296/80 166/381/80 162/382/80
f 132/296/81 112/338/81 164/383/81 166/381/81
f 127/274/82 109/328/82 161/373/82 165/275/82
f 167/384/83 168/385/83 172/386/83 170/387/83 169/388/83 171/389/83
f 99/390/84 73/391/84 167/384/84 171/389/84
f 74/392/85 104/185/85 172/188/85 168/393/85
f 76/190/86 75/189/86 169/394/86 170/395/86
f 73/201/87 74/200/87 168/396/87 167/397/87
f 75/398/88 99/390/88 171/389/88 169/388/88
l 132 152
l 104 150
l 127 151
l 99 149

826
models/torret2.obj Normal file

@ -0,0 +1,826 @@
# Blender v2.79 (sub 0) OBJ File: 'torret2.blend'
# www.blender.org
mtllib torret2.mtl
o Cube.003_Cube.006
v 0.189895 0.163143 -0.372653
v 0.189895 0.201097 -0.378580
v 0.080336 0.159674 -0.394870
v 0.080336 0.197628 -0.400796
v 0.242297 0.123751 -0.624923
v 0.242297 0.161705 -0.630850
v 0.132738 0.120282 -0.647140
v 0.132738 0.158236 -0.653066
v -0.132041 0.120282 -0.647140
v -0.241600 0.161705 -0.630850
v -0.241600 0.123751 -0.624923
v -0.079638 0.197628 -0.400796
v -0.079638 0.159674 -0.394870
v -0.189198 0.201097 -0.378580
v -0.189198 0.163143 -0.372653
v -0.132041 0.158236 -0.653066
v 0.063142 0.001380 0.512074
v 0.063142 0.035815 0.538953
v -0.064046 0.001380 0.512074
v -0.064046 0.035815 0.538953
v 0.063142 0.183763 0.278415
v 0.063142 0.218199 0.305294
v -0.064046 0.183763 0.278415
v -0.064046 0.218199 0.305294
v -0.286162 0.274292 0.122505
v -0.286162 0.815413 0.122505
v -0.347493 0.274292 0.122505
v -0.347493 0.815413 0.122505
v -0.286162 0.274292 -0.191426
v -0.286162 0.815413 -0.191426
v -0.347493 0.274292 -0.191426
v -0.347493 0.815413 -0.191426
v 0.128914 0.144853 0.197599
v 0.128914 0.944853 0.197599
v -0.133743 0.144853 0.197599
v -0.133743 0.944853 0.197599
v 0.128913 0.144853 -0.266520
v 0.128914 0.944853 -0.266520
v -0.133743 0.144853 -0.266520
v -0.133743 0.944853 -0.266520
v 0.339758 0.274292 0.122505
v 0.339758 0.815413 0.122505
v 0.278427 0.274292 0.122505
v 0.278427 0.815413 0.122505
v 0.339758 0.274292 -0.191426
v 0.339758 0.815413 -0.191426
v 0.278427 0.274292 -0.191426
v 0.278427 0.815413 -0.191426
v 0.282464 0.419685 0.016073
v 0.282464 0.670021 0.016073
v -0.287293 0.419685 0.016073
v -0.287293 0.670021 0.016073
v 0.282464 0.419685 -0.084994
v 0.282464 0.670021 -0.084994
v -0.287293 0.419685 -0.084994
v -0.287293 0.670021 -0.084994
v -0.058777 0.548149 -0.265845
v -0.058777 0.548149 -0.273879
v -0.043146 0.510413 -0.265845
v -0.043146 0.510413 -0.273879
v -0.005410 0.494783 -0.265845
v -0.005410 0.494783 -0.273879
v 0.032325 0.510413 -0.265845
v 0.032325 0.510413 -0.273879
v 0.047956 0.548149 -0.265845
v 0.047956 0.548149 -0.273879
v 0.032325 0.585884 -0.265845
v 0.032325 0.585884 -0.273879
v -0.005410 0.601515 -0.265845
v -0.005410 0.601515 -0.273879
v -0.043146 0.585884 -0.265845
v -0.043146 0.585884 -0.273879
v -0.000109 0.149264 -0.268848
v -0.000109 0.940441 -0.268848
v -0.004799 0.149264 -0.268848
v -0.004799 0.940441 -0.268848
v -0.000109 0.149264 -0.260088
v -0.000109 0.940441 -0.260088
v -0.004799 0.149264 -0.260088
v -0.004799 0.940441 -0.260088
v 0.119911 0.086846 -0.114011
v 0.111512 0.130445 -0.112341
v 0.038877 0.064643 -0.136101
v 0.030478 0.108242 -0.134431
v 0.209056 0.123944 -0.552177
v 0.200657 0.167543 -0.550507
v 0.128022 0.101741 -0.574268
v 0.138016 0.145340 -0.572597
v 0.048662 0.033870 0.495340
v 0.048662 0.022144 0.452483
v -0.053491 0.033870 0.495340
v -0.053491 0.022144 0.452483
v 0.048662 -0.476361 0.634943
v 0.048662 -0.488087 0.592086
v -0.053491 -0.476361 0.634943
v -0.053491 -0.488087 0.592086
v 0.209056 0.123944 -0.552177
v 0.128022 0.101741 -0.574268
v 0.219790 0.123944 -0.595985
v 0.211391 0.167543 -0.594315
v 0.157149 0.101741 -0.618075
v 0.148750 0.145340 -0.616405
v 0.312716 -0.500601 -0.680111
v 0.231681 -0.496988 -0.702201
v 0.323449 -0.500601 -0.723919
v 0.242415 -0.496988 -0.746009
v 0.080352 0.075744 -0.125056
v 0.094276 0.014385 -0.314219
v 0.169496 0.112843 -0.563222
v 0.175310 0.036588 -0.292129
v 0.135751 0.025487 -0.303174
v 0.071953 0.119343 -0.123386
v 0.085877 0.057984 -0.312549
v 0.161097 0.156442 -0.561552
v 0.166911 0.080187 -0.290458
v 0.127351 0.069086 -0.301503
v -0.124589 0.086846 -0.114011
v -0.116189 0.130445 -0.112341
v -0.043554 0.064643 -0.136101
v -0.035155 0.108242 -0.134431
v -0.213733 0.123944 -0.552177
v -0.205334 0.167543 -0.550507
v -0.132699 0.101741 -0.574268
v -0.124300 0.145340 -0.572597
v -0.213733 0.123944 -0.552177
v -0.132699 0.101741 -0.574268
v -0.224467 0.123944 -0.595985
v -0.216068 0.167543 -0.594315
v -0.143433 0.101741 -0.618075
v -0.135034 0.145340 -0.616405
v -0.317393 -0.500601 -0.680111
v -0.236359 -0.496988 -0.702201
v -0.328127 -0.500601 -0.723919
v -0.247093 -0.496988 -0.746009
v -0.085029 0.075744 -0.125056
v -0.098953 0.014385 -0.314219
v -0.174174 0.112843 -0.563222
v -0.179988 0.036588 -0.292129
v -0.140428 0.025487 -0.303174
v -0.076630 0.119343 -0.123386
v -0.090554 0.057984 -0.312549
v -0.165774 0.156442 -0.561552
v -0.171588 0.080187 -0.290458
v -0.132029 0.069086 -0.301504
v 0.048662 0.269229 0.190763
v 0.048662 0.257503 0.147906
v -0.053491 0.269229 0.190763
v -0.053491 0.257503 0.147906
v 0.119911 0.086846 -0.114011
v 0.111512 0.130445 -0.112341
v 0.038877 0.064643 -0.136101
v 0.030478 0.108242 -0.134431
v -0.124589 0.086846 -0.114011
v -0.116189 0.130445 -0.112341
v -0.043554 0.064643 -0.136101
v -0.035155 0.108242 -0.134431
v 0.080352 0.075744 -0.125056
v 0.071953 0.119343 -0.123386
v -0.085029 0.075744 -0.125056
v -0.076630 0.119343 -0.123386
v 0.119911 0.086846 -0.114011
v 0.111512 0.130445 -0.112341
v 0.038877 0.064643 -0.136101
v 0.030478 0.108242 -0.134431
v -0.124589 0.086846 -0.114011
v -0.116189 0.130445 -0.112341
v -0.043554 0.064643 -0.136101
v -0.035155 0.108242 -0.134431
v -0.124589 0.171454 -0.009180
v -0.116189 0.215053 -0.007510
v -0.043554 0.149251 -0.031270
v -0.035155 0.192850 -0.029600
v -0.085029 0.160352 -0.020225
v -0.076630 0.203951 -0.018555
v 0.119911 0.157397 -0.053308
v 0.111512 0.200996 -0.051637
v 0.038877 0.135194 -0.075398
v 0.030478 0.178793 -0.073728
v 0.080352 0.146295 -0.064353
v 0.071953 0.189894 -0.062682
vt 0.489132 0.748949
vt 0.489132 0.718137
vt 0.519717 0.718145
vt 0.519717 0.748957
vt 0.090171 0.693043
vt 0.090171 0.723854
vt 0.061402 0.723899
vt 0.061402 0.693087
vt 0.210985 0.718395
vt 0.210985 0.749207
vt 0.180404 0.749215
vt 0.180404 0.718403
vt 0.246514 0.722337
vt 0.246514 0.753149
vt 0.217065 0.753184
vt 0.217065 0.722372
vt 0.000000 0.693043
vt 0.030701 0.693043
vt 0.030701 0.723855
vt 0.000000 0.723855
vt 0.030701 0.693043
vt 0.061402 0.693043
vt 0.061402 0.723855
vt 0.030701 0.723855
vt 0.113868 0.693092
vt 0.144569 0.693034
vt 0.144569 0.729449
vt 0.113868 0.729507
vt 0.028567 0.723863
vt 0.028567 0.754674
vt 0.000000 0.754666
vt 0.000000 0.723855
vt 0.057131 0.723855
vt 0.057131 0.754666
vt 0.028567 0.754674
vt 0.028567 0.723863
vt 0.144569 0.693102
vt 0.175270 0.693034
vt 0.175270 0.728196
vt 0.144569 0.728264
vt 0.113868 0.693034
vt 0.113868 0.733059
vt 0.090234 0.749387
vt 0.090234 0.709362
vt 0.453595 0.706535
vt 0.429961 0.690207
vt 0.429961 0.730233
vt 0.453595 0.746561
vt 0.491495 0.718137
vt 0.489132 0.694236
vt 0.523439 0.692892
vt 0.525802 0.716793
vt 0.690895 0.620228
vt 0.683350 0.597128
vt 0.683350 0.421757
vt 0.690895 0.444858
vt 0.180404 0.543450
vt 0.182758 0.519548
vt 0.217065 0.520887
vt 0.214711 0.544789
vt 0.797976 0.023111
vt 0.805454 0.000000
vt 0.805454 0.175364
vt 0.797976 0.198475
vt 0.182758 0.717056
vt 0.217065 0.718395
vt 0.525802 0.519284
vt 0.491495 0.520628
vt 0.666799 0.889843
vt 0.653710 0.461156
vt 0.670262 0.460793
vt 0.683350 0.889480
vt 0.573487 0.421757
vt 0.573487 0.850735
vt 0.533024 0.888570
vt 0.533024 0.459592
vt 0.292521 0.928144
vt 0.305565 0.499455
vt 0.322117 0.499817
vt 0.309072 0.928506
vt 0.613599 0.850721
vt 0.613599 0.421757
vt 0.653710 0.459650
vt 0.653710 0.888614
vt 0.305565 0.967176
vt 0.322117 0.967538
vt 0.683350 0.421757
vt 0.666799 0.422120
vt 0.019350 0.693043
vt 0.000000 0.059266
vt 0.070884 0.057711
vt 0.090234 0.691487
vt 0.348156 0.690141
vt 0.348156 0.055936
vt 0.407978 0.000000
vt 0.407978 0.634205
vt 0.090234 0.633779
vt 0.109519 0.000000
vt 0.180404 0.001550
vt 0.161119 0.635328
vt 0.407978 0.634186
vt 0.407978 0.000000
vt 0.467279 0.056021
vt 0.467279 0.690207
vt 0.109519 0.691484
vt 0.180404 0.693034
vt 0.090234 0.000000
vt 0.019350 0.001555
vt 0.927182 0.678965
vt 0.914094 0.250278
vt 0.930645 0.249915
vt 0.943734 0.678602
vt 0.863881 0.210879
vt 0.863881 0.639856
vt 0.823417 0.677691
vt 0.823417 0.248714
vt 0.262925 0.928144
vt 0.275969 0.499455
vt 0.292521 0.499817
vt 0.279476 0.928506
vt 0.573487 0.850721
vt 0.573487 0.421757
vt 0.613599 0.459650
vt 0.613599 0.888614
vt 0.275969 0.967176
vt 0.292521 0.967538
vt 0.943734 0.210879
vt 0.927182 0.211242
vt 0.534758 0.210879
vt 0.533024 0.012472
vt 0.686823 0.012472
vt 0.688558 0.210879
vt 0.704336 0.000000
vt 0.704336 0.198456
vt 0.691310 0.210636
vt 0.691310 0.012181
vt 0.691294 0.223350
vt 0.689565 0.421757
vt 0.535765 0.421757
vt 0.537495 0.223350
vt 0.717250 0.012199
vt 0.717250 0.210649
vt 0.704336 0.198450
vt 0.704336 0.000000
vt 0.686823 0.210879
vt 0.533024 0.210879
vt 0.691310 0.000000
vt 0.537510 0.000000
vt 0.526837 0.561436
vt 0.525802 0.562405
vt 0.526922 0.532534
vt 0.527957 0.531566
vt 0.529626 0.520252
vt 0.530662 0.519284
vt 0.261228 0.519548
vt 0.262254 0.520518
vt 0.260242 0.532918
vt 0.259216 0.531948
vt 0.259409 0.562836
vt 0.258382 0.561866
vt 0.260242 0.592746
vt 0.259216 0.591777
vt 0.262254 0.605128
vt 0.261228 0.604158
vt 0.737396 0.137634
vt 0.745741 0.166619
vt 0.745741 0.196863
vt 0.737396 0.210649
vt 0.725595 0.199902
vt 0.717250 0.170917
vt 0.717250 0.140673
vt 0.725595 0.126887
vt 0.530662 0.603896
vt 0.529626 0.604865
vt 0.526922 0.592365
vt 0.527957 0.591397
vt 0.401848 0.734172
vt 0.393503 0.763157
vt 0.381702 0.773903
vt 0.373357 0.760116
vt 0.373357 0.729872
vt 0.381702 0.700888
vt 0.393503 0.690141
vt 0.401848 0.703928
vt 0.994427 0.211965
vt 0.996089 0.839044
vt 0.994823 0.839036
vt 0.993161 0.211957
vt 0.998881 0.838070
vt 0.998881 0.210879
vt 1.000000 0.211936
vt 1.000000 0.839128
vt 0.997751 0.210879
vt 0.997355 0.837960
vt 0.996089 0.837970
vt 0.996485 0.210889
vt 0.998881 0.210879
vt 0.998881 0.838089
vt 0.997751 0.839145
vt 0.997751 0.211935
vt 0.993557 0.210879
vt 0.994823 0.210887
vt 0.997751 0.839037
vt 0.996485 0.839048
vt 0.419228 0.746897
vt 0.407978 0.755091
vt 0.407978 0.706561
vt 0.419228 0.698367
vt 0.698133 0.347193
vt 0.699215 0.312870
vt 0.717830 0.331470
vt 0.749646 0.231355
vt 0.749881 0.265758
vt 0.716748 0.365793
vt 0.527891 0.514099
vt 0.526949 0.479752
vt 0.532082 0.484937
vt 0.533024 0.519284
vt 0.494398 0.414124
vt 0.474975 0.432859
vt 0.474033 0.398513
vt 0.493456 0.379778
vt 0.729140 0.108574
vt 0.729140 0.007234
vt 0.740514 0.000000
vt 0.740514 0.101340
vt 0.714070 0.736164
vt 0.691363 0.739897
vt 0.691363 0.728510
vt 0.714070 0.724777
vt 0.889098 0.635769
vt 0.894914 0.632147
vt 0.914094 0.858058
vt 0.908277 0.861681
vt 0.863881 0.436785
vt 0.869749 0.440407
vt 0.889098 0.861661
vt 0.883230 0.858039
vt 0.531090 0.632539
vt 0.525802 0.634527
vt 0.525802 0.606852
vt 0.531090 0.604865
vt 0.908277 0.214502
vt 0.914094 0.210879
vt 0.782198 0.435213
vt 0.789035 0.856782
vt 0.761467 0.857408
vt 0.754630 0.435839
vt 0.823417 0.211502
vt 0.816603 0.633071
vt 0.789035 0.632448
vt 0.795849 0.210879
vt 0.717250 0.014459
vt 0.717250 0.014459
vt 0.740514 0.000000
vt 0.974576 0.259453
vt 0.973975 0.225057
vt 0.992560 0.210879
vt 0.993161 0.245275
vt 0.753548 0.260468
vt 0.754630 0.719567
vt 0.749646 0.724777
vt 0.746721 0.223758
vt 0.742617 0.216089
vt 0.747601 0.210879
vt 0.754630 0.226145
vt 0.992000 0.730186
vt 0.969399 0.723737
vt 0.970561 0.718371
vt 0.993161 0.724820
vt 0.527891 0.000000
vt 0.533024 0.005185
vt 0.345667 0.978998
vt 0.334150 0.971992
vt 0.322117 0.965006
vt 0.323063 0.505903
vt 0.345667 0.499455
vt 0.061471 0.735801
vt 0.084178 0.739534
vt 0.084178 0.750921
vt 0.061471 0.747188
vt 0.061402 0.723899
vt 0.084109 0.727632
vt 0.717250 0.115799
vt 0.756487 0.007782
vt 0.751525 0.109002
vt 0.740514 0.101220
vt 0.745477 0.000000
vt 0.763052 0.015426
vt 0.763052 0.116800
vt 0.714001 0.748065
vt 0.691294 0.751799
vt 0.217065 0.543224
vt 0.229350 0.547359
vt 0.239504 0.600770
vt 0.227219 0.596635
vt 0.273697 0.117994
vt 0.274601 0.083610
vt 0.300568 0.103478
vt 0.341486 0.004919
vt 0.340582 0.039303
vt 0.299664 0.137862
vt 0.256530 0.514540
vt 0.255685 0.480181
vt 0.262080 0.485189
vt 0.262925 0.519548
vt 0.217130 0.415552
vt 0.192246 0.435023
vt 0.191402 0.400664
vt 0.216286 0.381193
vt 0.788994 0.009371
vt 0.788994 0.112674
vt 0.780519 0.121944
vt 0.780519 0.018640
vt 0.244691 0.719359
vt 0.229677 0.694175
vt 0.241808 0.691006
vt 0.256822 0.716189
vt 0.797976 0.103304
vt 0.797976 0.103304
vt 0.780519 0.121944
vt 0.947478 0.258507
vt 0.947551 0.224056
vt 0.969399 0.210879
vt 0.969325 0.245330
vt 0.347253 0.034384
vt 0.348156 0.494536
vt 0.341486 0.499455
vt 0.256822 0.663851
vt 0.256859 0.653076
vt 0.256822 0.642815
vt 0.262650 0.638760
vt 0.262651 0.659797
vt 0.348156 0.000000
vt 0.964146 0.731052
vt 0.943734 0.723818
vt 0.948987 0.718813
vt 0.969399 0.726048
vt 0.256530 0.000000
vt 0.262925 0.005008
vt 0.489132 1.000000
vt 0.478463 0.993392
vt 0.467279 0.986825
vt 0.468717 0.526520
vt 0.489132 0.519284
vt 0.246593 0.523683
vt 0.258382 0.527964
vt 0.241139 0.551640
vt 0.234309 0.519548
vt 0.797976 0.000000
vt 0.772039 0.112663
vt 0.772039 0.009368
vt 0.780519 0.018635
vt 0.780519 0.121930
vt 0.763052 0.103295
vt 0.763052 0.000000
vt 0.232080 0.722337
vt 0.217065 0.697153
vt 0.531090 0.664189
vt 0.525802 0.662201
vt 0.525802 0.634527
vt 0.531090 0.636514
vt 0.823417 0.857402
vt 0.795849 0.856779
vt 0.761467 0.211505
vt 0.789035 0.210879
vt 0.883230 0.210879
vt 0.889098 0.214501
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.251293 0.605051
vt 0.258382 0.638760
vt 0.246593 0.634479
vt 0.234309 0.630343
vt 0.262925 0.062943
vt 0.263829 0.028558
vt 0.181248 0.489979
vt 0.180404 0.455620
vt 0.244691 0.641929
vt 0.256822 0.638760
vt 0.232080 0.644908
vt 0.348156 0.724456
vt 0.350583 0.690141
vt 0.361712 0.697753
vt 0.373357 0.705372
vt 0.370930 0.739687
vt 0.359285 0.732067
vt 0.361712 0.780537
vt 0.350583 0.772925
vt 0.429961 0.738737
vt 0.429961 0.690207
vt 0.691294 0.298430
vt 0.692376 0.264107
vt 0.468221 0.481611
vt 0.467279 0.447264
vt 0.373357 0.788156
vn -0.2010 0.1511 0.9679
vn -0.9796 -0.0310 -0.1986
vn 0.2010 -0.1511 -0.9679
vn 0.9796 0.0310 0.1986
vn -0.0000 -0.9880 0.1543
vn -0.0000 0.9880 -0.1543
vn -0.9796 0.0310 0.1986
vn -0.2010 -0.1511 -0.9679
vn 0.2010 0.1511 0.9679
vn 0.9796 -0.0310 -0.1986
vn 0.0000 -0.6153 0.7883
vn -1.0000 -0.0000 0.0000
vn 0.0000 0.6153 -0.7883
vn 1.0000 0.0000 -0.0000
vn 0.0000 -0.7883 -0.6153
vn 0.0000 0.7883 0.6153
vn -0.0000 0.0000 1.0000
vn 0.0000 -0.0000 -1.0000
vn 0.0000 -1.0000 -0.0000
vn -0.0000 1.0000 0.0000
vn -0.9239 -0.3827 -0.0000
vn -0.3827 -0.9239 0.0000
vn 0.3827 -0.9239 -0.0000
vn 0.9239 -0.3827 -0.0000
vn 0.9239 0.3827 0.0000
vn 0.3827 0.9239 0.0000
vn -0.3827 0.9239 -0.0000
vn -0.9239 0.3827 0.0000
vn 0.0273 0.6520 -0.7577
vn -0.9793 -0.0575 -0.1940
vn 0.9562 0.1752 0.2343
vn 0.9614 0.1771 0.2106
vn 0.3279 -0.9076 -0.2623
vn -0.1732 0.9325 -0.3170
vn 0.0000 -0.9645 0.2639
vn -0.0000 0.2639 0.9645
vn 0.0000 -0.2639 -0.9645
vn 0.0000 0.7053 -0.7089
vn 0.3012 0.0944 -0.9489
vn -0.9088 -0.0550 -0.4135
vn -0.3003 0.9484 -0.1018
vn -0.9097 0.0325 -0.4139
vn -0.0418 -0.9991 -0.0102
vn 0.9652 0.1118 0.2365
vn -0.2303 -0.2363 0.9440
vn 0.2576 0.2358 -0.9370
vn 0.1732 -0.9325 0.3170
vn 0.1661 -0.9343 0.3153
vn 0.3146 -0.9114 -0.2653
vn -0.3279 0.9076 0.2623
vn -0.3872 0.8914 0.2355
vn -0.1661 0.9343 -0.3153
vn 0.0410 0.7775 -0.6275
vn -0.9614 0.1771 0.2106
vn 0.9562 -0.1752 -0.2343
vn 0.9614 -0.1771 -0.2106
vn 0.3279 0.9076 0.2623
vn -0.1732 -0.9325 0.3170
vn -0.0001 -0.7054 0.7089
vn 0.2407 -0.0834 0.9670
vn -0.9647 0.1165 0.2364
vn -0.2490 -0.9668 0.0583
vn -0.9562 0.1752 0.2343
vn -0.0418 0.9991 0.0102
vn 0.9652 -0.1118 -0.2365
vn -0.2303 0.2363 -0.9440
vn 0.2302 -0.2365 0.9440
vn 0.1732 0.9325 -0.3170
vn 0.1661 0.9343 -0.3153
vn 0.3146 0.9114 0.2653
vn -0.3279 -0.9076 -0.2623
vn -0.3146 -0.9114 -0.2653
vn -0.1661 -0.9343 0.3153
vn 0.0000 0.9645 -0.2639
vn 0.0000 -0.7913 -0.6115
vn -0.0000 0.7913 0.6115
vn -0.2407 0.0834 -0.9670
vn -0.9689 0.1926 -0.1555
vn 0.9689 -0.1926 0.1555
vn -0.0430 -0.7775 0.6275
vn -0.0410 -0.7775 0.6275
vn 0.0430 0.7775 -0.6275
vn -0.2407 -0.0834 0.9670
vn -0.0286 -0.6520 0.7577
vn 0.0286 0.6520 -0.7577
vn -0.9554 -0.1926 0.2239
vn 0.9554 0.1926 -0.2239
vn -0.0273 -0.6520 0.7577
usemtl Material.001
s off
f 1/1/1 2/2/1 4/3/1 3/4/1
f 3/5/2 4/6/2 8/7/2 7/8/2
f 7/9/3 8/10/3 6/11/3 5/12/3
f 5/13/4 6/14/4 2/15/4 1/16/4
f 3/17/5 7/18/5 5/19/5 1/20/5
f 8/21/6 4/22/6 2/23/6 6/24/6
f 13/25/7 12/26/7 16/27/7 9/28/7
f 15/29/8 14/30/8 12/31/8 13/32/8
f 9/33/9 16/34/9 10/35/9 11/36/9
f 11/37/10 10/38/10 14/39/10 15/40/10
f 13/41/6 9/42/6 11/43/6 15/44/6
f 16/45/6 10/46/6 14/47/6 12/48/6
f 17/49/11 18/50/11 20/51/11 19/52/11
f 19/53/12 20/54/12 24/55/12 23/56/12
f 23/57/13 24/58/13 22/59/13 21/60/13
f 21/61/14 22/62/14 18/63/14 17/64/14
f 19/65/15 23/57/15 21/60/15 17/66/15
f 24/67/16 20/51/16 18/50/16 22/68/16
f 25/69/17 26/70/17 28/71/17 27/72/17
f 27/73/12 28/74/12 32/75/12 31/76/12
f 31/77/18 32/78/18 30/79/18 29/80/18
f 29/81/14 30/82/14 26/83/14 25/84/14
f 27/85/19 31/77/19 29/80/19 25/86/19
f 32/87/20 28/71/20 26/70/20 30/88/20
f 33/89/17 34/90/17 36/91/17 35/92/17
f 35/93/12 36/94/12 40/95/12 39/96/12
f 39/97/18 40/98/18 38/99/18 37/100/18
f 37/101/14 38/102/14 34/103/14 33/104/14
f 35/105/19 39/97/19 37/100/19 33/106/19
f 40/107/20 36/91/20 34/90/20 38/108/20
f 41/109/17 42/110/17 44/111/17 43/112/17
f 43/113/12 44/114/12 48/115/12 47/116/12
f 47/117/18 48/118/18 46/119/18 45/120/18
f 45/121/14 46/122/14 42/123/14 41/124/14
f 43/125/19 47/117/19 45/120/19 41/126/19
f 48/127/20 44/111/20 42/110/20 46/128/20
f 49/129/17 50/130/17 52/131/17 51/132/17
f 51/133/12 52/134/12 56/135/12 55/136/12
f 55/137/18 56/138/18 54/139/18 53/140/18
f 53/141/14 54/142/14 50/143/14 49/144/14
f 51/145/19 55/137/19 53/140/19 49/146/19
f 56/147/20 52/131/20 50/130/20 54/148/20
f 57/149/21 58/150/21 60/151/21 59/152/21
f 59/152/22 60/151/22 62/153/22 61/154/22
f 61/155/23 62/156/23 64/157/23 63/158/23
f 63/158/24 64/157/24 66/159/24 65/160/24
f 65/160/25 66/159/25 68/161/25 67/162/25
f 67/162/26 68/161/26 70/163/26 69/164/26
f 60/165/18 58/166/18 72/167/18 70/168/18 68/169/18 66/170/18 64/171/18 62/172/18
f 69/173/27 70/174/27 72/175/27 71/176/27
f 71/176/28 72/175/28 58/150/28 57/149/28
f 57/177/17 59/178/17 61/179/17 63/180/17 65/181/17 67/182/17 69/183/17 71/184/17
f 73/185/17 74/186/17 76/187/17 75/188/17
f 75/189/14 76/190/14 80/191/14 79/192/14
f 79/193/18 80/194/18 78/195/18 77/196/18
f 77/197/12 78/198/12 74/199/12 73/200/12
f 75/188/20 79/201/20 77/202/20 73/185/20
f 80/194/19 76/203/19 74/204/19 78/195/19
f 112/205/29 84/206/29 178/207/29 180/208/29
f 83/209/30 84/210/30 113/211/30 88/212/30 87/213/30 108/214/30
f 86/215/31 85/216/31 99/217/31 100/218/31
f 85/216/32 86/215/32 115/219/32 82/220/32 81/221/32 110/222/32
f 111/223/33 109/224/33 85/225/33 110/226/33
f 116/227/34 112/228/34 82/229/34 115/230/34
f 89/231/14 90/232/14 146/233/14 145/234/14
f 91/235/12 92/236/12 96/237/12 95/238/12
f 95/239/35 96/240/35 94/241/35 93/242/35
f 93/243/14 94/244/14 90/232/14 89/231/14
f 91/245/36 95/246/36 93/247/36 89/248/36
f 96/249/37 92/250/37 90/251/37 94/252/37
f 85/225/38 109/224/38 87/253/38 98/254/38 97/255/38
f 101/256/39 102/257/39 100/258/39 99/259/39
f 87/213/40 101/260/40 106/261/40 104/262/40
f 88/212/41 114/263/41 86/264/41 100/265/41 102/266/41
f 87/213/42 88/212/42 102/266/42 101/260/42
f 103/267/43 104/268/43 106/269/43 105/270/43
f 99/217/44 85/216/44 103/271/44 105/272/44
f 85/273/45 109/274/45 87/275/45 104/276/45 103/277/45
f 101/256/46 99/259/46 105/270/46 106/269/46
f 107/278/47 111/279/47 110/280/47 81/281/47
f 83/282/48 108/283/48 111/279/48 107/278/48
f 108/284/49 87/253/49 109/224/49 111/223/49
f 114/285/50 116/286/50 115/287/50 86/288/50
f 88/289/51 113/290/51 116/286/51 114/285/51
f 113/291/52 84/292/52 112/228/52 116/227/52
f 119/293/53 135/294/53 173/295/53 171/296/53
f 119/297/54 120/298/54 141/299/54 124/300/54 123/301/54 136/302/54
f 122/303/55 121/304/55 127/305/55 128/306/55
f 121/304/56 122/303/56 143/307/56 118/308/56 117/309/56 138/310/56
f 139/311/57 137/312/57 121/313/57 138/314/57
f 144/315/58 140/316/58 118/317/58 143/318/58
f 121/313/59 137/312/59 123/319/59 126/320/59 125/321/59
f 129/322/60 130/323/60 128/324/60 127/325/60
f 123/301/61 129/326/61 134/327/61 132/328/61
f 124/329/62 142/330/62 122/331/62 128/332/62 130/333/62
f 123/301/63 124/300/63 130/334/63 129/326/63
f 131/335/64 132/336/64 134/337/64 133/338/64
f 127/305/65 121/304/65 131/339/65 133/340/65
f 121/341/66 137/342/66 123/343/66 132/344/66 131/345/66
f 129/322/67 127/325/67 133/338/67 134/337/67
f 135/294/68 139/346/68 138/347/68 117/348/68
f 119/293/69 136/349/69 139/346/69 135/294/69
f 136/350/70 123/319/70 137/312/70 139/311/70
f 142/351/71 144/352/71 143/353/71 122/354/71
f 124/355/72 141/356/72 144/352/72 142/351/72
f 141/357/73 120/358/73 140/316/73 144/315/73
f 145/359/74 146/360/74 148/361/74 147/362/74
f 90/251/75 92/250/75 148/363/75 146/364/75
f 91/245/76 89/248/76 145/365/76 147/366/76
f 92/236/12 91/235/12 147/367/12 148/368/12
f 120/369/17 119/370/17 155/371/17 156/372/17
f 117/373/17 118/374/17 154/375/17 153/376/17
f 84/377/17 83/378/17 151/379/17 152/380/17
f 81/381/17 82/382/17 150/383/17 149/384/17
f 156/372/17 155/371/17 167/385/17 168/386/17
f 152/380/17 151/379/17 163/387/17 164/388/17
f 153/376/17 154/375/17 166/389/17 165/390/17
f 149/384/17 150/383/17 162/391/17 161/392/17
f 169/393/77 170/394/77 174/395/77 172/396/77 171/296/77 173/295/77
f 120/298/78 119/297/78 171/397/78 172/398/78
f 117/309/79 118/308/79 170/399/79 169/400/79
f 118/317/80 140/316/80 174/401/80 170/402/80
f 140/316/81 120/358/81 172/403/81 174/401/81
f 135/294/82 117/348/82 169/393/82 173/295/82
f 175/404/83 176/405/83 180/406/83 178/407/83 177/408/83 179/409/83
f 107/410/84 81/411/84 175/404/84 179/409/84
f 82/412/85 112/205/85 180/208/85 176/413/85
f 84/210/86 83/209/86 177/414/86 178/415/86
f 81/221/87 82/220/87 176/416/87 175/417/87
f 83/418/88 107/410/88 179/409/88 177/408/88
l 140 160
l 112 158
l 135 159
l 107 157

603
other.lua Normal file

@ -0,0 +1,603 @@
local pgad_rules={{x = 1, y = 0, z = 0},{x =-1, y = 0, z = 0},{x = 0, y = 1, z = 0},{x = 0, y =-1, z = 0},{x = 0, y = 0, z = 1},{x = 0, y = 0, z =-1}}
minetest.register_node("portalgun:cplps1", {
description = "Close player portal",
tiles = {"portalgun_gray.png"},
groups = {mesecon=2,snappy = 3, not_in_creative_inventory=0},
sounds = default.node_sound_stone_defaults(),
is_ground_content = false,
mesecons = {effector = {
action_on = function (pos, node)
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 6)) do
if ob and ob:is_player() then
portal_delete(ob:get_player_name(),0)
end
end
minetest.swap_node(pos, {name="portalgun:cplps2"})
minetest.after((2), function(pos)
minetest.swap_node(pos, {name="portalgun:cplps1"})
end, pos)
return false
end,
}}
})
minetest.register_node("portalgun:cplps2", {
description = "Close player portal",
tiles = {"portalgun_gray.png^[colorize:#ffe85977"},
groups = {mesecon=2,snappy = 3, not_in_creative_inventory=1},
sounds = default.node_sound_stone_defaults(),
is_ground_content = false,
paramtype = "light",
light_source = 4,
})
minetest.register_node("portalgun:sign_v", {
description = "Sign V",
tiles = {"portalgun_v.png"},
inventory_image = "portalgun_v.png",
drop="portalgun:sign_x",
drawtype = "nodebox",
groups = {mesecon=2,snappy = 3, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(),
is_ground_content = false,
paramtype2 = "facedir",
paramtype = "light",
light_source = 5,
node_box = {
type="fixed",
fixed={-0.5,-0.5,0.45,0.5,0.5,0.5}},
mesecons = {effector = {
action_off = function (pos, node)
minetest.swap_node(pos, {name="portalgun:sign_x", param2=minetest.get_node(pos).param2})
end,
}}
})
minetest.register_node("portalgun:sign_x", {
description = "Sign X",
tiles = {"portalgun_x.png"},
inventory_image = "portalgun_x.png",
drawtype = "nodebox",
groups = {mesecon=2,snappy = 3, not_in_creative_inventory=0},
sounds = default.node_sound_wood_defaults(),
is_ground_content = false,
paramtype2 = "facedir",
paramtype = "light",
light_source = 3,
node_box = {
type="fixed",
fixed={-0.5,-0.5,0.45,0.5,0.5,0.5}},
mesecons = {effector = {
action_on = function (pos, node)
minetest.swap_node(pos, {name="portalgun:sign_v", param2=minetest.get_node(pos).param2})
end,
}}
})
local portaltarget_sig={
{1,"portalgun_blue.png"},
{2,"portalgun_orange.png"},
}
for ii = 1, #portaltarget_sig, 1 do
minetest.register_node("portalgun:portaltarget_" .. portaltarget_sig[ii][1], {
description = "Portal target " .. portaltarget_sig[ii][1] ,
tiles = {"portalgun_testblock.png^" .. portaltarget_sig[ii][2]},
groups = {mesecon = 2,cracky=2},
mesecons = {receptor = {state = "off"}},
sounds = default.node_sound_stone_defaults(),
is_ground_content = false,
paramtype2 = "facedir",
paramtype = "light",
on_timer = function (pos, elapsed)
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 2)) do
if ob:get_luaentity() and ob:get_luaentity().portalgun and ob:get_luaentity().project==portaltarget_sig[ii][1] then
mesecon.receptor_on(pos)
return true
end
end
mesecon.receptor_off(pos)
return true
end,
on_construct = function(pos)
if not mesecon then return false end
minetest.get_node_timer(pos):start(2)
end,
})
end
minetest.register_node("portalgun:button", {
description = "Button",
tiles = {"portalgun_bu.png"},
groups = {cracky = 3,mesecon=1},
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
selection_box = {type = "fixed",fixed = { -0.2, -0.5, -0.2, 0.2, 0.85, 0.2 }},
sounds = default.node_sound_defaults(),
mesecons = {receptor = {state = "off"}},
on_rightclick = function(pos, node, clicker)
mesecon.receptor_on(pos)
minetest.get_node_timer(pos):start(2)
minetest.sound_play("default_dig_dig_immediate", {pos=pos,max_hear_distance = 10, gain = 1})
end,
on_timer = function (pos, elapsed)
mesecon.receptor_off(pos)
end,
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.25, -0.5, -0.25, 0.25, 0.7, 0.25},
{-0.125, 0.5, -0.125, 0.125, 0.77, 0.125},
}}
})
minetest.register_node("portalgun:dmgblock_1", {
description = "Damage block (hurts when not active)",
tiles = {"portalgun_powerwall.png"},
groups = {cracky = 1,mesecon=2},
drawtype="glasslike",
paramtype="light",
alpha = 50,
sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(),
walkable=false,
damage_per_second = 5,
mesecons = {conductor = {
state = mesecon.state.off,
onstate = "portalgun:dmgblock_2",
rules = pgad_rules
}},
})
minetest.register_node("portalgun:dmgblock_2", {
description = "Damage block",
tiles = {"portalgun_gravity.png"},
groups = {mesecon=2,not_in_creative_inventory=1},
drawtype="airlike",
pointable=false,
sunlight_propagates = true,
drop="portalgun:dmgblock_1",
paramtype="light",
walkable=false,
mesecons = {conductor = {
state = mesecon.state.on,
offstate = "portalgun:dmgblock_1",
rules = pgad_rules
}},
})
minetest.register_on_respawnplayer(function(player)
local name=player:get_player_name()
minetest.after(1, function(name)
if portalgun.checkpoints[name]~=nil then
player:move_to(portalgun.checkpoints[name])
end
end, name)
end)
minetest.register_on_leaveplayer(function(player)
local name=player:get_player_name()
if portalgun.checkpoints[name]~=nil then
portalgun.checkpoints[name]=nil
end
end)
minetest.register_node("portalgun:autocheckpoint", {
description = "Checkpoint (teleports to here on death)",
tiles = {"portalgun_checkpoint.png"},
groups = {cracky = 3,not_in_creative_inventory=0},
paramtype = "light",
sunlight_propagates = true,
light_source = 5,
sounds = default.node_sound_stone_defaults(),
drawtype="nodebox",
node_box = {
type="fixed",
fixed={-0.5,-0.5,-0.5,0.5,-0.4,0.5}},
on_construct = function(pos)
minetest.get_meta(pos):set_string("infotext","Checkpoint")
minetest.get_node_timer(pos):start(2)
end,
on_timer = function (pos, elapsed)
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 1.5)) do
if ob:is_player() then
local name=ob:get_player_name()
if portalgun.checkpoints[name]~=nil then
local cp=portalgun.checkpoints[name]
if cp.x==pos.x and cp.y==pos.y and cp.z==pos.z then
return true
end
end
portal_delete(name,0)
portalgun_portal[name]=nil
portalgun.checkpoints[name]=pos
minetest.sound_play("portalgun_checkpoint", {pos=pos,max_hear_distance = 5, gain = 1})
minetest.chat_send_player(name, "<Portalgun> You will spawn here next time you die")
end
end
return true
end,
})
minetest.register_node("portalgun:powerdoor1_1", {
description = "Power door",
inventory_image = "portalgun_powerwall.png",
wield_image = "portalgun_powerwall.png",
groups = {mesecon=1,unbreakable = 1,not_in_creative_inventory=0},
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(),
drawtype="nodebox",
alpha = 160,
node_box = {
type="fixed",
fixed={-0.5,-0.5,0.4,0.5,0.5,0.5}},
tiles = {
{
name = "portalgun_powerwall1.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.2,
},
},
},
after_place_node = function(pos, placer, itemstack)
local name=placer:get_player_name()
minetest.get_meta(pos):set_string("owner",name)
local p2=minetest.get_node(pos)
pos.y=pos.y+1
local n=minetest.get_node(pos)
if n.name=="air" then
minetest.set_node(pos,{name="portalgun:powerdoor1_2",param2=p2.param2})
minetest.get_meta(pos):set_string("owner",name)
end
end,
on_punch = function(pos, node, player, pointed_thing)
local meta = minetest.get_meta(pos);
if meta:get_string("owner")==player:get_player_name() then
minetest.node_dig(pos,minetest.get_node(pos),player)
pos.y=pos.y+1
local un=minetest.get_node(pos).name
if un=="portalgun:powerdoor1_2" then
minetest.set_node(pos,{name="air"})
end
pos.y=pos.y-1
return true
end
end,
mesecons = {conductor = {
state = mesecon.state.off,
onstate = "portalgun:powerdoor2_1",
rules = pgad_rules
}},
})
minetest.register_node("portalgun:powerdoor1_2", {
description = "Power door",
inventory_image = "portalgun_powerwall.png",
groups = {mesecon=1,unbreakable = 1,not_in_creative_inventory=1},
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(),
drawtype="nodebox",
alpha = 160,
node_box = {
type="fixed",
fixed={-0.5,-0.5,0.4,0.5,0.5,0.5}},
tiles = {
{
name = "portalgun_powerwall1.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.2,
},
},
},
on_punch = function(pos, node, player, pointed_thing)
local meta = minetest.get_meta(pos);
if meta:get_string("owner")==player:get_player_name() then
minetest.set_node(pos,{name="air"})
pos.y=pos.y-1
local un=minetest.get_node(pos).name
if un=="portalgun:powerdoor1_1" then
minetest.node_dig(pos,minetest.get_node(pos),player)
end
pos.y=pos.y+1
return true
end
end,
mesecons = {conductor = {
state = mesecon.state.off,
onstate = "portalgun:powerdoor2_2",
rules = pgad_rules
}},
})
minetest.register_node("portalgun:powerdoor2_1", {
description = "Power door",
inventory_image = "portalgun_powerwall.png",
groups = {unbreakable=1,mesecon=1,not_in_creative_inventory=1},
paramtype = "light",
sunlight_propagates = true,
drawtype="airlike",
walkable = false,
pointable = false,
diggable = false,
mesecons = {conductor = {
state = mesecon.state.on,
offstate = "portalgun:powerdoor1_1",
rules = pgad_rules
}},
})
minetest.register_node("portalgun:powerdoor2_2", {
description = "Power door",
inventory_image = "portalgun_powerwall.png",
groups = {unbreakable=1,mesecon=1,not_in_creative_inventory=1},
paramtype = "light",
sunlight_propagates = true,
drawtype="airlike",
walkable = false,
pointable = false,
diggable = false,
mesecons = {conductor = {
state = mesecon.state.on,
offstate = "portalgun:powerdoor1_2",
rules = pgad_rules
}},
})
minetest.register_node("portalgun:delayer", {
description = "Delayer (Punsh to change time)",
tiles = {"portalgun_delayer.png","portalgun_testblock.png"},
groups = {dig_immediate = 2,mesecon=1},
sounds = default.node_sound_stone_defaults(),
paramtype = "light",
sunlight_propagates = true,
drawtype="nodebox",
node_box = {
type="fixed",
fixed={-0.5,-0.5,-0.5,0.5,-0.4,0.5}},
on_punch = function(pos, node, player, pointed_thing)
if minetest.is_protected(pos, player:get_player_name())==false then
local meta = minetest.get_meta(pos)
local time=meta:get_int("time")
if time>=10 then time=0 end
meta:set_int("time",time+1)
meta:set_string("infotext","Delayer (" .. (time+1) ..")")
end
end,
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_int("time",1)
meta:set_string("infotext","Delayer (1)")
meta:set_int("case",0)
end,
on_timer = function (pos, elapsed)
local meta = minetest.get_meta(pos)
if meta:get_int("case")==2 then
meta:set_int("case",0)
mesecon.receptor_off(pos)
end
if meta:get_int("case")==1 then
meta:set_int("case",2)
mesecon.receptor_on(pos)
minetest.get_node_timer(pos):start(meta:get_int("time"))
end
return false
end,
mesecons = {effector = {
action_on = function (pos, node)
local meta = minetest.get_meta(pos)
if meta:get_int("case")==0 then
meta:set_int("case",1)
minetest.get_node_timer(pos):start(meta:get_int("time"))
end
end,
}}
})
minetest.register_node("portalgun:testblocks", {
description = "Trapblock",
tiles = {"portalgun_testblock.png"},
groups = {cracky = 1,mesecon=2},
sounds = default.node_sound_stone_defaults(),
mesecons = {conductor = {
state = mesecon.state.off,
onstate = "portalgun:testblocks2",
rules = pgad_rules
}},
})
minetest.register_node("portalgun:testblocks2", {
description = "Damage block",
tiles = {"portalgun_gravity.png"},
groups = {mesecon=2,not_in_creative_inventory=1},
drawtype="airlike",
pointable=false,
sunlight_propagates = true,
drop="portalgun:testblocks",
paramtype="light",
walkable=false,
mesecons = {conductor = {
state = mesecon.state.on,
offstate = "portalgun:testblocks",
rules = pgad_rules
}},
})
minetest.register_node("portalgun:door_1", {
description = "Mesecon Door",
drop="portalgun:door_1",
drawtype = "nodebox",
paramtype = "light",
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.125, 0.5, 0.5, 0.125},
}
},
tiles = {"portalgun_testblock.png"},
groups = {mesecon=1,cracky = 1, level = 2, not_in_creative_inventory=0},
sounds = default.node_sound_stone_defaults(),
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
after_place_node = function(pos, placer, itemstack, pointed_thing)
local p={x=pos.x,y=pos.y+1,z=pos.z}
if minetest.registered_nodes[minetest.get_node(p).name].walkable then
return false
else
minetest.set_node(p, {name = "portalgun:door_2",param2=minetest.get_node(pos).param2})
end
end,
mesecons = {effector = {
action_on = function (pos, node)
local p={x=pos.x,y=pos.y+1,z=pos.z}
minetest.swap_node(p, {name="portalgun:door_open_2", param2=minetest.get_node(pos).param2})
minetest.swap_node(pos, {name="portalgun:door_open_1", param2=minetest.get_node(pos).param2})
minetest.sound_play("portalgun_door", {pos=pos, gain = 1, max_hear_distance = 5})
end,
}},
after_dig_node = function (pos, name, digger)
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name = "air"})
end,
})
minetest.register_node("portalgun:door_2", {
description = "Door 2-1",
drawtype = "nodebox",
drop="portalgun:door_1",
paramtype = "light",
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.125, 0.5, 0.5, 0.125},
}
},
tiles = {"portalgun_testblock.png"},
groups = {mesecon=1,cracky = 1, level = 2, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(),
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
mesecons = {effector = {
action_on = function (pos, node)
local p={x=pos.x,y=pos.y-1,z=pos.z}
minetest.swap_node(p, {name="portalgun:door_open_1", param2=minetest.get_node(pos).param2})
minetest.swap_node(pos, {name="portalgun:door_open_2", param2=minetest.get_node(pos).param2})
minetest.sound_play("portalgun_door", {pos=pos, gain = 1, max_hear_distance = 5})
end,
}},
after_dig_node = function (pos, name, digger)
minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z}, {name = "air"})
end,
})
minetest.register_node("portalgun:door_open_1", {
description = "Door (open) 2-o-1",
drop="portalgun:door_1",
drawtype = "nodebox",
paramtype = "light",
node_box = {
type = "fixed",
fixed = {
{0.41, -0.5, -0.124, 1.41, 0.5, 0.125},
}
},
tiles = {"portalgun_testblock.png"},
groups = {mesecon=1,cracky = 1, level = 2, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(),
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
after_dig_node = function (pos, name, digger)
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name = "air"})
end,
mesecons = {effector = {
action_off = function (pos, node)
local p={x=pos.x,y=pos.y+1,z=pos.z}
minetest.sound_play("portalgun_door", {pos=pos, gain = 1, max_hear_distance = 5})
minetest.swap_node(p, {name="portalgun:door_2", param2=minetest.get_node(pos).param2})
minetest.swap_node(pos, {name="portalgun:door_1", param2=minetest.get_node(pos).param2})
end,
}}
})
minetest.register_node("portalgun:door_open_2", {
description = "Door (open) 2-o-1",
drawtype = "nodebox",
drop="portalgun:door_1",
paramtype = "light",
node_box = {
type = "fixed",
fixed = {
{0.41, -0.5, -0.124, 1.41, 0.5, 0.125},
}
},
tiles = {"portalgun_testblock.png"},
groups = {mesecon=1,cracky = 1, level = 2, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(),
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
after_dig_node = function (pos, name, digger)
minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z}, {name = "air"})
end,
mesecons = {effector = {
action_off = function (pos, node)
local p={x=pos.x,y=pos.y-1,z=pos.z}
minetest.sound_play("portalgun_door", {pos=pos, gain = 1, max_hear_distance = 5})
minetest.swap_node(p, {name="portalgun:door_1", param2=minetest.get_node(pos).param2})
minetest.swap_node(pos, {name="portalgun:door_2", param2=minetest.get_node(pos).param2})
end,
}}
})

137
powerball.lua Normal file

@ -0,0 +1,137 @@
minetest.register_node("portalgun:powerballspawner", {
description = "Power ball spawner" ,
tiles = {"default_steel_block.png","default_steel_block.png","default_steel_block.png","default_steel_block.png","default_steel_block.png","portalgun_powerballspawner.png"},
groups = {cracky=2},
sounds = default.node_sound_glass_defaults(),
is_ground_content = false,
paramtype2 = "facedir",
on_place = minetest.rotate_node,
on_construct = function(pos)
minetest.get_node_timer(pos):start(10)
end,
on_timer = function (pos, elapsed)
local dir=minetest.get_node(pos).param2
local v={x=0, y=0, z=0}
if dir==0 then v.z=-1
elseif dir==1 then v.x=-1
elseif dir==2 then v.z=1
elseif dir==3 then v.x=1
elseif dir==8 then v.y=-1
elseif dir==4 then v.y=1
end
local pv={x=pos.x+v.x, y=pos.y+v.y, z=pos.z+v.z}
portalgun.new=1
local m=minetest.add_entity(pv, "portalgun:powerball")
m:set_velocity({x=v.x*4, y=v.y*4, z=v.z*4})
return true
end,
})
minetest.register_node("portalgun:powerballspawner2", {
description = "Power ball spawner (spawn on activate)" ,
tiles = {"default_steel_block.png","default_steel_block.png","default_steel_block.png","default_steel_block.png","default_steel_block.png","portalgun_powerballspawner.png^[colorize:#aaaa0055"},
groups = {cracky=2,mesecon=1},
sounds = default.node_sound_glass_defaults(),
is_ground_content = false,
paramtype2 = "facedir",
on_place = minetest.rotate_node,
mesecons = {effector = {
action_on = function (pos, node)
local dir=minetest.get_node(pos).param2
local v={x=0, y=0, z=0}
if dir==0 then v.z=-1
elseif dir==1 then v.x=-1
elseif dir==2 then v.z=1
elseif dir==3 then v.x=1
elseif dir==8 then v.y=-1
elseif dir==4 then v.y=1
end
local pv={x=pos.x+v.x, y=pos.y+v.y, z=pos.z+v.z}
portalgun.new=1
local m=minetest.add_entity(pv, "portalgun:powerball")
m:set_velocity({x=v.x*4, y=v.y*4, z=v.z*4})
end
}}
})
minetest.register_entity("portalgun:powerball",{
hp_max = 1000,
physical = true,
weight = 0,
collisionbox = {-0.4,-0.4,-0.4, 0.4,0.4,0.4},
visual = "sprite",
visual_size = {x=1.1, y=1.1},
textures = {"portalgun_powrball.png"},
initial_sprite_basepos = {x=0, y=0},
is_visible = true,
makes_footstep_sound = false,
automatic_rotate = false,
portalgun=2,
powerball=1,
on_activate= function(self, staticdata)
if portalgun.new==0 then
self.object:remove()
return self
end
portalgun.new=0
local pos=self.object:get_pos()
self.sound=minetest.sound_play("portalgun_powerball", {pos=pos,max_hear_distance = 10, gain = 0.5})
minetest.sound_play("portalgun_powerballbonce", {pos=pos,max_hear_distance = 10, gain = 1})
end,
on_step= function(self, dtime)
self.timer=self.timer+dtime
if self.timer<0.2 then return self end
self.timer=0
local pos=self.object:get_pos()
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 2)) do
if ob:is_player() or (ob:get_luaentity() and ob:get_luaentity().portalgun~=1 and ob:get_luaentity().wsc==nil and ob:get_luaentity().powerball~=1) then
ob:set_hp(0)
ob:punch(ob, {full_punch_interval=1.0,damage_groups={fleshy=9000}}, "default:bronze_pick", nil)
end
end
self.timer2=self.timer2+1
self.timer3=self.timer3+1
if self.timer3>=9 then
self.timer3=0
minetest.sound_stop(self.sound)
self.sound=minetest.sound_play("portalgun_powerball", {pos=pos,max_hear_distance = 10, gain = 0.5})
end
if self.timer2>40 then
minetest.sound_stop(self.sound)
self.object:set_hp(0)
self.object:punch(self.object, {full_punch_interval=1.0,damage_groups={fleshy=9000}}, "default:bronze_pick", nil)
return self
end
local v=self.object:get_velocity()
local nextn={x=pos.x+(v.x)/3, y=pos.y+(v.y)/3, z=pos.z+(v.z)/3}
local nname=minetest.get_node(nextn).name
if minetest.registered_nodes[nname].walkable then
if nname=="portalgun:powerballtarget" and mesecon then
mesecon.receptor_on(nextn)
minetest.get_node_timer(nextn):start(5)
end
self.object:set_velocity({x=v.x*-1, y=v.y*-1, z=v.z*-1})
minetest.sound_play("portalgun_powerballbonce", {pos=pos,max_hear_distance = 10, gain = 1})
end
end,
timer=0,
timer2=0,
timer3=0,
sound={}
})
minetest.register_node("portalgun:powerballtarget", {
description = "Power ball target" ,
tiles = {"portalgun_powerballstarget.png"},
groups = {mesecon = 2,cracky=2},
mesecons = {receptor = {state = "off"}},
sounds = default.node_sound_stone_defaults(),
is_ground_content = false,
on_timer = function (pos, elapsed)
mesecon.receptor_off(pos)
return false
end,
})

BIN
screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
sounds/portalgun_door.ogg Normal file

Binary file not shown.

BIN
sounds/portalgun_error.ogg Normal file

Binary file not shown.

BIN
sounds/portalgun_mode.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

549
stuff.lua Normal file

@ -0,0 +1,549 @@
local snuma=1
for ii = 0, 9, 1 do
if ii==1 then snuma=0 end
minetest.register_node("portalgun:sign_numa".. ii, {
description = "Sign number (" .. ii ..")",
tiles = {"portalgun_snum" .. ii ..".png"},
drop="portalgun:sign_numa1",
drawtype = "nodebox",
groups = {mesecon=2,portalnuma=1,dig_immediate = 3, not_in_creative_inventory=snuma},
sounds = default.node_sound_wood_defaults(),
is_ground_content = false,
paramtype2 = "facedir",
paramtype = "light",
light_source = 3,
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, 0.4375, 0, 0.5, 0.5},
}
},
after_place_node = function(pos, placer, itemstack)
local param2=minetest.get_node(pos).param2
local pos2=portalgun_param2(pos,param2)
if minetest.get_node(pos2) and minetest.get_node(pos2).name=="air" then
minetest.set_node(pos2,{name="portalgun:sign_numb1",param2=param2})
minetest.swap_node(pos, {name="portalgun:sign_numa0", param2=minetest.get_node(pos).param2})
end
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
if not minetest.is_protected(pos,clicker:get_player_name()) then
local iin=ii+1
if iin==10 then iin=0 end
minetest.swap_node(pos, {name="portalgun:sign_numa".. iin, param2=minetest.get_node(pos).param2})
end
end,
on_punch = function(pos, node, player, pointed_thing)
local param2=minetest.get_node(pos).param2
local pos2=portalgun_param2(pos,param2)
local node=minetest.get_node(pos2)
if node and minetest.get_node_group(node.name, "portalnumb")>0 then
minetest.set_node(pos2, {name = "air"})
end
end,
})
if snuma==0 then snuma=1 end
minetest.register_node("portalgun:sign_numb".. ii, {
description = "Sign number",
tiles = {"portalgun_snum" .. ii ..".png"},
drop="portalgun:sign_numa1",
drawtype = "nodebox",
groups = {mesecon=2,portalnumb=1,dig_immediate = 3, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(),
is_ground_content = false,
paramtype2 = "facedir",
paramtype = "light",
light_source = 3,
node_box = {
type = "fixed",
fixed = {
{-1, -0.5, 0.4375, -0.5, 0.5, 0.5},
}
},
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
if not minetest.is_protected(pos,clicker:get_player_name()) then
local iin=ii+1
if iin==10 then iin=0 end
minetest.swap_node(pos, {name="portalgun:sign_numb".. iin, param2=minetest.get_node(pos).param2})
end
end,
on_punch = function(pos, node, player, pointed_thing)
local param2=minetest.get_node(pos).param2
local pos2=portalgun_param2(pos,param2,true)
local node=minetest.get_node(pos2)
if node and minetest.get_node_group(node.name, "portalnuma")>0 then
minetest.set_node(pos2, {name = "air"})
end
end,
})
end
minetest.register_node("portalgun:turretgun2", {
description = "Sentry turret",
groups = {cracky=3,not_in_creative_inventory=1},
drop="portalgun:turretgun",
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
sounds = default.node_sound_defaults(),
tiles = {"portalgun_sentry_turret.png"},
drawtype = "mesh",
mesh="torret2.obj",
selection_box = {
type = "fixed",
fixed = {
{-0.3, -0.5, -0.3, 0.3, 1,0.3},
}
},
on_timer=function(pos, elapsed)
local p=minetest.get_node(pos).param2
local pos1={x=pos.x,y=pos.y+0.5,z=pos.z}
local d
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 10)) do
if portalgun_visiable(pos1,ob) and (ob:is_player() or (ob:get_luaentity() and (ob:get_luaentity().type or ob:get_luaentity().portalgun==nil))) then
local a=ob:get_pos()
if a.y<pos.y+2 and a.y>pos.y-1 then
a={x=math.floor(a.x),y=math.floor(a.y),z=math.floor(a.z)}
if p==3 and a.x>pos.x and a.z==pos.z then
d={x=20,y=0,z=0}
break
elseif p==1 and a.x<pos.x and a.z==pos.z then
d={x=-20,y=0,z=0}
break
elseif p==2 and a.z>pos.z and a.x==pos.x then
d={x=0,y=0,z=20}
break
elseif p==0 and a.z<pos.z and a.x==pos.x then
d={x=0,y=0,z=-20}
break
end
end
end
end
local m=minetest.get_meta(pos)
if d then
m:set_int("stop",0)
minetest.add_entity(pos1, "portalgun:bullet1"):set_velocity(d)
minetest.sound_play("portalgun_bullet1", {pos=pos, gain = 1, max_hear_distance = 15})
for i=2,5,1 do
minetest.after(i*0.1, function(pos,d)
minetest.add_entity(pos1, "portalgun:bullet1"):set_velocity(d)
minetest.sound_play("portalgun_bullet1", {pos=pos, gain = 1, max_hear_distance = 15})
end, pos,d)
end
else
if m:get_int("stop")==1 then
minetest.set_node(pos,{name="portalgun:turretgun",param2=p})
minetest.get_node_timer(pos):start(0.2)
else
m:set_int("stop",1)
end
end
return true
end
})
minetest.register_node("portalgun:turretgun", {
description = "Sentry turret",
groups = {cracky=3},
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
sounds = default.node_sound_defaults(),
tiles = {"portalgun_sentry_turret.png"},
drawtype = "mesh",
mesh="torret1.obj",
selection_box = {
type = "fixed",
fixed = {
{-0.3, -0.5, -0.3, 0.3, 1,0.3},
}
},
on_construct = function(pos)
minetest.get_node_timer(pos):start(0.2)
end,
on_timer=function(pos, elapsed)
local p=minetest.get_node(pos).param2
local pos1={x=pos.x,y=pos.y+0.5,z=pos.z}
local d
for i, ob in pairs(minetest.get_objects_inside_radius(pos1, 10)) do
if portalgun_visiable(pos1,ob) and (ob:is_player() or (ob:get_luaentity() and (ob:get_luaentity().type or ob:get_luaentity().portalgun==nil))) then
local a=ob:get_pos()
if a.y<pos.y+2 and a.y>pos.y-1 then
a={x=math.floor(a.x),y=math.floor(a.y),z=math.floor(a.z)}
if p==3 and a.x>pos.x and a.z==pos.z then
d={x=20,y=0,z=0}
break
elseif p==1 and a.x<pos.x and a.z==pos.z then
d={x=-20,y=0,z=0}
break
elseif p==2 and a.z>pos.z and a.x==pos.x then
d={x=0,y=0,z=20}
break
elseif p==0 and a.z<pos.z and a.x==pos.x then
d={x=0,y=0,z=-20}
break
end
end
end
end
if d then
minetest.add_entity(pos1, "portalgun:bullet1"):set_velocity(d)
minetest.set_node(pos,{name="portalgun:turretgun2",param2=p})
minetest.get_node_timer(pos):start(1)
minetest.sound_play("portalgun_bullet1", {pos=pos, gain = 1, max_hear_distance = 15})
for i=2,5,1 do
minetest.after(i*0.1, function(pos,d)
minetest.add_entity(pos1, "portalgun:bullet1"):set_velocity(d)
minetest.sound_play("portalgun_bullet1", {pos=pos, gain = 1, max_hear_distance = 15})
end, pos,d)
end
end
return true
end
})
minetest.register_node("portalgun:warntape", {
description = "Warntape",
groups = {dig_immediate = 3,not_in_creative_inventory=0},
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
sounds = default.node_sound_defaults(),
tiles = {"portalgun_warntape.png",},
walkable = false,
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, 0.3125, 0.5, -0.4375, 0.5},
}
}
})
minetest.register_node("portalgun:toxwater_1", {
description = "Toxic water",
drawtype = "liquid",
tiles = {"portalgun_toxwat.png"},
post_effect_color = {a = 200, r = 119, g = 70, b = 16},
alpha = 190,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
damage_per_second = 20,
liquidtype = "source",
liquid_alternative_flowing = "portalgun:toxwater_2",
liquid_alternative_source = "portalgun:toxwater_1",
liquid_viscosity = 2,
liquid_renewable = false,
liquid_range = 3,
post_effect_color = {a = 200, r = 119, g = 70, b = 16},
groups = {water = 3, liquid = 3},
sounds = default.node_sound_water_defaults(),
})
minetest.register_node("portalgun:toxwater_2", {
description = "Toxic water 2",
drawtype = "flowingliquid",
tiles = {"portalgun_toxwat.png"},
tiles = {name = "portalgun_toxwat.png",backface_culling=false},
special_tiles = {{name = "portalgun_toxwat.png",backface_culling=true},{name = "portalgun_toxwat.png",backface_culling=false}},
alpha = 190,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
damage_per_second = 4,
liquidtype = "flowing",
liquid_alternative_flowing = "portalgun:toxwater_2",
liquid_alternative_source = "portalgun:toxwater_1",
liquid_viscosity = 2,
liquid_renewable = false,
liquid_range = 3,
post_effect_color = {a = 200, r = 119, g = 70, b = 16},
groups = {water = 3, liquid = 3, not_in_creative_inventory = 1},
sounds = default.node_sound_water_defaults(),
})
minetest.register_tool("portalgun:ed", {
description = "Entity Destroyer",
inventory_image = "portalgun_edestroyer.png",
range = 15,
on_use = function(itemstack, user, pointed_thing)
local pos=user:get_pos()
if pointed_thing.type=="node" then
pos=pointed_thing.above
end
if pointed_thing.type=="object" then
pos=pointed_thing.ref:get_pos()
end
local name=user:get_player_name()
if minetest.check_player_privs(name, {kick=true})==false then
minetest.chat_send_player(name, "You need the kick privilege to use this tool!")
return itemstack
end
for ii, ob in pairs(minetest.get_objects_inside_radius(pos, 7)) do
if ob:get_luaentity() then
ob:set_hp(0)
ob:punch(ob, {full_punch_interval=1.0,damage_groups={fleshy=9000}}, "default:bronze_pick", nil)
end
end
return itemstack
end
})
minetest.register_node("portalgun:cake", {
description = "Cake",
groups = {dig_immediate = 3,not_in_creative_inventory=0},
paramtype = "light",
sunlight_propagates = true,
selection_box = {type = "fixed",fixed = { -0.3, -0.5, -0.3, 0.3, 0, 0.3 }},
sounds = default.node_sound_defaults(),
tiles = {
"default_dirt.png^portalgun_cake1.png",
"default_dirt.png^portalgun_cake2.png",
},
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.3125, -0.5, 0.375, 0.3125, -0.125, 0.4375},
{-0.3125, -0.5, -0.4375, 0.3125, -0.125, -0.375},
{-0.4375, -0.5, -0.3125, -0.375, -0.125, 0.3125},
{0.375, -0.5, -0.3125, 0.4375, -0.125, 0.3125},
{-0.375, -0.5, -0.375, 0.375, -0.125, 0.375},
{-0.25, -0.5, 0.4375, 0.25, -0.125, 0.5},
{-0.25, -0.5, -0.5, 0.25, -0.125, -0.4375},
{0.4375, -0.5, -0.25, 0.5, -0.125, 0.25},
{-0.5, -0.5, -0.25, -0.4375, -0.125, 0.25},
{0, -0.125, -0.0625, 0.0625, 0.1875, 0},
}
}
})
minetest.register_node("portalgun:testblock", {
description = "Test block",
tiles = {"portalgun_testblock.png"},
groups = {cracky = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("portalgun:apb", {
description = "Anti portal block",
tiles = {"portalgun_testblock.png^[colorize:#ffffffaa"},
groups = {cracky = 3,antiportal=1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("portalgun:apg", {
description = "Anti portal glass",
drawtype="glasslike",
paramtype="light",
sunlight_propagates = true,
tiles = {"default_glass.png^[colorize:#ffffffaa"},
groups = {cracky = 1,antiportal=1},
sounds = default.node_sound_glass_defaults(),
})
minetest.register_node("portalgun:hard_glass", {
description = "Hard glass",
drawtype="glasslike",
paramtype="light",
sunlight_propagates = true,
tiles = {"default_glass.png^[colorize:#ddddddaa"},
groups = {cracky = 1},
sounds = default.node_sound_glass_defaults(),
})
function portalgun_visiable(pos,ob)
if ob==nil or ob:get_pos()==nil or ob:get_pos().y==nil then return false end
local ta=ob:get_pos()
local v = {x = pos.x - ta.x, y = pos.y - ta.y-1, z = pos.z - ta.z}
v.y=v.y-1
local amount = (v.x ^ 2 + v.y ^ 2 + v.z ^ 2) ^ 0.5
local d=math.sqrt((pos.x-ta.x)*(pos.x-ta.x) + (pos.y-ta.y)*(pos.y-ta.y)+(pos.z-ta.z)*(pos.z-ta.z))
v.x = (v.x / amount)*-1
v.y = (v.y / amount)*-1
v.z = (v.z / amount)*-1
for i=1,d,1 do
local node=minetest.registered_nodes[minetest.get_node({x=pos.x+(v.x*i),y=pos.y+(v.y*i),z=pos.z+(v.z*i)}).name]
if node.walkable then
return false
end
end
return true
end
function portalgun_round(x)
if x%2 ~= 0.5 then
return math.floor(x+0.5)
end
return x-0.5
end
function portalgun_ra2shoot(pos,ob)
local op=ob:get_pos()
local m=minetest.get_meta(pos)
local x=m:get_int("x")
local y=m:get_int("y")
local z=m:get_int("z")
local ox=portalgun_round(op.x)
local oy=portalgun_round(op.y)
local oz=portalgun_round(op.z)
if x==1 and ox==pos.x and oz<=pos.z then
return true
end
if x==-1 and ox==pos.x and oz>=pos.z then
return true
end
if z==-1 and oz==pos.z and ox<=pos.x then
return true
end
if z==1 and oz==pos.z and ox>=pos.x then
return true
end
return false
end
minetest.register_node("portalgun:secam_off", {
description = "Security cam (off)" ,
tiles = {"portalgun_scam.png"},
drawtype = "nodebox",
walkable=false,
groups = {dig_immediate = 3},
sounds = default.node_sound_glass_defaults(),
is_ground_content = false,
paramtype = "light",
paramtype2 = "facedir",
node_box = {type="fixed",
fixed={ {-0.2, -0.5, -0.2, 0.2, -0.4, 0.2},
{-0.1, -0.2, -0.1, 0.1, -0.4, 0.1}}
},
on_place = minetest.rotate_node,
on_construct = function(pos)
minetest.get_meta(pos):set_string("infotext","click to activate")
end,
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
minetest.set_node(pos, {name ="portalgun:secam", param1 = node.param1, param2 = node.param2})
minetest.get_node_timer(pos):start(1)
end,
})
minetest.register_node("portalgun:secam", {
description = "Security cam",
tiles = {"portalgun_scam.png"},
drawtype = "nodebox",
walkable=false,
groups = {dig_immediate = 3,stone=1,not_in_creative_inventory=1},
sounds = default.node_sound_glass_defaults(),
is_ground_content = false,
paramtype = "light",
paramtype2 = "facedir",
drop="portalgun:secam_off",
node_box = {type="fixed",
fixed={ {-0.2, -0.5, -0.2, 0.2, -0.4, 0.2},
{-0.1, -0.2, -0.1, 0.1, -0.4, 0.1}}
},
on_timer=function(pos, elapsed)
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 10)) do
if ob:is_player() or (ob:get_luaentity() and ob:get_luaentity().itemstring==nil and ob:get_luaentity().portalgun==nil) then
if portalgun_visiable(pos,ob) then
local v=ob:get_pos()
if not ob:get_luaentity() then v.y=v.y+1 end
local s={x=(v.x-pos.x)*3,y=(v.y-pos.y)*3,z=(v.z-pos.z)*3}
local m=minetest.add_entity(pos, "portalgun:bullet1")
m:set_velocity(s)
m:set_acceleration(s)
minetest.sound_play("portalgun_bullet1", {pos=pos, gain = 1, max_hear_distance = 15,})
minetest.after((math.random(1,9)*0.1), function(pos,s,v)
local m=minetest.add_entity(pos, "portalgun:bullet1")
m:set_velocity(s)
m:set_acceleration(s)
minetest.sound_play("portalgun_bullet1", {pos=pos, gain = 1, max_hear_distance = 15,})
end, pos,s,v)
end
end
end
return true
end,
})
minetest.register_entity("portalgun:bullet1",{
hp_max = 1,
--physical = true,
--collisionbox={-0.01,-0.01,-0.01,0.01,0.01,0.01},
pointable=false,
visual = "sprite",
visual_size = {x=0.1, y=0.1},
textures = {"default_mese_block.png"},
initial_sprite_basepos = {x=0, y=0},
portalgun=2,
bullet=1,
on_step= function(self, dtime)
self.timer=self.timer+dtime
self.timer2=self.timer2+dtime
local pos=self.object:get_pos()
local n=minetest.registered_nodes[minetest.get_node(self.object:get_pos()).name]
if self.timer>1 or (n and n.walkable) then
self.object:remove()
return
end
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 1.5)) do
if ob:is_player() or (ob:get_luaentity() and ob:get_luaentity().bullet~=1) then
ob:set_hp(ob:get_hp()-7)
ob:punch(self.object, 1,{full_punch_interval=1.0,damage_groups={fleshy=4}}, "default:bronze_pick", nil)
self.object:remove()
return
end
end
end,
timer=0,
timer2=0,
})
minetest.register_node("portalgun:sign1", {
description = "Portal sign blue",
tiles = {"portalgun_testblock.png^portalgun_sign1.png"},
inventory_image = "portalgun_testblock.png^portalgun_sign1.png",
drawtype = "nodebox",
groups = {snappy = 3, not_in_creative_inventory=0},
sounds = default.node_sound_wood_defaults(),
is_ground_content = false,
paramtype2 = "facedir",
paramtype = "light",
node_box = {
type="fixed",
fixed={-0.5,-0.5,0.45,0.5,0.5,0.5}},
})
minetest.register_node("portalgun:sign2", {
description = "Portal sign orange",
tiles = {"portalgun_testblock.png^portalgun_sign2.png"},
inventory_image = "portalgun_testblock.png^portalgun_sign2.png",
drawtype = "nodebox",
groups = {snappy = 3, not_in_creative_inventory=0},
sounds = default.node_sound_wood_defaults(),
is_ground_content = false,
paramtype2 = "facedir",
paramtype = "light",
node_box = {
type="fixed",
fixed={-0.5,-0.5,0.45,0.5,0.5,0.5}},
})

BIN
textures/portalgun_blue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 744 B

BIN
textures/portalgun_bu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 B

BIN
textures/portalgun_gray.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 B

BIN
textures/portalgun_gun.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 643 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 661 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 723 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 894 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 986 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 962 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

BIN
textures/portalgun_scam.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
textures/portalgun_v.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 B

BIN
textures/portalgun_x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

354
weightedstoragecube.lua Normal file

@ -0,0 +1,354 @@
local ptgwsc={
{"weightedstoragecube.png","portalgun_presplat.png","(blue)"},
{"weightedstoragecube2.png","portalgun_presplat2.png","(orange)"},
{"weightedstoragecube3.png","portalgun_presplat3.png","(yellow)"},
{"weightedstoragecube4.png","portalgun_presplat4.png","(green)"},
}
for ii = 1, #ptgwsc, 1 do
minetest.register_craftitem("portalgun:wscube" ..ii, {
description = "Weighted storage cube " .. ptgwsc[ii][3],
inventory_image = minetest.inventorycube(ptgwsc[ii][1]),
on_place=function(itemstack, user, pointed_thing)
if pointed_thing.type=="node" then
portalgun.new=1
local m=minetest.add_entity(pointed_thing.above, "portalgun:wsc"..ii)
m:set_acceleration({x=0,y=-10,z=0})
itemstack:take_item()
end
return itemstack
end,
})
minetest.register_node("portalgun:wscspawner2_" .. ii, {
description = "Weighted storage cube spawner2 " ..ptgwsc[ii][3],
tiles = {"default_steel_block.png","default_steel_block.png","default_steel_block.png","default_steel_block.png","default_steel_block.png",ptgwsc[ii][1]},
groups = {cracky=2,mesecon_receptor_off = 1, mesecon_effector_off = 1},
mesecons = {receptor = {state = "off"}},
sounds = default.node_sound_glass_defaults(),
is_ground_content = false,
paramtype2 = "facedir",
mesecons = {effector = {
action_on = function (pos, node)
local dir=minetest.get_node(pos).param2
local v={x=0, y=0, z=0}
if dir==0 then v.z=-1
elseif dir==1 then v.x=-1.2
elseif dir==2 then v.z=1.2
elseif dir==3 then v.x=1.2
elseif dir==8 then v.y=-1.2
elseif dir==4 then v.y=1.2
end
local pv={x=pos.x+v.x, y=pos.y+v.y, z=pos.z+v.z}
portalgun.new=1
local m=minetest.add_entity(pv, "portalgun:wsc" ..ii)
m:set_acceleration({x=0, y=-10, z=0})
end
}}
})
minetest.register_entity("portalgun:wsc" ..ii,{
hp_max = 100,
physical = true,
weight = 5,
collisionbox = {-0.6,-0.6,-0.6, 0.6,0.6,0.6},
visual = "cube",
visual_size = {x=1.1, y=1.1},
textures = {ptgwsc[ii][1],ptgwsc[ii][1],ptgwsc[ii][1],ptgwsc[ii][1],ptgwsc[ii][1],ptgwsc[ii][1]},
initial_sprite_basepos = {x=0, y=0},
is_visible = true,
makes_footstep_sound = true,
automatic_rotate = false,
portalgun=2,
wsc=ii,
on_activate= function(self, staticdata)
if portalgun.new==0 then
self.object:remove()
return self
end
portalgun.new=0
end,
on_step= function(self, dtime)
self.timer=self.timer+dtime
if self.timer<1 then return self end
self.timer=0
self.object:set_acceleration({x=0, y=-10, z=0})
self.timer2=self.timer2+1
if self.timer2>10 then
self.timer2=0
for i, ob in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 20)) do
if ob:is_player() then
return true
end
end
self.object:set_hp(0)
self.object:punch(self.object, 1, "default:bronze_pick", nil)
end
end,
timer=0,
timer2=0,
})
minetest.register_node("portalgun:wscspawner"..ii, {
description = "Weighted storage cube spawner " ..ptgwsc[ii][3],
tiles = {ptgwsc[ii][1]},
groups = {cracky = 1, not_in_creative_inventory=0},
paramtype = "light",
paramtype2="facedir",
sunlight_propagates = true,
light_source = default.LIGHT_MAX - 1,
sounds = default.node_sound_stone_defaults(),
drawtype="nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.7, -0.5, -0.7, 0.7, -0.375, 0.7},
{0.7, -0.5, -0.1875, 0.9, -0.4375, 0.1875},
{-0.9, -0.5, -0.1875, -0.7, -0.4375, 0.1875},
{-0.1875, -0.5, -0.9, 0.1875, -0.4375, -0.7},
{-0.1875, -0.5, 0.7, 0.1875, -0.4375, 0.9},
}
},
on_construct = function(pos)
minetest.get_node_timer(pos):start(5)
end,
on_timer = function (pos, elapsed)
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 40)) do
if ob:get_luaentity() and ob:get_luaentity().wsc==ii then
return true
end
end
portalgun.new=1
local m=minetest.add_entity(pos, "portalgun:wsc" ..ii)
m:set_acceleration({x=0,y=-10,z=0})
return true
end,
})
minetest.register_node("portalgun:plantform1_" ..ii, {
description = "Pressure platform " .. ptgwsc[ii][3],
tiles = {ptgwsc[ii][2],"default_cloud.png","default_cloud.png","default_cloud.png","default_cloud.png","default_cloud.png"},
groups = {mesecon = 2,cracky = 1, not_in_creative_inventory=0},
mesecons = {receptor = {state = "off"}},
paramtype = "light",
sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(),
drawtype="nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.7, -0.5, -0.7, 0.7, -0.375, 0.7},
{0.7, -0.5, -0.1875, 0.9, -0.4375, 0.1875},
{-0.9, -0.5, -0.1875, -0.7, -0.4375, 0.1875},
{-0.1875, -0.5, -0.9, 0.1875, -0.4375, -0.7},
{-0.1875, -0.5, 0.7, 0.1875, -0.4375, 0.9},
{-0.5, -0.5, -0.5, 0.5, -0.3125, 0.5},
}
},
on_construct = function(pos)
minetest.get_node_timer(pos):start(2)
end,
on_timer = function (pos, elapsed)
if not mesecon then return false end
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 1)) do
if ob:get_luaentity() and ob:get_luaentity().wsc==ii then
local node=minetest.get_node(pos)
mesecon.receptor_on(pos)
minetest.set_node(pos, {name ="portalgun:plantform2_"..ii, param1 = node.param1, param2 = node.param2})
end
return true
end
return true
end,
})
minetest.register_node("portalgun:plantform2_"..ii, {
description = "Pressure platform",
tiles = {ptgwsc[ii][2],"default_cloud.png","default_cloud.png","default_cloud.png","default_cloud.png","default_cloud.png"},
drop="portalgun:plantform1_"..ii,
groups = {mesecon = 2,cracky = 1, not_in_creative_inventory=1},
mesecons = {receptor = {state = "on"}},
paramtype = "light",
sunlight_propagates = true,
light_source = default.LIGHT_MAX - 1,
sounds = default.node_sound_stone_defaults(),
drawtype="nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.7, -0.5, -0.7, 0.7, -0.375, 0.7},
{0.7, -0.5, -0.1875, 0.9, -0.4375, 0.1875},
{-0.9, -0.5, -0.1875, -0.7, -0.4375, 0.1875},
{-0.1875, -0.5, -0.9, 0.1875, -0.4375, -0.7},
{-0.1875, -0.5, 0.7, 0.1875, -0.4375, 0.9},
}
},
on_construct = function(pos)
minetest.get_node_timer(pos):start(2)
end,
on_timer = function (pos, elapsed)
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 1)) do
if ob:get_luaentity() and ob:get_luaentity().wsc==ii then
return true
end
end
mesecon.receptor_off(pos)
local node=minetest.get_node(pos)
minetest.set_node(pos, {name ="portalgun:plantform1_"..ii, param1 = node.param1, param2 = node.param2})
return true
end,
})
end -- of for #
minetest.register_node("portalgun:plantform_nu1", {
description = "Pressure platform (player or cube)",
tiles = {"portalgun_presplat5.png","default_cloud.png","default_cloud.png","default_cloud.png","default_cloud.png","default_cloud.png"},
groups = {mesecon = 2,cracky = 1, not_in_creative_inventory=0},
mesecons = {receptor = {state = "off"}},
paramtype = "light",
sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(),
drawtype="nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.7, -0.5, -0.7, 0.7, -0.375, 0.7},
{0.7, -0.5, -0.1875, 0.9, -0.4375, 0.1875},
{-0.9, -0.5, -0.1875, -0.7, -0.4375, 0.1875},
{-0.1875, -0.5, -0.9, 0.1875, -0.4375, -0.7},
{-0.1875, -0.5, 0.7, 0.1875, -0.4375, 0.9},
{-0.5, -0.5, -0.5, 0.5, -0.3125, 0.5},
}
},
on_construct = function(pos)
minetest.get_node_timer(pos):start(2)
end,
on_timer = function (pos, elapsed)
if not mesecon then return false end
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 1)) do
if ob:is_player() or (ob:get_luaentity() and ob:get_luaentity().wsc) then
local node=minetest.get_node(pos)
mesecon.receptor_on(pos)
minetest.set_node(pos, {name ="portalgun:plantform_nu2", param1 = node.param1, param2 = node.param2})
end
return true
end
return true
end,
})
minetest.register_node("portalgun:plantform_nu2", {
description = "Pressure platform",
tiles = {"portalgun_presplat5.png","default_cloud.png","default_cloud.png","default_cloud.png","default_cloud.png","default_cloud.png"},
drop="portalgun:plantform_nu1",
groups = {mesecon = 2,cracky = 1, not_in_creative_inventory=1},
mesecons = {receptor = {state = "on"}},
paramtype = "light",
sunlight_propagates = true,
light_source = default.LIGHT_MAX - 1,
sounds = default.node_sound_stone_defaults(),
drawtype="nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.7, -0.5, -0.7, 0.7, -0.375, 0.7},
{0.7, -0.5, -0.1875, 0.9, -0.4375, 0.1875},
{-0.9, -0.5, -0.1875, -0.7, -0.4375, 0.1875},
{-0.1875, -0.5, -0.9, 0.1875, -0.4375, -0.7},
{-0.1875, -0.5, 0.7, 0.1875, -0.4375, 0.9},
}
},
on_construct = function(pos)
minetest.get_node_timer(pos):start(2)
end,
on_timer = function (pos, elapsed)
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 1)) do
if ob:is_player() or (ob:get_luaentity() and ob:get_luaentity().wsc) then
return true
end
end
mesecon.receptor_off(pos)
local node=minetest.get_node(pos)
minetest.set_node(pos, {name ="portalgun:plantform_nu1", param1 = node.param1, param2 = node.param2})
return true
end,
})
minetest.register_node("portalgun:planthole", {
description = "Plathole (activate by any cube, 2 blocks under)",
tiles = {"default_cloud.png"},
groups = {mesecon = 2,cracky = 1},
mesecons = {receptor = {state = "off"}},
paramtype = "light",
sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(),
drawtype="nodebox",
node_box = {
type = "fixed",
fixed = {
{-1.5, -0.5, -1.5, 0.5, -0.25, -1.3},
{-1.5, -0.5, 0.3, 0.5, -0.25, 0.5},
{0.3, -0.5, -1.5, 0.5, -0.25, 0.5},
{-1.5, -0.5, -1.5, -1.3, -0.25, 0.5},
{0.5, -0.5, -0.9, 0.7, -0.375, -0.0625},
{-1.7, -0.5, -0.9, -1.5, -0.3125, -0.0625},
{-0.9, -0.5, -1.7, -0.0625, -0.375, -1.5},
{-1, -0.5, 0.5, -0.0625, -0.375, 0.7},
}
},
on_construct = function(pos)
minetest.get_node_timer(pos):start(5)
end,
on_timer = function (pos, elapsed)
local pos2={x=pos.x,y=pos.y-2,z=pos.z}
for i, ob in pairs(minetest.get_objects_inside_radius(pos2, 1)) do
if ob:get_luaentity() and ob:get_luaentity().wsc then
mesecon.receptor_on(pos)
return true
end
end
mesecon.receptor_off(pos)
return true
end,
})
minetest.register_node("portalgun:objdestroyer_1", {
description = "Object destroyer (destroys on active)",
tiles = {"portalgun_testblock.png^[colorize:#FF0000aa"},
groups = {cracky = 2,mesecon=1},
sounds = default.node_sound_stone_defaults(),
mesecons = {effector = {
action_on = function (pos, node)
minetest.set_node(pos, {name ="portalgun:objdestroyer_2"})
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 5)) do
if ob:get_luaentity() then
ob:set_hp(0)
ob:punch(ob, {full_punch_interval=1.0,damage_groups={fleshy=9000}}, "default:bronze_pick", nil)
end
end
end
}}
})
minetest.register_node("portalgun:objdestroyer_2", {
description = "Obj destroyer",
tiles = {"portalgun_testblock.png^[colorize:#FF0000cc"},
groups = {cracky=2,mesecon=1,not_in_creative_inventory=1},
sunlight_propagates = true,
drop="portalgun:objdestroyer_1",
paramtype="light",
light_source = default.LIGHT_MAX - 1,
mesecons = {conductor = {
state = mesecon.state.on,
offstate = "portalgun:objdestroyer_1",
}},
})