slim mod just as a library

This commit is contained in:
Bruno Rybársky 2022-08-16 15:36:14 +02:00
parent 3d1444b6f8
commit b5871ded46
36 changed files with 60 additions and 535 deletions

10
.vscode/settings.json vendored Normal file

@ -0,0 +1,10 @@
{
"Lua.diagnostics.globals": [
"minetest",
"ItemStack",
"vector",
"VoxelManip",
"VoxelArea",
"PseudoRandom"
]
}

@ -2,73 +2,4 @@ Minetest Game mod: tnt
====================== ======================
See license.txt for license information. See license.txt for license information.
Authors of source code This is just tnt logic extracted
----------------------
PilzAdam (MIT)
ShadowNinja (MIT)
sofar (sofar@foo-projects.org) (MIT)
Various Minetest developers and contributors (MIT)
Authors of media
----------------
BlockMen (CC BY-SA 3.0):
All textures not mentioned below.
ShadowNinja (CC BY-SA 3.0):
tnt_smoke.png
Wuzzy (CC BY-SA 3.0):
All gunpowder textures except tnt_gunpowder_inventory.png.
sofar (sofar@foo-projects.org) (CC BY-SA 3.0):
tnt_blast.png
paramat (CC BY-SA 3.0)
tnt_tnt_stick.png - Derived from a texture by benrob0329.
TumeniNodes (CC0 1.0)
tnt_explode.ogg
renamed, edited, and converted to .ogg from Explosion2.wav
by steveygos93 (CC0 1.0)
<https://freesound.org/s/80401/>
tnt_ignite.ogg
renamed, edited, and converted to .ogg from sparkler_fuse_nm.wav
by theneedle.tv (CC0 1.0)
<https://freesound.org/s/316682/>
tnt_gunpowder_burning.ogg
renamed, edited, and converted to .ogg from road flare ignite burns.wav
by frankelmedico (CC0 1.0)
<https://freesound.org/s/348767/>
Introduction
------------
This mod adds TNT to Minetest. TNT is a tool to help the player
in mining.
How to use the mod:
Craft gunpowder by placing coal and gravel in the crafting area.
The gunpowder can be used to craft TNT sticks or as a fuse trail for TNT.
To craft 2 TNT sticks:
G_G
GPG
G_G
G = gunpowder
P = paper
The sticks are not usable as an explosive.
Craft TNT from 9 TNT sticks.
There are different ways to ignite TNT:
1. Hit it with a torch.
2. Hit a gunpowder fuse trail that leads to TNT with a torch or
flint-and-steel.
3. Activate it with mesecons (fastest way).
For 1 TNT:
Node destruction radius is 3 nodes.
Player and object damage radius is 6 nodes.

427
init.lua

