From 5c9c0be3bbdb69f3621d13c9284ecb895d8dbcc6 Mon Sep 17 00:00:00 2001 From: edisonout Date: Thu, 7 May 2015 17:44:29 +0100 Subject: [PATCH 1/5] levels scaled & centred --- src/level.lua | 14 +++++++++----- src/options.lua | 6 ++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/level.lua b/src/level.lua index 9840a1129..1bed9a8a9 100644 --- a/src/level.lua +++ b/src/level.lua @@ -23,6 +23,8 @@ local Sprite = require 'nodes/sprite' local save = require 'save' +local desktopWidth, desktopHeight = love.window.getDesktopDimensions() + local function limit( x, min, max ) return math.min(math.max(x,min),max) end @@ -107,10 +109,11 @@ end local function getCameraOffset(map) local prop = map.properties - if not prop.offset then - return 0 - end - return tonumber(prop.offset) * map.tilewidth + if not prop.offset then + return (map.height*map.tileheight - desktopHeight*window.scale)/2 + end + return math.min(tonumber(prop.offset)*map.tileheight + (window.height - desktopHeight*window.scale)/2, + map.height*map.tileheight - desktopHeight*window.scale) end local function getTitle(map) @@ -371,7 +374,8 @@ function Level:enter(previous, door, position) self:restartLevel(true) end - camera.max.x = self.map.width * self.map.tilewidth - window.width + local widthDif = self.map.width * self.map.tilewidth - desktopWidth*window.scale + camera.max.x = widthDif > 0 and widthDif or widthDif/2 setBackgroundColor(self.map) diff --git a/src/options.lua b/src/options.lua index ce63a3b8a..ad3ca4515 100644 --- a/src/options.lua +++ b/src/options.lua @@ -227,12 +227,10 @@ end function state:updateFullscreen() if self.option_map['FULLSCREEN'].bool then utils.setMode(0, 0, true) - local width = love.graphics:getWidth() - local height = love.graphics:getHeight() - camera:setScale( window.width / width , window.height / height ) + camera:setScale(window.scale, window.scale) love.mouse.setVisible(false) else - camera:setScale(window.scale,window.scale) + camera:setScale(window.scale, window.scale) utils.setMode(window.screen_width, window.screen_height, false) love.mouse.setVisible(true) end From 749837162eb0cc362b4b000f8e906811c77b28fe Mon Sep 17 00:00:00 2001 From: edisonout Date: Thu, 7 May 2015 19:51:21 +0100 Subject: [PATCH 2/5] a-d levels background fix --- src/images/tilesets/baseball.png | Bin 2435 -> 4292 bytes src/images/tilesets/deans-closet.png | Bin 13911 -> 19845 bytes src/level.lua | 15 +----- src/maps/admin-hallway.tmx | 42 ++++++++------- src/maps/baseball.tmx | 19 +++---- src/maps/borchert-hallway.tmx | 31 +++++------ src/maps/castle-hawkthorne-entrance.tmx | 41 +++++++-------- src/maps/castle-hawkthorne-room-1.tmx | 16 +++--- src/maps/castle-hawkthorne-room-2.tmx | 16 +++--- src/maps/castle-hawkthorne-room-3.tmx | 16 +++--- src/maps/castle-hawkthorne-room-4.tmx | 18 +++---- src/maps/class-basement.tmx | 67 +++++++++++------------- src/maps/class-hallway-2.tmx | 46 ++++++++-------- src/maps/class-hallway.tmx | 50 +++++++++--------- src/maps/deans-closet.tmx | 62 +++++++++++----------- src/maps/deans-closet2.tmx | 18 ++++--- src/maps/deans-office-2.tmx | 44 ++++++++-------- src/maps/deans-office.tmx | 38 +++++++------- src/maps/dorm-lobby.tmx | 20 +++---- 19 files changed, 269 insertions(+), 290 deletions(-) diff --git a/src/images/tilesets/baseball.png b/src/images/tilesets/baseball.png index 6d378f307d5a01ade5d1da811f59e799927e9901..42f7b6e3ddd0991a2f3f549c9d66a733b9d49468 100644 GIT binary patch literal 4292 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 Q{rn=@SUOldH%DOp1;m9q>;M1& delta 2424 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⪚TIrys3huy8d&#_U)-}di`2b--OGlC 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 literal 13911 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 Zn$_*>`b~~yHpTz7FX|c-%e3ud{tw(zc8UN1 diff --git a/src/level.lua b/src/level.lua index 1bed9a8a9..b88e49f41 100644 --- a/src/level.lua +++ b/src/level.lua @@ -96,20 +96,9 @@ local function collision_stop(dt, shape_a, shape_b) end end -local function setBackgroundColor(map) - local prop = map.properties - if not prop.red then - love.graphics.setBackgroundColor(0, 0, 0) - return - end - love.graphics.setBackgroundColor(tonumber(prop.red), - tonumber(prop.green), - tonumber(prop.blue)) -end - local function getCameraOffset(map) local prop = map.properties - if not prop.offset then + if not prop.offset or tonumber(prop.offset) < 2 then return (map.height*map.tileheight - desktopHeight*window.scale)/2 end return math.min(tonumber(prop.offset)*map.tileheight + (window.height - desktopHeight*window.scale)/2, @@ -376,8 +365,6 @@ function Level:enter(previous, door, position) local widthDif = self.map.width * self.map.tilewidth - desktopWidth*window.scale camera.max.x = widthDif > 0 and widthDif or widthDif/2 - - setBackgroundColor(self.map) sound.playMusic( self.music ) diff --git a/src/maps/admin-hallway.tmx b/src/maps/admin-hallway.tmx index ee7b10e00..260d08ece 100644 --- a/src/maps/admin-hallway.tmx +++ b/src/maps/admin-hallway.tmx @@ -1,10 +1,7 @@ - + - - - @@ -14,6 +11,11 @@ + + + eJztwzENAAAMBKGb3r/kuugECaumqqpPD97OD8E= + + eJxjZGBwYBzCmImBgWGI4wNDGTOMQJA+SM0aBaSDjcBCZBPjwNjdC7S3j0K7TwL1nyLDDGYohgFJIJbCwsYHlgLtXTZAYYfL/dIMhN0vQ4T5QDUNxKhDB7JEqoO5nx2KDYHYCIiNkdjsOLAJHjkkNQ3EqEPHpljE7mIRYx7FgwIzDnEMAH5IPoY= @@ -34,48 +36,48 @@ eJxjYBja4CHj0MajYBSMglEwCoYu+M0IwQMFhJgYGASZsMsJMKGqE4BiXOoJmYcOvjEObTwKBhYAAAPfW1Q= - - + + - - - - - + + + + + - + - + - + - + - + - + @@ -83,17 +85,17 @@ - + - + - + diff --git a/src/maps/baseball.tmx b/src/maps/baseball.tmx index 64f9b174b..ecd5d5977 100644 --- a/src/maps/baseball.tmx +++ b/src/maps/baseball.tmx @@ -1,11 +1,7 @@ - + - - - - @@ -15,6 +11,11 @@ + + + eJxjY2BgYBvFo3gUj+JhgAFy/wc5 + + eJztzEVOg2EUhtEyYAslwbVYgherkNDirgUKxd2d5XNI/sG3gTLqm5zBTW6eWKyyyv5vcWqCu5Y66mmgkSaaaaGVNtrpIEEnXaQi3fTQG3T76GeAQYYYZoQko4wxzgSTUStNkQ0yZJkKutPkyDPDLHPMs8AiSyyzwiprrAfdP5tssc0OuxTYY5+D6P+QI0occ8IpZ5xzEXQvueKaG265454HHnnimRdeeeOdDz754pufqFtVJtVl8gs3bR3E @@ -35,14 +36,14 @@ eJxjYBgFo2AUjALsoJJGmFYAAHZ/Cmc= - - - + + + - + diff --git a/src/maps/borchert-hallway.tmx b/src/maps/borchert-hallway.tmx index 85809263e..249743a0d 100644 --- a/src/maps/borchert-hallway.tmx +++ b/src/maps/borchert-hallway.tmx @@ -1,10 +1,7 @@ - + - - - @@ -16,38 +13,38 @@ - eJxjZGBwYBykmImBgWEQ4wODFTOMghEPRIBYFIjFBtohSMAcmKktGAfaFdiBP9BdAVRymyQQS2GhiQUyDAwNMmhicmh8eTR+Fg6MzW0w82E0KW4zAeoxQRMzI8An1m2GSObDaCMs6phHMVmYcRBjAFTfNdY= + eJxjZGBwYBykmImBgWEQ4wODFbMB3TeKR/Fgw+bATG3BOPDuwIb9ge4KoJLbJIFYCgtNrH4ZBoYGGTQxOTS+PBo/CwfG5jaY+TCaFLeZAPWYoImZEeAT6zZDJPNhtBEWdcyjmCzMOIgxANdwO+s= - eJxjYBgFww3UMDA4IONqND5U7AC6GDH6KMEg89Ddmoxd7AAhPyZTJaQIugObugYizKIqwOEObGIN5JiFDTRB1Cpgw01I9lDDbaGMDAxhjMS7DZ+6ZCLdlgHFyHoUgdiHgWFBCjAtAOkDikTaSYnbZAnoRdYDdBNDCoROINZOct0GzK8MplAahKuhNAxAxRpqkPg1SGqQ9eECNUSqg9lDSN0oGLoAAIKVRDw= + eJxjYBgFww3UMDA4IONqND5U7AC6GDH6KMEg89Ddmoxd7AAhPyZTJaQIugObugYizKIqwOEObGINMLYIEIsCsRgR+rCBJohaBWy4CckeUtxmzsjAYMGIKRcKFAtjJN5t+NQlE+m2DCiG6fEH2h8AxD4MDAtSgGkBSB9QJNJOdPMlgVgKC43NbbJY7JABqpNB848cA9htDCkQOkEeTV8WDozNbTDzYTQ2twHzK4MplAbhaihtAlRnghBrANFmSOrQ+dV43FaDps4QyXwYbYRkD0zdKBh+AABfhFEc - + eJxjYBgF5AL/gXYAFADd0YBNnIOGdipQoNcbqj+dDL349HhDaVxmazIyMGgBsTYjfjsUyHAXsQCX2Y5ANzkBsTMd3BYJxFFAHA3EMUAcC8RxVDCbWP2RQD9GAXE0Fr8WAnEREBcDcQkQlwJxGdRsRaB6JTQ9nEDMRYSdFmh8JSBWxqE2E4jroeyVQLyKCLMtge6yIhB3IPAfRKCpCwDio1D2Wjx6QW5qAOJGKP8gEB8iYB/I7DQgriPsNAZxoLsk0NxmDsR3oeypSOJTUZUxTEHj3wTiWzjsCQfiCCRzpiHJTQfiGUg0MkC3cxQMHwAA2IQfgA== - + eJx7yMjA8HCQ4lEwCkbBKBgFhMFvRuyYXkCIiX52fWMcvHgUkAcAbV1ODA== - - + + - + - + @@ -55,23 +52,23 @@ - - + + - + - + - + diff --git a/src/maps/castle-hawkthorne-entrance.tmx b/src/maps/castle-hawkthorne-entrance.tmx index e77de3e58..0b8628a32 100644 --- a/src/maps/castle-hawkthorne-entrance.tmx +++ b/src/maps/castle-hawkthorne-entrance.tmx @@ -1,11 +1,8 @@ - + - - - @@ -56,53 +53,53 @@ eJztzlsz1HEAxvH/cqPS7pbDvaJdEfeS7BLuK4VS7qPY7eQtkKK3EOXwFopObyGd3wIlh04zPm/BMH5jZp+Zz/XzjaLdbz0WRRtsssVv/vCXf/yP7cHJDhcviqIESY5xnDLKqaCyaP+bUj7T1HKaOuo5QwONAZpafWbI0kY7F+igk64ATT0+e+njGtfp5wY3GQjQNOIzR5673OM+D3jIaICmMZ/jPGKCxzxhkimeBmh65nOaGZ7zglnmmGchQNNLn69YZInXvOEt73gfoOmDz2U+8onPfOEr3/geoGnF5yo/+Mkav1hng80ATSXFUXSIwxyhlKPESZAs3v+mKp8nOEk1NZwiRZraAE1NPs/SzDlaOE8rGbIBmi76vMRlurnCVXropS9A0y2fgwxxmzsMM0KOfICmwgor7OBvG2e7Qs0= - - + + - + - + - + - + - - + + - + - + @@ -110,21 +107,21 @@ - + - + - + @@ -142,7 +139,7 @@ - + @@ -150,7 +147,7 @@ - + @@ -158,9 +155,9 @@ - - - + + + diff --git a/src/maps/castle-hawkthorne-room-1.tmx b/src/maps/castle-hawkthorne-room-1.tmx index 80087203c..0cd4694cf 100644 --- a/src/maps/castle-hawkthorne-room-1.tmx +++ b/src/maps/castle-hawkthorne-room-1.tmx @@ -1,12 +1,8 @@ - + - - - - @@ -40,8 +36,8 @@ eJzt2EEJACAABEHBJDY3qgjaYR8zcAn2d2uOvayycUeDHi16tOjRokeLHi16tOjRokeLHi16tPwegd/G3n9FywFP75pZ - - + + @@ -49,17 +45,17 @@ - + - + - + diff --git a/src/maps/castle-hawkthorne-room-2.tmx b/src/maps/castle-hawkthorne-room-2.tmx index 40a30311c..6555c698f 100644 --- a/src/maps/castle-hawkthorne-room-2.tmx +++ b/src/maps/castle-hawkthorne-room-2.tmx @@ -1,12 +1,8 @@ - + - - - - @@ -40,8 +36,8 @@ eJzt2LENACAMxMCXMkk2ZxRGgwIKJsCFT/oJnCpdSVeGQ2zuCcIeLPZgsQeLPVjswWIPFnuw2IPFHiz2YLk9AH8bd/5Xv29CrwVZAqN5 - - + + @@ -49,17 +45,17 @@ - + - + - + diff --git a/src/maps/castle-hawkthorne-room-3.tmx b/src/maps/castle-hawkthorne-room-3.tmx index d31ae6d18..9bac46c24 100644 --- a/src/maps/castle-hawkthorne-room-3.tmx +++ b/src/maps/castle-hawkthorne-room-3.tmx @@ -1,12 +1,8 @@ - + - - - - @@ -40,8 +36,8 @@ eJzt2LEJADAMxMAHT5LNM4pHCwE3mSAqdPATyJVXpVdlO8Rui44Q7MFiDxZ7sNiDxR4s9mCxB4s9WOzBYg+W6RHA38bN/+r3Teh1AMz7rHk= - - + + @@ -49,17 +45,17 @@ - + - + - + diff --git a/src/maps/castle-hawkthorne-room-4.tmx b/src/maps/castle-hawkthorne-room-4.tmx index 90482505e..39f84e2ff 100644 --- a/src/maps/castle-hawkthorne-room-4.tmx +++ b/src/maps/castle-hawkthorne-room-4.tmx @@ -1,12 +1,8 @@ - + - - - - @@ -40,8 +36,8 @@ eJzt2LEJADAMxMAHT5LNM4pHCwE3mSAqdPATyJVXpVdlO8Rui44Q7MFiDxZ7sNiDxR4s9mCxB4s9WOzBYg+W6RHA38bN/+r3Teh1AMz7rHk= - - + + @@ -49,18 +45,18 @@ - + - + - - + + diff --git a/src/maps/class-basement.tmx b/src/maps/class-basement.tmx index 939c36e60..2fa18c16b 100644 --- a/src/maps/class-basement.tmx +++ b/src/maps/class-basement.tmx @@ -1,10 +1,7 @@ - + - - - @@ -13,71 +10,71 @@ - + - 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 - - + + - - - - - + + + + + - + - + - + - + - + - - + + @@ -85,7 +82,7 @@ - + @@ -93,7 +90,7 @@ - + @@ -101,7 +98,7 @@ - + @@ -109,7 +106,7 @@ - + @@ -117,7 +114,7 @@ - + @@ -125,7 +122,7 @@ - + @@ -133,7 +130,7 @@ - + @@ -141,7 +138,7 @@ - + @@ -149,7 +146,7 @@ - + diff --git a/src/maps/class-hallway-2.tmx b/src/maps/class-hallway-2.tmx index c7c143fcd..aff4be484 100644 --- a/src/maps/class-hallway-2.tmx +++ b/src/maps/class-hallway-2.tmx @@ -1,10 +1,7 @@ - + - - - @@ -14,6 +11,11 @@ + + + eJztw0ENAAAMA6F71b/kCRkkrJqqqqqq+vIBJVAeMQ== + + eJztlT0KwkAQhXeNnsLYG9BC0T4p9RJa22mjpTfQW+ghFDyAv6A38PcWPsFAGLJhN4YNyDz4ip2d2Zl5KSKF8CVjjYIQgrHKhrGHYLFYrIzkfMlCDfyAmzKjx3LSHhwM8h3sW9TY2SF8VENdndQewUmzdwe13YTeK9ytc/geW7DTzL2DB4kNMfNIMXcZcTel33F6gpfGnDo6Y65LDn5fwS1FXQ+z9sEMzH+cO8nvCjm7Bu96Qky9mPggQqiqZp4q10QmO4S9xvB4AhZgqfCbeqUS9bsUoU3OLXJOIoDfQUw86mMY8zXzVLkmmOxg0ot6pYL6zTD/iGSs8gbMi39G @@ -34,73 +36,73 @@ eJztzjEOABAMRuHWCXD/y7mExWKR2GiiMfC+5G3NT1GRQtcCAAAA8J6mM4+7H+QgEkcp+O5a97Lh/d2eZePkj6v7qnQz4GUdOnOxPg== - - + + - + - + - + - - - - - - + + + + + + - + - + - + - + - + - + - + diff --git a/src/maps/class-hallway.tmx b/src/maps/class-hallway.tmx index a37d6ccf0..9bec93943 100644 --- a/src/maps/class-hallway.tmx +++ b/src/maps/class-hallway.tmx @@ -1,10 +1,7 @@ - + - - - @@ -14,6 +11,11 @@ + + + eJztw0ENAAAMA6F71b/kCRkkrJqqqqqq+vIBJVAeMQ== + + eJzt1EkKwjAUBuAXPYUDikdwwLXn8RS9gtMhnJa6dlzq3uku/lACEkLKa/VJy/vho6RJSfpDa4gGRokpEZEStVNySKPJWUb4MY9hAlOYmX+fqNiZo98FLGEFa+37p9mj3wMc4QRnT99lhyZ9buj3Dg94witj3xWoeq4SaQXmNnivbU6+3TR912KR2/fQw3ffps44Z2jtBV1fE/r+1l6+NAJzTWfM6bsNHejGIju24fbdS9jvM5y1WZ/n7tVnzLl9K1VERol6A0q/ftA= @@ -34,88 +36,88 @@ eJztzLEJACAMBdHECdT9l3MJGxvtFSEgEeUeXBM+KSpSyC0AAAAAb2k6t7rjrhxE4iiFM/ts/LXbWn5ZVCXPgJ91MtWzwA== - - + + - + - + - - - - - + + + + + - + - + - + - + - + - + - + - + - + - + - + diff --git a/src/maps/deans-closet.tmx b/src/maps/deans-closet.tmx index b71e77988..bebeada42 100644 --- a/src/maps/deans-closet.tmx +++ b/src/maps/deans-closet.tmx @@ -1,10 +1,7 @@ - + - - - @@ -14,6 +11,11 @@ + + + eJztw0ENAAAMA6GTVf/KZmJPSFg1VVVVVVVVVVVVVVV9ftdujb8= + + eJztWd1u60QQntRtkos4UgGpUXsACScOFwikcIFAIAI3IH7egUfxo5xH6aPhqeeLv0x21+vTpHB0OtLI9np3Z3bmmx8nIq/0Sq/0LlT/1wq80gdDa5Emd251QT3OTUMxtHkRLT4sOmfe2kbGrzpueGwsLot3UehMFDuXUj3w/rmksb7urll0dUFdPOXqNJbUps/JWz4/xvwzMWaqOvlNblzsxqkWJfVbIYdYOTwXkVyvZ0zhbmtcj6gVY6gizqHlJZQIUFsjmlanfc7c+vi+ic0DnsacN0Twl8rdmP8Q30welxsZtjf2RI28foaeTCXpo7wI6AfScwB3sdywJT43qcz/Iy5Nr30OLteGX2AzdQ59p/5GnkitSfVOW+nx6Flof5+PKhm2t3+fymlKub0tMDhv+d6uGPPY4/PE9LwkLnPsBLIa0Fj+b4bmumesy9VrP4RL6z0ab5/QOdb0Tllr44P0OK0Cc0P25ncx1r00Ny2Ny75Pary913KKf+8P7BOiWD9Sd9xw3p3YuZfEOxv3eTEUa0qo/7V7bzn+CR8WR4wV4bHIUQ62wJkqW2N9T5TeOBbpbcrr1nJaG+CnMjO2GZeQ4fMG4WDP9mE/Ff1+R7WhNF1CMYm5Hpc8NoRLPf+05Y/s3uMxlQ94XM/jcVkH5jKm+JwFvVc97qSr3yvb80F6XFoNOKrhPL4hXUJnrmzflhvsG2Jgz3CoNavxdRu8pHus86Rnurez3EmPgdr8izPBLxu3dmfXIeIazjmTeyHEq+45s2uo7mC+Py/sx2Nm+6cxxjmIfTSES7XnbcufyrFtY1wnav2dsxt0qN08tn/Ir8sEp87DfB2Z7+2KHmEvXXyq/jeSF6Mx/WM1/dpxzn5WS570+VJ6nMR6N/SKKVxyX6fPMzmOeeQ0lVFK7yv8ZlNYrcGz1x3jvFcoh2xtLu6Lrm41WM/fv7gOYPMQ4yFc1k6PsX7Ve/7WmZh9VpE+OcRD+XJCc/T+T+niU59bXD4O4bKQIz80IZuBkDNiNi6k7/Extujv97DJt3ZFT+h77bqff8LAtp1rP4RLYHfl/OJjKxSPEzmtbTE/le5e8/bXLX9j99or5MZyjDm3+5iIrQn9JsS/C7mxbFxeST4uTf6h3/TPHLuxOBqqNdxb+Pkcf5WTSfY55KiCciL3p/rs9UUOcvntgEveM2THIoCbj1v+hHDjc8+Y2laSXN1fY+T7ln+we32P743JqT9OcuMYXKZyT0myc/gS+VJ1Xpkd5gGeGXssjsEl5sGnKVzqFflhRqzPb5wdAvZs0J/f2xVnQN1h/3Au8naCHT1uPmv5c+lxk2v7EK8cLpfO3h4bd45zcMnfaF5PzCkia9g+O/IBP3vbpRjfCDm45G/+ufPVXPpvAz4H17dYPfM8IZ9yrCIX7AK6zZx89B2p/AP/ze36QDJKN59xTzZ6bPkf1QX9hGHoaP5Mwr2V+m0asYH3g7fpouMGV91/avuBb4y/yrA5x73H5crJDuVYxsLUbHljdp3KeFziOz6FS/599MF8Wpq8X+yKsVS+zI1dlfljyz/JMS517c+0B+OS/TEGl1jzK/lyBC7fmm5vGZcLk49+wL4DTnCpfrrN9BP7iPHI11vH2v8rf5dhc8TWIpAvuV/1Nd3nS+iB7w/8XrCwObm4HKrjse99laPy/urlBnvCRWCvHFz+1vLvzg4q8w/aU98hXtkf8FMIl5X1mwvDJdb8Tb7Ef2cxXKrsL87IKf+cU47n3HzJPoD/LqlXyj4vKfc95cdzcSpGzylnSC7HnR/39+36/Uuxs8eLyX0f+V+CgUXE @@ -34,130 +36,130 @@ eJzt2FEOwiAMxvGde+fYJXzxjGaJL5oCCl9L2f6/pIkvSlPKVtw2AAAAjUMUSo93XI26Toih6Hv2Hrgfj/ej9fs98SzEiiJmhoyzEmKVzo/X/q/QR1Y+33lmzn8G6oDTVe+68OMxbzDD9LPOcE/NIuvOc6etdhdS3QVG9jjbeR3JY7Re2Z9RmXMD1Fb9HwnAXK3Z1HqHMs9+1qD0eZboHHrWq31nF0aNcp1/1m3xzKuWZ+S6K4bKL33pQdGXEay+RNkLFaLUDw== - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/src/maps/deans-closet2.tmx b/src/maps/deans-closet2.tmx index 2d06fd149..2a1c6be67 100644 --- a/src/maps/deans-closet2.tmx +++ b/src/maps/deans-closet2.tmx @@ -1,11 +1,8 @@ - + - - - @@ -14,6 +11,11 @@ + + + eJyzYGBgsBjFo3gUj+JRPIpHKAYA8e5icQ== + + eJztkksOwCAIRLmLINfk6NVEokWj1rbpok4yC8Lg8wewtZWFwfQBl5Pf5HtTU8F1yU9LGcoPtbhFbpxHqM9hFTKi60PBaHHxvFdRhr6BN/OYMm5gmsjwZKaXsz3OjncgnZyM2CvmsWXm3Hf4V/qte9B/8ycdKecbyA== @@ -39,22 +41,22 @@ eJxjYBgFo4B4MIVKZlDDHELmU2IHsn5qmEcpoNRuStyPTd8UIjEx6gcKkOL+kQaqBggPFAAAqPAmAQ== - - + + - + - + diff --git a/src/maps/deans-office-2.tmx b/src/maps/deans-office-2.tmx index daa75e4b9..1ae1bc7b9 100644 --- a/src/maps/deans-office-2.tmx +++ b/src/maps/deans-office-2.tmx @@ -1,17 +1,19 @@ - + - - - + + + eJxjZGBgYBzFo3gUj+JhgAHsdgE1 + + eJxTYmBgUKIBpgZgxIKHi7nZQJxDwLwYEsx1htJlQFxOhFuriDAXZKYuEWYhg1YC5oLM9ANiSQaGA6SYOwGPuchmMgNpcjC6uTC/U2ImNrOpZSa62dQ0E9lsapsJw7Qoc0AYAPkCEXI= @@ -32,50 +34,50 @@ eJxjYBgFowA7mEUjc5fSyNxRMAoAKpEBQA== - - + + - + - + - + - + - + - - + + - + @@ -91,7 +93,7 @@ - + @@ -100,7 +102,7 @@ - + @@ -109,7 +111,7 @@ - + @@ -118,7 +120,7 @@ - + @@ -127,7 +129,7 @@ - + @@ -135,7 +137,7 @@ - + @@ -143,6 +145,6 @@ - + diff --git a/src/maps/deans-office.tmx b/src/maps/deans-office.tmx index 884181b8d..6b909d403 100644 --- a/src/maps/deans-office.tmx +++ b/src/maps/deans-office.tmx @@ -1,17 +1,19 @@ - + - - - + + + eJxjZGBgYBzFo3gUj+JhgAHsdgE1 + + eJxTYmBgUKIBHgWDE6ggsSUZGBpoYYcf0FxizBYnEQPNdCBkNjOZGJ/Z5JqJz2xKzUQ3m5pmIptNbTNhmBZlDggDAPUbEN8= @@ -32,22 +34,22 @@ eJxjYBgFowA7mEGB3pl45BZTYO4SCvSOguEPAPbHAnk= - - + + - + - + @@ -56,7 +58,7 @@ - + @@ -64,7 +66,7 @@ - + @@ -72,12 +74,12 @@ - + - + @@ -86,31 +88,31 @@ - - + + - + - + - + - + diff --git a/src/maps/dorm-lobby.tmx b/src/maps/dorm-lobby.tmx index 246650bd8..61d313b94 100644 --- a/src/maps/dorm-lobby.tmx +++ b/src/maps/dorm-lobby.tmx @@ -1,10 +1,7 @@ - + - - - @@ -13,6 +10,11 @@ + + + eJxjZ2BgYB/Fo3gUj+JRTDIGADcICTE= + + eJxjZGBwYKQhZmJgYKAxPkBLzEAjUAMMGxCm1Jw0YCCnA3EGIxUchQXUAc2tB+IGAuZfAuLLZJg/DWjudCCeQcD8V0D8mgzz1wHNXQ/EG8gIn2wkjI2PCyQC7UpCs08GGIQyVDK/Emh2FZr5JkDzTQjoIwXUQDHzEMeMNMYAn2gt+Q== @@ -33,20 +35,20 @@ eJx7yMjA8JCGeBSMglEwdME3RtrioQ4AXc8sWQ== - - + + - - + + - + From 32df34b056d4e6e3b035572bfcab33b5fc47d97d Mon Sep 17 00:00:00 2001 From: edisonout Date: Fri, 8 May 2015 12:36:28 +0100 Subject: [PATCH 3/5] windowed mode fix --- src/level.lua | 27 ++++++++++++++++++++------- src/options.lua | 1 + 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/level.lua b/src/level.lua index b88e49f41..27dea110a 100644 --- a/src/level.lua +++ b/src/level.lua @@ -24,6 +24,7 @@ local Sprite = require 'nodes/sprite' local save = require 'save' local desktopWidth, desktopHeight = love.window.getDesktopDimensions() +local width, height, flags = love.window.getMode( ) local function limit( x, min, max ) return math.min(math.max(x,min),max) @@ -98,11 +99,19 @@ end local function getCameraOffset(map) local prop = map.properties - if not prop.offset or tonumber(prop.offset) < 2 then - return (map.height*map.tileheight - desktopHeight*window.scale)/2 - end - return math.min(tonumber(prop.offset)*map.tileheight + (window.height - desktopHeight*window.scale)/2, - map.height*map.tileheight - desktopHeight*window.scale) + + if not flags.fullscreen then + if not prop.offset then + return 0 + end + return tonumber(prop.offset) * map.tilewidth + else + if not prop.offset or tonumber(prop.offset) < 2 then + return (map.height*map.tileheight - desktopHeight*window.scale)/2 + end + return math.min(tonumber(prop.offset)*map.tileheight + (window.height - desktopHeight*window.scale)/2, + map.height*map.tileheight - desktopHeight*window.scale) + end end local function getTitle(map) @@ -363,8 +372,12 @@ function Level:enter(previous, door, position) self:restartLevel(true) end - local widthDif = self.map.width * self.map.tilewidth - desktopWidth*window.scale - camera.max.x = widthDif > 0 and widthDif or widthDif/2 + if not flags.fullscreen then + camera.max.x = self.map.width * self.map.tilewidth - window.width + else + local widthDif = self.map.width * self.map.tilewidth - desktopWidth*window.scale + camera.max.x = widthDif > 0 and widthDif or widthDif/2 + end sound.playMusic( self.music ) diff --git a/src/options.lua b/src/options.lua index ad3ca4515..23b832fa6 100644 --- a/src/options.lua +++ b/src/options.lua @@ -227,6 +227,7 @@ end function state:updateFullscreen() if self.option_map['FULLSCREEN'].bool then utils.setMode(0, 0, true) + --TODO: large screens & changing scale camera:setScale(window.scale, window.scale) love.mouse.setVisible(false) else From a3645c9a571ce753a879aba4f7bf7b6253591d8f Mon Sep 17 00:00:00 2001 From: edisonout Date: Mon, 11 May 2015 14:38:02 +0100 Subject: [PATCH 4/5] fixes camera when switching between modes --- src/level.lua | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/level.lua b/src/level.lua index 27dea110a..3d6939563 100644 --- a/src/level.lua +++ b/src/level.lua @@ -23,9 +23,6 @@ local Sprite = require 'nodes/sprite' local save = require 'save' -local desktopWidth, desktopHeight = love.window.getDesktopDimensions() -local width, height, flags = love.window.getMode( ) - local function limit( x, min, max ) return math.min(math.max(x,min),max) end @@ -100,6 +97,7 @@ end local function getCameraOffset(map) local prop = map.properties + local width, height, flags = love.window.getMode( ) if not flags.fullscreen then if not prop.offset then return 0 @@ -107,10 +105,10 @@ local function getCameraOffset(map) return tonumber(prop.offset) * map.tilewidth else if not prop.offset or tonumber(prop.offset) < 2 then - return (map.height*map.tileheight - desktopHeight*window.scale)/2 + return (map.height*map.tileheight - height*window.scale)/2 end - return math.min(tonumber(prop.offset)*map.tileheight + (window.height - desktopHeight*window.scale)/2, - map.height*map.tileheight - desktopHeight*window.scale) + return math.min(tonumber(prop.offset)*map.tileheight + (window.height - height*window.scale)/2, + map.height*map.tileheight - height*window.scale) end end @@ -150,7 +148,6 @@ function Level.new(name) level.map.moving_platforms = {} -- Need to give map access to moving platforms level.tileset = tmx.load(level.map) level.collider = HC(100, on_collision, collision_stop) - level.offset = getCameraOffset(level.map) level.music = getSoundtrack(level.map) level.spawn = (level.map.properties and level.map.properties.respawn) or 'studyroom' level.overworldName = (level.map.properties and level.map.properties.overworldName) or 'greendale' @@ -372,12 +369,14 @@ function Level:enter(previous, door, position) self:restartLevel(true) end + local width, height, flags = love.window.getMode( ) if not flags.fullscreen then camera.max.x = self.map.width * self.map.tilewidth - window.width else - local widthDif = self.map.width * self.map.tilewidth - desktopWidth*window.scale + local widthDif = self.map.width * self.map.tilewidth - width*window.scale camera.max.x = widthDif > 0 and widthDif or widthDif/2 end + self.offset = getCameraOffset(self.map) sound.playMusic( self.music ) From 6139e8d70820df6e8c09f168d3fe8a0bf421a489 Mon Sep 17 00:00:00 2001 From: edisonout Date: Mon, 11 May 2015 20:14:04 +0100 Subject: [PATCH 5/5] first load of gamestates --- src/autosave_warning.lua | 7 +++++-- src/credits.lua | 5 ++++- src/instructions.lua | 25 +++++++++++++++---------- src/options.lua | 28 ++++++++++++++++++++-------- src/pause.lua | 23 +++++++++++++++-------- src/scanning.lua | 7 +++++-- src/start.lua | 28 ++++++++++++++++------------ src/update.lua | 17 ++++++++++------- src/verticalparticles.lua | 10 ++++++---- src/welcome.lua | 25 +++++++++++++------------ 10 files changed, 109 insertions(+), 66 deletions(-) diff --git a/src/autosave_warning.lua b/src/autosave_warning.lua index d0601d373..31b065f0d 100644 --- a/src/autosave_warning.lua +++ b/src/autosave_warning.lua @@ -26,6 +26,9 @@ function state:enter() Timer.add(8, function() Gamestate.switch('scanning') end) + local width, height, flags = love.window.getMode() + self.width = width*window.scale + self.height = height*window.scale end function state:leave() @@ -40,8 +43,8 @@ function state:draw() local width = self.background:getWidth() local height = self.background:getHeight() - local x = (window.width - width)/2 - local y = (window.height - height)/2 + local x = (self.width - width)/2 + local y = (self.height - height)/2 love.graphics.draw(self.background, x, y) self.savingAnimation:draw(self.savingImage, x + 10, y + 10) diff --git a/src/credits.lua b/src/credits.lua index 902277c7e..0584b9b53 100644 --- a/src/credits.lua +++ b/src/credits.lua @@ -17,6 +17,9 @@ function state:enter(previous) self.ty = 0 camera:setPosition(0, self.ty) self.previous = previous + local width, height, flags = love.window.getMode() + self.width = width*window.scale + self.height = height*window.scale end function state:leave() @@ -378,7 +381,7 @@ function state:draw() for i = shift - 14, shift + 1 do local name = self.credits[i] if name then - love.graphics.printf(name, 0, window.height + 25 * i, window.width, 'center') + love.graphics.printf(name, 0, self.height + 25 * i, self.width, 'center') end end end diff --git a/src/instructions.lua b/src/instructions.lua index e89a22fb3..b0ee7bbfe 100644 --- a/src/instructions.lua +++ b/src/instructions.lua @@ -37,7 +37,6 @@ menu:onSelect(function() state.statusText = "PRESS NEW KEY" end) function state:init() - VerticalParticles.init() self.arrow = love.graphics.newImage("images/menu/arrow.png") self.background = love.graphics.newImage("images/menu/pause.png") @@ -56,12 +55,16 @@ end function state:enter(previous) fonts.set( 'big' ) sound.playMusic( "daybreak" ) - + VerticalParticles.init() + camera:setPosition(0, 0) self.instructions = controls:getActionmap() self.previous = previous self.option = 0 self.statusText = '' + local width, height, flags = love.window.getMode() + self.width = width*window.scale + self.height = height*window.scale end function state:leave() @@ -82,29 +85,31 @@ function state:draw() VerticalParticles.draw() love.graphics.draw(self.background, - camera:getWidth() / 2 - self.background:getWidth() / 2, - camera:getHeight() / 2 - self.background:getHeight() / 2) + (self.width - self.background:getWidth()) / 2, + (self.height - self.background:getHeight()) / 2) local n = 1 - + local x = (self.width - window.width)/2 + local y = (self.height - window.height)/2 + love.graphics.setColor(255, 255, 255) local back = controls:getKey("START") .. ": BACK TO MENU" local howto = controls:getKey("ATTACK") .. " OR " .. controls:getKey("JUMP") .. ": REASSIGN CONTROL" love.graphics.print(back, 25, 25) love.graphics.print(howto, 25, 55) - love.graphics.print(self.statusText, self.left_column, 280) + love.graphics.print(self.statusText, x + self.left_column, y + 280) love.graphics.setColor( 0, 0, 0, 255 ) for i, button in ipairs(menu.options) do - local y = self.top + self.spacing * (i - 1) + local z = y + self.top + self.spacing * (i - 1) local key = controls:getKey(button) - love.graphics.print(descriptions[button], self.left_column, y, 0, 0.5) - love.graphics.print(key, self.right_column, y, 0, 0.5) + love.graphics.print(descriptions[button], x + self.left_column, z, 0, 0.5) + love.graphics.print(key, x + self.right_column, z, 0, 0.5) end love.graphics.setColor( 255, 255, 255, 255 ) - love.graphics.draw(self.arrow, 135, 87 + self.spacing * menu:selected()) + love.graphics.draw(self.arrow, x + 135, y + 87 + self.spacing * menu:selected()) end function state:remapKey(key) diff --git a/src/options.lua b/src/options.lua index 23b832fa6..820ce1789 100644 --- a/src/options.lua +++ b/src/options.lua @@ -215,6 +215,11 @@ function state:enter(previous, target) camera:setPosition(0, 0) self.previous = previous self.target = target + + local width, height, flags = love.window.getMode() + self.width = width*window.scale + self.height = height*window.scale + end function state:leave() @@ -235,6 +240,11 @@ function state:updateFullscreen() utils.setMode(window.screen_width, window.screen_height, false) love.mouse.setVisible(true) end + --TODO: see if there's a better way to do this + local width, height, flags = love.window.getMode() + self.width = width*window.scale + self.height = height*window.scale + VerticalParticles.init() end function state:updateFpsSetting() @@ -335,15 +345,16 @@ function state:draw() local back = controls:getKey("START") .. ": BACK TO MENU" love.graphics.print(back, 25, 25) - local y = 96 + local x = (self.width - window.width)/2 + local y = 96 + (self.height - window.height)/2 love.graphics.draw(self.background, - camera:getWidth() / 2 - self.background:getWidth() / 2, - camera:getHeight() / 2 - self.background:getHeight() / 2) + (self.width - self.background:getWidth()) / 2, + (self.height - self.background:getHeight()) / 2) love.graphics.setColor( 0, 0, 0, 255 ) - local xoffset = self.page == 'optionspage' and 20 or 0 + local xoffset = self.page == 'optionspage' and x + 20 or x for n, opt in pairs(menu.options) do if tonumber( n ) ~= nil then @@ -352,9 +363,9 @@ function state:draw() local option = self.option_map[opt] if option.bool ~= nil then if option.bool then - love.graphics.draw( self.checkbox_checked, 366, y ) + love.graphics.draw( self.checkbox_checked, x + 366, y ) else - love.graphics.draw( self.checkbox_unchecked, 366, y ) + love.graphics.draw( self.checkbox_unchecked, x + 366, y ) end elseif option.range ~= nil then love.graphics.draw( self.range, 336, y + 2 ) @@ -366,10 +377,11 @@ function state:draw() end if self.page ~= 'optionspage' then - love.graphics.draw( self.arrow, 138, 124 + ( 26 * ( menu.selection - 1 ) ) ) + -- TODO: currently too low down on "GAME" menu + love.graphics.draw( self.arrow, x + 138, y - 52 + ( 26 * ( menu.selection - 1 ) ) ) else love.graphics.setColor(255,255,255,255) - love.graphics.draw( self.bigarrow, 138, 116 + ( 26 * ( menu.selection - 1) ) ) + love.graphics.draw( self.bigarrow, x + 138, y - 110 + ( 26 * ( menu.selection - 1) ) ) end love.graphics.setColor( 255, 255, 255, 255 ) end diff --git a/src/pause.lua b/src/pause.lua index b436fe3ed..6123c2998 100644 --- a/src/pause.lua +++ b/src/pause.lua @@ -20,6 +20,10 @@ function state:enter(previous, player) fonts.set( 'big' ) + local width, height, flags = love.window.getMode() + self.width = width*window.scale + self.height = height*window.scale + camera:setPosition(0, 0) self.option = 0 @@ -91,19 +95,22 @@ function state:draw() VerticalParticles.draw() love.graphics.draw(self.background, - camera:getWidth() / 2 - self.background:getWidth() / 2, - camera:getHeight() / 2 - self.background:getHeight() / 2) + (self.width - self.background:getWidth()) / 2, + (self.height - self.background:getHeight()) / 2) + + local x = (self.width - window.width)/2 + local y = (self.height - window.height)/2 local controls = self.player.controls love.graphics.setColor( 0, 0, 0, 255 ) - love.graphics.print('Controls', 198, 101) - love.graphics.print('Options', 198, 131) - love.graphics.print('Quit to Map', 198, 161) - love.graphics.print('Quit to Menu', 198, 191) - love.graphics.print('Quit to Desktop', 198, 221) + love.graphics.print('Controls', x + 198, y + 101) + love.graphics.print('Options', x + 198, y + 131) + love.graphics.print('Quit to Map', x + 198, y + 161) + love.graphics.print('Quit to Menu', x + 198, y + 191) + love.graphics.print('Quit to Desktop', x + 198, y + 221) love.graphics.setColor( 255, 255, 255, 255 ) - love.graphics.draw(self.arrow, 156, 96 + 30 * self.option) + love.graphics.draw(self.arrow, x + 156, y + 96 + 30 * self.option) local back = controls:getKey("START") .. ": BACK TO GAME" local howto = controls:getKey("ATTACK") .. " OR " .. controls:getKey("JUMP") .. ": SELECT ITEM" love.graphics.print(back, 25, 25) diff --git a/src/scanning.lua b/src/scanning.lua index 7df829d22..5fe2318d4 100644 --- a/src/scanning.lua +++ b/src/scanning.lua @@ -16,6 +16,9 @@ function state:enter(previous) self:refresh() self.previous = previous self.music = sound.playMusic("opening") + local width, height, flags = love.window.getMode() + self.width = width*window.scale + self.height = height*window.scale end function state:keypressed( button ) @@ -57,8 +60,8 @@ function state:draw() love.graphics.setColor( 255, 255, 255, 255 ) -- coloured backgrounds - local width = window.width - local height = window.height + local width = self.width + local height = self.height local xcorner = width/2 - 200 local ycorner = height/2 - 125 diff --git a/src/start.lua b/src/start.lua index 19d5ed3b2..a921abaa1 100644 --- a/src/start.lua +++ b/src/start.lua @@ -41,6 +41,9 @@ function state:enter( previous ) camera:setPosition( 0, 0 ) self.previous = previous self.window = 'main' + local width, height, flags = love.window.getMode() + self.width = width*window.scale + self.height = height*window.scale end function state:leave() @@ -161,8 +164,11 @@ function state:draw() love.graphics.setColor(255, 255, 255) love.graphics.draw(self.background, - camera:getWidth() / 2 - self.background:getWidth() / 2, - camera:getHeight() / 2 - self.background:getHeight() / 2) + (self.width - self.background:getWidth()) / 2, + (self.height - self.background:getHeight()) / 2) + + local x = (self.width - window.width)/2 + local y = 90 + (self.height - window.height)/2 if self.window == 'main' then love.graphics.setColor(255, 255, 255) @@ -172,20 +178,18 @@ function state:draw() love.graphics.print(delete, 25, 55) local yFactor = 20 - local y = 90 - love.graphics.setColor( 0, 0, 0, 255 ) for n, opt in pairs(self.options) do if tonumber( n ) ~= nil then if opt.name and opt.slot then - love.graphics.print( opt.name , 175, y, 0 ) + love.graphics.print( opt.name , x + 175, y, 0 ) y = y + yFactor - love.graphics.print( self.get_slot_level( opt.slot ), 190, y, 0 ) + love.graphics.print( self.get_slot_level( opt.slot ), x + 190, y, 0 ) y = y + yFactor elseif opt.name then y = y + yFactor - love.graphics.print( opt.name, 175, y, 0 ) + love.graphics.print( opt.name, x + 175, y, 0 ) end end end @@ -195,7 +199,7 @@ function state:draw() if self.selection > 2 then arrowYFactor = 2.5 end - love.graphics.draw( self.arrow, 135, 127 + ( (yFactor * arrowYFactor) * ( self.selection - 1 ) ) ) + love.graphics.draw( self.arrow, x + 135, y - 80 + ( (yFactor * arrowYFactor) * ( self.selection - 1 ) ) ) elseif self.window == 'deleteSlot' then love.graphics.setColor(255, 255, 255) local howto = controls:getKey("UP") .. " OR " .. controls:getKey("DOWN") .. ": CHANGE OPTION" @@ -203,11 +207,11 @@ function state:draw() love.graphics.print(howto, 25, 25) love.graphics.print(delete, 25, 55) love.graphics.setColor( 0, 0, 0, 255 ) - love.graphics.printf('Are you sure you want to delete this slot?', 155, 110, self.background:getWidth() - 30, 'left') - love.graphics.print('Yes', 175, 175, 0) - love.graphics.print('No', 175, 205, 0) + love.graphics.printf('Are you sure you want to delete this slot?', x + 155, y + 20, self.background:getWidth() - 30, 'left') + love.graphics.print('Yes', x + 175, y + 85, 0) + love.graphics.print('No', x + 175, y + 115, 0) love.graphics.setColor( 255, 255, 255, 255 ) - love.graphics.draw( self.arrow, 140, 170 + 30 * self.selectionDelete ) + love.graphics.draw( self.arrow, x + 140, y + 80 + 30 * self.selectionDelete ) end end diff --git a/src/update.lua b/src/update.lua index b389c519a..db732a2ce 100644 --- a/src/update.lua +++ b/src/update.lua @@ -21,6 +21,9 @@ function screen:enter() self.logo = love.graphics.newImage('images/menu/splash.png') self.bg = sound.playMusic("ending") self.updater:start() + local width, height, flags = love.window.getMode() + self.width = width*window.scale + self.height = height*window.scale end function screen:update(dt) @@ -54,16 +57,16 @@ end function screen:draw() love.graphics.setColor(255, 255, 255, math.min(255, self.time * 100)) - love.graphics.draw(self.logo, window.width / 2 - self.logo:getWidth() / 2, - window.height / 2 - self.logo:getHeight() / 2) + love.graphics.draw(self.logo, (self.width - self.logo:getWidth()) / 2, + (self.height - self.logo:getHeight()) / 2) if self.progress > 0 then love.graphics.setColor(255, 255, 255) - love.graphics.rectangle("line", 40, window.height - 75, window.width - 80, 10) - love.graphics.rectangle("fill", 40, window.height - 75, - (window.width - 80) * self.progress / 100, 10) - love.graphics.printf(self.message, 40, window.height - 55, - window.width - 80, 'center') + love.graphics.rectangle("line", 40, self.width - 75, self.height - 80, 10) + love.graphics.rectangle("fill", 40, self.height - 75, + (self.width - 80) * self.progress / 100, 10) + love.graphics.printf(self.message, 40, self.height - 55, + self.width - 80, 'center') end end diff --git a/src/verticalparticles.lua b/src/verticalparticles.lua index 21f4f0447..de5a38134 100644 --- a/src/verticalparticles.lua +++ b/src/verticalparticles.lua @@ -7,12 +7,14 @@ function Particle:new() new = {} setmetatable(new, Particle) - local winWidth = window.width + local width, height, flags = love.window.getMode() + self.width = width*window.scale + self.height = height*window.scale new.size = math.random(3) - new.pos = { x = math.random(winWidth), y = math.random(window.height) } + new.pos = { x = math.random(self.width), y = math.random(self.height) } - local ratio = 1.0 - math.cos(math.abs(new.pos.x - winWidth/2) * 2 / winWidth) * 0.6 + local ratio = 1.0 - math.cos(math.abs(new.pos.x - self.width/2) * 2 / self.width) * 0.6 new.speed = 300 * (ratio + math.random()/4) @@ -23,7 +25,7 @@ end function Particle:update(dt) self.pos.y = self.pos.y - (dt * self.speed) - if self.pos.y < 0 then self.pos.y = window.height end + if self.pos.y < 0 then self.pos.y = self.height end end function Particle:draw() diff --git a/src/welcome.lua b/src/welcome.lua index 4f453623b..93c35ef3b 100644 --- a/src/welcome.lua +++ b/src/welcome.lua @@ -22,7 +22,6 @@ function state:init() Gamestate.switch(option) end end) - end function state:enter(previous) @@ -30,6 +29,10 @@ function state:enter(previous) self.arrow = love.graphics.newImage("images/menu/small_arrow.png") self.text = string.format(app.i18n('s_or_s_select_item'), controls:getKey('JUMP'), controls:getKey('ATTACK') ) self.bg = sound.playMusic("ending") + + local width, height, flags = love.window.getMode() + self.width = width*window.scale + self.height = height*window.scale self.line = " terminal:// \n\n operations://loadprogram:(true) \n\n".. " program:-journey-to-the-center-of-hawkthorne \n\n loading simulation ..." @@ -87,23 +90,21 @@ end function state:draw() - --background colour - love.graphics.setColor( 0, 0, 0, 255 ) - love.graphics.rectangle( 'fill', 0, 0, love.graphics:getWidth(), love.graphics:getHeight() ) - love.graphics.setColor( 255, 255, 255, 255 ) + local a = (self.width - window.width)/2 + local b = (self.height - window.height)/2 -- green terminal fonts.set('courier') love.graphics.setColor( 48, 254, 31, 225 ) if self.code_loaded == false then - love.graphics.print(self.line_short, 50, 50, 0, 0.5, 0.5 ) + love.graphics.print(self.line_short, a + 50, b + 50, 0, 0.5, 0.5 ) for i = 1, 7 do - love.graphics.print(self.code_short[i], 60*i - 10, 130, 0, 0.4, 0.4) + love.graphics.print(self.code_short[i], a + 60*i - 10, b + 130, 0, 0.4, 0.4) end else - love.graphics.print(self.line, 50, 50, 0, 0.5, 0.5 ) + love.graphics.print(self.line, a + 50, b + 50, 0, 0.5, 0.5 ) for i = 1, 7 do - love.graphics.print(self.code, 60*i - 10, 130, 0, 0.4, 0.4) + love.graphics.print(self.code, a + 60*i - 10, b + 130, 0, 0.4, 0.4) end end @@ -111,8 +112,8 @@ function state:draw() fonts.set( 'big' ) -- menu - local x = window.width / 2 - self.splash:getWidth()/2 - local y = 2*window.height / 2.5 - self.splash:getHeight()/2 + local x = (self.width - self.splash:getWidth())/2 + local y = 0.8* self.height - self.splash:getHeight()/2 if self.code_loaded then love.graphics.draw(self.splash, x, y) love.graphics.draw(self.arrow, x + 12, y + 23 + 12 * (self.menu:selected() - 1)) @@ -121,7 +122,7 @@ function state:draw() end self.menu_shown = true -- control instructions - love.graphics.print(self.text, window.width/2-65, window.height - 24, 0, 0.5, 0.5) + love.graphics.print(self.text, self.width/2-65, self.height - 24, 0, 0.5, 0.5) end end