1
0
mirror of https://github.com/minetest-mods/3d_armor.git synced 2025-06-29 14:50:47 +02:00

81 Commits

Author SHA1 Message Date
7a980a6717 Fix missing sfinv page background images, closes #90 2017-03-12 20:34:54 +00:00
fc3fcea4b7 Bump version to 0.4.8 2017-03-12 19:14:32 +00:00
b59464de88 Improve skin mod preview support 2017-03-12 18:23:49 +00:00
80024fc154 Fix security violation in player_textures mod support 2017-03-12 17:01:04 +00:00
d826b53877 Use u_skins preview image as base for armor preview 2017-03-11 21:34:26 +00:00
01a3425ec8 Add preview generator and update preview textures 2017-03-11 20:02:55 +00:00
616d9398f2 Minor formspec improvements 2017-03-11 19:31:37 +00:00
6661ec0b40 Add support for player monoids, resolves #85 2017-03-10 20:33:45 +00:00
ca1cf6bfeb Fix inconsistency with cactus boots, closes #89 2017-03-10 18:09:28 +00:00
8f5ffeb384 Shields: Remove registration delay, closes #88 2017-03-10 18:05:16 +00:00
ca79d39688 Armor stand: Improve TNT effects, closes #55 2017-03-08 19:36:30 +00:00
8b8a554ff7 Add support for sfinv 2017-03-08 17:47:38 +00:00
3df7802439 added new torch fire nodes
added new torch nodes to the fire nodes list.
2017-03-08 17:44:49 +00:00
19e297a2e8 Update inventory_plus formspec style 2017-03-03 17:59:31 +00:00
190614d47b Fix potential bug with new bone location method 2017-02-24 23:00:03 +00:00
37b10d1cee Remove redundant code 2017-02-24 22:45:23 +00:00
4b45f85687 Improve bones locating and fallback, fixes #84 2017-02-24 22:32:27 +00:00
a5b650285b beter smart_inventory integration 2017-02-21 19:07:17 +00:00
26212fb3e4 Add new armor textures by @daviddoesminetest 2017-02-19 19:33:10 +00:00
4829445d12 Update style of default armor formspec 2017-02-15 19:37:35 +00:00
4d3b219e7d add smart_inventory support 2017-02-15 19:06:06 +00:00
81ffdaa6a7 Improve armor stand selection box 2017-02-15 18:25:49 +00:00
ba62febdee Armor stand, check protection and ignore, ignore 2017-02-08 20:57:42 +00:00
8939a0dd43 Armor stand hidden nodes use copy of pos vector 2017-02-08 19:32:42 +00:00
c691f3e219 Prevent building over armor stands 2017-02-08 18:26:15 +00:00
bf9ba59c0f Merge branch 'tobyplowy-master' 2017-01-25 19:49:52 +00:00
75f808131c New armorstand mapping 2017-01-25 19:48:25 +00:00
b88f946929 Bump version to 0.4.7 2017-01-11 19:36:51 +00:00
c63376b523 Improve hazmat-suit documentation, closes #72 2017-01-11 19:28:17 +00:00
c070dfb19f Include years of all licenses 2017-01-11 19:15:06 +00:00
4b70580ce4 Update licensing information 2017-01-08 18:54:24 +00:00
65b6d58580 Prevent armor damage when using /killme command 2016-12-07 19:24:00 +00:00
98786fd8f7 Add killme command to replace old kill command 2016-11-27 17:18:08 +00:00
9105e8403e Merge pull request #62 from paly2/kill_chatcommand_privs
Add "ban" privilege for kill chatcommand
2016-11-27 16:50:03 +00:00
6b2e3adc00 Bump version to 0.4.6 2016-11-27 16:22:29 +00:00
c9001f9e53 Rebase armor model, armature and UV fixes 2016-11-27 16:11:51 +00:00
cc25d6be13 Merge pull request #66 from diogo-gomes/develop
Add table of contents to README.md
2016-08-21 17:52:03 +01:00
f557c4d69e Add table of contents to README.md 2016-07-25 14:48:52 +01:00
456c84e93e Merge pull request #65 from everamzah/fixbones
Try harder to add armor to bones
2016-07-22 17:51:06 +01:00
0157ebd683 Try harder to add armor to bones
Previously, if bones were on a slab, or some non-buildable_to but walkable
node, then the armor would fail to find the bones node (which is Y+1,
typically) and the armor would disappear.  This is an attempt to address that.
2016-07-22 10:46:05 -04:00
c39f838893 Fix a mistake in the kill chatcommand
Use "param" instead of "name" in "func"
2016-06-17 18:29:43 +02:00
862deff373 Add "ban" privilege for kill chatcommand 2016-06-17 16:08:50 +02:00
ac414d3df3 Remove admin shield from creative inventory 2016-05-27 19:51:39 +01:00
3cf6887abd Fix undeclared global error in hazmat_suit 2016-05-18 19:42:37 +01:00
b14db3c43c Add missing placer param to locked armor stand, fixes #59 2016-05-11 22:19:13 +01:00
8f8c6c6bfa Merge pull request #56 from Thomas--S/patch-2
Fix typo
2016-05-11 19:46:48 +01:00
54ec4b3cef Fix typo 2016-05-11 19:25:59 +02:00
32e87ee543 More armor stand fixes 2016-05-04 18:27:21 +01:00
d322a0f110 Modify helmet textures, fixes #49 2016-05-01 20:25:46 +01:00
9cc2f3db02 Radiation protection support added 2016-05-01 17:09:07 +01:00
ddd7f3786c Fix disappearing armor stand entities, again... 2016-05-01 16:11:27 +01:00
5c5359de4f Restore armor stand entities when knocked-back by TNT 2016-04-27 18:48:06 +01:00
1aa2b769d7 Rebase armor player model, fixes #54 2016-04-24 21:13:45 +01:00
5421ce46da Make armor stands 'blast-proof', fixes #55 2016-04-22 18:53:25 +01:00
72cffbae17 Restore moved armor stand objects to original position when possible 2016-04-20 20:26:01 +01:00
170ee39aed Auto remove stray armor stand entities 2016-04-20 18:54:34 +01:00
59bbc55b73 Fix armor stand entity duplication bug 2016-04-16 15:36:48 +01:00
1dd904f5be Merge pull request #50 from Thomas--S/patch-1
Add a locked armor stand
2016-04-13 17:41:37 +01:00
9de8cc12bb Fix disappearing entities when placing stands next to each other 2016-04-10 22:17:45 +01:00
4e8cf05436 Add a locked armor stand
This change adds a locked armor stand, so that player can use them savely on multiplayer worlds.
2016-04-10 20:11:53 +02:00
b6a44057a6 Fix some tabulation 2016-04-09 01:19:32 +01:00
ae33659168 Make cactus leggings inventory image more consistent 2016-04-08 21:35:56 +01:00
fb29ce9150 Add a chest-like visible armor stand, closes #48 2016-04-08 20:17:28 +01:00
7408ebcd81 Add support for mod managers 2016-03-25 19:52:00 +00:00
36737441d4 Merge pull request #45 from tenplus1/patch-7
Added insta-kill ability for tools/commands
2016-02-14 19:49:09 +00:00
5a112547e6 Added insta-kill ability for tools/commands
Some armor was too powerful that killing yourself to respawn wouldn't work or instant kill tools for admin didn't have effect, so I've added a check so that if the player is dealt with more than -100 damage points it instantly kills them but doesn't damage armor.  Also added /kill command.
2016-02-08 19:05:32 +00:00
0d5cf6d58a Merge pull request #44 from proller/patch-1
Dont rewrite inventory in creative mode
2016-02-08 03:54:28 +08:00
f17a104ab1 Dont rewrite inventory in creative mode
happens on first press I if no unified inventory installed
2016-02-07 18:46:37 +03:00
f83e7e9984 Merge pull request #43 from tenplus1/patch-6
admin helmet lets you breathe underwater
2016-01-28 01:35:46 +08:00
be1d353ec0 Merge pull request #42 from tenplus1/patch-5
Add ability to breath underwater
2016-01-28 01:34:45 +08:00
241aa663f1 admin helmet lets you breathe underwater
added armor_water=1 group to admin helmet so players can breathe underwater.
2016-01-25 14:48:23 +00:00
921e1ace24 Add ability to breath underwater
Added functionality for armor to have armor_water=1 in groups so that player can breathe underwater.
2016-01-25 14:47:05 +00:00
0ec2dbfb36 Update default fire protection nodes, closes #41 2015-12-19 19:25:43 +00:00
7fc991765c Utilize player_on_hpchange callback 2015-12-09 21:03:45 +00:00
991d2955e0 Simplify previous commit 2015-12-04 20:37:24 +00:00
64ec3dcf93 Allow armor textures to be specified by the tool definition 2015-12-04 18:42:42 +00:00
e1caf0ab0c Bump version to 0.4.5 2015-11-15 22:56:53 +00:00
a44d1a2530 Add 'listring' support for inventory mods, closes #38 2015-11-15 21:50:27 +00:00
16bc6232ca Add support for unified inventory 'ui_full' privilege 2015-11-15 19:18:21 +00:00
6efe3bf116 Merge pull request #40 from CraigyDavi/prevent-admin-drops
Prevent admin armor from being dropped
2015-10-30 01:46:19 +08:00
67867e78ec Prevent admin armor from being dropped 2015-10-29 14:19:59 +00:00
249 changed files with 1644 additions and 301 deletions

