Improve code

master
paramat 2015-04-11 01:05:56 +01:00
parent 273a1a16b4
commit 5a592aeef9
5 changed files with 227 additions and 266 deletions

View File

@ -1,4 +1,4 @@
moonrealm 0.8.2 by paramat
moonrealm 0.9.1 by paramat
For Minetest 0.4.12 or later
Depends default
Licenses: Code LGPL 2.1. Media CC BY-SA
@ -6,15 +6,12 @@ Licenses: Code LGPL 2.1. Media CC BY-SA
Version changes:
Shell drops nothing
Simpler appletree with vi = vi + 1 optimisation, more apples
New licences
paramtype = "light" for light sources
No longer override day night ratio on joinplayer to avoid darkness
Set SPAWNEGG in functions.lua to enable spawnegg spawning in moonrealm
Moonrealm mese glows and drops default:mese
Shorten lines, cleanup code, fix undeclared globals
Noise objects created only once
Call this 0.9.1, 0.8.2 should have been called 0.9.0
GRADCEN = 1 for terrain consistent with previous versions
Use default ice texture
Mod is now for singlenode mapgen only
Move spawnplayer function to init.lua, avoids duplication of parameters
Cleanup crafting code
Crafting

View File

@ -73,7 +73,7 @@ function moonrealm_appletree(pos)
vm:write_to_map()
vm:update_map()
print ("[moonrealm] Appletree sapling grows")
print ("[moonrealm] moonrealm apple tree sapling grows")
end
@ -108,7 +108,7 @@ minetest.register_on_dignode(function(pos, oldnode, digger)
vm:set_data(data)
vm:write_to_map()
vm:update_map()
print ("[moonrealm] MR air flows into hole")
print ("[moonrealm] moonrealm air flows into hole")
return
end
end
@ -121,7 +121,7 @@ minetest.register_on_dignode(function(pos, oldnode, digger)
vm:set_data(data)
vm:write_to_map()
vm:update_map()
print ("[moonrealm] Vacuum flows into hole")
print ("[moonrealm] moonrealm vacuum flows into hole")
end)
@ -160,7 +160,7 @@ minetest.register_abm({
if nodid == c_vacuum then
data[vi] = c_lsair
minetest.get_meta({x=x+i,y=y+j,z=z+k}):set_int("spread", (spread - 1))
print ("[moonrealm] MR air spreads")
print ("[moonrealm] moonrealm air spreads")
end
end
vi = vi + 1
@ -209,7 +209,7 @@ minetest.register_abm({
or nodid == c_dustp1
or nodid == c_dustp2 then
data[vi] = c_soil
print ("[moonrealm] Hydroponic liquid saturates")
print ("[moonrealm] hydroponic liquid saturates")
end
end
vi = vi + 1
@ -265,7 +265,7 @@ minetest.register_abm({
vm:write_to_map()
vm:update_map()
print ("[moonrealm] Moon soil dries")
print ("[moonrealm] moonrealm soil dries")
end,
})
@ -275,207 +275,9 @@ minetest.register_abm({
minetest.register_abm({
nodenames = {"moonrealm:sapling"},
interval = 31,
chance = 5,
chance = 7,
action = function(pos, node, active_object_count, active_object_count_wider)
moonrealm_appletree(pos)
end,
})
-- Spawn player function, dependant on chunk size of 80 nodes
function moonrealm_spawnplayer(player)
local GRADCEN = 0 -- -- Gradient centre / terrain centre average level
local CENAMP = 64 -- -- Grad centre amplitude, terrain centre is varied by this
local HIGRAD = 128 -- -- Surface generating noise gradient above gradcen, controls depth of upper terrain
local LOGRAD = 128 -- -- Surface generating noise gradient below gradcen, controls depth of lower terrain
local HEXP = 0.5 -- -- Noise offset exponent above gradcen, 1 = normal 3D perlin terrain
local LEXP = 2 -- -- Noise offset exponent below gradcen
local STOT = 0.04 -- -- Stone density threshold, depth of dust
local PSCA = 16 -- Player scatter from world centre in chunks (80 nodes).
local xsp
local ysp
local zsp
local np_terrain = {
offset = 0,
scale = 1,
spread = {x=512, y=512, z=512},
seed = 58588900033,
octaves = 6,
persist = 0.67
}
local np_terralt = {
offset = 0,
scale = 1,
spread = {x=414, y=414, z=414},
seed = 13331930910,
octaves = 6,
persist = 0.67
}
local np_smooth = {
offset = 0,
scale = 1,
spread = {x=828, y=828, z=828},
seed = 113,
octaves = 4,
persist = 0.4
}
local np_fault = {
offset = 0,
scale = 1,
spread = {x=414, y=828, z=414},
seed = 14440002,
octaves = 4,
persist = 0.5
}
local np_gradcen = {
offset = 0,
scale = 1,
spread = {x=1024, y=1024, z=1024},
seed = 9344,
octaves = 4,
persist = 0.4
}
local np_terblen = {
offset = 0,
scale = 1,
spread = {x=2048, y=2048, z=2048},
seed = -13002,
octaves = 3,
persist = 0.4
}
for chunk = 1, 64 do
print ("[moonrealm] searching for spawn "..chunk)
local x0 = 80 * math.random(-PSCA, PSCA) - 32
local z0 = 80 * math.random(-PSCA, PSCA) - 32
local y0 = 80 * math.floor((GRADCEN + 32) / 80) - 32
local x1 = x0 + 79
local z1 = z0 + 79
local y1 = y0 + 79
local sidelen = 80
local chulens = {x=sidelen, y=sidelen, z=sidelen}
local minpos = {x=x0, y=y0, z=z0}
local minposd = {x=x0, y=z0}
local nvals_terrain = minetest.get_perlin_map(np_terrain, chulens):get3dMap_flat(minpos)
local nvals_terralt = minetest.get_perlin_map(np_terralt, chulens):get3dMap_flat(minpos)
local nvals_smooth = minetest.get_perlin_map(np_smooth, chulens):get3dMap_flat(minpos)
local nvals_fault = minetest.get_perlin_map(np_fault, chulens):get3dMap_flat(minpos)
local nvals_terblen = minetest.get_perlin_map(np_terblen, chulens):get2dMap_flat(minposd)
local nvals_gradcen = minetest.get_perlin_map(np_gradcen, chulens):get2dMap_flat(minposd)
local nixz = 1
local nixyz = 1
local stable = {}
for z = z0, z1 do
for y = y0, y1 do
for x = x0, x1 do
local si = x - x0 + 1
local grad
local density
local terblen = math.max(math.min(math.abs(nvals_terblen[nixz]) * 4, 1.5), 0.5) - 0.5
local gradcen = GRADCEN + nvals_gradcen[nixz] * CENAMP
if y > gradcen then
grad = -((y - gradcen) / HIGRAD) ^ HEXP
else
grad = ((gradcen - y) / LOGRAD) ^ LEXP
end
if nvals_fault[nixyz] >= 0 then
density = (nvals_terrain[nixyz] + nvals_terralt[nixyz]) / 2 * (1 - terblen)
+ nvals_smooth[nixyz] * terblen + grad
else
density = (nvals_terrain[nixyz] - nvals_terralt[nixyz]) / 2 * (1 - terblen)
- nvals_smooth[nixyz] * terblen + grad
end
if density >= STOT then
stable[si] = true
elseif stable[si] and density < 0 and terblen == 1 then
ysp = y + 4
xsp = x
zsp = z
break
end
nixz = nixz + 1
nixyz = nixyz + 1
end
if ysp then
break
end
nixz = nixz - 80
end
if ysp then
break
end
nixz = nixz + 80
end
if ysp then
break
end
end
print ("[moonrealm] spawn player ("..xsp.." "..ysp.." "..zsp..")")
player:setpos({x=xsp, y=ysp, z=zsp})
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "moonrealm:spacesuit")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "moonrealm:sapling 4")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "moonrealm:airlock 4")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "moonrealm:airgen 4")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "moonrealm:hlsource 4")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "default:apple 64")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "default:pick_diamond")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "default:axe_diamond")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "default:shovel_diamond")
local vm = minetest.get_voxel_manip()
local pos1 = {x=xsp-3, y=ysp-3, z=zsp-3}
local pos2 = {x=xsp+3, y=ysp+6, z=zsp+3}
local emin, emax = vm:read_from_map(pos1, pos2)
local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax})
local data = vm:get_data()
local c_shell = minetest.get_content_id("moonrealm:shell")
local c_light = minetest.get_content_id("moonrealm:light")
local c_lsair = minetest.get_content_id("moonrealm:air")
for i = -3, 3 do
for j = -3, 6 do
for k = -3, 3 do
local vi = area:index(xsp + i, ysp + j, zsp + k)
local rad
if j <= 0 then
rad = math.sqrt(i ^ 2 + j ^ 2 + k ^ 2)
else
rad = math.sqrt(i ^ 2 + j ^ 2 * 0.3 + k ^ 2)
end
if rad <= 3.5 then
if rad >= 2.5 then
data[vi] = c_shell
elseif rad >= 1.5 then
data[vi] = c_light
else
data[vi] = c_lsair
end
end
end
end
end
vm:set_data(data)
vm:write_to_map()
vm:update_map()
end
local SPAWNEGG = true
if SPAWNEGG then
minetest.register_on_newplayer(function(player)
moonrealm_spawnplayer(player)
end)
minetest.register_on_respawnplayer(function(player)
moonrealm_spawnplayer(player)
return true
end)
end