@ -2,23 +2,6 @@
tnt = {} tnt = {}
-- Load support for MT game translation.
local S = minetest.get_translator("tnt")
-- Default to enabled when in singleplayer
local enable_tnt = minetest.settings:get_bool("enable_tnt")
if enable_tnt == nil then
enable_tnt = minetest.is_singleplayer()
end
-- loss probabilities array (one in X will be lost)
local loss_prob = {}
loss_prob["default:cobble"] = 3
loss_prob["default:dirt"] = 4
local tnt_radius = tonumber(minetest.settings:get("tnt_radius") or 3)
-- Fill a list with data for content IDs, after all nodes are registered -- Fill a list with data for content IDs, after all nodes are registered
local cid_data = {} local cid_data = {}
@ -77,7 +60,7 @@ end
local function add_drop(drops, item) local function add_drop(drops, item)
item = ItemStack(item) item = ItemStack(item)
local name = item:get_name() local name = item:get_name()
if loss_prob[name] ~= nil and math.random(1, loss_prob[name]) == 1 then if math.random(1, 4) > 1 then
return return
end end
@ -91,11 +74,7 @@ end
local basic_flame_on_construct -- cached value local basic_flame_on_construct -- cached value
local function destroy(drops, npos, cid, c_air, c_fire, local function destroy(drops, npos, cid, c_air, c_fire,
on_blast_queue, on_construct_queue, on_blast_queue, on_construct_queue, ignore_on_blast, owner)
ignore_protection, ignore_on_blast, owner)
if not ignore_protection and minetest.is_protected(npos, owner) then
return cid
end
local def = cid_data[cid] local def = cid_data[cid]
@ -203,89 +182,11 @@ local function entity_physics(pos, radius, drops)
end end
end end
local function add_effects(pos, radius, drops) local function tnt_explode(pos, radius, ignore_on_blast, owner, explode_center)
minetest.add_particle({
pos = pos,
velocity = vector.new(),
acceleration = vector.new(),
expirationtime = 0.4,
size = radius * 10,
collisiondetection = false,
vertical = false,
texture = "tnt_boom.png",
glow = 15,
})
minetest.add_particlespawner({
amount = 64,
time = 0.5,
minpos = vector.subtract(pos, radius / 2),
maxpos = vector.add(pos, radius / 2),
minvel = {x = -10, y = -10, z = -10},
maxvel = {x = 10, y = 10, z = 10},
minacc = vector.new(),
maxacc = vector.new(),
minexptime = 1,
maxexptime = 2.5,
minsize = radius * 3,
maxsize = radius * 5,
texture = "tnt_smoke.png",
})
-- we just dropped some items. Look at the items entities and pick
-- one of them to use as texture
local texture = "tnt_blast.png" --fallback texture
local node
local most = 0
for name, stack in pairs(drops) do
local count = stack:get_count()
if count > most then
most = count
local def = minetest.registered_nodes[name]
if def then
node = { name = name }
end
if def and def.tiles and def.tiles[1] then
texture = def.tiles[1]
end
end
end
minetest.add_particlespawner({
amount = 64,
time = 0.1,
minpos = vector.subtract(pos, radius / 2),
maxpos = vector.add(pos, radius / 2),
minvel = {x = -3, y = 0, z = -3},
maxvel = {x = 3, y = 5, z = 3},
minacc = {x = 0, y = -10, z = 0},
maxacc = {x = 0, y = -10, z = 0},
minexptime = 0.8,
maxexptime = 2.0,
minsize = radius * 0.33,
maxsize = radius,
texture = texture,
-- ^ only as fallback for clients without support for `node` parameter
node = node,
collisiondetection = true,
})
end
function tnt.burn(pos, nodename)
local name = nodename or minetest.get_node(pos).name
local def = minetest.registered_nodes[name]
if not def then
return
elseif def.on_ignite then
def.on_ignite(pos)
elseif minetest.get_item_group(name, "tnt") > 0 then
minetest.swap_node(pos, {name = name .. "_burning"})
minetest.sound_play("tnt_ignite", {pos = pos}, true)
minetest.get_node_timer(pos):start(1)
end
end
local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast, owner, explode_center)
pos = vector.round(pos) pos = vector.round(pos)
if radius < 1 then
return
end
-- scan for adjacent TNT nodes first, and enlarge the explosion -- scan for adjacent TNT nodes first, and enlarge the explosion
local vm1 = VoxelManip() local vm1 = VoxelManip()
local p1 = vector.subtract(pos, 2) local p1 = vector.subtract(pos, 2)
@ -295,14 +196,8 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast, owne
local data = vm1:get_data() local data = vm1:get_data()
local count = 0 local count = 0
local c_tnt local c_tnt
local c_tnt_burning = minetest.get_content_id("tnt:tnt_burning") local c_tnt_boom = minetest.get_content_id("tnt:boom_center")
local c_tnt_boom = minetest.get_content_id("tnt:boom")
local c_air = minetest.get_content_id("air") local c_air = minetest.get_content_id("air")
if enable_tnt then
c_tnt = minetest.get_content_id("tnt:tnt")
else
c_tnt = c_tnt_burning -- tnt is not registered if disabled
end
-- make sure we still have explosion even when centre node isnt tnt related -- make sure we still have explosion even when centre node isnt tnt related
if explode_center then if explode_center then
count = 1 count = 1
@ -313,7 +208,7 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast, owne
local vi = a:index(pos.x - 2, y, z) local vi = a:index(pos.x - 2, y, z)
for x = pos.x - 2, pos.x + 2 do for x = pos.x - 2, pos.x + 2 do
local cid = data[vi] local cid = data[vi]
if cid == c_tnt or cid == c_tnt_boom or cid == c_tnt_burning then if cid == c_tnt or cid == c_tnt_boom then
count = count + 1 count = count + 1
data[vi] = c_air data[vi] = c_air
end end
@ -326,7 +221,7 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast, owne
vm1:write_to_map() vm1:write_to_map()
-- recalculate new radius -- recalculate new radius
radius = math.floor(radius * math.pow(count, 1/3)) radius = math.floor(radius * count^1/3)
-- perform the explosion -- perform the explosion
local vm = VoxelManip() local vm = VoxelManip()
@ -340,9 +235,16 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast, owne
local drops = {} local drops = {}
local on_blast_queue = {} local on_blast_queue = {}
local on_construct_queue = {} local on_construct_queue = {}
basic_flame_on_construct = minetest.registered_nodes["fire:basic_flame"].on_construct --check if mod fire is active
local fire_mod = minetest.get_modpath("fire")
local c_fire = minetest.get_content_id("fire:basic_flame") if fire_mod ~= nil then
basic_flame_on_construct = minetest.registered_nodes["fire:basic_flame"].on_construct
c_fire = minetest.get_content_id("fire:basic_flame")
else
basic_flame_on_construct = function() end
c_fire = c_air
end
for z = -radius, radius do for z = -radius, radius do
for y = -radius, radius do for y = -radius, radius do
local vi = a:index(pos.x + (-radius), pos.y + y, pos.z + z) local vi = a:index(pos.x + (-radius), pos.y + y, pos.z + z)
@ -353,8 +255,7 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast, owne
local p = {x = pos.x + x, y = pos.y + y, z = pos.z + z} local p = {x = pos.x + x, y = pos.y + y, z = pos.z + z}
if cid ~= c_air then if cid ~= c_air then
data[vi] = destroy(drops, p, cid, c_air, c_fire, data[vi] = destroy(drops, p, cid, c_air, c_fire,
on_blast_queue, on_construct_queue, on_blast_queue, on_construct_queue, ignore_on_blast, owner)
ignore_protection, ignore_on_blast, owner)
end end
end end
vi = vi + 1 vi = vi + 1
@ -405,16 +306,19 @@ end
function tnt.boom(pos, def) function tnt.boom(pos, def)
def = def or {} def = def or {}
def.radius = def.radius or 1 def.radius = def.radius or 1
def.sound = def.sound or 1
def.damage_radius = def.damage_radius or def.radius * 2 def.damage_radius = def.damage_radius or def.radius * 2
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner") local owner = meta:get_string("owner")
if not def.explode_center and def.ignore_protection ~= true then if not def.explode_center then
minetest.set_node(pos, {name = "tnt:boom"}) minetest.set_node(pos, {name = "tnt:boom_center"})
end end
local sound = def.sound or "tnt_explode" local sound = def.sound or "tnt_explode"
minetest.sound_play(sound, {pos = pos, gain = 2.5, if def.sound then
max_hear_distance = math.min(def.radius * 20, 128)}, true) minetest.sound_play(sound, {pos = pos, gain = 2.5,
local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection, max_hear_distance = math.min(def.radius * 20, 128)}, true)
end
local drops, radius = tnt_explode(pos, def.radius,
def.ignore_on_blast, owner, def.explode_center) def.ignore_on_blast, owner, def.explode_center)
-- append entity drops -- append entity drops
local damage_radius = (radius / math.max(1, def.radius)) * def.damage_radius local damage_radius = (radius / math.max(1, def.radius)) * def.damage_radius
@ -422,276 +326,41 @@ function tnt.boom(pos, def)
if not def.disable_drops then if not def.disable_drops then
eject_drops(drops, pos, radius) eject_drops(drops, pos, radius)
end end
add_effects(pos, radius, drops)
minetest.log("action", "A TNT explosion occurred at " .. minetest.pos_to_string(pos) .. minetest.log("action", "A TNT explosion occurred at " .. minetest.pos_to_string(pos) ..
" with radius " .. radius) " with radius " .. radius)
end end
minetest.register_node("tnt:boom", { minetest.register_node("tnt:boom_center", {
drawtype = "airlike", drawtype = "airlike",
light_source = default.LIGHT_MAX, light_source = 14,
walkable = false, walkable = false,
drop = "", drop = "",
groups = {dig_immediate = 3}, groups = {dig_immediate = 3},
-- unaffected by explosions -- unaffected by explosions
on_blast = function() end, on_blast = function() end,
}) --remove the tnt node after a while
minetest.register_node("tnt:gunpowder", {
description = S("Gun Powder"),
drawtype = "raillike",
paramtype = "light",
is_ground_content = false,
sunlight_propagates = true,
walkable = false,
tiles = {
"tnt_gunpowder_straight.png",
"tnt_gunpowder_curved.png",
"tnt_gunpowder_t_junction.png",
"tnt_gunpowder_crossing.png"
},
inventory_image = "tnt_gunpowder_inventory.png",
wield_image = "tnt_gunpowder_inventory.png",
selection_box = {
type = "fixed",
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
groups = {dig_immediate = 2, attached_node = 1, flammable = 5,
connect_to_raillike = minetest.raillike_group("gunpowder")},
sounds = default.node_sound_leaves_defaults(),
on_punch = function(pos, node, puncher)
if puncher:get_wielded_item():get_name() == "default:torch" then
minetest.set_node(pos, {name = "tnt:gunpowder_burning"})
minetest.log("action", puncher:get_player_name() ..
" ignites tnt:gunpowder at " ..
minetest.pos_to_string(pos))
end
end,
on_blast = function(pos, intensity)
minetest.set_node(pos, {name = "tnt:gunpowder_burning"})
end,
on_burn = function(pos)
minetest.set_node(pos, {name = "tnt:gunpowder_burning"})
end,
on_ignite = function(pos, igniter)
minetest.set_node(pos, {name = "tnt:gunpowder_burning"})
end,
})
minetest.register_node("tnt:gunpowder_burning", {
drawtype = "raillike",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
light_source = 5,
tiles = {{
name = "tnt_gunpowder_burning_straight_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 1,
}
},
{
name = "tnt_gunpowder_burning_curved_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 1,
}
},
{
name = "tnt_gunpowder_burning_t_junction_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 1,
}
},
{
name = "tnt_gunpowder_burning_crossing_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 1,
}
}},
selection_box = {
type = "fixed",
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
drop = "",
groups = {
dig_immediate = 2,
attached_node = 1,
connect_to_raillike = minetest.raillike_group("gunpowder")
},
sounds = default.node_sound_leaves_defaults(),
on_timer = function(pos, elapsed) on_timer = function(pos, elapsed)
for dx = -1, 1 do
for dz = -1, 1 do
if math.abs(dx) + math.abs(dz) == 1 then
for dy = -1, 1 do
tnt.burn({
x = pos.x + dx,
y = pos.y + dy,
z = pos.z + dz,
})
end
end
end
end
minetest.remove_node(pos) minetest.remove_node(pos)
minetest.check_for_falling(pos)
end, end,
-- unaffected by explosions -- countdown timer
on_blast = function() end,
on_construct = function(pos) on_construct = function(pos)
minetest.sound_play("tnt_gunpowder_burning", {pos = pos, minetest.get_node_timer(pos):start(3)
gain = 2}, true)
minetest.get_node_timer(pos):start(1)
end, end,
}) })
minetest.register_craft({ minetest.register_node("tnt:instaboom", {
output = "tnt:gunpowder 5", drawtype = "airlike",
type = "shapeless", light_source = 14,
recipe = {"default:coal_lump", "default:gravel"} walkable = false,
}) drop = "",
on_construct = function(pos)
minetest.register_craftitem("tnt:tnt_stick", { tnt.boom(pos, {
description = S("TNT Stick"), radius = 12,
inventory_image = "tnt_tnt_stick.png", damage_radius = 0,
groups = {flammable = 5}, disable_drops = true,
}) ignore_on_blast = true,
explode_center = true,
if enable_tnt then
minetest.register_craft({
output = "tnt:tnt_stick 2",
recipe = {
{"tnt:gunpowder", "", "tnt:gunpowder"},
{"tnt:gunpowder", "default:paper", "tnt:gunpowder"},
{"tnt:gunpowder", "", "tnt:gunpowder"},
}
})
minetest.register_craft({
output = "tnt:tnt",
recipe = {
{"tnt:tnt_stick", "tnt:tnt_stick", "tnt:tnt_stick"},
{"tnt:tnt_stick", "tnt:tnt_stick", "tnt:tnt_stick"},
{"tnt:tnt_stick", "tnt:tnt_stick", "tnt:tnt_stick"}
}
})
minetest.register_abm({
label = "TNT ignition",
nodenames = {"group:tnt", "tnt:gunpowder"},
neighbors = {"fire:basic_flame", "default:lava_source", "default:lava_flowing"},
interval = 4,
chance = 1,
action = function(pos, node)
tnt.burn(pos, node.name)
end,
})
end
function tnt.register_tnt(def)
local name
if not def.name:find(':') then
name = "tnt:" .. def.name
else
name = def.name
def.name = def.name:match(":([%w_]+)")
end
if not def.tiles then def.tiles = {} end
local tnt_top = def.tiles.top or def.name .. "_top.png"
local tnt_bottom = def.tiles.bottom or def.name .. "_bottom.png"
local tnt_side = def.tiles.side or def.name .. "_side.png"
local tnt_burning = def.tiles.burning or def.name .. "_top_burning_animated.png"
if not def.damage_radius then def.damage_radius = def.radius * 2 end
if enable_tnt then
minetest.register_node(":" .. name, {
description = def.description,
tiles = {tnt_top, tnt_bottom, tnt_side},
is_ground_content = false,
groups = {dig_immediate = 2, mesecon = 2, tnt = 1, flammable = 5},
sounds = default.node_sound_wood_defaults(),
after_place_node = function(pos, placer)
if placer:is_player() then
local meta = minetest.get_meta(pos)
meta:set_string("owner", placer:get_player_name())
end
end,
on_punch = function(pos, node, puncher)
if puncher:get_wielded_item():get_name() == "default:torch" then
minetest.swap_node(pos, {name = name .. "_burning"})
minetest.registered_nodes[name .. "_burning"].on_construct(pos)
minetest.log("action", puncher:get_player_name() ..
" ignites " .. node.name .. " at " ..
minetest.pos_to_string(pos))
end
end,
on_blast = function(pos, intensity)
minetest.after(0.1, function()
tnt.boom(pos, def)
end)
end,
mesecons = {effector =
{action_on =
function(pos)
tnt.boom(pos, def)
end
}
},
on_burn = function(pos)
minetest.swap_node(pos, {name = name .. "_burning"})
minetest.registered_nodes[name .. "_burning"].on_construct(pos)
end,
on_ignite = function(pos, igniter)
minetest.swap_node(pos, {name = name .. "_burning"})
minetest.registered_nodes[name .. "_burning"].on_construct(pos)
end,
}) })
end end,
})
minetest.register_node(":" .. name .. "_burning", {
tiles = {
{
name = tnt_burning,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 1,
}
},
tnt_bottom, tnt_side
},
light_source = 5,
drop = "",
sounds = default.node_sound_wood_defaults(),
groups = {falling_node = 1},
on_timer = function(pos, elapsed)
tnt.boom(pos, def)
end,
-- unaffected by explosions
on_blast = function() end,
on_construct = function(pos)
minetest.sound_play("tnt_ignite", {pos = pos}, true)
minetest.get_node_timer(pos):start(4)
minetest.check_for_falling(pos)
end,
})
end
tnt.register_tnt({
name = "tnt:tnt",
description = S("TNT"),
radius = tnt_radius,
})

