require "fps" require "mapa" local viewport= require("viewport") local arcade_config = require("arcade_config") o2aX = arcade_config.org2arc_escala local txr = arcade_config.tiles_per_row-1 local txr2 = arcade_config.tiles_per_row_base2 local toff= arcade_config.tiles_offset local tw = arcade_config.tiles_width local th = arcade_config.tiles_height local viewp = viewport.new() function game_init(menu) game_update=update_game end -- function mapa_draw(hab) -- for ty=0,5 do -- for tx=0,11 do -- local tile=mapa[1+hab][1+tx+ty*12] -- if tile~=256 and (tile<126 or mapa.step>4) then -- -- draw.surf((tile&15)*8,64+(tile>>4)*8,8,8,tx*8,ty*8) -- local txr = arcade_config.tiles_per_row-1 -- local txr2 = arcade_config.tiles_per_row_base2 -- local toff= arcade_config.tiles_offset -- local tw = arcade_config.tiles_width -- local th = arcade_config.tiles_height -- draw.surf((tile&txr)*tw,toff+(tile>>txr2)*th,tw,th,tx*tw,ty*th) -- end -- end -- end -- end function render_view ( x, y ) local curr_ssurf = surf.source() local curr_tsurf = surf.target() local nroom, room_x, room_y, tile_offset_x, tile_offset_y = viewp:tile() -- print("COORDS= "..x..", "..y) -- print("ROOM= "..nroom) -- print("RCOORDS= "..room_x..", "..room_y) -- print("TILE_OFF= "..tile_offset_x..", "..tile_offset_y) max_tiles_col = (arcade_config.resolucion.width/arcade_config.tiles_width)+1; -- Los que caben en una pantalla y 1 parcial max_tiles_row = (arcade_config.resolucion.height/arcade_config.tiles_height)+1; -- Los que caben en una pantalla y 1 parcial curr_room = nroom curr_room_x = room_x curr_room_y = room_y surf.target(map_buffer_extra_V) surf.cls(16) surf.target(map_buffer_extra_H) surf.cls(16) surf.target(map_buffer) surf.cls(16) surf.source(tiles) tile_y = room_y for ty=0,max_tiles_row-1 do tile_x = room_x if tile_y>mapa_room_rows-1 then nroom = nroom + 10 tile_y = 0 end curr_room = nroom for tx=0,max_tiles_col-1 do if tile_x>mapa_room_cols-1 then curr_room = curr_room+1 tile_x = 0 end if curr_room >= 80 then break end local tile=mapa[1+curr_room][1+tile_x+tile_y*mapa_room_cols] -- print("R"..curr_room.." ("..tile_x..", "..tile_y..") > "..tile) -- print(" TILE= "..tile) if tile~=256 and (tile<126 or mapa.step>4) then -- draw.surf((tile&15)*8,64+(tile>>4)*8,8,8,tx*8,ty*8) local txr = arcade_config.tiles_per_row-1 local txr2 = arcade_config.tiles_per_row_base2 local toff= arcade_config.tiles_offset local tw = arcade_config.tiles_width local th = arcade_config.tiles_height if tx==0 and ty==max_tiles_row-1 then surf.target(map_buffer_extra_H) draw.surf((tile&txr)*tw,toff+(tile>>txr2)*th,tw,th,tx*tw,0) surf.target(map_buffer) elseif tx==max_tiles_col-1 then surf.target(map_buffer_extra_V) draw.surf((tile&txr)*tw,toff+(tile>>txr2)*th,tw,th,0,ty*th) surf.target(map_buffer) else draw.surf((tile&txr)*tw,toff+(tile>>txr2)*th,tw,th,tx*tw,ty*th) end end tile_x = tile_x+1 end tile_y = tile_y+1 end surf.source(map_buffer) surf.target(0) draw.surf(tile_offset_x,tile_offset_y,viewp.width,viewp.height,0,0,viewp.width,viewp.height) surf.source(map_buffer_extra_V) draw.surf(0, tile_offset_y, tile_offset_x, viewp.height, viewp.width-tile_offset_x, 0, tile_offset_x, viewp.height) surf.source(map_buffer_extra_H) draw.surf(tile_offset_x, 0,viewp.width,tile_offset_y,0,viewp.height-tile_offset_y,viewp.width,tile_offset_y) surf.source(curr_ssurf) surf.source(curr_tsurf) end function update_game() surf.target(0) surf.cls(16) -- surf.target(logo) -- surf.cls(16) -- draw.text("UPDATE_GAME",0,0,15) -- surf.source(logo) -- draw.surf(0,0,36,5,56,70,arcade_config.logo_sf.width,arcade_config.logo_sf.height) -- render_view(10) --- if abad.hurting == 0 then --- draw_hab(abad.hab,0,0) --- --text(abad.hab,1,1,2) --- draw_hab(cameras[current_camera].hab,0,48) --- -- text(camera_names[current_camera],2*o2aX,49*o2aX,8) --- arc_textB(camera_names[current_camera],2*o2aX,49*o2aX,8) --- --- score.draw() --- surf.source(tiles) --- -- draw.text("x"..abad.vides,114*o2aX,13*o2aX,2) --- arc_text("x"..abad.vides,114*o2aX,13*o2aX,2) --- draw.rectf((102+(abad.energia>>1))*o2aX,30*o2aX,(21-(abad.energia>>1))*o2aX,8*o2aX,16) --- else --- draw.surf(0,0,16*o2aX,9*o2aX,50*o2aX,40*o2aX,16*o2aX,9*o2aX,true) --- if abad.hurting > 40 then --- -- draw.text("x"..abad.vides+1,63*o2aX,43*o2aX,3) --- arc_text("x"..abad.vides+1,63*o2aX,43*o2aX,3) --- elseif abad.hurting < 20 then --- -- draw.text("x"..abad.vides,63*o2aX,43*o2aX,2) --- arc_text("x"..abad.vides,63*o2aX,43*o2aX,2) --- end --- end --- --- mapa_update(abad.hab,cameras[current_camera].hab) local vp_x, vp_y = viewp:position() if key.down(keyRight) then if vp_x+1<=(arcade_config.tiles_width*mapa_room_cols*(mapa_rooms_per_piso))-(arcade_config.resolucion.width) then vp_x = vp_x+1 end elseif key.down(keyLeft) then if vp_x>0 then vp_x = vp_x-1 end elseif key.down(keyUp) then if vp_y>0 then vp_y = vp_y -1 end elseif key.down(keyDown) then if vp_y+1<=(arcade_config.tiles_height*mapa_room_rows*mapa_pisos)-(arcade_config.resolucion.height) then vp_y = vp_y+1 end end viewp:position(vp_x, vp_y) render_view(vp_x, vp_y) fps_print() viewp:print() end function draw_hab(hab,x,y,editing) -- print(hab.." "..x.." "..y) view.origin(x,y) mapa_draw(hab) -- if not editing then -- for key,actor in pairs(actors) do -- if actor.hab==hab then -- actor:draw() -- end -- end -- if imp.hab==hab then imp.draw() end -- if bambolla.hab==hab then bambolla.draw() end -- if cacau.hab==hab then cacau:draw() end -- if fireball.hab==hab then fireball:draw() end -- end view.origin(0,0) end