require "menu" require "mapa" require "textbox" require "fileselect" editor={ paused=true, cam={x=0,y=0}, --selected_tile=3, brush={w=1,h=1,tiles={3}}, selection=nil, cx=0, cy=0, init=function() set_update(editor.update) --editor.show_menu() editor.new() end, editfrom=function() game.paused = nil set_update(editor.update) --editor.show_menu() editor.load(game.level .. ".map") editor.cam.x = game.cam.x editor.cam.y = game.cam.y end, show_menu=function() menu.show({ {"NEW MAP", editor.new}, {"LOAD MAP", function() fileselect.show("FILE TO LOAD:",editor.load, ".map") end}, {"SAVE MAP", function() if mapa.name~=nil then editor.save(mapa.name) else textbox.show("FILENAME TO SAVE:",editor.save, mapa.name) end end}, {editor.editing_front_layer and "DISABLE FRONT LAYER" or "ENABLE FRONT LAYER", editor.toggle_front_layer}, {"RESIZE MAP", editor.resize}, {"RELOAD TEXTURES", editor.reload_textures}, {"PLAY FROM HERE", editor.playfromhere}, {"EXIT", main_init}, }, function()editor.paused=false end) end, playfromhere=function() game.startfromeditor(string.sub(mapa.name,1,-5), editor.cx, editor.cy) end, reload_textures=function() surf.free(sprites) surf.free(objectes) surf.free(tiles) sprites=surf.load("sprites.gif") objectes=surf.load("objects.gif") tiles=surf.load("tiles.gif") surf.source(tiles) local p=pal.load("tiles.gif") pal.set(p) editor.paused=false end, toggle_front_layer=function() if editor.editing_front_layer then map.set(mapa.surface) editor.editing_front_layer=false; else if not mapa.front_layer then mapa.front_layer=surf.new(mapa.w,mapa.h) editor.editing_front_layer=true map.set(mapa.front_layer) for y=0,mapa.h-1 do for x=0,mapa.w-1 do map.tile(x,y,0) end end else editor.editing_front_layer=true map.set(mapa.front_layer) end end editor.paused=false end, resize=function() textbox.show("NEW MAP WIDTH:",function(value) editor.new_w=value textbox.show("NEW MAP HEIGHT:", function(value) editor.new_h=value editor.do_resize() end, tostring(mapa.h)) end, tostring(mapa.w)) end, do_resize=function() local old_surface= mapa.surface mapa.w=tonumber(editor.new_w) mapa.h=tonumber(editor.new_h) mapa.surface=surf.new(mapa.w,mapa.h) for y=0,mapa.h-1 do for x=0,mapa.w-1 do map.set(old_surface) local value=map.tile(x,y) map.set(mapa.surface) map.tile(x,y,value) end end surf.free(old_surface) map.set(mapa.surface) editor.paused=false end, floodfill=function(x,y,tile) local t=map.tile(x,y) map.tile(x,y,tile) if x0 and map.tile(x-1,y)==t then editor.floodfill(x-1,y,tile) end if y0 and map.tile(x,y-1)==t then editor.floodfill(x,y-1,tile) end end, create_stamp=function() local tx1,ty1,tx2,ty2=editor.selection.x1,editor.selection.y1,editor.selection.x2,editor.selection.y2 if tx1>tx2 then tx1,tx2=tx2,tx1 end if ty1>ty2 then ty1,ty2=ty2,ty1 end editor.brush.w=tx2-tx1+1 editor.brush.h=ty2-ty1+1 local w,h=editor.brush.w,editor.brush.h local p=1 for y=1,h do for x=1,w do editor.brush.tiles[p]=map.tile(tx1+x-1,ty1+y-1) --map.tile(tx+x-1,ty+y-1,editor.brush.tiles[p]) p=p+1 end end end, stamp=function(tx,ty) local w,h=editor.brush.w,editor.brush.h local p=1 for y=1,h do for x=1,w do map.tile(tx+x-1,ty+y-1,editor.brush.tiles[p]) p=p+1 end end end, displace=function(dx,dy) local w,h=mapa.w,mapa.h if dx>0 then for y=0,h-1 do for x=w-1,1,-1 do map.tile(x,y,map.tile(x-1,y)) end end elseif dx<0 then for y=0,h-1 do for x=0,w-2 do map.tile(x,y,map.tile(x+1,y)) end end elseif dy>0 then for y=h-1,1,-1 do for x=0,w-1 do map.tile(x,y,map.tile(x,y-1)) end end elseif dy<0 then for y=0,h-2 do for x=0,w-1 do map.tile(x,y,map.tile(x,y+1)) end end end end, update=function() surf.cls() view.origin(editor.cam.x, editor.cam.y) surf.source(tiles) map.set(mapa.surface) map.draw() --map(0,0,0,0,mapa.w, mapa.h) if mapa.front_layer then map.set(mapa.front_layer) map.draw() --map(0,0,0,0,mapa.w, mapa.h) end if editor.editing_front_layer then map.set(mapa.front_layer) text("EDITING FRONT LAYER",12,2,10) else map.set(mapa.surface) end local mx,my=mouse.pos() local tx,ty=(mx+editor.cam.x)>>3,(my+editor.cam.y)>>3 editor.cx, editor.cy = tx, ty local rx,ry=tx<<3,ty<<3 draw.rect(rx-1, ry-1, 10, 10, 10) if editor.selection then local rx1,ry1,rx2,ry2=editor.selection.x1<<3,editor.selection.y1<<3,editor.selection.x2<<3,editor.selection.y2<<3 if rx1>rx2 then rx1,rx2=rx2,rx1 end if ry1>ry2 then ry1,ry2=ry2,ry1 end draw.rect(rx1-1, ry1-1, rx2-rx1+10, ry2-ry1+10, 8) end view.origin(0,0) if tx>=0 and ty>=0 and tx>3,my>>3 local rx,ry=tx<<3,ty<<3 draw.rect(rx-1, ry-1, 10, 10, 10) if key.press(key.TAB) or key.press(key.ESCAPE) then update=editor.update end if mouse.press(mouse.LEFT) then if tx<16 and ty<16 then editor.brush.w=1 editor.brush.h=1 editor.brush.tiles={} editor.brush.tiles[1]=ty*16+tx end update=editor.update end end, new=function() mapa.new(128,128) editor.editing_front_layer=nil editor.paused=false end, save=function(filename) mapa.save(filename) editor.paused=false end, load=function(filename) mapa.load(filename) editor.editing_front_layer=nil editor.paused=false editor.cam.x=0 editor.cam.y=0 end }