diff --git a/data/scripts/entities/arrow.lua b/data/scripts/entities/arrow.lua index bb2a8ab..9e5c420 100644 --- a/data/scripts/entities/arrow.lua +++ b/data/scripts/entities/arrow.lua @@ -2,7 +2,7 @@ Arrow = Entity:New(x,y) function Arrow:New(x,y,rotation,speed) local o = Entity:New(x,y) - + arrow = arrow + 1 o.pos = {x = x, y = y} o.speed = speed or 0 o.sprite_rotation = rotation or 0 @@ -32,45 +32,47 @@ function Arrow:HandleAnimation() end function Arrow:DoPhysics() - -- horizontal collisions - if not isThereAnyCollisionAt( - self.pos.x + self.vel.x, - self.pos.y - ) then - self.pos.x = self.pos.x + self.vel.x - else - while not isThereObjectAt( - self.pos.x + math.sign(self.vel.x), - self.pos.y, - objects.collisions - ) do - self.pos.x = self.pos.x + math.sign(self.vel.x) + if not self.stuck then + -- horizontal collisions + if not isThereAnyCollisionAt( + self.pos.x + self.vel.x, + self.pos.y + ) then + self.pos.x = self.pos.x + self.vel.x + else + while not isThereObjectAt( + self.pos.x + math.sign(self.vel.x), + self.pos.y, + objects.collisions + ) do + self.pos.x = self.pos.x + math.sign(self.vel.x) + end + self.stuck = true end - self.stuck = true - end - -- vertical collision - if not isThereAnyCollisionAt( - self.pos.x, - self.pos.y + self.vel.y - ) then - self.pos.y = self.pos.y + self.vel.y - else - while not isThereObjectAt( + -- vertical collision + if not isThereAnyCollisionAt( self.pos.x, - self.pos.y + math.sign(self.vel.y), - objects.collisions - ) do - self.pos.y = self.pos.y + math.sign(self.vel.y) + self.pos.y + self.vel.y + ) then + self.pos.y = self.pos.y + self.vel.y + else + while not isThereObjectAt( + self.pos.x, + self.pos.y + math.sign(self.vel.y), + objects.collisions + ) do + self.pos.y = self.pos.y + math.sign(self.vel.y) + end + self.stuck = true + end + -- stuck into collisions + if self.stuck then + --lets allow the arrow to tip a bit into the thing + self.pos.x = self.pos.x + self.vel.x / 5 + self.pos.y = self.pos.y + self.vel.y / 5 + self.vel.x = 0 + self.vel.y = 0 + self.illuminated = false end - self.stuck = true - end - -- stuck into collisions - if self.stuck then - --lets allow the arrow to tip a bit into the thing - self.pos.x = self.pos.x + self.vel.x / 5 - self.pos.y = self.pos.y + self.vel.y / 5 - self.vel.x = 0 - self.vel.y = 0 - self.illuminated = false end end diff --git a/data/scripts/entities/fairy.lua b/data/scripts/entities/fairy.lua index b9c92e9..c06d042 100644 --- a/data/scripts/entities/fairy.lua +++ b/data/scripts/entities/fairy.lua @@ -50,8 +50,8 @@ end function Fairy:DoPhysics() - local random_x = math.random(-0.04,0.04) - local random_y = math.random(-0.04,0.04) + local random_x = math.random(-4, 4)/100 + local random_y = math.random(-4, 4)/100 self.vel.x = self.vel.x + random_x self.vel.y = self.vel.y + random_y -- move diff --git a/data/scripts/entities/kupo.lua b/data/scripts/entities/kupo.lua index 508a1f5..d0aff6b 100644 --- a/data/scripts/entities/kupo.lua +++ b/data/scripts/entities/kupo.lua @@ -69,9 +69,9 @@ function Kupo:Smart() self.bow_rotation = angle end - -- holding tight dispersion -- also affets arrows + -- holding tight dispersion -- also affects arrows if self.bow_rotation == angle then - self.bow_rotation = self.bow_rotation + math.rad(math.random(math.abs(self.bow_frame-self.bow_aim_frames-self.bow_frames)/2)) + self.bow_rotation = self.bow_rotation + math.rad(math.random(math.abs(math.floor(self.bow_frame-self.bow_aim_frames-self.bow_frames)/2))) end -- AIMING AI diff --git a/data/scripts/game.lua b/data/scripts/game.lua index 22174ef..e811436 100644 --- a/data/scripts/game.lua +++ b/data/scripts/game.lua @@ -1,5 +1,12 @@ function stepEditor() + palette = palette or false AnimateTiles() + if love.keyboard.isDown("tab") and not pressed then + if palette then palette = false else palette = true end + local pressed = true + else + pressed = false + end end function stepGame() @@ -28,6 +35,9 @@ function drawEditor() end gameworldDraw() + if palette then + paletteDraw() + end end function drawGame() @@ -91,3 +101,66 @@ function gameworldLighting() love.graphics.scale(1,1) DrawDarkness() end + +function paletteDraw() + local width = LevelData.tileset:getPixelWidth()/tileProperties.width + local height = LevelData.tileset:getPixelHeight()/tileProperties.height + + local position_x = 1 + local position_y = 1 + for i = 1, #TileIndex-width-1 do + + love.graphics.draw( + LevelData.tileset, + TileIndex[i], + position_x * tileProperties.width*2, + (--[[p_scroll +]]position_y) * tileProperties.height*2, + 0, + 2, + 2 + ) + position_x = position_x + 1 + + if position_x > width then + position_x = position_x - width + position_y = position_y + 1 + end + end + + love.graphics.rectangle( + "line", + tileProperties.width*2, + (--[[p_scroll +]] 1) * tileProperties.height*2, + 2*LevelData.tileset:getPixelWidth(), + 2*LevelData.tileset:getPixelHeight() + ) +end +--[[ +function DrawSelectingPaletteTile() + if selecting_tile ~= nil then + local width = TileProperties.tileset:getPixelWidth()/TileProperties.width + local height = TileProperties.tileset:getPixelHeight()/TileProperties.height + + local positionx = 1 + local positiony = 1 + + for i = 1, #Tile-12 do + if i == selecting_tile then + love.graphics.rectangle( + "line", + positionx * TileProperties.width*2, + (p_scroll + positiony) * TileProperties.height*2, + TileProperties.width*2-1, + TileProperties.height*2-1 + ) + end + + positionx = positionx + 1 + + if positionx > width then + positionx = positionx - width + positiony = positiony + 1 + end + end + end +end]] diff --git a/data/scripts/lights.lua b/data/scripts/lights.lua index 48d2349..0e81773 100644 --- a/data/scripts/lights.lua +++ b/data/scripts/lights.lua @@ -19,6 +19,7 @@ function CreateLight(x,y,range,lum,flicker) o.flicker_speed = flicker_speed or 60/12 o.flicker_time = 0 table.insert(Lights,o) + return o end diff --git a/main.lua b/main.lua index b05ff7c..a528a3f 100644 --- a/main.lua +++ b/main.lua @@ -1,3 +1,4 @@ +<<<<<<< HEAD function love.load() do_pause = false @@ -140,3 +141,149 @@ function love.draw() drawGame() end end +======= +function love.load() + arrow = 0 + + do_pause = false + + debug = false + debug_collision = false + editor_mode = false + + textScale = 1 + fps_count = 0 + fps_second = 0 + fps_draw = 0 + fps_total = 0 + + love.graphics.setColor(1,1,1) + love.keyboard.setKeyRepeat(true) + love.graphics.setDefaultFilter("nearest") -- good pixel + + game = { + scale = 2, + width = love.graphics.getWidth(), + height = love.graphics.getHeight(), + paused = false + } + + require "data/scripts" + Canvas = { + Darkness = CreateDarkness() + } + love.graphics.setCanvas(Canvas.Darkness) + SetDarkness() + love.graphics.setCanvas() + + Camera.width = game.width + Camera.height = game.height + + levelList = {"level1","2","3","ewae","tileset"} + levelNum = 1 + currLevel = levelList[levelNum] + LoadedEntities = {} + LevelLoadTiles() + + main_Player = Player:New(75,50) + + table.insert(LoadedEntities,main_Player) + table.insert(LoadedEntities,Kupo:New(100,150)) + table.insert(LoadedEntities,Kupo:New(300,150)) + table.insert(LoadedEntities,Decoration:New(200,89,animation.decoration.candelabra,80)) + table.insert(LoadedEntities,Fairy:New(200,88)) + + gravity = 0.2 +end + +function love.update(dt) + -- fps counter + if fps_second >= 1 then + fps_second = fps_second - 1 + fps_draw = fps_count + fps_count = 0 + fps_total = fps_total + 1 + end + fps_second = fps_second + dt + fps_count = fps_count + 1 + current_dt = dt + + + if editor_mode then + stepEditor() + else + stepGame() + end +end + + +function love.wheelmoved(_, y) + if editor_mode then + if palette then + p_scroll = p_scroll + y or 0 + else + local oscale = game.scale + game.scale = math.max(0.1,game.scale + y/16) + end + end +end + +function love.keypressed(key) + if key == "escape" then + if do_pause then + do_pause = false + else + pausepage = 1 + do_pause = true + end + end + + if key == "f1" then + if debug then + debug = false + debug_collision = true + elseif debug_collision then + debug_collision = false + else + debug = true + end + end + + if key == "f2" then + if editor_mode then + + else + main_Player.pos.x, main_Player.pos.y = 16,-10 + end + end + + if key == "f3" then + LoadLevel() + end + + if key == "f4" then + if editor_mode then + editor_mode = false + else + editor_mode = true + end + end +end + +function love.draw() + if game.width ~= love.graphics.getWidth() or game.height ~= love.graphics.getHeight() then + game.width = love.graphics.getWidth() + game.height = love.graphics.getHeight() + game_resize = true + else + game_resize = false + end + + if editor_mode then + drawEditor() + else + drawGame() + end + love.graphics.print(arrow,10,40) +end +>>>>>>> 5f0256e0afc22c4f091fb621b7ff06b7d3be79c7