@ -26,47 +26,6 @@ DEALINGS IN THE SOFTWARE.
For more details: For more details:
https://opensource.org/licenses/MIT https://opensource.org/licenses/MIT
===================================
Licenses of media
-----------------
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
Copyright (C) 2014-2016 BlockMen
Copyright (C) 2014-2016 ShadowNinja
Copyright (C) 2015-2016 Wuzzy
Copyright (C) 2016 sofar (sofar@foo-projects.org)
Copyright (C) 2018 paramat
You are free to:
Share — copy and redistribute the material in any medium or format.
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
The licensor cannot revoke these freedoms as long as you follow the license terms.
Under the following terms:
Attribution — You must give appropriate credit, provide a link to the license, and
indicate if changes were made. You may do so in any reasonable manner, but not in any way
that suggests the licensor endorses you or your use.
ShareAlike — If you remix, transform, or build upon the material, you must distribute
your contributions under the same license as the original.
No additional restrictions — You may not apply legal terms or technological measures that
legally restrict others from doing anything the license permits.
Notices:
You do not have to comply with the license for elements of the material in the public
domain or where your use is permitted by an applicable exception or limitation.
No warranties are given. The license may not give you all of the permissions necessary
for your intended use. For example, other rights such as publicity, privacy, or moral
rights may limit how you use the material.
For more details:
http://creativecommons.org/licenses/by-sa/3.0/
====================================================
CC0 1.0 Universal (CC0 1.0) Public Domain Dedication CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
for audio files (found in sounds folder) for audio files (found in sounds folder)

