From cf1bac8a3c5350d3c3118f3fa9dc7a82ae14b7b1 Mon Sep 17 00:00:00 2001 From: Jean-Patrick Guerrero Date: Thu, 22 Jun 2017 10:29:28 +0200 Subject: [PATCH] Formspec overhaul --- areas.lua | 153 ++++++++++++++++---------------- depends.txt | 3 +- init.lua | 60 ++++++------- textures/markers_stone.png | Bin 793 -> 653 bytes textures/markers_stone_side.png | Bin 832 -> 689 bytes 5 files changed, 104 insertions(+), 112 deletions(-) diff --git a/areas.lua b/areas.lua index f804f7f..5e15269 100644 --- a/areas.lua +++ b/areas.lua @@ -51,8 +51,8 @@ markers.get_area_list_formspec = function(ppos, player, mode, pos, mode_data, se -- expects a position in mode_data if( mode=='pos' ) then -- title would be too long for a label - title = 'All areas which contain position..'; - tlabel = '<'..minetest.pos_to_string( mode_data )..'>:'; + title = 'All areas at position: '; + tlabel = minetest.colorize("#FFFF00", minetest.pos_to_string( mode_data )); for id, area in pairs(areas.areas) do @@ -67,7 +67,7 @@ markers.get_area_list_formspec = function(ppos, player, mode, pos, mode_data, se -- expects a playername in mode_data elseif( mode=='player' ) then - title = 'All areas owned by player..'; + title = 'All areas owned by player...'; tlabel = '<'..tostring( mode_data )..'>:'; for id, area in pairs(areas.areas) do @@ -80,7 +80,7 @@ markers.get_area_list_formspec = function(ppos, player, mode, pos, mode_data, se -- expects an area_id in mode_data elseif( mode=='subareas' ) then - title = 'All subareas of area..'; + title = 'All sub-areas of area...'; tlabel = '<'..tostring( areas.areas[ mode_data ].name )..'> ['..tostring( mode_data )..']:'; for id, area in pairs(areas.areas) do @@ -92,8 +92,8 @@ markers.get_area_list_formspec = function(ppos, player, mode, pos, mode_data, se -- show only areas that do not have parents elseif( mode=='main_areas' ) then - title = 'All main areas withhin '..tostring( markers.AREA_RANGE )..' m:'; - tlabel = '*all main areas*'; + title = 'Main areas (within '..tostring( markers.AREA_RANGE )..' m)'; + tlabel = '[main areas]'; for id, area in pairs(areas.areas) do if( not( area.parent ) @@ -110,8 +110,8 @@ markers.get_area_list_formspec = function(ppos, player, mode, pos, mode_data, se elseif( mode=='all' ) then - title = 'All areas withhin '..tostring( markers.AREA_RANGE )..' m:'; - tlabel = '*all areas*'; + title = 'Areas (within '..tostring( markers.AREA_RANGE )..' m)'; + tlabel = '[all areas]'; for id, area in pairs(areas.areas) do if( ( (area.pos1.x >= ppos.x-markers.AREA_RANGE and area.pos1.x <= ppos.x+markers.AREA_RANGE ) @@ -132,17 +132,16 @@ markers.get_area_list_formspec = function(ppos, player, mode, pos, mode_data, se end table.sort(id_list, nearsorter) - local formspec = 'size[10,9]'; + local formspec = 'size[10,8.5]'; title = minetest.formspec_escape( title ); tlabel = minetest.formspec_escape( tlabel ); formspec = formspec.. - "label[0.5,0;"..title.."]".. + "label[0,0;"..title.."]".. "label[4.7,0;"..tlabel.."]".. - "label[0.5,8.5;Doubleclick to select area.]".. - "label[4.7,8.5;Areas found: "..tostring( #id_list )..".]".. - "textlist[0.5,0.5;7,8;markers_area_list_selection;"; + "label[0,8;Areas found: ".. minetest.colorize("#FFFF00", tostring(#id_list)) .."]".. + "textlist[0,0.7;7,7;markers_area_list_selection;" local liste = ''; for i,v in ipairs( id_list ) do @@ -180,18 +179,18 @@ markers.get_area_list_formspec = function(ppos, player, mode, pos, mode_data, se end formspec = formspec.. - markers.show_compass_marker( 8.5, 3.0, false, pos, this_area.pos1, this_area.pos2 ); + markers.show_compass_marker( 8, 3.0, false, pos, this_area.pos1, this_area.pos2 ); if( this_area.parent) then formspec = formspec.. - 'button[8.0,0.5;2,0.5;show_parent;'.. + 'button[3.15,8;4,0.5;show_parent;'.. minetest.formspec_escape( areas.areas[ this_area.parent ].name )..']'; end if( #subareas > 0 ) then formspec = formspec.. - 'button[8.0,1.0;2,0.5;list_subareas;'.. + 'button[3.15,8;4,0.5;list_subareas;'.. minetest.formspec_escape( 'List subareas ('..tostring( #subareas )..')')..']'; end @@ -202,14 +201,15 @@ markers.get_area_list_formspec = function(ppos, player, mode, pos, mode_data, se minetest.formspec_escape( this_area.owner..'\'s areas')..']'; else formspec = formspec.. - 'button[8.0,1.5;2,0.5;list_player_areas;'.. + 'button[3.15,8;4,0.5;list_player_areas;'.. minetest.formspec_escape( this_area.owner..'\'s areas')..']'; end end formspec = formspec.. - 'button[8.0,8.5;2,0.5;list_main_areas;List all main areas]'; + 'button[3.15,8;4,0.5;list_main_areas;List all main areas]' .. + default.gui_bg_img -- we need to remember especially the id_list - else it would be impossible to know what the -- player selected @@ -249,29 +249,27 @@ markers.get_area_desc_formspec = function( id, player, pos ) is_owner = true; end - local formspec = 'size[10,9]'.. - 'label[2.5,0.0;Area information and management]'.. - 'button_exit[4.7,7.0;1,0.5;abort;OK]'; + local formspec = 'size[10,7]'.. + 'label[0,0.0;' .. minetest.colorize("#FFFF00", "Area information and management") .. ']' -- general information about the area formspec = formspec.. - 'label[0.5,1.0;This is area number ]'.. - 'label[4.7,1.0;'..tostring( id )..']'.. + 'label[0,0.8;Area number: ' ..minetest.colorize("#FFFF00", tostring( id ))..']'.. - 'label[0.5,1.5;The area is called ]'.. - 'label[4.7,1.5;'..minetest.formspec_escape( this_area.name or '-not set-')..']'.. + 'label[0,1.3;Area name: ' ..minetest.colorize("#FFFF00", + minetest.formspec_escape( this_area.name or '-not set-'))..']'.. - 'label[0.5,2.0;It is owned by ]'.. - 'label[4.7,2.0;'..minetest.formspec_escape( this_area.owner)..']'; + 'label[0,1.8;Owned by: ' ..minetest.colorize("#FFFF00", + minetest.formspec_escape( this_area.owner))..']'; -- these functions are only available to the owner of the area if( is_owner ) then formspec = formspec.. - 'button_exit[8.0,0.0;2,0.5;change_owner;Change owner]'.. - 'button_exit[8.0,1.0;2,0.5;delete;Delete]'.. - 'button_exit[8.0,1.5;2,0.5;rename;Rename]'.. - 'button_exit[8.0,2.0;2,0.5;list_player_areas;My areas]'; + 'button_exit[7,0.0;3,1;change_owner;Change owner]'.. + 'button_exit[7,0.8;3,1;delete;Delete area]'.. + 'button_exit[7.0,1.6;3,1;rename;Rename area]'.. + 'button_exit[7.0,6.4;3,1;list_player_areas;My areas]'; -- subareas of own areas can be deleted (but not renamed) elseif( not( is_owner ) @@ -280,28 +278,27 @@ markers.get_area_desc_formspec = function( id, player, pos ) and areas.areas[ this_area.parent ].owner == pname ) then formspec = formspec.. - 'button_exit[8.0,1.0;2,0.5;delete;Delete subarea]'.. - 'button_exit[8.0,2.0;2,0.5;list_player_areas;Player\'s areas]'; + 'button_exit[7.0,1.0;2,0.5;delete;Delete subarea]'.. + 'button_exit[7.0,2.0;2,0.5;list_player_areas;Player\'s areas]'; else formspec = formspec.. - 'button_exit[8.0,2.0;2,0.5;list_player_areas;Player\'s areas]'; + 'button_exit[7.0,2.0;2,0.5;list_player_areas;Player\'s areas]'; end -- players with the areas priv get an extra menu - if( minetest.check_player_privs(pname, {areas=true})) then + if not is_owner and ( minetest.check_player_privs(pname, {areas=true})) then formspec = formspec.. - 'label[8.0,6.0;Admin commands:]'.. - 'button_exit[8.0,6.5;2,0.5;change_owner;Change owner]'.. - 'button_exit[8.0,7.0;2,0.5;delete;Delete]'.. - 'button_exit[8.0,7.5;2,0.5;rename;Rename]'; + 'button_exit[7.0,0;3,1;change_owner;Change owner]'.. + 'button_exit[7.0,0.8;3,1;delete;Delete]'.. + 'button_exit[7.0,1.6;3,1;rename;Rename]'; end -- show subowners and areas with the same coordinates formspec = formspec.. - 'label[0.5,2.5;Further owners of the entire area:]'; + 'label[0,2.3;Sub-owners:]'; local further_owners = {}; for i, area in pairs(areas.areas) do if( i ~= id and @@ -320,15 +317,15 @@ markers.get_area_desc_formspec = function( id, player, pos ) -- deleting subowners is done by deleting their areas if( is_owner ) then formspec = formspec.. - 'button_exit[8.0,2.5;2,0.5;add_owner;Add]'; + 'button_exit[7.0,4.8;3,1;add_owner;Add owner]'; end else formspec = formspec.. - 'label[4.7,2.5;-none-]'; + 'label[2,2.3;-none-]'; if( is_owner ) then formspec = formspec.. - 'button_exit[8.0,2.5;2,0.5;add_owner;Add]'; + 'button_exit[7.0,4.8;3,1;add_owner;Add owner]'; end end @@ -336,7 +333,7 @@ markers.get_area_desc_formspec = function( id, player, pos ) -- is the area a subarea? if( this_area.parent ) then formspec = formspec.. - 'label[0.5,3.0;This area is a sub-area of area]'.. + 'label[0,3.0;This area is a sub-area of area]'.. 'label[4.7,3.0;'..minetest.formspec_escape( areas.areas[ this_area.parent ].name..' ['..this_area.parent..']' )..']'.. 'button_exit[8.0,3.0;2,0.5;show_parent;Show main area]'; end @@ -354,12 +351,11 @@ markers.get_area_desc_formspec = function( id, player, pos ) if( #sub_areas > 0 ) then formspec = formspec.. - 'label[0.5,4.0;Number of defined subareas:]'.. - 'label[4.7,4.0;'..tostring( #sub_areas )..']'.. + 'label[0.5,2.8;Number of defined subareas: ' ..tostring( #sub_areas )..']'.. 'button_exit[8.0,4.0;2,0.5;list_subareas;List subareas]'; else formspec = formspec.. - 'label[0.5,4.0;There are no subareas defined.]'; + 'label[0,2.8;There are no subareas defined.]'; end @@ -369,16 +365,19 @@ markers.get_area_desc_formspec = function( id, player, pos ) local length_z = (math.abs( this_area.pos2.z - this_area.pos1.z )+1); formspec = formspec.. - 'label[0.5,4.5;The area extends from]'.. - 'label[4.7,4.5;'..minetest.pos_to_string( this_area.pos1 )..' to '..minetest.pos_to_string( this_area.pos2 )..'.]'.. - 'label[4.7,4.75;It spans '..tostring( length_x ).. + 'label[0,3.3;The area extends from '.. + minetest.colorize("#FFFF00", minetest.pos_to_string( this_area.pos1 )).. + ' to '.. + minetest.colorize("#FFFF00", minetest.pos_to_string( this_area.pos2 ))..'.]'.. + 'label[0,3.8;It spans '..tostring( length_x ).. ' x '..tostring( length_z ).. - ' = '..tostring( length_x * length_z ).. - ' m^2. Height: '..tostring( length_y )..' m.]'; + ' m = '..tostring( length_x * length_z ).. + ' m². Height: '..tostring( length_y )..' m.]'; formspec = formspec.. - markers.show_compass_marker( 2.0, 7.0, true, pos, this_area.pos1, this_area.pos2 ); + markers.show_compass_marker( 2.0, 6.0, true, pos, this_area.pos1, this_area.pos2 ) .. + default.gui_bg_img -- TODO: buy / sell button @@ -419,17 +418,16 @@ markers.show_compass_marker = function( col_offset, row_offset, with_text, pos, if( with_text ) then formspec = formspec.. - 'label[0.5,5.5;Dimensions of the area in relation to..]'.. --- TODO: check if there is a marker; else write 'position you clicked on' - 'label[4.7,5.5;the marker at '..minetest.pos_to_string( pos )..':]'.. - 'button_exit[8.0,5.5;2,0.5;list_areas_at;Local areas]'; + 'label[0,4.5;Area dimensions from marker position at '.. + minetest.colorize("#FFFF00", minetest.pos_to_string( pos ))..':]'.. + 'button_exit[7.0,5.6;3,1;list_areas_at;Local areas]'; end formspec = formspec.. - 'image['..col_offset..','..row_offset..';1,1;markers_stone.png]'.. - 'label['..(col_offset-0.8)..','..(row_offset+0.05)..';'..tostring( pos.x - pos1.x )..' m W]'.. - 'label['..(col_offset+1.0)..','..(row_offset+0.05)..';'..tostring( pos2.x - pos.x )..' m E]'.. - 'label['..(col_offset+0.1)..','..(row_offset+0.80)..';'..tostring( pos.z - pos1.z )..' m S]'.. - 'label['..(col_offset+0.1)..','..(row_offset-0.80)..';'..tostring( pos2.z - pos.z )..' m N]'; + 'image['..(col_offset+0.1)..','..(row_offset-0.1)..';1,1;markers_stone.png]'.. + 'label['..(col_offset-0.8)..','..(row_offset+0.05)..';'..tostring( pos.x - pos1.x )..' m. ' .. minetest.colorize("#FFFF00", "W") .. ']'.. + 'label['..(col_offset+1.0)..','..(row_offset+0.05)..';'..tostring( pos2.x - pos.x )..' m. ' .. minetest.colorize("#FFFF00", "E") .. ']'.. + 'label['..(col_offset+0.1)..','..(row_offset+0.80)..';'..tostring( pos.z - pos1.z )..' m. ' .. minetest.colorize("#FFFF00", "S") .. ']'.. + 'label['..(col_offset+0.1)..','..(row_offset-0.70)..';'..tostring( pos2.z - pos.z )..' m. ' .. minetest.colorize("#FFFF00", "N") .. ']'; -- else show how far the area is away else @@ -456,17 +454,16 @@ markers.show_compass_marker = function( col_offset, row_offset, with_text, pos, if( with_text ) then formspec = formspec.. - 'label[0.5,5.5;Position of the area in relation to..]'.. --- TODO: check if there is a marker; else write 'position you clicked on' - 'label[4.7,5.5;the marker at '..minetest.pos_to_string( pos )..':]'.. - 'button_exit[8.0,5.5;2,0.5;list_areas_at;Local areas]'; + 'label[0,4.5;Position of the area, from marker position at '.. + minetest.colorize("#FFFF00", minetest.pos_to_string( pos ))..':]'.. + 'button_exit[7.0,5.6;3,1;list_areas_at;Local areas]'; end formspec = formspec.. - 'image['..col_offset..','..row_offset..';1,1;compass_side_top.png]'.. - 'label['..(col_offset-0.8)..','..(row_offset+0.05)..';'..starts_west..']'.. - 'label['..(col_offset+1.0)..','..(row_offset+0.05)..';'..starts_east..']'.. - 'label['..(col_offset+0.1)..','..(row_offset-0.80)..';'..starts_north..']'.. - 'label['..(col_offset+0.1)..','..(row_offset+0.80)..';'..starts_south..']'; + 'image['..(col_offset+0.1)..','..(row_offset-0.10)..';1,1;compass_side_top.png]'.. + 'label['..(col_offset-0.8)..','..(row_offset+0.05)..';'..starts_west:sub(1,-2) .. minetest.colorize("#FFFF00", starts_west:sub(-1))..']'.. + 'label['..(col_offset+1.0)..','..(row_offset+0.05)..';'..starts_east:sub(1,-2) .. minetest.colorize("#FFFF00", starts_east:sub(-1))..']'.. + 'label['..(col_offset+0.1)..','..(row_offset-0.80)..';'..starts_north:sub(1,-2) .. minetest.colorize("#FFFF00", starts_north:sub(-1))..']'.. + 'label['..(col_offset+0.1)..','..(row_offset+0.80)..';'..starts_south:sub(1,-2) .. minetest.colorize("#FFFF00", starts_south:sub(-1))..']' end return formspec; @@ -629,8 +626,9 @@ markers.form_input_handler_areas = function( player, formname, fields) else formspec = 'field[rename_new_name;Enter new name for area:;'..minetest.formspec_escape( area.name )..']'; - formspec = 'field[delete_confirm;'..minetest.formspec_escape( 'Really delete area \"'..area.name.. - '\" (owned by '..area.owner..')? Confirm with YES:')..';-type yes in capitals to confirm-]'; + formspec = 'field[delete_confirm;'..minetest.formspec_escape( 'Delete area '.. + minetest.colorize("#FFFF00", area.name).. + ' (owned by '..minetest.colorize("#FFFF00", area.owner)..')?')..';-type YES (in capitals) to confirm-]'; end @@ -797,10 +795,11 @@ markers.show_marker_stone_formspec = function( player, pos ) -- no areas found; display error message and selection menu if( #found_areas < 1 ) then - formspec = 'size[4,3]'.. - 'label[0.5,0.5;This position is not protected.]'.. - 'button[1.0,1.5;2,0.5;list_main_areas;List all main areas]'.. - 'button_exit[3.0,1.5;1,0.5;abort;OK]'; + formspec = 'size[4,2]'.. + 'label[0,0;This position is not protected.]'.. + 'button[0,0.8;4,0.5;list_main_areas;List all main areas]'.. + 'button_exit[1.45,1.7;1.2,0.5;abort;OK]' .. + default.gui_bg_img -- found exactly one areaa - display it elseif( #found_areas == 1 ) then diff --git a/depends.txt b/depends.txt index a18cd91..f3a4795 100644 --- a/depends.txt +++ b/depends.txt @@ -1 +1,2 @@ -areas +default +areas \ No newline at end of file diff --git a/init.lua b/init.lua index 2e72af0..2c9fe60 100644 --- a/init.lua +++ b/init.lua @@ -247,20 +247,20 @@ markers.get_marker_formspec = function(player, pos, error_msg) local name = player:get_player_name(); local formspec_info = "size[6,4]".. - "button_exit[2,2.5;1,0.5;abort;OK]".. - "textarea[1,1;4,2;info;Information;"; + "button_exit[2.5,3.7;1,0.5;abort;OK]".. + "textarea[0.2,0;6,4;info;;" if( owner ~= nil and owner ~= '' and owner ~= name ) then - return formspec_info.."This marker\ncan only be used by\n"..tostring( owner )..", who\nplaced the markers.]"; + return formspec_info.."This marker can only be used by "..tostring( owner )..", who placed the markers.]"; end if( not( markers.positions[ name ]) or #markers.positions[name]<1) then - return formspec_info.."Information about the positions\nof your other markers\ngot lost.\nPlease dig and place\nyour markers again!]"; + return formspec_info.."Information about the positions of your other markers got lost. Please dig and place your markers again!]"; end local n = #markers.positions[ name ]; if ( n < 2 ) then - return formspec_info.."Please place 2 or more markers\n - at least one in each corner\n of your area first]"; + return formspec_info.."Please place 2 or more markers - at least one in each corner of your area first]"; end @@ -285,53 +285,45 @@ markers.get_marker_formspec = function(player, pos, error_msg) -- check if area is too large if( markers.MAX_SIZE < size ) then - return formspec_info.."Error: You can only protect\nareas of up to "..tostring( markers.MAX_SIZE ).."m^2.\n".. - "Your marked area is "..tostring( size ).." m^2 large.]"; + return formspec_info.."Error: You can only protect areas of up to "..tostring( markers.MAX_SIZE ).."m².".. + " Your marked area is "..tostring( size ).." m² large.]"; end - local formspec = 'size[10,7]'.. - 'label[0.5,1;The area you marked extends from]'.. - 'label[4.7,1;'..minetest.pos_to_string( coords[ 1 ] )..' to '..minetest.pos_to_string( coords[ 2 ] )..'.]'.. - 'label[4.7,1.5;It spans '..tostring( math.abs( coords[1].x - coords[2].x )+1 ).. - ' x '..tostring( math.abs( coords[1].z - coords[2].z )+1 ).. - ' = '..tostring( size )..' m^2.]'; + local formspec = + 'size[6,5.8]' .. + 'label[0,0;Your area extends from ' .. + minetest.colorize('#FFFF00', minetest.pos_to_string(coords[1])) .. + ' to ' .. minetest.colorize('#FFFF00', minetest.pos_to_string(coords[2])) .. '.]' .. + 'label[0,0.5;It spans '..tostring( math.abs( coords[1].x - coords[2].x )+1 ).. + ' x '..tostring( math.abs( coords[1].z - coords[2].z )+1 ) .. ' m' .. + ' = '..tostring( size )..' m².]' .. + default.gui_bg_img -- display the error message (if there is any) if( error_msg ~= nil ) then formspec = formspec.. - 'label[0.5,0.0;Error: ]'.. + 'label[0,0.0;Error: ]'.. 'textarea[5.0,0;4,1.5;info;;'..error_msg..']'; end if( area and area['id'] ) then formspec = formspec.. - 'label[0.5,2.0;This is area number ]'.. - 'label[4.7,2.0;'..tostring( area['id'] )..'.]'.. - 'label[0.5,2.5;It is owned by ]'.. - 'label[4.7,2.5;'..tostring( area['owner'] )..'.]'.. - 'label[0.5,3.0;The area is called ]'.. - 'label[4.7,3.0;'..tostring( area['name'] )..'.]'.. - "button_exit[2,6.0;2,0.5;abort;OK]"; + 'label[0,1.5;Area number: ' .. minetest.colorize("#FFFF00", tostring(area['id'])) .. ']'.. + 'label[0,2;Owned by: ' .. minetest.colorize("#FFFF00", tostring(area['owner'])) .. ']'.. + 'label[0,2.5;Area name: ' .. minetest.colorize("#FFFF00", tostring(area['name'])) .. ']'.. + "button_exit[2,5.5;2,0.5;abort;OK]"; else formspec = formspec.. -- 'label[0.5,2.0;Buying this area will cost you ]'.. -- 'label[4.7,2.0;'..markers.calculate_area_price_text( coords[1], coords[2], name )..'.]'.. - 'label[0.5,3.0;Your area ought to go..]'.. - 'label[0.5,3.5;this many blocks up:]'.. - 'field[5.0,4.0;1,0.5;add_height;;40]'.. - 'label[6.0,3.5;(above '..coords[2].y..' )]'.. + 'field[0.2,2.2;6,0.5;add_height;Area height above this position (min: ' .. coords[2].y .. ');40]'.. + 'field[0.2,3.5;6,0.5;add_depth;Area depth below this position (min: ' .. coords[1].y .. ');10]'.. + 'field[0.2,4.7;6,0.5;set_area_name;Area name;]'.. - 'label[0.5,4.0;and this many blocks down:]'.. - 'field[5.0,4.5;1,0.5;add_depth;;10]'.. - 'label[6.0,4.0;(below '..coords[1].y..' )]'.. - - 'label[0.5,4.5;The area shall be named]'.. - 'field[5.0,5.0;6,0.5;set_area_name;;please enter a name]'.. - - "button_exit[2,6.0;2,0.5;abort;Abort]".. + "button_exit[0.5,5.4;2.5,0.5;abort;Abort]".. -- code the position in the "Buy area" field - "button_exit[6,6.0;2,0.5;"..minetest.pos_to_string(pos)..";Protect area]"; + "button_exit[3,5.4;2.5,0.5;"..minetest.pos_to_string(pos)..";Protect area]"; end return formspec; diff --git a/textures/markers_stone.png b/textures/markers_stone.png index 73962bbe691ce85a39193fd0ee70c60335ac5dbb..051c7ca4301329630b0f65b7f5814fcdbccd824f 100644 GIT binary patch delta 629 zcmV-*0*d{a28{)fBYyw}VoOIv00000008+zyMF)x010qNS#tmY3ljhU3ljkVnw%H_ z000McNliru;RY57CK*GTj}HI<0vbs~K~y-)b;;Xm)Ib1$;eQU?GnveIVJW1mx8EmTy?=fg8yDEv+N4Y~e*QY+ ze0+}dfnha7YJs!ue_vOdJLDS)H@0tcEi1`RPv{>jw(s7#wByqgs;cU|SuGjOYc$$% ze|MiUAAo{;JA1^H1M4))_>^Vs<<;}adh!zeX9fIz`#p?(fN0J2eY&vC-vOXg#D<140T-XHPh|Z6vGuq&hN=Tv)L@Aie zS2%0&q;6|=^_5T{1iC0wl0;*h74_I+WMnfd)=kp+>(!9aq(Ms&sAo0f@r?O$0xCmp z1^S8Zm`&5p=UKsMs?k5bPq5LVg=1t5rSyz`TLO_J_E0j%2Fu*c|M`Ca0LOD5kd`)K P00000NkvXXu0mjf0%sEe delta 770 zcmV+d1O5Ds1(^nrBYy(mNklfjz0076&@A-4r>+E{7`6>vtLajICecIAI|BjOa4B+V3Xx67k@EDQR2D|(}_>IEiu}V zEM~mDxaR8zhrEAtiQ_0Hp^va_LEH5-ZO3XEqqQcEC$wG9&1TDXTM+~RnvaE5G#Im5Q8a!8FVcjv{yN6#9`aXGHljS9oz-O7vIM|z$=M@6W!WctQ z)Fks6!WL9ji+@s*-~T+}w?B?4>jvLBv3b8DUSrqd5CS|?e z(rL{&j1)zKEp5heWWCuk3BCW*SIZr|z(sVuCQS>ZvhiGpC<^dh2gi{pDezoH-y4!7 z=Is2E{r!aX?H12>De@XwHyu(+;@O0o+HKU612P=J6EI zb-1}niDwgJ79t`P4STyg2qAD?Mb~MfD8LdH%VdY^PiwR>C`Yo|os(w8oxl$~ zu0CxTM|kr6w|uRAD%oy_lDInW)@B8wWcU)7V`*Ew;isMFpS(g+@&aL z_V*S@C4VWahDqp=WhMQW%D(R@%bKEU$g&bqRSiW|bDI@xZnyZphXp8UV_5>vb9wm9 z5$`UpStc`zszE8q;r@cQ?~%p~c&@{}qZOX3sG1hf3rM#mKmGU^*HOIq_Z^dIK$evp z>@BG3mbUFl<`H7G+(8Hntu@)*S-d>^z)n1+ZF_re))`VtR?9iIZIkCUeW$tpe9LWG zAkwrzDTNtElKB*E42~n&<|R=Se!0-aaU_nCv|W!778Wp@2FR1+XFUJsHNNlAcACKq z_`Zu7Mnc~qO$+`yeT6m#X$!O&kV3Fdb5=>re<65ts;nf`2mk;807*qoM6N<$f~$Ld AVgLXD diff --git a/textures/markers_stone_side.png b/textures/markers_stone_side.png index 7230e74c093417b1d6d60284758a9cd6c5ca533f..d49669e27a95df50ec670ad11486b98b878683d2 100644 GIT binary patch delta 666 zcmV;L0%iTc2C)T@BYyw}VoOIv0RI600RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_ z000McNliru;RY2ADk{Yws$=aUcniLXrjv zK|@IjS|s2J_<1FsfCr#Kkdg+b3{t(Az&8(UmTGLqvS&5w$WYggy& z<8hB}x4YoW*_3`ULZdBvJJ-otDJa<8-Y3i~yF2>}EKM2<{`2uC#K<9=N)yL12&i2^ zFr&M9Wr_Xmn}5j)PAa5ITc}9msgc%V3d@VPgC+Lt)%*FL$|jw5N?R$!(b0#nx4Vh- ziZWC@fAf`9H;V(2OIRaYUMC02IX-fP7Nn z5!lec*8(luNEyX=>2ZJ%0)Wy~q-jPHYm!)#rWvLAoqtF`BeGPgCJ2iR&Z3k+RT=+gVH$ zX-qX^G%%Dhu$r`&nPkDQcRTcl6V!&ScW*u}%97 zeb16-=%JS!+EP*y1BE6uH8zW7OV+-thknOTc$|Hx?mk^J8SfHAF<}%Fh6$QhhYIq% zK#~MRQ6!2};Qxb)w{K68ALe(Y;ezSKjP=H&-)-aj0rk3q(SKBN+<+o4=yh9snLTkd z8FBy50!69O)Kz3j5=qjGG)d{S>V$!ZY3eMOHk*w@5XNlxTiEuRou0wkwy4!WprTfj zk%J&YsmX-C$Jz8FhE`{^H|F#0H5<=kJQ{Gj{=)ryiK;5>40@=#&dZZmcwUHzAW#$q zt`{=wcgV7otADF2T-RkZ+GF;xEs6sO3tOn*~XxW2pQ{qzRY)cNXYA1_Q; zSuWkKfo+G3561j){+^Q;Cs>w4yVXS0wFY^flV$~B645pdqA2CvuTxw%Vyk6v^J#|C zkg+Tadu<`g0^5TQ&c;X9wFauzU}gJs1`}SM=*%Bh7@CS^Y+Tv#M*Ire0)X}3eq?rja;T5FPL7QQ$!1XIz44Rzvk@hH>e6mJ6)12LoSMvMqOcd z*kx_~%d@qnZJNv3bLlrca5@;d?r%V&qzuYZowbd@B@=ygow?fw?NEl`%A83T^n zJ1ib8zWeqKPfr&1%4M*v(C_!y+dIN+nNUeQEp2SaM|K>aTCGN!73>ZN*p83cYLjFY zqtS>k&KU0xsW%iTMY5tql0*ccWoXEMp1