Regnum 2 1.0.1 upload

Game-5.4.x
Der1248 2018-06-27 18:41:18 +02:00
parent e5b5c1a051
commit d1ddd516b1
3940 changed files with 167476 additions and 0 deletions

13
README.txt Normal file
View File

@ -0,0 +1,13 @@
A Game by 1248
Thanks to:
/
Info:
This is my new game: Regnum 2.
You will start with every important tools from the first Regnum.
New Achievements, new tools and many other new functions to become stronger and stronger.
License:
See README.txt in each mod for more information
Every code written by me is LGPLv2.1 and CC-BY-SA

1
game.conf Normal file
View File

@ -0,0 +1 @@
name = Regnum2

BIN
menu/Thumbs.db Normal file

Binary file not shown.

BIN
menu/header.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
menu/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

8
mods/3d_armor/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
## Generic ignorable patterns and files
*~
.*.swp
*bak*
tags
*.vim
armor.conf

View File

@ -0,0 +1,24 @@
[mod] Visible Player Armor [3d_armor]
=====================================
Depends: default
Recommends: inventory_plus or unified_inventory (use only one)
Adds craftable armor that is visible to other players. Each armor item worn contributes to
a player's armor group level making them less vulnerable to weapons.
Armor takes damage when a player is hurt but also offers a percentage chance of healing.
Overall level is boosted by 10% when wearing a full matching set.
Fire protection added by TenPlus1 when using crystal armor if Ethereal mod active, level 1
protects against torches, level 2 for crystal spike, level 3 for fire, level 5 for lava.
Configuration
-------------
Armor can be configured by adding a file called armor.conf in 3d_armor mod and/or world directory.
see armor.conf.example for all available options.
Note: worldpath config settings override any settings made in the mod's directory.

View File

