require "menu" require "mapa" require "textbox" editor={ paused=true, cam={x=0,y=0}, --selected_tile=3, brush={w=1,h=1,tiles={3}}, selection=nil, init=function() set_update(editor.update) --editor.show_menu() editor.new() end, show_menu=function() menu.show({ {"NEW MAP", editor.new}, {"LOAD MAP", function() textbox.show("FILENAME TO LOAD:",editor.load, mapa.name) 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}, {mapa.front_layer and "DISABLE FRONT LAYER" or "ENABLE FRONT LAYER", editor.toggle_front_layer}, {"RESIZE MAP", editor.resize}, {"RELOAD TEXTURES", editor.reload_textures}, {"EXIT", main_init}, }, function()editor.paused=false end) end, reload_textures=function() freesurf(sprites) freesurf(objectes) freesurf(tiles) sprites=loadsurf("sprites.gif") objectes=loadsurf("objects.gif") tiles=loadsurf("tiles.gif") setsource(tiles) local pal=loadpal("tiles.gif") setpal(pal) editor.paused=false end, toggle_front_layer=function() if not mapa.front_layer then mapa.front_layer=newsurf(mapa.w,mapa.h) editor.editing_front_layer=true setmap(mapa.front_layer) for y=0,mapa.h-1 do for x=0,mapa.w-1 do mset(x,y,0) end end else mapa.front_layer=nil 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=newsurf(mapa.w,mapa.h) for y=0,mapa.h-1 do for x=0,mapa.w-1 do setmap(old_surface) local value=mget(x,y) setmap(mapa.surface) mset(x,y,value) end end freesurf(old_surface) setmap(mapa.surface) editor.paused=false end, floodfill=function(x,y,tile) local t=mget(x,y) mset(x,y,tile) if x0 and mget(x-1,y)==t then editor.floodfill(x-1,y,tile) end if y0 and mget(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]=mget(tx1+x-1,ty1+y-1) --mset(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 mset(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 mset(x,y,mget(x-1,y)) end end elseif dx<0 then for y=0,h-1 do for x=0,w-2 do mset(x,y,mget(x+1,y)) end end elseif dy>0 then for y=h-1,1,-1 do for x=0,w-1 do mset(x,y,mget(x,y-1)) end end elseif dy<0 then for y=0,h-2 do for x=0,w-1 do mset(x,y,mget(x,y+1)) end end end end, update=function() cls() camera(editor.cam.x, editor.cam.y) setsource(tiles) setmap(mapa.surface) map(0,0,0,0,mapa.w, mapa.h) if mapa.front_layer then setmap(mapa.front_layer) map(0,0,0,0,mapa.w, mapa.h) end if editor.editing_front_layer then setmap(mapa.front_layer) text("EDITING FRONT LAYER",12,2,10) else setmap(mapa.surface) end local mx,my=mousex()+editor.cam.x,mousey()+editor.cam.y local tx,ty=mx>>3,my>>3 local rx,ry=tx<<3,ty<<3 rect(rx-1, ry-1, rx+8, ry+8, 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 rect(rx1-1, ry1-1, rx2+8, ry2+8, 8) end camera(0,0) if tx>=0 and ty>=0 and tx>3,my>>3 local rx,ry=tx<<3,ty<<3 rect(rx-1, ry-1, rx+8, ry+8, 10) if btnp(KEY_TAB) or btnp(KEY_ESCAPE) then update=editor.update end if mbtnp(1) 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 end }