From 8863527bb62c0cb3bf19d6d2acf6ecb817e61cc2 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 3 Apr 2020 21:41:26 +0200 Subject: [PATCH 1/7] Fix respawn not working at all when suitable position was not found The player should always be teleported away when they die and we can still fall back to the engine spawning code. --- mods/spawn/init.lua | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mods/spawn/init.lua b/mods/spawn/init.lua index 0e1261e6..12c957f9 100644 --- a/mods/spawn/init.lua +++ b/mods/spawn/init.lua @@ -135,6 +135,7 @@ local function on_spawn(player) if success then player:set_pos(spawn_pos) end + return success end minetest.register_on_newplayer(function(player) @@ -153,7 +154,5 @@ minetest.register_on_respawnplayer(function(player) return end - on_spawn(player) - - return true + return on_spawn(player) end) From 05fad37b3c5d69b792a4b1998e7d2f13d6f8dbe4 Mon Sep 17 00:00:00 2001 From: An0n3m0us Date: Mon, 6 Apr 2020 14:15:50 +0100 Subject: [PATCH 2/7] Sort items into correct categories (#2612) --- game_api.txt | 7 +++++++ mods/creative/inventory.lua | 25 ++++++++++++++++++++++--- mods/doors/init.lua | 8 ++++---- mods/xpanes/init.lua | 4 ++-- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/game_api.txt b/game_api.txt index fda371c6..6d8b08f7 100644 --- a/game_api.txt +++ b/game_api.txt @@ -103,6 +103,13 @@ The contents of `creative.formspec_add` is appended to every creative inventory page. Mods can use it to add additional formspec elements onto the default creative inventory formspec to be drawn after each update. +Group overrides can be used for any registered item, node or tool. Use one of +the groups stated below to pick which category it will appear in. + + node = 1 -- Appears in the Nodes category + tool = 1 -- Appears in the Tools category + craftitem = 1 -- Appears in the Items category + Chests API ---------- diff --git a/mods/creative/inventory.lua b/mods/creative/inventory.lua index 2e93e5ff..ad82a3ea 100644 --- a/mods/creative/inventory.lua +++ b/mods/creative/inventory.lua @@ -199,10 +199,29 @@ function creative.register_tab(name, title, items) }) end +-- Sort registered items +local registered_nodes = {} +local registered_tools = {} +local registered_craftitems = {} + +minetest.register_on_mods_loaded(function() + for name, def in pairs(minetest.registered_items) do + local group = def.groups or {} + + if group.node or minetest.registered_nodes[name] then + registered_nodes[name] = def + elseif group.tool or minetest.registered_tools[name] then + registered_tools[name] = def + elseif group.craftitem or minetest.registered_craftitems[name] then + registered_craftitems[name] = def + end + end +end) + creative.register_tab("all", S("All"), minetest.registered_items) -creative.register_tab("nodes", S("Nodes"), minetest.registered_nodes) -creative.register_tab("tools", S("Tools"), minetest.registered_tools) -creative.register_tab("craftitems", S("Items"), minetest.registered_craftitems) +creative.register_tab("nodes", S("Nodes"), registered_nodes) +creative.register_tab("tools", S("Tools"), registered_tools) +creative.register_tab("craftitems", S("Items"), registered_craftitems) local old_homepage_name = sfinv.get_homepage_name function sfinv.get_homepage_name(player) diff --git a/mods/doors/init.lua b/mods/doors/init.lua index ee4a188c..5bfa1d42 100644 --- a/mods/doors/init.lua +++ b/mods/doors/init.lua @@ -457,7 +457,7 @@ doors.register("door_wood", { tiles = {{ name = "doors_door_wood.png", backface_culling = true }}, description = S("Wooden Door"), inventory_image = "doors_item_wood.png", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + groups = {node = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, recipe = { {"group:wood", "group:wood"}, {"group:wood", "group:wood"}, @@ -470,7 +470,7 @@ doors.register("door_steel", { description = S("Steel Door"), inventory_image = "doors_item_steel.png", protected = true, - groups = {cracky = 1, level = 2}, + groups = {node = 1, cracky = 1, level = 2}, sounds = default.node_sound_metal_defaults(), sound_open = "doors_steel_door_open", sound_close = "doors_steel_door_close", @@ -485,7 +485,7 @@ doors.register("door_glass", { tiles = {"doors_door_glass.png"}, description = S("Glass Door"), inventory_image = "doors_item_glass.png", - groups = {cracky=3, oddly_breakable_by_hand=3}, + groups = {node = 1, cracky=3, oddly_breakable_by_hand=3}, sounds = default.node_sound_glass_defaults(), sound_open = "doors_glass_door_open", sound_close = "doors_glass_door_close", @@ -500,7 +500,7 @@ doors.register("door_obsidian_glass", { tiles = {"doors_door_obsidian_glass.png"}, description = S("Obsidian Glass Door"), inventory_image = "doors_item_obsidian_glass.png", - groups = {cracky=3}, + groups = {node = 1, cracky=3}, sounds = default.node_sound_glass_defaults(), sound_open = "doors_glass_door_open", sound_close = "doors_glass_door_close", diff --git a/mods/xpanes/init.lua b/mods/xpanes/init.lua index 4f4f0f56..e195dbbc 100644 --- a/mods/xpanes/init.lua +++ b/mods/xpanes/init.lua @@ -223,7 +223,7 @@ if minetest.get_modpath("doors") then description = S("Steel Bar Door"), inventory_image = "xpanes_item_steel_bar.png", protected = true, - groups = {cracky = 1, level = 2}, + groups = {node = 1, cracky = 1, level = 2}, sounds = default.node_sound_metal_defaults(), sound_open = "xpanes_steel_bar_door_open", sound_close = "xpanes_steel_bar_door_close", @@ -241,7 +241,7 @@ if minetest.get_modpath("doors") then tile_front = "xpanes_trapdoor_steel_bar.png", tile_side = "xpanes_trapdoor_steel_bar_side.png", protected = true, - groups = {cracky = 1, level = 2, door = 1}, + groups = {node = 1, cracky = 1, level = 2, door = 1}, sounds = default.node_sound_metal_defaults(), sound_open = "xpanes_steel_bar_door_open", sound_close = "xpanes_steel_bar_door_close", From 7fc7fa4843387f83bbc43276ca8857d787b9d3fc Mon Sep 17 00:00:00 2001 From: An0n3m0us Date: Mon, 6 Apr 2020 14:19:52 +0100 Subject: [PATCH 3/7] Transform brick top texture to align bricks correctly (#2607) --- mods/default/nodes.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index cd465934..601014df 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -2816,7 +2816,10 @@ minetest.register_node("default:brick", { description = S("Brick Block"), paramtype2 = "facedir", place_param2 = 0, - tiles = {"default_brick.png"}, + tiles = { + "default_brick.png^[transformFX", + "default_brick.png", + }, is_ground_content = false, groups = {cracky = 3}, sounds = default.node_sound_stone_defaults(), From 7d230fdbf88cb41b458a83351fa886e446f86cf7 Mon Sep 17 00:00:00 2001 From: Maksim Date: Mon, 6 Apr 2020 15:22:08 +0200 Subject: [PATCH 4/7] Enable player animation when Right Click (#2622) --- mods/player_api/api.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mods/player_api/api.lua b/mods/player_api/api.lua index 4cb3944b..c1e578c9 100644 --- a/mods/player_api/api.lua +++ b/mods/player_api/api.lua @@ -106,7 +106,7 @@ function minetest.calculate_knockback(player, ...) end -- Check each player and apply animations -minetest.register_globalstep(function(dtime) +minetest.register_globalstep(function() for _, player in pairs(minetest.get_connected_players()) do local name = player:get_player_name() local model_name = player_model[name] @@ -134,13 +134,13 @@ minetest.register_globalstep(function(dtime) player_anim[name] = nil player_sneak[name] = controls.sneak end - if controls.LMB then + if controls.LMB or controls.RMB then player_set_animation(player, "walk_mine", animation_speed_mod) else player_set_animation(player, "walk", animation_speed_mod) end - elseif controls.LMB then - player_set_animation(player, "mine") + elseif controls.LMB or controls.RMB then + player_set_animation(player, "mine", animation_speed_mod) else player_set_animation(player, "stand", animation_speed_mod) end From 4243d288464f9a2d364643ad27c21965c65bda5c Mon Sep 17 00:00:00 2001 From: Paramat Date: Mon, 6 Apr 2020 21:03:57 +0100 Subject: [PATCH 5/7] Clarify descriptions of dry grass, dry dirt --- mods/default/nodes.lua | 10 +++++----- mods/farming/nodes.lua | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index 601014df..3b8b5115 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -458,7 +458,7 @@ minetest.register_node("default:dirt_with_grass_footsteps", { }) minetest.register_node("default:dirt_with_dry_grass", { - description = S("Dirt with Dry Grass"), + description = S("Dirt with Savanna Grass"), tiles = {"default_dry_grass.png", "default_dirt.png", {name = "default_dirt.png^default_dry_grass_side.png", @@ -513,14 +513,14 @@ minetest.register_node("default:dirt_with_coniferous_litter", { }) minetest.register_node("default:dry_dirt", { - description = S("Dry Dirt"), + description = S("Savanna Dirt"), tiles = {"default_dry_dirt.png"}, groups = {crumbly = 3, soil = 1}, sounds = default.node_sound_dirt_defaults(), }) minetest.register_node("default:dry_dirt_with_dry_grass", { - description = S("Dry Dirt with Dry Grass"), + description = S("Savanna Dirt with Savanna Grass"), tiles = {"default_dry_grass.png", "default_dry_dirt.png", {name = "default_dry_dirt.png^default_dry_grass_side.png", tileable_vertical = false}}, @@ -1497,7 +1497,7 @@ end minetest.register_node("default:dry_grass_1", { - description = S("Dry Grass"), + description = S("Savanna Grass"), drawtype = "plantlike", waving = 1, tiles = {"default_dry_grass_1.png"}, @@ -1526,7 +1526,7 @@ minetest.register_node("default:dry_grass_1", { for i = 2, 5 do minetest.register_node("default:dry_grass_" .. i, { - description = S("Dry Grass"), + description = S("Savanna Grass"), drawtype = "plantlike", waving = 1, tiles = {"default_dry_grass_" .. i .. ".png"}, diff --git a/mods/farming/nodes.lua b/mods/farming/nodes.lua index 22dd51c8..051f4ef9 100644 --- a/mods/farming/nodes.lua +++ b/mods/farming/nodes.lua @@ -86,7 +86,7 @@ minetest.register_node("farming:soil_wet", { }) minetest.register_node("farming:dry_soil", { - description = S("Dry Soil"), + description = S("Savanna Soil"), tiles = {"default_dry_dirt.png^farming_soil.png", "default_dry_dirt.png"}, drop = "default:dry_dirt", groups = {crumbly=3, not_in_creative_inventory=1, soil=2, grassland = 1, field = 1}, @@ -99,7 +99,7 @@ minetest.register_node("farming:dry_soil", { }) minetest.register_node("farming:dry_soil_wet", { - description = S("Wet Dry Soil"), + description = S("Wet Savanna Soil"), tiles = {"default_dry_dirt.png^farming_soil_wet.png", "default_dry_dirt.png^farming_soil_wet_side.png"}, drop = "default:dry_dirt", groups = {crumbly=3, not_in_creative_inventory=1, soil=3, wet = 1, grassland = 1, field = 1}, From 720b24ed2d03d84f33427dc75bea0684a36b68c5 Mon Sep 17 00:00:00 2001 From: Paramat Date: Mon, 6 Apr 2020 21:05:07 +0100 Subject: [PATCH 6/7] Weather mod: Tune cloud density variation Previously, cloud density was too low at medium humidity. Tune cloud density variation to match the default/classic value at humidity midvalue 50. Tune the lower limit of cloud density that occurs at extreme low humidity. Increase minimum cloud thickness to 2 nodes. Add comments. --- mods/weather/init.lua | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/mods/weather/init.lua b/mods/weather/init.lua index c0d1098f..3b9a305a 100644 --- a/mods/weather/init.lua +++ b/mods/weather/init.lua @@ -82,18 +82,26 @@ local function update_clouds() nobj_speedx = nobj_speedx or minetest.get_perlin(np_speedx) nobj_speedz = nobj_speedz or minetest.get_perlin(np_speedz) - local n_density = nobj_density:get_2d({x = time, y = 0}) - local n_thickness = nobj_thickness:get_2d({x = time, y = 0}) - local n_speedx = nobj_speedx:get_2d({x = time, y = 0}) - local n_speedz = nobj_speedz:get_2d({x = time, y = 0}) + local n_density = nobj_density:get_2d({x = time, y = 0}) -- 0 to 1 + local n_thickness = nobj_thickness:get_2d({x = time, y = 0}) -- 0 to 1 + local n_speedx = nobj_speedx:get_2d({x = time, y = 0}) -- -1 to 1 + local n_speedz = nobj_speedz:get_2d({x = time, y = 0}) -- -1 to 1 for _, player in ipairs(minetest.get_connected_players()) do local humid = minetest.get_humidity(player:get_pos()) + -- Default and classic density value is 0.4, make this happen + -- at humidity midvalue 50 when n_density is at midvalue 0.5. + -- density_max = 0.25 at humid = 0. + -- density_max = 0.8 at humid = 50. + -- density_max = 1.35 at humid = 100. + local density_max = 0.8 + ((humid - 50) / 50) * 0.55 player:set_clouds({ - density = rangelim(humid / 100, 0.25, 1.0) * n_density, + -- Range limit density_max to always have occasional + -- small scattered clouds at extreme low humidity. + density = rangelim(density_max, 0.2, 1.0) * n_density, thickness = math.max(math.floor( rangelim(32 * humid / 100, 8, 32) * n_thickness - ), 1), + ), 2), speed = {x = n_speedx * 4, z = n_speedz * 4}, }) end From 03c9aed2212099c764912e4c7b1c86679237f00d Mon Sep 17 00:00:00 2001 From: Maksim Date: Mon, 6 Apr 2020 22:09:39 +0200 Subject: [PATCH 7/7] Fire mod: Code cleanup, compress textures --- mods/fire/init.lua | 165 ++++++------------ mods/fire/textures/fire_basic_flame.png | Bin 646 -> 594 bytes .../textures/fire_basic_flame_animated.png | Bin 1051 -> 1029 bytes mods/fire/textures/fire_flint_steel.png | Bin 459 -> 205 bytes 4 files changed, 54 insertions(+), 111 deletions(-) diff --git a/mods/fire/init.lua b/mods/fire/init.lua index c35207e2..298063e5 100644 --- a/mods/fire/init.lua +++ b/mods/fire/init.lua @@ -1,15 +1,12 @@ -- fire/init.lua -- Global namespace for functions - fire = {} -- Load support for MT game translation. local S = minetest.get_translator("fire") - -- 'Enable fire' setting - local fire_enabled = minetest.settings:get_bool("enable_fire") if fire_enabled == nil then -- enable_fire setting not specified, check for disable_fire @@ -27,12 +24,9 @@ end -- -- Flood flame function - -local function flood_flame(pos, oldnode, newnode) +local function flood_flame(pos, _, newnode) -- Play flame extinguish sound if liquid is not an 'igniter' - local nodedef = minetest.registered_items[newnode.name] - if not (nodedef and nodedef.groups and - nodedef.groups.igniter and nodedef.groups.igniter > 0) then + if minetest.get_item_group(newnode.name, "igniter") == 0 then minetest.sound_play("fire_extinguish_flame", {pos = pos, max_hear_distance = 16, gain = 0.15}, true) end @@ -41,19 +35,16 @@ local function flood_flame(pos, oldnode, newnode) end -- Flame nodes - -minetest.register_node("fire:basic_flame", { +local fire_node = { drawtype = "firelike", - tiles = { - { - name = "fire_basic_flame_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1 - }, - }, + tiles = {{ + name = "fire_basic_flame_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1 + }} }, inventory_image = "fire_basic_flame.png", paramtype = "light", @@ -63,61 +54,35 @@ minetest.register_node("fire:basic_flame", { sunlight_propagates = true, floodable = true, damage_per_second = 4, - groups = {igniter = 2, dig_immediate = 3, not_in_creative_inventory = 1}, + groups = {igniter = 2, dig_immediate = 3, fire = 1}, drop = "", + on_flood = flood_flame +} - on_timer = function(pos) - local f = minetest.find_node_near(pos, 1, {"group:flammable"}) - if not fire_enabled or not f then - minetest.remove_node(pos) - return - end - -- Restart timer - return true - end, +-- Basic flame node +local flame_fire_node = table.copy(fire_node) +flame_fire_node.groups.not_in_creative_inventory = 1 +flame_fire_node.on_timer = function(pos) + if not minetest.find_node_near(pos, 1, {"group:flammable"}) then + minetest.remove_node(pos) + return + end + -- Restart timer + return true +end +flame_fire_node.on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(30, 60)) +end - on_construct = function(pos) - if not fire_enabled then - minetest.remove_node(pos) - else - minetest.get_node_timer(pos):start(math.random(30, 60)) - end - end, +minetest.register_node("fire:basic_flame", flame_fire_node) - on_flood = flood_flame, -}) +-- Permanent flame node +local permanent_fire_node = table.copy(fire_node) +permanent_fire_node.description = S("Permanent Flame") -minetest.register_node("fire:permanent_flame", { - description = S("Permanent Flame"), - drawtype = "firelike", - tiles = { - { - name = "fire_basic_flame_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1 - }, - }, - }, - inventory_image = "fire_basic_flame.png", - paramtype = "light", - light_source = 13, - walkable = false, - buildable_to = true, - sunlight_propagates = true, - floodable = true, - damage_per_second = 4, - groups = {igniter = 2, dig_immediate = 3}, - drop = "", - - on_flood = flood_flame, -}) - - --- Flint and steel +minetest.register_node("fire:permanent_flame", permanent_fire_node) +-- Flint and Steel minetest.register_tool("fire:flint_and_steel", { description = S("Flint and Steel"), inventory_image = "fire_flint_steel.png", @@ -125,11 +90,8 @@ minetest.register_tool("fire:flint_and_steel", { on_use = function(itemstack, user, pointed_thing) local sound_pos = pointed_thing.above or user:get_pos() - minetest.sound_play( - "fire_flint_and_steel", - {pos = sound_pos, gain = 0.5, max_hear_distance = 8}, - true - ) + minetest.sound_play("fire_flint_and_steel", + {pos = sound_pos, gain = 0.5, max_hear_distance = 8}, true) local player_name = user:get_player_name() if pointed_thing.type == "node" then local node_under = minetest.get_node(pointed_thing.under).name @@ -153,10 +115,11 @@ minetest.register_tool("fire:flint_and_steel", { -- Wear tool local wdef = itemstack:get_definition() itemstack:add_wear(1000) + -- Tool break sound if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then - minetest.sound_play(wdef.sound.breaks, {pos = sound_pos, - gain = 0.5}, true) + minetest.sound_play(wdef.sound.breaks, + {pos = sound_pos, gain = 0.5}, true) end return itemstack end @@ -170,23 +133,21 @@ minetest.register_craft({ } }) - -- Override coalblock to enable permanent flame above -- Coalblock is non-flammable to avoid unwanted basic_flame nodes - minetest.override_item("default:coalblock", { - after_destruct = function(pos, oldnode) + after_destruct = function(pos) pos.y = pos.y + 1 if minetest.get_node(pos).name == "fire:permanent_flame" then minetest.remove_node(pos) end end, - on_ignite = function(pos, igniter) + on_ignite = function(pos) local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z} if minetest.get_node(flame_pos).name == "air" then minetest.set_node(flame_pos, {name = "fire:permanent_flame"}) end - end, + end }) @@ -194,24 +155,18 @@ minetest.override_item("default:coalblock", { -- Sound -- -local flame_sound = minetest.settings:get_bool("flame_sound") -if flame_sound == nil then - -- Enable if no setting present - flame_sound = true -end +-- Enable if no setting present +local flame_sound = minetest.settings:get_bool("flame_sound", true) if flame_sound then - local handles = {} local timer = 0 -- Parameters - local radius = 8 -- Flame node search radius around player local cycle = 3 -- Cycle time for sound updates -- Update sound for player - function fire.update_player_sound(player) local player_name = player:get_player_name() -- Search for flame nodes in radius around player @@ -263,16 +218,13 @@ if flame_sound then fposmid = vector.divide(vector.add(fposmin, fposmax), 2) end -- Play sound - local handle = minetest.sound_play( - "fire_fire", - { - pos = fposmid, - to_player = player_name, - gain = math.min(0.06 * (1 + flames * 0.125), 0.18), - max_hear_distance = 32, - loop = true, -- In case of lag - } - ) + local handle = minetest.sound_play("fire_fire", { + pos = fposmid, + to_player = player_name, + gain = math.min(0.06 * (1 + flames * 0.125), 0.18), + max_hear_distance = 32, + loop = true -- In case of lag + }) -- Store sound handle for this player if handle then handles[player_name] = handle @@ -281,7 +233,6 @@ if flame_sound then end -- Cycle for updating players sounds - minetest.register_globalstep(function(dtime) timer = timer + dtime if timer < cycle then @@ -296,7 +247,6 @@ if flame_sound then end) -- Stop sound and clear handle on player leave - minetest.register_on_leaveplayer(function(player) local player_name = player:get_player_name() if handles[player_name] then @@ -308,19 +258,14 @@ end -- Deprecated function kept temporarily to avoid crashes if mod fire nodes call it - -function fire.update_sounds_around(pos) -end - +function fire.update_sounds_around() end -- -- ABMs -- if fire_enabled then - -- Ignite neighboring nodes, add basic flames - minetest.register_abm({ label = "Ignite flame", nodenames = {"group:flammable"}, @@ -333,11 +278,10 @@ if fire_enabled then if p then minetest.set_node(p, {name = "fire:basic_flame"}) end - end, + end }) -- Remove flammable nodes around basic flame - minetest.register_abm({ label = "Remove flammable nodes", nodenames = {"fire:basic_flame"}, @@ -358,7 +302,6 @@ if fire_enabled then minetest.remove_node(p) minetest.check_for_falling(p) end - end, + end }) - end diff --git a/mods/fire/textures/fire_basic_flame.png b/mods/fire/textures/fire_basic_flame.png index 1da0702d85369becb732573b894c97f198246fa9..484bcb1957b80a64bdd670241c8e08b464545a3d 100644 GIT binary patch delta 580 zcmV-K0=xZ&1=0kN8Gix*005AYXf^-<00wkYPE!B?00000Zl(v300069Nkl>MB-sIFQUib-Fc3^_+wP&Z zZQHhO+qP}vZQHhO8~c+pVhn;sd!|htzIv%;B?aP2qbeZm>wi#tWz&Y*K3}`mYDnRc=O=+LNWq?dVuSb3F=^ZtBQL~$>PIFcZla{vipV$aODU156Ze_3Pn7OSh zqYHh}<*je8V1gqZc#WQC38o#%YIuR(i0~^N zfuqu0;SM9RT_>>YgB|ctK;XEApL$5qbW?!)z|C~F37aM{@*n25B#o9|I0@H z-bDPWKmNo$|Diqo$u{!1HTK0Z|AR2}n=kfT%#5)<~VHDOx5nL1y#x@SoJ`2v73a2Fi|NL$L%wYfMUw`@AU;po2|J_>u%2xm2 zPXEA8|Mg4%w@d%gNdKHi=Ve9r$VC6YMDol-_Qyl^q(S?ZKL3wB-p4!lwLAa8I`O1B z|JFJ9v^n^YIsb$?>s2!KeKGlrFZ_Be69tyyC?sfC;yBm`Ee)u za3}GKCFi0e=YPB)-iILYdLYtDAo6q{%#|MbY#r=s9NSVH^k^I9gci#nDYt}_v ztn7LXTydP=0RJYf!96|uav&({Q=h=QLlY7aOh*e#V0000ANTKiY4WK8~JP<|JOrC5ed;%0B;%!|G`A{nlJyqMDVpW?0;$;;eHtSwL0^8289T^k^IDlqvYDL8Czc|G-ZCu1?!h9P?Z!=e!`iPYyg0 z2=ZYng%|-_5fJvrL;vqxs3Z;E$2<0jI>;^SvvJ)HdoDZj&hpVPhW-(XupiUHs|qseRmuqsh09isaQoK_d^ zr7lL?_a2;h4Gtgv%|C%aFr;=68AYf36N>|`mDOotV>P*((qsnbz@=3?%#q4Z3ct=~ zMM~gZE`P)K+R9qB_Qy9oD(YLX9UAUb8ahP|Z4*ee4w{EY$N&EK!wK!PPHOw&H~m59 zDsugoJEbq73;1x$2+k;1VUG_lo*cTp(EC`>M9!4Ic>@Pe_3lEnY zfn-oB4IbfPkv*(H;NGKlM7++Z&*$HaOCDx<$>3KZg1JCKR4+>s9A+cU6(&@Pj)Mt;b z(PS~ZWFP~l?3ub|vlB7j3QClQg^<_jboq&kCJ+dyQ71=2$nB5EMRDm-uR0>hXez4l z4F&*OwK}(vAMIvh8Ua))U9Kb&iH!rNP0cdWd9$z<;Q6GF+{gU;po2^2|f{t3mOkI`w@q@|-XEj4$$GD*u}&=e!`>QXITb z4m=SE%QFGUPyqa{PXEtG>69tvswd8w3iiiC_M}1H$2(gQ5UMu;pI62-00001bW%=J z06^y0W&i*Jc1c7*R7l6{)Yn!TQ5Xf_JxrlGLmzrmKz~65L9rv!M3E?om}t}_Cb6cy z|5g4oLzzXg@&ws)b@tu<);WWjM8UEIJ#(O#0my9tUmRGZ4{rc$wzEH>833Qe!f8ME;}R(qodaOC{&HXF z3UVBx7l76B=-oJ9e*gCKF%oB{{OayI?$Pw*yZRN);^HXz@ch7r$1us#lD?kJH*z>I zH}Yt2>K@QM*2zQ80_0=#Xki@5%skx8!xlt_fPW+@k|Gbk?%`td?^1l&*R-cgrP_5v z^We!NqQq`D1t+*xy#k69W>uX9*`nTsA;#`YG_d7 z@pyRfp?wkx)*1~e=2QG$*cVFY(@JT38+H_t=i@uY{o7$cA)rcS{>Eyx?iA2hhFeZ2 zQ0a6)K$hMHc?eFZ=nP*da=IhK(S+5KSqmwiAKxJVpP!x2d= rMosqr|Ks;Y%a76WW3>DrxBLJAts&A)NM9EG00000NkvXXu0mjfDL(rU diff --git a/mods/fire/textures/fire_flint_steel.png b/mods/fire/textures/fire_flint_steel.png index c262ebc096f471c95e66b33ca3cd44a14494419d..9d32d85b001c0836b969989ffeb7bc16856eb71c 100644 GIT binary patch delta 189 zcmX@je3o&7L_G^L0|Ud`yN`l^lx~1ei0l9V|7~n+qQe3*Q({F#M9PbDyj<*@oSZCx zz*u+f+O<=rOfl8htgf!k&(D`SlRFWpk+CGmFPOpM*^M+H$IsKnF{FYq`2d?lB99{D ziiU~IQv{zKxOa~sg~Q$N<*itTl#Y3G_H7e8A}~ABZ0p?jRudjh+qkW9FVl&H!ux!t p?aA-CIhyxAvO4pIYfTt4!*n*mIRyeM-vW(h@O1TaS?83{1ORHON4Nk0 delta 445 zcmV;u0Yd)G0m}oB7=H)`0000V^Z#K0000DMK}|sb0I`n?{9y$E0004VQb$4o*~u(_ z0000WV@Og>004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006VoOIv z0RI600RN!9r;`8x0XIoRK~y-)#go5F!%z^%Kd)x#4as7Lx_=ZQg9r%@B4o~=(>edv z`w!y!KuVDa($P*C0u~{hAi{I7scp4l>EJE*IPShbj(f&?&oMDLY8nXoM}D1s6^D_3 ze|<3kZdxCvAQ(n|e0EAOjQ-?pusfVyoC7eQ&kwWEM;Jydo)!Q|6jKxhfLB#SgjF_G zRc!-ovOh1EB!A-(bzS=;Nhr&brfC4M*6z0uh7q?bWPmKoD9e)BY=*UV4YC*Dp{_Xz zg0=j~WJ1$4IOhON*LCE14zOOZ=?^K6V}EmX`DvkhTQgTxg@~9{zXwoNoO5Pt2g!J3 z?(QFbFTH2p7zQu^BJ$mWo7S{#YudIostQ1!=cH-sRW^0+O$0v`MFeXts!CB5Ta3Rh naYw2V5#yYrSM+1!zyHP$nva4h^9C`w00000NkvXXu0mjfj*zl<