@ -0,0 +1,243 @@
minetest.register_alias("adminboots","3d_armor:boots_admin")
minetest.register_alias("adminhelmet","3d_armor:helmet_admin")
minetest.register_alias("adminchestplate","3d_armor:chestplate_admin")
minetest.register_alias("adminlegginss","3d_armor:leggings_admin")
minetest.register_tool("3d_armor:helmet_admin", {
description = "Admin Helmet Mode 1 (no speed and no jump)",
inventory_image = "3d_armor_inv_helmet_admin.png^technic_tool_mode1.png",
wield_image = "3d_armor_inv_helmet_admin.png",
groups = {armor_head=5000, armor_heal=2500, armor_use=0, not_in_creative_inventory=1, armor_fire=2000},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:helmet_admin2")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:helmet_admin2", {
description = "Admin Helmet Mode 2 (speed and no jump)",
inventory_image = "3d_armor_inv_helmet_admin.png^technic_tool_mode2.png",
wield_image = "3d_armor_inv_helmet_admin.png",
groups = {armor_head=5000, armor_heal=2500, armor_use=0, not_in_creative_inventory=1, armor_fire=2000, physics_speed=0.25},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:helmet_admin3")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:helmet_admin3", {
description = "Admin Helmet Mode 3 (no speed and jump)",
inventory_image = "3d_armor_inv_helmet_admin.png^technic_tool_mode3.png",
wield_image = "3d_armor_inv_helmet_admin.png",
groups = {armor_head=5000, armor_heal=2500, armor_use=0, not_in_creative_inventory=1, armor_fire=2000, physics_jump=0.25},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:helmet_admin4")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:helmet_admin4", {
description = "Admin Helmet Mode 4 (speed and jump)",
inventory_image = "3d_armor_inv_helmet_admin.png^technic_tool_mode4.png",
wield_image = "3d_armor_inv_helmet_admin.png",
groups = {armor_head=5000, armor_heal=2500, armor_use=0, not_in_creative_inventory=1, armor_fire=2000, physics_jump=0.25, physics_speed=0.25},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:helmet_admin")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:chestplate_admin", {
description = "Admin Chestplate Mode 1 (no speed and no jump)",
inventory_image = "3d_armor_inv_chestplate_admin.png^technic_tool_mode1.png",
wield_image = "3d_armor_inv_chestplate_admin.png",
groups = {armor_torso=10000, armor_heal=5000, armor_use=0, not_in_creative_inventory=1, armor_fire=2000},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:chestplate_admin2")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:chestplate_admin2", {
description = "Admin Chestplate Mode 2 (speed and no jump)",
inventory_image = "3d_armor_inv_chestplate_admin.png^technic_tool_mode2.png",
wield_image = "3d_armor_inv_chestplate_admin.png",
groups = {armor_torso=10000, armor_heal=5000, armor_use=0, not_in_creative_inventory=1, armor_fire=2000, physics_speed=0.25},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:chestplate_admin3")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:chestplate_admin3", {
description = "Admin Chestplate Mode 3 (no speed and jump)",
inventory_image = "3d_armor_inv_chestplate_admin.png^technic_tool_mode3.png",
wield_image = "3d_armor_inv_chestplate_admin.png",
groups = {armor_torso=10000, armor_heal=5000, armor_use=0, not_in_creative_inventory=1, armor_fire=2000, physics_jump=0.25},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:chestplate_admin4")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:chestplate_admin4", {
description = "Admin Chestplate Mode 4 (speed and jump)",
inventory_image = "3d_armor_inv_chestplate_admin.png^technic_tool_mode4.png",
wield_image = "3d_armor_inv_chestplate_admin.png",
groups = {armor_torso=10000, armor_heal=5000, armor_use=0, not_in_creative_inventory=1, armor_fire=2000, physics_jump=0.25, physics_speed=0.25},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:chestplate_admin")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:leggings_admin", {
description = "Admin Leggings Mode 1 (no speed and no jump)",
wield_image = "3d_armor_inv_leggings_admin.png",
inventory_image = "3d_armor_inv_leggings_admin.png^technic_tool_mode1.png",
groups = {armor_legs=5000, armor_heal=2500, armor_use=0, not_in_creative_inventory=1, armor_fire=2000},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:leggings_admin2")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:leggings_admin2", {
description = "Admin Leggings Mode 2 (speed and no jump)",
wield_image = "3d_armor_inv_leggings_admin.png",
inventory_image = "3d_armor_inv_leggings_admin.png^technic_tool_mode2.png",
groups = {armor_legs=5000, armor_heal=2500, armor_use=0, not_in_creative_inventory=1, armor_fire=2000, physics_speed=0.25},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:leggings_admin3")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:leggings_admin3", {
description = "Admin Leggings Mode 3 (no speed and jump)",
wield_image = "3d_armor_inv_leggings_admin.png",
inventory_image = "3d_armor_inv_leggings_admin.png^technic_tool_mode3.png",
groups = {armor_legs=5000, armor_heal=2500, armor_use=0, not_in_creative_inventory=1, armor_fire=2000, physics_jump=0.25},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:leggings_admin4")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:leggings_admin4", {
description = "Admin Leggings Mode 4 (speed and jump)",
inventory_image = "3d_armor_inv_leggings_admin.png^technic_tool_mode4.png",
wield_image = "3d_armor_inv_leggings_admin.png",
groups = {armor_legs=5000, armor_heal=2500, armor_use=0, not_in_creative_inventory=1, armor_fire=2000, physics_jump=0.25, physics_speed=0.25},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:leggings_admin")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:boots_admin", {
description = "Admin Boots Mode 1 (no speed and no jump)",
inventory_image = "3d_armor_inv_boots_admin.png^technic_tool_mode1.png",
wield_image = "3d_armor_inv_boots_admin.png",
groups = {armor_feet=5000, armor_heal=2500, armor_use=0, not_in_creative_inventory=1, armor_fire=2000},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:boots_admin2")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:boots_admin2", {
description = "Admin Boots Mode 2 (speed and no jump)",
inventory_image = "3d_armor_inv_boots_admin.png^technic_tool_mode2.png",
wield_image = "3d_armor_inv_boots_admin.png",
groups = {armor_feet=5000, armor_heal=2500, armor_use=0, not_in_creative_inventory=1, armor_fire=2000, physics_speed=0.25},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:boots_admin3")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:boots_admin3", {
description = "Admin Boots Mode 3 (no speed and jump)",
inventory_image = "3d_armor_inv_boots_admin.png^technic_tool_mode3.png",
wield_image = "3d_armor_inv_boots_admin.png",
groups = {armor_feet=5000, armor_heal=2500, armor_use=0, not_in_creative_inventory=1, armor_fire=2000, physics_jump=0.25},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:boots_admin4")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:boots_admin4", {
description = "Admin Boots Mode 4 (speed and jump)",
inventory_image = "3d_armor_inv_boots_admin.png^technic_tool_mode4.png",
wield_image = "3d_armor_inv_boots_admin.png",
groups = {armor_feet=5000, armor_heal=2500, armor_use=0, not_in_creative_inventory=1, armor_fire=2000, physics_jump=0.25, physics_speed=0.25},
wear = 0,
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:boots_admin")
end
return itemstack
end,
})

View File

@ -0,0 +1,56 @@
-- Armor Configuration (defaults)
-- You can remove any unwanted armor materials from this table.
-- Note that existing armor that is removed will show up as an unknown item.
ARMOR_MATERIALS = {
wood = "group:wood",
cactus = "default:cactus",
steel = "default:steel_ingot",
bronze = "default:bronze_ingot",
diamond = "default:diamond",
gold = "default:gold_ingot",
mithril = "moreores:mithril_ingot",
crystal = "ethereal:crystal_ingot",
}
-- Enable fire protection (defaults true if using ethereal mod)
ARMOR_FIRE_PROTECT = false
-- Fire protection nodes, (name, protection level, damage)
ARMOR_FIRE_NODES = {
{"default:lava_source", 5, 4},
{"default:lava_flowing", 5, 4},
{"fire:basic_flame", 3, 4},
{"ethereal:crystal_spike", 2, 1},
{"bakedclay:safe_fire", 2, 1},
--{"default:torch", 1, 1},
}
-- Increase this if you get initialization glitches when a player first joins.
ARMOR_INIT_DELAY = 1
-- Number of initialization attempts.
-- Use in conjunction with ARMOR_INIT_DELAY if initialization problems persist.
ARMOR_INIT_TIMES = 1
-- Increase this if armor is not getting into bones due to server lag.
ARMOR_BONES_DELAY = 1
-- How often player armor/wield items are updated.
ARMOR_UPDATE_TIME = 1
-- Drop armor when a player dies.
-- Uses bones mod if present, otherwise items are dropped around the player.
ARMOR_DROP = true
-- Pulverise armor when a player dies, overrides ARMOR_DROP.
ARMOR_DESTROY = false
-- You can use this to increase or decrease overall armor effectiveness,
-- eg: ARMOR_LEVEL_MULTIPLIER = 0.5 will reduce armor level by half.
ARMOR_LEVEL_MULTIPLIER = 1
-- You can use this to increase or decrease overall armor healing,
-- eg: ARMOR_HEAL_MULTIPLIER = 0 will disable healing altogether.
ARMOR_HEAL_MULTIPLIER = 1

View File

@ -0,0 +1,705 @@
ARMOR_INIT_DELAY = 1
ARMOR_INIT_TIMES = 1
ARMOR_BONES_DELAY = 1
ARMOR_UPDATE_TIME = 1
ARMOR_DROP = false
ARMOR_DESTROY = false
ARMOR_LEVEL_MULTIPLIER = 1
ARMOR_HEAL_MULTIPLIER = 1
ARMOR_MATERIALS = {
wood = "default:stick",
cactus = "default:cactus",
steel = "default:steel_ingot",
bronze = "default:bronze_ingot",
diamond = "default:diamond",
gold = "default:gold_ingot",
mithril = "moreores:mithril_ingot",
crystal = "ethereal:crystal_ingot",
}
ARMOR_FIRE_PROTECT = true
ARMOR_FIRE_NODES = {
{"default:lava_source", 5, 4},
{"default:lava_flowing", 5, 4},
{"fire:basic_flame", 3, 4},
{"ethereal:crystal_spike", 2, 1},
{"bakedclay:safe_fire", 2, 1},
{"technic:corium_source", 2, 2},
{"technic:corium_flowing", 2, 2},
{"tutorial:xp_block", 2, 5},
}
local skin_mod = nil
local inv_mod = nil
local modpath = minetest.get_modpath(ARMOR_MOD_NAME)
local worldpath = minetest.get_worldpath()
local input = io.open(modpath.."/armor.conf", "r")
if input then
dofile(modpath.."/armor.conf")
input:close()
input = nil
end
input = io.open(worldpath.."/armor.conf", "r")
if input then
dofile(worldpath.."/armor.conf")
input:close()
input = nil
end
if not minetest.get_modpath("moreores") then
ARMOR_MATERIALS.mithril = nil
end
if not minetest.get_modpath("ethereal") then
ARMOR_MATERIALS.crystal = nil
end
-- override hot nodes so they do not hurt player anywhere but mod
if ARMOR_FIRE_PROTECT == true then
minetest.after(2, function()
for _, row in ipairs(ARMOR_FIRE_NODES) do
if minetest.registered_nodes[row[1]] then
minetest.override_item(row[1], {damage_per_second = 0, radioaktive = 0})
end
end
end)
end
local time = 0
armor = {
player_hp = {},
elements = {"head", "torso", "legs", "feet"},
physics = {"jump","speed","gravity"},
formspec = "size[8,8.5]list[detached:player_name_armor;armor;0,1;2,3;]"
.."list[detached:player_name_armor;arm2;6,2;1,1;]"
.."image[2,0.75;2,4;armor_preview]"
.."list[current_player;main;0,4.5;8,4;]"
.."list[current_player;craft;4,1;3,3;]"
.."list[current_player;craftpreview;7,2;1,1;]",
textures = {},
default_skin = "character",
version = "0.4.3",
}
if minetest.get_modpath("inventory_plus") then
inv_mod = "inventory_plus"
armor.formspec = "size[8,9.5]button[0,0;2,0.5;inven;Back]"
.."button[2,0;2,0.5;main;Main]"
.."background[8,9.5;1,1;gui_formbg.png;true]"
.."listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]"
.."bgcolor[#080808BB;true]"
.."list[detached:player_name_armor;armor;0,1;1,4;]"
.."list[detached:player_name_armor;armor;1,2.5;1,1;4]"
.."image[2.5,0.75;2,4;armor_preview]"
.."label[4.5,1;Level: armor_level]"
.."label[4.5,1.5;Heal: armor_heal]"
.."label[4.5,2;Fire: armor_fire]"
.."label[4.5,2.5.5;Speed: armor_speed]"
.."label[4.5,3;Jump: armor_jump]"
.."list[current_player;main;0,5.5;8,1;]"
.."list[current_player;main;0,6.75;8,3;8]"
elseif minetest.get_modpath("unified_inventory") then
inv_mod = "unified_inventory"
unified_inventory.register_button("armor", {
type = "image",
image = "inventory_plus_armor.png",
})
unified_inventory.register_page("armor", {
get_formspec = function(player)
local name = player:get_player_name()
local formspec = "background[0.06,0.99;7.92,7.52;3d_armor_ui_form.png]"
.."label[0,0;Armor]"
.."list[detached:"..name.."_armor;armor;0,1;2,3;]"
.."image[2.5,0.75;2,4;"..armor.textures[name].preview.."]"
.."label[5,1;Level: "..armor.def[name].level.."]"
.."label[5,1.5;Heal: "..armor.def[name].heal.."]"
.."label[5,2;Fire: "..armor.def[name].fire.."]"
return {formspec=formspec}
end,
})
elseif minetest.get_modpath("inventory_enhanced") then
inv_mod = "inventory_enhanced"
end
if minetest.get_modpath("skins") then
skin_mod = "skins"
elseif minetest.get_modpath("simple_skins") then
skin_mod = "simple_skins"
elseif minetest.get_modpath("u_skins") then
skin_mod = "u_skins"
elseif minetest.get_modpath("wardrobe") then
skin_mod = "wardrobe"
end
armor.def = {
state = 0,
count = 0,
}
minetest.register_on_player_receive_fields(function(player, formname, fields)
if fields.armoff then
local player_inv = player:get_inventory()
player_inv:set_size("am", 1)
player_inv:set_stack("am", 1, "default:dirt")
armor:set_player_armor(player)
armor:update_inventory(player)
local name = player:get_player_name()
local formspec = armor:get_armor_formspec(name)
if inv_mod == "inventory_plus" then
local page = player:get_inventory_formspec()
if page:find("detached:"..name.."_armor") then
inventory_plus.set_inventory_formspec(player, formspec)
end
end
end
if fields.armon then
local player_inv = player:get_inventory()
player_inv:set_size("am", 1)
player_inv:set_stack("am", 1, nil)
armor:set_player_armor(player)
armor:update_inventory(player)
local name = player:get_player_name()
local formspec = armor:get_armor_formspec(name)
if inv_mod == "inventory_plus" then
local page = player:get_inventory_formspec()
if page:find("detached:"..name.."_armor") then
inventory_plus.set_inventory_formspec(player, formspec)
end
end
end
end)
armor.update_player_visuals = function(self, player)
if not player then
return
end
local name = player:get_player_name()
if self.textures[name] then
default.player_set_textures(player, {
self.textures[name].skin,
self.textures[name].armor,
self.textures[name].wielditem,
})
end
end
armor.set_player_armor = function(self, player)
local name, player_inv = armor:get_valid_player(player, "[set_player_armor]")
if not name then
return
end
local armor_texture = "3d_armor_trans.png"
local armor_level = 0
local armor_heal = 0
local armor_fire = 0
local state = 0
local items = 0
local elements = {}
local textures = {}
local physics_o = {speed=1,gravity=1,jump=1}
local material = {type=nil, count=1}
local preview = armor:get_preview(name) or "character_preview.png"
for _,v in ipairs(self.elements) do
elements[v] = false
end
for i=1, 5 do
local stack = player_inv:get_stack("armor", i)
local item = stack:get_name()
if stack:get_count() == 1 then
local def = stack:get_definition()
for k, v in pairs(elements) do
if v == false then
local level = def.groups["armor_"..k]
if level then
local texture = item:gsub("%:", "_")
local player_inv = player:get_inventory()
local coun = player_inv:get_stack("am", 1):get_count()
if coun == 0 then
table.insert(textures, texture..".png")
else
end
preview = preview.."^"..texture.."_preview.png"
armor_level = armor_level + level
state = state + stack:get_wear()
items = items + 1
local heal = def.groups["armor_heal"] or 0
armor_heal = armor_heal + heal
local fire = def.groups["armor_fire"] or 0
armor_fire = armor_fire + fire
for kk,vv in ipairs(self.physics) do
local o_value = def.groups["physics_"..vv]
if o_value then
physics_o[vv] = physics_o[vv] + o_value
end
end
local mat = string.match(item, "%:.+_(.+)$")
if material.type then
if material.type == mat then
material.count = material.count + 1
end
else
material.type = mat
end
elements[k] = true
end
end
end
end
end
armor_level = armor_level * ARMOR_LEVEL_MULTIPLIER
armor_heal = armor_heal * ARMOR_HEAL_MULTIPLIER
local player_inv = player:get_inventory()
armor_level = armor_level+armor_level*0.3
armor_heal = armor_heal+armor_heal*0.3
armor_fire = armor_fire+armor_fire*0.3
if #textures > 0 then
armor_texture = table.concat(textures, "^")
end
local armor_groups = {fleshy=100}
if armor_level > 0 then
armor_groups.level = math.floor(armor_level / 100)
armor_groups.fleshy = 100 - armor_level
end
player:set_armor_groups(armor_groups)
player:set_physics_override(physics_o)
self.textures[name].armor = armor_texture
self.textures[name].preview = preview
self.def[name].state = state
self.def[name].count = items
self.def[name].level = armor_level
self.def[name].heal = armor_heal
self.def[name].jump = physics_o.jump
self.def[name].speed = physics_o.speed
self.def[name].gravity = physics_o.gravity
self.def[name].fire = armor_fire
self:update_player_visuals(player)
end
armor.update_armor = function(self, player, dtime)
local name, player_inv, armor_inv, pos = armor:get_valid_player(player, "[update_armor]")
if not name then
return
end
local hp = player:get_hp() or 0
if ARMOR_FIRE_PROTECT == true then
pos.y = pos.y + 1.4 -- head level
local node_head = minetest.get_node(pos).name
pos.y = pos.y - 1.2 -- feet level
local node_feet = minetest.get_node(pos).name
-- is player inside a hot node?
for _, row in ipairs(ARMOR_FIRE_NODES) do
-- check for fire protection, if not enough then get hurt
if row[1] == node_head or row[1] == node_feet then
if hp > 0 and armor.def[name].fire < row[2] then
player:set_hp(hp - row[3] * dtime)
break
end
end
end
end
if hp == 0 or hp == self.player_hp[name] then
return
end
if self.player_hp[name] > hp then
local heal_max = 0
local state = 0
local items = 0
for i=1, 5 do
local stack = player_inv:get_stack("armor", i)
if stack:get_count() > 0 then
local use = stack:get_definition().groups["armor_use"] or 0
local heal = stack:get_definition().groups["armor_heal"] or 0
local item = stack:get_name()
stack:add_wear(use)
armor_inv:set_stack("armor", i, stack)
player_inv:set_stack("armor", i, stack)
state = state + stack:get_wear()
items = items + 1
if stack:get_count() == 0 then
local desc = minetest.registered_items[item].description
if desc then
minetest.chat_send_player(name, "Your "..desc.." got destroyed!")
end
self:set_player_armor(player)
armor:update_inventory(player)
end
heal_max = heal_max + heal
end
end
local player_inv = player:get_inventory()
heal_max = heal_max+heal_max*0.3
self.def[name].state = state
self.def[name].count = items
heal_max = heal_max * ARMOR_HEAL_MULTIPLIER
if heal_max == nil or heal_max == 0 then
heal_max = 1
end
if heal_max > math.random(heal_max + math.floor(heal_max*0.1)) then
player:set_hp(self.player_hp[name])
return
end
end
self.player_hp[name] = hp
end
armor.get_player_skin = function(self, name)
local skin = nil
if skin_mod == "skins" or skin_mod == "simple_skins" then
skin = skins.skins[name]
elseif skin_mod == "u_skins" then
skin = u_skins.u_skins[name]
elseif skin_mod == "wardrobe" then
skin = string.gsub(wardrobe.playerSkins[name], "%.png$","")
end
return skin or armor.default_skin
end
armor.get_preview = function(self, name)
if skin_mod == "skins" then
return armor:get_player_skin(name).."_preview.png"
end
end
armor.get_armor_formspec = function(self, name)
if not armor.textures[name] then
minetest.log("error", "3d_armor: Player texture["..name.."] is nil [get_armor_formspec]")
return ""
end
if not armor.def[name] then
minetest.log("error", "3d_armor: Armor def["..name.."] is nil [get_armor_formspec]")
return ""
end
local player = minetest.get_player_by_name(name)
local player_inv = player:get_inventory()
local am = player_inv:get_stack("am", 1):get_count()
local formspec = armor.formspec:gsub("player_name", name)
formspec = formspec:gsub("armor_preview", armor.textures[name].preview)
formspec = formspec:gsub("armor_level", armor.def[name].level)
formspec = formspec:gsub("armor_heal", armor.def[name].heal)
formspec = formspec:gsub("armor_fire", armor.def[name].fire)
formspec = formspec:gsub("armor_jump", (armor.def[name].jump-1)*4)
formspec = formspec:gsub("armor_speed", (armor.def[name].speed-1)*4)
if am == 1 then
formspec = formspec .."button[6,1;2,0.5;armon;armor on]"
else
formspec = formspec .."button[6,1;2,0.5;armoff;armor off]"
end
return formspec
end
armor.update_inventory = function(self, player)
local name = armor:get_valid_player(player, "[set_player_armor]")
if not name or inv_mod == "inventory_enhanced" then
return
end
if inv_mod == "unified_inventory" then
if unified_inventory.current_page[name] == "armor" then
unified_inventory.set_inventory_formspec(player, "armor")
end
else
local formspec = armor:get_armor_formspec(name)
if inv_mod == "inventory_plus" then
local page = player:get_inventory_formspec()
if page:find("detached:"..name.."_armor") then
inventory_plus.set_inventory_formspec(player, formspec)
end
else
player:set_inventory_formspec(formspec)
end
end
end
armor.get_valid_player = function(self, player, msg)
msg = msg or ""
if not player then
minetest.log("error", "3d_armor: Player reference is nil "..msg)
return
end
local name = player:get_player_name()
if not name then
minetest.log("error", "3d_armor: Player name is nil "..msg)
return
end
local pos = player:getpos()
local player_inv = player:get_inventory()
local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"})
if not pos then
minetest.log("error", "3d_armor: Player position is nil "..msg)
return
elseif not player_inv then
minetest.log("error", "3d_armor: Player inventory is nil "..msg)
return
elseif not armor_inv then
minetest.log("error", "3d_armor: Detached armor inventory is nil "..msg)
return
end
return name, player_inv, armor_inv, pos
end
-- Register Player Model
default.player_register_model("3d_armor_character.b3d", {
animation_speed = 30,
textures = {
armor.default_skin..".png",
"3d_armor_trans.png",
"3d_armor_trans.png",
},
animations = {
stand = {x=0, y=79},
lay = {x=162, y=166},
walk = {x=168, y=187},
mine = {x=189, y=198},
walk_mine = {x=200, y=219},
sit = {x=81, y=160},
},
})
-- Register Callbacks
minetest.register_on_player_receive_fields(function(player, formname, fields)
local name = armor:get_valid_player(player, "[on_player_receive_fields]")
if fields.armor then
local formspec = armor:get_armor_formspec(name)
armor:set_player_armor(player)
armor:update_inventory(player)
local name = player:get_player_name()
local formspec = armor:get_armor_formspec(name)
if inv_mod == "inventory_plus" then
local page = player:get_inventory_formspec()
if page:find("detached:"..name.."_armor") then
inventory_plus.set_inventory_formspec(player, formspec)
end
end
inventory_plus.set_inventory_formspec(player, formspec)
return
end
for field, _ in pairs(fields) do
if string.find(field, "skins_set") then
minetest.after(0, function(player)
local skin = armor:get_player_skin(name)
armor.textures[name].skin = skin..".png"
armor:set_player_armor(player)
end, player)
end
end
end)
minetest.register_on_joinplayer(function(player)
default.player_set_model(player, "3d_armor_character.b3d")
local name = player:get_player_name()
local player_inv = player:get_inventory()
local armor_inv = minetest.create_detached_inventory(name.."_armor", {
on_put = function(inv, listname, index, stack, player)
player:get_inventory():set_stack(listname, index, stack)
armor:set_player_armor(player)
armor:update_inventory(player)
end,
on_take = function(inv, listname, index, stack, player)
player:get_inventory():set_stack(listname, index, nil)
armor:set_player_armor(player)
armor:update_inventory(player)
end,
on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
local plaver_inv = player:get_inventory()
local stack = inv:get_stack(to_list, to_index)
player_inv:set_stack(to_list, to_index, stack)
player_inv:set_stack(from_list, from_index, nil)
armor:set_player_armor(player)
armor:update_inventory(player)
end,
allow_put = function(inv, listname, index, stack, player)
if listname == "armor" then
if index == 1 and stack:get_definition().groups.armor_head then
return 1
elseif index == 2 and stack:get_definition().groups.armor_torso then
return 1
elseif index == 3 and stack:get_definition().groups.armor_legs then
return 1
elseif index == 4 and stack:get_definition().groups.armor_feet then
return 1
elseif index == 5 and stack:get_definition().groups.armor_shield then
return 1
else
return 0
end
else
return 1
end
end,
allow_take = function(inv, listname, index, stack, player)
return stack:get_count()
end,
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
if listname == "armor" then
if index == 1 and stack:get_definition().groups.armor_head then
return 1
elseif index == 2 and stack:get_definition().groups.armor_torso then
return 1
elseif index == 3 and stack:get_definition().groups.armor_legs then
return 1
elseif index == 4 and stack:get_definition().groups.armor_feet then
return 1
elseif index == 5 and stack:get_definition().groups.armor_shield then
return 1
else
return 0
end
else
return 1
end
end,
})
armor_inv:set_size("armor", 5)
player_inv:set_size("arm", 1)
player_inv:set_size("armor", 5)
for i=1, 5 do
local stack = player_inv:get_stack("armor", i)
armor_inv:set_stack("armor", i, stack)
end
-- Legacy support, import player's armor from old inventory format
for _,v in pairs(armor.elements) do
local list = "armor_"..v
armor_inv:add_item("armor", player_inv:get_stack(list, 1))
player_inv:set_stack(list, 1, nil)
end
-- TODO Remove this on the next version upate
armor.player_hp[name] = 0
armor.def[name] = {
state = 0,
count = 0,
level = 0,
heal = 0,
jump = 1,
speed = 1,
gravity = 1,
fire = 0,
}
armor.textures[name] = {
skin = armor.default_skin..".png",
armor = "3d_armor_trans.png",
wielditem = "3d_armor_trans.png",
preview = armor.default_skin.."_preview.png",
}
if skin_mod == "skins" then
local skin = skins.skins[name]
if skin and skins.get_type(skin) == skins.type.MODEL then
armor.textures[name].skin = skin..".png"
end
elseif skin_mod == "simple_skins" then
local skin = skins.skins[name]
if skin then
armor.textures[name].skin = skin..".png"
end
elseif skin_mod == "u_skins" then
local skin = u_skins.u_skins[name]
if skin and u_skins.get_type(skin) == u_skins.type.MODEL then
armor.textures[name].skin = skin..".png"
end
elseif skin_mod == "wardrobe" then
local skin = wardrobe.playerSkins[name]
if skin then
armor.textures[name].skin = skin
end
end
if minetest.get_modpath("player_textures") then
local filename = minetest.get_modpath("player_textures").."/textures/player_"..name
local f = io.open(filename..".png")
if f then
f:close()
armor.textures[name].skin = "player_"..name..".png"
end
end
for i=1, ARMOR_INIT_TIMES do
minetest.after(ARMOR_INIT_DELAY * i, function(player)
armor:set_player_armor(player)
if not inv_mod then
armor:update_inventory(player)
end
end, player)
end
end)
if ARMOR_DROP == true or ARMOR_DESTROY == true then
armor.drop_armor = function(pos, stack)
local obj = minetest.add_item(pos, stack)
if obj then
local x = math.random(1, 5)
if math.random(1,2) == 1 then
x = -x
end
local z = math.random(1, 5)
if math.random(1,2) == 1 then
z = -z
end
obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z})
end
end
minetest.register_on_dieplayer(function(player)
local name, player_inv, armor_inv, pos = armor:get_valid_player(player, "[on_dieplayer]")
if not name then
return
end
local drop = {}
for i=1, player_inv:get_size("armor") do
local stack = armor_inv:get_stack("armor", i)
if stack:get_count() > 0 then
table.insert(drop, stack)
armor_inv:set_stack("armor", i, nil)
player_inv:set_stack("armor", i, nil)
end
end
armor:set_player_armor(player)
if inv_mod == "unified_inventory" then
unified_inventory.set_inventory_formspec(player, "craft")
elseif inv_mod == "inventory_plus" then
local formspec = inventory_plus.get_formspec(player,"main")
inventory_plus.set_inventory_formspec(player, formspec)
else
armor:update_inventory(player)
end
if ARMOR_DESTROY == false then
minetest.after(ARMOR_BONES_DELAY, function()
pos = vector.round(pos)
local node = minetest.get_node(pos)
if node then
if node.name == "bones:bones" then
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner")
local inv = meta:get_inventory()
for _,stack in ipairs(drop) do
if name == owner and inv:room_for_item("main", stack) then
inv:add_item("main", stack)
else
armor.drop_armor(pos, stack)
end
end
end
else
for _,stack in ipairs(drop) do
armor.drop_armor(pos, stack)
end
end
end)
end
end)
end
minetest.register_globalstep(function(dtime)
time = time + dtime
if time > ARMOR_UPDATE_TIME then
for _,player in ipairs(minetest.get_connected_players()) do
armor:update_armor(player, time)
end
time = 0
end
end)

View File

@ -0,0 +1,79 @@
3d_armor -- Crafting Guide
--------------------------
Helmets:
+---+---+---+
| X | X | X |
+---+---+---+
| X | | X |
+---+---+---+
| | | |
+---+---+---+
[3d_armor:helmet_wood] X = [default:wood]
[3d_armor:helmet_cactus] X = [default:cactus]
[3d_armor:helmet_steel] X = [default:steel_ingot]
[3d_armor:helmet_bronze] X = [default:bronze_ingot]
[3d_armor:helmet_diamond] X = [default:diamond]
[3d_armor:helmet_gold] X = [default:gold_ingot]
[3d_armor:helmet_mithril] X = [moreores:mithril_ingot] *
[3d_armor:helmet_crystal] X = [ethereal:crystal_ingot] **
Chestplates:
+---+---+---+
| X | | X |
+---+---+---+
| X | X | X |
+---+---+---+
| X | X | X |
+---+---+---+
[3d_armor:chestplate_wood] X = [default:wood]
[3d_armor:chestplate_cactus] X = [default:cactus]
[3d_armor:chestplate_steel] X = [default:steel_ingot]
[3d_armor:chestplate_bronze] X = [default:bronze_ingot]
[3d_armor:chestplate_diamond] X = [default:diamond]
[3d_armor:chestplate_gold] X = [default:gold_ingot]
[3d_armor:chestplate_mithril] X = [moreores:mithril_ingot] *
[3d_armor:chestplate_crystal] X = [ethereal:crystal_ingot] **
Leggings:
+---+---+---+
| X | X | X |
+---+---+---+
| X | | X |
+---+---+---+
| X | | X |
+---+---+---+
[3d_armor:leggings_wood] X = [default:wood]
[3d_armor:leggings_cactus] X = [default:cactus]
[3d_armor:leggings_steel] X = [default:steel_ingot]
[3d_armor:leggings_bronze] X = [default:bronze_ingot]
[3d_armor:leggings_diamond] X = [default:diamond]
[3d_armor:leggings_gold] X = [default:gold_ingot]
[3d_armor:leggings_mithril] X = [moreores:mithril_ingot] *
[3d_armor:leggings_crystal] X = [ethereal:crystal_ingot] **
Boots:
+---+---+---+
| X | | X |
+---+---+---+
| X | | X |
+---+---+---+
[3d_armor:boots_wood] X = [default:wood]
[3d_armor:boots_cactus] X = [default:cactus]
[3d_armor:boots_steel] X = [default:steel_ingot]
[3d_armor:boots_bronze] X = [default:bronze_ingot
[3d_armor:boots_diamond] X = [default:diamond]
[3d_armor:boots_gold] X = [default:gold_ingot]
[3d_armor:boots_mithril] X = [moreores:mithril_ingot] *
[3d_armor:boots_crystal] X = [ethereal:crystal_ingot] **
* Requires moreores mod by Calinou - https://forum.minetest.net/viewtopic.php?id=549
** Requires ethereal mod by Chinchow & TenPlus1 - https://github.com/tenplus1/ethereal

View File

@ -0,0 +1,4 @@
default
inventory_plus?
unified_inventory?

View File

@ -0,0 +1,4 @@
ARMOR_MOD_NAME = minetest.get_current_modname()
dofile(minetest.get_modpath(ARMOR_MOD_NAME).."/armor.lua")
dofile(minetest.get_modpath(ARMOR_MOD_NAME).."/admin.lua")
dofile(minetest.get_modpath(ARMOR_MOD_NAME).."/tutorial.lua")

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 907 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 B

View File

@ -0,0 +1,227 @@
minetest.register_tool("3d_armor:regnumboots", {
description = "Regnumboots Mode 1 (no speed and no jump)\nBoots-lv.MAX",
inventory_image = "3d_armor_inv_regnumboots.png^technic_tool_mode1.png",
groups = {armor_feet=150, armor_heal=15, armor_use=0,armor_fire=30},
wear = 0,
wield_image = "3d_armor_inv_regnumboots.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumboots2")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumboots2", {
description = "Regnumboots Mode 2 (speed and no jump)\nBoots-lv.MAX",
inventory_image = "3d_armor_inv_regnumboots.png^technic_tool_mode2.png",
groups = {armor_feet=150, armor_heal=15, armor_use=0,armor_fire=30, physics_speed=0.25},
wear = 0,
wield_image = "3d_armor_inv_regnumboots.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumboots3")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumboots3", {
description = "Regnumboots Mode 3 (no speed and jump)\nBoots-lv.MAX",
inventory_image = "3d_armor_inv_regnumboots.png^technic_tool_mode3.png",
groups = {armor_feet=150, armor_heal=15, armor_use=0,armor_fire=30, physics_jump=0.25},
wear = 0,
wield_image = "3d_armor_inv_regnumboots.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumboots4")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumboots4", {
description = "Regnumboots Mode 4 (speed and jump)\nBoots-lv.MAX",
inventory_image = "3d_armor_inv_regnumboots.png^technic_tool_mode4.png",
groups = {armor_feet=150, armor_heal=15, armor_use=0,armor_fire=30, physics_jump=0.25, physics_speed=0.25},
wear = 0,
wield_image = "3d_armor_inv_regnumboots.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumboots")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumchestplate", {
description = "Regnumchestplate Mode 1 (no speed and no jump)\nChestplate-lv.MAX",
inventory_image = "3d_armor_inv_regnumchestplate.png^technic_tool_mode1.png",
groups = {armor_torso=150, armor_heal=15, armor_use=0, armor_fire=30},
wear = 0,
wield_image = "3d_armor_inv_regnumchestplate.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumchestplate2")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumchestplate2", {
description = "Regnumchestplate Mode 2 (speed and no jump)\nChestplate-lv.MAX",
inventory_image = "3d_armor_inv_regnumchestplate.png^technic_tool_mode2.png",
groups = {armor_torso=150, armor_heal=15, armor_use=0, armor_fire=30, physics_speed=0.25},
wear = 0,
wield_image = "3d_armor_inv_regnumchestplate.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumchestplate3")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumchestplate3", {
description = "Regnumchestplate Mode 3 (no speed and jump)\nChestplate-lv.MAX",
inventory_image = "3d_armor_inv_regnumchestplate.png^technic_tool_mode3.png",
groups = {armor_torso=150, armor_heal=15, armor_use=0, armor_fire=30, physics_jump=0.25},
wear = 0,
wield_image = "3d_armor_inv_regnumchestplate.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumchestplate4")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumchestplate4", {
description = "Regnumchestplate Mode 4 (speed and jump)\nChestplate-lv.MAX",
inventory_image = "3d_armor_inv_regnumchestplate.png^technic_tool_mode4.png",
groups = {armor_torso=150, armor_heal=15, armor_use=0, armor_fire=30, physics_jump=0.25, physics_speed=0.25},
wear = 0,
wield_image = "3d_armor_inv_regnumchestplate.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumchestplate")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumhelmet", {
description = "Regnumhelmet Mode 1 (no speed and no jump)\nHelmet-lv.MAX",
inventory_image = "3d_armor_inv_regnumhelmet.png^technic_tool_mode1.png",
groups = {armor_head=150, armor_heal=15, armor_use=0,armor_fire=30},
wear = 0,
wield_image = "3d_armor_inv_regnumhelmet.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumhelmet2")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumhelmet2", {
description = "Regnumhelmet Mode 2 (speed and no jump)\nHelmet-lv.MAX",
inventory_image = "3d_armor_inv_regnumhelmet.png^technic_tool_mode2.png",
groups = {armor_head=150, armor_heal=15, armor_use=0,armor_fire=30, physics_speed=0.25},
wear = 0,
wield_image = "3d_armor_inv_regnumhelmet.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumhelmet3")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumhelmet3", {
description = "Regnumhelmet Mode 3 (no speed and jump)\nHelmet-lv.MAX",
inventory_image = "3d_armor_inv_regnumhelmet.png^technic_tool_mode3.png",
groups = {armor_head=150, armor_heal=15, armor_use=0,armor_fire=30, physics_jump=0.25},
wear = 0,
wield_image = "3d_armor_inv_regnumhelmet.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumhelmet4")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumhelmet4", {
description = "Regnumhelmet Mode 4 (speed and jump)\nHelmet-lv.MAX",
inventory_image = "3d_armor_inv_regnumhelmet.png^technic_tool_mode4.png",
groups = {armor_head=150, armor_heal=15, armor_use=0,armor_fire=30, physics_jump=0.25, physics_speed=0.25},
wear = 0,
wield_image = "3d_armor_inv_regnumhelmet.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumhelmet")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumleggings", {
description = "Regnumleggings Mode 1 (no speed and no jump)\nLeggings-lv.MAX",
inventory_image = "3d_armor_inv_regnumleggings.png^technic_tool_mode1.png",
groups = {armor_legs=150, armor_heal=15, armor_use=0,armor_fire=30},
wear = 0,
wield_image = "3d_armor_inv_regnumleggings.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumleggings2")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumleggings2", {
description = "Regnumleggings Mode 2 (speed and no jump)\nLeggings-lv.MAX",
inventory_image = "3d_armor_inv_regnumleggings.png^technic_tool_mode2.png",
groups = {armor_legs=150, armor_heal=15, armor_use=0,armor_fire=30, physics_speed=0.25},
wear = 0,
wield_image = "3d_armor_inv_regnumleggings.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumleggings3")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumleggings3", {
description = "Regnumleggings Mode 3 (no speed and jump)\nLeggings-lv.MAX",
inventory_image = "3d_armor_inv_regnumleggings.png^technic_tool_mode3.png",
groups = {armor_legs=150, armor_heal=15, armor_use=0,armor_fire=30, physics_jump=0.25},
wear = 0,
wield_image = "3d_armor_inv_regnumleggings.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumleggings4")
end
return itemstack
end,
})
minetest.register_tool("3d_armor:regnumleggings4", {
description = "Regnumleggings Mode 4 (speed and jump)\nLeggings-lv.MAX",
inventory_image = "3d_armor_inv_regnumleggings.png^technic_tool_mode4.png",
groups = {armor_legs=150, armor_heal=15, armor_use=0,armor_fire=30, physics_jump=0.25, physics_speed=0.25},
wear = 0,
wield_image = "3d_armor_inv_regnumleggings.png",
on_use = function(itemstack, user, pointed_thing)
local keys = user:get_player_control()
if keys["sneak"] == true then
itemstack:set_name("3d_armor:regnumleggings")
end
return itemstack
end,
})