@ -1,4 +0,0 @@
# textdomain: tnt
Gun Powder=
TNT Stick=
TNT=

@ -1,4 +0,0 @@
# textdomain: tnt
Gun Powder=Schießpulver
TNT Stick=TNT-Stange
TNT=TNT

@ -1,4 +0,0 @@
# textdomain: tnt
Gun Powder=Pólvora
TNT Stick=Cartucho de TNT
TNT=TNT

@ -1,4 +0,0 @@
# textdomain: tnt
Gun Powder=Poudre à canon
TNT Stick=Bâton de TNT
TNT=TNT

@ -1,4 +0,0 @@
# textdomain: tnt
Gun Powder=Bubuk Mesiu
TNT Stick=Tongkat TNT
TNT=TNT

@ -1,4 +0,0 @@
# textdomain: tnt
Gun Powder=Polvere da sparo
TNT Stick=Candelotto di TNT
TNT=TNT

@ -1,4 +0,0 @@
# textdomain: tnt
Gun Powder=Serbuk Senjata Api
TNT Stick=Batang TNT
TNT=TNT

@ -1,4 +0,0 @@
# textdomain: tnt
Gun Powder=Порох
TNT Stick=Тротиловая Палка
TNT=Тротил

@ -1,4 +0,0 @@
# textdomain: tnt
Gun Powder=Krut
TNT Stick=Dynamitpinne
TNT=Dynamit

@ -1,4 +0,0 @@
# textdomain: tnt
Gun Powder=火药粉
TNT Stick=炸药棒
TNT=炸药包

@ -1,4 +0,0 @@
# textdomain: tnt
Gun Powder=火藥粉
TNT Stick=炸藥棒
TNT=炸藥包

@ -1,3 +1,3 @@
name = tnt name = tnt
description = Minetest Game mod: tnt description = Minetest Game mod: tnt
depends = default, fire optional_depends = fire

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 855 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 432 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 672 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 B