200
init.lua
View File

@ -1,6 +1,5 @@
-- Parameters
local SINGLENODE = true -- Set to true if using singlenode mapgen
local YMIN = -8000 -- Approx lower limit
local GRADCEN = 1 -- Gradient centre / terrain centre average level
local YMAX = 8000 -- Approx upper limit
@ -9,17 +8,18 @@ local XMAX = 8000
local ZMIN = -8000
local ZMAX = 8000
local FOOT = true -- Footprints in dust
local CENAMP = 64 -- Grad centre amplitude, terrain centre is varied by this
local HIGRAD = 128 -- Surface generating noise gradient above gradcen, controls depth of upper terrain
local LOGRAD = 128 -- Surface generating noise gradient below gradcen, controls depth of lower terrain
local HEXP = 0.5 -- Noise offset exponent above gradcen, 1 = normal 3D perlin terrain
local LEXP = 2 -- Noise offset exponent below gradcen
local STOT = 0.04 -- Stone density threshold, depth of dust
local ICECHA = 1 / (13*13*13) -- Ice chance per dust node at terrain centre, decreases with altitude
local ICEGRAD = 128 -- Ice gradient, vertical distance for no ice
local ORECHA = 7*7*7 -- Ore 1/x chance per stone node
local TFIS = 0.01 -- Fissure threshold. Controls size of fissures
local FOOT = true -- Footprints in dust
-- 3D noise for terrain
@ -106,13 +106,11 @@ dofile(minetest.get_modpath("moonrealm").."/nodes.lua")
dofile(minetest.get_modpath("moonrealm").."/functions.lua")
-- Set water level in singlenode mapgen
-- Set mapgen parameters
if SINGLENODE then
minetest.register_on_mapgen_init(function(mgparams)
minetest.set_mapgen_params({water_level=-32000})
end)
end
minetest.register_on_mapgen_init(function(mgparams)
minetest.set_mapgen_params({mgname="singlenode", water_level=-32000})
end)
-- Player positions
@ -178,12 +176,14 @@ minetest.register_globalstep(function(dtime)
z = player_pos[player:get_player_name()].z
}
end
if math.random() < 0.1 then -- spacesuit restores breath
if player:get_inventory():contains_item("main", "moonrealm:spacesuit") and
player:get_breath() < 10 then
player:set_breath(10)
end
end
if math.random() > 0.99 then -- set gravity, skybox and override light
local pos = player:getpos()
if pos.y > YMIN and pos.y < YMAX then -- entering realm
@ -277,7 +277,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
local nvals_terblen = nobj_terblen:get2dMap_flat(minpos2d)
local nvals_gradcen = nobj_gradcen:get2dMap_flat(minpos2d)
local ni = 1
local ni3d = 1
local ni2d = 1
local stable = {}
for z = z0, z1 do
@ -301,25 +301,26 @@ minetest.register_on_generated(function(minp, maxp, seed)
local grad
local density
local si = x - x0 + 1
local terblen = math.max(math.min(math.abs(nvals_terblen[ni2d]) * 4, 1.5), 0.5) - 0.5
local terblen = math.max(math.min(math.abs(nvals_terblen[ni2d]) * 4,
1.5), 0.5) - 0.5
local gradcen = GRADCEN + nvals_gradcen[ni2d] * CENAMP
if y > gradcen then
grad = -((y - gradcen) / HIGRAD) ^ HEXP
else
grad = ((gradcen - y) / LOGRAD) ^ LEXP
end
if nvals_fault[ni] >= 0 then
density = (nvals_terrain[ni] +
nvals_terralt[ni]) / 2 * (1 - terblen)
+ nvals_smooth[ni] * terblen + grad
if nvals_fault[ni3d] >= 0 then
density = (nvals_terrain[ni3d] +
nvals_terralt[ni3d]) / 2 * (1 - terblen)
+ nvals_smooth[ni3d] * terblen + grad
else
density = (nvals_terrain[ni] -
nvals_terralt[ni]) / 2 * (1 - terblen)
- nvals_smooth[ni] * terblen + grad
density = (nvals_terrain[ni3d] -
nvals_terralt[ni3d]) / 2 * (1 - terblen)
- nvals_smooth[ni3d] * terblen + grad
end
if density > 0 and empty then -- if terrain and node empty
local nofis = false
if math.abs(nvals_fissure[ni]) > TFIS then
if math.abs(nvals_fissure[ni3d]) > TFIS then
nofis = true
end
if density >= STOT and nofis then -- stone, ores
@ -361,7 +362,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
end
stable[si] = false
end
ni = ni + 1
ni3d = ni3d + 1
ni2d = ni2d + 1
vi = vi + 1
end
@ -379,3 +380,164 @@ minetest.register_on_generated(function(minp, maxp, seed)
print ("[moonrealm] "..chugent.." ms chunk ("..x0.." "..y0.." "..z0..")")
end)
-- Spawn player function, dependant on chunk size of 80 nodes
function moonrealm_spawnplayer(player)
local PSCA = 16
local xsp
local ysp
local zsp
local nobj_terrain = nil
local nobj_terralt = nil
local nobj_smooth = nil
local nobj_fault = nil
local nobj_terblen = nil
local nobj_gradcen = nil
for chunk = 1, 64 do
print ("[moonrealm] searching for spawn "..chunk)
local x0 = 80 * math.random(-PSCA, PSCA) - 32
local z0 = 80 * math.random(-PSCA, PSCA) - 32
local y0 = 80 * math.floor((GRADCEN + 32) / 80) - 32
local x1 = x0 + 79
local z1 = z0 + 79
local y1 = y0 + 79
local chulens = x1 - x0 + 1
local pmaplens2d = {x = chulens, y = chulens, z = 1}
local pmaplens3d = {x = chulens, y = chulens, z = chulens}
local minpos2d = {x = x0, y = z0}
local minpos3d = {x = x0, y = y0, z = z0}
nobj_terrain = nobj_terrain or minetest.get_perlin_map(np_terrain, pmaplens3d)
nobj_terralt = nobj_terralt or minetest.get_perlin_map(np_terralt, pmaplens3d)
nobj_smooth = nobj_smooth or minetest.get_perlin_map(np_smooth, pmaplens3d)
nobj_fault = nobj_fault or minetest.get_perlin_map(np_fault, pmaplens3d)
nobj_terblen = nobj_terblen or minetest.get_perlin_map(np_terblen, pmaplens2d)
nobj_gradcen = nobj_gradcen or minetest.get_perlin_map(np_gradcen, pmaplens2d)
local nvals_terrain = nobj_terrain:get3dMap_flat(minpos3d)
local nvals_terralt = nobj_terralt:get3dMap_flat(minpos3d)
local nvals_smooth = nobj_smooth :get3dMap_flat(minpos3d)
local nvals_fault = nobj_fault :get3dMap_flat(minpos3d)
local nvals_terblen = nobj_terblen:get2dMap_flat(minpos2d)
local nvals_gradcen = nobj_gradcen:get2dMap_flat(minpos2d)
local ni3d = 1
local ni2d = 1
local stable = {}
for z = z0, z1 do
for y = y0, y1 do
for x = x0, x1 do
local si = x - x0 + 1
local grad
local density
local terblen = math.max(math.min(math.abs(nvals_terblen[ni2d]) * 4,
1.5), 0.5) - 0.5
local gradcen = GRADCEN + nvals_gradcen[ni2d] * CENAMP
if y > gradcen then
grad = -((y - gradcen) / HIGRAD) ^ HEXP
else
grad = ((gradcen - y) / LOGRAD) ^ LEXP
end
if nvals_fault[ni3d] >= 0 then
density = (nvals_terrain[ni3d] +
nvals_terralt[ni3d]) / 2 * (1 - terblen)
+ nvals_smooth[ni3d] * terblen + grad
else
density = (nvals_terrain[ni3d] -
nvals_terralt[ni3d]) / 2 * (1 - terblen)
- nvals_smooth[ni3d] * terblen + grad
end
if density >= STOT then
stable[si] = true
elseif stable[si] and density < 0 and terblen == 1 then
ysp = y + 4
xsp = x
zsp = z
break
end
ni3d = ni3d + 1
ni2d = ni2d + 1
end
if ysp then
break
end
ni2d = ni2d - chulens
end
if ysp then
break
end
ni2d = ni2d + chulens
end
if ysp then
break
end
end
print ("[moonrealm] spawn player ("..xsp.." "..ysp.." "..zsp..")")
player:setpos({x=xsp, y=ysp, z=zsp})
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "moonrealm:spacesuit")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "moonrealm:sapling 4")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "moonrealm:airlock 4")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "moonrealm:airgen 4")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "moonrealm:hlsource 4")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "default:apple 64")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "default:pick_diamond")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "default:axe_diamond")
minetest.add_item({x=xsp, y=ysp+1, z=zsp}, "default:shovel_diamond")
local vm = minetest.get_voxel_manip()
local pos1 = {x=xsp-3, y=ysp-3, z=zsp-3}
local pos2 = {x=xsp+3, y=ysp+6, z=zsp+3}
local emin, emax = vm:read_from_map(pos1, pos2)
local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax})
local data = vm:get_data()
local c_shell = minetest.get_content_id("moonrealm:shell")
local c_light = minetest.get_content_id("moonrealm:light")
local c_lsair = minetest.get_content_id("moonrealm:air")
for i = -3, 3 do
for j = -3, 6 do
for k = -3, 3 do
local vi = area:index(xsp + i, ysp + j, zsp + k)
local rad
if j <= 0 then
rad = math.sqrt(i ^ 2 + j ^ 2 + k ^ 2)
else
rad = math.sqrt(i ^ 2 + j ^ 2 * 0.3 + k ^ 2)
end
if rad <= 3.5 then
if rad >= 2.5 then
data[vi] = c_shell
elseif rad >= 1.5 then
data[vi] = c_light
else
data[vi] = c_lsair
end
end
end
end
end
vm:set_data(data)
vm:write_to_map()
vm:update_map()
end
minetest.register_on_newplayer(function(player)
moonrealm_spawnplayer(player)
end)
minetest.register_on_respawnplayer(function(player)
moonrealm_spawnplayer(player)
return true
end)

