Compare commits
15 Commits
version-0.
...
multiskin
Author | SHA1 | Date | |
---|---|---|---|
9f49060ae6 | |||
8e8c79aca2 | |||
601fee1079 | |||
c36b1e5fc4 | |||
b1f9e9f1fd | |||
f150e4c988 | |||
503f44ac70 | |||
eb7a52daff | |||
753be543f1 | |||
35db060560 | |||
fd77253816 | |||
f6502ba32b | |||
aa9984b789 | |||
afce9f1140 | |||
ea29ec6f6f |
3
.gitignore
vendored
@ -6,3 +6,6 @@ tags
|
||||
*.vim
|
||||
armor.conf
|
||||
|
||||
## Eclipse project files & directories
|
||||
.project
|
||||
.settings
|
||||
|
@ -68,6 +68,9 @@ armor_fire_protect = false
|
||||
-- Enable punch damage effects.
|
||||
armor_punch_damage = true
|
||||
|
||||
-- Enable migration of old armor inventories
|
||||
armor_migrate_old_inventory = true
|
||||
|
||||
API
|
||||
---
|
||||
|
||||
|
152
3d_armor/api.lua
@ -1,4 +1,4 @@
|
||||
local skin_previews = {}
|
||||
local use_multiskin = minetest.global_exists("multiskin")
|
||||
local use_player_monoids = minetest.global_exists("player_monoids")
|
||||
local use_armor_monoid = minetest.global_exists("armor_monoid")
|
||||
local armor_def = setmetatable({}, {
|
||||
@ -39,7 +39,7 @@ armor = {
|
||||
"list[current_player;main;0,5.85;8,3;8]",
|
||||
def = armor_def,
|
||||
textures = armor_textures,
|
||||
default_skin = "character",
|
||||
default_skin = "character.png",
|
||||
materials = {
|
||||
wood = "group:wood",
|
||||
cactus = "default:cactus",
|
||||
@ -69,6 +69,7 @@ armor = {
|
||||
on_damage = {},
|
||||
on_destroy = {},
|
||||
},
|
||||
migrate_old_inventory = true,
|
||||
version = "0.4.9",
|
||||
}
|
||||
|
||||
@ -156,35 +157,45 @@ armor.run_callbacks = function(self, callback, player, index, stack)
|
||||
end
|
||||
|
||||
armor.update_player_visuals = function(self, player)
|
||||
if not player then
|
||||
local name = self:get_valid_player(player, "[update_player_visuals]")
|
||||
if not name 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,
|
||||
})
|
||||
local textures = {
|
||||
"blank.png",
|
||||
"blank.png",
|
||||
self.textures[name].armor,
|
||||
self.textures[name].wielditem,
|
||||
}
|
||||
if use_multiskin then
|
||||
multiskin.textures[name] = textures
|
||||
multiskin.update_player_visuals(player)
|
||||
else
|
||||
textures[1] = armor.default_skin
|
||||
default.player_set_textures(player, textures)
|
||||
end
|
||||
self:run_callbacks("on_update", player)
|
||||
end
|
||||
|
||||
armor.set_player_armor = function(self, player)
|
||||
local name, player_inv = self:get_valid_player(player, "[set_player_armor]")
|
||||
local name, armor_inv = self:get_valid_player(player, "[set_player_armor]")
|
||||
if not name then
|
||||
return
|
||||
end
|
||||
local state = 0
|
||||
local count = 0
|
||||
local material = {count=1}
|
||||
local preview = armor:get_preview(name)
|
||||
local texture = "3d_armor_trans.png"
|
||||
local preview = "3d_armor_preview.png"
|
||||
local texture = "blank.png"
|
||||
local textures = {}
|
||||
local physics = {}
|
||||
local attributes = {}
|
||||
local levels = {}
|
||||
local groups = {}
|
||||
local change = {}
|
||||
if use_multiskin then
|
||||
preview = multiskin.get_preview(player) or preview
|
||||
end
|
||||
for _, phys in pairs(self.physics) do
|
||||
physics[phys] = 1
|
||||
end
|
||||
@ -195,7 +206,10 @@ armor.set_player_armor = function(self, player)
|
||||
change[group] = 1
|
||||
levels[group] = 0
|
||||
end
|
||||
local list = player_inv:get_list("armor")
|
||||
local list = armor_inv:get_list("armor")
|
||||
if type(list) ~= "table" then
|
||||
return
|
||||
end
|
||||
for i, stack in pairs(list) do
|
||||
if stack:get_count() == 1 then
|
||||
local def = stack:get_definition()
|
||||
@ -211,6 +225,7 @@ armor.set_player_armor = function(self, player)
|
||||
local level = def.groups["armor_"..element]
|
||||
levels["fleshy"] = levels["fleshy"] + level
|
||||
end
|
||||
break
|
||||
end
|
||||
-- DEPRECATED, use armor_groups instead
|
||||
if def.groups["armor_radiation"] and levels["radiation"] then
|
||||
@ -286,11 +301,10 @@ armor.set_player_armor = function(self, player)
|
||||
self.def[name].state = state
|
||||
self.def[name].count = count
|
||||
self:update_player_visuals(player)
|
||||
self:run_callbacks("on_update", player)
|
||||
end
|
||||
|
||||
armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabilities)
|
||||
local name, player_inv = self:get_valid_player(player, "[punch]")
|
||||
local name, armor_inv = self:get_valid_player(player, "[punch]")
|
||||
if not name then
|
||||
return
|
||||
end
|
||||
@ -298,7 +312,7 @@ armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabili
|
||||
local count = 0
|
||||
local recip = true
|
||||
local default_groups = {cracky=3, snappy=3, choppy=3, crumbly=3, level=1}
|
||||
local list = player_inv:get_list("armor")
|
||||
local list = armor_inv:get_list("armor")
|
||||
for i, stack in pairs(list) do
|
||||
if stack:get_count() == 1 then
|
||||
local name = stack:get_name()
|
||||
@ -375,33 +389,6 @@ armor.damage = function(self, player, index, stack, use)
|
||||
end
|
||||
end
|
||||
|
||||
armor.get_player_skin = function(self, name)
|
||||
local skin = nil
|
||||
if self.skin_mod == "skins" or self.skin_mod == "simple_skins" then
|
||||
skin = skins.skins[name]
|
||||
elseif self.skin_mod == "u_skins" then
|
||||
skin = u_skins.u_skins[name]
|
||||
elseif self.skin_mod == "wardrobe" then
|
||||
local skins = wardrobe.playerSkins or {}
|
||||
if skins[name] then
|
||||
skin = string.gsub(skins[name], "%.png$","")
|
||||
end
|
||||
end
|
||||
return skin or armor.default_skin
|
||||
end
|
||||
|
||||
armor.add_preview = function(self, preview)
|
||||
skin_previews[preview] = true
|
||||
end
|
||||
|
||||
armor.get_preview = function(self, name)
|
||||
local preview = armor:get_player_skin(name).."_preview.png"
|
||||
if skin_previews[preview] then
|
||||
return preview
|
||||
end
|
||||
return "character_preview.png"
|
||||
end
|
||||
|
||||
armor.get_armor_formspec = function(self, name, listring)
|
||||
if armor.def[name].init_time == 0 then
|
||||
return "label[0,0;Armor not initialized!]"
|
||||
@ -417,12 +404,64 @@ armor.get_armor_formspec = function(self, name, listring)
|
||||
for _, attr in pairs(self.attributes) do
|
||||
formspec = formspec:gsub("armor_attr_"..attr, armor.def[name][attr])
|
||||
end
|
||||
for _, group in pairs(self.attributes) do
|
||||
formspec = formspec:gsub("armor_group_"..group, armor.def[name][group])
|
||||
for group, _ in pairs(self.registered_groups) do
|
||||
formspec = formspec:gsub("armor_group_"..group,
|
||||
armor.def[name].groups[group])
|
||||
end
|
||||
return formspec
|
||||
end
|
||||
|
||||
armor.serialize_inventory_list = function(self, list)
|
||||
local list_table = {}
|
||||
for _, stack in ipairs(list) do
|
||||
table.insert(list_table, stack:to_string())
|
||||
end
|
||||
return minetest.serialize(list_table)
|
||||
end
|
||||
|
||||
armor.deserialize_inventory_list = function(self, list_string)
|
||||
local list_table = minetest.deserialize(list_string)
|
||||
local list = {}
|
||||
for _, stack in ipairs(list_table or {}) do
|
||||
table.insert(list, ItemStack(stack))
|
||||
end
|
||||
return list
|
||||
end
|
||||
|
||||
armor.load_armor_inventory = function(self, player)
|
||||
local msg = "[load_armor_inventory]"
|
||||
local name = player:get_player_name()
|
||||
if not name then
|
||||
minetest.log("warning", S("3d_armor: Player name is nil @1", msg))
|
||||
return
|
||||
end
|
||||
local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"})
|
||||
if not armor_inv then
|
||||
minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg))
|
||||
return
|
||||
end
|
||||
local armor_list_string = player:get_attribute("3d_armor_inventory")
|
||||
if armor_list_string then
|
||||
armor_inv:set_list("armor", self:deserialize_inventory_list(armor_list_string))
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
armor.save_armor_inventory = function(self, player)
|
||||
local msg = "[save_armor_inventory]"
|
||||
local name = player:get_player_name()
|
||||
if not name then
|
||||
minetest.log("warning", S("3d_armor: Player name is nil @1", msg))
|
||||
return
|
||||
end
|
||||
local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"})
|
||||
if not armor_inv then
|
||||
minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg))
|
||||
return
|
||||
end
|
||||
player:set_attribute("3d_armor_inventory", self:serialize_inventory_list(armor_inv:get_list("armor")))
|
||||
end
|
||||
|
||||
armor.update_inventory = function(self, player)
|
||||
-- DEPRECATED: Legacy inventory support
|
||||
end
|
||||
@ -434,17 +473,13 @@ armor.set_inventory_stack = function(self, player, i, stack)
|
||||
minetest.log("warning", "3d_armor: Player name is nil "..msg)
|
||||
return
|
||||
end
|
||||
local player_inv = player:get_inventory()
|
||||
local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"})
|
||||
if not player_inv then
|
||||
minetest.log("warning", "3d_armor: Player inventory is nil "..msg)
|
||||
return
|
||||
elseif not armor_inv then
|
||||
minetest.log("warning", "3d_armor: Detached armor inventory is nil "..msg)
|
||||
if not armor_inv then
|
||||
minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg))
|
||||
return
|
||||
end
|
||||
player_inv:set_stack("armor", i, stack)
|
||||
armor_inv:set_stack("armor", i, stack)
|
||||
self:save_armor_inventory(player)
|
||||
end
|
||||
|
||||
armor.get_valid_player = function(self, player, msg)
|
||||
@ -458,7 +493,7 @@ armor.get_valid_player = function(self, player, msg)
|
||||
minetest.log("warning", "3d_armor: Player name is nil "..msg)
|
||||
return
|
||||
end
|
||||
local inv = player:get_inventory()
|
||||
local inv = minetest.get_inventory({type="detached", name=name.."_armor"})
|
||||
if not inv then
|
||||
minetest.log("warning", "3d_armor: Player inventory is nil "..msg)
|
||||
return
|
||||
@ -467,8 +502,11 @@ armor.get_valid_player = function(self, player, msg)
|
||||
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)})
|
||||
local node = minetest.get_node_or_nil(pos)
|
||||
if node then
|
||||
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
|
||||
end
|
||||
|
@ -1,6 +1,12 @@
|
||||
local S = function(s) return s end
|
||||
if minetest.global_exists("intllib") then
|
||||
S = intllib.Getter()
|
||||
if intllib.make_gettext_pair then
|
||||
-- New method using gettext.
|
||||
S = intllib.make_gettext_pair()
|
||||
else
|
||||
-- Old method using text files.
|
||||
S = intllib.Getter()
|
||||
end
|
||||
end
|
||||
|
||||
armor:register_armor("3d_armor:helmet_admin", {
|
||||
|
@ -5,3 +5,4 @@ fire?
|
||||
ethereal?
|
||||
bakedclay?
|
||||
intllib?
|
||||
multiskin?
|
||||
|
@ -1,6 +1,12 @@
|
||||
local S = function(s) return s end
|
||||
if minetest.global_exists("intllib") then
|
||||
S = intllib.Getter()
|
||||
if intllib.make_gettext_pair then
|
||||
-- New method using gettext.
|
||||
S = intllib.make_gettext_pair()
|
||||
else
|
||||
-- Old method using text files.
|
||||
S = intllib.Getter()
|
||||
end
|
||||
end
|
||||
local modname = minetest.get_current_modname()
|
||||
local modpath = minetest.get_modpath(modname)
|
||||
@ -41,11 +47,11 @@ end
|
||||
-- Load Configuration
|
||||
|
||||
for name, config in pairs(armor.config) do
|
||||
local setting = minetest.setting_get("armor_"..name)
|
||||
local setting = minetest.settings:get("armor_"..name)
|
||||
if type(config) == "number" then
|
||||
setting = tonumber(setting)
|
||||
elseif type(config) == "boolean" then
|
||||
setting = minetest.setting_getbool("armor_"..name)
|
||||
setting = minetest.settings:get_bool("armor_"..name)
|
||||
end
|
||||
if setting ~= nil then
|
||||
armor.config[name] = setting
|
||||
@ -58,28 +64,15 @@ for material, _ in pairs(armor.materials) do
|
||||
end
|
||||
end
|
||||
|
||||
dofile(modpath.."/armor.lua")
|
||||
|
||||
-- Mod Compatibility
|
||||
|
||||
if minetest.get_modpath("multiskin") then
|
||||
multiskin.model = "3d_armor_character.b3d"
|
||||
end
|
||||
if minetest.get_modpath("technic") then
|
||||
armor.formspec = armor.formspec..
|
||||
"label[5,2.5;"..S("Radiation")..": armor_group_radiation]"
|
||||
armor:register_armor_group("radiation")
|
||||
end
|
||||
local skin_mods = {"skins", "u_skins", "simple_skins", "wardrobe"}
|
||||
for _, mod in pairs(skin_mods) do
|
||||
local path = minetest.get_modpath(mod)
|
||||
if path then
|
||||
local dir_list = minetest.get_dir_list(path.."/textures")
|
||||
for _, fn in pairs(dir_list) do
|
||||
if fn:find("_preview.png$") then
|
||||
armor:add_preview(fn)
|
||||
end
|
||||
end
|
||||
armor.skin_mod = mod
|
||||
end
|
||||
end
|
||||
if not minetest.get_modpath("moreores") then
|
||||
armor.materials.mithril = nil
|
||||
end
|
||||
@ -87,6 +80,8 @@ if not minetest.get_modpath("ethereal") then
|
||||
armor.materials.crystal = nil
|
||||
end
|
||||
|
||||
dofile(modpath.."/armor.lua")
|
||||
|
||||
-- Armor Initialization
|
||||
|
||||
armor.formspec = armor.formspec..
|
||||
@ -106,27 +101,23 @@ end)
|
||||
|
||||
local function init_player_armor(player)
|
||||
local name = player:get_player_name()
|
||||
local player_inv = player:get_inventory()
|
||||
local pos = player:getpos()
|
||||
if not name or not player_inv or not pos then
|
||||
if not name or not pos then
|
||||
return false
|
||||
end
|
||||
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:save_armor_inventory(player)
|
||||
armor:run_callbacks("on_equip", player, index, stack)
|
||||
armor:set_player_armor(player)
|
||||
end,
|
||||
on_take = function(inv, listname, index, stack, player)
|
||||
player:get_inventory():set_stack(listname, index, nil)
|
||||
armor:save_armor_inventory(player)
|
||||
armor:run_callbacks("on_unequip", player, index, stack)
|
||||
armor:set_player_armor(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:save_armor_inventory(player)
|
||||
armor:set_player_armor(player)
|
||||
end,
|
||||
allow_put = function(inv, listname, index, stack, player)
|
||||
@ -153,10 +144,18 @@ local function init_player_armor(player)
|
||||
end,
|
||||
}, name)
|
||||
armor_inv:set_size("armor", 6)
|
||||
player_inv:set_size("armor", 6)
|
||||
if not armor:load_armor_inventory(player) and armor.migrate_old_inventory then
|
||||
local player_inv = player:get_inventory()
|
||||
player_inv:set_size("armor", 6)
|
||||
for i=1, 6 do
|
||||
local stack = player_inv:get_stack("armor", i)
|
||||
armor_inv:set_stack("armor", i, stack)
|
||||
end
|
||||
armor:save_armor_inventory(player)
|
||||
player_inv:set_size("armor", 0)
|
||||
end
|
||||
for i=1, 6 do
|
||||
local stack = player_inv:get_stack("armor", i)
|
||||
armor_inv:set_stack("armor", i, stack)
|
||||
local stack = armor_inv:get_stack("armor", i)
|
||||
armor:run_callbacks("on_equip", player, i, stack)
|
||||
end
|
||||
armor.def[name] = {
|
||||
@ -175,24 +174,13 @@ local function init_player_armor(player)
|
||||
for group, _ in pairs(armor.registered_groups) do
|
||||
armor.def[name].groups[group] = 0
|
||||
end
|
||||
local skin = armor:get_player_skin(name)
|
||||
armor.textures[name] = {
|
||||
skin = skin..".png",
|
||||
armor = "3d_armor_trans.png",
|
||||
wielditem = "3d_armor_trans.png",
|
||||
preview = armor.default_skin.."_preview.png",
|
||||
armor = "blank.png",
|
||||
wielditem = "blank.png",
|
||||
}
|
||||
local texture_path = minetest.get_modpath("player_textures")
|
||||
if texture_path then
|
||||
local dir_list = minetest.get_dir_list(texture_path.."/textures")
|
||||
for _, fn in pairs(dir_list) do
|
||||
if fn == "player_"..name..".png" then
|
||||
armor.textures[name].skin = fn
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
armor:set_player_armor(player)
|
||||
minetest.after(0, function(player)
|
||||
armor:set_player_armor(player)
|
||||
end, player)
|
||||
return true
|
||||
end
|
||||
|
||||
@ -201,9 +189,10 @@ end
|
||||
default.player_register_model("3d_armor_character.b3d", {
|
||||
animation_speed = 30,
|
||||
textures = {
|
||||
armor.default_skin..".png",
|
||||
"3d_armor_trans.png",
|
||||
"3d_armor_trans.png",
|
||||
armor.default_skin,
|
||||
"blank.png",
|
||||
"blank.png",
|
||||
"blank.png",
|
||||
},
|
||||
animations = {
|
||||
stand = {x=0, y=79},
|
||||
@ -215,22 +204,6 @@ default.player_register_model("3d_armor_character.b3d", {
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
local name = armor:get_valid_player(player, "[on_player_receive_fields]")
|
||||
if not name then
|
||||
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")
|
||||
minetest.after(0, function(player)
|
||||
@ -251,13 +224,13 @@ end)
|
||||
|
||||
if armor.config.drop == true or armor.config.destroy == true then
|
||||
minetest.register_on_dieplayer(function(player)
|
||||
local name, player_inv = armor:get_valid_player(player, "[on_dieplayer]")
|
||||
local name, armor_inv = 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 = player_inv:get_stack("armor", i)
|
||||
for i=1, armor_inv:get_size("armor") do
|
||||
local stack = armor_inv:get_stack("armor", i)
|
||||
if stack:get_count() > 0 then
|
||||
table.insert(drop, stack)
|
||||
armor:set_inventory_stack(player, i, nil)
|
||||
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 389 B |
Before Width: | Height: | Size: 242 B After Width: | Height: | Size: 356 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 368 B |
Before Width: | Height: | Size: 208 B After Width: | Height: | Size: 336 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 405 B |
Before Width: | Height: | Size: 264 B After Width: | Height: | Size: 355 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 389 B |
Before Width: | Height: | Size: 248 B After Width: | Height: | Size: 356 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 389 B |
Before Width: | Height: | Size: 242 B After Width: | Height: | Size: 356 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 368 B |
Before Width: | Height: | Size: 206 B After Width: | Height: | Size: 336 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 368 B |
Before Width: | Height: | Size: 210 B After Width: | Height: | Size: 336 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 391 B |
Before Width: | Height: | Size: 196 B After Width: | Height: | Size: 347 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 389 B |
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 361 B |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 508 B |
Before Width: | Height: | Size: 314 B After Width: | Height: | Size: 431 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 440 B |
Before Width: | Height: | Size: 280 B After Width: | Height: | Size: 382 B |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 520 B |
Before Width: | Height: | Size: 456 B After Width: | Height: | Size: 414 B |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 508 B |
Before Width: | Height: | Size: 318 B After Width: | Height: | Size: 431 B |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 508 B |
Before Width: | Height: | Size: 300 B After Width: | Height: | Size: 431 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 440 B |
Before Width: | Height: | Size: 276 B After Width: | Height: | Size: 382 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 440 B |
Before Width: | Height: | Size: 284 B After Width: | Height: | Size: 382 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 493 B |
Before Width: | Height: | Size: 281 B After Width: | Height: | Size: 399 B |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 474 B |
Before Width: | Height: | Size: 362 B After Width: | Height: | Size: 407 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 431 B |
Before Width: | Height: | Size: 192 B After Width: | Height: | Size: 343 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 426 B |
Before Width: | Height: | Size: 225 B After Width: | Height: | Size: 343 B |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 469 B |
Before Width: | Height: | Size: 253 B After Width: | Height: | Size: 352 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 431 B |
Before Width: | Height: | Size: 184 B After Width: | Height: | Size: 343 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 431 B |
Before Width: | Height: | Size: 185 B After Width: | Height: | Size: 343 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 426 B |
Before Width: | Height: | Size: 215 B After Width: | Height: | Size: 343 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 426 B |
Before Width: | Height: | Size: 226 B After Width: | Height: | Size: 343 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 478 B |
Before Width: | Height: | Size: 202 B After Width: | Height: | Size: 350 B |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 473 B |
Before Width: | Height: | Size: 186 B After Width: | Height: | Size: 337 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 407 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 382 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 414 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 398 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 402 B |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 430 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 398 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 398 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 402 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 402 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 412 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 420 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 366 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 365 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 381 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 366 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 366 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 365 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 365 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 359 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 364 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 372 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 413 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 372 B |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 372 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 378 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 414 B |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 406 B |
Before Width: | Height: | Size: 187 B After Width: | Height: | Size: 363 B |