9
3d_armor/LICENSE.txt Normal file
View File

@ -0,0 +1,9 @@
[mod] 3d Armor [3d_armor]
=========================
License Source Code: (C) 2012-2017 Stuart Jones - LGPL v2.1
License Textures: Copyright (C) 2017 davidthecreator - CC-BY-SA 3.0
https://github.com/daviddoesminetest/3d-armors-new-textures

View File

@ -3,7 +3,7 @@
Depends: default Depends: default
Recommends: inventory_plus or unified_inventory (use only one) Recommends: sfinv, inventory_plus or unified_inventory (use only one to avoid conflicts)
Adds craftable armor that is visible to other players. Each armor item worn contributes to 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. a player's armor group level making them less vulnerable to weapons.
@ -21,4 +21,3 @@ Armor can be configured by adding a file called armor.conf in 3d_armor mod and/o
see armor.conf.example for all available options. see armor.conf.example for all available options.
Note: worldpath config settings override any settings made in the mod's directory. Note: worldpath config settings override any settings made in the mod's directory.

View File

@ -1,13 +1,16 @@
minetest.register_alias("adminboots","3d_armor:boots_admin") minetest.register_alias("adminboots","3d_armor:boots_admin")
minetest.register_alias("adminhelmet","3d_armor:helmet_admin") minetest.register_alias("adminhelmet","3d_armor:helmet_admin")
minetest.register_alias("adminchestplate","3d_armor:chestplate_admin") minetest.register_alias("adminchestplate","3d_armor:chestplate_admin")
minetest.register_alias("adminlegginss","3d_armor:leggings_admin") minetest.register_alias("adminleggings","3d_armor:leggings_admin")
minetest.register_tool("3d_armor:helmet_admin", { minetest.register_tool("3d_armor:helmet_admin", {
description = "Admin Helmet", description = "Admin Helmet",
inventory_image = "3d_armor_inv_helmet_admin.png", inventory_image = "3d_armor_inv_helmet_admin.png",
groups = {armor_head=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1}, groups = {armor_head=1000, armor_heal=1000, armor_use=0, armor_water=1, not_in_creative_inventory=1},
wear = 0, wear = 0,
on_drop = function(itemstack, dropper, pos)
return
end,
}) })
minetest.register_tool("3d_armor:chestplate_admin", { minetest.register_tool("3d_armor:chestplate_admin", {
@ -15,6 +18,9 @@ minetest.register_tool("3d_armor:chestplate_admin", {
inventory_image = "3d_armor_inv_chestplate_admin.png", inventory_image = "3d_armor_inv_chestplate_admin.png",
groups = {armor_torso=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1}, groups = {armor_torso=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
wear = 0, wear = 0,
on_drop = function(itemstack, dropper, pos)
return
end,
}) })
minetest.register_tool("3d_armor:leggings_admin", { minetest.register_tool("3d_armor:leggings_admin", {
@ -22,6 +28,9 @@ minetest.register_tool("3d_armor:leggings_admin", {
inventory_image = "3d_armor_inv_leggings_admin.png", inventory_image = "3d_armor_inv_leggings_admin.png",
groups = {armor_legs=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1}, groups = {armor_legs=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
wear = 0, wear = 0,
on_drop = function(itemstack, dropper, pos)
return
end,
}) })
minetest.register_tool("3d_armor:boots_admin", { minetest.register_tool("3d_armor:boots_admin", {
@ -29,5 +38,8 @@ minetest.register_tool("3d_armor:boots_admin", {
inventory_image = "3d_armor_inv_boots_admin.png", inventory_image = "3d_armor_inv_boots_admin.png",
groups = {armor_feet=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1}, groups = {armor_feet=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1},
wear = 0, wear = 0,
on_drop = function(itemstack, dropper, pos)
return
end,
}) })

View File

@ -21,8 +21,9 @@ ARMOR_FIRE_NODES = {
{"default:lava_source", 5, 4}, {"default:lava_source", 5, 4},
{"default:lava_flowing", 5, 4}, {"default:lava_flowing", 5, 4},
{"fire:basic_flame", 3, 4}, {"fire:basic_flame", 3, 4},
{"fire:permanent_flame", 3, 4},
{"ethereal:crystal_spike", 2, 1}, {"ethereal:crystal_spike", 2, 1},
{"bakedclay:safe_fire", 2, 1}, {"ethereal:fire_flower", 2, 1},
{"default:torch", 1, 1}, {"default:torch", 1, 1},
} }
@ -54,3 +55,7 @@ ARMOR_LEVEL_MULTIPLIER = 1
-- eg: ARMOR_HEAL_MULTIPLIER = 0 will disable healing altogether. -- eg: ARMOR_HEAL_MULTIPLIER = 0 will disable healing altogether.
ARMOR_HEAL_MULTIPLIER = 1 ARMOR_HEAL_MULTIPLIER = 1
-- You can use this to increase or decrease overall armor radiation protection,
-- eg: ARMOR_RADIATION_MULTIPLIER = 0 will completely disable radiation protection.
-- Note: patched technic mod is required
ARMOR_RADIATION_MULTIPLIER = 1

View File

@ -6,6 +6,7 @@ ARMOR_DROP = minetest.get_modpath("bones") ~= nil
ARMOR_DESTROY = false ARMOR_DESTROY = false
ARMOR_LEVEL_MULTIPLIER = 1 ARMOR_LEVEL_MULTIPLIER = 1
ARMOR_HEAL_MULTIPLIER = 1 ARMOR_HEAL_MULTIPLIER = 1
ARMOR_RADIATION_MULTIPLIER = 1
ARMOR_MATERIALS = { ARMOR_MATERIALS = {
wood = "group:wood", wood = "group:wood",
cactus = "default:cactus", cactus = "default:cactus",
@ -18,16 +19,22 @@ ARMOR_MATERIALS = {
} }
ARMOR_FIRE_PROTECT = minetest.get_modpath("ethereal") ~= nil ARMOR_FIRE_PROTECT = minetest.get_modpath("ethereal") ~= nil
ARMOR_FIRE_NODES = { ARMOR_FIRE_NODES = {
{"default:lava_source", 5, 4}, {"default:lava_source", 5, 8},
{"default:lava_flowing", 5, 4}, {"default:lava_flowing", 5, 8},
{"fire:basic_flame", 3, 4}, {"fire:basic_flame", 3, 4},
{"fire:permanent_flame", 3, 4},
{"ethereal:crystal_spike", 2, 1}, {"ethereal:crystal_spike", 2, 1},
{"bakedclay:safe_fire", 2, 1}, {"ethereal:fire_flower", 2, 1},
{"default:torch", 1, 1}, {"default:torch", 1, 1},
{"default:torch_ceiling", 1, 1},
{"default:torch_wall", 1, 1},
} }
local skin_mod = nil local skin_mod = nil
local inv_mod = nil local inv_mod = nil
local use_player_monoids = minetest.global_exists("player_monoids")
local use_armor_monoid = minetest.global_exists("armor_monoid")
local preview_textures = {}
local modpath = minetest.get_modpath(ARMOR_MOD_NAME) local modpath = minetest.get_modpath(ARMOR_MOD_NAME)
local worldpath = minetest.get_worldpath() local worldpath = minetest.get_worldpath()
@ -50,82 +57,97 @@ if not minetest.get_modpath("ethereal") then
ARMOR_MATERIALS.crystal = nil ARMOR_MATERIALS.crystal = nil
end end
-- override hot nodes so they do not hurt player anywhere but mod
if ARMOR_FIRE_PROTECT == true then
for _, row in ipairs(ARMOR_FIRE_NODES) do
if minetest.registered_nodes[row[1]] then
minetest.override_item(row[1], {damage_per_second = 0})
end
end
end
local time = 0
armor = { armor = {
player_hp = {}, timer = 0,
elements = {"head", "torso", "legs", "feet"}, elements = {"head", "torso", "legs", "feet"},
physics = {"jump","speed","gravity"}, physics = {"jump","speed","gravity"},
formspec = "size[8,8.5]image[2,0.75;2,4;armor_preview]" formspec = "size[8,8.5]"..
.."list[current_player;main;0,4.5;8,4;]" default.gui_bg..
.."list[current_player;craft;4,1;3,3;]" default.gui_bg_img..
.."list[current_player;craftpreview;7,2;1,1;]", default.gui_slots..
default.get_hotbar_bg(0,4.25)..
"image[2,0.5;2,4;armor_preview]"..
"list[current_player;main;0,4.25;8,1;]"..
"list[current_player;main;0,5.5;8,3;8]"..
"list[current_player;craft;4,0.5;3,3;]"..
"list[current_player;craftpreview;7,1.5;1,1;]"..
"listring[current_player;main]"..
"listring[current_player;craft]",
textures = {}, textures = {},
default_skin = "character", default_skin = "character",
version = "0.4.4", version = "0.4.8",
} }
local armor_formpage = "image[2.5,0;2,4;armor_preview]"..
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
default.get_hotbar_bg(0,4.25)..
"label[5,1;Level: armor_level]"..
"label[5,1.5;Heal: armor_heal]"..
"label[5,2;Fire: armor_fire]"..
"label[5,2.5;Radiation: armor_radiation]"..
"list[current_player;main;0,4.25;8,1;]"..
"list[current_player;main;0,5.5;8,3;8]"
if minetest.get_modpath("inventory_plus") then if minetest.get_modpath("inventory_plus") then
inv_mod = "inventory_plus" inv_mod = "inventory_plus"
armor.formspec = "size[8,8.5]button[0,0;2,0.5;main;Back]" armor.formspec = "size[8,8.5]button[6,0;2,0.5;main;Back]"..armor_formpage
.."image[2.5,0.75;2,4;armor_preview]"
.."label[5,1;Level: armor_level]"
.."label[5,1.5;Heal: armor_heal]"
.."label[5,2;Fire: armor_fire]"
.."list[current_player;main;0,4.5;8,4;]"
if minetest.get_modpath("crafting") then if minetest.get_modpath("crafting") then
inventory_plus.get_formspec = function(player, page) inventory_plus.get_formspec = function(player, page)
end end
end end
elseif minetest.get_modpath("unified_inventory") then elseif minetest.get_modpath("unified_inventory") and not unified_inventory.sfinv_compat_layer then
inv_mod = "unified_inventory" inv_mod = "unified_inventory"
unified_inventory.register_button("armor", { unified_inventory.register_button("armor", {
type = "image", type = "image",
image = "inventory_plus_armor.png", image = "inventory_plus_armor.png",
}) })
unified_inventory.register_page("armor", { unified_inventory.register_page("armor", {
get_formspec = function(player) get_formspec = function(player, perplayer_formspec)
local fy = perplayer_formspec.formspec_y
local name = player:get_player_name() local name = player:get_player_name()
local formspec = "background[0.06,0.99;7.92,7.52;3d_armor_ui_form.png]" local formspec = "background[0.06,"..fy..";7.92,7.52;3d_armor_ui_form.png]"..
.."label[0,0;Armor]" "label[0,0;Armor]"..
.."list[detached:"..name.."_armor;armor;0,1;2,3;]" "list[detached:"..name.."_armor;armor;0,"..fy..";2,3;]"..
.."image[2.5,0.75;2,4;"..armor.textures[name].preview.."]" "image[2.5,"..(fy - 0.25)..";2,4;"..armor.textures[name].preview.."]"..
.."label[5,1;Level: "..armor.def[name].level.."]" "label[5.0,"..(fy + 0.0)..";Level: "..armor.def[name].level.."]"..
.."label[5,1.5;Heal: "..armor.def[name].heal.."]" "label[5.0,"..(fy + 0.5)..";Heal: "..armor.def[name].heal.."]"..
.."label[5,2;Fire: "..armor.def[name].fire.."]" "label[5.0,"..(fy + 1.0)..";Fire: "..armor.def[name].fire.."]"..
if minetest.setting_getbool("unified_inventory_lite") then "label[5.0,"..(fy + 1.5)..";Radiation: "..armor.def[name].radiation.."]"..
formspec = "background[0.06,0.49;7.92,7.52;3d_armor_ui_form.png]" "listring[current_player;main]"..
.."label[0,0;Armor]" "listring[detached:"..name.."_armor;armor]"
.."list[detached:"..name.."_armor;armor;0,0.5;2,3;]"
.."image[2.5,0.25;2,4;"..armor.textures[name].preview.."]"
.."label[5,0.5;Level: "..armor.def[name].level.."]"
.."label[5,1;Heal: "..armor.def[name].heal.."]"
.."label[5,1.5;Fire: "..armor.def[name].fire.."]"
end
return {formspec=formspec} return {formspec=formspec}
end, end,
}) })
elseif minetest.get_modpath("inventory_enhanced") then elseif minetest.get_modpath("inventory_enhanced") then
inv_mod = "inventory_enhanced" inv_mod = "inventory_enhanced"
elseif minetest.get_modpath("smart_inventory") then
inv_mod = "smart_inventory"
elseif minetest.get_modpath("sfinv") then
inv_mod = "sfinv"
armor.formspec = armor_formpage
sfinv.register_page("3d_armor:armor", {
title = "Armor",
get = function(self, player, context)
local name = player:get_player_name()
local formspec = armor:get_armor_formspec(name, true)
return sfinv.make_formspec(player, context, formspec, false)
end
})
end end
if minetest.get_modpath("skins") then local skin_mods = {"skins", "u_skins", "simple_skins", "wardrobe"}
skin_mod = "skins" for _, mod in pairs(skin_mods) do
elseif minetest.get_modpath("simple_skins") then local path = minetest.get_modpath(mod)
skin_mod = "simple_skins" if path then
elseif minetest.get_modpath("u_skins") then local dir_list = minetest.get_dir_list(path.."/textures")
skin_mod = "u_skins" for _, fn in pairs(dir_list) do
elseif minetest.get_modpath("wardrobe") then if fn:find("_preview.png$") then
skin_mod = "wardrobe" preview_textures[fn] = true
end
end
skin_mod = mod
end
end end
armor.def = { armor.def = {
@ -156,13 +178,15 @@ armor.set_player_armor = function(self, player)
local armor_level = 0 local armor_level = 0
local armor_heal = 0 local armor_heal = 0
local armor_fire = 0 local armor_fire = 0
local armor_water = 0
local armor_radiation = 0
local state = 0 local state = 0
local items = 0 local items = 0
local elements = {} local elements = {}
local textures = {} local textures = {}
local physics_o = {speed=1,gravity=1,jump=1} local physics_o = {speed=1,gravity=1,jump=1}
local material = {type=nil, count=1} local material = {type=nil, count=1}
local preview = armor:get_preview(name) or "character_preview.png" local preview = armor:get_preview(name)
for _,v in ipairs(self.elements) do for _,v in ipairs(self.elements) do
elements[v] = false elements[v] = false
end end
@ -175,16 +199,16 @@ armor.set_player_armor = function(self, player)
if v == false then if v == false then
local level = def.groups["armor_"..k] local level = def.groups["armor_"..k]
if level then if level then
local texture = item:gsub("%:", "_") local texture = def.texture or item:gsub("%:", "_")
table.insert(textures, texture..".png") table.insert(textures, texture..".png")
preview = preview.."^"..texture.."_preview.png" preview = preview.."^"..texture.."_preview.png"
armor_level = armor_level + level armor_level = armor_level + level
state = state + stack:get_wear() state = state + stack:get_wear()
items = items + 1 items = items + 1
local heal = def.groups["armor_heal"] or 0 armor_heal = armor_heal + (def.groups["armor_heal"] or 0)
armor_heal = armor_heal + heal armor_fire = armor_fire + (def.groups["armor_fire"] or 0)
local fire = def.groups["armor_fire"] or 0 armor_water = armor_water + (def.groups["armor_water"] or 0)
armor_fire = armor_fire + fire armor_radiation = armor_radiation + (def.groups["armor_radiation"] or 0)
for kk,vv in ipairs(self.physics) do for kk,vv in ipairs(self.physics) do
local o_value = def.groups["physics_"..vv] local o_value = def.groups["physics_"..vv]
if o_value then if o_value then
@ -213,6 +237,7 @@ armor.set_player_armor = function(self, player)
end end
armor_level = armor_level * ARMOR_LEVEL_MULTIPLIER armor_level = armor_level * ARMOR_LEVEL_MULTIPLIER
armor_heal = armor_heal * ARMOR_HEAL_MULTIPLIER armor_heal = armor_heal * ARMOR_HEAL_MULTIPLIER
armor_radiation = armor_radiation * ARMOR_RADIATION_MULTIPLIER
if #textures > 0 then if #textures > 0 then
armor_texture = table.concat(textures, "^") armor_texture = table.concat(textures, "^")
end end
@ -220,9 +245,25 @@ armor.set_player_armor = function(self, player)
if armor_level > 0 then if armor_level > 0 then
armor_groups.level = math.floor(armor_level / 20) armor_groups.level = math.floor(armor_level / 20)
armor_groups.fleshy = 100 - armor_level armor_groups.fleshy = 100 - armor_level
armor_groups.radiation = 100 - armor_radiation
end end
if use_armor_monoid then
armor_monoid.monoid:add_change(player, {
fleshy = armor_groups.fleshy / 100
}, "3d_armor:armor")
else
player:set_armor_groups(armor_groups) player:set_armor_groups(armor_groups)
end
if use_player_monoids then
player_monoids.speed:add_change(player, physics_o.speed,
"3d_armor:physics")
player_monoids.jump:add_change(player, physics_o.jump,
"3d_armor:physics")
player_monoids.gravity:add_change(player, physics_o.gravity,
"3d_armor:physics")
else
player:set_physics_override(physics_o) player:set_physics_override(physics_o)
end
self.textures[name].armor = armor_texture self.textures[name].armor = armor_texture
self.textures[name].preview = preview self.textures[name].preview = preview
self.def[name].state = state self.def[name].state = state
@ -233,70 +274,14 @@ armor.set_player_armor = function(self, player)
self.def[name].speed = physics_o.speed self.def[name].speed = physics_o.speed
self.def[name].gravity = physics_o.gravity self.def[name].gravity = physics_o.gravity
self.def[name].fire = armor_fire self.def[name].fire = armor_fire
self.def[name].water = armor_water
self.def[name].radiation = armor_radiation
self:update_player_visuals(player) self:update_player_visuals(player)
end end
armor.update_armor = function(self, player) armor.update_armor = function(self, player)
local name, player_inv, armor_inv, pos = armor:get_valid_player(player, "[update_armor]") -- Legacy support: Called when armor levels are changed
if not name then -- Other mods can hook on to this function, see hud mod for example
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
hp = hp - row[3] * ARMOR_UPDATE_TIME
player:set_hp(hp)
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, 6 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
self.def[name].state = state
self.def[name].count = items
heal_max = heal_max * ARMOR_HEAL_MULTIPLIER
if heal_max > math.random(100) then
player:set_hp(self.player_hp[name])
return
end
end
self.player_hp[name] = hp
end end
armor.get_player_skin = function(self, name) armor.get_player_skin = function(self, name)
@ -312,12 +297,14 @@ armor.get_player_skin = function(self, name)
end end
armor.get_preview = function(self, name) armor.get_preview = function(self, name)
if skin_mod == "skins" then local preview = armor:get_player_skin(name).."_preview.png"
return armor:get_player_skin(name).."_preview.png" if preview_textures[preview] then
return preview
end end
return "character_preview.png"
end end
armor.get_armor_formspec = function(self, name) armor.get_armor_formspec = function(self, name, listring)
if not armor.textures[name] then if not armor.textures[name] then
minetest.log("error", "3d_armor: Player texture["..name.."] is nil [get_armor_formspec]") minetest.log("error", "3d_armor: Player texture["..name.."] is nil [get_armor_formspec]")
return "" return ""
@ -326,11 +313,17 @@ armor.get_armor_formspec = function(self, name)
minetest.log("error", "3d_armor: Armor def["..name.."] is nil [get_armor_formspec]") minetest.log("error", "3d_armor: Armor def["..name.."] is nil [get_armor_formspec]")
return "" return ""
end end
local formspec = armor.formspec.."list[detached:"..name.."_armor;armor;0,1;2,3;]" local formspec = armor.formspec.."list[detached:"..name.."_armor;armor;0,0.5;2,3;]"
if listring == true then
formspec = formspec.."listring[current_player;main]"..
"listring[detached:"..name.."_armor;armor]"
end
formspec = formspec:gsub("armor_preview", armor.textures[name].preview) formspec = formspec:gsub("armor_preview", armor.textures[name].preview)
formspec = formspec:gsub("armor_level", armor.def[name].level) formspec = formspec:gsub("armor_level", armor.def[name].level)
formspec = formspec:gsub("armor_heal", armor.def[name].heal) formspec = formspec:gsub("armor_heal", armor.def[name].heal)
formspec = formspec:gsub("armor_fire", armor.def[name].fire) formspec = formspec:gsub("armor_fire", armor.def[name].fire)
formspec = formspec:gsub("armor_radiation", armor.def[name].radiation)
formspec = formspec:gsub("player_name", armor.def[name].radiation)
return formspec return formspec
end end
@ -339,18 +332,33 @@ armor.update_inventory = function(self, player)
if not name or inv_mod == "inventory_enhanced" then if not name or inv_mod == "inventory_enhanced" then
return return
end end
if inv_mod == "unified_inventory" then if inv_mod == "smart_inventory" then
local state = smart_inventory.get_page_state("player", name)
if state then
state:get("update_hook"):submit()
end
elseif inv_mod == "sfinv" then
if sfinv.set_page then
sfinv.set_page(player, "3d_armor:armor")
else
-- Backwards compat
sfinv.set_player_inventory_formspec(player, {
page = "3d_armor:armor"
})
end
elseif inv_mod == "unified_inventory" then
if unified_inventory.current_page[name] == "armor" then if unified_inventory.current_page[name] == "armor" then
unified_inventory.set_inventory_formspec(player, "armor") unified_inventory.set_inventory_formspec(player, "armor")
end end
else else
local formspec = armor:get_armor_formspec(name)
if inv_mod == "inventory_plus" then if inv_mod == "inventory_plus" then
local formspec = armor:get_armor_formspec(name, true)
local page = player:get_inventory_formspec() local page = player:get_inventory_formspec()
if page:find("detached:"..name.."_armor") then if page:find("detached:"..name.."_armor") then
inventory_plus.set_inventory_formspec(player, formspec) inventory_plus.set_inventory_formspec(player, formspec)
end end
else elseif not core.setting_getbool("creative_mode") then
local formspec = armor:get_armor_formspec(name)
player:set_inventory_formspec(formspec) player:set_inventory_formspec(formspec)
end end
end end
@ -383,6 +391,13 @@ armor.get_valid_player = function(self, player, msg)
return name, player_inv, armor_inv, pos return name, player_inv, armor_inv, pos
end end
armor.drop_armor = function(pos, stack)
local obj = minetest.add_item(pos, stack)
if obj then
obj:setvelocity({x=math.random(-1, 1), y=5, z=math.random(-1, 1)})
end
end
-- Register Player Model -- Register Player Model
default.player_register_model("3d_armor_character.b3d", { default.player_register_model("3d_armor_character.b3d", {
@ -410,7 +425,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
return return
end end
if inv_mod == "inventory_plus" and fields.armor then if inv_mod == "inventory_plus" and fields.armor then
local formspec = armor:get_armor_formspec(name) local formspec = armor:get_armor_formspec(name, true)
inventory_plus.set_inventory_formspec(player, formspec) inventory_plus.set_inventory_formspec(player, formspec)
return return
end end
@ -457,7 +472,7 @@ minetest.register_on_joinplayer(function(player)
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
return count return count
end, end,
}) }, name)
if inv_mod == "inventory_plus" then if inv_mod == "inventory_plus" then
inventory_plus.register_button(player,"armor", "Armor") inventory_plus.register_button(player,"armor", "Armor")
end end
@ -467,16 +482,6 @@ minetest.register_on_joinplayer(function(player)
local stack = player_inv:get_stack("armor", i) local stack = player_inv:get_stack("armor", i)
armor_inv:set_stack("armor", i, stack) armor_inv:set_stack("armor", i, stack)
end 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] = { armor.def[name] = {
state = 0, state = 0,
count = 0, count = 0,
@ -486,6 +491,8 @@ minetest.register_on_joinplayer(function(player)
speed = 1, speed = 1,
gravity = 1, gravity = 1,
fire = 0, fire = 0,
water = 0,
radiation = 0,
} }
armor.textures[name] = { armor.textures[name] = {
skin = armor.default_skin..".png", skin = armor.default_skin..".png",
@ -514,12 +521,14 @@ minetest.register_on_joinplayer(function(player)
armor.textures[name].skin = skin armor.textures[name].skin = skin
end end
end end
if minetest.get_modpath("player_textures") then local texture_path = minetest.get_modpath("player_textures")
local filename = minetest.get_modpath("player_textures").."/textures/player_"..name if texture_path then
local f = io.open(filename..".png") local dir_list = minetest.get_dir_list(texture_path.."/textures")
if f then for _, fn in pairs(dir_list) do
f:close() if fn == "player_"..name..".png" then
armor.textures[name].skin = "player_"..name..".png" armor.textures[name].skin = fn
break
end
end end
end end
for i=1, ARMOR_INIT_TIMES do for i=1, ARMOR_INIT_TIMES do
@ -533,12 +542,6 @@ minetest.register_on_joinplayer(function(player)
end) end)
if ARMOR_DROP == true or ARMOR_DESTROY == true then 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
obj:setvelocity({x=math.random(-1, 1), y=5, z=math.random(-1, 1)})
end
end
minetest.register_on_dieplayer(function(player) minetest.register_on_dieplayer(function(player)
local name, player_inv, armor_inv, pos = armor:get_valid_player(player, "[on_dieplayer]") local name, player_inv, armor_inv, pos = armor:get_valid_player(player, "[on_dieplayer]")
if not name then if not name then
@ -564,20 +567,26 @@ if ARMOR_DROP == true or ARMOR_DESTROY == true then
end end
if ARMOR_DESTROY == false then if ARMOR_DESTROY == false then
minetest.after(ARMOR_BONES_DELAY, function() minetest.after(ARMOR_BONES_DELAY, function()
local node = minetest.get_node(vector.round(pos)) local meta = nil
if node then local maxp = vector.add(pos, 8)
if node.name == "bones:bones" then local minp = vector.subtract(pos, 8)
local meta = minetest.get_meta(vector.round(pos)) local bones = minetest.find_nodes_in_area(minp, maxp, {"bones:bones"})
local owner = meta:get_string("owner") for _, p in pairs(bones) do
local m = minetest.get_meta(p)
if m:get_string("owner") == name then
meta = m
break
end
end
if meta then
local inv = meta:get_inventory() local inv = meta:get_inventory()
for _,stack in ipairs(drop) do for _,stack in ipairs(drop) do
if name == owner and inv:room_for_item("main", stack) then if inv:room_for_item("main", stack) then
inv:add_item("main", stack) inv:add_item("main", stack)
else else
armor.drop_armor(pos, stack) armor.drop_armor(pos, stack)
end end
end end
end
else else
for _,stack in ipairs(drop) do for _,stack in ipairs(drop) do
armor.drop_armor(pos, stack) armor.drop_armor(pos, stack)
@ -588,13 +597,121 @@ if ARMOR_DROP == true or ARMOR_DESTROY == true then
end) end)
end end
minetest.register_globalstep(function(dtime) minetest.register_on_player_hpchange(function(player, hp_change)
time = time + dtime local name, player_inv, armor_inv = armor:get_valid_player(player, "[on_hpchange]")
if time > ARMOR_UPDATE_TIME then if name and hp_change < 0 then
for _,player in ipairs(minetest.get_connected_players()) do
-- used for insta kill tools/commands like /kill (doesnt damage armor)
if hp_change < -100 then
return hp_change
end
local heal_max = 0
local state = 0
local items = 0
for i=1, 6 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
armor:set_player_armor(player)
armor:update_inventory(player)
end
heal_max = heal_max + heal
end
end
armor.def[name].state = state
armor.def[name].count = items
heal_max = heal_max * ARMOR_HEAL_MULTIPLIER
if heal_max > math.random(100) then
hp_change = 0
end
armor:update_armor(player) armor:update_armor(player)
end end
time = 0 return hp_change
end, true)
-- Fire Protection and water breating, added by TenPlus1
if ARMOR_FIRE_PROTECT == true then
-- override hot nodes so they do not hurt player anywhere but mod
for _, row in pairs(ARMOR_FIRE_NODES) do
if minetest.registered_nodes[row[1]] then
minetest.override_item(row[1], {damage_per_second = 0})
end end
end
else
print ("[3d_armor] Fire Nodes disabled")
end
minetest.register_globalstep(function(dtime)
armor.timer = armor.timer + dtime
if armor.timer < ARMOR_UPDATE_TIME then
return
end
for _,player in pairs(minetest.get_connected_players()) do
local name = player:get_player_name()
local pos = player:getpos()
local hp = player:get_hp()
-- water breathing
if name and armor.def[name].water > 0 then
if player:get_breath() < 10 then
player:set_breath(10)
end
end
-- fire protection
if ARMOR_FIRE_PROTECT == true
and name and pos and hp 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 pairs(ARMOR_FIRE_NODES) do
-- check 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
hp = hp - row[3] * ARMOR_UPDATE_TIME
player:set_hp(hp)
break
end
end
end
end
end
armor.timer = 0
end) end)
-- kill player when command issued
minetest.register_chatcommand("kill", {
params = "<name>",
description = "Kills player instantly",
privs = {ban=true},
func = function(name, param)
local player = minetest.get_player_by_name(param)
if player then
player:set_hp(0)
end
end,
})
minetest.register_chatcommand("killme", {
description = "Kill yourself instantly",
func = function(name)
local player = minetest.get_player_by_name(name)
if player then
player:set_hp(-1001)
end
end,
})

View File

@ -1,6 +1,9 @@
default default
player_monoids?
armor_monoid?
inventory_plus? inventory_plus?
unified_inventory? unified_inventory?
sfinv?
fire? fire?
ethereal? ethereal?
bakedclay? bakedclay?

1
3d_armor/description.txt Normal file
View File

@ -0,0 +1 @@
Adds craftable armor that is visible to other players.

View File

@ -51,7 +51,7 @@ if ARMOR_MATERIALS.cactus then
minetest.register_tool("3d_armor:boots_cactus", { minetest.register_tool("3d_armor:boots_cactus", {
description = "Cactus Boots", description = "Cactus Boots",
inventory_image = "3d_armor_inv_boots_cactus.png", inventory_image = "3d_armor_inv_boots_cactus.png",
groups = {armor_feet=5, armor_heal=0, armor_use=2000}, groups = {armor_feet=5, armor_heal=0, armor_use=1000},
wear = 0, wear = 0,
}) })
end end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 321 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 308 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 494 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 316 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 782 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 556 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 712 B

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 475 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 430 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 276 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 669 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 284 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 537 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 725 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 883 B

After

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 602 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 891 B

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 545 B

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 883 B

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 524 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 902 B

After

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 489 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 893 B

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 798 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 853 B

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 556 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 887 B

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 485 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 878 B

After

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 B

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 B

After

Width:  |  Height:  |  Size: 3.0 KiB

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