View File

@ -0,0 +1,7 @@
[mod] 3d Armor Stand [3d_armor_stand]
=====================================
License Source Code: LGPL v2.1
Lecense Media: CC BY-SA 3.0

View File

@ -0,0 +1,21 @@
[mod] 3d Armor Stand [3d_armor_stand]
=====================================
Depends: 3d_armor
Adds a chest-like armor stand for armor storage and display.
Crafting
--------
F = Wooden Fence [default:fence_wood]
S = Steel Ingot [default:steel_ingot]
+---+---+---+
| | F | |
+---+---+---+
| | F | |
+---+---+---+
| S | S | S |
+---+---+---+

View File

@ -0,0 +1,2 @@
3d_armor

View File

@ -0,0 +1,258 @@
local armor_stand_formspec = "size[8,7]" ..
default.gui_bg ..
default.gui_bg_img ..
default.gui_slots ..
default.get_hotbar_bg(0,3) ..
"list[current_name;armor_head;3,0.5;1,1;]" ..
"list[current_name;armor_torso;4,0.5;1,1;]" ..
"list[current_name;armor_legs;3,1.5;1,1;]" ..
"list[current_name;armor_feet;4,1.5;1,1;]" ..
"image[3,0.5;1,1;3d_armor_stand_head.png]" ..
"image[4,0.5;1,1;3d_armor_stand_torso.png]" ..
"image[3,1.5;1,1;3d_armor_stand_legs.png]" ..
"image[4,1.5;1,1;3d_armor_stand_feet.png]" ..
"list[current_player;main;0,3;8,1;]" ..
"list[current_player;main;0,4.25;8,3;8]"
local elements = {"head", "torso", "legs", "feet"}
local function get_stand_object(pos)
local object = nil
local objects = minetest.get_objects_inside_radius(pos, 0.5) or {}
for _, obj in pairs(objects) do
local ent = obj:get_luaentity()
if ent then
if ent.name == "3d_armor_stand:armor_entity" then
-- Remove duplicates
if object then
obj:remove()
else
object = obj
end
end
end
end
return object
end
local function update_entity(pos)
local node = minetest.get_node(pos)
local object = get_stand_object(pos)
if object then
if not string.find(node.name, "3d_armor_stand:") then
object:remove()
return
end
else
object = minetest.add_entity(pos, "3d_armor_stand:armor_entity")
end
if object then
local texture = "3d_armor_trans.png"
local textures = {}
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local yaw = 0
if inv then
for _, element in pairs(elements) do
local stack = inv:get_stack("armor_"..element, 1)
if stack:get_count() == 1 then
local item = stack:get_name() or ""
local def = stack:get_definition() or {}
local texture = def.texture or item:gsub("%:", "_")
table.insert(textures, texture..".png")
end
end
end
if #textures > 0 then
texture = table.concat(textures, "^")
end
if node.param2 then
local rot = node.param2 % 4
if rot == 1 then
yaw = 3 * math.pi / 2
elseif rot == 2 then
yaw = math.pi
elseif rot == 3 then
yaw = math.pi / 2
end
end
object:setyaw(yaw)
object:set_properties({textures={texture}})
end
end
minetest.register_node("3d_armor_stand:armor_stand", {
description = "Armor stand",
drawtype = "mesh",
mesh = "3d_armor_stand.obj",
tiles = {"default_wood.png", "default_steel_block.png"},
paramtype = "light",
paramtype2 = "facedir",
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.5,-0.5,-0.5, 0.5,1.4,0.5}
},
groups = {choppy=2, oddly_breakable_by_hand=2},
sounds = default.node_sound_wood_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", armor_stand_formspec)
meta:set_string("infotext", "Armor Stand")
local inv = meta:get_inventory()
for _, element in pairs(elements) do
inv:set_size("armor_"..element, 1)
end
end,
can_dig = function(pos, player)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
for _, element in pairs(elements) do
if not inv:is_empty("armor_"..element) then
return false
end
end
return true
end,
after_place_node = function(pos)
minetest.add_entity(pos, "3d_armor_stand:armor_entity")
end,
allow_metadata_inventory_put = function(pos, listname, index, stack)
local def = stack:get_definition() or {}
local groups = def.groups or {}
if groups[listname] then
return 1
end
return 0
end,
allow_metadata_inventory_move = function(pos)
return 0
end,
on_metadata_inventory_put = function(pos)
update_entity(pos)
end,
on_metadata_inventory_take = function(pos)
update_entity(pos)
end,
after_destruct = function(pos)
update_entity(pos)
end,
on_blast = function(pos)
local object = get_stand_object(pos)
if object then
object:remove()
end
minetest.after(1, function(pos)
update_entity(pos)
end, pos)
end,
})
local function has_locked_armor_stand_privilege(meta, player)
local name = ""
if player then
if minetest.check_player_privs(player, "protection_bypass") then
return true
end
name = player:get_player_name()
end
if name ~= meta:get_string("owner") then
return false
end
return true
end
local node = {}
for k,v in pairs(minetest.registered_nodes["3d_armor_stand:armor_stand"]) do
node[k] = v
end
node.description = "Locked " .. node.description
node.allow_metadata_inventory_put = function(pos, listname, index, stack, player)
local meta = minetest.get_meta(pos)
if not has_locked_armor_stand_privilege(meta, player) then
return 0
end
local def = stack:get_definition() or {}
local groups = def.groups or {}
if groups[listname] then
return 1
end
return 0
end
node.allow_metadata_inventory_take = function(pos, listname, index, stack, player)
local meta = minetest.get_meta(pos)
if not has_locked_armor_stand_privilege(meta, player) then
return 0
end
return stack:get_count()
end
node.on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", armor_stand_formspec)
meta:set_string("infotext", "Armor Stand")
meta:set_string("owner", "")
local inv = meta:get_inventory()
for _, element in pairs(elements) do
inv:set_size("armor_"..element, 1)
end
end
node.after_place_node = function(pos, placer)
minetest.add_entity(pos, "3d_armor_stand:armor_entity")
local meta = minetest.get_meta(pos)
meta:set_string("owner", placer:get_player_name() or "")
meta:set_string("infotext", "Armor Stand (owned by " ..
meta:get_string("owner") .. ")")
end
minetest.register_node("3d_armor_stand:locked_armor_stand", node)
minetest.register_entity("3d_armor_stand:armor_entity", {
physical = true,
visual = "mesh",
mesh = "3d_armor_entity.obj",
visual_size = {x=1, y=1},
collisionbox = {-0.1,-0.4,-0.1, 0.1,1.3,0.1},
textures = {"3d_armor_trans.png"},
pos = nil,
timer = 0,
on_activate = function(self)
local pos = self.object:getpos()
if pos then
self.pos = vector.round(pos)
update_entity(pos)
end
end,
on_step = function(self, dtime)
if not self.pos then
return
end
self.timer = self.timer + dtime
if self.timer > 1 then
self.timer = 0
local pos = self.object:getpos()
if pos then
if vector.equals(self.pos, pos) then
return
end
end
update_entity(self.pos)
self.object:remove()
end
end,
})
minetest.register_craft({
output = "3d_armor_stand:armor_stand",
recipe = {
{"", "default:fence_wood", ""},
{"", "default:fence_wood", ""},
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
}
})
minetest.register_craft({
output = "3d_armor_stand:locked_armor_stand",
recipe = {
{"3d_armor_stand:armor_stand", "default:steel_ingot"},
}
})