View File

@ -129,7 +129,7 @@ minetest.register_node("moonrealm:airgen", {
if nodename == "moonrealm:vacuum" then
minetest.add_node({x=x+i,y=y+j,z=z+k},{name="moonrealm:air"})
minetest.get_meta({x=x+i,y=y+j,z=z+k}):set_int("spread", 16)
print ("[moonrealm] Added MR air node")
print ("[moonrealm] Added moonrealm air node")
end
end
end
@ -141,7 +141,7 @@ minetest.register_node("moonrealm:airgen", {
minetest.register_node("moonrealm:waterice", {
description = "Water Ice",
tiles = {"moonrealm_waterice.png"},
tiles = {"default_ice.png"},
light_source = 1,
paramtype = "light",
is_ground_content = false,
@ -364,21 +364,21 @@ minetest.register_craftitem("moonrealm:lifesupport", {
-- Crafting
minetest.register_craft({
output = "moonrealm:airlock",
recipe = {
{"default:steel_ingot", "", "default:steel_ingot"},
{"default:steel_ingot", "default:mese", "default:steel_ingot"},
{"default:steel_ingot", "", "default:steel_ingot"},
},
output = "moonrealm:airlock",
recipe = {
{"default:steel_ingot", "", "default:steel_ingot"},
{"default:steel_ingot", "default:mese", "default:steel_ingot"},
{"default:steel_ingot", "", "default:steel_ingot"},
},
})
minetest.register_craft({
output = "moonrealm:airgen",
recipe = {
{"default:steel_ingot", "moonrealm:waterice", "default:steel_ingot"},
{"moonrealm:waterice", "default:mese", "moonrealm:waterice"},
{"default:steel_ingot", "moonrealm:waterice", "default:steel_ingot"},
},
output = "moonrealm:airgen",
recipe = {
{"default:steel_ingot", "moonrealm:waterice", "default:steel_ingot"},
{"moonrealm:waterice", "default:mese", "moonrealm:waterice"},
{"default:steel_ingot", "moonrealm:waterice", "default:steel_ingot"},
},
})
minetest.register_craft({
@ -389,12 +389,12 @@ minetest.register_craft({
})
minetest.register_craft({
output = "moonrealm:hlsource",
recipe = {
{"moonrealm:leaves", "moonrealm:leaves", "moonrealm:leaves"},
{"moonrealm:leaves", "moonrealm:waterice", "moonrealm:leaves"},
{"moonrealm:leaves", "moonrealm:leaves", "moonrealm:leaves"},
},
output = "moonrealm:hlsource",
recipe = {
{"moonrealm:leaves", "moonrealm:leaves", "moonrealm:leaves"},
{"moonrealm:leaves", "moonrealm:waterice", "moonrealm:leaves"},
{"moonrealm:leaves", "moonrealm:leaves", "moonrealm:leaves"},
},
})
minetest.register_craft({
@ -406,12 +406,12 @@ minetest.register_craft({
})
minetest.register_craft({
output = "default:furnace",
recipe = {
{"moonrealm:stone", "moonrealm:stone", "moonrealm:stone"},
{"moonrealm:stone", "", "moonrealm:stone"},
{"moonrealm:stone", "moonrealm:stone", "moonrealm:stone"},
},
output = "default:furnace",
recipe = {
{"moonrealm:stone", "moonrealm:stone", "moonrealm:stone"},
{"moonrealm:stone", "", "moonrealm:stone"},
{"moonrealm:stone", "moonrealm:stone", "moonrealm:stone"},
},
})
minetest.register_craft({
@ -457,12 +457,12 @@ minetest.register_craft({
})
minetest.register_craft({
output = "moonrealm:light 8",
recipe = {
{"moonrealm:glass", "moonrealm:glass", "moonrealm:glass"},
{"moonrealm:glass", "default:mese", "moonrealm:glass"},
{"moonrealm:glass", "moonrealm:glass", "moonrealm:glass"},
},
output = "moonrealm:light 8",
recipe = {
{"moonrealm:glass", "moonrealm:glass", "moonrealm:glass"},
{"moonrealm:glass", "default:mese", "moonrealm:glass"},
{"moonrealm:glass", "moonrealm:glass", "moonrealm:glass"},
},
})
minetest.register_craft({

Binary file not shown.

Before

Width:  |  Height:  |  Size: 490 B