function love.load() -- GM Stuff mode = "title" -- other modes game, map, store, end -- handcar stuff hcar = love.graphics.newImage("handcar.png") car = love.graphics.newImage("handcar.png") hcarB = love.graphics.newImage("handcarB.png") x = 100 y = 288 speed = 7 drag = 20 -- the amount we slow down every second. isMoving = false; rhit = false lhit = false canL = false canR = true sql = love.audio.newSource("squeak.ogg", "static") sqr = love.audio.newSource("squeak2.ogg", "static") brake = love.audio.newSource("break.ogg", "static") sql:setVolume(0.2) sqr:setVolume(0.2) brake:setVolume(0.5) -- slavecar stuff sico = love.graphics.newImage("coin.png") scar = love.graphics.newImage("scar.png") numSlaves = 5 -- enemy Stuff enemy = love.graphics.newImage("tyrant.png") take = love.audio.newSource("take.ogg", "static") ex = -225 ey = 100 eRate = 25 -- background stuff bg = love.graphics.newImage("bg.png"); bgx= 0 bgy= 0 -- tile background bg2x = 746 -- UI stuff score = 0 vPos = 46 vMax = 714 trackLength = 15 slaves = 1 levelComplete = false gameOver = false -- Map Stuff map = love.graphics.newImage("map.jpg") tarOff = love.graphics.newImage("markOff.png") tarOn = love.graphics.newImage("markOn.png") nBtn = love.graphics.newImage("headNorth.png") canStart = false cities = { { name = "San Antonio", dist = 40, cap = 2, x = 250, y = 420}, { name = "Vicksburg", dist = 36, cap = 4, x = 385, y = 379}, { name = "New Orleans", dist = 27, cap = 6, x = 415, y = 437}, { name = "Atlanta", dist = 22, cap = 4, x = 511, y = 340}, { name = "Savannah", dist = 19, cap = 3, x = 590, y = 378}, { name = "Pittsburgs Landing", dist = 14, cap = 2, x = 433, y = 313}, { name = "Petersburg", dist = 10, cap = 1, x = 628, y = 241} } location = "*****" capacity = "*****" distance = "*****" -- yea! The ol curtain. curtAlpha = 255 end function love.keypressed(k) if k == 'escape' then love.event.quit() end if mode == "game" then -- managed to get some control in here let's gate it up! if levelComplete == false then if k == 'right' then rhit = true; love.audio.play(sqr) if lhit == false and canR then x = x+speed isMoving = true canR = false canL = true end end if k == 'left' then lhit = true; love.audio.play(sql) if rhit == false and canL then x = x+speed canL = false canR = true end end end end end function love.keyreleased(k) if mode == "game" then if levelComplete == false then if k == 'right' then car = hcar; rhit = false; end if k == 'left' then car = hcarB; lhit = false; end end end end function keepTiling() if bgx < -750 then bgx = 747 end if bg2x < -750 then bg2x = 750 end end function updateEnemy() -- let's find some good enemy logic. The player should be able -- to outrun the enemy. plus we have to fake some kind of collision behavior if not levelComplete then if vPos > 100 then ex = ex + eRate*love.timer.getDelta()%rate if ex + enemy:getWidth()*1.5-50 > x then numSlaves = numSlaves -1; ex = ex - enemy:getWidth()-100; love.audio.play(take) end elseif vPos == vMax then ex = ex - eRate*love.timer.getDelta() end else -- move away if on screen at end of level. ex = ex - eRate*love.timer.getDelta()*7 end end function love.update(dt) -- let's start separating these game modes. if mode == "game" then updateGame() elseif mode == "title" then updateTitle() elseif mode == "map" then updateMap() end end function fadeOut(nextScene) -- change the game mode and then fade to the scene if curtAlpha < 255 then curtAlpha = curtAlpha + 15 elseif curtAlpha >= 255 then if nextScene == "map" then resetGame() end mode = nextScene curtAlpha = 255 end end function fadeIn() if curtAlpha > 0 then curtAlpha = curtAlpha - 15 elseif curtAlpha < 0 then curtAlpha = 0 end end function resetGame() score = 0 location = "*****" capacity = "*****" distance = "*****" canStart = false vPos = 46 levelComplete = false gameOver = false ex = -225 x = 100 end function updateMap() -- we have to reset the game .. kinda .. aintwe~? if love.mouse.isDown('r','l') then --fadeOut('game') elseif curtAlpha > 0 then fadeIn() end end function updateTitle() if love.mouse.isDown('r','l') then fadeOut('map') elseif curtAlpha > 0 then fadeIn() end end function updateGame() if curtAlpha > 1 and gameOver == false then fadeIn() end rate = x-100 -- player position from resting place. if rate < 0 then rate = 0 end dt = love.timer.getDelta() keepTiling() updateEnemy() if isMoving then -- move BG and player x = x-drag*dt bgx = bgx-(drag*dt)*rate; -- bg2x = bg2x-drag*love.timer.getDelta()*rate; -- keep handcar on screen ( CLAMP ) if x <= 100 then isMoving = false end if x > 600 then x = 600 ex = ex-50*dt end -- move tracker and keep track on level progress. vPos = vPos + rate/trackLength*dt if vPos >= vMax then isMoving = false vPos = vMax levelComplete = true end -- scoring score = score + math.ceil(rate) end if levelComplete then -- bells and whistles don't update vpos if x > 100 then x = x-drag*3*dt bgx = bgx-(drag*dt)*rate; love.audio.play(brake) else love.audio.stop(brake) -- we win if we free at least one slave. if numSlaves > 0 then gameOver = true end end end if gameOver then fadeOut("map") -- should go to some review scene. or something. end end function drawSlaveIcons() for i=1, numSlaves, 1 do love.graphics.draw(sico, (x-128)+(i*10), y+15) end end function drawMapIcons() for i=1, #cities, 1 do love.graphics.draw( tarOff, cities[i].x, cities[i].y ) if love.mouse.getX() > cities[i].x and love.mouse.getX() < cities[i].x + 40 and love.mouse.getY() > cities[i].y and love.mouse.getY() < cities[i].y + 40 and love.mouse.isDown('r','l') then canStart = true love.graphics.draw( tarOn, cities[i].x, cities[i].y ) -- and display the information in the info box. capacity = cities[i].cap numSlaves = cities[i].cap -- speed adjustment for slaveload. speed = 10 - cities[i].cap distance = cities[i].dist trackLength = cities[i].dist location = cities[i].name -- maybe will change the art one day. end end love.graphics.draw(nBtn,450,100); if love.mouse.getX() > 450 and love.mouse.getX() < 450+nBtn:getWidth() and love.mouse.getY() > 100 and love.mouse.getY() < 100+nBtn:getHeight() and love.mouse.isDown('r','l') and canStart then fadeOut("game") end end function love.draw() -- if mode is inGame , menu, map , shop if mode == "game" then love.graphics.setBackgroundColor( 128,128,255 ) love.graphics.setColor(255,255,255) love.graphics.draw(bg,bgx,bgy) love.graphics.draw(car,x,y); love.graphics.draw(scar,x-128,y); drawSlaveIcons() love.graphics.draw(enemy,ex,ey) -- UI stuff love.graphics.setColor(0,0,0) love.graphics.rectangle( "fill", 0, 0, 768, 100 ) love.graphics.rectangle( "fill", 0, 412, 768, 100 ) love.graphics.setColor(255,255,255) love.graphics.print( love.timer.getFPS()..":fps",x+47,y+80) -- show fps !!! love.graphics.setLineWidth(3) love.graphics.line(50,50,718,50) love.graphics.print("S",30,40) love.graphics.print("E",730,40) love.graphics.print("V",vPos,35) --love.graphics.print(rate,25,25) love.graphics.print("LEVEL : "..location, 25, 425) love.graphics.print("SCORE : "..score, 25,450); love.graphics.print("SLAVES : "..numSlaves, 25,475); -- perhaps we draw the transition over everything. That'll be fun. elseif mode == "title" then love.graphics.print("Harriet Tubmans Underground Railroad",250,250) love.graphics.setBackgroundColor(0,0,0) elseif mode == "map" then love.graphics.draw(map,0,0) love.graphics.setColor(0,0,0,150) love.graphics.rectangle("fill",0,0,400,275) love.graphics.setColor(255,255,255) -- info corner for stage selection love.graphics.print( "STAGE SELECT: ",50,25) love.graphics.print( "Choose a starting point in slaver territory >>",50,50) love.graphics.print( "Target: "..location,50,75) love.graphics.print( "Capacity: "..capacity,50,100) love.graphics.print( "Distance: "..distance,50,125) love.graphics.print( "Alternate pressing the Left and Right Arrow Keys \nto push the cart Northward. \n\nIf all of your slaves get captured you lose!\n\nHold HEAD NORTH To Begin.", 50, 150) -- drawing the map targets. drawMapIcons() end love.graphics.setColor(0,0,0,curtAlpha) love.graphics.rectangle("fill",0,0,768,512) love.graphics.setColor(255,255,255) end
Monday, June 17, 2013
GoodByeLove2d
New REBEL> Goodbye Love2d