View File

@ -0,0 +1,193 @@
# Blender v2.73 (sub 0) OBJ File: '3d_armor_entity_3.blend'
# www.blender.org
mtllib 3d_armor_entity.mtl
o Player_Cube
v 2.200000 9.763893 1.200000
v 2.200000 9.763893 -1.200000
v 2.200000 2.663871 1.200000
v 2.200000 2.663871 -1.200000
v -2.200000 9.763893 -1.200000
v -2.200000 9.763893 1.200000
v -2.200000 2.663871 -1.200000
v -2.200000 2.663871 1.200000
v 2.300000 13.863962 2.300000
v 2.300000 13.863962 -2.300000
v 2.300000 9.263885 2.300000
v 2.300000 9.263885 -2.300000
v -2.300000 13.863962 -2.300000
v -2.300000 13.863962 2.300000
v -2.300000 9.263885 -2.300000
v -2.300000 9.263885 2.300000
v -2.322686 2.473175 -1.300000
v -2.322686 2.473175 1.300000
v -4.713554 2.682348 1.300000
v -4.713554 2.682348 -1.300000
v -1.686446 9.745432 -1.300000
v -1.686446 9.745432 1.300000
v -4.077313 9.954605 1.300000
v -4.077313 9.954605 -1.300000
v 4.077313 9.954605 -1.300000
v 4.077313 9.954605 1.300000
v 1.686446 9.745432 1.300000
v 1.686446 9.745432 -1.300000
v 4.713554 2.682348 -1.300000
v 4.713554 2.682348 1.300000
v 2.322686 2.473175 1.300000
v 2.322686 2.473175 -1.300000
v 0.139099 2.938947 -1.200000
v 0.139099 2.938947 1.200000
v 0.261266 -4.059988 1.200000
v 0.261266 -4.059988 -1.200000
v 2.660901 -4.018101 1.190000
v 2.660901 -4.018101 -1.210000
v 2.538733 2.980834 1.190000
v 2.538733 2.980834 -1.210000
v -0.139099 2.938947 -1.200000
v -0.139099 2.938947 1.200000
v -0.261266 -4.059988 1.200000
v -0.261266 -4.059988 -1.200000
v -2.538734 2.980834 -1.210000
v -2.538734 2.980834 1.190000
v -2.660901 -4.018101 -1.210000
v -2.660901 -4.018101 1.190000
v -2.799999 -4.387500 1.390000
v -2.799999 -4.387500 -1.410000
v -2.800000 -0.812499 1.390000
v -2.800000 -0.812499 -1.410000
v -0.000000 -4.387500 -1.400000
v -0.000000 -4.387500 1.400000
v -0.000000 -0.812499 1.400000
v -0.000000 -0.812499 -1.400000
v 2.800000 -0.812499 -1.410000
v 2.800000 -0.812499 1.390000
v 2.799999 -4.387500 -1.410000
v 2.799999 -4.387500 1.390000
v 0.000000 -4.387500 -1.400000
v 0.000000 -4.387500 1.400000
v 0.000000 -0.812499 1.400000
v 0.000000 -0.812499 -1.400000
v 2.267006 13.830965 2.267006
v 2.267006 13.830965 -2.267006
v 2.267006 9.296881 2.267006
v 2.267006 9.296881 -2.267006
v -2.267006 13.830965 -2.267006
v -2.267006 13.830965 2.267006
v -2.267006 9.296881 -2.267006
v -2.267006 9.296881 2.267006
vt 0.250000 0.375000
vt 0.250000 0.000000
vt 0.312500 0.000000
vt 0.312500 0.375000
vt 0.437500 0.375000
vt 0.437500 0.500000
vt 0.312500 0.500000
vt 0.562500 0.375000
vt 0.562500 0.500000
vt 0.437500 0.000000
vt 0.500000 0.000000
vt 0.500000 0.375000
vt 0.625000 0.000000
vt 0.625000 0.375000
vt 0.500000 0.750000
vt 0.500000 0.500000
vt 0.625000 0.500000
vt 0.625000 0.750000
vt 0.750000 0.750000
vt 0.750000 1.000000
vt 0.625000 1.000000
vt 0.875000 0.750000
vt 0.875000 1.000000
vt 0.750000 0.500000
vt 0.875000 0.500000
vt 1.000000 0.750000
vt 1.000000 0.500000
vt 0.750000 0.375000
vt 0.812500 0.500000
vt 0.812500 0.375000
vt 0.687500 0.375000
vt 0.687500 0.500000
vt 0.687500 0.000000
vt 0.750000 0.000000
vt 0.812500 0.000000
vt 0.875000 0.375000
vt 0.875000 0.000000
vt 0.125000 0.375000
vt 0.062500 0.375000
vt 0.062500 0.500000
vt 0.125000 0.500000
vt 0.187500 0.375000
vt 0.187500 0.500000
vt 0.000000 0.375000
vt 0.000000 0.000000
vt 0.062500 0.000000
vt 0.187500 0.000000
vt 0.125000 0.000000
vt 0.437500 0.875000
vt 0.437500 1.000000
vt 0.375000 1.000000
vt 0.375000 0.875000
vt 0.250000 0.875000
vt 0.312500 0.875000
vt 0.312500 0.656250
vt 0.250000 0.656250
vt 0.500000 0.875000
vt 0.437500 0.656250
vt 0.500000 0.656250
vt 0.375000 0.656250
vt 0.312500 1.000000
usemtl Armor
s off
f 1/1 3/2 4/3 2/4
f 5/5 6/6 1/7 2/4
f 8/6 7/5 4/8 3/9
f 5/5 2/4 4/3 7/10
f 7/10 8/11 6/12 5/5
f 8/11 3/13 1/14 6/12
f 9/15 11/16 12/17 10/18
f 13/19 14/20 9/21 10/18
f 12/22 11/23 16/20 15/19
f 13/19 10/18 12/17 15/24
f 14/22 13/19 15/24 16/25
f 9/26 14/22 16/25 11/27
f 17/28 18/24 19/29 20/30
f 24/31 23/32 22/24 21/28
f 23/31 24/14 20/13 19/33
f 24/31 21/28 17/34 20/33
f 21/28 22/30 18/35 17/34
f 22/30 23/36 19/37 18/35
f 27/30 31/35 30/37 26/36
f 28/28 32/34 31/35 27/30
f 25/31 29/33 32/34 28/28
f 26/31 30/33 29/13 25/14
f 25/31 28/28 27/24 26/32
f 32/28 29/30 30/29 31/24
f 40/38 33/39 34/40 39/41
f 36/42 38/38 37/41 35/43
f 39/44 37/45 38/46 40/39
f 34/1 35/2 37/47 39/42
f 40/38 38/48 36/46 33/39
f 33/42 36/47 35/48 34/38
f 45/38 46/41 42/40 41/39
f 41/42 42/38 43/48 44/47
f 45/38 41/39 44/46 47/48
f 42/1 46/42 48/47 43/2
f 46/44 45/39 47/46 48/45
f 44/42 43/43 48/41 47/38
f 53/49 54/50 49/51 50/52
f 51/53 52/54 50/55 49/56
f 55/57 51/49 49/58 54/59
f 52/52 56/54 53/55 50/60
f 56/49 55/52 54/60 53/58
f 52/52 51/51 55/61 56/54
f 64/49 61/58 62/60 63/52
f 57/52 59/60 61/55 64/54
f 63/57 62/59 60/58 58/49
f 58/53 60/56 59/55 57/54
f 61/49 59/52 60/51 62/50
f 57/52 64/54 63/61 58/51
f 65/15 66/18 68/17 67/16
f 69/19 66/18 65/21 70/20
f 68/22 71/19 72/20 67/23
f 69/19 71/24 68/17 66/18
f 70/22 72/25 71/24 69/19
f 65/26 67/27 72/25 70/22

