From c6e0ef7c0a4252bc39b44b1589227bd471086993 Mon Sep 17 00:00:00 2001 From: wan-may Date: Tue, 23 Jul 2024 03:15:11 -0300 Subject: [PATCH] Render borders with edge-detection shader; render radar ranges to file Add top level files to built-in mod --- data/graphics/blur.bmp | Bin 146996 -> 437814 bytes main.lua | 4 ++ map/blur.lua | 113 +++++++++++++++++++++++++++++++++++++++++ map/bmp.lua | 24 +++++++++ map/map.lua | 104 ++++++++++++++++++++++++------------- map/saveoptions.lua | 19 +++++++ map/territory.lua | 1 - map/travelNodes.lua | 2 +- mod.txt | 5 ++ screenshot.bmp | Bin 0 -> 98358 bytes shaders/dilate.lua | 46 +++++++++++++++++ shaders/sailable.lua | 36 +++++++++++++ shaders/territory.lua | 54 ++++++++++++++++++++ ui/loadmodal.lua | 4 ++ ui/menu/cities.lua | 11 ---- ui/modal.lua | 3 +- ui/savemodal.lua | 30 ++++++----- ui/saveprogress.lua | 36 +++++++++++++ 18 files changed, 428 insertions(+), 64 deletions(-) create mode 100644 map/blur.lua create mode 100644 map/saveoptions.lua create mode 100644 mod.txt create mode 100644 screenshot.bmp create mode 100644 shaders/dilate.lua create mode 100644 shaders/sailable.lua create mode 100644 shaders/territory.lua create mode 100644 ui/saveprogress.lua diff --git a/data/graphics/blur.bmp b/data/graphics/blur.bmp index 0c1628bc0e3c217cad7d0c7dc1b12eef229525db..cc815add534f4d3a75458f21bfa9fdde084f2466 100644 GIT binary patch literal 437814 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 aANO$|_i-QhaUb__ANO$|_i-Q3tN4FsD*)>N diff --git a/main.lua b/main.lua index dbf65ef..c8a34d0 100644 --- a/main.lua +++ b/main.lua @@ -20,6 +20,10 @@ function love.directorydropped( path ) return map.load( path ) end +function love.filedropped( path ) + +end + function love.update( dt ) local tx, ty = 0, 0 local moveCamera = false diff --git a/map/blur.lua b/map/blur.lua new file mode 100644 index 0000000..08d2247 --- /dev/null +++ b/map/blur.lua @@ -0,0 +1,113 @@ +local love = assert( love ) +local lg = love.graphics +local lt = love.timer +local coroutine = assert( coroutine ) +local bmp = require 'map.bmp' + +local scale = 1 +local w, h = scale * 512, scale * 285 + +local dilateShader = require 'shaders.dilate' +local finalCanvas = lg.newCanvas( w, h ) +local canvas = lg.newCanvas( w, h ) +local identityTransform = love.math.newTransform() + +local tiles = {} +do + local sideLength = 4 + local i = 1 + for x = 1, sideLength do + for y = 1, sideLength do + local width = math.floor( w / sideLength ) + local height = math.floor( h / sideLength ) + tiles[i] = function() return + (x - 1) * width, (y - 1) * height, + width, height + end + i = i + 1 + end + end +end + +--the coroutine library doesn't reset all the global graphics state for us +--so this yield function does +local function y( s, currentTile ) + lg.pop( "all" ) + coroutine.yield( s ) + lg.push( "all" ) + lg.setCanvas( canvas ) + lg.setShader( dilateShader ) + lg.setScissor( currentTile() ) + lg.setBlendMode( "add" ) +end + +local function renderRadar( map, filename ) + local statusString = "%s: rendering %s radius\n %s\n %d/%d" + --we need this first push to the stack to keep y() simple + lg.push( "all" ) + y( filename, tiles[1] ) + --then we clear the whole canvas to opaque black, pause, and select the first tile + lg.setScissor() + lg.clear( 0, 0, 0, 1 ) + dilateShader:send( "sailable", map.sailable.img ) + for tile = 1, #tiles do + + --dilate placeable land area by 30 degrees (radar radius) + dilateShader:send( "radius", math.floor( 512 * 30 / 360 ) ) + + for name, terr in pairs( map.territory ) do + y( statusString:format( filename, "radar", name, tile, #tiles ), tiles[tile] ) + lg.setColor( + 0.9 + terr.colour[1], + 0.9 + terr.colour[2], + 0.9 + terr.colour[3], + 1 / 6 ) + lg.draw( terr.img, 0, 0, 0, scale, scale ) + end + + --dilate placeable land area by 45 degrees (sub launch radius) + dilateShader:send( "radius", math.floor( 512 * 45 / 360 ) ) + for name, terr in pairs( map.territory ) do + y( statusString:format( filename, "sub", name, tile, #tiles ), tiles[tile] ) + lg.setColor( + 0.9 + terr.colour[1], + 0.9 + terr.colour[2], + 0.9 + terr.colour[3], + 1 / 12 ) + lg.draw( terr.img, 0, 0, 0, scale, scale ) + end + end + + lg.setCanvas( finalCanvas ) + lg.setScissor() + lg.setShader() + lg.clear( 0, 0, 0, 1 ) + lg.setColor( 1, 1, 1, 1 ) + lg.draw( canvas ) + lg.pop( "all" ) + + coroutine.yield( ("%s: encoding image data"):format( filename )) + + return bmp.blur( finalCanvas:newImageData() ) +end + + + +local t = {} + +function t:save( ) + return renderRadar( self.map, self.filename ) +end + +function t.load( filename, map ) + t.filename = filename + t.map = map + return t +end + +function t.draw() + lg.setScissor() + return lg.draw( canvas ) +end + +return t \ No newline at end of file diff --git a/map/bmp.lua b/map/bmp.lua index 0db1ba7..4b712d2 100644 --- a/map/bmp.lua +++ b/map/bmp.lua @@ -16,6 +16,7 @@ function test.load( filename ) print( "LOADING BITMAP: ", filename, imgd:getSize(), imgd:getFormat(), imgd:getDimensions() ) local img = love.graphics.newImage( imgd ) img:setFilter( "nearest", "nearest" ) + img:setWrap( "repeat", "clampzero" ) return img, imgd end @@ -103,6 +104,16 @@ local formats = { w = 512, h = 285, }, + ["blur"] = { + header = getHeader( "data/graphics/blur.bmp" ), + w = 512, + h = 285, + }, + ["screenshot"] = { + header = getHeader( "screenshot.bmp" ), + w = 256, + h = 128, + }, } function formats.ai:test( ) @@ -316,11 +327,24 @@ function formats.africa:encode( data ) return table.concat( bytes ) end +function formats.screenshot:encode( data ) + return formats.territory.encode( self, data ) +end + +--this one was 8-bit grayscale in the original game +--but we're going to increase the bit depth to 24 because +--the game can render colours in blur.bmp just fine +--and we want to render tinted radar ranges into that file +function formats.blur:encode( data ) + return formats.territory.encode( self, data ) +end + function t.load( filename ) local imgd = love.image.newImageData( filename ) print( "LOADING BITMAP: ", filename, imgd:getSize(), imgd:getFormat(), imgd:getDimensions() ) local img = love.graphics.newImage( imgd ) img:setFilter( "nearest", "nearest" ) + img:setWrap( "repeat", "clampzero" ) return img, imgd end diff --git a/map/map.lua b/map/map.lua index 81c8d6c..f398cdf 100644 --- a/map/map.lua +++ b/map/map.lua @@ -1,5 +1,6 @@ local love = assert( love ) local io = io +local coroutine = coroutine local mkdir = assert( require 'lib.mkdir' ) local lg = love.graphics local AI = require 'map.ai' @@ -8,6 +9,7 @@ local Lines = require 'map.lines' local Nodes = require 'map.travelNodes' local Camera = require 'ui.camera' local Territory = require 'map.territory' +local Blur = require 'map.blur' --flat list of editable layers for convenience local layers = { @@ -24,6 +26,7 @@ local layers = { sailable = false, ainodes = false, cities = false, + blur = false, } local map = { @@ -50,9 +53,28 @@ local map = { travelnodes = false, sailable = false, ainodes = false, - cities = false + cities = false, + blur = false, } + + +function map.reloadLayer( path ) + --Shouldn't call this before the map loads, but just in case + if not map.loaded then return end + for name, layer in pairs( layers ) do + if layer.filename and + (layer.filename:gsub( ".+[\\/]", "") == path.filename:gsub( ".+[\\/]", "" )) then + local newLayer = layer:load( path ) + newLayer.filename = layer.filename --we don't store the full path in there + map[ name ] = newLayer + layers[ name ] = newLayer + return layer.filename + end + end + return +end + function map.load( path ) map.background = lg.newImage( "/data/graphics/blur.bmp" ) map.cities = Cities.load( "/data/earth/cities.dat" ) @@ -62,6 +84,7 @@ function map.load( path ) map.sailable = Territory.load( "/data/earth/sailable.bmp", "sailable" ) map.travelnodes = Nodes.load( "/data/earth/travel_nodes.bmp", map.sailable.isSailable ) --travel node adjacency matrix depends on sailable bitmap map.ainodes = AI.load( "/data/earth/ai_markers.bmp" ) + map.blur = Blur.load( "/data/graphics/blur.bmp", map ) for k, v in pairs(map.territory) do map.territory[k] = Territory.load( "/data/earth/"..k..".bmp", k ) end @@ -85,31 +108,31 @@ function map.draw() lg.setBlendMode( "add" ) lg.setColor( 1, 1, 1, 0.2 ) - lg.draw( map.background ) + --lg.draw( map.background ) lg.setColor( 1, 1, 1, 0.5 ) + local sh = require 'shaders.sailable' + lg.setShader( sh ) + sh:send( "lowBorder", 60 ) + sh:send( "highBorder", 130 ) for k, v in pairs(map.territory) do if v.visible then + v:draw() - lg.setLineWidth( 1 / Camera.zoom ) + --[[lg.setLineWidth( 1 / Camera.zoom ) v:drawBorder( "land" ) lg.setLineWidth( 3 / Camera.zoom ) - v:drawBorder( "sea" ) + v:drawBorder( "sea" )]] end end if map.sailable.visible then + sh:send( "lowBorder", 20 ) + sh:send( "highBorder", 60 ) + lg.setShader( require 'shaders.sailable' ) map.sailable:draw() - lg.setLineJoin( "none" ) - lg.setLineWidth( 1 / Camera.zoom ) - - lg.setColor( 1, 1, 1, 0.5) - map.sailable:drawBorder( "sailable" ) - - lg.setLineWidth( 3 / Camera.zoom ) - map.sailable:drawBorder( "placeable" ) end + lg.setShader() lg.setBlendMode( "alpha" ) - lg.setColor( 1, 1, 1, 1 ) end @@ -182,33 +205,42 @@ function map.draw() end -local function write( filename, string ) - print( "Writing", string:len(), "bytes to", filename ) - local file = assert( io.open( filename, "wb" ) ) - assert( file:write( string ) ) - assert( file:flush() ) --your toilet is set to stun, not kill - file:close() -end - -function map.save() - --should be cross platform-ish. - --race condition, unfortunately. - --maybe we should do this on part on load, then keep a lockfile open in each of these folders - for _, folder in ipairs{ "/data/", "/data/earth/", "/data/graphics/" } do - assert( mkdir.exists( map.path ), map.path ) - local path = map.path..folder - if not mkdir.exists( path ) then mkdir.mkdir( path ) end +do + local function write( filename, string ) + local file = assert( io.open( filename, "wb" ) ) + assert( file:write( string ) ) + assert( file:flush() ) --your toilet is set to stun, not kill + file:close() end - local files = {} - --Write everything to strings first, in case there are errors we don't want to half-write the map - for k, layer in pairs( layers ) do - files[ map.path..tostring( layer.filename ) ] = assert( layer:save() ) - end - for filename, str in pairs( files ) do - write( filename, str ) + local function save() + --should be cross platform-ish. + --race condition, unfortunately. + --maybe we should do this on part on load, then keep a lockfile open in each of these folders + for _, folder in ipairs{ "/data/", "/data/earth/", "/data/graphics/" } do + coroutine.yield( "Creating folder ".. folder ) + assert( mkdir.exists( map.path ), map.path ) + local path = map.path..folder + if not mkdir.exists( path ) then mkdir.mkdir( path ) end + end + + local files = {} + --Write everything to strings first, in case there are errors we don't want to half-write the map + for k, layer in pairs( layers ) do + coroutine.yield( "Exporting layer ".. k ) + files[ map.path..tostring( layer.filename ) ] = assert( layer:save() ) + end + for filename, str in pairs( files ) do + coroutine.yield( "Writing ".. filename ) + write( filename, str ) + end + + coroutine.yield() --yield nothing to indicate we're done + return save() --save again end + map.save = coroutine.wrap( save ) + end function map.hover(x, y) diff --git a/map/saveoptions.lua b/map/saveoptions.lua new file mode 100644 index 0000000..3c5c2ce --- /dev/null +++ b/map/saveoptions.lua @@ -0,0 +1,19 @@ +local t = {} +t.options = { + Name = "New DEFCON Mod", + Version = "0.1", + Author = "DeFacto", + Website = "https://wan-may.art/dev/", + Comment = "DEFCON map made with dcEarth", + radarExport = true, + screenGenerator = true, + highDetail = true, +} + +--parse and load metadata from mod.txt +function t.load( filename ) + +end + + +return t \ No newline at end of file diff --git a/map/territory.lua b/map/territory.lua index 58786e6..c58523d 100644 --- a/map/territory.lua +++ b/map/territory.lua @@ -144,7 +144,6 @@ end function t.save( territory ) local fmt = (territory.name == "sailable") and "sailable" or "territory" - print( "saving bitmap: ", territory.name, fmt ) return bmp[fmt]( territory.imgd ) end diff --git a/map/travelNodes.lua b/map/travelNodes.lua index 63d0aaa..9b6d541 100644 --- a/map/travelNodes.lua +++ b/map/travelNodes.lua @@ -57,7 +57,7 @@ end function t.load( filename, sailable ) - isSailable = sailable + isSailable = sailable or isSailable local img, imgd = bmp.load( filename ) local nodes = { filename = filename, visible = true, nodes = {}, points = {}, connections = {}, img = img } t.nodes = nodes diff --git a/mod.txt b/mod.txt new file mode 100644 index 0000000..7acc703 --- /dev/null +++ b/mod.txt @@ -0,0 +1,5 @@ +Name New DEFCON Mod +Version 0.1 +Author DeFacto +Website https://wan-may.art/dev/ +Comment DEFCON map made with dcEarth \ No newline at end of file diff --git a/screenshot.bmp b/screenshot.bmp new file mode 100644 index 0000000000000000000000000000000000000000..40d96dea8621692fbd5f9eedf0351df527858f17 GIT binary patch literal 98358 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 literal 0 HcmV?d00001 diff --git a/shaders/dilate.lua b/shaders/dilate.lua new file mode 100644 index 0000000..f751b96 --- /dev/null +++ b/shaders/dilate.lua @@ -0,0 +1,46 @@ +return love.graphics.newShader[[ + #pragma language glsl3 + uniform int radius; + uniform Image sailable; + + bool own( float x ) + { + if( x * 255.0 > 130.0 ){ + return true; + } + else { + return false; + } + } + + bool land( float x ) + { + if( x * 255.0 <= 60.0 ){ + return true; + } + else { + return false; + } + } + + bool placeable( Image tex, vec2 uv ) + { + return own(Texel(tex, uv).r) && land(Texel(sailable, uv).r); + } + + vec4 effect( vec4 color, Image tex, vec2 texture_coords, vec2 screen_coords ) + { + for(int i = -radius; i <= radius; ++i) { + for(int j = -radius; j <= radius; ++j) { + vec2 offset = vec2( ivec2( i, j ) ) / vec2( textureSize(tex, 0) ); + int r = ((i * i) + (j * j)); + if ( (r < (radius * radius) ) + && placeable( tex, texture_coords + offset )){ + return color; + } + } + } + + return vec4( 0.0, 0.0, 0.0, 0.0 ); + } +]] \ No newline at end of file diff --git a/shaders/sailable.lua b/shaders/sailable.lua new file mode 100644 index 0000000..13654ad --- /dev/null +++ b/shaders/sailable.lua @@ -0,0 +1,36 @@ +return love.graphics.newShader[[ + #pragma language glsl3 + + uniform float highBorder; + uniform float lowBorder; + + #define p(x) ((x) * 255.0 > highBorder) + #define t(x) ((x) * 255.0 > lowBorder) + + vec4 effect( vec4 color, Image tex, vec2 texture_coords, vec2 screen_coords ) + { + vec2 s = vec2( 1.0, 1.0 ) / vec2( textureSize(tex, 0) ); + float c = Texel( tex, texture_coords ).r; + vec4 g = vec4( + Texel( tex, texture_coords + s * vec2(1.0, 0.0)).r, + Texel( tex, texture_coords + s * vec2(0.0, 1.0)).r, + Texel( tex, texture_coords + s * vec2(-1.0, 0.0)).r, + Texel( tex, texture_coords + s * vec2(0.0, -1.0)).r + ); + bvec4 place = bvec4( p(g.r), p(g.g), p(g.b), p(g.a) ); + bvec4 traverse = bvec4( t(g.r), t(g.g), t(g.b), t(g.a) ); + float a; + if ( p(c) ){ + if( all( place ) ) { a = 1.0; } + else { a = 2.0; } + } + else if( t(c) ){ + if( all( traverse ) ) { a = 0.5; } + else { a = 0.75; } + } + else{ + a = 0.0; + } + return vec4( color.rgb, a * color.a ); + } +]] \ No newline at end of file diff --git a/shaders/territory.lua b/shaders/territory.lua new file mode 100644 index 0000000..ed5fccb --- /dev/null +++ b/shaders/territory.lua @@ -0,0 +1,54 @@ +--[[ + 0 + 20 -- once sailable.bmp is brighter than this, the area is traversable by ships + 60 -- once sailable.bmp and territory.bmp are brighter than this, ships can be placed here + 130 -- if territory.bmp is brighter than this and sailable is darker than 60, structures are placeable. + + SO: + SAILABLE: 0 (not), 21 (traverse not place), 61 ( traverse and place ) + TERRITORY: 131 ( place land if sailable <= 60 ), 61 ( place sea ), 0 +]] + +return love.graphics.newShader[[ + #pragma language glsl3 + uniform int radius; + uniform Image sailable; + + bool seaPlace( float x, float y ) + { + return ( x * 255.0 > 60.0 ) && ( y * 255.0 > 60.0 ); + } + + bool own( float x ) + { + if( x * 255.0 > 130.0 ){ + return true; + } + else { + return false; + } + } + + bool land( float x ) + { + if( x * 255.0 <= 60.0 ){ + return true; + } + else { + return false; + } + } + + bool placeable( Image tex, vec2 uv ) + { + return own(Texel(tex, uv).r) && land(Texel(sailable, uv).r); + } + + vec4 effect( vec4 color, Image tex, vec2 texture_coords, vec2 screen_coords ) + { + if (placeable( tex, texture_coords + offset )){ + return color; + } + return vec4( 0.0, 0.0, 0.0, 0.0 ); + } +]] \ No newline at end of file diff --git a/ui/loadmodal.lua b/ui/loadmodal.lua index be75b8b..aae1dc1 100644 --- a/ui/loadmodal.lua +++ b/ui/loadmodal.lua @@ -57,5 +57,9 @@ function t.directorydropped( path ) return love.filesystem.mount( path, "" ) end +function t.filedropped( path ) + return map.reloadLayer( path ) +end + return modal.new( t ) \ No newline at end of file diff --git a/ui/menu/cities.lua b/ui/menu/cities.lua index d8023cb..f14676d 100644 --- a/ui/menu/cities.lua +++ b/ui/menu/cities.lua @@ -138,17 +138,6 @@ function editModal.draw() return button:draw() end -function editModal.resize( w, h ) - local i = 0 - local high = h / 6 - for key, b in pairs( editButtons ) do - b.x = w / 2 - button.w / 2 - b.y = ( high + 4 ) * i - b.h = high - i = i + 1 - end -end - function moveModal.update( dt ) local x, y = love.mouse.getPosition() if y > t.menuHeight and love.mouse.isDown( 1 ) then diff --git a/ui/modal.lua b/ui/modal.lua index 18ea5b9..c5e485e 100644 --- a/ui/modal.lua +++ b/ui/modal.lua @@ -6,6 +6,7 @@ t.__index = t local i = 0 function t.start( self ) print( "starting modal:", i + 1) + love.graphics.push( "all" ) love.graphics.setScissor( self.x or 0, self.y or 0, @@ -55,7 +56,7 @@ function t.stop( self ) i = i - 1 t.previous = t[i - 1] - love.graphics.setScissor(0, 0, love.graphics.getDimensions()) + love.graphics.pop( "all" ) end function t.exitAll() diff --git a/ui/savemodal.lua b/ui/savemodal.lua index 780676d..751c9dd 100644 --- a/ui/savemodal.lua +++ b/ui/savemodal.lua @@ -1,8 +1,10 @@ +--Modal for setting save options. local love = assert( love ) local modal = require( "ui.modal" ) local button = require( "ui.button" ) local map = require( "map.map" ) -local t = {} +local save = require( "ui.saveprogress" ) +local t = { w = love.graphics.getWidth(), h = 200 } local saveLocation = false local floppy = love.graphics.newImage( "icons/save.png" ) @@ -10,40 +12,40 @@ floppy:setFilter( "nearest", "nearest" ) local saveButton = button.new{ group = t, name = "save", - callback = function() map.save(); return t:stop() end, + align = "left", + callback = function() save:start() end, visible = false, icon = floppy, - x = love.graphics.getWidth() / 2 - 300, - y = love.graphics.getHeight() / 2 - 150, - w = 600, - h = 100, + w = 400 - button.x, + h = 64, + y = 0, } local xIcon = love.graphics.newImage( "icons/x.png" ) xIcon:setFilter( "nearest", "nearest" ) local cancelButton = button.new{ group = t, - name = "cancel", + name = " cancel", + align = "left", visible = false, icon = xIcon, callback = function() return t:stop() end, - x = love.graphics.getWidth() / 2 - 300, - y = love.graphics.getHeight() / 2, - w = 600, - h = 100 + y = 68, + w = 400 - button.x, + h = 64, } function t.start() modal.start( t ) saveLocation = saveLocation or map.path button.selected = saveButton - saveButton.name = "save to "..saveLocation + saveButton.name = " save to "..saveLocation button.displayGroup( t, false, true ) end function t.draw() love.graphics.clear( 0,0,0,1 ) - love.graphics.setColor( 1, 0, 0, 0.4 ) + love.graphics.setColor( 1, 1, 1, 0.9 ) button:draw() end @@ -51,7 +53,7 @@ end function t.directorydropped( path ) saveLocation = path map.path = path - saveButton.name = "save to "..map.path + saveButton.name = " save to "..map.path return love.filesystem.mount( path, "" ) end diff --git a/ui/saveprogress.lua b/ui/saveprogress.lua new file mode 100644 index 0000000..3f6f60d --- /dev/null +++ b/ui/saveprogress.lua @@ -0,0 +1,36 @@ +--What to display when saving is in progress. +local love = assert( love ) +local modal = require( "ui.modal" ) +local button = require( "ui.button" ) +local map = require( "map.map" ) +local timer = love.timer +local time = 0 + +local t = { w = 400, h = 200 } +local progressMessage = "" + +function t.start() + time = timer.getTime() + progressMessage = "" + return modal.start( t ) +end + +function t.update( dt ) + local msg = map.save() + if not msg then return t:stop() end + progressMessage = msg +end + +function t.draw() + love.graphics.push( "all" ) + love.graphics.setCanvas() + love.graphics.setShader() + love.graphics.setScissor( 0, 0, t.w, t.h ) + love.graphics.clear() + love.graphics.setColor( 1, 1, 1, 1 ) + love.graphics.print( timer.getTime() - time ) + love.graphics.printf( progressMessage, 0, love.graphics.getFont():getHeight(), t.w, "left") + love.graphics.pop( "all" ) +end + +return modal.new( t ) \ No newline at end of file