1 line
17 KiB
JavaScript
1 line
17 KiB
JavaScript
function maps(){this.init()}maps.prototype.init=function(){this.blocksInfo=maps_90f36752_8815_4be8_b32b_d7fad1d0542e};maps.prototype.loadFloor=function(c,d){var b=core.floors[c];var a={};a.floorId=b.floorId;a.name=b.name;a.title=b.title;a.canFlyTo=b.canFlyTo;if(!core.isset(d)){d=b.map}var e=function(m,n,h){var g=[];for(var k=0;k<13;k++){for(var l=0;l<13;l++){var f=n.initBlock(l,k,m[k][l]);n.addInfo(f);n.addEvent(f,l,k,h.events[l+","+k]);n.addChangeFloor(f,l,k,h.changeFloor[l+","+k]);if(core.isset(f.event)){g.push(f)}}}return g};if(main.mode=="editor"){main.editor.mapIntoBlocks=function(g,f){return e(g,core.maps,f)}}a.blocks=e(d,this,b);return a};maps.prototype.initBlock=function(d,e,b){var a=null;b=""+b;if(b.length>2){if(b.indexOf(":f")==b.length-2){b=b.substring(0,b.length-2);a=false}else{if(b.indexOf(":t")==b.length-2){b=b.substring(0,b.length-2);a=true}}}b=parseInt(b);var c={x:d,y:e,id:b};if(a!=null){c.enable=a}if(b in this.blocksInfo){c.event=JSON.parse(JSON.stringify(this.blocksInfo[b]))}return c};maps.prototype.addInfo=function(a){if(core.isset(a.event)){if(a.event.cls.indexOf("enemy")==0&&!core.isset(a.event.trigger)){a.event.trigger="battle"}if(a.event.cls=="items"&&!core.isset(a.event.trigger)){a.event.trigger="getItem"}if(!core.isset(a.event.noPass)){if(a.event.cls.indexOf("enemy")==0||a.event.cls.indexOf("npc")==0||a.event.cls=="terrains"){a.event.noPass=true}}if(!core.isset(a.event.animate)){if(a.event.cls=="enemys"||a.event.cls=="npcs"){a.event.animate=2}if(a.event.cls=="animates"||a.event.cls=="enemy48"||a.event.cls=="npc48"){a.event.animate=4}}a.event.height=32;if(a.event.cls=="enemy48"||a.event.cls=="npc48"){a.event.height=48}}};maps.prototype.addEvent=function(a,d,e,b){if(!core.isset(b)){return}if(!core.isset(a.event)){a.event={cls:"terrains",id:"none",noPass:false}}if(typeof b=="string"){b={data:[b]}}else{if(b instanceof Array){b={data:b}}}if(!core.isset(b.data)){b.data=[]}if(core.isset(b.noPass)){a.event.noPass=b.noPass}if(!core.isset(a.enable)&&core.isset(b.enable)){a.enable=b.enable}if(!core.isset(a.event.trigger)){if(core.isset(b.trigger)){a.event.trigger=b.trigger}else{a.event.trigger="action"}}else{if(core.isset(b.trigger)&&b.trigger!="checkBlock"){a.event.trigger=b.trigger}}for(var c in b){if(c!="enable"&&c!="trigger"&&c!="noPass"&&core.isset(b[c])){a.event[c]=core.clone(b[c])}}};maps.prototype.addChangeFloor=function(a,d,e,b,c){if(!core.isset(b)){return}this.addEvent(a,d,e,{trigger:"changeFloor",data:b},c)};maps.prototype.initMaps=function(b){var d={};for(var c=0;c<b.length;c++){var a=b[c];d[a]=this.loadFloor(a)}return d};maps.prototype.save=function(e,b){if(!core.isset(b)){var d={};for(var c in e){d[c]=this.save(e,c)}return d}var f=e[b];var a=[];for(var g=0;g<13;g++){a[g]=[];for(var h=0;h<13;h++){a[g].push(0)}}f.blocks.forEach(function(i){if(core.isset(i.enable)){if(i.enable){a[i.y][i.x]=i.id+":t"}else{a[i.y][i.x]=i.id+":f"}}else{a[i.y][i.x]=i.id}});return a};maps.prototype.load=function(a,b){if(b==undefined){var c={};core.floorIds.forEach(function(d){c[d]=core.maps.loadFloor(d,a[d])});return c}return this.loadFloor(b,a[b])};maps.prototype.getMapArray=function(a){var b=[];for(var c=0;c<13;c++){b[c]=[];for(var d=0;d<13;d++){b[c].push(0)}}a.forEach(function(e){if(!(core.isset(e.enable)&&!e.enable)){b[e.y][e.x]=e.id}});return b};maps.prototype.canMoveHero=function(k,l,b,c){if(!core.isset(k)){k=core.getHeroLoc("x")}if(!core.isset(l)){l=core.getHeroLoc("y")}if(!core.isset(b)){b=core.getHeroLoc("direction")}if(!core.isset(c)){c=core.status.floorId}if(core.isset(core.floors[c].cannotMove)){var a=core.floors[c].cannotMove[k+","+l];if(core.isset(a)&&a instanceof Array&&a.indexOf(b)>=0){return false}}var h=core.getBlock(k,l,c);if(h!=null){nowId=h.block.event.id;var i=nowId.slice(0,5).toLowerCase()=="arrow";if(i){var g=nowId.slice(5).toLowerCase();if(b!=g){return false}}}var j={up:{x:0,y:-1},left:{x:-1,y:0},down:{x:0,y:1},right:{x:1,y:0}};var f=core.getBlock(k+j[b].x,l+j[b].y,c);if(f!=null){nextId=f.block.event.id;var d=nextId.slice(0,5).toLowerCase()=="arrow";if(d){var e=nextId.slice(5).toLowerCase();if((j[b].x+j[e].x)==0&&(j[b].y+j[e].y)==0){return false}}}return true};maps.prototype.canMoveDirectly=function(a,b){if(!core.flags.enableMoveDirectly){return 0}if(core.hasFlag("poison")){return 0}var e=core.getHeroLoc("x"),f=core.getHeroLoc("y");if(e==a&&f==b){return 0}if(core.getBlock(e,f)!=null||core.status.checkBlock.damage[13*e+f]>0){return 0}var m=[],l=[];m[13*e+f]=0;l.push(13*e+f);var d=[[-1,0],[1,0],[0,1],[0,-1]];while(l.length>0){var g=l.shift(),h=parseInt(g/13),i=g%13;for(var c in d){var j=h+d[c][0],k=i+d[c][1];if(j<0||j>=13||k<0||k>=13||m[13*j+k]||core.getBlock(j,k)!=null||core.status.checkBlock.damage[13*j+k]>0){continue}m[13*j+k]=m[13*h+i]+1;if(j==a&&k==b){return m[13*j+k]}l.push(13*j+k)}}return 0};maps.prototype.drawBlock=function(b,a,f,g){var e=b.event.cls,h=b.event.height||32;var c=core.material.icons[e][b.event.id];var d=core.material.images[e];a=(a||0)%(b.event.animate||1);f=f||0;g=g||0;core.canvas.event.clearRect(b.x*32+f,b.y*32+g,32,32);core.canvas.event.drawImage(d,a*32,c*h+h-32,32,32,b.x*32+f,b.y*32+g,32,32);if(h>32){core.canvas.event2.clearRect(b.x*32+f,b.y*32+32-h+g,32,h-32);core.canvas.event2.drawImage(d,a*32,c*h,32,h-32,b.x*32+f,b.y*32+32-h+g,32,h-32)}};maps.prototype.drawMap=function(d,a){core.clearMap("all");core.removeGlobalAnimate(null,null,true);var b=function(){var g=core.floors[d].defaultGround||"ground";var e=core.material.icons.terrains[g];var f=core.material.images.terrains;for(var i=0;i<13;i++){for(var j=0;j<13;j++){core.canvas.bg.drawImage(f,0,e*32,32,32,i*32,j*32,32,32)}}var h=[];if(core.isset(core.floors[d].images)){h=core.floors[d].images;if(typeof h=="string"){h=[[0,0,h]]}}h.forEach(function(s){var r=416,q=1;var k=parseInt(s[0]),l=parseInt(s[1]),o=s[2];if(core.isset(k)&&core.isset(l)&&core.isset(core.material.images.images[o])){k*=32;l*=32;var n=core.material.images.images[o];if(!s[3]){core.canvas.bg.drawImage(n,k*q,l*q,Math.min(r-k*q,q*n.width),Math.min(r-l*q,q*n.height));if(/.*\.gif/i.test(o)){core.dom.gif.innerHTML="";var m=new Image();m.src=core.material.images.images[o].src;m.style.position="absolute";m.style.left=(k*core.domStyle.scale)+"px";m.style.top=(l*core.domStyle.scale)+"px";core.dom.gif.appendChild(m)}}else{core.canvas.event2.drawImage(n,k*q,l*q,Math.min(r-k*q,q*n.width),Math.min(r-l*q,q*n.height))}}})};if(main.mode=="editor"){main.editor.drawMapBg=function(){core.clearMap("bg",0,0,416,416);b()}}else{b()}core.status.floorId=d;core.status.thisMap=core.status.maps[d];var c=function(){var i=core.status.maps[core.status.floorId];var h=i.blocks;var g=core.maps.getMapArray(h);for(var e=0;e<h.length;e++){var f=h[e];if(core.isset(f.event)&&!(core.isset(f.enable)&&!f.enable)){if(f.event.cls=="autotile"){core.drawAutotile(core.canvas.event,g,f,32,0,0)}else{if(f.event.id!="none"){core.drawBlock(f);core.addGlobalAnimate(f)}}}}};if(main.mode=="editor"){main.editor.updateMap=function(){core.removeGlobalAnimate(null,null,true);core.clearMap("event",0,0,416,416);core.clearMap("event2",0,0,416,416);c();core.setGlobalAnimate(core.values.animateSpeed)}}else{c();core.setGlobalAnimate(core.values.animateSpeed);core.drawHero();core.updateStatusBar()}if(core.isset(a)){a()}};maps.prototype.drawAutotile=function(c,n,a,p,m,q){var l=[[10,9,4,3],[10,9,4,13],[10,9,18,3],[10,9,16,15],[10,43,4,3],[10,31,4,25],[10,7,2,3],[10,31,16,5],[48,9,4,3],[8,9,4,1],[36,9,30,3],[36,9,6,15],[46,45,4,3],[46,11,4,25],[12,45,30,3],[34,33,28,27]];var d=function(t,u,v,i,w,x){var y=16*((w-1)%6),z=16*(~~((w-1)/6));t.drawImage(i,y,z,16,16,u,v,x/2,x/2)};var g=function(i,t,u){if(t<0||u<0||t>12||u>12){return 1}else{return n[u][t]==i?1:0}};var b=function(F,G){var v=n[G][F];var E=[];for(var w=0;w<4;w++){var u=0;var C=w%2,D=~~(w/2);for(var z=0;z<4;z++){var A=z%2,B=~~(z/2);var t=g(v,F+C+A-1,G+D+B-1);u+=t*(Math.pow(2,3-z))}E.push(u)}return E};var h=function(z,A){var v=[];var w=b(z,A);for(var u=0;u<4;u++){var t=l[w[u]];v.push(t[3-u])}return v};var r=a.x,s=a.y;var o=h(r,s);if(o[0]==13){if(o[1]==16){o[1]=14}if(o[2]==31){o[2]=19}}if(o[1]==18){if(o[0]==15){o[0]=17}if(o[3]==36){o[3]=24}}if(o[2]==43){if(o[0]==25){o[0]=37}if(o[3]==46){o[3]=44}}if(o[3]==48){if(o[1]==30){o[1]=42}if(o[2]==45){o[2]=47}}for(var j=0;j<4;j++){var k=o[j];var e=r*p+p/2*(j%2),f=s*p+p/2*(~~(j/2));d(c,e+m,f+q,core.material.images.autotile[a.event.id],k,p)}};maps.prototype.noPassExists=function(c,d,b){var a=core.getBlock(c,d,b);if(a==null){return false}return core.isset(a.block.event.noPass)&&a.block.event.noPass};maps.prototype.noPass=function(a,b){return a<0||a>12||b<0||b>12||this.noPassExists(a,b)};maps.prototype.npcExists=function(c,d,b){var a=this.getBlock(c,d,b);if(a==null){return false}return a.block.event.cls.indexOf("npc")==0};maps.prototype.terrainExists=function(d,e,c,b){var a=this.getBlock(d,e,b);if(a==null){return false}return a.block.event.cls=="terrains"&&(core.isset(c)?a.block.event.id==c:true)};maps.prototype.stairExists=function(c,d,b){var a=this.getBlock(c,d,b);if(a==null){return false}return a.block.event.cls=="terrains"&&(a.block.event.id=="upFloor"||a.block.event.id=="downFloor")};maps.prototype.nearStair=function(){var a=core.getHeroLoc("x"),b=core.getHeroLoc("y");return this.stairExists(a,b)||this.stairExists(a-1,b)||this.stairExists(a,b-1)||this.stairExists(a+1,b)||this.stairExists(a,b+1)};maps.prototype.enemyExists=function(d,e,c,b){var a=this.getBlock(d,e,b);if(a==null){return false}return a.block.event.cls.indexOf("enemy")==0&&(core.isset(c)?a.block.event.id==c:true)};maps.prototype.getBlock=function(e,f,b,d){if(!core.isset(b)){b=core.status.floorId}if(!core.isset(d)){d=true}var a=core.status.maps[b].blocks;for(var c=0;c<a.length;c++){if(a[c].x==e&&a[c].y==f&&core.isset(a[c].event)){if(d&&core.isset(a[c].enable)&&!a[c].enable){return null}return{index:c,block:a[c]}}}return null};maps.prototype.getBlockId=function(d,e,b,c){var a=core.getBlock(d,e,b,c);if(a==null){return null}if(core.isset(a.block.event)){return a.block.event.id}return null};maps.prototype.moveBlock=function(s,t,q,r,j,h){r=r||500;core.status.replay.animate=true;core.clearMap("animate",0,0,416,416);var e=core.getBlock(s,t,core.status.floorId,false);if(e==null){if(core.isset(h)){h()}return}core.removeBlock(s,t);core.clearMap("ui",0,0,416,416);core.setAlpha("ui",1);e=e.block;var f=core.material.icons[e.event.cls][e.event.id];var g=core.material.images[e.event.cls];var i=e.event.height||32;var n=1;core.setOpacity("animate",n);core.canvas.animate.drawImage(g,0,f*i,32,i,e.x*32,e.y*32+32-i,32,i);var k=[];q.forEach(function(u){if(typeof u=="string"){k.push(u)}else{if(!core.isset(u.value)){k.push(u.direction)}else{for(var v=0;v<u.value;v++){k.push(u.direction)}}}});var l=32*s,m=32*t,p=0;var o={up:{x:0,y:-1},left:{x:-1,y:0},down:{x:0,y:1},right:{x:1,y:0}};var d=e.event.animate||1;var b=0;var c=0;var a=window.setInterval(function(){c+=r/16/core.status.replay.speed;if(c>=core.values.animateSpeed){b++;c=0;if(b>=d){b=0}}if(k.length==0){if(j){n=0}else{n-=0.06}core.setOpacity("animate",n);core.clearMap("animate",l,m-i+32,32,i);core.canvas.animate.drawImage(g,b*32,f*i,32,i,l,m-i+32,32,i);if(n<=0){clearInterval(a);core.clearMap("animate",0,0,416,416);core.setOpacity("animate",1);core.status.replay.animate=false;if(core.isset(h)){h()}}}else{p++;l+=o[k[0]].x*2;m+=o[k[0]].y*2;core.clearMap("animate",l-32,m-32,96,96);core.canvas.animate.drawImage(g,b*32,f*i,32,i,l,m-i+32,32,i);if(p==16){p=0;k.shift()}}},r/16/core.status.replay.speed)};maps.prototype.animateBlock=function(e,h,g,b){if(h!="hide"){h="show"}core.clearMap("animate",0,0,416,416);if(typeof e[0]=="number"&&typeof e[1]=="number"){e=[e]}var d=[];e.forEach(function(j){var i=core.getBlock(j[0],j[1],core.status.floorId,false);if(i==null){return}i=i.block;d.push({x:j[0],y:j[1],height:i.event.height||32,blockIcon:core.material.icons[i.event.cls][i.event.id],blockImage:core.material.images[i.event.cls]})});if(d.length==0){if(core.isset(b)){b()}return}core.status.replay.animate=true;var c=function(){d.forEach(function(i){core.canvas.animate.drawImage(i.blockImage,0,i.blockIcon*i.height,32,i.height,i.x*32,i.y*32+32-i.height,32,i.height)})};var f=0;if(h=="hide"){f=1}core.setOpacity("animate",f);c();var a=window.setInterval(function(){if(h=="show"){f+=0.1}else{f-=0.1}core.setOpacity("animate",f);if(f>=1||f<=0){clearInterval(a);core.clearMap("animate",0,0,416,416);core.setOpacity("animate",1);core.status.replay.animate=false;if(core.isset(b)){b()}}},g/10/core.status.replay.speed)};maps.prototype.showBlock=function(c,d,b){b=b||core.status.floorId;var a=core.getBlock(c,d,b,false);if(a==null){return}a=a.block;if(core.isset(a.enable)&&!a.enable){a.enable=true;if(b==core.status.floorId&&core.isset(a.event)){core.drawBlock(a);core.addGlobalAnimate(a);core.syncGlobalAnimate()}core.updateStatusBar()}};maps.prototype.removeBlock=function(e,f,b){b=b||core.status.floorId;var a=core.getBlock(e,f,b,false);if(a==null){return}var d=a.index;if(b==core.status.floorId){core.removeGlobalAnimate(e,f);core.canvas.event.clearRect(e*32,f*32,32,32);var c=32;if(core.isset(a.block.event)){c=a.block.event.height||32}if(c>32){core.canvas.event2.clearRect(e*32,f*32+32-c,32,c-32)}}core.removeBlockById(d,b);core.updateStatusBar()};maps.prototype.removeBlockById=function(e,d){var b=core.status.maps[d].blocks,a=b[e];var g=a.x,h=a.y;var c=core.floors[d].events[g+","+h];if(!core.isset(c)){c=core.floors[d].changeFloor[g+","+h]}var f=false;if(core.isset(a.event)&&a.event.cls.indexOf("enemy")==0&&core.enemys.hasSpecial(core.material.enemys[a.event.id].special,23)){f=true}if(!f&&!core.isset(c)){b.splice(e,1);return}a.enable=false};maps.prototype.removeBlockByIds=function(a,b){b.sort(function(c,d){return d-c}).forEach(function(c){core.removeBlockById(c,a)})};maps.prototype.setBlock=function(c,e,f,b){b=b||core.status.floorId;if(!core.isset(c)||!core.isset(e)||!core.isset(f)){return}var d=core.getBlock(e,f,b,false);var a=core.maps.initBlock(e,f,c);core.maps.addInfo(a);core.maps.addEvent(a,e,f,core.floors[b].events[e+","+f]);core.maps.addChangeFloor(a,e,f,core.floors[b].changeFloor[e+","+f]);if(core.isset(a.event)){if(d==null){core.status.maps[b].blocks.push(a)}else{d.block.id=data.number;d.block.event=a.event}if(b==core.status.floorId){core.drawMap(b)}}};maps.prototype.addGlobalAnimate=function(a){if(main.mode=="editor"&&main.editor.disableGlobalAnimate){return}if(!core.isset(a.event)||!core.isset(a.event.animate)||a.event.animate==1){return}var c=core.clone(a);c.status=0;core.status.globalAnimateObjs.push(c)};maps.prototype.removeGlobalAnimate=function(c,d,a){if(main.mode=="editor"&&main.editor.disableGlobalAnimate){return}if(a){core.status.globalAnimateObjs=[];return}for(var b=0;b<core.status.globalAnimateObjs.length;b++){if(core.status.globalAnimateObjs[b].x==c&&core.status.globalAnimateObjs[b].y==d){core.status.globalAnimateObjs.splice(b,1);return}}};maps.prototype.setGlobalAnimate=function(a){if(main.mode=="editor"&&main.editor.disableGlobalAnimate){return}core.syncGlobalAnimate();core.animateFrame.speed=a;core.animateFrame.globalAnimate=true};maps.prototype.syncGlobalAnimate=function(){core.status.globalAnimateObjs.forEach(function(a){a.status=0})};maps.prototype.drawBoxAnimate=function(){for(var b=0;b<core.status.boxAnimateObjs.length;b++){var c=core.status.boxAnimateObjs[b];c.status=((c.status||0)+1)%c.animate;core.clearMap("ui",c.bgx,c.bgy,c.bgWidth,c.bgHeight);core.fillRect("ui",c.bgx,c.bgy,c.bgWidth,c.bgHeight,core.animateFrame.background);core.canvas.ui.drawImage(c.image,c.status*32,c.pos,32,c.height,c.x,c.y,32,c.height)}};maps.prototype.drawAnimate=function(g,i,j,b){if(core.isset(core.status.replay)&&core.status.replay.replaying){if(core.isset(b)){b()}return}if(!core.isset(core.material.animates[g])||!core.isset(i)||!core.isset(j)){if(core.isset(b)){b()}return}clearInterval(core.interval.animateInterval);core.clearMap("animate",0,0,416,416);var a=core.material.animates[g];var h=a.ratio;var c=32*i+16,d=32*j+16;var f=0;var e=function(l){core.clearMap("animate",0,0,416,416);var k=a.frames[l];k.forEach(function(r){var o=a.images[r.index];if(!core.isset(o)){return}var q=o.width*h*r.zoom/100;var p=o.height*h*r.zoom/100;core.setAlpha("animate",r.opacity/255);var m=c+r.x,n=d+r.y;if(!r.mirror&&!r.angle){core.canvas.animate.drawImage(o,m-q/2,n-p/2,q,p)}else{core.saveCanvas("animate");core.canvas.animate.translate(m,n);if(r.angle){core.canvas.animate.rotate(-r.angle*Math.PI/180)}if(r.mirror){core.canvas.animate.scale(-1,1)}core.canvas.animate.drawImage(o,-q/2,-p/2,q,p);core.loadCanvas("animate")}})};e(f++);core.interval.animateInterval=setInterval(function(k){if(f==a.frames.length){clearInterval(core.interval.animateInterval);core.clearMap("animate",0,0,416,416);core.setAlpha("animate",1);if(core.isset(b)){b()}return}e(f++)},50)};maps.prototype.resetMap=function(a){var a=a||core.status.floorId;core.status.maps[a]=this.loadFloor(a);if(a==core.status.floorId){this.drawMap(a,function(){core.drawTip("地图重置成功")})}else{core.drawTip(a+"地图重置成功")}}; |