Compare commits

...

3 Commits

Author SHA1 Message Date
bad55d19a0 test 2022-07-11 10:30:14 +02:00
dec116cc5e test 2022-07-11 10:30:06 +02:00
15640770f3 my first changes 2022-07-11 08:32:12 +02:00
30 changed files with 867 additions and 524 deletions

View File

@@ -1,4 +1,8 @@
# portalgun # portalgun
original repo:https://github.com/AiTechEye/portalgun
Licenses: code: LGPL-2.1, media: CC BY-SA-4.0
For changes check git or compare to original repo
Remixed by: BRNSystems
https://forum.minetest.net/viewtopic.php?f=11&t=12772 https://forum.minetest.net/viewtopic.php?f=11&t=12772

285
craft.lua
View File

@@ -1,285 +0,0 @@
minetest.register_craft({
output = "portalgun:gun1_placed",
recipe = {{"portalgun:gun1"}}})
minetest.register_craft({
output = "portalgun:gun2_placed",
recipe = {{"portalgun:gun2"}}})
minetest.register_craft({
output = "portalgun:gun_placed",
recipe = {{"portalgun:gun"}}})
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"},
},
})

Binary file not shown.

Before

Width:  |  Height:  |  Size: 273 KiB

View File

@@ -42,7 +42,7 @@ minetest.register_entity("portalgun:power",{
spritediv = {x=1, y=1}, spritediv = {x=1, y=1},
is_visible = true, is_visible = true,
makes_footstep_sound = false, makes_footstep_sound = false,
automatic_rotate = false, automatic_rotate = 0,
timer=0, timer=0,
time=0.1, time=0.1,
portalgun_power=1, portalgun_power=1,
@@ -62,7 +62,6 @@ on_punch=function(self, puncher, time_from_last_punch, tool_capabilities, dir)
if self.target and self.target:get_attach() then if self.target and self.target:get_attach() then
self.target:set_detach() self.target:set_detach()
self.target:set_hp(0) 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
end, end,
@@ -72,7 +71,6 @@ on_step= function(self, dtime)
self.timer=0 self.timer=0
if self.target==nil or (not self.target:get_attach()) then if self.target==nil or (not self.target:get_attach()) then
self.object:set_hp(0) 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 if self.sound then minetest.sound_stop(self.sound) end
end end
if self.player then if self.player then
@@ -106,7 +104,7 @@ minetest.register_entity("portalgun:power2",{
spritediv = {x=1, y=1}, spritediv = {x=1, y=1},
is_visible = true, is_visible = true,
makes_footstep_sound = false, makes_footstep_sound = false,
automatic_rotate = false, automatic_rotate = 0,
timer=0, timer=0,
time=0.025, time=0.025,
portalgun_power=1, portalgun_power=1,
@@ -152,7 +150,6 @@ on_step= function(self, dtime)
if self.target==nil or (not self.target:get_attach()) then if self.target==nil or (not self.target:get_attach()) then
self.object:set_hp(0) 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 return self
end end
return self return self

204
init.lua
View File

@@ -4,7 +4,6 @@ proportal_group_only = false
portalgun={new=0,checkpoints={}} portalgun={new=0,checkpoints={}}
dofile(minetest.get_modpath("portalgun") .. "/gravityuse.lua") -- the gravity part of portalgun 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 dofile(minetest.get_modpath("portalgun") .. "/stuff.lua") -- security cam
if disable_portal_stuff==false and minetest.get_modpath("mesecons")~=nil then 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") .. "/weightedstoragecube.lua") -- weighted storage cube
@@ -58,7 +57,6 @@ function portal_delete(name,n) -- using set_hp & :punch instand of :remove ... n
end end
portalgun_portal[name].portal1_active=false portalgun_portal[name].portal1_active=false
portalgun_portal[name].portal1:set_hp(0) 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 end
if (n==2 or n==0) and portalgun_portal[name].portal2~=nil then if (n==2 or n==0) and portalgun_portal[name].portal2~=nil then
if n==0 then if n==0 then
@@ -67,7 +65,6 @@ function portal_delete(name,n) -- using set_hp & :punch instand of :remove ... n
end end
portalgun_portal[name].portal2_active=false portalgun_portal[name].portal2_active=false
portalgun_portal[name].portal2:set_hp(0) 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 end
if n==0 then portalgun_portal[name]=nil end if n==0 then portalgun_portal[name]=nil end
end end
@@ -340,157 +337,85 @@ on_activate= function(self, staticdata)
end, end,
on_step=portalgun_on_step, on_step=portalgun_on_step,
}) })
minetest.register_craftitem("portalgun:gun", {
minetest.register_node("portalgun:gun1", {
description = "Portalgun (blue)",
range = 5,
tiles={"portalgun_gun1.png"},
selection_box = {
type = "fixed",
fixed = {
{-0.3, -0.5, -0.3, 0.3, -0.1,0.3},
}
},
drawtype="mesh",
mesh="portalgun_gun_wearing.obj",
groups = {not_in_creative_inventory=1},
sunlight_propagates = true,
paramtype="light",
paramtype2="facedir",
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_node("portalgun:gun2", {
description = "Portalgun (orange)",
range = 5,
tiles={"portalgun_gun2.png"},
selection_box = {
type = "fixed",
fixed = {
{-0.3, -0.5, -0.3, 0.3, -0.1,0.3},
}
},
drawtype="mesh",
mesh="portalgun_gun_wearing.obj",
groups = {not_in_creative_inventory=1},
sunlight_propagates = true,
paramtype="light",
paramtype2="facedir",
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_node("portalgun:gun", {
description = "Portalgun", description = "Portalgun",
range = 5, range = 100,
tiles={"portalgun_gun0.png"}, inventory_image = "portalgun_gun0_rndr.png",
selection_box = { wield_image = "portalgun_gun0_rndr.png",
type = "fixed", tool_capabilities = {
fixed = { full_punch_interval = 0.5,
{-0.3, -0.5, -0.3, 0.3, -0.1,0.3}, max_drop_level = 3,
} groupcaps = {
fleshy = {times={[2]=0.80, [3]=0.40}, uses=100, maxlevel=3},
oddly_breakable_by_hand = {times={[1]=1}, uses=100, maxlevel=1},
},
damage_groups = {fleshy=1},
}, },
drawtype="mesh",
mesh="portalgun_gun_wearing.obj",
sunlight_propagates = true,
paramtype="light",
paramtype2="facedir",
on_place=function(itemstack, user, pointed_thing) on_place=function(itemstack, user, pointed_thing)
portalgun_mode(itemstack, user, pointed_thing) portalgun_setmode(itemstack, user, pointed_thing, 2)
portalgun_onuse(itemstack, user, pointed_thing)
return itemstack return itemstack
end, end,
on_use = function(itemstack, user, pointed_thing) on_use = function(itemstack, user, pointed_thing)
portalgun_setmode(itemstack, user, pointed_thing, 1)
portalgun_onuse(itemstack, user, pointed_thing) portalgun_onuse(itemstack, user, pointed_thing)
return itemstack return itemstack
end end
}) })
minetest.register_node("portalgun:gun1_placed", { minetest.register_craftitem("portalgun:gun1", {
description = "Portalgun (blue)", description = "Portalgun (blue)",
range = 5, range = 100,
tiles={"portalgun_gun1.png"}, groups = {not_in_creative_inventory=1},
selection_box = { inventory_image = "portalgun_gun1_rndr.png",
type = "fixed", wield_image = "portalgun_gun1_rndr.png",
fixed = { tool_capabilities = {
{-0.3, -0.5, -0.3, 0.3, -0.1,0.3}, full_punch_interval = 0.5,
} max_drop_level = 3,
groupcaps = {
fleshy = {times={[2]=0.80, [3]=0.40}, uses=100, maxlevel=3},
oddly_breakable_by_hand = {times={[1]=1}, uses=100, maxlevel=1},
}, },
drawtype="mesh", damage_groups = {fleshy=1},
mesh="portalgun_gun.obj", },
sunlight_propagates = true, on_place=function(itemstack, user, pointed_thing)
paramtype="light", portalgun_setmode(itemstack, user, pointed_thing, 2)
paramtype2="facedir", portalgun_onuse(itemstack, user, pointed_thing)
visual_scale=0.4, return itemstack
groups = {not_in_creative_inventory=1,dig_immediate = 3}, end,
on_use = function(itemstack, user, pointed_thing) on_use = function(itemstack, user, pointed_thing)
portalgun_setmode(itemstack, user, pointed_thing, 1)
portalgun_onuse(itemstack, user, pointed_thing) portalgun_onuse(itemstack, user, pointed_thing)
return itemstack return itemstack
end end
}) })
minetest.register_node("portalgun:gun2_placed", { minetest.register_craftitem("portalgun:gun2", {
description = "Portalgun (orange)", description = "Portalgun (orange)",
range = 5, range = 100,
tiles={"portalgun_gun2.png"}, inventory_image = "portalgun_gun2_rndr.png",
selection_box = { wield_image = "portalgun_gun2_rndr.png",
type = "fixed", tool_capabilities = {
fixed = { full_punch_interval = 0.5,
{-0.3, -0.5, -0.3, 0.3, -0.1,0.3}, max_drop_level = 3,
} groupcaps = {
fleshy = {times={[2]=0.80, [3]=0.40}, uses=100, maxlevel=3},
oddly_breakable_by_hand = {times={[1]=1}, uses=100, maxlevel=1},
}, },
drawtype="mesh", damage_groups = {fleshy=1},
mesh="portalgun_gun.obj", },
sunlight_propagates = true, groups = {not_in_creative_inventory=1},
paramtype="light", on_place=function(itemstack, user, pointed_thing)
paramtype2="facedir", portalgun_setmode(itemstack, user, pointed_thing, 2)
visual_scale=0.4, portalgun_onuse(itemstack, user, pointed_thing)
groups = {not_in_creative_inventory=1,dig_immediate = 3}, return itemstack
end,
on_use = function(itemstack, user, pointed_thing) on_use = function(itemstack, user, pointed_thing)
portalgun_setmode(itemstack, user, pointed_thing, 1)
portalgun_onuse(itemstack, user, pointed_thing) portalgun_onuse(itemstack, user, pointed_thing)
return itemstack return itemstack
end end
}) })
minetest.register_node("portalgun:gun_placed", {
description = "Portalgun",
range = 5,
tiles={"portalgun_gun0.png"},
selection_box = {
type = "fixed",
fixed = {
{-0.3, -0.5, -0.3, 0.3, -0.1,0.3},
}
},
drawtype="mesh",
mesh="portalgun_gun.obj",
sunlight_propagates = true,
paramtype="light",
paramtype2="facedir",
visual_scale=0.4,
groups = {not_in_creative_inventory=1,dig_immediate = 3},
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 function portalgun_mode(itemstack, user, pointed_thing) -- change modes
local item=itemstack:to_table() local item=itemstack:to_table()
local meta=minetest.deserialize(item["metadata"]) local meta=minetest.deserialize(item["metadata"])
@@ -516,6 +441,23 @@ function portalgun_mode(itemstack, user, pointed_thing) -- change modes
minetest.sound_play("portalgun_mode", {pos=user:get_pos(),max_hear_distance = 5, gain = 1}) minetest.sound_play("portalgun_mode", {pos=user:get_pos(),max_hear_distance = 5, gain = 1})
end end
function portalgun_setmode(itemstack, user, pointed_thing, mode) -- change modes
local item=itemstack:to_table()
local meta=minetest.deserialize(item["metadata"])
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
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) local function rnd(r)
return math.floor(r+ 0.5) return math.floor(r+ 0.5)
@@ -558,12 +500,6 @@ function portalgun_onuse(itemstack, user, pointed_thing) -- using the gun
portalgun_portal[name]={lifelime=portalgun_lifelime,project=1,timer=0,portal1_active=false,portal2_active=false,portal1_use=0,portal2_use=0} portalgun_portal[name]={lifelime=portalgun_lifelime,project=1,timer=0,portal1_active=false,portal2_active=false,portal1_use=0,portal2_use=0}
end 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 if key.sneak then
portal_delete(name,0) portal_delete(name,0)
return itemstack return itemstack

View File

@@ -1,4 +1,3 @@
name = portalgun name = portalgun
description = Portals and stuff description = Portals and stuff
depends = default
optional_depends = mesecons optional_depends = mesecons

BIN
models/bullet.blend Normal file

Binary file not shown.

BIN
models/bullet.blend1 Normal file

Binary file not shown.

628
models/bullet.obj Normal file
View File

@@ -0,0 +1,628 @@
# Blender v3.1.2 OBJ File: 'bullet.blend'
# www.blender.org
mtllib bullet.mtl
o Cylinder
v -0.000000 -0.285469 -0.048214
v 0.009406 -0.285469 -0.047288
v 0.018451 -0.285469 -0.044544
v 0.026786 -0.285469 -0.040089
v 0.034093 -0.285469 -0.034093
v 0.040089 -0.285469 -0.026786
v 0.044544 -0.285469 -0.018451
v 0.047288 -0.285469 -0.009406
v 0.048214 -0.285469 0.000000
v 0.047288 -0.285469 0.009406
v 0.044544 -0.285469 0.018451
v 0.040089 -0.285469 0.026786
v 0.034093 -0.285469 0.034093
v 0.026786 -0.285469 0.040089
v 0.018451 -0.285469 0.044544
v 0.009406 -0.285469 0.047288
v -0.000000 -0.285469 0.048214
v -0.009406 -0.285469 0.047288
v -0.018451 -0.285469 0.044544
v -0.026786 -0.285469 0.040089
v -0.034093 -0.285469 0.034093
v -0.040089 -0.285469 0.026786
v -0.044544 -0.285469 0.018451
v -0.047288 -0.285469 0.009406
v -0.048214 -0.285469 -0.000000
v -0.047288 -0.285469 -0.009406
v -0.044544 -0.285469 -0.018451
v -0.040089 -0.285469 -0.026786
v -0.034093 -0.285469 -0.034093
v -0.026786 -0.285469 -0.040089
v -0.018451 -0.285469 -0.044544
v -0.009406 -0.285469 -0.047288
v 0.000000 0.202230 0.000000
v -0.000000 0.083239 -0.048214
v 0.009406 0.083239 -0.047288
v 0.018451 0.083239 -0.044544
v 0.026786 0.083239 -0.040089
v 0.034093 0.083239 -0.034093
v 0.040089 0.083239 -0.026786
v 0.044544 0.083239 -0.018451
v 0.047288 0.083239 -0.009406
v 0.048214 0.083239 0.000000
v 0.047288 0.083239 0.009406
v 0.044544 0.083239 0.018451
v 0.040089 0.083239 0.026786
v 0.034093 0.083239 0.034093
v 0.026786 0.083239 0.040089
v 0.018451 0.083239 0.044544
v 0.009406 0.083239 0.047288
v -0.000000 0.083239 0.048214
v -0.009406 0.083239 0.047288
v -0.018451 0.083239 0.044544
v -0.026786 0.083239 0.040089
v -0.034093 0.083239 0.034093
v -0.040089 0.083239 0.026786
v -0.044544 0.083239 0.018451
v -0.047288 0.083239 0.009406
v -0.048214 0.083239 -0.000000
v -0.047288 0.083239 -0.009406
v -0.044544 0.083239 -0.018451
v -0.040089 0.083239 -0.026786
v -0.034093 0.083239 -0.034093
v -0.026786 0.083239 -0.040089
v -0.018451 0.083239 -0.044544
v -0.009406 0.083239 -0.047288
v -0.000000 -0.285469 -0.048214
v 0.009406 -0.285469 -0.047288
v 0.018451 -0.285469 -0.044544
v 0.026786 -0.285469 -0.040089
v 0.034093 -0.285469 -0.034093
v 0.040089 -0.285469 -0.026786
v 0.044544 -0.285469 -0.018451
v 0.047288 -0.285469 -0.009406
v 0.048214 -0.285469 0.000000
v 0.047288 -0.285469 0.009406
v 0.044544 -0.285469 0.018451
v 0.040089 -0.285469 0.026786
v 0.034093 -0.285469 0.034093
v 0.026786 -0.285469 0.040089
v 0.018451 -0.285469 0.044544
v 0.009406 -0.285469 0.047288
v -0.000000 -0.285469 0.048214
v -0.009406 -0.285469 0.047288
v -0.018451 -0.285469 0.044544
v -0.026786 -0.285469 0.040089
v -0.034093 -0.285469 0.034093
v -0.040089 -0.285469 0.026786
v -0.044544 -0.285469 0.018451
v -0.047288 -0.285469 0.009406
v -0.048214 -0.285469 -0.000000
v -0.047288 -0.285469 -0.009406
v -0.044544 -0.285469 -0.018451
v -0.040089 -0.285469 -0.026786
v -0.034093 -0.285469 -0.034093
v -0.026786 -0.285469 -0.040089
v -0.018451 -0.285469 -0.044544
v -0.009406 -0.285469 -0.047288
v 0.000000 0.202230 0.000000
v -0.000000 0.083239 -0.048214
v 0.009406 0.083239 -0.047288
v 0.018451 0.083239 -0.044544
v 0.026786 0.083239 -0.040089
v 0.034093 0.083239 -0.034093
v 0.040089 0.083239 -0.026786
v 0.044544 0.083239 -0.018451
v 0.047288 0.083239 -0.009406
v 0.048214 0.083239 0.000000
v 0.047288 0.083239 0.009406
v 0.044544 0.083239 0.018451
v 0.040089 0.083239 0.026786
v 0.034093 0.083239 0.034093
v 0.026786 0.083239 0.040089
v 0.018451 0.083239 0.044544
v 0.009406 0.083239 0.047288
v -0.000000 0.083239 0.048214
v -0.009406 0.083239 0.047288
v -0.018451 0.083239 0.044544
v -0.026786 0.083239 0.040089
v -0.034093 0.083239 0.034093
v -0.040089 0.083239 0.026786
v -0.044544 0.083239 0.018451
v -0.047288 0.083239 0.009406
v -0.048214 0.083239 -0.000000
v -0.047288 0.083239 -0.009406
v -0.044544 0.083239 -0.018451
v -0.040089 0.083239 -0.026786
v -0.034093 0.083239 -0.034093
v -0.026786 0.083239 -0.040089
v -0.018451 0.083239 -0.044544
v -0.009406 0.083239 -0.047288
vt 0.750000 0.490000
vt 0.796822 0.485388
vt 0.841844 0.471731
vt 0.883337 0.449553
vt 0.919706 0.419706
vt 0.949553 0.383337
vt 0.971731 0.341844
vt 0.985388 0.296822
vt 0.990000 0.250000
vt 0.985388 0.203178
vt 0.971731 0.158156
vt 0.949553 0.116663
vt 0.919706 0.080294
vt 0.883337 0.050447
vt 0.841844 0.028269
vt 0.796822 0.014612
vt 0.750000 0.010000
vt 0.703178 0.014612
vt 0.658156 0.028269
vt 0.616663 0.050447
vt 0.580294 0.080294
vt 0.550447 0.116663
vt 0.528269 0.158156
vt 0.514612 0.203178
vt 0.510000 0.250000
vt 0.514612 0.296822
vt 0.528269 0.341844
vt 0.550447 0.383337
vt 0.580294 0.419706
vt 0.616663 0.449553
vt 0.658156 0.471731
vt 0.703178 0.485388
vt 0.031250 0.500000
vt 0.031250 0.892746
vt 0.000000 0.892746
vt 0.000000 0.500000
vt 0.062500 0.500000
vt 0.062500 0.892746
vt 0.093750 0.500000
vt 0.093750 0.892746
vt 0.125000 0.500000
vt 0.125000 0.892746
vt 0.156250 0.500000
vt 0.156250 0.892746
vt 0.187500 0.500000
vt 0.187500 0.892746
vt 0.218750 0.500000
vt 0.218750 0.892746
vt 0.250000 0.500000
vt 0.250000 0.892746
vt 0.281250 0.500000
vt 0.281250 0.892746
vt 0.312500 0.500000
vt 0.312500 0.892746
vt 0.343750 0.500000
vt 0.343750 0.892746
vt 0.375000 0.500000
vt 0.375000 0.892746
vt 0.406250 0.500000
vt 0.406250 0.892746
vt 0.437500 0.500000
vt 0.437500 0.892746
vt 0.468750 0.500000
vt 0.468750 0.892746
vt 0.500000 0.500000
vt 0.500000 0.892746
vt 0.531250 0.500000
vt 0.531250 0.892746
vt 0.562500 0.500000
vt 0.562500 0.892746
vt 0.593750 0.500000
vt 0.593750 0.892746
vt 0.625000 0.500000
vt 0.625000 0.892746
vt 0.656250 0.500000
vt 0.656250 0.892746
vt 0.687500 0.500000
vt 0.687500 0.892746
vt 0.718750 0.500000
vt 0.718750 0.892746
vt 0.750000 0.500000
vt 0.750000 0.892746
vt 0.781250 0.500000
vt 0.781250 0.892746
vt 0.812500 0.500000
vt 0.812500 0.892746
vt 0.843750 0.500000
vt 0.843750 0.892746
vt 0.875000 0.500000
vt 0.875000 0.892746
vt 0.906250 0.500000
vt 0.906250 0.892746
vt 0.937500 0.500000
vt 0.937500 0.892746
vt 0.968750 0.500000
vt 0.968750 0.892746
vt 1.000000 0.500000
vt 1.000000 0.892746
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.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.750000 0.490000
vt 0.703178 0.485388
vt 0.658156 0.471731
vt 0.616663 0.449553
vt 0.580294 0.419706
vt 0.550447 0.383337
vt 0.528269 0.341844
vt 0.514612 0.296822
vt 0.510000 0.250000
vt 0.514612 0.203178
vt 0.528269 0.158156
vt 0.550447 0.116663
vt 0.580294 0.080294
vt 0.616663 0.050447
vt 0.658156 0.028269
vt 0.703178 0.014612
vt 0.750000 0.010000
vt 0.796822 0.014612
vt 0.841844 0.028269
vt 0.883337 0.050447
vt 0.919706 0.080294
vt 0.949553 0.116663
vt 0.971731 0.158156
vt 0.985388 0.203178
vt 0.990000 0.250000
vt 0.985388 0.296822
vt 0.971731 0.341844
vt 0.949553 0.383337
vt 0.919706 0.419706
vt 0.883337 0.449553
vt 0.841844 0.471731
vt 0.796822 0.485388
vt 0.031250 0.500000
vt 0.000000 0.500000
vt 0.000000 0.892746
vt 0.031250 0.892746
vt 0.062500 0.500000
vt 0.062500 0.892746
vt 0.093750 0.500000
vt 0.093750 0.892746
vt 0.125000 0.500000
vt 0.125000 0.892746
vt 0.156250 0.500000
vt 0.156250 0.892746
vt 0.187500 0.500000
vt 0.187500 0.892746
vt 0.218750 0.500000
vt 0.218750 0.892746
vt 0.250000 0.500000
vt 0.250000 0.892746
vt 0.281250 0.500000
vt 0.281250 0.892746
vt 0.312500 0.500000
vt 0.312500 0.892746
vt 0.343750 0.500000
vt 0.343750 0.892746
vt 0.375000 0.500000
vt 0.375000 0.892746
vt 0.406250 0.500000
vt 0.406250 0.892746
vt 0.437500 0.500000
vt 0.437500 0.892746
vt 0.468750 0.500000
vt 0.468750 0.892746
vt 0.500000 0.500000
vt 0.500000 0.892746
vt 0.531250 0.500000
vt 0.531250 0.892746
vt 0.562500 0.500000
vt 0.562500 0.892746
vt 0.593750 0.500000
vt 0.593750 0.892746
vt 0.625000 0.500000
vt 0.625000 0.892746
vt 0.656250 0.500000
vt 0.656250 0.892746
vt 0.687500 0.500000
vt 0.687500 0.892746
vt 0.718750 0.500000
vt 0.718750 0.892746
vt 0.750000 0.500000
vt 0.750000 0.892746
vt 0.781250 0.500000
vt 0.781250 0.892746
vt 0.812500 0.500000
vt 0.812500 0.892746
vt 0.843750 0.500000
vt 0.843750 0.892746
vt 0.875000 0.500000
vt 0.875000 0.892746
vt 0.906250 0.500000
vt 0.906250 0.892746
vt 0.937500 0.500000
vt 0.937500 0.892746
vt 0.968750 0.500000
vt 0.968750 0.892746
vt 1.000000 0.500000
vt 1.000000 0.892746
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.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
vn 0.0000 -1.0000 -0.0000
vn -0.0980 0.0000 -0.9952
vn -0.2903 0.0000 -0.9569
vn -0.4714 0.0000 -0.8819
vn -0.6344 0.0000 -0.7730
vn -0.7730 0.0000 -0.6344
vn -0.8819 0.0000 -0.4714
vn -0.9569 0.0000 -0.2903
vn -0.9952 0.0000 -0.0980
vn -0.9952 0.0000 0.0980
vn -0.9569 0.0000 0.2903
vn -0.8819 0.0000 0.4714
vn -0.7730 0.0000 0.6344
vn -0.6344 0.0000 0.7730
vn -0.4714 0.0000 0.8819
vn -0.2903 0.0000 0.9569
vn -0.0980 0.0000 0.9952
vn 0.0980 0.0000 0.9952
vn 0.2903 0.0000 0.9569
vn 0.4714 0.0000 0.8819
vn 0.6344 0.0000 0.7730
vn 0.7730 0.0000 0.6344
vn 0.8819 0.0000 0.4714
vn 0.9569 0.0000 0.2903
vn 0.9952 0.0000 0.0980
vn 0.9952 0.0000 -0.0980
vn 0.9569 0.0000 -0.2903
vn 0.8819 0.0000 -0.4714
vn 0.7730 0.0000 -0.6344
vn 0.6344 0.0000 -0.7730
vn 0.4714 0.0000 -0.8819
vn 0.2903 0.0000 -0.9569
vn 0.0980 0.0000 -0.9952
vn -0.0909 0.3740 -0.9230
vn -0.2692 0.3740 -0.8875
vn -0.4372 0.3740 -0.8179
vn -0.5884 0.3740 -0.7169
vn -0.7169 0.3740 -0.5884
vn -0.8179 0.3740 -0.4372
vn -0.8875 0.3740 -0.2692
vn -0.9230 0.3740 -0.0909
vn -0.9230 0.3740 0.0909
vn -0.8875 0.3740 0.2692
vn -0.8179 0.3740 0.4372
vn -0.7169 0.3740 0.5884
vn -0.5884 0.3740 0.7169
vn -0.4372 0.3740 0.8179
vn -0.2692 0.3740 0.8875
vn -0.0909 0.3740 0.9230
vn 0.0909 0.3740 0.9230
vn 0.2692 0.3740 0.8875
vn 0.4372 0.3740 0.8179
vn 0.5884 0.3740 0.7169
vn 0.7169 0.3740 0.5884
vn 0.8179 0.3740 0.4372
vn 0.8875 0.3740 0.2692
vn 0.9230 0.3740 0.0909
vn 0.9230 0.3740 -0.0909
vn 0.8875 0.3740 -0.2692
vn 0.8179 0.3740 -0.4372
vn 0.7169 0.3740 -0.5884
vn 0.5884 0.3740 -0.7169
vn 0.4372 0.3740 -0.8179
vn 0.2692 0.3740 -0.8875
vn 0.0909 0.3740 -0.9230
vn 0.0000 1.0000 -0.0000
vn 0.0909 -0.3740 0.9230
vn 0.2692 -0.3740 0.8875
vn 0.4372 -0.3740 0.8179
vn 0.5884 -0.3740 0.7169
vn 0.7169 -0.3740 0.5884
vn 0.8179 -0.3740 0.4372
vn 0.8875 -0.3740 0.2692
vn 0.9230 -0.3740 0.0909
vn 0.9230 -0.3740 -0.0909
vn 0.8875 -0.3740 -0.2692
vn 0.8179 -0.3740 -0.4372
vn 0.7169 -0.3740 -0.5884
vn 0.5884 -0.3740 -0.7169
vn 0.4372 -0.3740 -0.8179
vn 0.2692 -0.3740 -0.8875
vn 0.0909 -0.3740 -0.9230
vn -0.0909 -0.3740 -0.9230
vn -0.2692 -0.3740 -0.8875
vn -0.4372 -0.3740 -0.8179
vn -0.5884 -0.3740 -0.7169
vn -0.7169 -0.3740 -0.5884
vn -0.8179 -0.3740 -0.4372
vn -0.8875 -0.3740 -0.2692
vn -0.9230 -0.3740 -0.0909
vn -0.9230 -0.3740 0.0909
vn -0.8875 -0.3740 0.2692
vn -0.8179 -0.3740 0.4372
vn -0.7169 -0.3740 0.5884
vn -0.5884 -0.3740 0.7169
vn -0.4372 -0.3740 0.8179
vn -0.2692 -0.3740 0.8875
vn -0.0909 -0.3740 0.9230
usemtl None
s off
f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1 9/9/1 10/10/1 11/11/1 12/12/1 13/13/1 14/14/1 15/15/1 16/16/1 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1 25/25/1 26/26/1 27/27/1 28/28/1 29/29/1 30/30/1 31/31/1 32/32/1
f 32/33/2 65/34/2 34/35/2 1/36/2
f 31/37/3 64/38/3 65/34/3 32/33/3
f 30/39/4 63/40/4 64/38/4 31/37/4
f 29/41/5 62/42/5 63/40/5 30/39/5
f 28/43/6 61/44/6 62/42/6 29/41/6
f 27/45/7 60/46/7 61/44/7 28/43/7
f 26/47/8 59/48/8 60/46/8 27/45/8
f 25/49/9 58/50/9 59/48/9 26/47/9
f 24/51/10 57/52/10 58/50/10 25/49/10
f 23/53/11 56/54/11 57/52/11 24/51/11
f 22/55/12 55/56/12 56/54/12 23/53/12
f 21/57/13 54/58/13 55/56/13 22/55/13
f 20/59/14 53/60/14 54/58/14 21/57/14
f 19/61/15 52/62/15 53/60/15 20/59/15
f 18/63/16 51/64/16 52/62/16 19/61/16
f 17/65/17 50/66/17 51/64/17 18/63/17
f 16/67/18 49/68/18 50/66/18 17/65/18
f 15/69/19 48/70/19 49/68/19 16/67/19
f 14/71/20 47/72/20 48/70/20 15/69/20
f 13/73/21 46/74/21 47/72/21 14/71/21
f 12/75/22 45/76/22 46/74/22 13/73/22
f 11/77/23 44/78/23 45/76/23 12/75/23
f 10/79/24 43/80/24 44/78/24 11/77/24
f 9/81/25 42/82/25 43/80/25 10/79/25
f 8/83/26 41/84/26 42/82/26 9/81/26
f 7/85/27 40/86/27 41/84/27 8/83/27
f 6/87/28 39/88/28 40/86/28 7/85/28
f 5/89/29 38/90/29 39/88/29 6/87/29
f 4/91/30 37/92/30 38/90/30 5/89/30
f 3/93/31 36/94/31 37/92/31 4/91/31
f 2/95/32 35/96/32 36/94/32 3/93/32
f 1/97/33 34/98/33 35/96/33 2/95/33
f 65/34/34 33/99/34 34/35/34
f 65/34/35 64/38/35 33/99/35
f 64/38/36 63/40/36 33/99/36
f 63/40/37 62/42/37 33/99/37
f 62/42/38 61/44/38 33/99/38
f 61/44/39 60/46/39 33/99/39
f 60/46/40 59/48/40 33/99/40
f 59/48/41 58/50/41 33/99/41
f 58/50/42 57/52/42 33/99/42
f 57/52/43 56/54/43 33/99/43
f 56/54/44 55/56/44 33/99/44
f 55/56/45 54/58/45 33/99/45
f 54/58/46 53/60/46 33/99/46
f 53/60/47 52/62/47 33/99/47
f 52/62/48 51/64/48 33/99/48
f 51/64/49 50/66/49 33/99/49
f 50/66/50 49/68/50 33/99/50
f 49/68/51 48/70/51 33/99/51
f 48/70/52 47/72/52 33/99/52
f 47/72/53 46/74/53 33/99/53
f 46/74/54 45/76/54 33/99/54
f 45/76/55 44/78/55 33/99/55
f 44/78/56 43/80/56 33/99/56
f 43/80/57 42/82/57 33/99/57
f 42/82/58 41/84/58 33/99/58
f 41/84/59 40/86/59 33/99/59
f 40/86/60 39/88/60 33/99/60
f 39/88/61 38/90/61 33/99/61
f 38/90/62 37/92/62 33/99/62
f 37/92/63 36/94/63 33/99/63
f 36/94/64 35/96/64 33/99/64
f 35/96/65 34/98/65 33/99/65
f 64/100/1 65/101/1 34/102/1 35/103/1 36/104/1 37/105/1 38/106/1 39/107/1 40/108/1 41/109/1 42/110/1 43/111/1 44/112/1 45/113/1 46/114/1 47/115/1 48/116/1 49/117/1 50/118/1 51/119/1 52/120/1 53/121/1 54/122/1 55/123/1 56/124/1 57/125/1 58/126/1 59/127/1 60/128/1 61/129/1 62/130/1 63/131/1
f 66/132/66 97/133/66 96/134/66 95/135/66 94/136/66 93/137/66 92/138/66 91/139/66 90/140/66 89/141/66 88/142/66 87/143/66 86/144/66 85/145/66 84/146/66 83/147/66 82/148/66 81/149/66 80/150/66 79/151/66 78/152/66 77/153/66 76/154/66 75/155/66 74/156/66 73/157/66 72/158/66 71/159/66 70/160/66 69/161/66 68/162/66 67/163/66
f 97/164/18 66/165/18 99/166/18 130/167/18
f 96/168/19 97/164/19 130/167/19 129/169/19
f 95/170/20 96/168/20 129/169/20 128/171/20
f 94/172/21 95/170/21 128/171/21 127/173/21
f 93/174/22 94/172/22 127/173/22 126/175/22
f 92/176/23 93/174/23 126/175/23 125/177/23
f 91/178/24 92/176/24 125/177/24 124/179/24
f 90/180/25 91/178/25 124/179/25 123/181/25
f 89/182/26 90/180/26 123/181/26 122/183/26
f 88/184/27 89/182/27 122/183/27 121/185/27
f 87/186/28 88/184/28 121/185/28 120/187/28
f 86/188/29 87/186/29 120/187/29 119/189/29
f 85/190/30 86/188/30 119/189/30 118/191/30
f 84/192/31 85/190/31 118/191/31 117/193/31
f 83/194/32 84/192/32 117/193/32 116/195/32
f 82/196/33 83/194/33 116/195/33 115/197/33
f 81/198/2 82/196/2 115/197/2 114/199/2
f 80/200/3 81/198/3 114/199/3 113/201/3
f 79/202/4 80/200/4 113/201/4 112/203/4
f 78/204/5 79/202/5 112/203/5 111/205/5
f 77/206/6 78/204/6 111/205/6 110/207/6
f 76/208/7 77/206/7 110/207/7 109/209/7
f 75/210/8 76/208/8 109/209/8 108/211/8
f 74/212/9 75/210/9 108/211/9 107/213/9
f 73/214/10 74/212/10 107/213/10 106/215/10
f 72/216/11 73/214/11 106/215/11 105/217/11
f 71/218/12 72/216/12 105/217/12 104/219/12
f 70/220/13 71/218/13 104/219/13 103/221/13
f 69/222/14 70/220/14 103/221/14 102/223/14
f 68/224/15 69/222/15 102/223/15 101/225/15
f 67/226/16 68/224/16 101/225/16 100/227/16
f 66/228/17 67/226/17 100/227/17 99/229/17
f 130/167/67 99/166/67 98/230/67
f 130/167/68 98/230/68 129/169/68
f 129/169/69 98/230/69 128/171/69
f 128/171/70 98/230/70 127/173/70
f 127/173/71 98/230/71 126/175/71
f 126/175/72 98/230/72 125/177/72
f 125/177/73 98/230/73 124/179/73
f 124/179/74 98/230/74 123/181/74
f 123/181/75 98/230/75 122/183/75
f 122/183/76 98/230/76 121/185/76
f 121/185/77 98/230/77 120/187/77
f 120/187/78 98/230/78 119/189/78
f 119/189/79 98/230/79 118/191/79
f 118/191/80 98/230/80 117/193/80
f 117/193/81 98/230/81 116/195/81
f 116/195/82 98/230/82 115/197/82
f 115/197/83 98/230/83 114/199/83
f 114/199/84 98/230/84 113/201/84
f 113/201/85 98/230/85 112/203/85
f 112/203/86 98/230/86 111/205/86
f 111/205/87 98/230/87 110/207/87
f 110/207/88 98/230/88 109/209/88
f 109/209/89 98/230/89 108/211/89
f 108/211/90 98/230/90 107/213/90
f 107/213/91 98/230/91 106/215/91
f 106/215/92 98/230/92 105/217/92
f 105/217/93 98/230/93 104/219/93
f 104/219/94 98/230/94 103/221/94
f 103/221/95 98/230/95 102/223/95
f 102/223/96 98/230/96 101/225/96
f 101/225/97 98/230/97 100/227/97
f 100/227/98 98/230/98 99/229/98
f 129/231/66 128/232/66 127/233/66 126/234/66 125/235/66 124/236/66 123/237/66 122/238/66 121/239/66 120/240/66 119/241/66 118/242/66 117/243/66 116/244/66 115/245/66 114/246/66 113/247/66 112/248/66 111/249/66 110/250/66 109/251/66 108/252/66 107/253/66 106/254/66 105/255/66 104/256/66 103/257/66 102/258/66 101/259/66 100/260/66 99/261/66 130/262/66

BIN
models/prtl_0.blend Normal file

Binary file not shown.

BIN
models/prtl_0.blend1 Normal file

Binary file not shown.

View File

@@ -1,11 +1,22 @@
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}} 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}}
stone_sounds = {}
stone_sounds.footstep = {name="stone_walk", gain=1.0}
stone_sounds.dug = {name="stone_break", gain=1.0}
stone_sounds.place = {name="block_place", gain=1.0}
glass_sounds = {}
glass_sounds.footstep = {name="glass_walk", gain=1.0}
glass_sounds.dug = {name="glass_break", gain=1.0}
glass_sounds.place = {name="block_place", gain=1.0}
wood_sounds = {}
wood_sounds.footstep = {name="wood_walk", gain=1.0}
wood_sounds.dug = {name="wood_break", gain=1.0}
wood_sounds.place = {name="block_place", gain=1.0}
minetest.register_node("portalgun:cplps1", { minetest.register_node("portalgun:cplps1", {
description = "Close player portal", description = "Close player portal",
tiles = {"portalgun_gray.png"}, tiles = {"portalgun_gray.png"},
groups = {mesecon=2,snappy = 3, not_in_creative_inventory=0}, groups = {mesecon=2,snappy = 3, not_in_creative_inventory=0},
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
is_ground_content = false, is_ground_content = false,
mesecons = {effector = { mesecons = {effector = {
action_on = function (pos, node) action_on = function (pos, node)
@@ -31,7 +42,7 @@ minetest.register_node("portalgun:cplps2", {
description = "Close player portal", description = "Close player portal",
tiles = {"portalgun_gray.png^[colorize:#ffe85977"}, tiles = {"portalgun_gray.png^[colorize:#ffe85977"},
groups = {mesecon=2,snappy = 3, not_in_creative_inventory=1}, groups = {mesecon=2,snappy = 3, not_in_creative_inventory=1},
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
is_ground_content = false, is_ground_content = false,
paramtype = "light", paramtype = "light",
light_source = 4, light_source = 4,
@@ -46,7 +57,7 @@ minetest.register_node("portalgun:sign_v", {
drop="portalgun:sign_x", drop="portalgun:sign_x",
drawtype = "nodebox", drawtype = "nodebox",
groups = {mesecon=2,snappy = 3, not_in_creative_inventory=1}, groups = {mesecon=2,snappy = 3, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(), sounds = wood_sounds,
is_ground_content = false, is_ground_content = false,
paramtype2 = "facedir", paramtype2 = "facedir",
paramtype = "light", paramtype = "light",
@@ -68,7 +79,7 @@ minetest.register_node("portalgun:sign_x", {
inventory_image = "portalgun_x.png", inventory_image = "portalgun_x.png",
drawtype = "nodebox", drawtype = "nodebox",
groups = {mesecon=2,snappy = 3, not_in_creative_inventory=0}, groups = {mesecon=2,snappy = 3, not_in_creative_inventory=0},
sounds = default.node_sound_wood_defaults(), sounds = wood_sounds,
is_ground_content = false, is_ground_content = false,
paramtype2 = "facedir", paramtype2 = "facedir",
paramtype = "light", paramtype = "light",
@@ -96,7 +107,7 @@ minetest.register_node("portalgun:portaltarget_" .. portaltarget_sig[ii][1], {
tiles = {"portalgun_testblock.png^" .. portaltarget_sig[ii][2]}, tiles = {"portalgun_testblock.png^" .. portaltarget_sig[ii][2]},
groups = {mesecon = 2,cracky=2}, groups = {mesecon = 2,cracky=2},
mesecons = {receptor = {state = "off"}}, mesecons = {receptor = {state = "off"}},
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
is_ground_content = false, is_ground_content = false,
paramtype2 = "facedir", paramtype2 = "facedir",
paramtype = "light", paramtype = "light",
@@ -128,12 +139,12 @@ minetest.register_node("portalgun:button", {
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,
selection_box = {type = "fixed",fixed = { -0.2, -0.5, -0.2, 0.2, 0.85, 0.2 }}, selection_box = {type = "fixed",fixed = { -0.2, -0.5, -0.2, 0.2, 0.85, 0.2 }},
sounds = default.node_sound_defaults(), sounds = stone_sounds,
mesecons = {receptor = {state = "off"}}, mesecons = {receptor = {state = "off"}},
on_rightclick = function(pos, node, clicker) on_rightclick = function(pos, node, clicker)
mesecon.receptor_on(pos) mesecon.receptor_on(pos)
minetest.get_node_timer(pos):start(2) minetest.get_node_timer(pos):start(2)
minetest.sound_play("default_dig_dig_immediate", {pos=pos,max_hear_distance = 10, gain = 1}) minetest.sound_play("button_press", {pos=pos,max_hear_distance = 10, gain = 1})
end, end,
on_timer = function (pos, elapsed) on_timer = function (pos, elapsed)
mesecon.receptor_off(pos) mesecon.receptor_off(pos)
@@ -158,7 +169,7 @@ minetest.register_node("portalgun:dmgblock_1", {
paramtype="light", paramtype="light",
alpha = 50, alpha = 50,
sunlight_propagates = true, sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
walkable=false, walkable=false,
damage_per_second = 5, damage_per_second = 5,
mesecons = {conductor = { mesecons = {conductor = {
@@ -218,7 +229,7 @@ minetest.register_node("portalgun:autocheckpoint", {
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
light_source = 5, light_source = 5,
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
drawtype="nodebox", drawtype="nodebox",
node_box = { node_box = {
type="fixed", type="fixed",
@@ -256,7 +267,7 @@ minetest.register_node("portalgun:powerdoor1_1", {
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
drawtype="nodebox", drawtype="nodebox",
alpha = 160, alpha = 160,
node_box = { node_box = {
@@ -311,7 +322,7 @@ minetest.register_node("portalgun:powerdoor1_2", {
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
drawtype="nodebox", drawtype="nodebox",
alpha = 160, alpha = 160,
node_box = { node_box = {
@@ -387,7 +398,7 @@ minetest.register_node("portalgun:delayer", {
description = "Delayer (Punsh to change time)", description = "Delayer (Punsh to change time)",
tiles = {"portalgun_delayer.png","portalgun_testblock.png"}, tiles = {"portalgun_delayer.png","portalgun_testblock.png"},
groups = {dig_immediate = 2,mesecon=1}, groups = {dig_immediate = 2,mesecon=1},
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
drawtype="nodebox", drawtype="nodebox",
@@ -442,7 +453,7 @@ minetest.register_node("portalgun:testblocks", {
description = "Trapblock", description = "Trapblock",
tiles = {"portalgun_testblock.png"}, tiles = {"portalgun_testblock.png"},
groups = {cracky = 1,mesecon=2}, groups = {cracky = 1,mesecon=2},
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
mesecons = {conductor = { mesecons = {conductor = {
state = mesecon.state.off, state = mesecon.state.off,
onstate = "portalgun:testblocks2", onstate = "portalgun:testblocks2",
@@ -470,7 +481,6 @@ minetest.register_node("portalgun:door_1", {
description = "Mesecon Door", description = "Mesecon Door",
drop="portalgun:door_1", drop="portalgun:door_1",
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light",
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -479,7 +489,7 @@ minetest.register_node("portalgun:door_1", {
}, },
tiles = {"portalgun_testblock.png"}, tiles = {"portalgun_testblock.png"},
groups = {mesecon=1,cracky = 1, level = 2, not_in_creative_inventory=0}, groups = {mesecon=1,cracky = 1, level = 2, not_in_creative_inventory=0},
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,
@@ -512,7 +522,6 @@ minetest.register_node("portalgun:door_2", {
description = "Door 2-1", description = "Door 2-1",
drawtype = "nodebox", drawtype = "nodebox",
drop="portalgun:door_1", drop="portalgun:door_1",
paramtype = "light",
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -521,7 +530,7 @@ minetest.register_node("portalgun:door_2", {
}, },
tiles = {"portalgun_testblock.png"}, tiles = {"portalgun_testblock.png"},
groups = {mesecon=1,cracky = 1, level = 2, not_in_creative_inventory=1}, groups = {mesecon=1,cracky = 1, level = 2, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(), sounds = wood_sounds,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,
@@ -544,7 +553,6 @@ minetest.register_node("portalgun:door_open_1", {
description = "Door (open) 2-o-1", description = "Door (open) 2-o-1",
drop="portalgun:door_1", drop="portalgun:door_1",
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light",
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -553,7 +561,7 @@ minetest.register_node("portalgun:door_open_1", {
}, },
tiles = {"portalgun_testblock.png"}, tiles = {"portalgun_testblock.png"},
groups = {mesecon=1,cracky = 1, level = 2, not_in_creative_inventory=1}, groups = {mesecon=1,cracky = 1, level = 2, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(), sounds = wood_sounds,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,
@@ -575,7 +583,6 @@ minetest.register_node("portalgun:door_open_2", {
description = "Door (open) 2-o-1", description = "Door (open) 2-o-1",
drawtype = "nodebox", drawtype = "nodebox",
drop="portalgun:door_1", drop="portalgun:door_1",
paramtype = "light",
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -584,7 +591,7 @@ minetest.register_node("portalgun:door_open_2", {
}, },
tiles = {"portalgun_testblock.png"}, tiles = {"portalgun_testblock.png"},
groups = {mesecon=1,cracky = 1, level = 2, not_in_creative_inventory=1}, groups = {mesecon=1,cracky = 1, level = 2, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(), sounds = wood_sounds,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,

View File

@@ -1,8 +1,20 @@
stone_sounds = {}
stone_sounds.footstep = {name="stone_walk", gain=1.0}
stone_sounds.dug = {name="stone_break", gain=1.0}
stone_sounds.place = {name="block_place", gain=1.0}
glass_sounds = {}
glass_sounds.footstep = {name="glass_walk", gain=1.0}
glass_sounds.dug = {name="glass_break", gain=1.0}
glass_sounds.place = {name="block_place", gain=1.0}
wood_sounds = {}
wood_sounds.footstep = {name="wood_walk", gain=1.0}
wood_sounds.dug = {name="wood_break", gain=1.0}
wood_sounds.place = {name="block_place", gain=1.0}
minetest.register_node("portalgun:powerballspawner", { minetest.register_node("portalgun:powerballspawner", {
description = "Power ball spawner" , 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"}, tiles = {"steel.png","steel.png","steel.png","steel.png","steel.png","portalgun_powerballspawner.png"},
groups = {cracky=2}, groups = {cracky=2},
sounds = default.node_sound_glass_defaults(), sounds = glass_sounds,
is_ground_content = false, is_ground_content = false,
paramtype2 = "facedir", paramtype2 = "facedir",
on_place = minetest.rotate_node, on_place = minetest.rotate_node,
@@ -29,9 +41,9 @@ minetest.register_node("portalgun:powerballspawner", {
minetest.register_node("portalgun:powerballspawner2", { minetest.register_node("portalgun:powerballspawner2", {
description = "Power ball spawner (spawn on activate)" , 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"}, tiles = {"steel.png","steel.png","steel.png","steel.png","steel.png","portalgun_powerballspawner.png^[colorize:#aaaa0055"},
groups = {cracky=2,mesecon=1}, groups = {cracky=2,mesecon=1},
sounds = default.node_sound_glass_defaults(), sounds = glass_sounds,
is_ground_content = false, is_ground_content = false,
paramtype2 = "facedir", paramtype2 = "facedir",
on_place = minetest.rotate_node, on_place = minetest.rotate_node,
@@ -66,7 +78,7 @@ minetest.register_entity("portalgun:powerball",{
initial_sprite_basepos = {x=0, y=0}, initial_sprite_basepos = {x=0, y=0},
is_visible = true, is_visible = true,
makes_footstep_sound = false, makes_footstep_sound = false,
automatic_rotate = false, automatic_rotate = 0,
portalgun=2, portalgun=2,
powerball=1, powerball=1,
on_activate= function(self, staticdata) on_activate= function(self, staticdata)
@@ -87,8 +99,6 @@ on_step= function(self, dtime)
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 2)) do 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 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:set_hp(0)
ob:punch(ob, {full_punch_interval=1.0,damage_groups={fleshy=9000}}, "default:bronze_pick", nil)
end end
end end
self.timer2=self.timer2+1 self.timer2=self.timer2+1
@@ -101,7 +111,6 @@ on_step= function(self, dtime)
if self.timer2>40 then if self.timer2>40 then
minetest.sound_stop(self.sound) minetest.sound_stop(self.sound)
self.object:set_hp(0) 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 return self
end end
local v=self.object:get_velocity() local v=self.object:get_velocity()
@@ -128,7 +137,7 @@ minetest.register_node("portalgun:powerballtarget", {
tiles = {"portalgun_powerballstarget.png"}, tiles = {"portalgun_powerballstarget.png"},
groups = {mesecon = 2,cracky=2}, groups = {mesecon = 2,cracky=2},
mesecons = {receptor = {state = "off"}}, mesecons = {receptor = {state = "off"}},
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
is_ground_content = false, is_ground_content = false,
on_timer = function (pos, elapsed) on_timer = function (pos, elapsed)
mesecon.receptor_off(pos) mesecon.receptor_off(pos)

BIN
sounds/block_place.ogg Normal file

Binary file not shown.

BIN
sounds/button_press.ogg Normal file

Binary file not shown.

BIN
sounds/glass_break.ogg Normal file

Binary file not shown.

BIN
sounds/glass_walk.ogg Normal file

Binary file not shown.

BIN
sounds/stone_break.ogg Normal file

Binary file not shown.

BIN
sounds/stone_walk.ogg Normal file

Binary file not shown.

BIN
sounds/wood_break.ogg Normal file

Binary file not shown.

BIN
sounds/wood_walk.ogg Normal file

Binary file not shown.

View File

@@ -1,3 +1,15 @@
stone_sounds = {}
stone_sounds.footstep = {name="stone_walk", gain=1.0}
stone_sounds.dug = {name="stone_break", gain=1.0}
stone_sounds.place = {name="block_place", gain=1.0}
glass_sounds = {}
glass_sounds.footstep = {name="glass_walk", gain=1.0}
glass_sounds.dug = {name="glass_break", gain=1.0}
glass_sounds.place = {name="block_place", gain=1.0}
wood_sounds = {}
wood_sounds.footstep = {name="wood_walk", gain=1.0}
wood_sounds.dug = {name="wood_break", gain=1.0}
wood_sounds.place = {name="block_place", gain=1.0}
local snuma=1 local snuma=1
for ii = 0, 9, 1 do for ii = 0, 9, 1 do
if ii==1 then snuma=0 end if ii==1 then snuma=0 end
@@ -7,7 +19,7 @@ minetest.register_node("portalgun:sign_numa".. ii, {
drop="portalgun:sign_numa1", drop="portalgun:sign_numa1",
drawtype = "nodebox", drawtype = "nodebox",
groups = {mesecon=2,portalnuma=1,dig_immediate = 3, not_in_creative_inventory=snuma}, groups = {mesecon=2,portalnuma=1,dig_immediate = 3, not_in_creative_inventory=snuma},
sounds = default.node_sound_wood_defaults(), sounds = wood_sounds,
is_ground_content = false, is_ground_content = false,
paramtype2 = "facedir", paramtype2 = "facedir",
paramtype = "light", paramtype = "light",
@@ -51,7 +63,7 @@ minetest.register_node("portalgun:sign_numb".. ii, {
drop="portalgun:sign_numa1", drop="portalgun:sign_numa1",
drawtype = "nodebox", drawtype = "nodebox",
groups = {mesecon=2,portalnumb=1,dig_immediate = 3, not_in_creative_inventory=1}, groups = {mesecon=2,portalnumb=1,dig_immediate = 3, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(), sounds = wood_sounds,
is_ground_content = false, is_ground_content = false,
paramtype2 = "facedir", paramtype2 = "facedir",
paramtype = "light", paramtype = "light",
@@ -87,7 +99,7 @@ minetest.register_node("portalgun:turretgun2", {
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,
sounds = default.node_sound_defaults(), sounds = stone_sounds,
tiles = {"portalgun_sentry_turret.png"}, tiles = {"portalgun_sentry_turret.png"},
drawtype = "mesh", drawtype = "mesh",
mesh="torret2.obj", mesh="torret2.obj",
@@ -152,7 +164,7 @@ minetest.register_node("portalgun:turretgun", {
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,
sounds = default.node_sound_defaults(), sounds = stone_sounds,
tiles = {"portalgun_sentry_turret.png"}, tiles = {"portalgun_sentry_turret.png"},
drawtype = "mesh", drawtype = "mesh",
mesh="torret1.obj", mesh="torret1.obj",
@@ -207,6 +219,22 @@ minetest.register_node("portalgun:turretgun", {
end end
}) })
--giveitems register_chatcommand
minetest.register_chatcommand("giveitems", {
description = "Give items to player",
privs = {give=true},
func = function(name)
local player = minetest.get_player_by_name(name)
if player then
--give all items that dont have not_in_creative_inventory=1
for i,v in pairs(minetest.registered_items) do
if v.not_in_creative_inventory==nil or v.not_in_creative_inventory==0 then
player:get_inventory():add_item("main",i.." 1")
end
end
end
end,
})
minetest.register_node("portalgun:warntape", { minetest.register_node("portalgun:warntape", {
description = "Warntape", description = "Warntape",
@@ -214,7 +242,7 @@ minetest.register_node("portalgun:warntape", {
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,
sounds = default.node_sound_defaults(), sounds = stone_sounds,
tiles = {"portalgun_warntape.png",}, tiles = {"portalgun_warntape.png",},
walkable = false, walkable = false,
drawtype = "nodebox", drawtype = "nodebox",
@@ -231,7 +259,6 @@ minetest.register_node("portalgun:toxwater_1", {
description = "Toxic water", description = "Toxic water",
drawtype = "liquid", drawtype = "liquid",
tiles = {"portalgun_toxwat.png"}, tiles = {"portalgun_toxwat.png"},
post_effect_color = {a = 200, r = 119, g = 70, b = 16},
alpha = 190, alpha = 190,
paramtype = "light", paramtype = "light",
walkable = false, walkable = false,
@@ -250,13 +277,11 @@ minetest.register_node("portalgun:toxwater_1", {
liquid_range = 3, liquid_range = 3,
post_effect_color = {a = 200, r = 119, g = 70, b = 16}, post_effect_color = {a = 200, r = 119, g = 70, b = 16},
groups = {water = 3, liquid = 3}, groups = {water = 3, liquid = 3},
sounds = default.node_sound_water_defaults(),
}) })
minetest.register_node("portalgun:toxwater_2", { minetest.register_node("portalgun:toxwater_2", {
description = "Toxic water 2", description = "Toxic water 2",
drawtype = "flowingliquid", drawtype = "flowingliquid",
tiles = {"portalgun_toxwat.png"},
tiles = {name = "portalgun_toxwat.png",backface_culling=false}, tiles = {name = "portalgun_toxwat.png",backface_culling=false},
special_tiles = {{name = "portalgun_toxwat.png",backface_culling=true},{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, alpha = 190,
@@ -277,8 +302,7 @@ minetest.register_node("portalgun:toxwater_2", {
liquid_renewable = false, liquid_renewable = false,
liquid_range = 3, liquid_range = 3,
post_effect_color = {a = 200, r = 119, g = 70, b = 16}, post_effect_color = {a = 200, r = 119, g = 70, b = 16},
groups = {water = 3, liquid = 3, not_in_creative_inventory = 1}, groups = {water = 3, liquid = 3, not_in_creative_inventory = 1}
sounds = default.node_sound_water_defaults(),
}) })
minetest.register_tool("portalgun:ed", { minetest.register_tool("portalgun:ed", {
@@ -301,7 +325,6 @@ on_use = function(itemstack, user, pointed_thing)
for ii, ob in pairs(minetest.get_objects_inside_radius(pos, 7)) do for ii, ob in pairs(minetest.get_objects_inside_radius(pos, 7)) do
if ob:get_luaentity() then if ob:get_luaentity() then
ob:set_hp(0) ob:set_hp(0)
ob:punch(ob, {full_punch_interval=1.0,damage_groups={fleshy=9000}}, "default:bronze_pick", nil)
end end
end end
return itemstack return itemstack
@@ -314,10 +337,10 @@ minetest.register_node("portalgun:cake", {
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
selection_box = {type = "fixed",fixed = { -0.3, -0.5, -0.3, 0.3, 0, 0.3 }}, selection_box = {type = "fixed",fixed = { -0.3, -0.5, -0.3, 0.3, 0, 0.3 }},
sounds = default.node_sound_defaults(), sounds = stone_sounds,
tiles = { tiles = {
"default_dirt.png^portalgun_cake1.png", "dirt.png^portalgun_cake1.png",
"default_dirt.png^portalgun_cake2.png", "dirt.png^portalgun_cake2.png",
}, },
drawtype = "nodebox", drawtype = "nodebox",
node_box = { node_box = {
@@ -342,14 +365,14 @@ minetest.register_node("portalgun:testblock", {
description = "Test block", description = "Test block",
tiles = {"portalgun_testblock.png"}, tiles = {"portalgun_testblock.png"},
groups = {cracky = 1}, groups = {cracky = 1},
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
}) })
minetest.register_node("portalgun:apb", { minetest.register_node("portalgun:apb", {
description = "Anti portal block", description = "Anti portal block",
tiles = {"portalgun_testblock.png^[colorize:#ffffffaa"}, tiles = {"portalgun_testblock.png^[colorize:#ffffffaa"},
groups = {cracky = 3,antiportal=1}, groups = {cracky = 3,antiportal=1},
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
}) })
minetest.register_node("portalgun:apg", { minetest.register_node("portalgun:apg", {
@@ -357,18 +380,18 @@ minetest.register_node("portalgun:apg", {
drawtype="glasslike", drawtype="glasslike",
paramtype="light", paramtype="light",
sunlight_propagates = true, sunlight_propagates = true,
tiles = {"default_glass.png^[colorize:#ffffffaa"}, tiles = {"glass.png^[colorize:#ffffffaa"},
groups = {cracky = 1,antiportal=1}, groups = {cracky = 1,antiportal=1},
sounds = default.node_sound_glass_defaults(), sounds = glass_sounds,
}) })
minetest.register_node("portalgun:hard_glass", { minetest.register_node("portalgun:hard_glass", {
description = "Hard glass", description = "Hard glass",
drawtype="glasslike", drawtype="glasslike",
paramtype="light", paramtype="light",
sunlight_propagates = true, sunlight_propagates = true,
tiles = {"default_glass.png^[colorize:#ddddddaa"}, tiles = {"glass.png^[colorize:#ddddddaa"},
groups = {cracky = 1}, groups = {cracky = 1},
sounds = default.node_sound_glass_defaults(), sounds = glass_sounds,
}) })
function portalgun_visiable(pos,ob) function portalgun_visiable(pos,ob)
@@ -428,7 +451,7 @@ minetest.register_node("portalgun:secam_off", {
drawtype = "nodebox", drawtype = "nodebox",
walkable=false, walkable=false,
groups = {dig_immediate = 3}, groups = {dig_immediate = 3},
sounds = default.node_sound_glass_defaults(), sounds = glass_sounds,
is_ground_content = false, is_ground_content = false,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
@@ -452,7 +475,7 @@ minetest.register_node("portalgun:secam", {
drawtype = "nodebox", drawtype = "nodebox",
walkable=false, walkable=false,
groups = {dig_immediate = 3,stone=1,not_in_creative_inventory=1}, groups = {dig_immediate = 3,stone=1,not_in_creative_inventory=1},
sounds = default.node_sound_glass_defaults(), sounds = glass_sounds,
is_ground_content = false, is_ground_content = false,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
@@ -485,14 +508,28 @@ on_timer=function(pos, elapsed)
end, end,
}) })
--register command for admins to build a testblock at the players position
minetest.register_chatcommand("testblock", {
params = "",
description = "builds a testblock at the players position",
privs = {server=true},
func = function(name, param)
local player = minetest.get_player_by_name(name)
local pos = player:get_pos()
minetest.set_node(pos, {name = "portalgun:testblock"})
end,
})
minetest.register_entity("portalgun:bullet1",{ minetest.register_entity("portalgun:bullet1",{
hp_max = 1, hp_max = 1,
--physical = true, --physical = true,
--collisionbox={-0.01,-0.01,-0.01,0.01,0.01,0.01}, --collisionbox={-0.01,-0.01,-0.01,0.01,0.01,0.01},
pointable=false, pointable=false,
visual = "sprite", visual = "mesh",
mesh = "bullet.obj",
--yellow color as tiles
tiles = {"#color[yellow]"},
visual_size = {x=0.1, y=0.1}, visual_size = {x=0.1, y=0.1},
textures = {"default_mese_block.png"},
initial_sprite_basepos = {x=0, y=0}, initial_sprite_basepos = {x=0, y=0},
portalgun=2, portalgun=2,
bullet=1, bullet=1,
@@ -506,9 +543,12 @@ on_step= function(self, dtime)
return return
end end
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 1.5)) do 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 if ob:is_player() then
ob:set_hp(ob:get_hp()-7) if ob:get_hp() > 2 then
ob:punch(self.object, 1,{full_punch_interval=1.0,damage_groups={fleshy=4}}, "default:bronze_pick", nil) ob:set_hp(ob:get_hp()-2)
else
ob:set_hp(0)
end
self.object:remove() self.object:remove()
return return
end end
@@ -524,7 +564,7 @@ minetest.register_node("portalgun:sign1", {
inventory_image = "portalgun_testblock.png^portalgun_sign1.png", inventory_image = "portalgun_testblock.png^portalgun_sign1.png",
drawtype = "nodebox", drawtype = "nodebox",
groups = {snappy = 3, not_in_creative_inventory=0}, groups = {snappy = 3, not_in_creative_inventory=0},
sounds = default.node_sound_wood_defaults(), sounds = wood_sounds,
is_ground_content = false, is_ground_content = false,
paramtype2 = "facedir", paramtype2 = "facedir",
paramtype = "light", paramtype = "light",
@@ -539,7 +579,7 @@ minetest.register_node("portalgun:sign2", {
inventory_image = "portalgun_testblock.png^portalgun_sign2.png", inventory_image = "portalgun_testblock.png^portalgun_sign2.png",
drawtype = "nodebox", drawtype = "nodebox",
groups = {snappy = 3, not_in_creative_inventory=0}, groups = {snappy = 3, not_in_creative_inventory=0},
sounds = default.node_sound_wood_defaults(), sounds = wood_sounds,
is_ground_content = false, is_ground_content = false,
paramtype2 = "facedir", paramtype2 = "facedir",
paramtype = "light", paramtype = "light",

BIN
textures/cloud.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

BIN
textures/dirt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 B

BIN
textures/glass.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
textures/steel.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

View File

@@ -1,4 +1,15 @@
stone_sounds = {}
stone_sounds.footstep = {name="stone_walk", gain=1.0}
stone_sounds.dug = {name="stone_break", gain=1.0}
stone_sounds.place = {name="block_place", gain=1.0}
glass_sounds = {}
glass_sounds.footstep = {name="glass_walk", gain=1.0}
glass_sounds.dug = {name="glass_break", gain=1.0}
glass_sounds.place = {name="block_place", gain=1.0}
wood_sounds = {}
wood_sounds.footstep = {name="wood_walk", gain=1.0}
wood_sounds.dug = {name="wood_break", gain=1.0}
wood_sounds.place = {name="block_place", gain=1.0}
local ptgwsc={ local ptgwsc={
{"weightedstoragecube.png","portalgun_presplat.png","(blue)"}, {"weightedstoragecube.png","portalgun_presplat.png","(blue)"},
{"weightedstoragecube2.png","portalgun_presplat2.png","(orange)"}, {"weightedstoragecube2.png","portalgun_presplat2.png","(orange)"},
@@ -26,13 +37,12 @@ end,
minetest.register_node("portalgun:wscspawner2_" .. ii, { minetest.register_node("portalgun:wscspawner2_" .. ii, {
description = "Weighted storage cube spawner2 " ..ptgwsc[ii][3], 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]}, tiles = {"steel.png","steel.png","steel.png","steel.png","steel.png",ptgwsc[ii][1]},
groups = {cracky=2,mesecon_receptor_off = 1, mesecon_effector_off = 1}, groups = {cracky=2,mesecon_receptor_off = 1, mesecon_effector_off = 1},
mesecons = {receptor = {state = "off"}}, sounds = glass_sounds,
sounds = default.node_sound_glass_defaults(),
is_ground_content = false, is_ground_content = false,
paramtype2 = "facedir", paramtype2 = "facedir",
mesecons = {effector = { mesecons = {receptor = {state = "off"}, effector = {
action_on = function (pos, node) action_on = function (pos, node)
local dir=minetest.get_node(pos).param2 local dir=minetest.get_node(pos).param2
local v={x=0, y=0, z=0} local v={x=0, y=0, z=0}
@@ -62,7 +72,7 @@ minetest.register_entity("portalgun:wsc" ..ii,{
initial_sprite_basepos = {x=0, y=0}, initial_sprite_basepos = {x=0, y=0},
is_visible = true, is_visible = true,
makes_footstep_sound = true, makes_footstep_sound = true,
automatic_rotate = false, automatic_rotate = 0,
portalgun=2, portalgun=2,
wsc=ii, wsc=ii,
on_activate= function(self, staticdata) on_activate= function(self, staticdata)
@@ -78,7 +88,7 @@ on_step= function(self, dtime)
self.timer=0 self.timer=0
self.object:set_acceleration({x=0, y=-10, z=0}) self.object:set_acceleration({x=0, y=-10, z=0})
self.timer2=self.timer2+1 self.timer2=self.timer2+1
if self.timer2>10 then if self.timer2>4 then
self.timer2=0 self.timer2=0
for i, ob in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 20)) do for i, ob in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 20)) do
if ob:is_player() then if ob:is_player() then
@@ -86,7 +96,6 @@ on_step= function(self, dtime)
end end
end end
self.object:set_hp(0) self.object:set_hp(0)
self.object:punch(self.object, 1, "default:bronze_pick", nil)
end end
end, end,
timer=0, timer=0,
@@ -100,8 +109,8 @@ minetest.register_node("portalgun:wscspawner"..ii, {
paramtype = "light", paramtype = "light",
paramtype2="facedir", paramtype2="facedir",
sunlight_propagates = true, sunlight_propagates = true,
light_source = default.LIGHT_MAX - 1, light_source = 14,
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
drawtype="nodebox", drawtype="nodebox",
node_box = { node_box = {
type = "fixed", type = "fixed",
@@ -131,12 +140,12 @@ minetest.register_node("portalgun:wscspawner"..ii, {
minetest.register_node("portalgun:plantform1_" ..ii, { minetest.register_node("portalgun:plantform1_" ..ii, {
description = "Pressure platform " .. ptgwsc[ii][3], 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"}, tiles = {ptgwsc[ii][2],"cloud.png","cloud.png","cloud.png","cloud.png","cloud.png"},
groups = {mesecon = 2,cracky = 1, not_in_creative_inventory=0}, groups = {mesecon = 2,cracky = 1, not_in_creative_inventory=0},
mesecons = {receptor = {state = "off"}}, mesecons = {receptor = {state = "off"}},
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
drawtype="nodebox", drawtype="nodebox",
node_box = { node_box = {
type = "fixed", type = "fixed",
@@ -168,14 +177,14 @@ minetest.register_node("portalgun:plantform1_" ..ii, {
minetest.register_node("portalgun:plantform2_"..ii, { minetest.register_node("portalgun:plantform2_"..ii, {
description = "Pressure platform", description = "Pressure platform",
tiles = {ptgwsc[ii][2],"default_cloud.png","default_cloud.png","default_cloud.png","default_cloud.png","default_cloud.png"}, tiles = {ptgwsc[ii][2],"cloud.png","cloud.png","cloud.png","cloud.png","cloud.png"},
drop="portalgun:plantform1_"..ii, drop="portalgun:plantform1_"..ii,
groups = {mesecon = 2,cracky = 1, not_in_creative_inventory=1}, groups = {mesecon = 2,cracky = 1, not_in_creative_inventory=1},
mesecons = {receptor = {state = "on"}}, mesecons = {receptor = {state = "on"}},
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
light_source = default.LIGHT_MAX - 1, light_source = 14,
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
drawtype="nodebox", drawtype="nodebox",
node_box = { node_box = {
type = "fixed", type = "fixed",
@@ -209,12 +218,12 @@ end -- of for #
minetest.register_node("portalgun:plantform_nu1", { minetest.register_node("portalgun:plantform_nu1", {
description = "Pressure platform (player or cube)", 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"}, tiles = {"portalgun_presplat5.png","cloud.png","cloud.png","cloud.png","cloud.png","cloud.png"},
groups = {mesecon = 2,cracky = 1, not_in_creative_inventory=0}, groups = {mesecon = 2,cracky = 1, not_in_creative_inventory=0},
mesecons = {receptor = {state = "off"}}, mesecons = {receptor = {state = "off"}},
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
drawtype="nodebox", drawtype="nodebox",
node_box = { node_box = {
type = "fixed", type = "fixed",
@@ -246,14 +255,14 @@ minetest.register_node("portalgun:plantform_nu1", {
minetest.register_node("portalgun:plantform_nu2", { minetest.register_node("portalgun:plantform_nu2", {
description = "Pressure platform", description = "Pressure platform",
tiles = {"portalgun_presplat5.png","default_cloud.png","default_cloud.png","default_cloud.png","default_cloud.png","default_cloud.png"}, tiles = {"portalgun_presplat5.png","cloud.png","cloud.png","cloud.png","cloud.png","cloud.png"},
drop="portalgun:plantform_nu1", drop="portalgun:plantform_nu1",
groups = {mesecon = 2,cracky = 1, not_in_creative_inventory=1}, groups = {mesecon = 2,cracky = 1, not_in_creative_inventory=1},
mesecons = {receptor = {state = "on"}}, mesecons = {receptor = {state = "on"}},
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
light_source = default.LIGHT_MAX - 1, light_source = 14,
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
drawtype="nodebox", drawtype="nodebox",
node_box = { node_box = {
type = "fixed", type = "fixed",
@@ -284,12 +293,12 @@ minetest.register_node("portalgun:plantform_nu2", {
minetest.register_node("portalgun:planthole", { minetest.register_node("portalgun:planthole", {
description = "Plathole (activate by any cube, 2 blocks under)", description = "Plathole (activate by any cube, 2 blocks under)",
tiles = {"default_cloud.png"}, tiles = {"cloud.png"},
groups = {mesecon = 2,cracky = 1}, groups = {mesecon = 2,cracky = 1},
mesecons = {receptor = {state = "off"}}, mesecons = {receptor = {state = "off"}},
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
drawtype="nodebox", drawtype="nodebox",
node_box = { node_box = {
type = "fixed", type = "fixed",
@@ -326,14 +335,13 @@ minetest.register_node("portalgun:objdestroyer_1", {
description = "Object destroyer (destroys on active)", description = "Object destroyer (destroys on active)",
tiles = {"portalgun_testblock.png^[colorize:#FF0000aa"}, tiles = {"portalgun_testblock.png^[colorize:#FF0000aa"},
groups = {cracky = 2,mesecon=1}, groups = {cracky = 2,mesecon=1},
sounds = default.node_sound_stone_defaults(), sounds = stone_sounds,
mesecons = {effector = { mesecons = {effector = {
action_on = function (pos, node) action_on = function (pos, node)
minetest.set_node(pos, {name ="portalgun:objdestroyer_2"}) minetest.set_node(pos, {name ="portalgun:objdestroyer_2"})
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 5)) do for i, ob in pairs(minetest.get_objects_inside_radius(pos, 5)) do
if ob:get_luaentity() then if ob:get_luaentity() then
ob:set_hp(0) ob:set_hp(0)
ob:punch(ob, {full_punch_interval=1.0,damage_groups={fleshy=9000}}, "default:bronze_pick", nil)
end end
end end
end end
@@ -346,7 +354,7 @@ minetest.register_node("portalgun:objdestroyer_2", {
sunlight_propagates = true, sunlight_propagates = true,
drop="portalgun:objdestroyer_1", drop="portalgun:objdestroyer_1",
paramtype="light", paramtype="light",
light_source = default.LIGHT_MAX - 1, light_source = 14,
mesecons = {conductor = { mesecons = {conductor = {
state = mesecon.state.on, state = mesecon.state.on,
offstate = "portalgun:objdestroyer_1", offstate = "portalgun:objdestroyer_1",