F4 debug & cannotIn/Out

This commit is contained in:
ckcz123 2018-10-29 12:59:24 +08:00
parent c9eb0c9b85
commit b9dc593bd1
8 changed files with 80 additions and 55 deletions

View File

@ -231,6 +231,18 @@ comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
"_type": "checkbox", "_type": "checkbox",
"_bool": "bool", "_bool": "bool",
"_data": "该图块是否可被破墙或地震" "_data": "该图块是否可被破墙或地震"
},
"cannotOut": {
"_leaf": true,
"_type": "textarea",
"_range": "thiseval==null||(thiseval instanceof Array)",
"_data": "该图块的不可出方向\n可以在这里定义在该图块时不能前往哪个方向可以达到悬崖之类的效果\n例如 [\"up\", \"left\"] 代表在该图块时不能往上和左走\n此值对背景层、事件层、前景层上的图块均有效"
},
"cannotIn": {
"_leaf": true,
"_type": "textarea",
"_range": "thiseval==null||(thiseval instanceof Array)",
"_data": "该图块的不可入方向\n可以在这里定义不能从哪个方向访问该图块可以达到悬崖之类的效果\n例如 [\"down\", \"right\"] 代表不能从下或右访问此图块\n此值对背景层、事件层、前景层上的图块均有效"
} }
} }
}, },
@ -385,7 +397,8 @@ comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
"cannotMove": { "cannotMove": {
"_leaf": true, "_leaf": true,
"_type": "textarea", "_type": "textarea",
"_data": "该点不可通行的方向 \n 可以在这里定义该点不能前往哪个方向,可以达到悬崖之类的效果\n例如 [\"up\", \"left\"], // 代表该点不能往上和左走" "_range": "thiseval==null||(thiseval instanceof Array)",
"_data": "该点不可通行的方向 \n 可以在这里定义该点不能前往哪个方向,可以达到悬崖之类的效果\n例如 [\"up\", \"left\"] 代表该点不能往上和左走"
} }
} }
} }

View File

@ -422,6 +422,10 @@ actions.prototype.keyUp = function(keyCode, altKey) {
} }
} }
break; break;
case 118: // F7开启debug模式
if (core.status.heroStop)
core.debug();
break;
} }

View File

