--hab=0 modes={playing=0,editing=1} mode=modes.editing seltile = 0 actors={} cameras={} camera_names={"Premiere","EL_ALIEN","BatMan"} current_camera=1 function remove_actor(actor) for index, value in pairs(actors) do if value == actor then table.remove(actors,index) end end end function _init() tiles=loadsurf("tiles.gif") setsource(tiles) local pal=loadpal("tiles.gif") setpal(pal) --mapa_new() abad_init() table.insert(actors,abad) gorro.init() table.insert(actors,gorro) premiere.init() table.insert(actors,premiere) elalien.init() table.insert(actors,elalien) batman.init() table.insert(actors,batman) z = zombie.new() table.insert(actors,z) c=caco.new(13,24,16,true) table.insert(actors,c) table.insert(actors,starter.new(10,44,32,scenes.abad_inici)) table.insert(actors,starter.new(11,16,32,scenes.abad_corfes)) score.create() table.insert(cameras,premiere) table.insert(cameras,elalien) table.insert(cameras,batman) _update=update_game end function text(str,x,y,col) color(16) prnt(str,x-1,y-1) prnt(str,x,y-1) prnt(str,x+1,y-1) prnt(str,x-1,y) prnt(str,x+1,y) prnt(str,x-1,y+1) prnt(str,x,y+1) prnt(str,x+1,y+1) prnt(str,x,y,col) end function draw_hab(hab,x,y,editing) camera(-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 cacau.hab==hab then cacau:draw() end end camera(0,0) end function _update() end function update_dialog() rectfill(16,16,112,50,12) rect(15,15,113,51,16) text("Save the map?",20,20,2) text("This cannot be undone",20,27,2) text("(Y)es (N)o",25,40,2) if btnp(KEY_N) then _update=update_game elseif btnp(KEY_Y) then mapa_save() _update=update_game end end scroll=0 function update_game() cls(16) if mode==modes.editing then draw_hab(abad.hab,0,0,true) text(abad.hab,120,1,2) sspr(0,64+scroll*8,128,48,0,48) color(3) local xx=(seltile&15)*8 local yy=48+(seltile>>4)*8 rect(xx,yy,xx+8,yy+8) text("EDIT",100,1,3) local hx = abad.hab%10 local hy = flr(abad.hab/10) scroll=0 if btnp(KEY_RIGHT) and hx<9 then abad.hab=abad.hab+1 elseif btnp(KEY_LEFT) and hx>0 then abad.hab=abad.hab-1 elseif btnp(KEY_DOWN) and hy<7 then abad.hab=abad.hab+10 elseif btnp(KEY_UP) and hy>0 then abad.hab=abad.hab-10 elseif btnp(KEY_RETURN) then mode=modes.playing mapa_do_backup() elseif btnp(KEY_S) and (btn(KEY_LCTRL) or btn(KEY_LGUI)) then _update=update_dialog elseif btnp(KEY_C) then mapa_cycle_colors(abad.hab) elseif btnp(KEY_M) then mapa_create_minimap() return end if btn(KEY_TAB) then scroll=2 end local mx,my=mousex(),mousey() if mx>>3 < 12 and my>>3 < 6 then text(mx>>3,100,10,2) text(my>>3,111,10,2) text((mx>>3)+(my>>3)*12,118,10,2) end if mbtn(1) then if my>=48 then seltile=(mx>>3)+((my-48+(scroll*8))>>3)*16 elseif mx<96 then mapa_set_tile(abad.hab,mx>>3,my>>3,seltile) end elseif mbtn(3) then if my<48 and mx<96 then mapa_set_tile(abad.hab,mx>>3,my>>3,256) end end if mx>>3 < 12 and my>>3 < 6 then local tx,ty=(mx>>3)<<3,(my>>3)<<3 rect(tx,ty,tx+8,ty+8,3) end else 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,49,8) score.draw() setsource(tiles) prnt("x"..abad.vides,114,13,2) rectfill(102+(abad.energia>>1),30,122,37,16) mapa_update(abad.hab,cameras[current_camera].hab) for key,actor in pairs(actors) do actor:update() if actor.hab==cacau.hab and actor~=abad then if aabb(actor,cacau) then if actor.hit~=nil then actor:hit() cacau.hab=-1 end end end end cacau.update() switches.update() if btnp(KEY_RETURN) then mode=modes.editing mapa_restore_backup() elseif btnp(KEY_1) then current_camera=1 elseif btnp(KEY_2) then current_camera=2 elseif btnp(KEY_3) then current_camera=3 end end end function aabb(a, b) return (a.x+a.bb.x+a.bb.w >= b.x+b.bb.x) and (a.x+a.bb.x <= b.x+b.bb.x+b.bb.w) and (a.y+a.bb.y+a.bb.h >= b.y+b.bb.y) and (a.y+a.bb.y <= b.y+b.bb.y+b.bb.h) end