Reset mesecons to 8 Dec
0
mods/mesecons/.gitignore
vendored
Executable file → Normal file
@ -30,14 +30,6 @@ mesecon.rules.flat =
|
|||||||
{x =-1, y = 0, z = 0},
|
{x =-1, y = 0, z = 0},
|
||||||
{x = 0, y = 0, z = 1},
|
{x = 0, y = 0, z = 1},
|
||||||
{x = 0, y = 0, z =-1}}
|
{x = 0, y = 0, z =-1}}
|
||||||
|
|
||||||
mesecon.rules.alldirs =
|
|
||||||
{{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}}
|
|
||||||
|
|
||||||
mesecon.rules.buttonlike_get = function(node)
|
mesecon.rules.buttonlike_get = function(node)
|
||||||
local rules = mesecon.rules.buttonlike
|
local rules = mesecon.rules.buttonlike
|
||||||
|
@ -28,11 +28,13 @@ mesecon.on_placenode = function (pos, node)
|
|||||||
-- Effectors: Send changesignal and activate or deactivate
|
-- Effectors: Send changesignal and activate or deactivate
|
||||||
if mesecon.is_effector(node.name) then
|
if mesecon.is_effector(node.name) then
|
||||||
local powered_rules = {}
|
local powered_rules = {}
|
||||||
|
local unpowered_rules = {}
|
||||||
|
|
||||||
-- for each input rule, check if powered
|
-- for each input rule, check if powered
|
||||||
for _, r in ipairs(mesecon.effector_get_rules(node)) do
|
for _, r in ipairs(mesecon.effector_get_rules(node)) do
|
||||||
local powered = mesecon.is_powered(pos, r)
|
local powered = mesecon.is_powered(pos, r)
|
||||||
if powered then table.insert(powered_rules, r) end
|
if powered then table.insert(powered_rules, r)
|
||||||
|
else table.insert(unpowered_rules, r) end
|
||||||
|
|
||||||
local state = powered and mesecon.state.on or mesecon.state.off
|
local state = powered and mesecon.state.on or mesecon.state.off
|
||||||
mesecon.changesignal(pos, node, r, state, 1)
|
mesecon.changesignal(pos, node, r, state, 1)
|
||||||
@ -42,6 +44,10 @@ mesecon.on_placenode = function (pos, node)
|
|||||||
for _, r in ipairs(powered_rules) do
|
for _, r in ipairs(powered_rules) do
|
||||||
mesecon.activate(pos, node, r, 1)
|
mesecon.activate(pos, node, r, 1)
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
for _, r in ipairs(unpowered_rules) do
|
||||||
|
mesecon.deactivate(pos, node, r, 1)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
-- SETTINGS
|
-- SETTINGS
|
||||||
function mesecon.setting(setting, default)
|
function mesecon.setting(setting, default)
|
||||||
if type(default) == "bool" then
|
if type(default) == "bool" then
|
||||||
return minetest.setting_getbool("mesecon."..setting) or default
|
return minetest.setting_getbool("mesecon."..setting) or default
|
||||||
elseif type(default) == "string" then
|
elseif type(default) == "string" then
|
||||||
return minetest.setting_get("mesecon."..setting) or default
|
return minetest.setting_get("mesecon."..setting) or default
|
||||||
elseif type(default) == "number" then
|
elseif type(default) == "number" then
|
||||||
return tonumber(minetest.setting_get("mesecon."..setting) or default)
|
return tonumber(minetest.setting_get("mesecon."..setting) or default)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -6,6 +6,18 @@ function mesecon.move_node(pos, newpos)
|
|||||||
minetest.get_meta(pos):from_table(meta)
|
minetest.get_meta(pos):from_table(meta)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--[[ new functions:
|
||||||
|
mesecon.flattenrules(allrules)
|
||||||
|
mesecon.rule2bit(findrule, allrules)
|
||||||
|
mesecon.rule2meta(findrule, allrules)
|
||||||
|
dec2bin(n)
|
||||||
|
mesecon.getstate(nodename, states)
|
||||||
|
mesecon.getbinstate(nodename, states)
|
||||||
|
mesecon.get_bit(binary, bit)
|
||||||
|
mesecon.set_bit(binary, bit, value)
|
||||||
|
mesecon.invertRule(r)
|
||||||
|
--]]
|
||||||
|
|
||||||
function mesecon.flattenrules(allrules)
|
function mesecon.flattenrules(allrules)
|
||||||
--[[
|
--[[
|
||||||
{
|
{
|
||||||
@ -59,6 +71,7 @@ end
|
|||||||
|
|
||||||
function mesecon.rule2metaindex(findrule, allrules)
|
function mesecon.rule2metaindex(findrule, allrules)
|
||||||
--get the metarule the rule is in, or allrules
|
--get the metarule the rule is in, or allrules
|
||||||
|
|
||||||
if allrules[1].x then
|
if allrules[1].x then
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
@ -77,8 +90,6 @@ function mesecon.rule2metaindex(findrule, allrules)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.rule2meta(findrule, allrules)
|
function mesecon.rule2meta(findrule, allrules)
|
||||||
if #allrules == 0 then return {} end
|
|
||||||
|
|
||||||
local index = mesecon.rule2metaindex(findrule, allrules)
|
local index = mesecon.rule2metaindex(findrule, allrules)
|
||||||
if index == nil then
|
if index == nil then
|
||||||
if allrules[1].x then
|
if allrules[1].x then
|
||||||
@ -90,12 +101,21 @@ function mesecon.rule2meta(findrule, allrules)
|
|||||||
return allrules[index]
|
return allrules[index]
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.dec2bin(n)
|
if convert_base then
|
||||||
local x, y = math.floor(n / 2), n % 2
|
print(
|
||||||
if (n > 1) then
|
"base2dec is tonumber(num,base1)\n"..
|
||||||
return mesecon.dec2bin(x)..y
|
"commonlib needs dec2base(num,base2)\n"..
|
||||||
else
|
"and it needs base2base(num,base1,base2),\n"..
|
||||||
return ""..y
|
"which is dec2base(tonumber(num,base1),base2)"
|
||||||
|
)
|
||||||
|
else
|
||||||
|
function dec2bin(n)
|
||||||
|
local x, y = math.floor(n / 2), n % 2
|
||||||
|
if (n > 1) then
|
||||||
|
return dec2bin(x)..y
|
||||||
|
else
|
||||||
|
return ""..y
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -109,7 +129,7 @@ function mesecon.getstate(nodename, states)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.getbinstate(nodename, states)
|
function mesecon.getbinstate(nodename, states)
|
||||||
return mesecon.dec2bin(mesecon.getstate(nodename, states)-1)
|
return dec2bin(mesecon.getstate(nodename, states)-1)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.get_bit(binary,bit)
|
function mesecon.get_bit(binary,bit)
|
||||||
@ -121,11 +141,11 @@ end
|
|||||||
function mesecon.set_bit(binary,bit,value)
|
function mesecon.set_bit(binary,bit,value)
|
||||||
if value == "1" then
|
if value == "1" then
|
||||||
if not mesecon.get_bit(binary,bit) then
|
if not mesecon.get_bit(binary,bit) then
|
||||||
return mesecon.dec2bin(tonumber(binary,2)+math.pow(2,bit-1))
|
return dec2bin(tonumber(binary,2)+math.pow(2,bit-1))
|
||||||
end
|
end
|
||||||
elseif value == "0" then
|
elseif value == "0" then
|
||||||
if mesecon.get_bit(binary,bit) then
|
if mesecon.get_bit(binary,bit) then
|
||||||
return mesecon.dec2bin(tonumber(binary,2)-math.pow(2,bit-1))
|
return dec2bin(tonumber(binary,2)-math.pow(2,bit-1))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return binary
|
return binary
|
||||||
|
@ -47,5 +47,5 @@ minetest.register_craft({
|
|||||||
output = "mesecons_blinkyplant:blinky_plant_off 1",
|
output = "mesecons_blinkyplant:blinky_plant_off 1",
|
||||||
recipe = { {"","group:mesecon_conductor_craftable",""},
|
recipe = { {"","group:mesecon_conductor_craftable",""},
|
||||||
{"","group:mesecon_conductor_craftable",""},
|
{"","group:mesecon_conductor_craftable",""},
|
||||||
{"group:sapling","group:sapling","group:sapling"}}
|
{"default:sapling","default:sapling","default:sapling"}}
|
||||||
})
|
})
|
||||||
|
@ -1,195 +1,195 @@
|
|||||||
minetest.register_chatcommand("say", {
|
minetest.register_chatcommand("say", {
|
||||||
params = "<text>",
|
params = "<text>",
|
||||||
description = "Say <text> as the server",
|
description = "Say <text> as the server",
|
||||||
privs = {server=true},
|
privs = {server=true},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
minetest.chat_send_all(name .. ": " .. param)
|
minetest.chat_send_all(name .. ": " .. param)
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_chatcommand("tell", {
|
minetest.register_chatcommand("tell", {
|
||||||
params = "<name> <text>",
|
params = "<name> <text>",
|
||||||
description = "Say <text> to <name> privately",
|
description = "Say <text> to <name> privately",
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
local found, _, target, message = param:find("^([^%s]+)%s+(.*)$")
|
local found, _, target, message = param:find("^([^%s]+)%s+(.*)$")
|
||||||
if found == nil then
|
if found == nil then
|
||||||
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if not minetest.get_player_by_name(target) then
|
if not minetest.get_player_by_name(target) then
|
||||||
minetest.chat_send_player(name, "Invalid target: " .. target)
|
minetest.chat_send_player(name, "Invalid target: " .. target)
|
||||||
end
|
end
|
||||||
minetest.chat_send_player(target, name .. " whispers: " .. message, false)
|
minetest.chat_send_player(target, name .. " whispers: " .. message, false)
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_chatcommand("hp", {
|
minetest.register_chatcommand("hp", {
|
||||||
params = "<name> <value>",
|
params = "<name> <value>",
|
||||||
description = "Set health of <name> to <value> hitpoints",
|
description = "Set health of <name> to <value> hitpoints",
|
||||||
privs = {ban=true},
|
privs = {ban=true},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
local found, _, target, value = param:find("^([^%s]+)%s+(%d+)$")
|
local found, _, target, value = param:find("^([^%s]+)%s+(%d+)$")
|
||||||
if found == nil then
|
if found == nil then
|
||||||
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local player = minetest.get_player_by_name(target)
|
local player = minetest.get_player_by_name(target)
|
||||||
if player then
|
if player then
|
||||||
player:set_hp(value)
|
player:set_hp(value)
|
||||||
else
|
else
|
||||||
minetest.chat_send_player(name, "Invalid target: " .. target)
|
minetest.chat_send_player(name, "Invalid target: " .. target)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
local function initialize_data(meta)
|
local function initialize_data(meta)
|
||||||
local commands = meta:get_string("commands")
|
local commands = meta:get_string("commands")
|
||||||
meta:set_string("formspec",
|
meta:set_string("formspec",
|
||||||
"invsize[9,5;]" ..
|
"invsize[9,5;]" ..
|
||||||
"textarea[0.5,0.5;8.5,4;commands;Commands;"..commands.."]" ..
|
"textarea[0.5,0.5;8.5,4;commands;Commands;"..commands.."]" ..
|
||||||
"label[1,3.8;@nearest, @farthest, and @random are replaced by the respective player names]" ..
|
"label[1,3.8;@nearest, @farthest, and @random are replaced by the respective player names]" ..
|
||||||
"button_exit[3.3,4.5;2,1;submit;Submit]")
|
"button_exit[3.3,4.5;2,1;submit;Submit]")
|
||||||
local owner = meta:get_string("owner")
|
local owner = meta:get_string("owner")
|
||||||
if owner == "" then
|
if owner == "" then
|
||||||
owner = "not owned"
|
owner = "not owned"
|
||||||
else
|
else
|
||||||
owner = "owned by " .. owner
|
owner = "owned by " .. owner
|
||||||
end
|
end
|
||||||
meta:set_string("infotext", "Command Block\n" ..
|
meta:set_string("infotext", "Command Block\n" ..
|
||||||
"(" .. owner .. ")\n" ..
|
"(" .. owner .. ")\n" ..
|
||||||
"Commands: "..commands)
|
"Commands: "..commands)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function construct(pos)
|
local function construct(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
|
||||||
meta:set_string("commands", "tell @nearest Commandblock unconfigured")
|
meta:set_string("commands", "tell @nearest Commandblock unconfigured")
|
||||||
|
|
||||||
meta:set_string("owner", "")
|
meta:set_string("owner", "")
|
||||||
|
|
||||||
initialize_data(meta)
|
initialize_data(meta)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function after_place(pos, placer)
|
local function after_place(pos, placer)
|
||||||
if placer then
|
if placer then
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("owner", placer:get_player_name())
|
meta:set_string("owner", placer:get_player_name())
|
||||||
initialize_data(meta)
|
initialize_data(meta)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function receive_fields(pos, formname, fields, sender)
|
local function receive_fields(pos, formname, fields, sender)
|
||||||
if not fields.submit then
|
if not fields.submit then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local owner = meta:get_string("owner")
|
local owner = meta:get_string("owner")
|
||||||
if owner ~= "" and sender:get_player_name() ~= owner then
|
if owner ~= "" and sender:get_player_name() ~= owner then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
meta:set_string("commands", fields.commands)
|
meta:set_string("commands", fields.commands)
|
||||||
|
|
||||||
initialize_data(meta)
|
initialize_data(meta)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function resolve_commands(commands, pos)
|
local function resolve_commands(commands, pos)
|
||||||
local nearest, farthest = nil, nil
|
local nearest, farthest = nil, nil
|
||||||
local min_distance, max_distance = math.huge, -1
|
local min_distance, max_distance = math.huge, -1
|
||||||
local players = minetest.get_connected_players()
|
local players = minetest.get_connected_players()
|
||||||
for index, player in pairs(players) do
|
for index, player in pairs(players) do
|
||||||
local distance = vector.distance(pos, player:getpos())
|
local distance = vector.distance(pos, player:getpos())
|
||||||
if distance < min_distance then
|
if distance < min_distance then
|
||||||
min_distance = distance
|
min_distance = distance
|
||||||
nearest = player:get_player_name()
|
nearest = player:get_player_name()
|
||||||
end
|
end
|
||||||
if distance > max_distance then
|
if distance > max_distance then
|
||||||
max_distance = distance
|
max_distance = distance
|
||||||
farthest = player:get_player_name()
|
farthest = player:get_player_name()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local random = players[math.random(#players)]:get_player_name()
|
local random = players[math.random(#players)]:get_player_name()
|
||||||
commands = commands:gsub("@nearest", nearest)
|
commands = commands:gsub("@nearest", nearest)
|
||||||
commands = commands:gsub("@farthest", farthest)
|
commands = commands:gsub("@farthest", farthest)
|
||||||
commands = commands:gsub("@random", random)
|
commands = commands:gsub("@random", random)
|
||||||
return commands
|
return commands
|
||||||
end
|
end
|
||||||
|
|
||||||
local function commandblock_action_on(pos, node)
|
local function commandblock_action_on(pos, node)
|
||||||
if node.name ~= "mesecons_commandblock:commandblock_off" then
|
if node.name ~= "mesecons_commandblock:commandblock_off" then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_on"})
|
minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_on"})
|
||||||
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local owner = meta:get_string("owner")
|
local owner = meta:get_string("owner")
|
||||||
if owner == "" then
|
if owner == "" then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local commands = resolve_commands(meta:get_string("commands"), pos)
|
local commands = resolve_commands(meta:get_string("commands"), pos)
|
||||||
for _, command in pairs(commands:split("\n")) do
|
for _, command in pairs(commands:split("\n")) do
|
||||||
local pos = command:find(" ")
|
local pos = command:find(" ")
|
||||||
local cmd, param = command, ""
|
local cmd, param = command, ""
|
||||||
if pos then
|
if pos then
|
||||||
cmd = command:sub(1, pos - 1)
|
cmd = command:sub(1, pos - 1)
|
||||||
param = command:sub(pos + 1)
|
param = command:sub(pos + 1)
|
||||||
end
|
end
|
||||||
local cmddef = minetest.chatcommands[cmd]
|
local cmddef = minetest.chatcommands[cmd]
|
||||||
if not cmddef then
|
if not cmddef then
|
||||||
minetest.chat_send_player(owner, "The command "..cmd.." does not exist")
|
minetest.chat_send_player(owner, "The command "..cmd.." does not exist")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local has_privs, missing_privs = minetest.check_player_privs(owner, cmddef.privs)
|
local has_privs, missing_privs = minetest.check_player_privs(owner, cmddef.privs)
|
||||||
if not has_privs then
|
if not has_privs then
|
||||||
minetest.chat_send_player(owner, "You don't have permission "
|
minetest.chat_send_player(owner, "You don't have permission "
|
||||||
.."to run "..cmd
|
.."to run "..cmd
|
||||||
.." (missing privileges: "
|
.." (missing privileges: "
|
||||||
..table.concat(missing_privs, ", ")..")")
|
..table.concat(missing_privs, ", ")..")")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
cmddef.func(owner, param)
|
cmddef.func(owner, param)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function commandblock_action_off(pos, node)
|
local function commandblock_action_off(pos, node)
|
||||||
if node.name == "mesecons_commandblock:commandblock_on" then
|
if node.name == "mesecons_commandblock:commandblock_on" then
|
||||||
minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_off"})
|
minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_off"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function can_dig(pos, player)
|
local function can_dig(pos, player)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local owner = meta:get_string("owner")
|
local owner = meta:get_string("owner")
|
||||||
return owner == "" or owner == player:get_player_name()
|
return owner == "" or owner == player:get_player_name()
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node("mesecons_commandblock:commandblock_off", {
|
minetest.register_node("mesecons_commandblock:commandblock_off", {
|
||||||
description = "Command Block",
|
description = "Command Block",
|
||||||
tiles = {"jeija_commandblock_off.png"},
|
tiles = {"jeija_commandblock_off.png"},
|
||||||
inventory_image = minetest.inventorycube("jeija_commandblock_off.png"),
|
inventory_image = minetest.inventorycube("jeija_commandblock_off.png"),
|
||||||
groups = {cracky=2, mesecon_effector_off=1},
|
groups = {cracky=2, mesecon_effector_off=1},
|
||||||
on_construct = construct,
|
on_construct = construct,
|
||||||
after_place_node = after_place,
|
after_place_node = after_place,
|
||||||
on_receive_fields = receive_fields,
|
on_receive_fields = receive_fields,
|
||||||
can_dig = can_dig,
|
can_dig = can_dig,
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
mesecons = {effector = {
|
mesecons = {effector = {
|
||||||
action_on = commandblock_action_on
|
action_on = commandblock_action_on
|
||||||
}}
|
}}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("mesecons_commandblock:commandblock_on", {
|
minetest.register_node("mesecons_commandblock:commandblock_on", {
|
||||||
tiles = {"jeija_commandblock_on.png"},
|
tiles = {"jeija_commandblock_on.png"},
|
||||||
groups = {cracky=2, mesecon_effector_on=1, not_in_creative_inventory=1},
|
groups = {cracky=2, mesecon_effector_on=1, not_in_creative_inventory=1},
|
||||||
light_source = 10,
|
light_source = 10,
|
||||||
drop = "mesecons_commandblock:commandblock_off",
|
drop = "mesecons_commandblock:commandblock_off",
|
||||||
on_construct = construct,
|
on_construct = construct,
|
||||||
after_place_node = after_place,
|
after_place_node = after_place,
|
||||||
on_receive_fields = receive_fields,
|
on_receive_fields = receive_fields,
|
||||||
can_dig = can_dig,
|
can_dig = can_dig,
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
mesecons = {effector = {
|
mesecons = {effector = {
|
||||||
action_off = commandblock_action_off
|
action_off = commandblock_action_off
|
||||||
}}
|
}}
|
||||||
})
|
})
|
||||||
|
191
mods/mesecons/mesecons_compatibility/init.lua
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
doors = {}
|
||||||
|
|
||||||
|
-- Registers a door - REDEFINITION ONLY | DOORS MOD MUST HAVE BEEN LOADED BEFORE
|
||||||
|
-- name: The name of the door
|
||||||
|
-- def: a table with the folowing fields:
|
||||||
|
-- description
|
||||||
|
-- inventory_image
|
||||||
|
-- groups
|
||||||
|
-- tiles_bottom: the tiles of the bottom part of the door {front, side}
|
||||||
|
-- tiles_top: the tiles of the bottom part of the door {front, side}
|
||||||
|
-- If the following fields are not defined the default values are used
|
||||||
|
-- node_box_bottom
|
||||||
|
-- node_box_top
|
||||||
|
-- selection_box_bottom
|
||||||
|
-- selection_box_top
|
||||||
|
-- only_placer_can_open: if true only the player who placed the door can
|
||||||
|
-- open it
|
||||||
|
local function is_right(pos)
|
||||||
|
local r1 = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z})
|
||||||
|
local r2 = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1})
|
||||||
|
if string.find(r1.name, "door_") or string.find(r2.name, "door_") then
|
||||||
|
if string.find(r1.name, "_1") or string.find(r2.name, "_1") then
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function doors:register_door(name, def)
|
||||||
|
def.groups.not_in_creative_inventory = 1
|
||||||
|
|
||||||
|
local box = {{-0.5, -0.5, -0.5, 0.5, 0.5, -0.5+1.5/16}}
|
||||||
|
|
||||||
|
if not def.node_box_bottom then
|
||||||
|
def.node_box_bottom = box
|
||||||
|
end
|
||||||
|
if not def.node_box_top then
|
||||||
|
def.node_box_top = box
|
||||||
|
end
|
||||||
|
if not def.selection_box_bottom then
|
||||||
|
def.selection_box_bottom= box
|
||||||
|
end
|
||||||
|
if not def.selection_box_top then
|
||||||
|
def.selection_box_top = box
|
||||||
|
end
|
||||||
|
|
||||||
|
local tt = def.tiles_top
|
||||||
|
local tb = def.tiles_bottom
|
||||||
|
|
||||||
|
local function after_dig_node(pos, name)
|
||||||
|
if minetest.get_node(pos).name == name then
|
||||||
|
minetest.remove_node(pos)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function on_rightclick(pos, dir, check_name, replace, replace_dir, params)
|
||||||
|
pos.y = pos.y+dir
|
||||||
|
if not minetest.get_node(pos).name == check_name then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local p2 = minetest.get_node(pos).param2
|
||||||
|
p2 = params[p2+1]
|
||||||
|
|
||||||
|
local meta = minetest.get_meta(pos):to_table()
|
||||||
|
minetest.set_node(pos, {name=replace_dir, param2=p2})
|
||||||
|
minetest.get_meta(pos):from_table(meta)
|
||||||
|
|
||||||
|
pos.y = pos.y-dir
|
||||||
|
meta = minetest.get_meta(pos):to_table()
|
||||||
|
minetest.set_node(pos, {name=replace, param2=p2})
|
||||||
|
minetest.get_meta(pos):from_table(meta)
|
||||||
|
|
||||||
|
local snd_1 = "_close"
|
||||||
|
local snd_2 = "_open"
|
||||||
|
if params[1] == 3 then
|
||||||
|
snd_1 = "_open"
|
||||||
|
snd_2 = "_close"
|
||||||
|
end
|
||||||
|
|
||||||
|
if is_right(pos) then
|
||||||
|
minetest.sound_play("door"..snd_1, {pos = pos, gain = 0.3, max_hear_distance = 10})
|
||||||
|
else
|
||||||
|
minetest.sound_play("door"..snd_2, {pos = pos, gain = 0.3, max_hear_distance = 10})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function on_mesecons_signal_open (pos, node)
|
||||||
|
on_rightclick(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0})
|
||||||
|
end
|
||||||
|
|
||||||
|
local function on_mesecons_signal_close (pos, node)
|
||||||
|
on_rightclick(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2})
|
||||||
|
end
|
||||||
|
|
||||||
|
local function check_player_priv(pos, player)
|
||||||
|
if not def.only_placer_can_open then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local pn = player:get_player_name()
|
||||||
|
return meta:get_string("doors_owner") == pn
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_node(":"..name.."_b_1", {
|
||||||
|
tiles = {tb[2], tb[2], tb[2], tb[2], tb[1], tb[1].."^[transformfx"},
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
drop = name,
|
||||||
|
drawtype = "nodebox",
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = def.node_box_bottom
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = def.selection_box_bottom
|
||||||
|
},
|
||||||
|
groups = def.groups,
|
||||||
|
|
||||||
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||||
|
pos.y = pos.y+1
|
||||||
|
after_dig_node(pos, name.."_t_1")
|
||||||
|
end,
|
||||||
|
|
||||||
|
on_rightclick = function(pos, node, puncher)
|
||||||
|
if check_player_priv(pos, puncher) then
|
||||||
|
on_rightclick(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0})
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
mesecons = {effector = {
|
||||||
|
action_on = on_mesecons_signal_open
|
||||||
|
}},
|
||||||
|
|
||||||
|
can_dig = check_player_priv,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node(":"..name.."_b_2", {
|
||||||
|
tiles = {tb[2], tb[2], tb[2], tb[2], tb[1].."^[transformfx", tb[1]},
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
drop = name,
|
||||||
|
drawtype = "nodebox",
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = def.node_box_bottom
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = def.selection_box_bottom
|
||||||
|
},
|
||||||
|
groups = def.groups,
|
||||||
|
|
||||||
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||||
|
pos.y = pos.y+1
|
||||||
|
after_dig_node(pos, name.."_t_2")
|
||||||
|
end,
|
||||||
|
|
||||||
|
on_rightclick = function(pos, node, puncher)
|
||||||
|
if check_player_priv(pos, puncher) then
|
||||||
|
on_rightclick(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2})
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
mesecons = {effector = {
|
||||||
|
action_off = on_mesecons_signal_close
|
||||||
|
}},
|
||||||
|
|
||||||
|
can_dig = check_player_priv,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
doors:register_door("doors:door_wood", {
|
||||||
|
description = "Wooden Door",
|
||||||
|
inventory_image = "door_wood.png",
|
||||||
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=2,door=1},
|
||||||
|
tiles_bottom = {"door_wood_b.png", "door_brown.png"},
|
||||||
|
tiles_top = {"door_wood_a.png", "door_brown.png"},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
})
|
||||||
|
|
||||||
|
doors:register_door("doors:door_steel", {
|
||||||
|
description = "Steel Door",
|
||||||
|
inventory_image = "door_steel.png",
|
||||||
|
groups = {snappy=1,bendy=2,cracky=1,melty=2,level=2,door=1},
|
||||||
|
tiles_bottom = {"door_steel_b.png", "door_grey.png"},
|
||||||
|
tiles_top = {"door_steel_a.png", "door_grey.png"},
|
||||||
|
only_placer_can_open = true,
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
})
|
@ -135,12 +135,8 @@ end
|
|||||||
|
|
||||||
-- returns true if player was found, false if not
|
-- returns true if player was found, false if not
|
||||||
local node_detector_scan = function (pos)
|
local node_detector_scan = function (pos)
|
||||||
if not pos then return end
|
local node = minetest.get_node(pos)
|
||||||
local node = minetest.get_node_or_nil(pos)
|
local frontpos = vector.subtract(pos, minetest.facedir_to_dir(node.param2))
|
||||||
if not node then return end
|
|
||||||
local scandir = minetest.facedir_to_dir(node.param2)
|
|
||||||
if not scandir then return end
|
|
||||||
local frontpos = vector.subtract(pos, scandir)
|
|
||||||
local frontnode = minetest.get_node(frontpos)
|
local frontnode = minetest.get_node(frontpos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
return (frontnode.name == meta:get_string("scanname")) or
|
return (frontnode.name == meta:get_string("scanname")) or
|
||||||
|
@ -1,84 +0,0 @@
|
|||||||
-- Modified, from minetest_game/mods/doors/init.lua
|
|
||||||
local function on_rightclick(pos, dir, check_name, replace, replace_dir, params)
|
|
||||||
pos.y = pos.y + dir
|
|
||||||
if not minetest.get_node(pos).name == check_name then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local p2 = minetest.get_node(pos).param2
|
|
||||||
p2 = params[p2 + 1]
|
|
||||||
|
|
||||||
minetest.swap_node(pos, {name = replace_dir, param2 = p2})
|
|
||||||
|
|
||||||
pos.y = pos.y - dir
|
|
||||||
minetest.swap_node(pos, {name = replace, param2 = p2})
|
|
||||||
|
|
||||||
if (minetest.get_meta(pos):get_int("right") ~= 0) == (params[1] ~= 3) then
|
|
||||||
minetest.sound_play("door_close", {pos = pos, gain = 0.3, max_hear_distance = 10})
|
|
||||||
else
|
|
||||||
minetest.sound_play("door_open", {pos = pos, gain = 0.3, max_hear_distance = 10})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function meseconify_door(name)
|
|
||||||
if not minetest.registered_items[name] then return end
|
|
||||||
|
|
||||||
local function toggle_state1 (pos, node)
|
|
||||||
on_rightclick(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0})
|
|
||||||
end
|
|
||||||
|
|
||||||
local function toggle_state2 (pos, node)
|
|
||||||
on_rightclick(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2})
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.override_item(name.."_b_1", {
|
|
||||||
mesecons = {effector = {
|
|
||||||
action_on = toggle_state1,
|
|
||||||
action_off = toggle_state1,
|
|
||||||
rules = mesecon.rules.pplate
|
|
||||||
}},
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.override_item(name.."_b_2", {
|
|
||||||
mesecons = {effector = {
|
|
||||||
action_on = toggle_state2,
|
|
||||||
action_off = toggle_state2,
|
|
||||||
rules = mesecon.rules.pplate
|
|
||||||
}},
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
meseconify_door("doors:door_wood")
|
|
||||||
meseconify_door("doors:door_steel")
|
|
||||||
meseconify_door("doors:door_glass")
|
|
||||||
meseconify_door("doors:door_obsidian_glass")
|
|
||||||
|
|
||||||
-- Trapdoor
|
|
||||||
local function trapdoor_switch(pos, node)
|
|
||||||
local state = minetest.get_meta(pos):get_int("state")
|
|
||||||
|
|
||||||
if state == 1 then
|
|
||||||
minetest.sound_play("doors_door_close", {pos = pos, gain = 0.3, max_hear_distance = 10})
|
|
||||||
minetest.set_node(pos, {name="doors:trapdoor", param2 = node.param2})
|
|
||||||
else
|
|
||||||
minetest.sound_play("doors_door_open", {pos = pos, gain = 0.3, max_hear_distance = 10})
|
|
||||||
minetest.set_node(pos, {name="doors:trapdoor_open", param2 = node.param2})
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.get_meta(pos):set_int("state", state == 1 and 0 or 1)
|
|
||||||
end
|
|
||||||
|
|
||||||
if minetest.registered_nodes["doors:trapdoor"] then
|
|
||||||
minetest.override_item("doors:trapdoor", {
|
|
||||||
mesecons = {effector = {
|
|
||||||
action_on = trapdoor_switch,
|
|
||||||
action_off = trapdoor_switch
|
|
||||||
}},
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.override_item("doors:trapdoor_open", {
|
|
||||||
mesecons = {effector = {
|
|
||||||
action_on = trapdoor_switch,
|
|
||||||
action_off = trapdoor_switch
|
|
||||||
}},
|
|
||||||
})
|
|
||||||
end
|
|
@ -41,7 +41,7 @@ minetest.register_node("mesecons_extrawires:crossover_off", {
|
|||||||
{ -3/32, -17/32, 6/32, 3/32, -13/32, 16/32+0.001 },
|
{ -3/32, -17/32, 6/32, 3/32, -13/32, 16/32+0.001 },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
groups = {dig_immediate=3, mesecon=3},
|
groups = {dig_immediate=3, mesecon=3, mesecon_conductor_craftable=1},
|
||||||
mesecons = {
|
mesecons = {
|
||||||
conductor = {
|
conductor = {
|
||||||
states = crossover_states,
|
states = crossover_states,
|
||||||
|
@ -65,7 +65,7 @@ minetest.register_node("mesecons_extrawires:tjunction_off", {
|
|||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
selection_box = tjunction_selectionbox,
|
selection_box = tjunction_selectionbox,
|
||||||
node_box = tjunction_nodebox,
|
node_box = tjunction_nodebox,
|
||||||
groups = {dig_immediate = 3},
|
groups = {dig_immediate = 3, mesecon_conductor_craftable=1},
|
||||||
mesecons = {conductor =
|
mesecons = {conductor =
|
||||||
{
|
{
|
||||||
state = mesecon.state.off,
|
state = mesecon.state.off,
|
||||||
|
@ -78,7 +78,7 @@ function register_gate(name, inputnumber, assess, recipe)
|
|||||||
},{
|
},{
|
||||||
tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_off.png^"..
|
tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_off.png^"..
|
||||||
"jeija_gate_"..name..".png"},
|
"jeija_gate_"..name..".png"},
|
||||||
groups = {dig_immediate = 2, overheat = 1},
|
groups = {dig_immediate = 2},
|
||||||
mesecons = { receptor = {
|
mesecons = { receptor = {
|
||||||
state = "off",
|
state = "off",
|
||||||
rules = gate_get_output_rules
|
rules = gate_get_output_rules
|
||||||
@ -89,7 +89,7 @@ function register_gate(name, inputnumber, assess, recipe)
|
|||||||
},{
|
},{
|
||||||
tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_on.png^"..
|
tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_on.png^"..
|
||||||
"jeija_gate_"..name..".png"},
|
"jeija_gate_"..name..".png"},
|
||||||
groups = {dig_immediate = 2, not_in_creative_inventory = 1, overheat = 1},
|
groups = {dig_immediate = 2, not_in_creative_inventory = 1},
|
||||||
mesecons = { receptor = {
|
mesecons = { receptor = {
|
||||||
state = "on",
|
state = "on",
|
||||||
rules = gate_get_output_rules
|
rules = gate_get_output_rules
|
||||||
|
@ -4,17 +4,24 @@
|
|||||||
-- (does not work with other liquids)
|
-- (does not work with other liquids)
|
||||||
|
|
||||||
minetest.register_node("mesecons_hydroturbine:hydro_turbine_off", {
|
minetest.register_node("mesecons_hydroturbine:hydro_turbine_off", {
|
||||||
drawtype = "mesh",
|
drawtype = "nodebox",
|
||||||
mesh = "jeija_hydro_turbine.obj",
|
|
||||||
tiles = {"jeija_hydro_turbine_off.png"},
|
tiles = {"jeija_hydro_turbine_off.png"},
|
||||||
inventory_image = "jeija_hydro_turbine_inv.png",
|
|
||||||
wield_scale = {x=0.75, y=0.75, z=0.75},
|
|
||||||
groups = {dig_immediate=2},
|
groups = {dig_immediate=2},
|
||||||
description="Water Turbine",
|
description="Water Turbine",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 },
|
fixed = {{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||||
|
{-0.15, 0.5, -0.15, 0.15, 1.45, 0.15},
|
||||||
|
{-0.45, 1.15, -0.1, 0.45, 1.45, 0.1},
|
||||||
|
{-0.1, 1.15, -0.45, 0.1, 1.45, 0.45}},
|
||||||
|
},
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||||
|
{-0.15, 0.5, -0.15, 0.15, 1.45, 0.15},
|
||||||
|
{-0.45, 1.15, -0.1, 0.45, 1.45, 0.1},
|
||||||
|
{-0.1, 1.15, -0.45, 0.1, 1.45, 0.45}},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
mesecons = {receptor = {
|
mesecons = {receptor = {
|
||||||
@ -23,18 +30,25 @@ minetest.register_node("mesecons_hydroturbine:hydro_turbine_off", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("mesecons_hydroturbine:hydro_turbine_on", {
|
minetest.register_node("mesecons_hydroturbine:hydro_turbine_on", {
|
||||||
drawtype = "mesh",
|
drawtype = "nodebox",
|
||||||
mesh = "jeija_hydro_turbine.obj",
|
|
||||||
wield_scale = {x=0.75, y=0.75, z=0.75},
|
|
||||||
tiles = {"jeija_hydro_turbine_on.png"},
|
tiles = {"jeija_hydro_turbine_on.png"},
|
||||||
inventory_image = "jeija_hydro_turbine_inv.png",
|
|
||||||
drop = "mesecons_hydroturbine:hydro_turbine_off 1",
|
drop = "mesecons_hydroturbine:hydro_turbine_off 1",
|
||||||
groups = {dig_immediate=2,not_in_creative_inventory=1},
|
groups = {dig_immediate=2,not_in_creative_inventory=1},
|
||||||
description="Water Turbine",
|
description="Water Turbine",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 },
|
fixed = {{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||||
|
{-0.15, 0.5, -0.15, 0.15, 1.45, 0.15},
|
||||||
|
{-0.5, 1.15, -0.1, 0.5, 1.45, 0.1},
|
||||||
|
{-0.1, 1.15, -0.5, 0.1, 1.45, 0.5}},
|
||||||
|
},
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||||
|
{-0.15, 0.5, -0.15, 0.15, 1.45, 0.15},
|
||||||
|
{-0.5, 1.15, -0.1, 0.5, 1.45, 0.1},
|
||||||
|
{-0.1, 1.15, -0.5, 0.1, 1.45, 0.5}},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
mesecons = {receptor = {
|
mesecons = {receptor = {
|
||||||
|
@ -1,416 +0,0 @@
|
|||||||
# Blender v2.69 (sub 0) OBJ File: 'mesecons-water-turbine.blend'
|
|
||||||
# www.blender.org
|
|
||||||
o Cylinder.002_Cylinder.003
|
|
||||||
v 0.000000 0.500000 -0.150000
|
|
||||||
v 0.000000 0.562500 -0.150000
|
|
||||||
v 0.106066 0.500000 -0.106066
|
|
||||||
v 0.106066 0.562500 -0.106066
|
|
||||||
v 0.150000 0.500000 0.000000
|
|
||||||
v 0.150000 0.562500 0.000000
|
|
||||||
v 0.106066 0.500000 0.106066
|
|
||||||
v 0.106066 0.562500 0.106066
|
|
||||||
v -0.000000 0.500000 0.150000
|
|
||||||
v -0.000000 0.562500 0.150000
|
|
||||||
v -0.106066 0.500000 0.106066
|
|
||||||
v -0.106066 0.562500 0.106066
|
|
||||||
v -0.150000 0.500000 -0.000000
|
|
||||||
v -0.150000 0.562500 -0.000000
|
|
||||||
v -0.106066 0.500000 -0.106066
|
|
||||||
v -0.106066 0.562500 -0.106066
|
|
||||||
v 0.097545 0.625000 -0.490393
|
|
||||||
v -0.097545 0.625000 -0.490393
|
|
||||||
v -0.277785 0.625000 -0.415735
|
|
||||||
v -0.415735 0.625000 -0.277785
|
|
||||||
v -0.490393 0.625000 -0.097545
|
|
||||||
v -0.490393 0.625000 0.097545
|
|
||||||
v -0.415735 0.625000 0.277785
|
|
||||||
v -0.277785 0.625000 0.415735
|
|
||||||
v -0.097545 0.625000 0.490393
|
|
||||||
v 0.097545 0.625000 0.490393
|
|
||||||
v 0.277785 0.625000 0.415735
|
|
||||||
v 0.415735 0.625000 0.277785
|
|
||||||
v 0.490393 0.625000 0.097545
|
|
||||||
v 0.490393 0.625000 -0.097545
|
|
||||||
v 0.415735 0.625000 -0.277785
|
|
||||||
v 0.277785 0.625000 -0.415735
|
|
||||||
v 0.097545 0.656250 -0.490393
|
|
||||||
v -0.097545 0.656250 -0.490393
|
|
||||||
v -0.277785 0.656250 -0.415735
|
|
||||||
v -0.415735 0.656250 -0.277785
|
|
||||||
v -0.490393 0.656250 -0.097545
|
|
||||||
v -0.490393 0.656250 0.097545
|
|
||||||
v -0.415735 0.656250 0.277785
|
|
||||||
v -0.277785 0.656250 0.415735
|
|
||||||
v -0.097545 0.656250 0.490393
|
|
||||||
v 0.097545 0.656250 0.490393
|
|
||||||
v 0.277785 0.656250 0.415735
|
|
||||||
v 0.415735 0.656250 0.277785
|
|
||||||
v 0.490393 0.656250 0.097545
|
|
||||||
v 0.490393 0.656250 -0.097545
|
|
||||||
v 0.415735 0.656250 -0.277785
|
|
||||||
v 0.277785 0.656250 -0.415735
|
|
||||||
v 0.116233 0.634645 -0.436100
|
|
||||||
v 0.116233 1.482640 -0.436100
|
|
||||||
v 0.299524 0.634645 -0.186124
|
|
||||||
v 0.299524 1.482640 -0.186124
|
|
||||||
v 0.343405 0.634645 0.080186
|
|
||||||
v 0.343405 1.482640 0.080186
|
|
||||||
v 0.186124 0.634645 0.299524
|
|
||||||
v 0.186124 1.482640 0.299524
|
|
||||||
v -0.080186 0.634645 0.343405
|
|
||||||
v -0.080186 1.482640 0.343405
|
|
||||||
v -0.299524 0.634645 0.186124
|
|
||||||
v -0.299524 1.482640 0.186124
|
|
||||||
v -0.343405 0.634645 -0.080186
|
|
||||||
v -0.343405 1.482640 -0.080186
|
|
||||||
v -0.186124 0.634645 -0.299524
|
|
||||||
v -0.186124 1.482640 -0.299524
|
|
||||||
v 0.080186 0.634645 -0.343405
|
|
||||||
v 0.080186 1.482640 -0.343405
|
|
||||||
v 0.390559 1.482640 -0.226180
|
|
||||||
v 0.390559 0.634645 -0.226180
|
|
||||||
v 0.436100 1.482640 0.116233
|
|
||||||
v 0.436100 0.634645 0.116233
|
|
||||||
v 0.226180 1.482640 0.390559
|
|
||||||
v 0.226180 0.634645 0.390559
|
|
||||||
v -0.116233 1.482640 0.436100
|
|
||||||
v -0.116233 0.634645 0.436100
|
|
||||||
v -0.390559 1.482640 0.226180
|
|
||||||
v -0.390559 0.634645 0.226180
|
|
||||||
v -0.436100 1.482640 -0.116233
|
|
||||||
v -0.436100 0.634645 -0.116233
|
|
||||||
v -0.226180 1.482640 -0.390559
|
|
||||||
v -0.226180 0.634645 -0.390559
|
|
||||||
v 0.108975 0.634645 -0.430778
|
|
||||||
v 0.292266 0.634645 -0.180802
|
|
||||||
v 0.292266 1.482640 -0.180802
|
|
||||||
v 0.108975 1.482640 -0.430778
|
|
||||||
v 0.381664 0.634645 -0.227549
|
|
||||||
v 0.334509 0.634645 0.078817
|
|
||||||
v 0.334509 1.482640 0.078817
|
|
||||||
v 0.381664 1.482640 -0.227549
|
|
||||||
v 0.430778 0.634645 0.108975
|
|
||||||
v 0.180802 0.634645 0.292266
|
|
||||||
v 0.180802 1.482640 0.292266
|
|
||||||
v 0.430778 1.482640 0.108975
|
|
||||||
v 0.227549 0.634645 0.381664
|
|
||||||
v -0.078817 0.634645 0.334509
|
|
||||||
v -0.078817 1.482640 0.334509
|
|
||||||
v 0.227549 1.482640 0.381664
|
|
||||||
v -0.108975 0.634645 0.430778
|
|
||||||
v -0.292266 0.634645 0.180802
|
|
||||||
v -0.292266 1.482640 0.180802
|
|
||||||
v -0.108975 1.482640 0.430778
|
|
||||||
v -0.381664 0.634645 0.227549
|
|
||||||
v -0.334509 0.634645 -0.078817
|
|
||||||
v -0.334509 1.482640 -0.078817
|
|
||||||
v -0.381664 1.482640 0.227549
|
|
||||||
v -0.227549 0.634645 -0.381663
|
|
||||||
v 0.078817 0.634645 -0.334509
|
|
||||||
v 0.078817 1.482640 -0.334509
|
|
||||||
v -0.227549 1.482640 -0.381663
|
|
||||||
v -0.430779 0.634645 -0.108975
|
|
||||||
v -0.180802 0.634645 -0.292266
|
|
||||||
v -0.180802 1.482640 -0.292266
|
|
||||||
v -0.430779 1.482640 -0.108975
|
|
||||||
v 0.097545 1.500000 -0.490393
|
|
||||||
v -0.097545 1.500000 -0.490393
|
|
||||||
v -0.277785 1.500000 -0.415735
|
|
||||||
v -0.415735 1.500000 -0.277785
|
|
||||||
v -0.490393 1.500000 -0.097545
|
|
||||||
v -0.490393 1.500000 0.097545
|
|
||||||
v -0.415735 1.500000 0.277785
|
|
||||||
v -0.277785 1.500000 0.415735
|
|
||||||
v -0.097545 1.500000 0.490393
|
|
||||||
v 0.097545 1.500000 0.490393
|
|
||||||
v 0.277785 1.500000 0.415735
|
|
||||||
v 0.415735 1.500000 0.277785
|
|
||||||
v 0.490393 1.500000 0.097545
|
|
||||||
v 0.490393 1.500000 -0.097545
|
|
||||||
v 0.415735 1.500000 -0.277785
|
|
||||||
v 0.277785 1.500000 -0.415735
|
|
||||||
v 0.097545 1.468750 -0.490393
|
|
||||||
v -0.097545 1.468750 -0.490393
|
|
||||||
v -0.277785 1.468750 -0.415735
|
|
||||||
v -0.415735 1.468750 -0.277785
|
|
||||||
v -0.490393 1.468750 -0.097545
|
|
||||||
v -0.490393 1.468750 0.097545
|
|
||||||
v -0.415735 1.468750 0.277785
|
|
||||||
v -0.277785 1.468750 0.415735
|
|
||||||
v -0.097545 1.468750 0.490393
|
|
||||||
v 0.097545 1.468750 0.490393
|
|
||||||
v 0.277785 1.468750 0.415735
|
|
||||||
v 0.415735 1.468750 0.277785
|
|
||||||
v 0.490393 1.468750 0.097545
|
|
||||||
v 0.490393 1.468750 -0.097545
|
|
||||||
v 0.415735 1.468750 -0.277785
|
|
||||||
v 0.277785 1.468750 -0.415735
|
|
||||||
v 0.025624 0.559630 -0.061863
|
|
||||||
v 0.025624 1.481372 -0.061863
|
|
||||||
v 0.061863 0.559630 -0.025624
|
|
||||||
v 0.061863 1.481372 -0.025624
|
|
||||||
v 0.061863 0.559630 0.025624
|
|
||||||
v 0.061863 1.481372 0.025624
|
|
||||||
v 0.025624 0.559630 0.061863
|
|
||||||
v 0.025624 1.481372 0.061863
|
|
||||||
v -0.025624 0.559630 0.061863
|
|
||||||
v -0.025624 1.481372 0.061863
|
|
||||||
v -0.061863 0.559630 0.025624
|
|
||||||
v -0.061863 1.481372 0.025624
|
|
||||||
v -0.061863 0.559630 -0.025624
|
|
||||||
v -0.061863 1.481372 -0.025624
|
|
||||||
v -0.025624 0.559630 -0.061863
|
|
||||||
v -0.025624 1.481372 -0.061863
|
|
||||||
v 0.500000 -0.500000 -0.500000
|
|
||||||
v 0.500000 -0.500000 0.500000
|
|
||||||
v -0.500000 -0.500000 0.500000
|
|
||||||
v -0.500000 -0.500000 -0.500000
|
|
||||||
v 0.500000 0.500000 -0.500000
|
|
||||||
v 0.500000 0.500000 0.500000
|
|
||||||
v -0.500000 0.500000 0.500000
|
|
||||||
v -0.500000 0.500000 -0.500000
|
|
||||||
vt 0.416667 0.625000
|
|
||||||
vt 0.416667 0.645833
|
|
||||||
vt 0.395833 0.645833
|
|
||||||
vt 0.395833 0.625000
|
|
||||||
vt 0.375000 0.645833
|
|
||||||
vt 0.375000 0.625000
|
|
||||||
vt 0.291667 0.625000
|
|
||||||
vt 0.291667 0.645833
|
|
||||||
vt 0.312500 0.645833
|
|
||||||
vt 0.312500 0.625000
|
|
||||||
vt 0.333333 0.645833
|
|
||||||
vt 0.333333 0.625000
|
|
||||||
vt 0.354167 0.645833
|
|
||||||
vt 0.354167 0.625000
|
|
||||||
vt 0.708333 0.645833
|
|
||||||
vt 0.729167 0.625000
|
|
||||||
vt 0.750000 0.625000
|
|
||||||
vt 0.770833 0.645833
|
|
||||||
vt 0.770833 0.666667
|
|
||||||
vt 0.750000 0.687500
|
|
||||||
vt 0.729167 0.687500
|
|
||||||
vt 0.708333 0.666667
|
|
||||||
vt 0.437500 0.625000
|
|
||||||
vt 0.437500 0.645833
|
|
||||||
vt 0.458333 0.625000
|
|
||||||
vt 0.458333 0.645833
|
|
||||||
vt 0.656250 0.953125
|
|
||||||
vt 0.593750 0.980469
|
|
||||||
vt 0.531250 0.980469
|
|
||||||
vt 0.468750 0.953125
|
|
||||||
vt 0.421875 0.906250
|
|
||||||
vt 0.394531 0.843750
|
|
||||||
vt 0.394531 0.781250
|
|
||||||
vt 0.421875 0.718750
|
|
||||||
vt 0.468750 0.671875
|
|
||||||
vt 0.531250 0.644531
|
|
||||||
vt 0.593750 0.644531
|
|
||||||
vt 0.656250 0.671875
|
|
||||||
vt 0.703125 0.718750
|
|
||||||
vt 0.730469 0.781250
|
|
||||||
vt 0.730469 0.843750
|
|
||||||
vt 0.703125 0.906250
|
|
||||||
vt 0.019531 0.843750
|
|
||||||
vt 0.019531 0.781250
|
|
||||||
vt 0.046875 0.718750
|
|
||||||
vt 0.093750 0.671875
|
|
||||||
vt 0.156250 0.644531
|
|
||||||
vt 0.218750 0.644531
|
|
||||||
vt 0.281250 0.671875
|
|
||||||
vt 0.328125 0.718750
|
|
||||||
vt 0.355469 0.781250
|
|
||||||
vt 0.355469 0.843750
|
|
||||||
vt 0.328125 0.906250
|
|
||||||
vt 0.281250 0.953125
|
|
||||||
vt 0.218750 0.980469
|
|
||||||
vt 0.156250 0.980469
|
|
||||||
vt 0.093750 0.953125
|
|
||||||
vt 0.046875 0.906250
|
|
||||||
vt 0.187500 0.041667
|
|
||||||
vt 0.104167 0.041667
|
|
||||||
vt 0.104167 0.020833
|
|
||||||
vt 0.187500 0.020833
|
|
||||||
vt 0.270833 0.041667
|
|
||||||
vt 0.270833 0.020833
|
|
||||||
vt 0.354167 0.041667
|
|
||||||
vt 0.354167 0.020833
|
|
||||||
vt 0.437500 0.041667
|
|
||||||
vt 0.437500 0.020833
|
|
||||||
vt 0.520833 0.041667
|
|
||||||
vt 0.520833 0.020833
|
|
||||||
vt 0.354167 0.104167
|
|
||||||
vt 0.270833 0.104167
|
|
||||||
vt 0.270833 0.083333
|
|
||||||
vt 0.354167 0.083333
|
|
||||||
vt 0.604167 0.041667
|
|
||||||
vt 0.604167 0.020833
|
|
||||||
vt 0.687500 0.041667
|
|
||||||
vt 0.687500 0.020833
|
|
||||||
vt 0.437500 0.104167
|
|
||||||
vt 0.437500 0.083333
|
|
||||||
vt 0.104167 0.104167
|
|
||||||
vt 0.020833 0.104167
|
|
||||||
vt 0.020833 0.083333
|
|
||||||
vt 0.104167 0.083333
|
|
||||||
vt 0.520833 0.104167
|
|
||||||
vt 0.520833 0.083333
|
|
||||||
vt 0.187500 0.104167
|
|
||||||
vt 0.187500 0.083333
|
|
||||||
vt 0.604167 0.104167
|
|
||||||
vt 0.604167 0.083333
|
|
||||||
vt 0.687500 0.104167
|
|
||||||
vt 0.687500 0.083333
|
|
||||||
vt 0.020833 0.041667
|
|
||||||
vt 0.020833 0.020833
|
|
||||||
vt 0.979167 0.020833
|
|
||||||
vt 0.979167 0.270833
|
|
||||||
vt 0.895833 0.270833
|
|
||||||
vt 0.895833 0.020833
|
|
||||||
vt 0.875000 0.020833
|
|
||||||
vt 0.875000 0.270833
|
|
||||||
vt 0.791667 0.270833
|
|
||||||
vt 0.791667 0.020833
|
|
||||||
vt 0.687500 0.208333
|
|
||||||
vt 0.687500 0.229167
|
|
||||||
vt 0.604167 0.229167
|
|
||||||
vt 0.604167 0.208333
|
|
||||||
vt 0.104167 0.145833
|
|
||||||
vt 0.104167 0.166667
|
|
||||||
vt 0.020833 0.166667
|
|
||||||
vt 0.020833 0.145833
|
|
||||||
vt 0.187500 0.145833
|
|
||||||
vt 0.187500 0.166667
|
|
||||||
vt 0.270833 0.145833
|
|
||||||
vt 0.270833 0.166667
|
|
||||||
vt 0.354167 0.145833
|
|
||||||
vt 0.354167 0.166667
|
|
||||||
vt 0.187500 0.208333
|
|
||||||
vt 0.187500 0.229167
|
|
||||||
vt 0.104167 0.229167
|
|
||||||
vt 0.104167 0.208333
|
|
||||||
vt 0.437500 0.145833
|
|
||||||
vt 0.437500 0.166667
|
|
||||||
vt 0.520833 0.145833
|
|
||||||
vt 0.520833 0.166667
|
|
||||||
vt 0.270833 0.208333
|
|
||||||
vt 0.270833 0.229167
|
|
||||||
vt 0.604167 0.145833
|
|
||||||
vt 0.604167 0.166667
|
|
||||||
vt 0.354167 0.208333
|
|
||||||
vt 0.354167 0.229167
|
|
||||||
vt 0.687500 0.145833
|
|
||||||
vt 0.687500 0.166667
|
|
||||||
vt 0.437500 0.208333
|
|
||||||
vt 0.437500 0.229167
|
|
||||||
vt 0.020833 0.229167
|
|
||||||
vt 0.020833 0.208333
|
|
||||||
vt 0.520833 0.208333
|
|
||||||
vt 0.520833 0.229167
|
|
||||||
vt 0.854167 0.645833
|
|
||||||
vt 0.854167 0.979167
|
|
||||||
vt 0.812500 0.979167
|
|
||||||
vt 0.812500 0.645833
|
|
||||||
vt 0.979167 0.312500
|
|
||||||
vt 0.979167 0.645833
|
|
||||||
vt 0.937500 0.645833
|
|
||||||
vt 0.937500 0.312500
|
|
||||||
vt 0.895833 0.645833
|
|
||||||
vt 0.895833 0.312500
|
|
||||||
vt 0.854167 0.312500
|
|
||||||
vt 0.812500 0.312500
|
|
||||||
vt 0.979167 0.979167
|
|
||||||
vt 0.937500 0.979167
|
|
||||||
vt 0.895833 0.979167
|
|
||||||
vt 0.020833 0.604167
|
|
||||||
vt 0.020833 0.270833
|
|
||||||
vt 0.354167 0.270833
|
|
||||||
vt 0.354167 0.604167
|
|
||||||
vt 0.729167 0.270833
|
|
||||||
vt 0.729167 0.604167
|
|
||||||
vt 0.395833 0.604167
|
|
||||||
vt 0.395833 0.270833
|
|
||||||
s off
|
|
||||||
f 1/1 2/2 4/3 3/4
|
|
||||||
f 3/4 4/3 6/5 5/6
|
|
||||||
f 5/7 6/8 8/9 7/10
|
|
||||||
f 7/10 8/9 10/11 9/12
|
|
||||||
f 9/12 10/11 12/13 11/14
|
|
||||||
f 11/14 12/13 14/5 13/6
|
|
||||||
f 4/15 2/16 16/17 14/18 12/19 10/20 8/21 6/22
|
|
||||||
f 15/23 16/24 2/2 1/1
|
|
||||||
f 13/25 14/26 16/24 15/23
|
|
||||||
f 130/27 129/28 144/29 143/30 142/31 141/32 140/33 139/34 138/35 137/36 136/37 135/38 134/39 133/40 132/41 131/42
|
|
||||||
f 18/43 17/44 32/45 31/46 30/47 29/48 28/49 27/50 26/51 25/52 24/53 23/54 22/55 21/56 20/57 19/58
|
|
||||||
f 27/59 28/60 44/61 43/62
|
|
||||||
f 26/63 27/59 43/62 42/64
|
|
||||||
f 25/65 26/63 42/64 41/66
|
|
||||||
f 24/67 25/65 41/66 40/68
|
|
||||||
f 23/69 24/67 40/68 39/70
|
|
||||||
f 17/71 18/72 34/73 33/74
|
|
||||||
f 22/75 23/69 39/70 38/76
|
|
||||||
f 21/77 22/75 38/76 37/78
|
|
||||||
f 32/79 17/71 33/74 48/80
|
|
||||||
f 20/81 21/82 37/83 36/84
|
|
||||||
f 31/85 32/79 48/80 47/86
|
|
||||||
f 19/87 20/81 36/84 35/88
|
|
||||||
f 30/89 31/85 47/86 46/90
|
|
||||||
f 18/72 19/87 35/88 34/73
|
|
||||||
f 29/91 30/89 46/90 45/92
|
|
||||||
f 28/60 29/93 45/94 44/61
|
|
||||||
f 49/95 50/96 52/97 51/98
|
|
||||||
f 68/98 67/95 54/96 53/97
|
|
||||||
f 70/95 69/96 56/97 55/98
|
|
||||||
f 72/96 71/97 58/98 57/95
|
|
||||||
f 74/95 73/96 60/97 59/98
|
|
||||||
f 76/95 75/96 62/97 61/98
|
|
||||||
f 80/96 79/97 66/98 65/95
|
|
||||||
f 78/95 77/96 64/97 63/98
|
|
||||||
f 81/99 82/100 83/101 84/102
|
|
||||||
f 85/100 86/101 87/102 88/99
|
|
||||||
f 89/101 90/102 91/99 92/100
|
|
||||||
f 93/102 94/99 95/100 96/101
|
|
||||||
f 97/102 98/99 99/100 100/101
|
|
||||||
f 101/99 102/100 103/101 104/102
|
|
||||||
f 105/102 106/99 107/100 108/101
|
|
||||||
f 109/101 110/102 111/99 112/100
|
|
||||||
f 75/100 76/99 101/98 104/97
|
|
||||||
f 71/100 72/99 93/98 96/97
|
|
||||||
f 67/98 68/97 85/100 88/99
|
|
||||||
f 79/98 80/97 105/100 108/99
|
|
||||||
f 77/100 78/99 109/98 112/97
|
|
||||||
f 73/100 74/99 97/98 100/97
|
|
||||||
f 69/98 70/97 89/100 92/99
|
|
||||||
f 50/98 49/97 81/100 84/99
|
|
||||||
f 33/51 34/52 35/53 36/54 37/55 38/56 39/57 40/58 41/43 42/44 43/45 44/46 45/47 46/48 47/49 48/50
|
|
||||||
f 123/103 139/104 140/105 124/106
|
|
||||||
f 122/107 138/108 139/109 123/110
|
|
||||||
f 121/111 137/112 138/108 122/107
|
|
||||||
f 120/113 136/114 137/112 121/111
|
|
||||||
f 119/115 135/116 136/114 120/113
|
|
||||||
f 113/117 129/118 130/119 114/120
|
|
||||||
f 118/121 134/122 135/116 119/115
|
|
||||||
f 117/123 133/124 134/122 118/121
|
|
||||||
f 128/125 144/126 129/118 113/117
|
|
||||||
f 116/127 132/128 133/124 117/123
|
|
||||||
f 127/129 143/130 144/126 128/125
|
|
||||||
f 115/131 131/132 132/128 116/127
|
|
||||||
f 126/133 142/134 143/130 127/129
|
|
||||||
f 114/120 130/119 131/135 115/136
|
|
||||||
f 125/137 141/138 142/134 126/133
|
|
||||||
f 124/106 140/105 141/138 125/137
|
|
||||||
f 145/139 146/140 148/141 147/142
|
|
||||||
f 147/143 148/144 150/145 149/146
|
|
||||||
f 149/146 150/145 152/147 151/148
|
|
||||||
f 151/148 152/147 154/139 153/149
|
|
||||||
f 153/149 154/139 156/142 155/150
|
|
||||||
f 155/144 156/151 158/152 157/145
|
|
||||||
f 159/147 160/153 146/140 145/139
|
|
||||||
f 157/145 158/152 160/153 159/147
|
|
||||||
f 161/154 162/155 163/156 164/157
|
|
||||||
f 165/155 168/156 167/157 166/154
|
|
||||||
f 161/158 165/159 166/160 162/161
|
|
||||||
f 162/158 166/159 167/160 163/161
|
|
||||||
f 163/158 167/159 168/160 164/161
|
|
||||||
f 165/160 161/161 164/158 168/159
|
|
||||||
f 113/40 114/41 115/42 116/27 117/28 118/29 119/30 120/31 121/32 122/33 123/34 124/35 125/36 126/37 127/38 128/39
|
|
Before Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 835 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 817 B |
@ -1,2 +1 @@
|
|||||||
mesecons
|
mesecons
|
||||||
dye
|
|
||||||
|
@ -52,9 +52,9 @@ function mesecon.lightstone_add(name, base_item, texture_off, texture_on)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
mesecon.lightstone_add("red", "dye:red", "jeija_lightstone_red_off.png", "jeija_lightstone_red_on.png")
|
mesecon.lightstone_add("red", "default:clay_brick", "jeija_lightstone_red_off.png", "jeija_lightstone_red_on.png")
|
||||||
mesecon.lightstone_add("green", "dye:green", "jeija_lightstone_green_off.png", "jeija_lightstone_green_on.png")
|
mesecon.lightstone_add("green", "default:cactus", "jeija_lightstone_green_off.png", "jeija_lightstone_green_on.png")
|
||||||
mesecon.lightstone_add("blue", "dye:blue", "jeija_lightstone_blue_off.png", "jeija_lightstone_blue_on.png")
|
mesecon.lightstone_add("blue", "mesecons_materials:fiber", "jeija_lightstone_blue_off.png", "jeija_lightstone_blue_on.png")
|
||||||
mesecon.lightstone_add("gray", "dye:grey", "jeija_lightstone_gray_off.png", "jeija_lightstone_gray_on.png")
|
mesecon.lightstone_add("gray", "default:cobble", "jeija_lightstone_gray_off.png", "jeija_lightstone_gray_on.png")
|
||||||
mesecon.lightstone_add("darkgray", "dye:dark_grey", "jeija_lightstone_darkgray_off.png", "jeija_lightstone_darkgray_on.png")
|
mesecon.lightstone_add("darkgray", "default:gravel", "jeija_lightstone_darkgray_off.png", "jeija_lightstone_darkgray_on.png")
|
||||||
mesecon.lightstone_add("yellow", "dye:yellow", "jeija_lightstone_yellow_off.png", "jeija_lightstone_yellow_on.png")
|
mesecon.lightstone_add("yellow", "default:mese_crystal_fragment", "jeija_lightstone_yellow_off.png", "jeija_lightstone_yellow_on.png")
|
||||||
|
@ -559,6 +559,7 @@ for d = 0, 1 do
|
|||||||
node_box = node_box,
|
node_box = node_box,
|
||||||
on_construct = reset_meta,
|
on_construct = reset_meta,
|
||||||
on_receive_fields = on_receive_fields,
|
on_receive_fields = on_receive_fields,
|
||||||
|
on_timer = handle_timer,
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
mesecons = mesecons,
|
mesecons = mesecons,
|
||||||
digiline = digiline,
|
digiline = digiline,
|
||||||
@ -599,7 +600,7 @@ minetest.register_node(BASENAME .. "_burnt", {
|
|||||||
groups = {dig_immediate=2, not_in_creative_inventory=1},
|
groups = {dig_immediate=2, not_in_creative_inventory=1},
|
||||||
drop = BASENAME.."0000",
|
drop = BASENAME.."0000",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
selection_box = selection_box,
|
selection_box = selectionbox,
|
||||||
node_box = node_box,
|
node_box = node_box,
|
||||||
on_construct = reset_meta,
|
on_construct = reset_meta,
|
||||||
on_receive_fields = on_receive_fields,
|
on_receive_fields = on_receive_fields,
|
||||||
|
@ -14,7 +14,7 @@ minetest.register_craftitem("mesecons_materials:fiber", {
|
|||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "mesecons_materials:glue 2",
|
output = "mesecons_materials:glue 2",
|
||||||
type = "cooking",
|
type = "cooking",
|
||||||
recipe = "group:sapling",
|
recipe = "default:sapling",
|
||||||
cooktime = 2
|
cooktime = 2
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ minetest.register_craftitem("mesecons_materials:silicon", {
|
|||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "mesecons_materials:silicon 4",
|
output = "mesecons_materials:silicon 4",
|
||||||
recipe = {
|
recipe = {
|
||||||
{"group:sand", "group:sand"},
|
{"default:sand", "default:sand"},
|
||||||
{"group:sand", "default:steel_ingot"},
|
{"default:sand", "default:steel_ingot"},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -9,7 +9,9 @@
|
|||||||
-- Pull all blocks in its back
|
-- Pull all blocks in its back
|
||||||
|
|
||||||
function mesecon.get_movestone_direction(pos)
|
function mesecon.get_movestone_direction(pos)
|
||||||
|
getactivated = 0
|
||||||
local lpos
|
local lpos
|
||||||
|
local getactivated = 0
|
||||||
local rules = {
|
local rules = {
|
||||||
{x=0, y=1, z=-1},
|
{x=0, y=1, z=-1},
|
||||||
{x=0, y=0, z=-1},
|
{x=0, y=0, z=-1},
|
||||||
@ -53,78 +55,75 @@ function mesecon.get_movestone_direction(pos)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.register_movestone(name, def, is_sticky)
|
minetest.register_node("mesecons_movestones:movestone", {
|
||||||
local timer_interval = 1 / mesecon.setting("movestone_speed", 3)
|
|
||||||
local name_active = name.."_active"
|
|
||||||
|
|
||||||
local function movestone_move (pos)
|
|
||||||
if minetest.get_node(pos).name ~= name_active then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local direction = mesecon.get_movestone_direction(pos)
|
|
||||||
if not direction then
|
|
||||||
minetest.set_node(pos, {name = name})
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local frontpos = vector.add(pos, direction)
|
|
||||||
local backpos = vector.subtract(pos, direction)
|
|
||||||
|
|
||||||
-- ### Step 1: Push nodes in front ###
|
|
||||||
local maxpush = mesecon.setting("movestone_max_push", 50)
|
|
||||||
local maxpull = mesecon.setting("movestone_max_pull", 50)
|
|
||||||
local success, stack, oldstack = mesecon.mvps_push(frontpos, direction, maxpush)
|
|
||||||
if success then
|
|
||||||
mesecon.mvps_process_stack(stack)
|
|
||||||
mesecon.mvps_move_objects(frontpos, direction, oldstack)
|
|
||||||
-- Too large stack/stopper in the way: try again very soon
|
|
||||||
else
|
|
||||||
minetest.after(0.05, movestone_move, pos)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- ### Step 2: Move the movestone ###
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
minetest.set_node(frontpos, node)
|
|
||||||
minetest.remove_node(pos)
|
|
||||||
mesecon.on_dignode(pos, node)
|
|
||||||
mesecon.on_placenode(frontpos, node)
|
|
||||||
minetest.after(timer_interval, movestone_move, frontpos)
|
|
||||||
|
|
||||||
-- ### Step 3: If sticky, pull stack behind ###
|
|
||||||
if is_sticky then
|
|
||||||
mesecon.mvps_pull_all(backpos, direction, maxpull)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def.mesecons = {effector = {
|
|
||||||
action_on = function (pos)
|
|
||||||
if minetest.get_node(pos).name ~= name_active then
|
|
||||||
minetest.set_node(pos, {name = name_active})
|
|
||||||
movestone_move(pos)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
action_off = function (pos)
|
|
||||||
minetest.set_node(pos, {name = name})
|
|
||||||
end
|
|
||||||
}}
|
|
||||||
|
|
||||||
def.drop = name
|
|
||||||
|
|
||||||
minetest.register_node(name, def)
|
|
||||||
|
|
||||||
-- active node only
|
|
||||||
local def_active = table.copy(def)
|
|
||||||
def_active.groups.not_in_creative_inventory = 1
|
|
||||||
minetest.register_node(name_active, def_active)
|
|
||||||
end
|
|
||||||
|
|
||||||
mesecon.register_movestone("mesecons_movestones:movestone", {
|
|
||||||
tiles = {"jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_arrows.png", "jeija_movestone_arrows.png"},
|
tiles = {"jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_arrows.png", "jeija_movestone_arrows.png"},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
legacy_facedir_simple = true,
|
||||||
groups = {cracky=3},
|
groups = {cracky=3},
|
||||||
description="Movestone",
|
description="Movestone",
|
||||||
sounds = default.node_sound_stone_defaults()
|
sounds = default.node_sound_stone_defaults(),
|
||||||
}, false)
|
mesecons = {effector = {
|
||||||
|
action_on = function (pos, node)
|
||||||
|
local direction=mesecon.get_movestone_direction(pos)
|
||||||
|
if not direction then return end
|
||||||
|
minetest.remove_node(pos)
|
||||||
|
mesecon.on_dignode(pos, node)
|
||||||
|
minetest.add_entity(pos, "mesecons_movestones:movestone_entity")
|
||||||
|
end
|
||||||
|
}}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_entity("mesecons_movestones:movestone_entity", {
|
||||||
|
physical = false,
|
||||||
|
visual = "sprite",
|
||||||
|
textures = {"jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_arrows.png", "jeija_movestone_arrows.png"},
|
||||||
|
collisionbox = {-0.5,-0.5,-0.5, 0.5, 0.5, 0.5},
|
||||||
|
visual = "cube",
|
||||||
|
lastdir = {x=0, y=0, z=0},
|
||||||
|
|
||||||
|
on_punch = function(self, hitter)
|
||||||
|
self.object:remove()
|
||||||
|
hitter:get_inventory():add_item("main", "mesecons_movestones:movestone")
|
||||||
|
end,
|
||||||
|
|
||||||
|
on_step = function(self, dtime)
|
||||||
|
local pos = self.object:getpos()
|
||||||
|
pos.x, pos.y, pos.z = math.floor(pos.x+0.5), math.floor(pos.y+0.5), math.floor(pos.z+0.5)
|
||||||
|
local direction = mesecon.get_movestone_direction(pos)
|
||||||
|
|
||||||
|
local maxpush = mesecon.setting("movestone_max_push", 50)
|
||||||
|
if not direction then -- no mesecon power
|
||||||
|
--push only solid nodes
|
||||||
|
local name = minetest.get_node(pos).name
|
||||||
|
if name ~= "air" and name ~= "ignore"
|
||||||
|
and ((not minetest.registered_nodes[name])
|
||||||
|
or minetest.registered_nodes[name].liquidtype == "none") then
|
||||||
|
mesecon.mvps_push(pos, self.lastdir, maxpush)
|
||||||
|
end
|
||||||
|
local nn = {name="mesecons_movestones:movestone"}
|
||||||
|
minetest.add_node(pos, nn)
|
||||||
|
self.object:remove()
|
||||||
|
mesecon.on_placenode(pos, nn)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local success, stack, oldstack =
|
||||||
|
mesecon.mvps_push(pos, direction, maxpush)
|
||||||
|
if not success then -- Too large stack/stopper in the way
|
||||||
|
local nn = {name="mesecons_movestones:movestone"}
|
||||||
|
minetest.add_node(pos, nn)
|
||||||
|
self.object:remove()
|
||||||
|
mesecon.on_placenode(pos, nn)
|
||||||
|
return
|
||||||
|
else
|
||||||
|
mesecon.mvps_process_stack (stack)
|
||||||
|
mesecon.mvps_move_objects (pos, direction, oldstack)
|
||||||
|
self.lastdir = direction
|
||||||
|
end
|
||||||
|
|
||||||
|
self.object:setvelocity({x=direction.x*2, y=direction.y*2, z=direction.z*2})
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "mesecons_movestones:movestone 2",
|
output = "mesecons_movestones:movestone 2",
|
||||||
@ -135,14 +134,28 @@ minetest.register_craft({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- STICKY_MOVESTONE
|
-- STICKY_MOVESTONE
|
||||||
mesecon.register_movestone("mesecons_movestones:sticky_movestone", {
|
|
||||||
|
minetest.register_node("mesecons_movestones:sticky_movestone", {
|
||||||
tiles = {"jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_sticky_movestone.png", "jeija_sticky_movestone.png"},
|
tiles = {"jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_sticky_movestone.png", "jeija_sticky_movestone.png"},
|
||||||
inventory_image = minetest.inventorycube("jeija_sticky_movestone.png", "jeija_movestone_side.png", "jeija_movestone_side.png"),
|
inventory_image = minetest.inventorycube("jeija_sticky_movestone.png", "jeija_movestone_side.png", "jeija_movestone_side.png"),
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
legacy_facedir_simple = true,
|
||||||
groups = {cracky=3},
|
groups = {cracky=3},
|
||||||
description="Sticky Movestone",
|
description="Sticky Movestone",
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_stone_defaults(),
|
||||||
}, true)
|
mesecons = {effector = {
|
||||||
|
action_on = function (pos, node)
|
||||||
|
local direction=mesecon.get_movestone_direction(pos)
|
||||||
|
if not direction then return end
|
||||||
|
minetest.remove_node(pos)
|
||||||
|
mesecon.on_dignode(pos, node)
|
||||||
|
minetest.add_entity(pos, "mesecons_movestones:sticky_movestone_entity")
|
||||||
|
end
|
||||||
|
}}
|
||||||
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "mesecons_movestones:sticky_movestone 2",
|
output = "mesecons_movestones:sticky_movestone 2",
|
||||||
@ -151,6 +164,63 @@ minetest.register_craft({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Don't allow pushing movestones while they're active
|
minetest.register_entity("mesecons_movestones:sticky_movestone_entity", {
|
||||||
mesecon.register_mvps_stopper("mesecons_movestones:movestone_active")
|
physical = false,
|
||||||
mesecon.register_mvps_stopper("mesecons_movestones:sticky_movestone_active")
|
visual = "sprite",
|
||||||
|
textures = {"jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_sticky_movestone.png", "jeija_sticky_movestone.png"},
|
||||||
|
collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||||
|
visual = "cube",
|
||||||
|
lastdir = {x=0, y=0, z=0},
|
||||||
|
|
||||||
|
on_punch = function(self, hitter)
|
||||||
|
self.object:remove()
|
||||||
|
hitter:get_inventory():add_item("main", 'mesecons_movestones:sticky_movestone')
|
||||||
|
end,
|
||||||
|
|
||||||
|
on_step = function(self, dtime)
|
||||||
|
local pos = self.object:getpos()
|
||||||
|
pos.x, pos.y, pos.z = math.floor(pos.x+0.5), math.floor(pos.y+0.5), math.floor(pos.z+0.5)
|
||||||
|
local direction = mesecon.get_movestone_direction(pos)
|
||||||
|
|
||||||
|
if not direction then -- no mesecon power
|
||||||
|
--push only solid nodes
|
||||||
|
local name = minetest.get_node(pos).name
|
||||||
|
if name ~= "air" and name ~= "ignore"
|
||||||
|
and ((not minetest.registered_nodes[name])
|
||||||
|
or minetest.registered_nodes[name].liquidtype == "none") then
|
||||||
|
mesecon.mvps_push(pos, self.lastdir,
|
||||||
|
mesecon.setting("movestone_max_push", 50))
|
||||||
|
--STICKY
|
||||||
|
mesecon.mvps_pull_all(pos, self.lastdir)
|
||||||
|
end
|
||||||
|
local nn = {name="mesecons_movestones:sticky_movestone"}
|
||||||
|
minetest.add_node(pos, nn)
|
||||||
|
self.object:remove()
|
||||||
|
mesecon.on_placenode(pos, nn)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local success, stack, oldstack =
|
||||||
|
mesecon.mvps_push(pos, direction, mesecon.setting("movestone_max_push", 50))
|
||||||
|
if not success then -- Too large stack/stopper in the way
|
||||||
|
local nn = {name="mesecons_movestones:sticky_movestone"}
|
||||||
|
minetest.add_node(pos, nn)
|
||||||
|
self.object:remove()
|
||||||
|
mesecon.on_placenode(pos, nn)
|
||||||
|
return
|
||||||
|
else
|
||||||
|
mesecon.mvps_process_stack (stack)
|
||||||
|
mesecon.mvps_move_objects (pos, direction, oldstack)
|
||||||
|
self.lastdir = direction
|
||||||
|
end
|
||||||
|
|
||||||
|
self.object:setvelocity({x=direction.x*2, y=direction.y*2, z=direction.z*2})
|
||||||
|
|
||||||
|
--STICKY
|
||||||
|
mesecon.mvps_pull_all(pos, direction)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
mesecon.register_mvps_unmov("mesecons_movestones:movestone_entity")
|
||||||
|
mesecon.register_mvps_unmov("mesecons_movestones:sticky_movestone_entity")
|
||||||
|
@ -1,19 +1,9 @@
|
|||||||
--register stoppers for movestones/pistons
|
--register stoppers for movestones/pistons
|
||||||
|
|
||||||
mesecon.mvps_stoppers = {}
|
mesecon.mvps_stoppers = {}
|
||||||
mesecon.on_mvps_move = {}
|
|
||||||
mesecon.mvps_unmov = {}
|
mesecon.mvps_unmov = {}
|
||||||
|
mesecon.on_mvps_move = {}
|
||||||
|
|
||||||
--- Objects (entities) that cannot be moved
|
|
||||||
function mesecon.register_mvps_unmov(objectname)
|
|
||||||
mesecon.mvps_unmov[objectname] = true;
|
|
||||||
end
|
|
||||||
|
|
||||||
function mesecon.is_mvps_unmov(objectname)
|
|
||||||
return mesecon.mvps_unmov[objectname]
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Nodes that cannot be pushed / pulled by movestones, pistons
|
|
||||||
function mesecon.is_mvps_stopper(node, pushdir, stack, stackid)
|
function mesecon.is_mvps_stopper(node, pushdir, stack, stackid)
|
||||||
local get_stopper = mesecon.mvps_stoppers[node.name]
|
local get_stopper = mesecon.mvps_stoppers[node.name]
|
||||||
if type (get_stopper) == "function" then
|
if type (get_stopper) == "function" then
|
||||||
@ -29,6 +19,15 @@ function mesecon.register_mvps_stopper(nodename, get_stopper)
|
|||||||
mesecon.mvps_stoppers[nodename] = get_stopper
|
mesecon.mvps_stoppers[nodename] = get_stopper
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Objects that cannot be moved (e.g. movestones)
|
||||||
|
function mesecon.register_mvps_unmov(objectname)
|
||||||
|
mesecon.mvps_unmov[objectname] = true;
|
||||||
|
end
|
||||||
|
|
||||||
|
function mesecon.is_mvps_unmov(objectname)
|
||||||
|
return mesecon.mvps_unmov[objectname]
|
||||||
|
end
|
||||||
|
|
||||||
-- Functions to be called on mvps movement
|
-- Functions to be called on mvps movement
|
||||||
function mesecon.register_on_mvps_move(callback)
|
function mesecon.register_on_mvps_move(callback)
|
||||||
mesecon.on_mvps_move[#mesecon.on_mvps_move+1] = callback
|
mesecon.on_mvps_move[#mesecon.on_mvps_move+1] = callback
|
||||||
@ -47,102 +46,37 @@ function mesecon.mvps_process_stack(stack)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.mvps_get_stack(pos, dir, maximum, all_pull_sticky)
|
function mesecon.mvps_get_stack(pos, dir, maximum)
|
||||||
-- determine the number of nodes to be pushed
|
-- determine the number of nodes to be pushed
|
||||||
|
local np = {x = pos.x, y = pos.y, z = pos.z}
|
||||||
local nodes = {}
|
local nodes = {}
|
||||||
local frontiers = {pos}
|
while true do
|
||||||
|
local nn = minetest.get_node_or_nil(np)
|
||||||
while #frontiers > 0 do
|
if not nn or #nodes > maximum then
|
||||||
local np = frontiers[1]
|
-- don't push at all, something is in the way (unloaded map or too many nodes)
|
||||||
local nn = minetest.get_node(np)
|
return nil
|
||||||
|
|
||||||
if nn.name ~= "air"
|
|
||||||
and minetest.registered_nodes[nn.name]
|
|
||||||
and minetest.registered_nodes[nn.name].liquidtype == "none" then
|
|
||||||
table.insert(nodes, {node = nn, pos = np})
|
|
||||||
if #nodes > maximum then return nil end
|
|
||||||
|
|
||||||
-- add connected nodes to frontiers, connected is a vector list
|
|
||||||
-- the vectors must be absolute positions
|
|
||||||
local connected = {}
|
|
||||||
if minetest.registered_nodes[nn.name]
|
|
||||||
and minetest.registered_nodes[nn.name].mvps_sticky then
|
|
||||||
connected = minetest.registered_nodes[nn.name].mvps_sticky(np, nn)
|
|
||||||
end
|
|
||||||
|
|
||||||
table.insert(connected, vector.add(np, dir))
|
|
||||||
|
|
||||||
-- If adjacent node is sticky block and connects add that
|
|
||||||
-- position to the connected table
|
|
||||||
for _, r in ipairs(mesecon.rules.alldirs) do
|
|
||||||
local adjpos = vector.add(np, r)
|
|
||||||
local adjnode = minetest.get_node(adjpos)
|
|
||||||
if minetest.registered_nodes[adjnode.name]
|
|
||||||
and minetest.registered_nodes[adjnode.name].mvps_sticky then
|
|
||||||
local sticksto = minetest.registered_nodes[adjnode.name]
|
|
||||||
.mvps_sticky(adjpos, adjnode)
|
|
||||||
|
|
||||||
-- connects to this position?
|
|
||||||
for _, link in ipairs(sticksto) do
|
|
||||||
if vector.equals(link, np) then
|
|
||||||
table.insert(connected, adjpos)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if all_pull_sticky then
|
|
||||||
table.insert(connected, vector.subtract(np, dir))
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Make sure there are no duplicates in frontiers / nodes before
|
|
||||||
-- adding nodes in "connected" to frontiers
|
|
||||||
for _, cp in ipairs(connected) do
|
|
||||||
local duplicate = false
|
|
||||||
for _, rp in ipairs(nodes) do
|
|
||||||
if vector.equals(cp, rp.pos) then
|
|
||||||
duplicate = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
for _, fp in ipairs(frontiers) do
|
|
||||||
if vector.equals(cp, fp) then
|
|
||||||
duplicate = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if not duplicate then
|
|
||||||
table.insert(frontiers, cp)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
table.remove(frontiers, 1)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
if nn.name == "air"
|
||||||
|
or (minetest.registered_nodes[nn.name]
|
||||||
|
and minetest.registered_nodes[nn.name].liquidtype ~= "none") then --is liquid
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
table.insert (nodes, {node = nn, pos = np})
|
||||||
|
|
||||||
|
np = mesecon.addPosRule(np, dir)
|
||||||
|
end
|
||||||
return nodes
|
return nodes
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.mvps_push(pos, dir, maximum)
|
function mesecon.mvps_push(pos, dir, maximum) -- pos: pos of mvps; dir: direction of push; maximum: maximum nodes to be pushed
|
||||||
return mesecon.mvps_push_or_pull(pos, dir, dir, maximum)
|
local nodes = mesecon.mvps_get_stack(pos, dir, maximum)
|
||||||
end
|
|
||||||
|
|
||||||
function mesecon.mvps_pull_all(pos, dir, maximum)
|
|
||||||
return mesecon.mvps_push_or_pull(pos, vector.multiply(dir, -1), dir, maximum, true)
|
|
||||||
end
|
|
||||||
|
|
||||||
function mesecon.mvps_pull_single(pos, dir, maximum)
|
|
||||||
return mesecon.mvps_push_or_pull(pos, vector.multiply(dir, -1), dir, maximum)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- pos: pos of mvps; stackdir: direction of building the stack
|
|
||||||
-- movedir: direction of actual movement
|
|
||||||
-- maximum: maximum nodes to be pushed
|
|
||||||
-- all_pull_sticky: All nodes are sticky in the direction that they are pulled from
|
|
||||||
function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, all_pull_sticky)
|
|
||||||
local nodes = mesecon.mvps_get_stack(pos, movedir, maximum, all_pull_sticky)
|
|
||||||
|
|
||||||
if not nodes then return end
|
if not nodes then return end
|
||||||
-- determine if one of the nodes blocks the push / pull
|
-- determine if one of the nodes blocks the push
|
||||||
for id, n in ipairs(nodes) do
|
for id, n in ipairs(nodes) do
|
||||||
if mesecon.is_mvps_stopper(n.node, movedir, nodes, id) then
|
if mesecon.is_mvps_stopper(n.node, dir, nodes, id) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -160,23 +94,22 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, all_pull_sti
|
|||||||
|
|
||||||
-- add nodes
|
-- add nodes
|
||||||
for _, n in ipairs(nodes) do
|
for _, n in ipairs(nodes) do
|
||||||
local np = mesecon.addPosRule(n.pos, movedir)
|
local np = mesecon.addPosRule(n.pos, dir)
|
||||||
|
|
||||||
minetest.add_node(np, n.node)
|
minetest.add_node(np, n.node)
|
||||||
minetest.get_meta(np):from_table(n.meta)
|
minetest.get_meta(np):from_table(n.meta)
|
||||||
end
|
end
|
||||||
|
|
||||||
local moved_nodes = {}
|
local moved_nodes = {}
|
||||||
local oldstack = mesecon.tablecopy(nodes)
|
local oldstack = mesecon.tablecopy(nodes)
|
||||||
for i in ipairs(nodes) do
|
for i in ipairs(nodes) do
|
||||||
moved_nodes[i] = {}
|
moved_nodes[i] = {}
|
||||||
moved_nodes[i].oldpos = nodes[i].pos
|
moved_nodes[i].oldpos = nodes[i].pos
|
||||||
nodes[i].pos = mesecon.addPosRule(nodes[i].pos, movedir)
|
nodes[i].pos = mesecon.addPosRule(nodes[i].pos, dir)
|
||||||
moved_nodes[i].pos = nodes[i].pos
|
moved_nodes[i].pos = nodes[i].pos
|
||||||
moved_nodes[i].node = nodes[i].node
|
moved_nodes[i].node = nodes[i].node
|
||||||
moved_nodes[i].meta = nodes[i].meta
|
moved_nodes[i].meta = nodes[i].meta
|
||||||
end
|
end
|
||||||
|
|
||||||
on_mvps_move(moved_nodes)
|
on_mvps_move(moved_nodes)
|
||||||
|
|
||||||
return true, nodes, oldstack
|
return true, nodes, oldstack
|
||||||
@ -189,6 +122,73 @@ mesecon.register_on_mvps_move(function(moved_nodes)
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
function mesecon.mvps_pull_single(pos, dir) -- pos: pos of mvps; direction: direction of pull (matches push direction for sticky pistons)
|
||||||
|
local np = mesecon.addPosRule(pos, dir)
|
||||||
|
local nn = minetest.get_node(np)
|
||||||
|
|
||||||
|
if ((not minetest.registered_nodes[nn.name]) --unregistered node
|
||||||
|
or minetest.registered_nodes[nn.name].liquidtype == "none") --non-liquid node
|
||||||
|
and not mesecon.is_mvps_stopper(nn, {x = -dir.x, y = -dir.y, z = -dir.z}, {{pos = np, node = nn}}, 1) then --non-stopper node
|
||||||
|
local meta = minetest.get_meta(np):to_table()
|
||||||
|
minetest.remove_node(np)
|
||||||
|
minetest.add_node(pos, nn)
|
||||||
|
minetest.get_meta(pos):from_table(meta)
|
||||||
|
|
||||||
|
nodeupdate(np)
|
||||||
|
nodeupdate(pos)
|
||||||
|
mesecon.on_dignode(np, nn)
|
||||||
|
mesecon.update_autoconnect(np)
|
||||||
|
on_mvps_move({{pos = pos, oldpos = np, node = nn, meta = meta}})
|
||||||
|
end
|
||||||
|
return {{pos = np, node = {param2 = 0, name = "air"}}, {pos = pos, node = nn}}
|
||||||
|
end
|
||||||
|
|
||||||
|
function mesecon.mvps_pull_all(pos, direction) -- pos: pos of mvps; direction: direction of pull
|
||||||
|
local lpos = {x=pos.x-direction.x, y=pos.y-direction.y, z=pos.z-direction.z} -- 1 away
|
||||||
|
local lnode = minetest.get_node(lpos)
|
||||||
|
local lpos2 = {x=pos.x-direction.x*2, y=pos.y-direction.y*2, z=pos.z-direction.z*2} -- 2 away
|
||||||
|
local lnode2 = minetest.get_node(lpos2)
|
||||||
|
|
||||||
|
--avoid pulling solid nodes
|
||||||
|
if lnode.name ~= "ignore"
|
||||||
|
and lnode.name ~= "air"
|
||||||
|
and ((not minetest.registered_nodes[lnode.name])
|
||||||
|
or minetest.registered_nodes[lnode.name].liquidtype == "none") then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
--avoid pulling empty or liquid nodes
|
||||||
|
if lnode2.name == "ignore"
|
||||||
|
or lnode2.name == "air"
|
||||||
|
or (minetest.registered_nodes[lnode2.name]
|
||||||
|
and minetest.registered_nodes[lnode2.name].liquidtype ~= "none") then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local moved_nodes = {}
|
||||||
|
local oldpos = {x=lpos2.x + direction.x, y=lpos2.y + direction.y, z=lpos2.z + direction.z}
|
||||||
|
repeat
|
||||||
|
lnode2 = minetest.get_node(lpos2)
|
||||||
|
local meta = minetest.get_meta(lnode2):to_table()
|
||||||
|
minetest.add_node(oldpos, lnode2)
|
||||||
|
minetest.get_meta(oldpos):from_table(meta)
|
||||||
|
moved_nodes[#moved_nodes+1] = {pos = oldpos, oldpos = lpos2, node = lnode2, meta = meta}
|
||||||
|
nodeupdate(oldpos)
|
||||||
|
oldpos = {x=lpos2.x, y=lpos2.y, z=lpos2.z}
|
||||||
|
lpos2.x = lpos2.x-direction.x
|
||||||
|
lpos2.y = lpos2.y-direction.y
|
||||||
|
lpos2.z = lpos2.z-direction.z
|
||||||
|
lnode = minetest.get_node(lpos2)
|
||||||
|
until lnode.name == "air"
|
||||||
|
or lnode.name == "ignore"
|
||||||
|
or (minetest.registered_nodes[lnode.name]
|
||||||
|
and minetest.registered_nodes[lnode.name].liquidtype ~= "none")
|
||||||
|
minetest.remove_node(oldpos)
|
||||||
|
mesecon.on_dignode(oldpos, lnode2)
|
||||||
|
mesecon.update_autoconnect(oldpos)
|
||||||
|
on_mvps_move(moved_nodes)
|
||||||
|
end
|
||||||
|
|
||||||
function mesecon.mvps_move_objects(pos, dir, nodestack)
|
function mesecon.mvps_move_objects(pos, dir, nodestack)
|
||||||
local objects_to_move = {}
|
local objects_to_move = {}
|
||||||
|
|
||||||
@ -231,8 +231,5 @@ function mesecon.mvps_move_objects(pos, dir, nodestack)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
mesecon.register_mvps_stopper("doors:door_steel_b_1")
|
|
||||||
mesecon.register_mvps_stopper("doors:door_steel_t_1")
|
|
||||||
mesecon.register_mvps_stopper("doors:door_steel_b_2")
|
|
||||||
mesecon.register_mvps_stopper("doors:door_steel_t_2")
|
|
||||||
mesecon.register_mvps_stopper("default:chest_locked")
|
mesecon.register_mvps_stopper("default:chest_locked")
|
||||||
|
mesecon.register_mvps_stopper("default:furnace")
|
||||||
|
@ -61,15 +61,9 @@ mesecon.noteblock_play = function (pos, param2)
|
|||||||
if block_below_name == "default:glass" then
|
if block_below_name == "default:glass" then
|
||||||
soundname="mesecons_noteblock_hihat"
|
soundname="mesecons_noteblock_hihat"
|
||||||
end
|
end
|
||||||
if block_below_name == "default:steelblock" then
|
|
||||||
soundname=soundname.."2" -- Go up an octave.
|
|
||||||
end
|
|
||||||
if block_below_name == "default:stone" then
|
if block_below_name == "default:stone" then
|
||||||
soundname="mesecons_noteblock_kick"
|
soundname="mesecons_noteblock_kick"
|
||||||
end
|
end
|
||||||
if block_below_name == "default:lava_source" then
|
|
||||||
soundname="fire_large"
|
|
||||||
end
|
|
||||||
if block_below_name == "default:chest" then
|
if block_below_name == "default:chest" then
|
||||||
soundname="mesecons_noteblock_snare"
|
soundname="mesecons_noteblock_snare"
|
||||||
end
|
end
|
||||||
@ -79,9 +73,6 @@ mesecon.noteblock_play = function (pos, param2)
|
|||||||
if block_below_name == "default:wood" then
|
if block_below_name == "default:wood" then
|
||||||
soundname="mesecons_noteblock_litecrash"
|
soundname="mesecons_noteblock_litecrash"
|
||||||
end
|
end
|
||||||
if block_below_name == "default:coalblock" then
|
|
||||||
soundname="tnt_explode"
|
|
||||||
end
|
|
||||||
minetest.sound_play(soundname,
|
minetest.sound_play(soundname,
|
||||||
{pos = pos, gain = 1.0, max_hear_distance = 32,})
|
{pos = pos, gain = 1.0, max_hear_distance = 32,})
|
||||||
end
|
end
|
||||||
|
@ -89,8 +89,8 @@ local piston_on = function(pos, node)
|
|||||||
max_hear_distance = 20,
|
max_hear_distance = 20,
|
||||||
gain = 0.3,
|
gain = 0.3,
|
||||||
})
|
})
|
||||||
mesecon.mvps_process_stack(stack)
|
mesecon.mvps_process_stack (stack)
|
||||||
mesecon.mvps_move_objects(np, dir, oldstack)
|
mesecon.mvps_move_objects (np, dir, oldstack)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -100,10 +100,9 @@ local piston_off = function(pos, node)
|
|||||||
piston_remove_pusher(pos, node)
|
piston_remove_pusher(pos, node)
|
||||||
|
|
||||||
if pistonspec.sticky then
|
if pistonspec.sticky then
|
||||||
local maxpull = mesecon.setting("piston_max_pull", 15)
|
|
||||||
local dir = piston_get_direction(pistonspec.dir, node)
|
local dir = piston_get_direction(pistonspec.dir, node)
|
||||||
local pullpos = vector.add(pos, vector.multiply(dir, 2))
|
local pullpos = mesecon.addPosRule(pos, dir)
|
||||||
local stack = mesecon.mvps_pull_single(pullpos, vector.multiply(dir, -1), maxpull)
|
local stack = mesecon.mvps_pull_single(pullpos, dir)
|
||||||
mesecon.mvps_process_stack(pos, dir, stack)
|
mesecon.mvps_process_stack(pos, dir, stack)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -275,7 +274,7 @@ minetest.register_node("mesecons_pistons:piston_sticky_on", {
|
|||||||
groups = {cracky = 3, not_in_creative_inventory = 1},
|
groups = {cracky = 3, not_in_creative_inventory = 1},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
drop = "mesecons_pistons:piston_sticky_off",
|
drop = "mesecons_pistons:piston_normal_off",
|
||||||
after_dig_node = piston_remove_pusher,
|
after_dig_node = piston_remove_pusher,
|
||||||
node_box = piston_on_box,
|
node_box = piston_on_box,
|
||||||
selection_box = piston_on_box,
|
selection_box = piston_on_box,
|
||||||
|
@ -26,6 +26,6 @@ minetest.register_craft({
|
|||||||
recipe = {
|
recipe = {
|
||||||
{"group:mesecon_conductor_craftable"},
|
{"group:mesecon_conductor_craftable"},
|
||||||
{"group:mesecon_conductor_craftable"},
|
{"group:mesecon_conductor_craftable"},
|
||||||
{"group:sapling"},
|
{"default:sapling"},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -22,12 +22,18 @@ pp_on_timer = function (pos, elapsed)
|
|||||||
if objs[1] == nil and node.name == basename .. "_on" then
|
if objs[1] == nil and node.name == basename .. "_on" then
|
||||||
minetest.add_node(pos, {name = basename .. "_off"})
|
minetest.add_node(pos, {name = basename .. "_off"})
|
||||||
mesecon.receptor_off(pos, mesecon.rules.pplate)
|
mesecon.receptor_off(pos, mesecon.rules.pplate)
|
||||||
elseif node.name == basename .. "_off" then
|
-- force deactivation of mesecon two blocks below (hacky)
|
||||||
|
if not mesecon.connected_to_receptor(two_below) then
|
||||||
|
mesecon.turnoff(two_below)
|
||||||
|
end
|
||||||
|
else
|
||||||
for k, obj in pairs(objs) do
|
for k, obj in pairs(objs) do
|
||||||
local objpos = obj:getpos()
|
local objpos = obj:getpos()
|
||||||
if objpos.y > pos.y-1 and objpos.y < pos.y then
|
if objpos.y > pos.y-1 and objpos.y < pos.y then
|
||||||
minetest.add_node(pos, {name = basename .. "_on"})
|
minetest.add_node(pos, {name = basename .. "_on"})
|
||||||
mesecon.receptor_on(pos, mesecon.rules.pplate )
|
mesecon.receptor_on(pos, mesecon.rules.pplate )
|
||||||
|
-- force activation of mesecon two blocks below (hacky)
|
||||||
|
mesecon.turnon(two_below)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
mesecons
|
|
||||||
mesecons_mvps
|
|
@ -1,16 +0,0 @@
|
|||||||
-- Sticky blocks can be used together with pistons or movestones to push / pull
|
|
||||||
-- structures that are "glued" together using sticky blocks
|
|
||||||
|
|
||||||
-- All sides sticky block
|
|
||||||
minetest.register_node("mesecons_stickyblocks:sticky_block_all", {
|
|
||||||
description = "All-sides sticky block",
|
|
||||||
tiles = {"default_grass_footsteps.png"},
|
|
||||||
groups = {dig_immediate=2},
|
|
||||||
mvps_sticky = function (pos, node)
|
|
||||||
local connected = {}
|
|
||||||
for _, r in ipairs(mesecon.rules.alldirs) do
|
|
||||||
table.insert(connected, vector.add(pos, r))
|
|
||||||
end
|
|
||||||
return connected
|
|
||||||
end
|
|
||||||
})
|
|
@ -3,9 +3,9 @@
|
|||||||
-- Powers the block 2 nodes behind (using a receiver)
|
-- Powers the block 2 nodes behind (using a receiver)
|
||||||
mesecon.register_node("mesecons_walllever:wall_lever", {
|
mesecon.register_node("mesecons_walllever:wall_lever", {
|
||||||
description="Lever",
|
description="Lever",
|
||||||
drawtype = "mesh",
|
drawtype = "nodebox",
|
||||||
inventory_image = "jeija_wall_lever_inv.png",
|
inventory_image = "jeija_wall_lever_off.png",
|
||||||
wield_image = "jeija_wall_lever_inv.png",
|
wield_image = "jeija_wall_lever_off.png",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
@ -24,16 +24,40 @@ mesecon.register_node("mesecons_walllever:wall_lever", {
|
|||||||
minetest.sound_play("mesecons_lever", {pos=pos})
|
minetest.sound_play("mesecons_lever", {pos=pos})
|
||||||
end
|
end
|
||||||
},{
|
},{
|
||||||
tiles = { "jeija_wall_lever_off.png" },
|
tiles = { "jeija_wall_lever_tb.png", "jeija_wall_lever_bottom.png",
|
||||||
mesh="jeija_wall_lever_off.obj",
|
"jeija_wall_lever_sides.png", "jeija_wall_lever_sides.png",
|
||||||
|
"jeija_wall_lever_back.png", "jeija_wall_lever_off.png",
|
||||||
|
},
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {{ -6/16, -6/16, 6/16, 6/16, 6/16, 8/16 }, -- the base "slab"
|
||||||
|
{ -5/16, -3/16, 5/16, 5/16, 3/16, 6/16 }, -- the lighted ring area
|
||||||
|
{ -4/16, -2/16, 4/16, 4/16, 2/16, 5/16 }, -- the raised bit
|
||||||
|
{ -2/16, -1/16, 3/16, 2/16, 1/16, 4/16 }, -- the lever "hinge"
|
||||||
|
{ -1/16, -8/16, 4/16, 1/16, 0, 6/16 }} -- the lever itself.
|
||||||
|
},
|
||||||
mesecons = {receptor = {
|
mesecons = {receptor = {
|
||||||
rules = mesecon.rules.buttonlike_get,
|
rules = mesecon.rules.buttonlike_get,
|
||||||
state = mesecon.state.off
|
state = mesecon.state.off
|
||||||
}},
|
}},
|
||||||
groups = {dig_immediate = 2, mesecon_needs_receiver = 1}
|
groups = {dig_immediate = 2, mesecon_needs_receiver = 1}
|
||||||
},{
|
},{
|
||||||
tiles = { "jeija_wall_lever_on.png" },
|
tiles = {
|
||||||
mesh="jeija_wall_lever_on.obj",
|
"jeija_wall_lever_top.png",
|
||||||
|
"jeija_wall_lever_tb.png",
|
||||||
|
"jeija_wall_lever_sides.png",
|
||||||
|
"jeija_wall_lever_sides.png",
|
||||||
|
"jeija_wall_lever_back.png",
|
||||||
|
"jeija_wall_lever_on.png",
|
||||||
|
},
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {{ -6/16, -6/16, 6/16, 6/16, 6/16, 8/16 }, -- the base "slab"
|
||||||
|
{ -5/16, -3/16, 5/16, 5/16, 3/16, 6/16 }, -- the lighted ring area
|
||||||
|
{ -4/16, -2/16, 4/16, 4/16, 2/16, 5/16 }, -- the raised bit
|
||||||
|
{ -2/16, -1/16, 3/16, 2/16, 1/16, 4/16 }, -- the lever "hinge"
|
||||||
|
{ -1/16, 0, 4/16, 1/16, 8/16, 6/16 }} -- the lever itself.
|
||||||
|
},
|
||||||
mesecons = {receptor = {
|
mesecons = {receptor = {
|
||||||
rules = mesecon.rules.buttonlike_get,
|
rules = mesecon.rules.buttonlike_get,
|
||||||
state = mesecon.state.on
|
state = mesecon.state.on
|
||||||
|
@ -1,263 +0,0 @@
|
|||||||
# Blender v2.73 (sub 0) OBJ File: 'mesecons-wall-lever-off.blend'
|
|
||||||
# www.blender.org
|
|
||||||
o nodebox-5
|
|
||||||
v 0.289062 0.156250 0.312500
|
|
||||||
v -0.375000 0.375000 0.375000
|
|
||||||
v -0.375000 -0.375000 0.375000
|
|
||||||
v 0.332500 0.207500 0.375000
|
|
||||||
v 0.332500 -0.207500 0.375000
|
|
||||||
v 0.375000 0.375000 0.375000
|
|
||||||
v 0.375000 -0.375000 0.375000
|
|
||||||
v 0.289062 -0.156250 0.312500
|
|
||||||
v -0.062500 -0.036146 0.200392
|
|
||||||
v -0.062500 -0.068498 0.321133
|
|
||||||
v -0.062500 -0.394498 0.233782
|
|
||||||
v -0.062500 -0.362146 0.113041
|
|
||||||
v -0.332500 0.207500 0.375000
|
|
||||||
v 0.062500 -0.036146 0.200392
|
|
||||||
v 0.062500 -0.068498 0.321133
|
|
||||||
v -0.332500 -0.207500 0.375000
|
|
||||||
v 0.332500 0.207500 0.375000
|
|
||||||
v 0.062500 -0.394498 0.233782
|
|
||||||
v 0.062500 -0.362146 0.113041
|
|
||||||
v 0.332500 -0.207500 0.375000
|
|
||||||
v 0.375000 -0.375000 0.375000
|
|
||||||
v 0.375000 -0.375000 0.500000
|
|
||||||
v 0.375000 0.375000 0.500000
|
|
||||||
v 0.375000 0.375000 0.375000
|
|
||||||
v -0.375000 -0.375000 0.375000
|
|
||||||
v -0.375000 -0.375000 0.500000
|
|
||||||
v -0.375000 0.375000 0.500000
|
|
||||||
v -0.375000 0.375000 0.375000
|
|
||||||
v -0.289062 0.156250 0.312500
|
|
||||||
v -0.332500 0.207500 0.375000
|
|
||||||
v -0.332500 -0.207500 0.375000
|
|
||||||
v -0.289062 -0.156250 0.312500
|
|
||||||
v -0.250000 0.125000 0.312500
|
|
||||||
v -0.250000 -0.125000 0.312500
|
|
||||||
v 0.250000 0.125000 0.312500
|
|
||||||
v 0.250000 -0.125000 0.312500
|
|
||||||
v -0.250000 -0.000000 0.250000
|
|
||||||
v -0.000000 -0.125000 0.250000
|
|
||||||
v 0.250000 -0.000000 0.250000
|
|
||||||
v 0.000000 0.125000 0.250000
|
|
||||||
v -0.250000 0.125000 0.250000
|
|
||||||
v -0.250000 0.125000 0.312500
|
|
||||||
v -0.250000 -0.125000 0.312500
|
|
||||||
v -0.250000 -0.125000 0.250000
|
|
||||||
v 0.250000 0.125000 0.250000
|
|
||||||
v 0.250000 0.125000 0.312500
|
|
||||||
v 0.250000 -0.125000 0.312500
|
|
||||||
v 0.250000 -0.125000 0.250000
|
|
||||||
v 0.250000 -0.125000 0.250000
|
|
||||||
v 0.250000 0.125000 0.250000
|
|
||||||
v -0.250000 -0.125000 0.250000
|
|
||||||
v -0.250000 0.125000 0.250000
|
|
||||||
v 0.125000 -0.062500 0.187500
|
|
||||||
v 0.125000 0.062500 0.187500
|
|
||||||
v -0.125000 -0.062500 0.187500
|
|
||||||
v -0.125000 0.062500 0.187500
|
|
||||||
v 0.065000 -0.032500 0.176992
|
|
||||||
v 0.065000 0.032500 0.176992
|
|
||||||
v -0.065000 -0.032500 0.176992
|
|
||||||
v -0.065000 0.032500 0.176992
|
|
||||||
v 0.000000 0.125000 0.250000
|
|
||||||
v 0.250000 -0.000000 0.250000
|
|
||||||
v -0.000000 -0.125000 0.250000
|
|
||||||
v -0.250000 -0.000000 0.250000
|
|
||||||
v 0.000000 0.062500 0.187500
|
|
||||||
v -0.187500 -0.093750 0.208750
|
|
||||||
v 0.125000 -0.000000 0.187500
|
|
||||||
v 0.000000 -0.062500 0.187500
|
|
||||||
v -0.125000 -0.000000 0.187500
|
|
||||||
v 0.187500 0.093750 0.208750
|
|
||||||
v 0.187500 -0.093750 0.208750
|
|
||||||
v -0.187500 0.093750 0.208750
|
|
||||||
v 0.000000 0.093750 0.208750
|
|
||||||
v 0.000000 -0.093750 0.208750
|
|
||||||
v 0.187500 -0.000000 0.208750
|
|
||||||
v -0.187500 -0.000000 0.208750
|
|
||||||
vt 0.416667 0.416667
|
|
||||||
vt 0.083333 0.416667
|
|
||||||
vt 0.055556 0.472222
|
|
||||||
vt 0.444444 0.472222
|
|
||||||
vt 0.083333 0.083333
|
|
||||||
vt 0.055556 0.027778
|
|
||||||
vt 0.444444 0.027778
|
|
||||||
vt 0.416667 0.083333
|
|
||||||
vt 0.472222 0.055556
|
|
||||||
vt 0.472222 0.444444
|
|
||||||
vt 0.027778 0.055556
|
|
||||||
vt 0.027778 0.444444
|
|
||||||
vt 0.250000 0.833333
|
|
||||||
vt 0.250000 0.638889
|
|
||||||
vt 0.305556 0.638889
|
|
||||||
vt 0.305556 0.833333
|
|
||||||
vt 0.388889 0.777778
|
|
||||||
vt 0.333333 0.777778
|
|
||||||
vt 0.333333 0.722222
|
|
||||||
vt 0.388889 0.722222
|
|
||||||
vt 0.944444 0.527778
|
|
||||||
vt 0.944444 0.916667
|
|
||||||
vt 1.000000 0.916667
|
|
||||||
vt 1.000000 0.527778
|
|
||||||
vt 0.500000 0.527778
|
|
||||||
vt 0.555556 0.527778
|
|
||||||
vt 0.555556 0.916667
|
|
||||||
vt 0.500000 0.916667
|
|
||||||
vt 0.138889 0.833333
|
|
||||||
vt 0.194444 0.833333
|
|
||||||
vt 0.194444 0.638889
|
|
||||||
vt 0.138889 0.638889
|
|
||||||
vt 0.944444 0.472222
|
|
||||||
vt 0.555556 0.472222
|
|
||||||
vt 0.555556 0.972222
|
|
||||||
vt 0.944444 0.972222
|
|
||||||
vt 0.888802 0.166753
|
|
||||||
vt 0.555642 0.166753
|
|
||||||
vt 0.527778 0.138889
|
|
||||||
vt 0.916667 0.138889
|
|
||||||
vt 0.888802 0.388802
|
|
||||||
vt 0.916667 0.416667
|
|
||||||
vt 0.527778 0.416667
|
|
||||||
vt 0.555642 0.388802
|
|
||||||
vt 0.361111 0.361111
|
|
||||||
vt 0.250000 0.361111
|
|
||||||
vt 0.138889 0.361111
|
|
||||||
vt 0.138889 0.416667
|
|
||||||
vt 0.361111 0.416667
|
|
||||||
vt 0.361111 0.083333
|
|
||||||
vt 0.361111 0.138889
|
|
||||||
vt 0.138889 0.138889
|
|
||||||
vt 0.138889 0.083333
|
|
||||||
vt 0.250000 0.083333
|
|
||||||
vt 0.416667 0.361111
|
|
||||||
vt 0.416667 0.138889
|
|
||||||
vt 0.416667 0.250000
|
|
||||||
vt 0.138889 0.250000
|
|
||||||
vt 0.083333 0.138889
|
|
||||||
vt 0.083333 0.361111
|
|
||||||
vt 0.083333 0.638889
|
|
||||||
vt 0.083333 0.833333
|
|
||||||
vt 0.444444 0.611111
|
|
||||||
vt 0.055556 0.611111
|
|
||||||
vt 0.027778 0.527778
|
|
||||||
vt 0.472222 0.527778
|
|
||||||
vt 0.444444 0.888889
|
|
||||||
vt 0.472222 0.972222
|
|
||||||
vt 0.055556 0.888889
|
|
||||||
vt 0.027778 0.972222
|
|
||||||
vt 0.722222 0.361111
|
|
||||||
vt 0.583333 0.361111
|
|
||||||
vt 0.722222 0.388802
|
|
||||||
vt 0.833333 0.333333
|
|
||||||
vt 0.777778 0.305556
|
|
||||||
vt 0.777778 0.250000
|
|
||||||
vt 0.833333 0.222222
|
|
||||||
vt 0.833333 0.277778
|
|
||||||
vt 0.722222 0.194444
|
|
||||||
vt 0.722222 0.166753
|
|
||||||
vt 0.861111 0.194444
|
|
||||||
vt 0.583333 0.277778
|
|
||||||
vt 0.583333 0.194444
|
|
||||||
vt 0.555642 0.277778
|
|
||||||
vt 0.861111 0.277778
|
|
||||||
vt 0.888802 0.277778
|
|
||||||
vt 0.861111 0.361111
|
|
||||||
vt 0.666667 0.250000
|
|
||||||
vt 0.666667 0.305556
|
|
||||||
vt 0.611111 0.222222
|
|
||||||
vt 0.722222 0.222222
|
|
||||||
vt 0.611111 0.333333
|
|
||||||
vt 0.611111 0.277778
|
|
||||||
vt 0.722222 0.333333
|
|
||||||
vn 0.000000 0.773300 -0.634100
|
|
||||||
vn 0.000000 -0.773300 -0.634100
|
|
||||||
vn -0.821200 0.000000 -0.570700
|
|
||||||
vn 0.821200 0.000000 -0.570700
|
|
||||||
vn 0.000000 -0.258800 0.965900
|
|
||||||
vn 0.000000 -0.965900 -0.258800
|
|
||||||
vn 1.000000 0.000000 0.000000
|
|
||||||
vn -1.000000 0.000000 0.000000
|
|
||||||
vn 0.000000 0.258800 -0.965900
|
|
||||||
vn 0.000000 -0.000000 1.000000
|
|
||||||
vn 0.000000 -1.000000 0.000000
|
|
||||||
vn 0.000000 1.000000 0.000000
|
|
||||||
vn 0.000000 0.000000 -1.000000
|
|
||||||
vn 0.000000 0.688800 -0.724900
|
|
||||||
vn -0.269900 0.421500 -0.865700
|
|
||||||
vn -0.395600 0.336800 -0.854500
|
|
||||||
vn 0.000000 0.797100 -0.603900
|
|
||||||
vn -0.142400 0.274900 -0.950900
|
|
||||||
vn -0.056900 0.142700 -0.988100
|
|
||||||
vn -0.056900 -0.142700 -0.988100
|
|
||||||
vn -0.142400 -0.274900 -0.950900
|
|
||||||
vn -0.247900 0.000000 -0.968700
|
|
||||||
vn 0.000000 -0.688800 -0.724900
|
|
||||||
vn 0.000000 -0.797100 -0.603900
|
|
||||||
vn -0.395600 -0.336800 -0.854500
|
|
||||||
vn -0.269900 -0.421500 -0.865700
|
|
||||||
vn 0.440000 0.000000 -0.898000
|
|
||||||
vn 0.269900 0.421500 -0.865700
|
|
||||||
vn 0.395600 0.336800 -0.854500
|
|
||||||
vn 0.550800 0.000000 -0.834600
|
|
||||||
vn -0.440000 0.000000 -0.898000
|
|
||||||
vn -0.550800 0.000000 -0.834600
|
|
||||||
vn 0.056900 -0.142700 -0.988100
|
|
||||||
vn 0.056900 0.142700 -0.988100
|
|
||||||
vn 0.142400 -0.274900 -0.950900
|
|
||||||
vn 0.000000 -0.450200 -0.892900
|
|
||||||
vn 0.142400 0.274900 -0.950900
|
|
||||||
vn 0.247900 0.000000 -0.968700
|
|
||||||
vn 0.000000 0.450200 -0.892900
|
|
||||||
vn 0.269900 -0.421500 -0.865700
|
|
||||||
vn 0.395600 -0.336800 -0.854500
|
|
||||||
s off
|
|
||||||
f 1/1/1 29/2/1 30/3/1 4/4/1
|
|
||||||
f 8/5/2 5/6/2 31/7/2 32/8/2
|
|
||||||
f 32/8/3 31/9/3 30/10/3 29/1/3
|
|
||||||
f 8/2/4 1/5/4 4/11/4 5/12/4
|
|
||||||
f 18/13/5 15/14/5 10/15/5 11/16/5
|
|
||||||
f 19/17/6 18/18/6 11/19/6 12/20/6
|
|
||||||
f 21/21/7 24/22/7 23/23/7 22/24/7
|
|
||||||
f 25/25/8 26/26/8 27/27/8 28/28/8
|
|
||||||
f 19/29/9 12/30/9 9/31/9 14/32/9
|
|
||||||
f 22/26/10 23/21/10 27/22/10 26/27/10
|
|
||||||
f 21/33/11 22/21/11 26/26/11 25/34/11
|
|
||||||
f 24/22/12 28/27/12 27/35/12 23/36/12
|
|
||||||
f 34/37/13 36/38/13 8/39/13 32/40/13
|
|
||||||
f 33/41/13 34/37/13 32/40/13 29/42/13
|
|
||||||
f 33/41/13 29/42/13 1/43/13 35/44/13
|
|
||||||
f 35/44/13 1/43/13 8/39/13 36/38/13
|
|
||||||
f 45/45/12 40/46/12 41/47/12 42/48/12 46/49/12
|
|
||||||
f 48/50/11 47/51/11 43/52/11 44/53/11 38/54/11
|
|
||||||
f 44/55/8 43/45/8 42/51/8 41/56/8 37/57/8
|
|
||||||
f 48/47/7 39/58/7 45/52/7 46/59/7 47/60/7
|
|
||||||
f 12/13/8 11/30/8 10/31/8 9/14/8
|
|
||||||
f 19/29/7 14/32/7 15/61/7 18/62/7
|
|
||||||
f 16/63/13 20/64/13 7/65/13 3/66/13
|
|
||||||
f 13/67/13 16/63/13 3/66/13 2/68/13
|
|
||||||
f 17/69/13 6/70/13 7/65/13 20/64/13
|
|
||||||
f 13/67/13 2/68/13 6/70/13 17/69/13
|
|
||||||
s 1
|
|
||||||
f 73/71/14 72/72/15 52/44/16 61/73/17
|
|
||||||
f 56/74/18 60/75/19 59/76/20 55/77/21 69/78/22
|
|
||||||
f 74/79/23 63/80/24 51/37/25 66/81/26
|
|
||||||
f 75/82/27 70/83/28 50/38/29 62/84/30
|
|
||||||
f 76/85/31 64/86/32 52/41/16 72/87/15
|
|
||||||
f 57/88/33 59/76/20 60/75/19 58/89/34
|
|
||||||
f 55/77/21 59/76/20 57/88/33 53/90/35 68/91/36
|
|
||||||
f 53/90/35 57/88/33 58/89/34 54/92/37 67/93/38
|
|
||||||
f 54/92/37 58/89/34 60/75/19 56/74/18 65/94/39
|
|
||||||
f 65/94/39 56/92/18 72/72/15 73/71/14
|
|
||||||
f 54/74/37 65/94/39 73/71/14 70/87/28
|
|
||||||
f 70/87/28 73/71/14 61/73/17 50/41/29
|
|
||||||
f 68/91/36 74/79/23 66/81/26 55/77/21
|
|
||||||
f 53/90/35 71/83/40 74/79/23 68/91/36
|
|
||||||
f 71/83/40 49/38/41 63/80/24 74/79/23
|
|
||||||
f 67/93/38 54/90/37 70/83/28 75/82/27
|
|
||||||
f 53/92/35 67/93/38 75/82/27 71/72/40
|
|
||||||
f 71/72/40 75/82/27 62/84/30 49/44/41
|
|
||||||
f 69/78/22 76/85/31 72/87/15 56/74/18
|
|
||||||
f 55/77/21 66/81/26 76/85/31 69/78/22
|
|
||||||
f 66/81/26 51/37/25 64/86/32 76/85/31
|
|
@ -1,263 +0,0 @@
|
|||||||
# Blender v2.73 (sub 0) OBJ File: 'mesecons-wall-lever.blend'
|
|
||||||
# www.blender.org
|
|
||||||
o nodebox-5
|
|
||||||
v 0.289062 0.156250 0.312500
|
|
||||||
v -0.375000 0.375000 0.375000
|
|
||||||
v -0.375000 -0.375000 0.375000
|
|
||||||
v 0.332500 0.207500 0.375000
|
|
||||||
v 0.332500 -0.207500 0.375000
|
|
||||||
v 0.375000 0.375000 0.375000
|
|
||||||
v 0.375000 -0.375000 0.375000
|
|
||||||
v 0.289062 -0.156250 0.312500
|
|
||||||
v -0.062500 0.075354 0.315617
|
|
||||||
v -0.062500 0.043002 0.194876
|
|
||||||
v -0.062500 0.369002 0.107525
|
|
||||||
v -0.062500 0.401354 0.228266
|
|
||||||
v -0.332500 0.207500 0.375000
|
|
||||||
v 0.062500 0.075354 0.315617
|
|
||||||
v 0.062500 0.043002 0.194876
|
|
||||||
v -0.332500 -0.207500 0.375000
|
|
||||||
v 0.332500 0.207500 0.375000
|
|
||||||
v 0.062500 0.369002 0.107525
|
|
||||||
v 0.062500 0.401354 0.228266
|
|
||||||
v 0.332500 -0.207500 0.375000
|
|
||||||
v 0.375000 -0.375000 0.375000
|
|
||||||
v 0.375000 -0.375000 0.500000
|
|
||||||
v 0.375000 0.375000 0.500000
|
|
||||||
v 0.375000 0.375000 0.375000
|
|
||||||
v -0.375000 -0.375000 0.375000
|
|
||||||
v -0.375000 -0.375000 0.500000
|
|
||||||
v -0.375000 0.375000 0.500000
|
|
||||||
v -0.375000 0.375000 0.375000
|
|
||||||
v -0.289062 0.156250 0.312500
|
|
||||||
v -0.332500 0.207500 0.375000
|
|
||||||
v -0.332500 -0.207500 0.375000
|
|
||||||
v -0.289062 -0.156250 0.312500
|
|
||||||
v -0.250000 0.125000 0.312500
|
|
||||||
v -0.250000 -0.125000 0.312500
|
|
||||||
v 0.250000 0.125000 0.312500
|
|
||||||
v 0.250000 -0.125000 0.312500
|
|
||||||
v -0.250000 -0.000000 0.250000
|
|
||||||
v -0.000000 -0.125000 0.250000
|
|
||||||
v 0.250000 -0.000000 0.250000
|
|
||||||
v 0.000000 0.125000 0.250000
|
|
||||||
v -0.250000 0.125000 0.250000
|
|
||||||
v -0.250000 0.125000 0.312500
|
|
||||||
v -0.250000 -0.125000 0.312500
|
|
||||||
v -0.250000 -0.125000 0.250000
|
|
||||||
v 0.250000 0.125000 0.250000
|
|
||||||
v 0.250000 0.125000 0.312500
|
|
||||||
v 0.250000 -0.125000 0.312500
|
|
||||||
v 0.250000 -0.125000 0.250000
|
|
||||||
v 0.250000 -0.125000 0.250000
|
|
||||||
v 0.250000 0.125000 0.250000
|
|
||||||
v -0.250000 -0.125000 0.250000
|
|
||||||
v -0.250000 0.125000 0.250000
|
|
||||||
v 0.125000 -0.062500 0.187500
|
|
||||||
v 0.125000 0.062500 0.187500
|
|
||||||
v -0.125000 -0.062500 0.187500
|
|
||||||
v -0.125000 0.062500 0.187500
|
|
||||||
v 0.065000 -0.032500 0.176992
|
|
||||||
v 0.065000 0.032500 0.176992
|
|
||||||
v -0.065000 -0.032500 0.176992
|
|
||||||
v -0.065000 0.032500 0.176992
|
|
||||||
v 0.000000 0.125000 0.250000
|
|
||||||
v 0.250000 -0.000000 0.250000
|
|
||||||
v -0.000000 -0.125000 0.250000
|
|
||||||
v -0.250000 -0.000000 0.250000
|
|
||||||
v 0.000000 0.062500 0.187500
|
|
||||||
v -0.187500 -0.093750 0.208750
|
|
||||||
v 0.125000 -0.000000 0.187500
|
|
||||||
v 0.000000 -0.062500 0.187500
|
|
||||||
v -0.125000 -0.000000 0.187500
|
|
||||||
v 0.187500 0.093750 0.208750
|
|
||||||
v 0.187500 -0.093750 0.208750
|
|
||||||
v -0.187500 0.093750 0.208750
|
|
||||||
v 0.000000 0.093750 0.208750
|
|
||||||
v 0.000000 -0.093750 0.208750
|
|
||||||
v 0.187500 -0.000000 0.208750
|
|
||||||
v -0.187500 -0.000000 0.208750
|
|
||||||
vt 0.416667 0.416667
|
|
||||||
vt 0.083333 0.416667
|
|
||||||
vt 0.055556 0.472222
|
|
||||||
vt 0.444444 0.472222
|
|
||||||
vt 0.083333 0.083333
|
|
||||||
vt 0.055556 0.027778
|
|
||||||
vt 0.444444 0.027778
|
|
||||||
vt 0.416667 0.083333
|
|
||||||
vt 0.472222 0.055556
|
|
||||||
vt 0.472222 0.444444
|
|
||||||
vt 0.027778 0.055556
|
|
||||||
vt 0.027778 0.444444
|
|
||||||
vt 0.250000 0.833333
|
|
||||||
vt 0.250000 0.638889
|
|
||||||
vt 0.305556 0.638889
|
|
||||||
vt 0.305556 0.833333
|
|
||||||
vt 0.388889 0.777778
|
|
||||||
vt 0.333333 0.777778
|
|
||||||
vt 0.333333 0.722222
|
|
||||||
vt 0.388889 0.722222
|
|
||||||
vt 0.944444 0.527778
|
|
||||||
vt 0.944444 0.916667
|
|
||||||
vt 1.000000 0.916667
|
|
||||||
vt 1.000000 0.527778
|
|
||||||
vt 0.500000 0.527778
|
|
||||||
vt 0.555556 0.527778
|
|
||||||
vt 0.555556 0.916667
|
|
||||||
vt 0.500000 0.916667
|
|
||||||
vt 0.138889 0.833333
|
|
||||||
vt 0.194444 0.833333
|
|
||||||
vt 0.194444 0.638889
|
|
||||||
vt 0.138889 0.638889
|
|
||||||
vt 0.944444 0.472222
|
|
||||||
vt 0.555556 0.472222
|
|
||||||
vt 0.555556 0.972222
|
|
||||||
vt 0.944444 0.972222
|
|
||||||
vt 0.888802 0.166753
|
|
||||||
vt 0.555642 0.166753
|
|
||||||
vt 0.527778 0.138889
|
|
||||||
vt 0.916667 0.138889
|
|
||||||
vt 0.888802 0.388802
|
|
||||||
vt 0.916667 0.416667
|
|
||||||
vt 0.527778 0.416667
|
|
||||||
vt 0.555642 0.388802
|
|
||||||
vt 0.361111 0.361111
|
|
||||||
vt 0.250000 0.361111
|
|
||||||
vt 0.138889 0.361111
|
|
||||||
vt 0.138889 0.416667
|
|
||||||
vt 0.361111 0.416667
|
|
||||||
vt 0.361111 0.083333
|
|
||||||
vt 0.361111 0.138889
|
|
||||||
vt 0.138889 0.138889
|
|
||||||
vt 0.138889 0.083333
|
|
||||||
vt 0.250000 0.083333
|
|
||||||
vt 0.416667 0.361111
|
|
||||||
vt 0.416667 0.138889
|
|
||||||
vt 0.416667 0.250000
|
|
||||||
vt 0.138889 0.250000
|
|
||||||
vt 0.083333 0.138889
|
|
||||||
vt 0.083333 0.361111
|
|
||||||
vt 0.083333 0.638889
|
|
||||||
vt 0.083333 0.833333
|
|
||||||
vt 0.444444 0.611111
|
|
||||||
vt 0.055556 0.611111
|
|
||||||
vt 0.027778 0.527778
|
|
||||||
vt 0.472222 0.527778
|
|
||||||
vt 0.444444 0.888889
|
|
||||||
vt 0.472222 0.972222
|
|
||||||
vt 0.055556 0.888889
|
|
||||||
vt 0.027778 0.972222
|
|
||||||
vt 0.722222 0.361111
|
|
||||||
vt 0.583333 0.361111
|
|
||||||
vt 0.722222 0.388802
|
|
||||||
vt 0.833333 0.333333
|
|
||||||
vt 0.777778 0.305556
|
|
||||||
vt 0.777778 0.250000
|
|
||||||
vt 0.833333 0.222222
|
|
||||||
vt 0.833333 0.277778
|
|
||||||
vt 0.722222 0.194444
|
|
||||||
vt 0.722222 0.166753
|
|
||||||
vt 0.861111 0.194444
|
|
||||||
vt 0.583333 0.277778
|
|
||||||
vt 0.583333 0.194444
|
|
||||||
vt 0.555642 0.277778
|
|
||||||
vt 0.861111 0.277778
|
|
||||||
vt 0.888802 0.277778
|
|
||||||
vt 0.861111 0.361111
|
|
||||||
vt 0.666667 0.250000
|
|
||||||
vt 0.666667 0.305556
|
|
||||||
vt 0.611111 0.222222
|
|
||||||
vt 0.722222 0.222222
|
|
||||||
vt 0.611111 0.333333
|
|
||||||
vt 0.611111 0.277778
|
|
||||||
vt 0.722222 0.333333
|
|
||||||
vn 0.000000 0.773300 -0.634100
|
|
||||||
vn 0.000000 -0.773300 -0.634100
|
|
||||||
vn -0.821200 0.000000 -0.570700
|
|
||||||
vn 0.821200 0.000000 -0.570700
|
|
||||||
vn 0.000000 -0.258800 -0.965900
|
|
||||||
vn 0.000000 0.965900 -0.258800
|
|
||||||
vn 1.000000 0.000000 0.000000
|
|
||||||
vn -1.000000 0.000000 0.000000
|
|
||||||
vn 0.000000 0.258800 0.965900
|
|
||||||
vn 0.000000 -0.000000 1.000000
|
|
||||||
vn 0.000000 -1.000000 0.000000
|
|
||||||
vn 0.000000 1.000000 0.000000
|
|
||||||
vn 0.000000 0.000000 -1.000000
|
|
||||||
vn 0.000000 0.688800 -0.724900
|
|
||||||
vn -0.269900 0.421500 -0.865700
|
|
||||||
vn -0.395600 0.336800 -0.854500
|
|
||||||
vn 0.000000 0.797100 -0.603900
|
|
||||||
vn -0.142400 0.274900 -0.950900
|
|
||||||
vn -0.056900 0.142700 -0.988100
|
|
||||||
vn -0.056900 -0.142700 -0.988100
|
|
||||||
vn -0.142400 -0.274900 -0.950900
|
|
||||||
vn -0.247900 0.000000 -0.968700
|
|
||||||
vn 0.000000 -0.688800 -0.724900
|
|
||||||
vn 0.000000 -0.797100 -0.603900
|
|
||||||
vn -0.395600 -0.336800 -0.854500
|
|
||||||
vn -0.269900 -0.421500 -0.865700
|
|
||||||
vn 0.440000 0.000000 -0.898000
|
|
||||||
vn 0.269900 0.421500 -0.865700
|
|
||||||
vn 0.395600 0.336800 -0.854500
|
|
||||||
vn 0.550800 0.000000 -0.834600
|
|
||||||
vn -0.440000 0.000000 -0.898000
|
|
||||||
vn -0.550800 0.000000 -0.834600
|
|
||||||
vn 0.056900 -0.142700 -0.988100
|
|
||||||
vn 0.056900 0.142700 -0.988100
|
|
||||||
vn 0.142400 -0.274900 -0.950900
|
|
||||||
vn 0.000000 -0.450200 -0.892900
|
|
||||||
vn 0.142400 0.274900 -0.950900
|
|
||||||
vn 0.247900 0.000000 -0.968700
|
|
||||||
vn 0.000000 0.450200 -0.892900
|
|
||||||
vn 0.269900 -0.421500 -0.865700
|
|
||||||
vn 0.395600 -0.336800 -0.854500
|
|
||||||
s off
|
|
||||||
f 1/1/1 29/2/1 30/3/1 4/4/1
|
|
||||||
f 8/5/2 5/6/2 31/7/2 32/8/2
|
|
||||||
f 32/8/3 31/9/3 30/10/3 29/1/3
|
|
||||||
f 8/2/4 1/5/4 4/11/4 5/12/4
|
|
||||||
f 18/13/5 15/14/5 10/15/5 11/16/5
|
|
||||||
f 19/17/6 18/18/6 11/19/6 12/20/6
|
|
||||||
f 21/21/7 24/22/7 23/23/7 22/24/7
|
|
||||||
f 25/25/8 26/26/8 27/27/8 28/28/8
|
|
||||||
f 19/29/9 12/30/9 9/31/9 14/32/9
|
|
||||||
f 22/26/10 23/21/10 27/22/10 26/27/10
|
|
||||||
f 21/33/11 22/21/11 26/26/11 25/34/11
|
|
||||||
f 24/22/12 28/27/12 27/35/12 23/36/12
|
|
||||||
f 34/37/13 36/38/13 8/39/13 32/40/13
|
|
||||||
f 33/41/13 34/37/13 32/40/13 29/42/13
|
|
||||||
f 33/41/13 29/42/13 1/43/13 35/44/13
|
|
||||||
f 35/44/13 1/43/13 8/39/13 36/38/13
|
|
||||||
f 45/45/12 40/46/12 41/47/12 42/48/12 46/49/12
|
|
||||||
f 48/50/11 47/51/11 43/52/11 44/53/11 38/54/11
|
|
||||||
f 44/55/8 43/45/8 42/51/8 41/56/8 37/57/8
|
|
||||||
f 48/47/7 39/58/7 45/52/7 46/59/7 47/60/7
|
|
||||||
f 12/13/8 11/30/8 10/31/8 9/14/8
|
|
||||||
f 19/29/7 14/32/7 15/61/7 18/62/7
|
|
||||||
f 16/63/13 20/64/13 7/65/13 3/66/13
|
|
||||||
f 13/67/13 16/63/13 3/66/13 2/68/13
|
|
||||||
f 17/69/13 6/70/13 7/65/13 20/64/13
|
|
||||||
f 13/67/13 2/68/13 6/70/13 17/69/13
|
|
||||||
s 1
|
|
||||||
f 73/71/14 72/72/15 52/44/16 61/73/17
|
|
||||||
f 56/74/18 60/75/19 59/76/20 55/77/21 69/78/22
|
|
||||||
f 74/79/23 63/80/24 51/37/25 66/81/26
|
|
||||||
f 75/82/27 70/83/28 50/38/29 62/84/30
|
|
||||||
f 76/85/31 64/86/32 52/41/16 72/87/15
|
|
||||||
f 57/88/33 59/76/20 60/75/19 58/89/34
|
|
||||||
f 55/77/21 59/76/20 57/88/33 53/90/35 68/91/36
|
|
||||||
f 53/90/35 57/88/33 58/89/34 54/92/37 67/93/38
|
|
||||||
f 54/92/37 58/89/34 60/75/19 56/74/18 65/94/39
|
|
||||||
f 65/94/39 56/92/18 72/72/15 73/71/14
|
|
||||||
f 54/74/37 65/94/39 73/71/14 70/87/28
|
|
||||||
f 70/87/28 73/71/14 61/73/17 50/41/29
|
|
||||||
f 68/91/36 74/79/23 66/81/26 55/77/21
|
|
||||||
f 53/90/35 71/83/40 74/79/23 68/91/36
|
|
||||||
f 71/83/40 49/38/41 63/80/24 74/79/23
|
|
||||||
f 67/93/38 54/90/37 70/83/28 75/82/27
|
|
||||||
f 53/92/35 67/93/38 75/82/27 71/72/40
|
|
||||||
f 71/72/40 75/82/27 62/84/30 49/44/41
|
|
||||||
f 69/78/22 76/85/31 72/87/15 56/74/18
|
|
||||||
f 55/77/21 66/81/26 76/85/31 69/78/22
|
|
||||||
f 66/81/26 51/37/25 64/86/32 76/85/31
|
|
After Width: | Height: | Size: 614 B |
After Width: | Height: | Size: 582 B |
Before Width: | Height: | Size: 500 B |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 500 B |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 517 B |
After Width: | Height: | Size: 612 B |
After Width: | Height: | Size: 575 B |
After Width: | Height: | Size: 587 B |