@ -422,6 +422,7 @@ control.prototype.tryMoveDirectly = function (destX, destY) {
return false; return false;
var testMove = function (dx, dy, dir) { var testMove = function (dx, dy, dir) {
if (dx<0 || dx>=core.bigmap.width|| dy<0 || dy>=core.bigmap.height) return false; if (dx<0 || dx>=core.bigmap.width|| dy<0 || dy>=core.bigmap.height) return false;
if (core.isset(dir) && !core.canMoveHero(dx,dy,dir)) return false;
if (core.control.moveDirectly(dx, dy)) { if (core.control.moveDirectly(dx, dy)) {
if (core.isset(dir)) core.moveHero(dir, function() {}); if (core.isset(dir)) core.moveHero(dir, function() {});
return true; return true;

View File

@ -92,6 +92,8 @@ function core() {
'floorId': null, 'floorId': null,
'thisMap': null, 'thisMap': null,
'maps': null, 'maps': null,
'bgmaps': {},
'fgmaps': {},
'checkBlock': {}, // 显伤伤害 'checkBlock': {}, // 显伤伤害
'lockControl': false, 'lockControl': false,

View File

@ -1020,13 +1020,8 @@ events.prototype.insertAction = function (action, x, y, callback) {
////// 获得面前的物品(轻按) ////// ////// 获得面前的物品(轻按) //////
events.prototype.getNextItem = function() { events.prototype.getNextItem = function() {
if (!core.status.heroStop || !core.flags.enableGentleClick) return false; if (!core.status.heroStop || !core.flags.enableGentleClick) return false;
// 检查cannotMove
var x = core.getHeroLoc('x'), y=core.getHeroLoc('y'), direction=core.getHeroLoc('direction'); if (!core.canMoveHero()) return false;
if (core.isset(core.floors[core.status.floorId].cannotMove)) {
var cannotMove = core.floors[core.status.floorId].cannotMove[x+","+y];
if (core.isset(cannotMove) && cannotMove instanceof Array && cannotMove.indexOf(direction)>=0)
return false;
}
var nextX = core.nextX(), nextY = core.nextY(); var nextX = core.nextX(), nextY = core.nextY();
var block = core.getBlock(nextX, nextY); var block = core.getBlock(nextX, nextY);

View File

@ -264,17 +264,21 @@ maps.prototype.canMoveHero = function(x,y,direction,floorId) {
return false; return false;
} }
var nowBlock = core.getBlock(x,y,floorId); var check = function (block, name) {
if (nowBlock!=null){ if (!core.isset(block)) return true;
var nowId = nowBlock.block.event.id; if (block instanceof Array) return check((block[y]||[])[x], name);
var nowIsArrow = nowId.slice(0, 5).toLowerCase() == 'arrow'; if (typeof block == 'number') return check(core.maps.initBlock(0,0,block), name);
if(nowIsArrow){ if (core.isset(block.block)) return check(block.block, name);
var nowArrow = nowId.slice(5).toLowerCase(); return ((block.event||{})[name]||[]).indexOf(direction)<0;
if (direction != nowArrow) {
return false;
}
}
} }
var getNumber = function (floorId, name, x, y) {
return (core.maps.getBgFgMapArray(floorId, name)[y]||[])[x];
}
// 检查该点的cannotOut
if (!check(core.getBlock(x,y,floorId),"cannotOut") || !check(getNumber(floorId,"bg",x,y),"cannotOut") || !check(getNumber(floorId,"fg",x,y),"cannotOut"))
return false;
var scan = { var scan = {
'up': {'x': 0, 'y': -1}, 'up': {'x': 0, 'y': -1},
'left': {'x': -1, 'y': 0}, 'left': {'x': -1, 'y': 0},
@ -282,18 +286,9 @@ maps.prototype.canMoveHero = function(x,y,direction,floorId) {
'right': {'x': 1, 'y': 0} 'right': {'x': 1, 'y': 0}
}; };
var nx = x+scan[direction].x, ny = y+scan[direction].y; var nx = x+scan[direction].x, ny = y+scan[direction].y;
var nextBlock = core.getBlock(nx,ny); // 检查目标点的cannotIn
if (nextBlock!=null){ if (!check(core.getBlock(nx,ny,floorId),"cannotIn") || !check(getNumber(floorId,"bg",nx,ny),"cannotIn") || !check(getNumber(floorId,"fg",nx,ny),"cannotIn"))
var nextId = nextBlock.block.event.id; return false;
// 遇到单向箭头处理
var isArrow = nextId.slice(0, 5).toLowerCase() == 'arrow';
if(isArrow){
var nextArrow = nextId.slice(5).toLowerCase();
if ( (scan[direction].x + scan[nextArrow].x) == 0 && (scan[direction].y + scan[nextArrow].y) == 0 ) {
return false;
}
}
}
// 检查将死的领域 // 检查将死的领域
if (floorId==core.status.floorId && core.status.hero.hp <= core.status.checkBlock.damage[nx+core.bigmap.width*ny] if (floorId==core.status.floorId && core.status.hero.hp <= core.status.checkBlock.damage[nx+core.bigmap.width*ny]
@ -392,8 +387,31 @@ maps.prototype.drawBlock = function (block, animate, dx, dy) {
} }
} }
maps.prototype.getBgFgMapArray = function (floorId, name) {
floorId = floorId||core.status.floorId;
var width = core.floors[floorId].width || 13;
var height = core.floors[floorId].height || 13;
if (core.isset(core.status[name+"maps"][floorId]))
return core.status[name+"maps"][floorId];
var arr = core.clone(core.floors[floorId][name+"map"] || []);
if(main.mode=='editor')arr = core.clone(editor[name+"map"])||arr;
for (var x = 0; x < width; x++) {
for (var y = 0; y < height; y++) {
arr[y] = arr[y] || [];
if (core.hasFlag(name + "_" + floorId + "_" + x + "_" + y)) arr[y][x] = 0;
else arr[y][x] = core.getFlag(name + "v_" + floorId + "_" + x + "_" + y, arr[y][x] || 0);
if(main.mode=='editor')arr[y][x]= arr[y][x].idnum || arr[y][x] || 0;
}
}
core.status[name+"maps"][floorId] = core.clone(arr);
return arr;
}
////// 背景/前景图块的绘制 ////// ////// 背景/前景图块的绘制 //////
maps.prototype.drawBgFgMap = function (floorId, canvas, name) { maps.prototype.drawBgFgMap = function (floorId, canvas, name) {
floorId = floorId || core.status.floorId;
var width = core.floors[floorId].width || 13; var width = core.floors[floorId].width || 13;
var height = core.floors[floorId].height || 13; var height = core.floors[floorId].height || 13;
@ -401,20 +419,10 @@ maps.prototype.drawBgFgMap = function (floorId, canvas, name) {
var blockIcon = core.material.icons.terrains[groundId]; var blockIcon = core.material.icons.terrains[groundId];
var blockImage = core.material.images.terrains; var blockImage = core.material.images.terrains;
var getMapArray = function (name) { if (!core.isset(core.status[name+"maps"]))
var arr = core.clone(core.floors[floorId][name+"map"] || []); core.status[name+"maps"] = {};
if(main.mode=='editor')arr = core.clone(editor[name+"map"])||arr;
for (var x = 0; x < width; x++) { var arr = this.getBgFgMapArray(floorId, name);
for (var y = 0; y < height; y++) {
arr[y] = arr[y] || [];
if (core.hasFlag(name + "_" + floorId + "_" + x + "_" + y)) arr[y][x] = 0;
else arr[y][x] = core.getFlag(name + "v_" + floorId + "_" + x + "_" + y, arr[y][x] || 0);
if(main.mode=='editor')arr[y][x]= arr[y][x].idnum || arr[y][x] || 0;
}
}
return arr;
}
var arr = getMapArray(name);
for (var x = 0; x < width; x++) { for (var x = 0; x < width; x++) {
for (var y = 0; y < height; y++) { for (var y = 0; y < height; y++) {
if (name=='bg') if (name=='bg')
@ -1163,6 +1171,8 @@ maps.prototype.setBgFgBlock = function (name, number, x, y, floorId) {
if (name!='bg' && name!='fg') return; if (name!='bg' && name!='fg') return;
core.setFlag(name+"v_"+floorId+"_"+x+"_"+y, number); core.setFlag(name+"v_"+floorId+"_"+x+"_"+y, number);
core.status[name+"maps"][floorId] = null;
if (floorId == core.status.floorId) if (floorId == core.status.floorId)
core.drawMap(floorId); core.drawMap(floorId);
} }
@ -1331,6 +1341,7 @@ maps.prototype.setBgFgMap = function (type, name, loc, floorId, callback) {
var flag = name+"_"+floorId+"_"+x+"_"+y; var flag = name+"_"+floorId+"_"+x+"_"+y;
core.setFlag(flag, type=='show'?false:true); core.setFlag(flag, type=='show'?false:true);
}) })
core.status[name+"maps"][floorId]=null;
if (floorId==core.status.floorId) { if (floorId==core.status.floorId) {
core.drawMap(floorId, callback); core.drawMap(floorId, callback);

View File

@ -120,13 +120,12 @@ functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
var enemy = core.material.enemys[enemyId]; var enemy = core.material.enemys[enemyId];
// 播放战斗音效和动画 // 播放战斗音效和动画
var equipAnimate = 'hand'; var equipAnimate = 'hand', equipId = (core.status.hero.equipment||[])[0];
if (core.flags.equipment) { if (core.isset(equipId) && core.isset((core.material.items[equipId].equip||{}).animate))
var equipId = (core.status.hero.equipment||[])[0]; equipAnimate = core.material.items[equipId].equip.animate;
if (core.isset(core.material.items[equipId]) && core.isset(core.material.items[equipId].equip.animate)) // 检查equipAnimate是否存在SE如果不存在则使用默认音效
equipAnimate = core.material.items[equipId].equip.animate; if (!core.isset((core.material.animates[equipAnimate]||{}).se))
} core.playSound('attack.mp3');
core.playSound('attack.mp3');
core.drawAnimate(equipAnimate, x, y); core.drawAnimate(equipAnimate, x, y);
var damage = core.enemys.getDamage(enemyId, x, y); var damage = core.enemys.getDamage(enemyId, x, y);

View File

@ -146,10 +146,10 @@ maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
////////////////////////// 其他部分 ////////////////////////// ////////////////////////// 其他部分 //////////////////////////
// 171-200 其他(单向箭头、灯、箱子等等) // 171-200 其他(单向箭头、灯、箱子等等)
'161':{'cls': 'terrains', 'id': 'arrowUp', 'noPass': false}, // 单向上箭头 '161':{'cls': 'terrains', 'id': 'arrowUp', 'noPass': false, "cannotOut": ["left","right","down"], "cannotIn": ["down"]}, // 单向上箭头
'162':{'cls': 'terrains', 'id': 'arrowDown', 'noPass': false}, // 单向下箭头 '162':{'cls': 'terrains', 'id': 'arrowDown', 'noPass': false, "cannotOut": ["left","right","up"], "cannotIn": ["up"]}, // 单向下箭头
'163':{'cls': 'terrains', 'id': 'arrowLeft', 'noPass': false}, // 单向左箭头 '163':{'cls': 'terrains', 'id': 'arrowLeft', 'noPass': false, "cannotOut": ["up","down","right"], "cannotIn": ["right"]}, // 单向左箭头
'164':{'cls': 'terrains', 'id': 'arrowRight', 'noPass': false}, // 单向右箭头 '164':{'cls': 'terrains', 'id': 'arrowRight', 'noPass': false, "cannotOut": ["up","down","left"], "cannotIn": ["left"]}, // 单向右箭头
'165':{'cls': 'terrains', 'id': 'light', 'trigger': 'changeLight', 'noPass': false}, // 灯 '165':{'cls': 'terrains', 'id': 'light', 'trigger': 'changeLight', 'noPass': false}, // 灯
'166':{'cls': 'terrains', 'id': 'darkLight', 'noPass': true}, // 暗灯 '166':{'cls': 'terrains', 'id': 'darkLight', 'noPass': true}, // 暗灯
'167':{'cls': 'terrains', 'id': 'ski', 'trigger': 'ski', 'noPass': false}, // 滑冰 '167':{'cls': 'terrains', 'id': 'ski', 'trigger': 'ski', 'noPass': false}, // 滑冰