View File

@ -0,0 +1,191 @@
# Blender v2.73 (sub 0) OBJ File: '3d_armor_stand.blend'
# www.blender.org
mtllib 3d_armor_stand.mtl
o Player_Cube
v 0.062500 1.312500 -0.062500
v 0.062500 1.312500 0.062500
v -0.062500 1.312500 -0.062500
v -0.062500 1.312500 0.062500
v -0.187500 -0.437504 0.062500
v -0.187500 -0.437504 -0.062500
v -0.187500 0.937500 0.062500
v -0.187500 0.937500 -0.062500
v -0.250000 0.250000 0.062500
v -0.250000 0.250000 -0.062500
v -0.250000 0.125003 0.062500
v -0.250000 0.125003 -0.062500
v 0.250000 0.250000 0.062500
v 0.250000 0.250000 -0.062500
v 0.250000 0.125003 0.062500
v 0.250000 0.125003 -0.062500
v -0.062500 -0.437504 -0.062500
v -0.062500 -0.437504 0.062500
v -0.062500 0.937500 0.062500
v -0.062500 0.937500 -0.062500
v 0.062500 0.250000 0.062500
v 0.062500 0.250000 -0.062500
v 0.187500 0.250000 -0.062500
v 0.187500 0.250000 0.062500
v 0.187500 0.937500 -0.062500
v 0.187500 0.937500 0.062500
v 0.187500 -0.437504 -0.062500
v 0.187500 -0.437504 0.062500
v 0.062500 -0.437504 -0.062500
v 0.062500 -0.437504 0.062500
v 0.062500 0.937500 0.062500
v 0.062500 0.937500 -0.062500
v -0.062500 0.812500 -0.062500
v -0.187500 0.812500 -0.062500
v -0.062500 0.812500 0.062500
v -0.187500 0.812500 0.062500
v 0.062500 0.812500 -0.062500
v 0.187500 0.812500 -0.062500
v 0.187500 0.812500 0.062500
v 0.062500 0.812500 0.062500
v 0.375000 0.812500 0.062500
v 0.375000 0.812500 -0.062500
v 0.375000 0.937500 0.062500
v 0.375000 0.937500 -0.062500
v 0.500000 -0.437500 -0.500000
v 0.500000 -0.437500 0.500000
v -0.500000 -0.437500 -0.500000
v -0.500000 -0.437500 0.500000
v -0.062500 0.250000 -0.062500
v -0.187500 0.250000 -0.062500
v -0.062500 0.250000 0.062500
v -0.187500 0.250000 0.062500
v -0.375000 0.937500 0.062500
v -0.375000 0.937500 -0.062500
v -0.375000 0.812500 -0.062500
v -0.375000 0.812500 0.062500
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.187500 0.124998 0.062500
v 0.187500 0.124998 -0.062500
v 0.062500 0.124998 0.062500
v 0.062500 0.124998 -0.062500
v -0.062500 0.124998 -0.062500
v -0.187500 0.124998 -0.062500
v -0.062500 0.124998 0.062500
v -0.187500 0.124998 0.062500
vt 0.000000 0.000000
vt 0.875000 0.000000
vt 0.875000 0.250000
vt 0.000000 0.250000
vt 0.125000 0.500000
vt 0.125000 0.750000
vt -0.000000 0.750000
vt -0.000000 0.500000
vt 0.750000 0.000000
vt 1.000000 0.000000
vt 1.000000 0.250000
vt 0.750000 0.250000
vt 0.375000 0.500000
vt 0.375000 0.750000
vt 0.875000 0.750000
vt 0.875000 1.000000
vt 0.000000 1.000000
vt 0.875000 0.500000
vt 0.750000 0.500000
vt 1.000000 0.500000
vt 1.000000 0.750000
vt 0.750000 0.750000
vt 0.625000 1.000000
vt 0.375000 1.000000
vt 0.625000 0.750000
vt 0.625000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt 0.625000 0.250000
vt 0.625000 -0.000000
vt 0.250000 0.250000
vt 0.250000 0.000000
vt 0.375000 0.250000
vt 0.250000 1.000000
vt 1.000000 1.000000
vt 0.750000 1.000000
vt 0.375000 -0.000000
vt 0.125000 0.250000
vt 0.125000 1.000000
vt 0.125000 0.000000
vt -0.000000 0.937500
vt 1.000000 0.937500
vt 0.937500 0.000000
vt 0.937500 1.000000
vt 1.000000 0.062500
vt 0.000000 0.062500
vt 0.062500 0.000000
vt 0.062500 1.000000
g Player_Cube_Stand
usemtl Stand
s off
f 64/1 29/2 30/3 63/4
f 52/5 50/6 10/7 9/8
f 17/9 18/10 5/11 6/12
f 68/3 66/2 6/1 5/4
f 7/13 8/14 54/7 53/8
f 67/15 68/16 5/17 18/7
f 62/4 27/3 29/18 64/8
f 66/3 65/18 17/8 6/4
f 9/19 10/20 12/21 11/22
f 63/7 30/15 28/16 61/17
f 65/18 67/15 18/7 17/8
f 61/8 28/18 27/15 62/7
f 19/23 7/24 36/14 35/25
f 8/14 7/13 19/26 20/25
f 23/15 24/18 13/20 14/21
f 13/8 15/27 16/28 14/7
f 39/29 38/30 42/10 41/11
f 29/31 27/4 28/1 30/32
f 25/28 26/27 43/26 44/25
f 38/12 25/19 44/13 42/33
f 25/28 32/7 31/8 26/27
f 8/26 20/13 33/33 34/29
f 25/19 38/12 37/11 32/20
f 31/17 40/7 39/28 26/34
f 26/34 39/28 41/25 43/23
f 43/7 41/28 42/34 44/17
f 53/22 54/21 55/35 56/36
f 36/14 7/24 53/17 56/7
f 8/26 34/29 55/11 54/20
f 34/37 36/33 56/4 55/1
f 51/13 21/26 22/25 49/14
f 20/4 3/12 1/19 32/8
f 40/15 31/16 19/23 35/25
f 35/29 33/30 37/2 40/3
f 33/33 20/13 32/5 37/38
f 3/14 4/24 2/23 1/25
f 19/12 4/4 3/1 20/9
f 31/36 2/17 4/7 19/22
f 32/22 1/7 2/8 31/19
f 23/5 62/38 64/33 22/13
f 21/14 63/24 61/39 24/6
f 61/3 62/2 16/10 15/11
f 62/38 23/5 14/8 16/4
f 24/6 61/39 15/17 13/7
f 50/18 66/3 12/11 10/20
f 66/40 68/38 11/4 12/1
f 50/18 49/26 65/29 66/3
f 51/25 52/15 68/16 67/23
f 68/16 52/15 9/21 11/35
f 49/26 22/13 64/33 65/29
f 51/25 67/23 63/24 21/14
f 67/33 65/37 64/30 63/29
f 37/1 22/2 21/3 40/4
f 38/4 23/3 22/18 37/8
f 40/7 21/15 24/16 39/17
f 39/8 24/18 23/15 38/7
f 36/2 34/3 50/4 52/1
f 35/15 36/16 52/17 51/7
f 34/3 33/18 49/8 50/4
f 33/18 35/15 51/7 49/8
g Player_Cube_Base
usemtl Base
f 47/17 48/1 46/10 45/35
f 59/1 57/10 58/35 60/17
f 48/17 60/41 58/42 46/35
f 46/43 58/10 57/35 45/44
f 47/1 45/10 57/45 59/46
f 48/47 47/48 59/17 60/1

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Some files were not shown because too many files have changed in this diff Show More