diff --git a/images/animates.png b/images/animates.png
index c1dbdf3d..20949a3a 100644
Binary files a/images/animates.png and b/images/animates.png differ
diff --git a/images/items.png b/images/items.png
index 5df16337..c1458fe0 100644
Binary files a/images/items.png and b/images/items.png differ
diff --git a/images/magictower.png b/images/magictower.png
new file mode 100644
index 00000000..8e0a90d3
Binary files /dev/null and b/images/magictower.png differ
diff --git a/images/meaning.txt b/images/meaning.txt
index 1f4c43f4..179c356b 100644
--- a/images/meaning.txt
+++ b/images/meaning.txt
@@ -1,4 +1,4 @@
-# 此文件是每个数字所代表的意思,可被地图生成器读取和使用
+# 此文件是每个数字所代表的意思,可被地图生成器读取和使用
# 可以模仿此格式在后面写上任意被识别内容
@@ -7,18 +7,22 @@
# 注意中间以小逗号分开;不要有空格;后面可以加任意"#"代表注释
### 0-20 地形 ###
-0,terrains,0 # 路面
+0,terrains,0 # 路面;此项必须在第一条。
1,terrains,1 # 黄色墙(经典墙)
2,terrains,2 # 白色墙
3,terrains,3 # 蓝色墙
4,terrains,4 # 星空
5,terrains,5 # 岩浆
-6,terrains,15 # 蓝色商店左
-7,terrains,16 # 蓝色商店右
-8,terrains,17 # 红色商店左
-9,terrains,18 # 红色商店右
-10,animates,23 #血网(经过收到伤害)
-# 备注:11-20待定,也许是毒网等地形
+6,terrains,5 # 冰面
+7,terrains,15 # 蓝色商店左
+8,terrains,16 # 蓝色商店右
+9,terrains,17 # 红色商店左
+10,terrains,18 # 红色商店右
+11,animates,23 # 血网(经过受到伤害)
+12,animates,24 # 毒网(经过中毒)
+13,animates,25 # 衰网(经过衰弱)
+14,animates,26 # 咒网(经过诅咒)
+# 可自行往后添加
### 21-80 物品 ###
# 消耗品
@@ -62,12 +66,15 @@
57,items,8 # 地震卷轴
58,items,24 # 解毒药水
59,items,25 # 解衰药水
-60,items,26 # 解咒药水
+60,items,27 # 解咒药水
61,items,28 # 万能药水
62,items,42 # 屠龙匕首
-# 备注:63-80待定,比如类似于新新魔塔的魔杖
+63,items,46 # 金钱袋
+64,items,47 # 绿鞋
+65,items,48 # 圣锤
+# 可自行往后添加
-### 81-100 门、楼梯、传送门 ###
+### 81-120 门、楼梯、传送门 ###
81,terrains,9 # 黄门
82,terrains,10 # 蓝门
83,terrains,11 # 红门
@@ -77,7 +84,31 @@
87,terrains,7 # 上楼梯
88,terrains,6 # 下楼梯
89,animates,21 # 传送门
+90,animates,19 # 星空传送
+91,animates,30 # 上箭头传送
+92,animates,28 # 左箭头传送
+93,animates,27 # 下箭头传送
+94,animates,29 # 右箭头传送
-### 101-200 怪物 ###
+### 121-150 NPC ###
+121,npcs,0 # 经典老人
+122,npcs,1 # 经典商人
+123,npcs,2 # 小偷
+124,npcs,3 # 仙子
+125,npcs,4 # 神秘男老人
+126,npcs,5 # 神秘女老人
+127,npcs,6 # 老头
+128,npcs,7 # 小孩
+129,npcs,8 # 木牌
+130,npcs,9 # 经验商店
+131,npcs,10 # 金币商店
+132,npcs,11 # 公主
+# 可以添加更多的NPC图标
+
+
+# 在此可以继续添加更多的事件,比如单向箭头、感叹号开关、箱子等等
+
+
+### 201-300 怪物 ###
# 将会按照enemys.png顺序依次读取怪物
-# 如101绿色史莱姆,102红色史莱姆,依次类推
+# 如201绿色史莱姆,202红色史莱姆,依次类推
diff --git a/images/terrains.png b/images/terrains.png
index 99a26359..594ea615 100644
Binary files a/images/terrains.png and b/images/terrains.png differ
diff --git a/index.html b/index.html
index a08f5712..a57128ec 100644
--- a/index.html
+++ b/index.html
@@ -70,7 +70,7 @@
-
+
diff --git a/libs/core.js b/libs/core.js
index c8874175..c9c8c9d4 100644
--- a/libs/core.js
+++ b/libs/core.js
@@ -8,6 +8,8 @@ function core() {
this.canvas = {};
this.images = [];
this.sounds = {};
+ this.floorIds = [];
+ this.floors = {};
this.firstData = {};
this.material = {
'images': {},
@@ -54,19 +56,7 @@ function core() {
'played': false,
// 勇士属性
- 'hero': {
- 'id': '',
- 'name': '',
- 'hp': 0,
- 'atk': 0,
- 'def': 0,
- 'mdef': 0,
- 'money': 0,
- 'experience': 0,
- 'loc': {'direction': 'down', 'x': 0, 'y': 0},
- 'flyRange': [],
- 'items': [],
- },
+ 'hero': {},
// 当前地图
'floorId': null,
@@ -111,28 +101,29 @@ function core() {
/////////// 系统事件相关 ///////////
-core.prototype.init = function (dom, statusBar, canvas, images, sounds, coreData) {
+core.prototype.init = function (dom, statusBar, canvas, images, sounds, floorIds, floors, coreData) {
core.dom = dom;
core.statusBar = statusBar;
core.canvas = canvas;
core.images = images;
core.sounds = sounds;
+ core.floorIds = floorIds;
+ core.floors = floors;
for (var key in coreData) {
core[key] = coreData[key];
}
+ core.flags = core.data.flags;
core.firstData = core.data.getFirstData();
core.initStatus.shops = core.firstData.shops;
core.initStatus.npcs = core.firstData.npcs;
core.dom.versionLabel.innerHTML = core.firstData.version;
core.dom.logoLabel.innerHTML = core.firstData.title;
core.material.items = core.items.getItems();
- // core.status.maps = core.maps.getMaps();
- core.initStatus.maps = core.maps.getMaps();
+ core.initStatus.maps = core.maps.initMaps(floorIds);
core.material.enemys = core.clone(core.enemys.getEnemys());
core.material.icons = core.icons.getIcons();
core.material.events = core.events.getEvents();
core.material.npcs = core.npcs.getNpcs();
- core.flags = core.data.flags;
// test if iOS
core.musicStatus.soundStatus = core.getLocalStorage('soundStatus', true);
@@ -368,7 +359,49 @@ core.prototype.restart = function() {
/////////// 键盘、鼠标事件相关 ///////////
-core.prototype.keyDown = function(e) {
+core.prototype.onkeyDown = function(e) {
+ if (!core.isset(core.status.holdingKeys))core.status.holdingKeys=[];
+ var isArrow={37:true,38:true,39:true,40:true}[e.keyCode]
+ if(isArrow){
+ for(var ii =0;iicore.floorIds.indexOf(core.status.floorId))
+ core.status.hero.flyRange.push(floorId);
+ else
+ core.status.hero.flyRange.unshift(floorId);
}
window.setTimeout(function () {
@@ -1530,45 +1588,23 @@ core.prototype.drawMap = function (mapName, callback) {
var mapBlocks = mapData.blocks;
core.status.floorId = mapName;
core.status.thisMap = mapData;
- var x, y, blockIcon, blockImage;
+ var blockIcon, blockImage;
core.clearMap('all');
core.rmGlobalAnimate(null, null, true);
core.enabledAllTrigger();
- for (x = 0; x < 13; x++) {
- for (y = 0; y < 13; y++) {
+ for (var x = 0; x < 13; x++) {
+ for (var y = 0; y < 13; y++) {
blockIcon = core.material.icons.terrains.ground;
blockImage = core.material.images.terrains;
- core.canvas.bg.drawImage(blockImage, 0, blockIcon.loc * blockIcon.size, blockIcon.size, blockIcon.size, x * blockIcon.size, y * blockIcon.size, blockIcon.size, blockIcon.size);
+ core.canvas.bg.drawImage(blockImage, 0, blockIcon * 32, 32, 32, x * 32, y * 32, 32, 32);
}
}
- x = 0;
- y = 0;
for (var b = 0; b < mapBlocks.length; b++) {
- if (core.isset(mapBlocks[b].bg)) {
- blockIcon = core.material.icons[mapBlocks[b].bg.cls][mapBlocks[b].bg.id];
- blockImage = core.material.images[mapBlocks[b].bg.cls];
- x = mapBlocks[b].x * blockIcon.size;
- y = mapBlocks[b].y * blockIcon.size;
- if (mapBlocks[b].bg.cls != 'empty') {
- core.canvas.bg.drawImage(blockImage, 0, blockIcon.loc * blockIcon.size, blockIcon.size, blockIcon.size, x, y, blockIcon.size, blockIcon.size);
- core.addGlobalAnimate(mapBlocks[b].bg.animate, x, y, 'bg', blockIcon.loc, blockIcon.size, blockImage);
- }
- else {
- core.canvas.bg.clearRect(x, y, blockIcon.size, blockIcon.size);
- }
- }
- else {
- blockIcon = core.material.icons.terrains.ground;
- blockImage = core.material.images.terrains;
- x = mapBlocks[b].x * blockIcon.size;
- y = mapBlocks[b].y * blockIcon.size;
- core.canvas.bg.drawImage(blockImage, 0, blockIcon.loc * blockIcon.size, blockIcon.size, blockIcon.size, x, y, blockIcon.size, blockIcon.size);
- }
if (core.isset(mapBlocks[b].event)) {
blockIcon = core.material.icons[mapBlocks[b].event.cls][mapBlocks[b].event.id];
blockImage = core.material.images[mapBlocks[b].event.cls];
- core.canvas.event.drawImage(core.material.images[mapBlocks[b].event.cls], 0, blockIcon.loc * blockIcon.size, blockIcon.size, blockIcon.size, x, y, blockIcon.size, blockIcon.size);
- core.addGlobalAnimate(mapBlocks[b].event.animate, x, y, 'event', blockIcon.loc, blockIcon.size, blockImage);
+ core.canvas.event.drawImage(core.material.images[mapBlocks[b].event.cls], 0, blockIcon * 32, 32, 32, mapBlocks[b].x * 32, mapBlocks[b].y * 32, 32, 32);
+ core.addGlobalAnimate(mapBlocks[b].event.animate, mapBlocks[b].x * 32, mapBlocks[b].y * 32, blockIcon, blockImage);
}
}
core.setGlobalAnimate(core.firstData.animateSpeed);
@@ -1662,14 +1698,23 @@ core.prototype.enemyExists = function (x, y, id) {
}
core.prototype.idEndWith = function (x, y, idStr) {
- var blocks = core.status.thisMap.blocks;
- for (var n = 0; n < blocks.length; n++) {
- if (blocks[n].x == x && blocks[n].y == y && core.isset(blocks[n].event)) {
- var id = blocks[n].event.id;
- return id.substring(id.length-idStr.length)==idStr;
+ var block = core.getBlock(x,y);
+ if (block==null) return false;
+ var id = block.block.event.id;
+ return id.substring(id.length-idStr.length)==idStr;
+}
+
+core.prototype.getBlock = function (x, y, floorId, needEnable) {
+ floorId = floorId || core.status.floorId;
+ needEnable = needEnable || true;
+ var blocks = core.status.maps[floorId].blocks;
+ for (var n=0;n 0) {
var background = core.canvas.ui.createPattern(core.material.ground, "repeat");
core.drawBoxAnimate(background);
core.interval.boxAnimate = setInterval(function () {
core.drawBoxAnimate(background);
- }, speed);
+ }, core.firstData.animateSpeed);
}
}
@@ -1887,8 +1934,8 @@ core.prototype.drawBoxAnimate = function (background) {
obj.status = obj.status == 0 ? 1 : 0;
core.clearMap('ui', obj.bgx, obj.bgy, obj.bgsize, obj.bgsize);
core.fillRect('ui', obj.bgx, obj.bgy, obj.bgsize, obj.bgsize, background);
- core.canvas.ui.drawImage(obj.image, obj.status * obj.icon.size, obj.icon.loc * obj.icon.size,
- obj.icon.size, obj.icon.size, obj.x, obj.y, obj.icon.size, obj.icon.size);
+ core.canvas.ui.drawImage(obj.image, obj.status * 32, obj.icon * 32,
+ 32, 32, obj.x, obj.y, 32, 32);
}
}
@@ -1908,6 +1955,26 @@ core.prototype.getHeroLoc = function (itemName) {
return core.status.hero.loc[itemName];
}
+core.prototype.nextX = function() {
+ var scan = {
+ 'up': {'x': 0, 'y': -1},
+ 'left': {'x': -1, 'y': 0},
+ 'down': {'x': 0, 'y': 1},
+ 'right': {'x': 1, 'y': 0}
+ };
+ return core.getHeroLoc('x')+scan[core.getHeroLoc('direction')].x;
+}
+
+core.prototype.nextY = function () {
+ var scan = {
+ 'up': {'x': 0, 'y': -1},
+ 'left': {'x': -1, 'y': 0},
+ 'down': {'x': 0, 'y': 1},
+ 'right': {'x': 1, 'y': 0}
+ };
+ return core.getHeroLoc('y')+scan[core.getHeroLoc('direction')].y;
+}
+
/**
* 更新显伤
*/
@@ -1973,11 +2040,14 @@ core.prototype.setItem = function (itemId, itemNum) {
core.status.hero.items[itemCls][itemId] = itemNum;
}
-core.prototype.useKey = function (itemId) {
+core.prototype.rmItem = function (itemId) {
if (!core.hasItem(itemId)) return false;
var itemCls = core.material.items[itemId].cls;
core.status.hero.items[itemCls][itemId]--;
core.updateStatusBar();
+ if (itemCls=='tools' && core.status.hero.items[itemCls][itemId]==0) {
+ delete core.status.hero.items[itemCls][itemId];
+ }
return true;
}
@@ -2004,66 +2074,45 @@ core.prototype.addItem = function (itemId, itemNum) {
core.status.hero.items[itemCls][itemId] += itemNum;
}
-/*
-core.prototype.removeBlock = function(itemX, itemY) {
- var mapBlocks = core.status.thisMap.blocks;
- for(var b = 0;b < mapBlocks.length;b++) {
- if(mapBlocks[b].x == itemX && mapBlocks[b].y == itemY) {
- // delete mapBlocks[b].event;
- // mapBlocks[b]
- core.status.thisMap.blocks.splice(b,1);
- break;
- }
- }
-}
-*/
-
-core.prototype.getItemEffect = function (itemId, itemNum) {
- core.items.getItemEffect(itemId, itemNum);
-}
-
-core.prototype.getItemEffectTip = function (itemId) {
- return core.items.getItemEffectTip(itemId);
-}
-
core.prototype.getItem = function (itemId, itemNum, itemX, itemY, callback) {
// core.getItemAnimate(itemId, itemNum, itemX, itemY);
core.playSound('item', 'ogg');
var itemCls = core.material.items[itemId].cls;
- core.getItemEffect(itemId, itemNum);
+ core.items.getItemEffect(itemId, itemNum);
core.removeBlock('event', itemX, itemY);
var text = '获得 ' + core.material.items[itemId].name;
if (itemNum > 1) text += "x" + itemNum;
- if (itemCls === 'items') text += core.getItemEffectTip(itemId);
- core.drawTip(text, 'image', core.material.icons.items[itemId]);
+ if (itemCls === 'items') text += core.items.getItemEffectTip(itemId);
+ core.drawTip(text, core.material.icons.items[itemId]);
core.canvas.event.clearRect(itemX * 32, itemY * 32, 32, 32);
core.updateStatusBar();
- if (core.isset(callback)) callback();
+
+ // 检查处理后的事件。
+ var event = core.floors[core.status.floorId].afterGetItem[itemX+","+itemY];
+ if (core.isset(event)) {
+ core.events.doEvents(event, itemX, itemY, callback);
+ }
+ else if (core.isset(callback)) callback();
}
-core.prototype.drawTip = function (text, type, itemIcon) {
- type = type || 'normal';
+core.prototype.drawTip = function (text, itemIcon) {
var textX, textY, width, height, hide = false, opacityVal = 0;
clearInterval(core.interval.tipAnimate);
core.setFont('data', "16px Arial");
core.saveCanvas('data');
core.setOpacity('data', 0);
- if (type == 'normal') {
+ if (!core.isset(itemIcon)) {
textX = 16;
textY = 18;
width = textX + core.canvas.data.measureText(text).width + 16;
height = 42;
}
- else if (type == 'image' && core.isset(itemIcon)) {
+ else {
textX = 44;
textY = 18;
width = textX + core.canvas.data.measureText(text).width + 8;
height = 42;
}
- else {
- core.loadCanvas('data');
- return;
- }
core.interval.tipAnimate = window.setInterval(function () {
if (hide) {
opacityVal -= 0.1;
@@ -2075,7 +2124,7 @@ core.prototype.drawTip = function (text, type, itemIcon) {
core.clearMap('data', 5, 5, 400, height);
core.fillRect('data', 5, 5, width, height, '#000');
if (core.isset(itemIcon)) {
- core.canvas.data.drawImage(core.material.images.items, 0, itemIcon.loc * itemIcon.size, itemIcon.size, itemIcon.size, 10, 8, itemIcon.size, itemIcon.size);
+ core.canvas.data.drawImage(core.material.images.items, 0, itemIcon * 32, 32, 32, 10, 8, 32, 32);
}
core.fillText('data', text, textX + 5, textY + 15, '#fff');
if (opacityVal > 0.6 || opacityVal < 0) {
@@ -2218,7 +2267,7 @@ core.prototype.npcAction = function() {
'image': core.material.images.npcs,
'x': left + 15, 'y': top + 30, 'icon': core.material.icons.npcs[npc.icon]
});
- core.setBoxAnimate(core.firstData.animateSpeed);
+ core.setBoxAnimate();
// 对话
core.canvas.ui.textAlign = "left";
diff --git a/libs/data.js b/libs/data.js
index d352a263..e33cc97a 100644
--- a/libs/data.js
+++ b/libs/data.js
@@ -7,14 +7,13 @@ data.prototype.init = function() {
'title': '魔塔样板',
'name': 'template',
'version': 'Ver 1.0.0 (Beta)',
- 'floorId': 'MT1',
- 'enableExperience': true,
+ 'floorId': 'sample0',
'hero': {
'id': 'hero1',
'name': '勇士',
'hp': 1000,
- 'atk': 10,
- 'def': 10,
+ 'atk': 100,
+ 'def': 100,
'mdef': 0,
'money': 0,
'experience': 0,
@@ -28,22 +27,15 @@ data.prototype.init = function() {
'tools': {}
},
'flyRange': [],
- 'loc': {'direction': 'up', 'x': 6, 'y': 11},
- 'steps': 0,
- 'time': {
- 'starttime': new Date(),
- 'playtime': 0,
- 'totaltime': 0,
- 'lasttime': new Date()
- },
+ 'loc': {'direction': 'up', 'x': 6, 'y': 10},
'flags': {
- 'visitFloors': {},
- 'passLava': false, // 经过岩浆则禁用商店
- 'hasShield5': false, // 有神圣盾
- 'seal20F': false, // 20F封印
- 'poison': true,
}
},
+ 'startText': [
+ "Hi,欢迎来到 HTML5 魔塔样板!\n\n本样板由艾之葵制作,可以让你在不会写任何代码\n的情况下也能做出属于自己的H5魔塔!",
+ "这里游戏开始时的剧情。\n定义在data.js的startText处。\n\n你可以在这里写上自己的内容。",
+ "赶快来试一试吧!"
+ ],
'shops': {
'shop1': {
'id': 'shop1', 'title': '贪婪之神', 'name': '3楼金币商店', 'icon': 'blueShop',
@@ -93,9 +85,6 @@ data.prototype.init = function() {
},
'npcs': {},
'animateSpeed': 500,
- 'startText': [
- "测试"
- ]
}
// 系统FLAG,在游戏运行中中请不要修改它。
this.flags = {
@@ -103,15 +92,18 @@ data.prototype.init = function() {
/****** 角色状态相关 ******/
"HPMAX": 999999, // HP上限;-1则无上限
"enableMDef": true, // 是否涉及勇士的魔防值;如果此项为false,则状态栏不会显示勇士的魔防值
- "enableExperience": true, // 是否涉及经验值;如果此项为false,则状态栏和怪物手册均将不会显示经验值
+ "enableExperience": false, // 是否涉及经验值;如果此项为false,则状态栏和怪物手册均将不会显示经验值
// 重要说明:如果enableMDef和enableExperience均为true,则在状态栏不会显示当前楼层!!!! //
+ "lavaDamage": 100, // 经过血网受到的伤害
+ "poisonDamage": 10, // 经过毒网受到的伤害
+ "weakValue": 20, // 衰弱状态下攻防减少的数值
/****** 道具相关 ******/
"flyNearStair": false, // 是否需要在楼梯边使用传送器
"bombTrigger": true, // 使用炸弹后是否触发怪物事件(如开门)
"pickaxeFourDirections": true, // 使用破墙镐是否四个方向都破坏;如果false则只破坏面前的墙壁
- "bigKeyIsBox": true, // 如果此项为true,则视为钥匙盒,红黄蓝钥匙+1;若为false,则视为大黄门钥匙
+ "bigKeyIsBox": false, // 如果此项为true,则视为钥匙盒,红黄蓝钥匙+1;若为false,则视为大黄门钥匙
/****** 系统相关 ******/
diff --git a/libs/enemys.js b/libs/enemys.js
index b782192f..db74e50e 100644
--- a/libs/enemys.js
+++ b/libs/enemys.js
@@ -3,68 +3,69 @@ function enemys() {
}
enemys.prototype.init = function () {
+ // 怪物属性初始化定义:
this.enemys = {
- 'greenSlime': {'name': '绿头怪', 'hp': 50, 'atk': 18, 'def': 1, 'money': 1, 'experience': 1, 'special': 0},
- 'redSlime': {'name': '红头怪', 'hp': 70, 'atk': 20, 'def': 2, 'money': 2, 'experience': 2, 'special': 0},
- /* 'blackSlime': {'name': '青头怪', 'hp': 189, 'atk': 27, 'def': 6, 'money': 3, 'experience': 1, 'special': 0}, */
- /* 'slimelord': {'name': '怪王', 'hp': 472, 'atk': 300, 'def': 150, 'money': 35, 'experience': 1,'special': 0}, */
- 'bat': {'name': '小蝙蝠', 'hp': 90, 'atk': 30, 'def': 4, 'money': 4, 'experience': 3,'special': 0},
- /* 'bigBat': {'name': '大蝙蝠', 'hp': 451, 'atk': 92, 'def': 18, 'money': 12,'experience': 1, 'special': 0}, */
- /* 'redBat': {'name': '红蝙蝠', 'hp': 439, 'atk': 260, 'def': 140, 'money': 30,'experience': 1, 'special': 0}, */
- 'vampire': {'name': '冥灵魔王', 'hp': 10000, 'atk': 2000, 'def': 2000, 'money': 100,'experience': 100, 'special': 0, 'bomb': false },
- 'skeleton': {'name': '骷髅人', 'hp': 100, 'atk': 35, 'def': 5, 'money': 6,'experience': 4, 'special': 0},
- 'skeletonSoilder': {'name': '骷髅士兵', 'hp': 150, 'atk': 55, 'def': 15, 'money': 10,'experience': 8, 'special': 0},
- /* 'skeletonCaptain': {'name': '骷髅队长', 'hp': 600, 'atk': 110, 'def': 20, 'money': 13,'experience': 1, 'special': 0}, */
- /* 'ghostSkeleton': {'name': '冥队长', 'hp': 836, 'atk': 236, 'def': 81, 'money': 28,'experience': 1, 'special': 0}, */
- 'zombie': {'name': '兽人', 'hp': 1000, 'atk': 245, 'def': 45, 'money': 26,'experience': 21, 'special': 0},
- 'zombieKnight': {'name': '兽人武士', 'hp': 2000, 'atk': 340, 'def': 170, 'money': 70,'experience': 55, 'special': 0},
- 'rock': {'name': '石头人', 'hp': 1600, 'atk': 750, 'def': 950, 'money': 31,'experience': 23, 'special': 3},
- 'slimeMan': {'name': '影子战士', 'hp': 3000, 'atk': 500, 'def': 250, 'money': 80,'experience': 60, 'special': 0},
- 'bluePriest': {'name': '初级法师', 'hp': 150, 'atk': 50, 'def': 10, 'money': 8,'experience': 7, 'special': 0},
- 'redPriest': {'name': '高级法师', 'hp': 300, 'atk': 100, 'def': 20, 'money': 20,'experience': 15,'special': 0},
- /* 'brownWizard': {'name': '初级巫师', 'hp': 500, 'atk': 358, 'def': 222, 'money': 44,'experience': 1, 'special': 2}, */
- /* 'redWizard': {'name': '高级巫师', 'hp': 1000, 'atk': 100, 'def': 350, 'money': 51,'experience': 1, 'special': 2}, */
- /* 'yellowGuard': {'name': '初级卫兵', 'hp': 444, 'atk': 85, 'def': 24, 'money': 10,'experience': 1,'special': 0}, */
- /* 'blueGuard': {'name': '中级卫兵', 'hp': 746, 'atk': 160, 'def': 90, 'money': 24,'experience': 1, 'special': 0}, */
- /* 'redGuard': {'name': '高级卫兵', 'hp': 560, 'atk': 280, 'def': 160, 'money': 33,'experience': 1, 'special': 0}, */
- 'swordsman': {'name': '双手剑士', 'hp': 600, 'atk': 888, 'def': 60, 'money': 77,'experience': 66, 'special': 4},
- /* 'soldier': {'name': '冥战士', 'hp': 888, 'atk': 388, 'def': 88, 'money': 39,'experience': 1, 'special': 0}, */
- 'yellowKnight': {'name': '金骑士', 'hp': 2000, 'atk': 1200, 'def': 1000, 'money': 103,'experience': 94, 'special': 0},
- 'redKnight': {'name': '红骑士', 'hp': 3500, 'atk': 1350, 'def': 1200, 'money': 125,'experience': 112, 'special': 0},
- 'darkKnight': {'name': '黑骑士', 'hp': 6000, 'atk': 1600, 'def': 1400, 'money': 173,'experience': 144, 'special': 0},
- /* 'blackKing': {'name': '黑衣魔王', 'hp': 1356, 'atk': 650, 'def': 356, 'money': 0,'experience': 1, 'special': 0},*/
- /* 'yellowKing': {'name': '黄衣魔王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 1,'special': 0},*/
- /* 'greenKing': {'name': '青衣武士', 'hp': 688, 'atk': 502, 'def': 332, 'money': 53, 'experience': 1,'special': 0},*/
- /* 'blueKnight': {'name': '近卫骑士', 'hp': 400, 'atk': 375, 'def': 350, 'money': 49, 'experience': 1,'special': 0},*/
- /* 'goldSlime': {'name': '黄头怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0,'experience': 1, 'special': 0},*/
- /* 'poisonSkeleton': {'name': '紫骷髅', 'hp': 550, 'atk': 370, 'def': 250, 'money': 42,'experience': 1, 'special': 0},*/
- /* 'poisonBat': {'name': '紫蝙蝠', 'hp': 743, 'atk': 440, 'def': 304, 'money': 52,'experience': 1, 'special': 0},*/
- /* 'steelRock': {'name': '铁面人', 'hp': 120, 'atk': 270, 'def': 0, 'money': 50, 'experience': 1,'special': 3},*/
- /* 'skeletonPriest': {'name': '骷髅法师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0,'experience': 1, 'special': 0},*/
- /* 'skeletonKing': {'name': '骷髅王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0,'experience': 1, 'special': 0},*/
- /* 'skeletonWizard': {'name': '骷髅巫师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0,'experience': 1, 'special': 0},*/
- /* 'redSkeletonCaption': {'name': '骷髅武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'special': 0},*/
- /* 'badHero': {'name': '迷失勇者', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 1,'special': 0},*/
- /* 'demon': {'name': '魔神武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 1,'special': 0},*/
- /* 'demonPriest': {'name': '魔神法师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 1,'special': 0},*/
- /* 'goldHornSlime': {'name': '金角怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0,'experience': 1, 'special': 0},*/
- /* 'redKing': {'name': '红衣魔王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 1,'special': 0}, */
- /* 'whiteKing': {'name': '白衣武士', 'hp': 766, 'atk': 544, 'def': 162, 'money': 46, 'experience': 1,'special': 0}, */
- 'blackMagician': {'name': '黑魔法师', 'hp': 7000, 'atk': 2000, 'def': 1500, 'money': 200,'experience': 156,'special': 11, 'value': 1/3},
- /* 'silverSlime': {'name': '银头怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 1,'special': 0}, */
- /* 'swordEmperor': {'name': '剑圣', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0,'experience': 1, 'special': 0}, */
- /* 'whiteHornSlime': {'name': '尖角怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 1,'special': 0},*/
- /* 'badPrincess': {'name': '痛苦魔女', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0,'experience': 1, 'special': 0},*/
- /* 'badFairy': {'name': '黑暗仙子', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 1,'special': 0},*/
- /* 'grayPriest': {'name': '中级法师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0,'experience': 1, 'special': 0},*/
- /* 'redSwordsman': {'name': '剑王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 1,'special': 0},*/
- 'whiteGhost': {'name': '水银战士', 'hp': 4500, 'atk': 1000, 'def': 500, 'money': 100, 'experience': 80,'special': 0},
- /* 'poisonZombie': {'name': '绿兽人', 'hp': 660, 'atk': 443, 'def': 210, 'money': 43, 'experience': 1,'special': 0},*/
- 'magicDragon': {'name': '魔龙', 'hp': 33333, 'atk': 3333, 'def': 3333, 'money': 0, 'experience': 0,'special': 0, 'bomb': false },
- 'octopus': {'name': '血影', 'hp': 10000, 'atk': 999, 'def': 999, 'money': 999, 'experience': 999, 'special': 0},
- 'fairy': {'name': '仙子', 'hp': 600000, 'atk': 250000, 'def': 50000, 'money': 0, 'experience': 0,'special': 0, 'bomb': false },
- 'greenKnight': {'name': '强盾骑士', 'hp': 15000, 'atk': 3000, 'def': 2000, 'money': 148, 'experience': 133,'special': 3},
- }
+ 'greenSlime': {'name': '绿头怪', 'hp': 100, 'atk': 120, 'def': 0, 'money': 1, 'experience': 0, 'special': 0},
+ 'redSlime': {'name': '红头怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'blackSlime': {'name': '青头怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'slimelord': {'name': '怪王', 'hp': 100, 'atk': 120, 'def': 0, 'money': 10, 'experience': 0, 'special': 9},
+ 'bat': {'name': '小蝙蝠', 'hp': 100, 'atk': 120, 'def': 0, 'money': 2, 'experience': 0, 'special': 1},
+ 'bigBat': {'name': '大蝙蝠', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'redBat': {'name': '红蝙蝠', 'hp': 100, 'atk': 120, 'def': 0, 'money': 5, 'experience': 0, 'special': 4},
+ 'vampire': {'name': '冥灵魔王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'skeleton': {'name': '骷髅人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'skeletonSoilder': {'name': '骷髅士兵', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'skeletonCaptain': {'name': '骷髅队长', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'ghostSkeleton': {'name': '冥队长', 'hp': 100, 'atk': 120, 'def': 0, 'money': 8, 'experience': 0, 'special': 7},
+ 'zombie': {'name': '兽人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'zombieKnight': {'name': '兽人武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'rock': {'name': '石头人', 'hp': 100, 'atk': 120, 'def': 0, 'money': 4, 'experience': 0, 'special': 3},
+ 'slimeMan': {'name': '影子战士', 'hp': 100, 'atk': 0, 'def': 0, 'money': 11, 'experience': 0, 'special': 10}, // 模仿怪的攻防设为0就好
+ 'bluePriest': {'name': '初级法师', 'hp': 100, 'atk': 120, 'def': 0, 'money': 3, 'experience': 0, 'special': 2},
+ 'redPriest': {'name': '高级法师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'brownWizard': {'name': '初级巫师', 'hp': 100, 'atk': 120, 'def': 0, 'money': 16, 'experience': 0, 'special': 15, 'value': 100},
+ 'redWizard': {'name': '高级巫师', 'hp': 1000, 'atk': 1200, 'def': 0, 'money': 160, 'experience': 0, 'special': 15, 'value': 200},
+ 'yellowGuard': {'name': '初级卫兵', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'blueGuard': {'name': '中级卫兵', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'redGuard': {'name': '高级卫兵', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'swordsman': {'name': '双手剑士', 'hp': 100, 'atk': 120, 'def': 0, 'money': 6, 'experience': 0, 'special': 5},
+ 'soldier': {'name': '冥战士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'yellowKnight': {'name': '金骑士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'redKnight': {'name': '红骑士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'darkKnight': {'name': '黑骑士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'blackKing': {'name': '黑衣魔王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0, 'bomb': false}, // 加入 'bomb': false 代表该怪物不可被炸弹或圣锤炸掉
+ 'yellowKing': {'name': '黄衣魔王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'greenKing': {'name': '青衣武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'blueKnight': {'name': '蓝骑士', 'hp': 100, 'atk': 120, 'def': 0, 'money': 9, 'experience': 0, 'special': 8},
+ 'goldSlime': {'name': '黄头怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'poisonSkeleton': {'name': '紫骷髅', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'poisonBat': {'name': '紫蝙蝠', 'hp': 100, 'atk': 120, 'def': 0, 'money': 14, 'experience': 0, 'special': 13},
+ 'steelRock': {'name': '铁面人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'skeletonPriest': {'name': '骷髅法师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'skeletonKing': {'name': '骷髅王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'skeletonWizard': {'name': '骷髅巫师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'redSkeletonCaption': {'name': '骷髅武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'special': 0},
+ 'badHero': {'name': '迷失勇者', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'demon': {'name': '魔神武士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'demonPriest': {'name': '魔神法师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'goldHornSlime': {'name': '金角怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'redKing': {'name': '红衣魔王', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'whiteKing': {'name': '白衣武士', 'hp': 100, 'atk': 120, 'def': 0, 'money': 17, 'experience': 0, 'special': 16},
+ 'blackMagician': {'name': '黑魔法师', 'hp': 100, 'atk': 120, 'def': 0, 'money': 12, 'experience': 0, 'special': 11, 'value': 1/3}, // 吸血怪需要在后面添加value代表吸血比例
+ 'silverSlime': {'name': '银头怪', 'hp': 100, 'atk': 120, 'def': 0, 'money': 15, 'experience': 0, 'special': 14},
+ 'swordEmperor': {'name': '剑圣', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'whiteHornSlime': {'name': '尖角怪', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'badPrincess': {'name': '痛苦魔女', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'badFairy': {'name': '黑暗仙子', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'grayPriest': {'name': '中级法师', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'redSwordsman': {'name': '剑王', 'hp': 100, 'atk': 120, 'def': 0, 'money': 7, 'experience': 0, 'special': 6},
+ 'whiteGhost': {'name': '水银战士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'poisonZombie': {'name': '绿兽人', 'hp': 100, 'atk': 120, 'def': 0, 'money': 13, 'experience': 0, 'special': 12},
+ 'magicDragon': {'name': '魔龙', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'octopus': {'name': '血影', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'fairy': {'name': '仙子', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ 'greenKnight': {'name': '强盾骑士', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'special': 0},
+ }
}
enemys.prototype.getEnemys = function (enemyId) {
@@ -86,7 +87,13 @@ enemys.prototype.getSpecialText = function (enemyId) {
if (special == 7) return "破甲";
if (special == 8) return "反击";
if (special == 9) return "净化";
- if (special == 11) return "吸血";
+ if (special == 10) return "模仿";
+ if (special == 11) return "吸血";
+ if (special == 12) return "中毒";
+ if (special == 13) return "衰弱";
+ if (special == 14) return "诅咒";
+ if (special == 15) return "领域";
+ if (special == 16) return "夹击";
return "";
}
@@ -111,7 +118,7 @@ enemys.prototype.getDamage = function (monsterId) {
// 临界值计算
enemys.prototype.getCritical = function (monsterId) {
var monster = core.material.enemys[monsterId];
- if (monster.special == 3) return "???";
+ if (monster.special == 3 || monster.special == 10) return "???";
var last = this.calDamage(core.status.hero.atk, core.status.hero.def, core.status.hero.mdef,
monster.hp, monster.atk, monster.def, monster.special);
if (last == 0) return 0;
@@ -201,16 +208,28 @@ enemys.prototype.getCurrentEnemys = function () {
if (core.isset(used[monsterId])) continue;
var monster = core.material.enemys[monsterId];
- var mon_def = monster.def;
+ var mon_atk = monster.atk, mon_def = monster.def;
// 坚固
- if (monster.special==3 && mon_def0)
+ core.drawTip('受到领域伤害'+damage+'点');
+ core.status.hero.hp-=damage;
+ if (core.status.hero.hp<=0) {
+ core.status.hero.hp=0;
+ core.updateStatusBar();
+ core.events.lose('zone');
+ return;
+ }
-
-
-
-
-
-
-
-
-
-
-/////////////////// onclick事件处理 ///////////////////
+ // 夹击
+ var has=false;
+ if (enemys[0]!=null && enemys[2]!=null && enemys[0].id==enemys[2].id && enemys[0].special==16)
+ has=true;
+ if (enemys[1]!=null && enemys[3]!=null && enemys[1].id==enemys[3].id && enemys[1].special==16)
+ has=true;
+ if (has && core.status.hero.hp>1) { // 1血夹击不死
+ core.status.hero.hp = parseInt(core.status.hero.hp/2);
+ core.drawTip('受到夹击,生命变成一半');
+ }
+ core.updateStatusBar();
+}
////// 转换楼层结束的事件 //////
events.prototype.afterChangeFloor = function (floorId) {
-
- core.status.hero.flags.passLava = false;
-
- // 首次到达某层
- if (!core.isset(core.status.hero.flags.visitFloors[floorId])) {
- core.status.hero.flags.visitFloors[floorId]=true;
- if (floorId=='MT1') {
- core.drawText([
- {'content': '这里...是哪里?', 'id': 'hero'},
- {'content': '难道?我还活着?', 'id': 'hero'},
- {'content': '一股似曾相识的感觉,\n但我又不知道在哪里见过。', 'id': 'hero'},
- {'content': '魔塔已经被大火烧成了灰烬,\n这里为什么安然无恙?这到底是什么地方?', 'id': 'hero'},
- {'content': '这里,我感觉到不像是我生活的地方。\n难道我已经到了异世界吗?', 'id': 'hero'},
- {'content': '算了,不管这么多了。\n只要我还活着,一切都好。', 'id': 'hero'},
- {'content': '我先四处看看要怎么出去吧。', 'id': 'hero'},
- {'content': '(系统提示)本塔快捷键如下:\n\n[↑][↓][←][→] 移动\n[X] 怪物手册\n[G] 楼层传送器\n[T] 工具栏\n[K] 快捷商店\n[S/L] 存/读档\n[ESC] 菜单栏\n同时也可以点击状态栏中的图标进行操作。'},
- {'content': '(系统提示)\n在菜单栏里可以同步存档,这样可以很方便的让你\n在多设备(例如手机/电脑)之间接档游戏。'}
- ]);
- }
- if (floorId=='MT2') {
- core.drawText([
- {'content': '奇怪,我明明杀死了血影。\n为什么这里又出现了一个。', 'id': 'hero'},
- {'content': '不过我的力量似乎都被冻结了。\n目前肯定是无法杀死血影,\n等我变强以后再回来吧。', 'id': 'hero'},
- ]);
- }
- if (floorId=='MT11') {
- core.drawText([
- {'content': '诶,奇怪,我明明只是上了一层楼而已。\n为什么,这里变得如此的寒冷...', 'id': 'hero'},
- {'content': '诶,毕竟我已经不在我生活的世界了。\n很多事情都是预料不到的。', 'id': 'hero'},
- {'content': '不管怎么说,我要继续上去看个究竟。', 'id': 'hero'}
- ])
- }
- if (floorId=='MT20') {
- core.drawText([
- {'content': '这...这里就是塔顶了吗。\n仙子,你怎么也在这里。\n魔塔倒塌了,你也死掉了所以到达这里了吗?', 'id': 'hero'},
- {'content': '呵,怎么可能。我怎么会这么容易死。\n这里就是位面的交界处了,\n我就是这个位面的操纵者。', 'id': 'fairy'},
- {'content': '你居然有这样强大的能力!\n跟我第一次遇见你差距太大了吧!', 'id': 'hero'},
- {'content': '是的,一开始,我弱不禁风。\n但是你帮我集齐了十字架和三个灵杖,\n让我的能力得到了巨幅度的提高。', 'id': 'fairy'},
- {'content': '估计你自己也想不到这些东西有这么大的威力。\n不过还要感谢你的无私奉献成就了我的现在。', 'id': 'fairy'},
- {'content': '......', 'id': 'hero'},
- {'content': '其实,魔塔倒塌是我一手策划的,\n就是为了把所有的生物都驱逐进这个亡灵位面。', 'id': 'fairy'},
- {'content': '我一直策划着等我有一天变强了,\n我要一人统治世界,消灭掉所有的其他生物。\n如今我的目标达成了。', 'id': 'fairy'},
- {'content': '消灭其他所有生物?也就是说也包括我?', 'id': 'hero'},
- {'content': '没错。愚蠢的人类终于觉悟了。', 'id': 'fairy'},
- {'content': '呵呵,想当初,我就应该一刀把你杀了。\n真没想到我会轻信你的鬼话。', 'id': 'hero'},
- {'content': '现在说这些还有什么用呢,\n你和我的力量根本就不是一个级别的。\n劝你放弃抵抗吧。', 'id': 'fairy'},
- {'content': '(仙子有来源于高维度的力量支持,\n所以目前强大无比。我是不可能战胜的。)', 'id': 'hero'},
- {'content': '(不过,这个位面力量非常不稳定,\n如果我能成功的封印她,切断外界的支持,\n也许还能有机会求胜。)', 'id': 'hero'},
- {'content': '(仙子目前的位置正好被八个小怪包围,\n如果按照当年封印Zeno的方法去封印她,\n能否成功呢?这是我唯一的希望。)', 'id': 'hero'},
- {'content': '系统提示:(专门给没玩过TSW的玩家看的)\n击杀仙子周围的四个怪,保留四个角的怪。\n如果还看不懂的,看一眼你的小键盘,\n仙子在5的位置,击杀2468。'},
- ]);
- }
+ if (!core.hasFlag("visited_"+floorId)) {
+ this.doEvents(core.status.thisMap.firstArrive);
+ core.setFlag("visited_"+floorId, true);
}
}
+////// 实际事件的处理 //////
+events.prototype.doEvents = function (list, x, y, callback) {
+ // 停止勇士
+ core.waitHeroToStop(function() {
+ if (!core.isset(list)) return;
+ if (!(list instanceof Array)) {
+ list = [list];
+ }
+ core.lockControl();
+ core.status.event = {'id': 'action', 'data': {
+ 'list': list, 'x': x, 'y': y, 'callback': callback
+ }}
+ core.events.doAction();
+ });
+}
+events.prototype.doAction = function() {
+ // 事件处理完毕
+ if (core.status.event.data.list.length==0) {
+ if (core.isset(core.status.event.data.callback))
+ core.status.event.data.callback();
+ core.ui.closePanel(false);
+ return;
+ }
+ var data = core.status.event.data.list.shift();
+ core.status.event.data.current = data;
-////// 选中菜单栏 //////
+ var x=core.status.event.data.x, y=core.status.event.data.y;
+ // 不同种类的事件
+ // 如果是文字:显示
+ if (typeof data == "string") {
+ core.status.event.data.type='text';
+ core.ui.drawTextBox(data);
+ return;
+ }
+ core.status.event.data.type=data.type;
+ switch (data.type) {
+ case "text": // 文字/对话
+ core.ui.drawTextBox(data.data);
+ break;
+ case "disappear": // 消失
+ core.removeBlock('event', x, y);
+ this.doAction();
+ break;
+ case "sleep": // 等待多少毫秒
+ setTimeout(function () {
+ core.events.doAction();
+ }, data.data);
+ break;
+ case "exit": // 立刻结束事件
+ core.status.event.data.list = [];
+ core.events.doAction();
+ break;
+ default:
+ core.status.event.data.type='text';
+ core.ui.drawTextBox("\t[警告,]出错啦!\n"+data.type+" 事件不被支持...");
+ }
+ return;
+}
////// 降低难度 //////
events.prototype.decreaseHard = function() {
@@ -194,13 +212,11 @@ events.prototype.decreaseHard = function() {
////// 能否使用快捷商店 //////
events.prototype.canUseQuickShop = function(index) {
if (core.status.floorId == 'MT20') return '当前不能使用快捷商店。';
- if (core.status.hero.flags.passLava) return '由于你刚刚经过岩浆,此时不得使用快捷商店。\n切换楼层后恢复。';
return null;
}
////// 尝试使用道具 //////
events.prototype.useItem = function(itemId) {
- console.log("使用道具:"+core.material.items[itemId].name);
core.ui.closePanel(false);
if (itemId=='book') {
@@ -212,73 +228,158 @@ events.prototype.useItem = function(itemId) {
return;
}
- // TODO add other items
if (core.canUseItem(itemId)) core.useItem(itemId);
else core.drawTip("当前无法使用"+core.material.items[itemId].name);
}
/****** 打完怪物 ******/
-events.prototype.afterBattle = function(enemyId) {
- if (core.status.floorId == 'MT14' && !core.enemyExists(5,9) && !core.enemyExists(7,9)) {
- core.openDoor("specialDoor", 6, 8, false);
+events.prototype.afterBattle = function(enemyId,x,y,callback) {
+
+ // 毒衰咒的处理
+ var special = core.material.enemys[enemyId].special;
+ // 中毒
+ if (special==12 && !core.hasFlag('poison')) {
+ core.setFlag('poison', true);
+ core.updateStatusBar();
}
- if (core.status.floorId == 'MT20') {
- // 检查封印
- if (!core.status.hero.flags.seal20F) {
- // 四个角都存在,四边都不存在
- if (core.enemyExists(5,5) && core.enemyExists(5,7) && core.enemyExists(7,7) && core.enemyExists(7,5)
- && !core.enemyExists(5,6) && !core.enemyExists(7,6) && !core.enemyExists(6,5) && !core.enemyExists(6,7)) {
- // 触发封印
- core.status.hero.flags.seal20F = true;
- core.material.enemys.fairy.hp /= 10;
- core.material.enemys.fairy.atk /= 10;
- core.material.enemys.fairy.def /= 10;
- core.updateFg();
- core.drawText([
- {'content': '啊,我怎么被封印了!\n能量只剩下一成了!', 'id': 'fairy'}
- ]);
- // core.drawTip("触发仙子封印");
- core.clearContinueAutomaticRoute();
- return;
- }
- }
- // 打败仙子
- if (enemyId == 'fairy') {
- core.events.win();
- core.clearContinueAutomaticRoute();
- return;
- }
+ // 衰弱
+ if (special==13 && !core.hasFlag('weak')) {
+ core.setFlag('weak', true);
+ core.status.hero.atk-=core.flags.weakValue;
+ core.status.hero.def-=core.flags.weakValue;
+ core.updateStatusBar();
+ }
+ // 诅咒
+ if (special==14 && !core.hasFlag('curse')) {
+ core.setFlag('curse', true);
+ core.updateStatusBar();
}
-
+ // 检查处理后的事件。
+ var event = core.floors[core.status.floorId].afterBattle[x+","+y];
+ if (core.isset(event)) {
+ core.events.doEvents(event, x, y, callback);
+ }
//继续行走
- core.continueAutomaticRoute();
+ else {
+ core.continueAutomaticRoute();
+ if (core.isset(callback)) callback();
+ }
}
/****** 开完门 ******/
-events.prototype.afterOpenDoor = function(doorId) {
-
+events.prototype.afterOpenDoor = function(doorId,x,y,callback) {
+ // 检查处理后的事件。
+ var event = core.floors[core.status.floorId].afterOpenDoor[x+","+y];
+ if (core.isset(event)) {
+ core.events.doEvents(event, x, y, callback);
+ }
//继续行走
- core.continueAutomaticRoute();
+ else {
+ core.continueAutomaticRoute();
+ if (core.isset(callback)) callback();
+ }
}
/****** 经过路障 ******/
events.prototype.passNet = function (data) {
+ // 有鞋子
+ if (core.hasItem('shoes')) return;
if (data.event.id=='lavaNet') {
- core.status.hero.hp -= 100;
+ core.status.hero.hp -= core.flags.lavaDamage;
if (core.status.hero.hp<=0) {
core.status.hero.hp=0;
core.updateStatusBar();
- core.events.lose();
+ core.events.lose('lava');
return;
}
- core.status.hero.flags.passLava = true;
core.updateStatusBar();
- core.drawTip('经过熔岩,生命-100');
+ core.drawTip('经过血网,生命-'+core.flags.lavaDamage);
+ }
+ if (data.event.id=='poisonNet') {
+ if (core.hasFlag('poison')) return;
+ core.setFlag('poison', true);
+ core.updateStatusBar();
+ }
+ if (data.event.id=='weakNet') {
+ if (core.hasFlag('weak')) return;
+ core.setFlag('weak', true);
+ core.status.hero.atk-=core.flags.weakValue;
+ core.status.hero.def-=core.flags.weakValue;
+ core.updateStatusBar();
+ }
+ if (data.event.id=='curseNet') {
+ if (core.hasFlag('curse')) return;
+ core.setFlag('curse', true);
+ core.updateStatusBar();
}
}
+// NPC自定义操作
+events.prototype.npcCustomAction = function (npcData) {
+
+}
+
+// 当点击(x,y)位置后自定义操作
+events.prototype.npcCustomActionOnClick = function (npcData, x, y) {
+
+}
+
+// NPC自定义事件处理
+events.prototype.npcCustomEffect = function (effect, npc) {
+
+}
+
+// 存档事件前一刻的处理
+events.prototype.beforeSaveData = function(data) {
+
+}
+
+// 读档事件后,载入事件前,对数据的处理
+events.prototype.afterLoadData = function(data) {
+
+}
+
+events.prototype.win = function(reason) {
+ // 获胜
+ core.waitHeroToStop(function() {
+ core.clearMap('all');
+ core.rmGlobalAnimate(0,0,true);
+ core.drawText([
+ "\t[结局3]恭喜通关!"
+ ], function () {
+ core.restart();
+ })
+ });
+}
+
+events.prototype.lose = function(reason) {
+ // 失败
+ core.waitHeroToStop(function() {
+ core.drawText('\t[结局1]你死了。', function () {
+ core.restart();
+ });
+ })
+}
+
+
+
+
+
+/******************************************/
/*********** 界面上的点击事件 ***************/
+/******************************************/
+
+// 正在处理事件时的点击操作...
+events.prototype.clickAction = function (x,y) {
+
+ if (core.status.event.data.type=='text') {
+ // 文字
+ this.doAction();
+ return;
+ }
+
+}
// 怪物手册
events.prototype.clickBook = function(x,y) {
@@ -359,6 +460,7 @@ events.prototype.clickShop = function(x,y) {
}
}
+// 快捷商店
events.prototype.clickSelectShop = function(x,y) {
if (x >= 5 && x <= 7) {
var shopList = core.status.shops, keys = Object.keys(shopList);
@@ -394,7 +496,6 @@ events.prototype.clickToolbox = function(x,y) {
return;
}
- var itemId = null;
var items = null;
if (y>=4 && y<=7 && x!=12)
@@ -547,60 +648,3 @@ events.prototype.clickNPC = function(x,y) {
}
/*********** 点击事件 END ***************/
-
-
-// NPC自定义操作
-events.prototype.npcCustomAction = function (npcData) {
-
-}
-
-// 当点击(x,y)位置后自定义操作
-events.prototype.npcCustomActionOnClick = function (npcData, x, y) {
-
-}
-
-// NPC自定义事件处理
-events.prototype.npcCustomEffect = function (effect, npc) {
-
-}
-
-// 存档事件前一刻的处理
-events.prototype.beforeSaveData = function(data) {
-
-}
-
-// 读档事件后,载入事件前,对数据的处理
-events.prototype.afterLoadData = function(data) {
- // 重新封印仙子
- if (core.status.hero.flags.seal20F) {
- var fairy = core.material.enemys.fairy;
- fairy.hp/=10;
- fairy.atk/=10;
- fairy.def/=10;
- }
-}
-
-events.prototype.win = function() {
- // 获胜
-
- core.waitHeroToStop(function() {
- core.clearMap('all');
- core.rmGlobalAnimate(0,0,true);
- core.drawText([
- {'content': '终于,我逃脱了这个可怕的异空间。', 'id': 'hero'},
- {'content': '接下来,我要何去何从。', 'id': 'hero'},
- {'content': '顺着这条漆黑的甬道走下去,\n我能回到我的现实世界吗?', 'id': 'hero'},
- {'content': '恭喜通关难度' + core.status.hard + '!你的分数是:' + core.status.hero.hp + '\n欢迎截图到发布帖下进行炫耀!\n\n再次感谢对本塔的支持!'}
- ], function () {
- core.restart();
- })
- });
-}
-
-events.prototype.lose = function() {
- // 失败
- core.drawText('很不好意思,但是你死了。', function () {
- core.restart();
- });
-}
-
diff --git a/libs/floors/MT0.js b/libs/floors/MT0.js
index 78dc20bf..8a7078d4 100644
--- a/libs/floors/MT0.js
+++ b/libs/floors/MT0.js
@@ -2,9 +2,9 @@ function MT0() {}
MT0.prototype.init = function() {
this.data = {
- 'id': 'MT0', // 楼层唯一标识符
- 'title': "样板层", // 楼层中文名
- 'name': 0, // 显示在status bar中的名称
+ 'floorId': 'MT0', // 楼层唯一标识符
+ 'title': "样板层", // 楼层中文名;转换楼层时显示
+ 'name': 0, // 显示在状态栏中的楼层名称
"canFlyTo": true, // 该楼能否被飞行器飞到(不能的话在该楼也不允许使用)
"map": [ // 地图数据,需要是13x13,建议使用地图生成器来生成
diff --git a/libs/floors/sample0.js b/libs/floors/sample0.js
new file mode 100644
index 00000000..eb2c56a0
--- /dev/null
+++ b/libs/floors/sample0.js
@@ -0,0 +1,111 @@
+// 这里需要改楼层名,请和文件名及下面的floorId保持完全一致
+main.floors.sample0 = {
+ 'floorId': 'sample0', // 楼层唯一标识符,需要和名字完全一致
+ 'title': "样板 0 层", // 楼层中文名
+ 'name': 0, // 显示在状态栏中的名称
+ "canFlyTo": true, // 该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器)
+ "map": [ // 地图数据,需要是13x13,建议使用地图生成器来生成
+ [0, 0, 220, 0, 0, 6, 87, 3, 65, 64, 44, 43, 42],
+ [0, 246, 0, 246, 0, 6, 0, 3, 58, 59, 60, 61, 41],
+ [219, 0, 0, 0, 219, 6, 0, 3, 57, 26, 62, 63, 40],
+ [6, 6, 125, 6, 6, 6, 0, 3, 53, 54, 55, 56, 39],
+ [216, 247, 256, 235, 248, 6, 0, 3, 49, 50, 51, 52, 38],
+ [5, 5, 125, 5, 5, 5, 0, 1, 45, 46, 47, 48, 37],
+ [224, 254, 212, 232, 204, 5, 0, 1, 31, 32, 34, 33, 36],
+ [201, 205, 217, 215, 207, 5, 0, 1, 27, 28, 29, 30, 35],
+ [5, 5, 125, 5, 5, 5, 0, 1, 21, 22, 23, 24, 25],
+ [45, 0, 0, 0, 0, 0, 0, 1, 1, 1, 121, 1, 1],
+ [4, 4, 126, 4, 4, 4, 0, 0, 0, 0, 0, 85, 124],
+ [87, 11, 12, 13, 14, 4, 4, 2, 2, 2, 122, 2, 2],
+ [88, 89, 90, 91, 92, 93, 94, 2, 81, 82, 83, 84, 86],
+ ],
+ "firstArrive": [ // 第一次到该楼层触发的事件
+ "\t[样板提示,]首次到达某层可以触发 firstArrive 事件,\n该事件可类似于RMXP中的“自动执行脚本”。",
+ "本事件支持一切的事件类型,常常用来触发对话,\n例如:",
+ "\t[hero]我是谁?\n我从哪来?\n我又要到哪去?",
+ "\t[仙子,fairy]你问我...?我也不知道啊...",
+ "本层主要对道具、门、怪物等进行介绍,\n有关事件的各种信息在下一层会有更为详细的说明。",
+ ],
+ "events": { // 该楼的所有可能事件列表;NPC事件和楼层转换事件也需要包括在内
+
+ /****** NPC事件 ******/
+ "10,9": [ // (10,9)位置:守着道具的老人
+ "\t[老人,man]这些是本样板支持的所有的道具。\n\n道具分为三类:items, constants, tools。\nitems 为即捡即用类道具,例如宝石、血瓶、\n剑盾等。\nconstants 为永久道具,例如怪物手册、楼层\n传送器、幸运金币等。\ntools 为消耗类道具,例如破墙镐、炸弹、中\n心对称飞行器等。\n\n后两类道具在工具栏中可以看到并使用。",
+ "\t[老人,man]有关道具效果,定义在items.js中。\n目前大多数道具已有默认行为,如有自定义\n的需求则需在items.js中修改代码。",
+ "\t[老人,man]constants 和 tools 各最多只允许12种,\n多了会导致图标溢出。",
+ "\t[老人,man]拾取道具结束后可触发 afterGetItem 事件。\n\n有关事件的各种信息在下一层会有更为详细的\n说明。",
+ {"type": "disappear"} // 消失
+ ],
+ "10,11": [ // (10,11)位置,守着门的老人
+ "\t[老人,woman]这些是门,需要对应的钥匙打开。\n机关门必须使用特殊的开法。",
+ "\t[老人,woman]开门后可触发 afterOpenDoor 事件。\n\n有关事件的各种信息在下一层会有更为详细的\n说明。",
+ {'type': 'disappear'}
+ ],
+ "2,10": [ // (2,10)位置,守着楼梯、传送门、路障的老人
+ "\t[老人,womanMagician]这些是楼梯、路障、传送门。",
+ "\t[老人,womanMagician]楼梯和传送门需要在events中定义目标楼层\n和位置,可参见样板里已有的的写法。",
+ "\t[老人,womanMagician]血网的伤害数值、中毒后每步伤害数值、衰弱\n时攻防下降的数值,都在 data.js 内定义。\n\n路障同样会尽量被自动寻路绕过。",
+ {"type": "disappear"}
+ ],
+ "2,8": [ // 守着第一批怪物的老人
+ "\t[老人,magician]这些都是各种各样的怪物。\n所有怪物的属性都在enemys.js中设置。\n\n每个怪物最多只能有一个属性。",
+ "\t[老人,magician]这批怪物分别为:普通、先攻、魔攻、坚固、\n2连击、3连击、4连击、破甲、反击、净化。",
+ "\t[老人,magician]打败怪物后可触发 afterBattle 事件。\n\n有关事件的各种信息在下一层会有更为详细的\n说明。",
+ {"type": "disappear"}
+ ],
+ "2,5": [
+ "\t[老人,magician]模仿、吸血、中毒、衰弱、诅咒。\n\n请注意吸血怪需要设置value为吸血数值,\n可参见样板中黑魔法师的写法。",
+ {"type": "disappear"}
+ ],
+ "2,3": [
+ "\t[老人,magician]领域、夹击。\n请注意领域怪需要设置value为伤害数值,\n可参见样板中初级巫师的写法。",
+ "\t[老人,magician]出于游戏性能的考虑,我们不可能每走一步都\n对领域和夹击进行检查。\n因此我们需要在本楼层的 events 中指明哪些\n点可能会触发领域和夹击事件,在这些点才会\n对领域和夹击进行检查和处理。\n\n具体可参见本层样板中events的做法。",
+ "\t[老人,magician]夹击和领域同时发生时先计算领域,再夹击。\n\n另:本塔不支持阻击怪。",
+ {"type": "disappear"}
+ ],
+
+ /****** 楼层转换事件 ******/
+
+
+
+
+ /****** 领域、夹击检查事件 ******/
+ "1,0": {"trigger": "checkBlock"},
+ "0,1": {"trigger": "checkBlock"},
+ "1,1": {"trigger": "checkBlock"},
+ "1,2": {"trigger": "checkBlock"},
+ "2,1": {"trigger": "checkBlock"},
+ "1,0": {"trigger": "checkBlock"},
+ "3,0": {"trigger": "checkBlock"},
+ "3,2": {"trigger": "checkBlock"},
+ "4,1": {"trigger": "checkBlock"},
+
+ },
+ "afterOpenDoor": { // 开完门后可能触发的事件列表
+ "11,12": "你开了一个绿门,触发了一个afterOpenDoor事件"
+ },
+ "afterBattle": { // 战斗后可能触发的事件列表
+ "2,6": "\t[ghostSkeleton]不可能,你怎么可能打败我!\n(一个打败怪物触发的事件)"
+ },
+ "afterGetItem": { // 获得道具后可能触发的事件列表
+ "11,8": "由于状态栏放不下,绿钥匙和铁门钥匙均视为tools,\n放入工具栏中。\n碰到绿门和铁门仍然会自动使用开门。",
+ "8,6": "由于吸血和夹击等的存在,血瓶默认自动被绕路。\n你可以修改data.js中的系统Flag来设置这一项。",
+ "8,7": "如需修改消耗品的效果,请前往items.js,修改\ngetItemEffect 和 getItemEffectTip 两个函数\n的具体数值即可。",
+ "9,5": [
+ "每层楼的 canFlyTo 决定了该楼层能否被飞到。\n\n不能被飞到的楼层也无法使用楼层传送器。",
+ "飞行的楼层顺序由 main.js 中 floorIds 加载顺序\n所决定。\n\n是否必须在楼梯边使用楼传器由 data.js 中的系统\nFlag所决定。"
+ ],
+ "10,5": "破墙镐是破面前的墙壁还是四个方向的墙壁,\n由data.js中的系统Flag所决定。",
+ "8,4": [
+ "炸弹可以炸四个方向的怪物。\n如只需要炸前方怪物请使用上面的圣锤。",
+ "不能被炸的怪物在enemys中可以定义。\n可参见样板里黑衣魔王的写法。\n\n炸死怪物是否触发事件由 data.js 中的系统Flag\n所决定。"
+ ],
+ "9,4": "中心对称飞行器飞向的目标不能在楼层的events\n列表里存在,即使事件已经结束(如刚刚的老人)。",
+ "10,4": "上楼器和下楼器的目标点要求同中心对称飞行器。\n\n“上楼”和“下楼”的目标层由 main.js 的 floorIds\n顺序所决定。",
+ "10,3": "十字架目前未被定义,可能需要自行实现功能。\n有关如何实现一个道具功能参见doc文档。",
+ "9,2": "该道具默认是大黄门钥匙,如需改为钥匙盒直接\n修改 data.js 中的系统Flag即可。",
+ "10,2": "屠龙匕首目前未被定义,可能需要自行实现功能。\n有关如何实现一个道具功能参见doc文档。",
+ }
+
+}
+
diff --git a/libs/floors/MT1.js b/libs/floors/sample1.js
similarity index 79%
rename from libs/floors/MT1.js
rename to libs/floors/sample1.js
index a8c8363c..835a0e31 100644
--- a/libs/floors/MT1.js
+++ b/libs/floors/sample1.js
@@ -1,8 +1,8 @@
-function MT1() {}
+function sample1() {}
-MT1.prototype.init = function() {
+sample1.prototype.init = function() {
this.data = {
- 'id': 'MT1', // 楼层唯一标识符
+ 'floorId': 'template', // 楼层唯一标识符,需要和名字完全一致
'title': "样板层", // 楼层中文名
'name': 0, // 显示在status bar中的名称
"canFlyTo": true, // 该楼能否被飞行器飞到(不能的话在该楼也不允许使用)
@@ -27,4 +27,4 @@ MT1.prototype.init = function() {
};
}
-main.floors.template = new MT1();
+main.floors.sample1 = new sample1();
diff --git a/libs/floors/template.js b/libs/floors/template.js
deleted file mode 100644
index c59073f9..00000000
--- a/libs/floors/template.js
+++ /dev/null
@@ -1,30 +0,0 @@
-function template() {}
-
-template.prototype.init = function() {
- this.data = {
- 'id': 'template', // 楼层唯一标识符,需要和名字完全一致
- 'title': "样板层", // 楼层中文名
- 'name': 0, // 显示在status bar中的名称
- "canFlyTo": true, // 该楼能否被飞行器飞到(不能的话在该楼也不允许使用)
- "map": [ // 地图数据,需要是13x13,建议使用地图生成器来生成
-
- ],
- "firstArrive": [ // 第一次到该楼层触发的事件
-
- ],
- "events": [ // 该楼的所有可能事件列表
-
- ],
- "afterOpenDoor": [ // 开完门后可能触发的事件列表
-
- ],
- "afterBattle": [ // 战斗后可能触发的事件列表
-
- ],
- "afterGetItem": [ // 获得道具后可能触发的事件列表
-
- ]
- };
-}
-
-main.floors.template = new template();
diff --git a/libs/icons.js b/libs/icons.js
index cf331749..00ea9eb1 100644
--- a/libs/icons.js
+++ b/libs/icons.js
@@ -6,172 +6,188 @@ icons.prototype.init = function () {
this.icons = {
'heros': {
'hero1': {
- 'down': {'loc': {'iconLoc': 0, 'stop': 0, 'leftFoot': 1, 'rightFoot': 2}, 'size': 32},
- 'left': {'loc': {'iconLoc': 1, 'stop': 0, 'leftFoot': 1, 'rightFoot': 2}, 'size': 32},
- 'right': {'loc': {'iconLoc': 2, 'stop': 0, 'leftFoot': 1, 'rightFoot': 2}, 'size': 32},
- 'up': {'loc': {'iconLoc': 3, 'stop': 0, 'leftFoot': 1, 'rightFoot': 2}, 'size': 32}
+ 'down': {'loc': 0, 'stop': 0, 'leftFoot': 1, 'rightFoot': 2},
+ 'left': {'loc': 1, 'stop': 0, 'leftFoot': 1, 'rightFoot': 2},
+ 'right': {'loc': 2, 'stop': 0, 'leftFoot': 1, 'rightFoot': 2},
+ 'up': {'loc': 3, 'stop': 0, 'leftFoot': 1, 'rightFoot': 2}
}
},
'terrains': {
- 'ground': {'loc': 0, 'size': 32},
- 'yellowWall': {'loc': 1, 'size': 32},
- 'whiteWall': {'loc': 2, 'size': 32},
- 'blueWall': {'loc': 3, 'size': 32},
- 'starWall': {'loc': 4, 'size': 32},
- 'lavaWall': {'loc': 5, 'size': 32},
- 'downFloor': {'loc': 6, 'size': 32},
- 'upFloor': {'loc': 7, 'size': 32},
- 'cavity': {'loc': 8, 'size': 32},
- 'yellowDoor': {'loc': 9, 'size': 32},
- 'blueDoor': {'loc': 10, 'size': 32},
- 'redDoor': {'loc': 11, 'size': 32},
- 'greenDoor': {'loc': 12, 'size': 32},
- 'specialDoor': {'loc': 13, 'size': 32},
- 'steelDoor': {'loc': 14, 'size': 32},
- 'blueShop-left': {'loc': 15, 'size': 32},
- 'blueShop-right': {'loc': 16, 'size': 32},
- 'redShop-left': {'loc': 17, 'size': 32},
- 'redShop-right': {'loc': 18, 'size': 32}
+ 'ground': 0,
+ 'yellowWall': 1,
+ 'whiteWall': 2,
+ 'blueWall': 3,
+ 'star': 4,
+ 'lava': 5,
+ 'ice': 6,
+ 'downFloor': 7,
+ 'upFloor': 8,
+ 'yellowDoor': 9,
+ 'blueDoor': 10,
+ 'redDoor': 11,
+ 'greenDoor': 12,
+ 'specialDoor': 13,
+ 'steelDoor': 14,
+ 'blueShop-left': 15,
+ 'blueShop-right': 16,
+ 'pinkShop-left': 17,
+ 'pinkShop-right': 18
},
'animates': {
- 'star': {'loc': 0, 'size': 32},
- 'lava': {'loc': 1, 'size': 32},
- 'water': {'loc': 2, 'size': 32},
- 'yellowDoor': {'loc': 3, 'size': 32},
- 'blueDoor': {'loc': 4, 'size': 32},
- 'redDoor': {'loc': 5, 'size': 32},
- 'greenDoor': {'loc': 6, 'size': 32},
- 'specialDoor': {'loc': 7, 'size': 32},
- 'blueWallDoor': {'loc': 8, 'size': 32},
- 'yellowWallDoor': {'loc': 9, 'size': 32},
- 'whiteWallDoor': {'loc': 10, 'size': 32},
- 'ironDoor': {'loc': 11, 'size': 32},
- 'lavaDoor': {'loc': 12, 'size': 32},
- 'grayLavaDoor': {'loc': 13, 'size': 32},
- 'starDoor': {'loc': 14, 'size': 32},
- 'mockBlueWallDoor': {'loc': 15, 'size': 32},
- 'mockYellowWallDoor': {'loc': 16, 'size': 32},
- 'mockWhiteWallDoor': {'loc': 17, 'size': 32},
- 'iceYellowWallDoor': {'loc': 18, 'size': 32},
- 'transparentStar': {'loc': 19, 'size': 32},
- 'exclamation': {'loc': 20, 'size': 32},
- 'portal': {'loc': 21, 'size': 32},
- 'switch': {'loc': 22, 'size': 32},
- 'lavaNet': {'loc': 23, 'size': 32}
+ 'star': 0,
+ 'lava': 1,
+ 'water': 2,
+ 'yellowDoor': 3,
+ 'blueDoor': 4,
+ 'redDoor': 5,
+ 'greenDoor': 6,
+ 'specialDoor': 7,
+ 'blueWallDoor': 8,
+ 'yellowWallDoor': 9,
+ 'whiteWallDoor': 10,
+ 'steelDoor': 11,
+ 'lavaDoor': 12,
+ 'grayLavaDoor': 13,
+ 'starDoor': 14,
+ 'mockBlueWallDoor': 15,
+ 'mockYellowWallDoor': 16,
+ 'mockWhiteWallDoor': 17,
+ 'iceYellowWallDoor': 18,
+ 'starPortal': 19,
+ 'exclamation': 20,
+ 'portal': 21,
+ 'switch': 22,
+ 'lavaNet': 23,
+ 'poisonNet': 24,
+ 'weakNet': 25,
+ 'curseNet': 26,
+ 'downPortal': 27,
+ 'leftPortal': 28,
+ 'rightPortal': 29,
+ 'upPortal': 30
},
'npcs': {
- 'man': {'loc': 0, 'size': 32},
- 'woman': {'loc': 1, 'size': 32},
- 'thief': {'loc': 2, 'size': 32},
- 'fairy': {'loc': 3, 'size': 32},
- 'magician': {'loc': 4, 'size': 32},
- 'womanMagician': {'loc': 5, 'size': 32},
- 'wood': {'loc': 8, 'size': 32},
- 'blueShop': {'loc': 10, 'size': 32},
- 'redShop': {'loc': 9, 'size': 32},
- 'princess': {'loc': 11, 'size': 32}
+ 'man': 0,
+ 'woman': 1,
+ 'thief': 2,
+ 'fairy': 3,
+ 'magician': 4,
+ 'womanMagician': 5,
+ 'oldMan': 6,
+ 'child': 7,
+ 'wood': 8,
+ 'pinkShop': 9,
+ 'blueShop': 10,
+ 'princess': 11
},
'enemys': {
- 'greenSlime': {'loc': 0, 'size': 32},
- 'redSlime': {'loc': 1, 'size': 32},
- 'blackSlime': {'loc': 2, 'size': 32},
- 'slimelord': {'loc': 3, 'size': 32},
- 'bat': {'loc': 4, 'size': 32},
- 'bigBat': {'loc': 5, 'size': 32},
- 'redBat': {'loc': 6, 'size': 32},
- 'vampire': {'loc': 7, 'size': 32},
- 'skeleton': {'loc': 8, 'size': 32},
- 'skeletonSoilder': {'loc': 9, 'size': 32},
- 'skeletonCaptain': {'loc': 10, 'size': 32},
- 'ghostSkeleton': {'loc': 11, 'size': 32},
- 'zombie': {'loc': 12, 'size': 32},
- 'zombieKnight': {'loc': 13, 'size': 32},
- 'rock': {'loc': 14, 'size': 32},
- 'slimeMan': {'loc': 15, 'size': 32},
- 'bluePriest': {'loc': 16, 'size': 32},
- 'redPriest': {'loc': 17, 'size': 32},
- 'brownWizard': {'loc': 18, 'size': 32},
- 'redWizard': {'loc': 19, 'size': 32},
- 'yellowGuard': {'loc': 20, 'size': 32},
- 'blueGuard': {'loc': 21, 'size': 32},
- 'redGuard': {'loc': 22, 'size': 32},
- 'swordsman': {'loc': 23, 'size': 32},
- 'soldier': {'loc': 24, 'size': 32},
- 'yellowKnight': {'loc': 25, 'size': 32},
- 'redKnight': {'loc': 26, 'size': 32},
- 'darkKnight': {'loc': 27, 'size': 32},
- 'blackKing': {'loc': 28, 'size': 32},
- 'yellowKing': {'loc': 29, 'size': 32},
- 'greenKing': {'loc': 30, 'size': 32},
- 'blueKnight': {'loc': 31, 'size': 32},
- 'goldSlime': {'loc': 32, 'size': 32},
- 'poisonSkeleton': {'loc': 33, 'size': 32},
- 'poisonBat': {'loc': 34, 'size': 32},
- 'steelRock': {'loc': 35, 'size': 32},
- 'skeletonPriest': {'loc': 36, 'size': 32},
- 'skeletonKing': {'loc': 37, 'size': 32},
- 'skeletonWizard': {'loc': 38, 'size': 32},
- 'redSkeletonCaption': {'loc': 39, 'size': 32},
- 'badHero': {'loc': 40, 'size': 32},
- 'demon': {'loc': 41, 'size': 32},
- 'demonPriest': {'loc': 42, 'size': 32},
- 'goldHornSlime': {'loc': 43, 'size': 32},
- 'redKing': {'loc': 44, 'size': 32},
- 'whiteKing': {'loc': 45, 'size': 32},
- 'blackMagician': {'loc': 46, 'size': 32},
- 'silverSlime': {'loc': 47, 'size': 32},
- 'swordEmperor': {'loc': 48, 'size': 32},
- 'whiteHornSlime': {'loc': 49, 'size': 32},
- 'badPrincess': {'loc': 50, 'size': 32},
- 'badFairy': {'loc': 51, 'size': 32},
- 'grayPriest': {'loc': 52, 'size': 32},
- 'redSwordsman': {'loc': 53, 'size': 32},
- 'whiteGhost': {'loc': 54, 'size': 32},
- 'poisonZombie': {'loc': 55, 'size': 32},
- 'magicDragon': {'loc': 56, 'size': 32},
- 'octopus': {'loc': 57, 'size': 32},
- 'fairy': {'loc': 58, 'size': 32},
- 'greenKnight': {'loc': 59, 'size': 32},
+ 'greenSlime': 0,
+ 'redSlime': 1,
+ 'blackSlime': 2,
+ 'slimelord': 3,
+ 'bat': 4,
+ 'bigBat': 5,
+ 'redBat': 6,
+ 'vampire': 7,
+ 'skeleton': 8,
+ 'skeletonSoilder': 9,
+ 'skeletonCaptain': 10,
+ 'ghostSkeleton': 11,
+ 'zombie': 12,
+ 'zombieKnight': 13,
+ 'rock': 14,
+ 'slimeMan': 15,
+ 'bluePriest': 16,
+ 'redPriest': 17,
+ 'brownWizard': 18,
+ 'redWizard': 19,
+ 'yellowGuard': 20,
+ 'blueGuard': 21,
+ 'redGuard': 22,
+ 'swordsman': 23,
+ 'soldier': 24,
+ 'yellowKnight': 25,
+ 'redKnight': 26,
+ 'darkKnight': 27,
+ 'blackKing': 28,
+ 'yellowKing': 29,
+ 'greenKing': 30,
+ 'blueKnight': 31,
+ 'goldSlime': 32,
+ 'poisonSkeleton': 33,
+ 'poisonBat': 34,
+ 'steelRock': 35,
+ 'skeletonPriest': 36,
+ 'skeletonKing': 37,
+ 'skeletonWizard': 38,
+ 'redSkeletonCaption': 39,
+ 'badHero': 40,
+ 'demon': 41,
+ 'demonPriest': 42,
+ 'goldHornSlime': 43,
+ 'redKing': 44,
+ 'whiteKing': 45,
+ 'blackMagician': 46,
+ 'silverSlime': 47,
+ 'swordEmperor': 48,
+ 'whiteHornSlime': 49,
+ 'badPrincess': 50,
+ 'badFairy': 51,
+ 'grayPriest': 52,
+ 'redSwordsman': 53,
+ 'whiteGhost': 54,
+ 'poisonZombie': 55,
+ 'magicDragon': 56,
+ 'octopus': 57,
+ 'fairy': 58,
+ 'greenKnight': 59,
},
'items': {
- 'yellowKey': {'loc': 0, 'size': 32},
- 'blueKey': {'loc': 1, 'size': 32},
- 'redKey': {'loc': 2, 'size': 32},
- 'greenKey': {'loc': 3, 'size': 32},
- 'steelKey': {'loc': 4, 'size': 32},
- 'bigKey': {'loc': 6, 'size': 32},
- 'redJewel': {'loc': 16, 'size': 32},
- 'blueJewel': {'loc': 17, 'size': 32},
- 'greenJewel': {'loc': 18, 'size': 32},
- 'yellowJewel': {'loc': 19, 'size': 32},
- 'redPotion': {'loc': 20, 'size': 32},
- 'bluePotion': {'loc': 21, 'size': 32},
- 'greenPotion': {'loc': 22, 'size': 32},
- 'yellowPotion': {'loc': 23, 'size': 32},
- 'book': {'loc': 9, 'size': 32},
- 'fly': {'loc': 12, 'size': 32},
- 'coin': {'loc': 11, 'size': 32},
- 'wand': {'loc': 10, 'size': 32},
- 'cross': {'loc': 40, 'size': 32},
- 'snow': {'loc': 41, 'size': 32},
- 'pickaxe': {'loc': 45, 'size': 32},
- 'icePickaxe': {'loc': 44, 'size': 32},
- 'bomb': {'loc': 43, 'size': 32},
- 'centerFly': {'loc': 13, 'size': 32},
- 'downFly': {'loc': 14, 'size': 32},
- 'upFly': {'loc': 15, 'size': 32},
- 'earthquake': {'loc': 8, 'size': 32},
- 'sword1': {'loc': 50, 'size': 32},
- 'sword2': {'loc': 51, 'size': 32},
- 'sword3': {'loc': 52, 'size': 32},
- 'sword4': {'loc': 53, 'size': 32},
- 'sword5': {'loc': 54, 'size': 32},
- 'shield1': {'loc': 55, 'size': 32},
- 'shield2': {'loc': 56, 'size': 32},
- 'shield3': {'loc': 57, 'size': 32},
- 'shield4': {'loc': 58, 'size': 32},
- 'shield5': {'loc': 59, 'size': 32},
- 'superPotion': {'loc': 29, 'size': 32},
+ 'yellowKey': 0,
+ 'blueKey': 1,
+ 'redKey': 2,
+ 'greenKey': 3,
+ 'steelKey': 4,
+ 'bigKey': 6,
+ 'redJewel': 16,
+ 'blueJewel': 17,
+ 'greenJewel': 18,
+ 'yellowJewel': 19,
+ 'redPotion': 20,
+ 'bluePotion': 21,
+ 'greenPotion': 22,
+ 'yellowPotion': 23,
+ 'sword1': 50,
+ 'sword2': 51,
+ 'sword3': 52,
+ 'sword4': 53,
+ 'sword5': 54,
+ 'shield1': 55,
+ 'shield2': 56,
+ 'shield3': 57,
+ 'shield4': 58,
+ 'shield5': 59,
+ 'book': 9,
+ 'fly': 12,
+ 'pickaxe': 45,
+ 'icePickaxe': 44,
+ 'bomb': 43,
+ 'centerFly': 13,
+ 'upFly': 15,
+ 'downFly': 14,
+ 'coin': 11,
+ 'snow': 41,
+ 'cross': 40,
+ 'superPotion': 29,
+ 'earthquake': 8,
+ 'poisonWine': 24,
+ 'weakWine': 25,
+ 'curseWine': 27,
+ 'superWine': 28,
+ 'knife': 42,
+ 'moneyPocket': 46,
+ 'shoes': 47,
+ 'hammer': 48
}
}
}
diff --git a/libs/items.js b/libs/items.js
index 1286f310..fd426d1e 100644
--- a/libs/items.js
+++ b/libs/items.js
@@ -29,85 +29,174 @@ items.prototype.init = function () {
'shield4': {'cls': 'items', 'name': '圣盾'},
'shield5': {'cls': 'items', 'name': '神圣盾'},
'superPotion': {'cls': 'items', 'name': '圣水'},
- 'bigKey': {'cls': 'items', 'name': '钥匙盒'},
+ 'moneyPocket': {'cls': 'items', 'name': '金钱袋'},
// 物品
- 'greenKey': {'cls': 'tools', 'name': '绿钥匙', 'text': '可以打开一扇绿门'},
- 'steelKey': {'cls': 'tools', 'name': '铁门钥匙', 'text': '可以打开一扇铁门'},
- 'book': {'cls': 'constants', 'name': '怪物手册', 'text': '可以查看当前楼层各怪物属性。'},
- 'fly': {'cls': 'constants', 'name': '楼层传送器', 'text': '可以自由往来去过的楼层。'},
+ 'book': {'cls': 'constants', 'name': '怪物手册', 'text': '可以查看当前楼层各怪物属性'},
+ 'fly': {'cls': 'constants', 'name': '楼层传送器', 'text': '可以自由往来去过的楼层'},
'coin': {'cls': 'constants', 'name': '幸运金币', 'text': '持有时打败怪物可得双倍金币'},
- 'snow': {'cls': 'constants', 'name': '冰冻徽章', 'text': '可以将面前的一块熔岩变成平地'},
- 'cross': {'cls': 'constants', 'name': '十字架', 'text': '持有后无视怪物的无敌属性'},
+ 'snow': {'cls': 'constants', 'name': '冰冻徽章', 'text': '可以将四周的熔岩变成平地'},
+ 'cross': {'cls': 'constants', 'name': '十字架', 'text': '该道具尚未被定义'},
+ 'knife': {'cls': 'constants', 'name': '屠龙匕首', 'text': '该道具尚未被定义'},
+ 'shoes': {'cls': 'constants', 'name': '绿鞋', 'text': '持有时无视负面地形'},
// 道具
- 'pickaxe': {'cls': 'tools', 'name': '破墙镐', 'text': '可以破坏勇士四周的墙。'},
- 'icePickaxe': {'cls': 'tools', 'name': '破冰稿', 'text': '可以破坏勇士面前的一堵冰墙。'},
- 'bomb': {'cls': 'tools', 'name': '炸弹', 'text': '可以炸掉勇士四周的怪物。'},
- 'centerFly': {'cls': 'tools', 'name': '中心对称飞行器', 'text': '可以飞向当前楼层中心对称的位置。'},
- 'upFly': {'cls': 'tools', 'name': '上楼器', 'text': '可以飞往楼上的相同位置。'},
- 'downFly': {'cls': 'tools', 'name': '下楼器', 'text': '可以飞往楼下的相同位置。'},
- 'earthquake': {'cls': 'tools', 'name': '地震卷轴', 'text': '可以破坏当前层的所有墙'}
-
+ 'bigKey': {'cls': 'tools', 'name': '大黄门钥匙', 'text': '可以开启当前层所有黄门'},
+ 'greenKey': {'cls': 'tools', 'name': '绿钥匙', 'text': '可以打开一扇绿门'},
+ 'steelKey': {'cls': 'tools', 'name': '铁门钥匙', 'text': '可以打开一扇铁门'},
+ 'pickaxe': {'cls': 'tools', 'name': '破墙镐', 'text': '可以破坏勇士面前的墙'},
+ 'icePickaxe': {'cls': 'tools', 'name': '破冰镐', 'text': '可以破坏勇士面前的一堵冰墙'},
+ 'bomb': {'cls': 'tools', 'name': '炸弹', 'text': '可以炸掉勇士四周的怪物'},
+ 'centerFly': {'cls': 'tools', 'name': '中心对称飞行器', 'text': '可以飞向当前楼层中心对称的位置'},
+ 'upFly': {'cls': 'tools', 'name': '上楼器', 'text': '可以飞往楼上的相同位置'},
+ 'downFly': {'cls': 'tools', 'name': '下楼器', 'text': '可以飞往楼下的相同位置'},
+ 'earthquake': {'cls': 'tools', 'name': '地震卷轴', 'text': '可以破坏当前层的所有墙'},
+ 'poisonWine': {'cls': 'tools', 'name': '解毒药水', 'text': '可以解除中毒状态'},
+ 'weakWine': {'cls': 'tools', 'name': '解衰药水', 'text': '可以解除衰弱状态'},
+ 'curseWine': {'cls': 'tools', 'name': '解咒药水', 'text': '可以解除诅咒状态'},
+ 'superWine': {'cls': 'tools', 'name': '万能药水', 'text': '可以解除所有不良状态'},
+ 'hammer': {'cls': 'tools', 'name': '圣锤', 'text': '可以炸掉勇士面前的怪物'}
}
}
-items.prototype.getItems = function (itemName) {
- if (itemName == undefined) {
- return this.items;
- }
- return this.items[itemsName];
+// 初始化道具
+items.prototype.getItems = function () {
+ // 大黄门钥匙?钥匙盒?
+ if (core.flags.bigKeyIsBox)
+ this.items['bigKey'] = {'cls': 'items', 'name': '钥匙盒'};
+ // 面前的墙?四周的墙?
+ if (core.flags.pickaxeFourDirections)
+ this.items.pickaxe.text = "可以破坏勇士四周的墙";
+ return this.items;
}
main.instance.items = new items();
+items.prototype.getItemEffect = function(itemId, itemNum) {
+ var itemCls = core.material.items[itemId].cls;
+ // 消耗品
+ if (itemCls === 'items') {
+ if (itemId === 'redJewel') core.status.hero.atk += 3;
+ if (itemId === 'blueJewel') core.status.hero.def += 3;
+ if (itemId === 'greenJewel') core.status.hero.mdef += 5;
+ if (itemId == 'yellowJewel') {
+ core.status.hero.hp+=1000;
+ core.status.hero.atk+=6;
+ core.status.hero.def+=6;
+ core.status.hero.mdef+=10;
+ }
+ if (itemId === 'redPotion') core.status.hero.hp += 200;
+ if (itemId === 'bluePotion') core.status.hero.hp += 500;
+ if (itemId === 'yellowPotion') core.status.hero.hp += 500;
+ if (itemId === 'greenPotion') core.status.hero.hp += 800;
+ if (itemId === 'sword1') core.status.hero.atk += 10;
+ if (itemId === 'sword2') core.status.hero.atk += 20;
+ if (itemId == 'sword3') core.status.hero.atk += 40;
+ if (itemId == 'sword4') core.status.hero.atk += 80;
+ if (itemId === 'sword5') core.status.hero.atk += 160;
+ if (itemId === 'shield1') core.status.hero.def += 10;
+ if (itemId === 'shield2') core.status.hero.def += 20;
+ if (itemId === 'shield3') core.status.hero.def += 40;
+ if (itemId === 'shield4') core.status.hero.def += 80;
+ if (itemId === 'shield5') core.status.hero.def += 160;
+ if (itemId === 'bigKey') {
+ core.status.hero.items.keys.yellowKey++;
+ core.status.hero.items.keys.blueKey++;
+ core.status.hero.items.keys.redKey++;
+ }
+ if (itemId == 'superPotion') core.status.hero.hp *= 2;
+ if (itemId == 'moneyPocket') core.status.hero.money += 500;
+ }
+ else {
+ core.addItem(itemId, itemNum);
+ }
+}
+
+items.prototype.getItemEffectTip = function(itemId) {
+ if (itemId === 'redJewel') return ",攻击+3";
+ if (itemId === 'blueJewel') return ",防御+3";
+ if (itemId === 'greenJewel') return ",魔防+3";
+ if (itemId == 'yellowJewel') return ",全属性提升";
+ if (itemId === 'redPotion') return ",生命+200";
+ if (itemId === 'bluePotion') return ",生命+500";
+ if (itemId === 'yellowPotion') return ",生命+500";
+ if (itemId === 'greenPotion') return ",生命+800";
+ if (itemId === 'sword1') return ",攻击+10";
+ if (itemId === 'sword2') return ",攻击+20";
+ if (itemId === 'sword3') return ",攻击+40";
+ if (itemId === 'sword4') return ",攻击+80";
+ if (itemId === 'sword5') return ",攻击+160";
+ if (itemId === 'shield1') return ",防御+10";
+ if (itemId === 'shield2') return ",防御+20";
+ if (itemId === 'shield3') return ",防御+40";
+ if (itemId === 'shield4') return ",防御+80";
+ if (itemId === 'shield5') return ",防御+160";
+ if (itemId === 'bigKey') return ",全钥匙+1";
+ if (itemId === 'superPotion') return ",生命值翻倍";
+ if (itemId == 'moneyPocket') return ",金币+500";
+ return "";
+}
+
+
+
items.prototype.useItem = function (itemId) {
// 使用道具
if (!this.canUseItem(itemId)) return;
var itemCls = core.material.items[itemId].cls;
- // 永久道具
- if (itemCls == 'constants') {
- if (itemId=='book') {
- core.ui.drawEnemyBook(1);
- }
- if (itemId=='fly') {
- core.ui.drawFly(core.status.hero.flyRange.indexOf(core.status.floorId));
- }
- }
- // 消耗道具
- if (itemCls == 'tools') {
- core.status.hero.items[itemCls][itemId]--;
- if (itemId == 'earthquake' || itemId == 'bomb' || itemId == 'pickaxe') {
- // 地震卷轴/炸弹/破墙镐
- core.removeBlockByIds(core.status.floorId, core.status.event.data);
- core.drawMap(core.status.floorId, function () {
- core.drawHero(core.getHeroLoc('direction'), core.getHeroLoc('x'), core.getHeroLoc('y'), 'stop');
- core.updateFg();
- core.drawTip(core.material.items[itemId].name + "使用成功");
- if (itemId == 'bomb' && core.flags.bombTrigger) {
- core.events.afterBattle();
- }
- });
- }
- if (itemId == 'centerFly') {
- // 对称飞
- core.clearMap('hero', 0, 0, 416, 416);
- core.setHeroLoc('x', core.status.event.data.x);
- core.setHeroLoc('y', core.status.event.data.y);
+ if (itemId=='book') core.ui.drawEnemyBook(1);
+ if (itemId=='fly') core.ui.drawFly(core.status.hero.flyRange.indexOf(core.status.floorId));
+ if (itemId == 'earthquake' || itemId == 'bomb' || itemId == 'pickaxe' || itemId=='icePickaxe'
+ || itemId == 'snow' || itemId == 'hammer' || itemId=='bigKey') {
+ // 消除当前层的某些块
+ core.removeBlockByIds(core.status.floorId, core.status.event.data);
+ core.drawMap(core.status.floorId, function () {
core.drawHero(core.getHeroLoc('direction'), core.getHeroLoc('x'), core.getHeroLoc('y'), 'stop');
+ core.updateFg();
core.drawTip(core.material.items[itemId].name + "使用成功");
- }
- if (itemId == 'upFly' || itemId == 'downFly') {
- // 上楼器/下楼器
- core.changeFloor(core.status.event.data.id, null, {'direction': core.status.hero.loc.direction, 'x': core.status.event.data.x, 'y': core.status.event.data.y}, function (){
- core.drawTip(core.material.items[itemId].name + "使用成功");
- });
- }
- if (core.status.hero.items[itemCls][itemId]==0)
- delete core.status.hero.items[itemCls][itemId];
+ if (itemId == 'bomb' && core.flags.bombTrigger) {
+ core.events.afterBattle();
+ }
+ else if (itemId=='hammer' && core.flags.bombTrigger) {
+ core.events.afterBattle(core.status.event.data[0]);
+ }
+ });
}
+ if (itemId == 'centerFly') {
+ // 对称飞
+ core.clearMap('hero', 0, 0, 416, 416);
+ core.setHeroLoc('x', core.status.event.data.x);
+ core.setHeroLoc('y', core.status.event.data.y);
+ core.drawHero(core.getHeroLoc('direction'), core.getHeroLoc('x'), core.getHeroLoc('y'), 'stop');
+ core.drawTip(core.material.items[itemId].name + "使用成功");
+ }
+ if (itemId == 'upFly' || itemId == 'downFly') {
+ // 上楼器/下楼器
+ core.changeFloor(core.status.event.data.id, null, {'direction': core.status.hero.loc.direction, 'x': core.status.event.data.x, 'y': core.status.event.data.y}, function (){
+ core.drawTip(core.material.items[itemId].name + "使用成功");
+ });
+ }
+ if (itemId == 'poisonWine') core.setFlag('poison', false);
+ if (itemId == 'weakWine') {
+ core.setFlag('weak', false);
+ core.status.hero.atk += core.flags.weakValue;
+ core.status.hero.def += core.flags.weakValue;
+ }
+ if (itemId == 'curseWine') core.setFlag('curse', false);
+ if (itemId == 'superWine') {
+ core.setFlag('poison', false);
+ core.setFlag('weak', false);
+ core.status.hero.atk += core.flags.weakValue;
+ core.status.hero.def += core.flags.weakValue;
+ core.setFlag('curse', false);
+ }
+ core.updateStatusBar();
+ // 道具使用完毕:删除
+ if (itemCls=='tools')
+ core.status.hero.items[itemCls][itemId]--;
+ if (core.status.hero.items[itemCls][itemId]==0)
+ delete core.status.hero.items[itemCls][itemId];
}
items.prototype.canUseItem = function (itemId) {
@@ -123,8 +212,9 @@ items.prototype.canUseItem = function (itemId) {
var ids = [];
for (var i in core.status.thisMap.blocks) {
var block = core.status.thisMap.blocks[i];
- if (core.isset(block.event) && block.event.id == 'yellowWall') {
-
+ if (core.isset(block.event) &&
+ (block.event.id == 'yellowWall' || block.event.id=='whiteWall' || block.event.id=='blueWall')) // 能破哪些墙
+ {
// 四个方向
if (core.flags.pickaxeFourDirections) {
if (Math.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1) {
@@ -132,14 +222,7 @@ items.prototype.canUseItem = function (itemId) {
}
}
else {
- // 获得勇士的下一个位置
- var scan = {
- 'up': {'x': 0, 'y': -1},
- 'left': {'x': -1, 'y': 0},
- 'down': {'x': 0, 'y': 1},
- 'right': {'x': 1, 'y': 0}
- };
- if (block.x == core.status.hero.loc.x+scan[core.status.hero.loc.direction].x && block.y == core.status.hero.loc.y+scan[core.status.hero.loc.direction].y) {
+ if (block.x == core.nextX() && block.y == core.nextY()) {
ids.push(i);
}
}
@@ -151,6 +234,17 @@ items.prototype.canUseItem = function (itemId) {
}
return false;
}
+ if (itemId == 'icePickaxe') {
+ // 破冰镐
+ for (var i in core.status.thisMap.blocks) {
+ var block = core.status.thisMap.blocks[i];
+ if (core.isset(block.event) && block.x==core.nextX() && block.y==core.nextY() && block.event.id=='ice') {
+ core.status.event.data = [i];
+ return true;
+ }
+ }
+ return false;
+ }
if (itemId == 'bomb') {
// 炸弹
var ids = [];
@@ -168,6 +262,19 @@ items.prototype.canUseItem = function (itemId) {
}
return false;
}
+ if (itemId == 'hammer') {
+ // 圣锤
+ for (var i in core.status.thisMap.blocks) {
+ var block = core.status.thisMap.blocks[i];
+ if (core.isset(block.event) && block.event.cls == 'enemys' && block.x==core.nextX() && block.y==core.nextY()) {
+ var enemy = core.material.enemys[block.event.id];
+ if (core.isset(enemy.bomb) && !enemy.bomb) continue;
+ core.status.event.data = [i];
+ return true;
+ }
+ }
+ return false;
+ }
if (itemId == 'earthquake') {
var ids = []
for (var i in core.status.thisMap.blocks) {
@@ -195,14 +302,11 @@ items.prototype.canUseItem = function (itemId) {
}
if (itemId == 'upFly') {
// 上楼器
- if (core.status.floorId == 'MT20' || core.status.floorId == 'MT21') // 禁用条件
- return false;
- var toId = null, found = false; // 上楼后的楼层ID
- for (var id in core.status.maps) {
- if (found) {toId = id; break;}
- if (id == core.status.floorId) found=true;
- }
- if (!found) return false;
+ var floorId = core.status.floorId;
+ var index = core.floorIds.indexOf(floorId);
+ if (index==core.floorIds.length-1) return false;
+ var toId = core.floorIds[index+1];
+
// 检查是否存在block(不是空地)
var toX = core.getHeroLoc('x'), toY = core.getHeroLoc('y');
var blocks = core.status.maps[toId].blocks;
@@ -211,20 +315,19 @@ items.prototype.canUseItem = function (itemId) {
return false;
}
}
+
// 可以上楼,记录下位置信息,返回true
core.status.event.data = {'id': toId, 'x': toX, 'y': toY};
return true;
}
if (itemId == 'downFly') {
// 下楼器
- if (core.status.floorId == 'MT0' || core.status.floorId == 'MT21')
- return false;
- var toId = null;
- for (var id in core.status.maps) {
- if (id == core.status.floorId) break;
- toId = id;
- }
- if (toId == null) return false;
+ var floorId = core.status.floorId;
+ var index = core.floorIds.indexOf(floorId);
+ if (index==0) return false;
+ var toId = core.floorIds[index-1];
+
+ // 检查是否存在block(不是空地)
var toX = core.getHeroLoc('x'), toY = core.getHeroLoc('y');
var blocks = core.status.maps[toId].blocks;
for (var s = 0; s < blocks.length; s++) {
@@ -232,61 +335,44 @@ items.prototype.canUseItem = function (itemId) {
return false;
}
}
+
+ // 可以上楼,记录下位置信息,返回true
core.status.event.data = {'id': toId, 'x': toX, 'y': toY};
return true;
}
+ if (itemId=='snow') {
+ // 冰冻徽章
+ var ids = [];
+ for (var i in core.status.thisMap.blocks) {
+ var block = core.status.thisMap.blocks[i];
+ if (core.isset(block.event) && block.event.id == 'lava' && Math.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1) {
+ ids.push(i);
+ }
+ }
+ if (ids.length>0) {
+ core.status.event.data = ids;
+ return true;
+ }
+ return false;
+ }
+ if (itemId=='bigKey') {
+ // 大黄门钥匙
+ var ids = [];
+ for (var i in core.status.thisMap.blocks) {
+ var block = core.status.thisMap.blocks[i];
+ if (core.isset(block.event) && block.event.id == 'yellowDoor') {
+ ids.push(i);
+ }
+ }
+ if (ids.length>0) {
+ core.status.event.data = ids;
+ return true;
+ }
+ return false;
+ }
+ if (itemId=='poisonWine') return core.hasFlag('poison');
+ if (itemId=='weakWine') return core.hasFlag('weak');
+ if (itemId=='curseWine') return core.hasFlag('curse');
+ if (itemId=='superWine') return core.hasFlag('poison') || core.hasFlag('weak') || core.hasFlag('curse');
return false;
}
-
-items.prototype.getItemEffect = function(itemId, itemNum) {
- var itemCls = core.material.items[itemId].cls;
- // 消耗品
- if (itemCls === 'items') {
- if (itemId === 'redJewel') core.status.hero.atk += 3;
- if (itemId === 'blueJewel') core.status.hero.def += 3;
- if (itemId === 'greenJewel') core.status.hero.mdef += 3;
- // if (itemId == 'yellowJewel') core.status.hero.atk+=0;
- if (itemId === 'redPotion') core.status.hero.hp += 200;
- if (itemId === 'bluePotion') core.status.hero.hp += 500;
- if (itemId === 'yellowPotion') core.status.hero.hp += 500;
- if (itemId === 'greenPotion') core.status.hero.hp += 800;
- if (itemId === 'sword1') core.status.hero.atk += 10;
- if (itemId === 'sword2') core.status.hero.atk += 100;
- if (itemId === 'sword5') core.status.hero.atk += 1000;
- if (itemId === 'shield1') core.status.hero.def += 10;
- if (itemId === 'shield2') core.status.hero.def += 100;
- if (itemId === 'shield5') {
- core.status.hero.def += 1000;
- core.status.hero.flags.hasShield5 = true;
- }
- if (itemId === 'bigKey') {
- core.status.hero.items.keys.yellowKey++;
- core.status.hero.items.keys.blueKey++;
- core.status.hero.items.keys.redKey++;
- }
- if (itemId == 'superPotion') core.status.hero.hp *= 2;
- }
- else {
- core.addItem(itemId, itemNum);
- }
-}
-
-items.prototype.getItemEffectTip = function(itemId) {
- if (itemId === 'redJewel') return ",攻击+3";
- if (itemId === 'blueJewel') return ",防御+3";
- if (itemId === 'greenJewel') return ",魔防+3";
- // if (itemId == 'yellowJewel') ;
- if (itemId === 'redPotion') return ",生命+200";
- if (itemId === 'bluePotion') return ",生命+500";
- if (itemId === 'yellowPotion') return ",生命+500";
- if (itemId === 'greenPotion') return ",生命+800";
- if (itemId === 'sword1') return ",攻击+10";
- if (itemId === 'sword2') return ",攻击+100";
- if (itemId === 'sword5') return ",攻击+1000";
- if (itemId === 'shield1') return ",防御+10";
- if (itemId === 'shield2') return ",防御+100";
- if (itemId === 'shield5') return ",防御+1000";
- if (itemId === 'bigKey') return ",全钥匙+1";
- if (itemId === 'superPotion') return ",生命值翻倍";
- return "";
-}
diff --git a/libs/maps.js b/libs/maps.js
index 81b7b1fe..5de255a6 100644
--- a/libs/maps.js
+++ b/libs/maps.js
@@ -1,557 +1,255 @@
-function maps() {
+function maps() {}
+maps.prototype.init = function() {}
-}
-
-maps.prototype.init = function () {
-
- var map_txt = [
- [ // 0F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 1F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 87, 0, 101, 102, 101, 0, 0, 0, 0, 0, 0, 6],
- [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 6],
- [6, 18, 0, 105, 81, 0, 1, 12, 19, 15, 1, 0, 6],
- [6, 15, 113, 12, 1, 0, 1, 1, 82, 1, 1, 0, 6],
- [6, 1, 81, 1, 1, 0, 1, 0, 105, 0, 1, 101, 6],
- [6, 0, 113, 0, 1, 0, 1, 15, 102, 15, 1, 0, 6],
- [6, 15, 113, 11, 1, 0, 1, 1, 81, 1, 1, 0, 6],
- [6, 1, 81, 1, 1, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 12, 114, 11, 1, 1, 81, 1, 1, 1, 83, 1, 6],
- [6, 0, 18, 0, 1, 15, 15, 16, 1, 16, 113, 16, 6],
- [6, 15, 35, 16, 1, 32, 0, 33, 1, 15, 15, 15, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 2F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 88, 1, 117, 19, 19, 19, 0, 19, 19, 19, 117, 6],
- [6, 0, 1, 0, 1, 1, 1, 81, 1, 1, 1, 0, 6],
- [6, 0, 1, 12, 1, 1, 0, 0, 0, 1, 1, 11, 6],
- [6, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 6],
- [6, 0, 1, 118, 1, 1, 0, 143, 0, 1, 1, 118, 6],
- [6, 0, 1, 141, 37, 1, 1, 83, 1, 1, 38, 141, 6],
- [6, 0, 1, 12, 1, 1, 1, 11, 1, 1, 1, 11, 6],
- [6, 0, 1, 1, 1, 1, 12, 12, 12, 1, 1, 1, 6],
- [6, 0, 1, 0, 1, 19, 110, 16, 110, 15, 0, 117, 6],
- [6, 0, 81, 110, 1, 1, 1, 1, 1, 1, 1, 81, 6],
- [6, 87, 1, 0, 0, 0, 18, 18, 18, 0, 0, 0, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 3F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 15, 113, 16, 1, 113, 71, 113, 1, 11, 18, 101, 6],
- [6, 105, 1, 105, 1, 12, 113, 11, 1, 18, 101, 0, 6],
- [6, 0, 1, 0, 1, 1, 82, 1, 1, 101, 113, 19, 6],
- [6, 0, 81, 0, 15, 15, 0, 0, 1, 1, 81, 1, 6],
- [6, 101, 1, 81, 1, 1, 1, 0, 1, 0, 0, 0, 6],
- [6, 102, 1, 0, 1, 0, 81, 0, 1, 0, 1, 0, 6],
- [6, 101, 1, 0, 102, 0, 1, 101, 1, 17, 1, 0, 6],
- [6, 0, 1, 1, 1, 81, 1, 113, 1, 15, 1, 113, 6],
- [6, 0, 0, 0, 1, 105, 1, 101, 1, 15, 1, 0, 6],
- [6, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 6],
- [6, 88, 0, 0, 1, 0, 102, 0, 105, 0, 1, 87, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 4F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 0, 0, 0, 0, 114, 105, 105, 0, 0, 0, 87, 6],
- [6, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6],
- [6, 0, 0, 0, 0, 18, 0, 109, 0, 0, 81, 0, 6],
- [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 6],
- [6, 1, 117, 15, 1, 11, 18, 1, 12, 15, 1, 114, 6],
- [6, 1, 47, 117, 81, 0, 110, 82, 19, 109, 81, 0, 6],
- [6, 1, 117, 15, 1, 11, 19, 1, 12, 15, 1, 113, 6],
- [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 6],
- [6, 0, 0, 0, 0, 18, 0, 109, 0, 0, 81, 0, 6],
- [6, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6],
- [6, 0, 0, 0, 0, 113, 105, 105, 0, 0, 0, 88, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 5F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 22, 1, 118, 81, 0, 72, 0, 82, 0, 81, 88, 6],
- [6, 0, 1, 0, 1, 0, 0, 0, 1, 113, 1, 0, 6],
- [6, 110, 1, 110, 1, 1, 110, 1, 1, 19, 1, 0, 6],
- [6, 0, 0, 0, 1, 16, 114, 15, 1, 12, 1, 0, 6],
- [6, 1, 83, 1, 1, 1, 81, 1, 1, 1, 1, 0, 6],
- [6, 0, 0, 0, 114, 0, 0, 81, 0, 0, 0, 0, 6],
- [6, 1, 81, 1, 1, 1, 114, 1, 110, 1, 1, 1, 6],
- [6, 19, 117, 19, 1, 0, 0, 1, 0, 11, 11, 0, 6],
- [6, 15, 15, 15, 1, 0, 1, 1, 1, 1, 1, 0, 6],
- [6, 1, 1, 1, 1, 81, 1, 15, 1, 15, 1, 0, 6],
- [6, 87, 117, 0, 7, 0, 114, 18, 110, 18, 114, 0, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 6F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 19, 19, 19, 1, 118, 34, 118, 1, 12, 12, 12, 6],
- [6, 18, 18, 18, 1, 0, 117, 0, 1, 11, 11, 11, 6],
- [6, 1, 81, 1, 1, 1, 82, 1, 1, 1, 81, 1, 6],
- [6, 114, 0, 0, 110, 81, 117, 81, 110, 0, 0, 114, 6],
- [6, 1, 1, 7, 1, 1, 1, 1, 1, 7, 1, 1, 6],
- [6, 18, 1, 110, 1, 17, 16, 15, 1, 110, 1, 19, 6],
- [6, 114, 81, 0, 1, 1, 82, 1, 1, 0, 81, 114, 6],
- [6, 11, 1, 109, 1, 19, 114, 19, 1, 109, 1, 12, 6],
- [6, 11, 1, 110, 1, 1, 81, 1, 1, 110, 1, 12, 6],
- [6, 1, 1, 109, 1, 18, 0, 73, 1, 109, 1, 1, 6],
- [6, 88, 81, 0, 0, 0, 114, 0, 0, 0, 81, 87, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 7F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 23, 7, 7, 7, 0, 16, 0, 83, 18, 118, 18, 6],
- [6, 1, 1, 1, 1, 117, 1, 117, 1, 117, 18, 117, 6],
- [6, 0, 1, 0, 1, 117, 1, 19, 1, 1, 81, 1, 6],
- [6, 118, 0, 117, 0, 12, 1, 11, 1, 15, 19, 19, 6],
- [6, 1, 1, 1, 81, 1, 1, 1, 1, 15, 1, 81, 6],
- [6, 11, 0, 0, 118, 0, 1, 0, 81, 0, 1, 117, 6],
- [6, 11, 1, 117, 19, 117, 19, 117, 1, 117, 1, 117, 6],
- [6, 11, 1, 1, 1, 1, 1, 1, 1, 117, 1, 46, 6],
- [6, 0, 0, 117, 12, 117, 0, 0, 1, 81, 1, 1, 6],
- [6, 1, 81, 1, 1, 1, 1, 7, 1, 117, 0, 0, 6],
- [6, 87, 118, 117, 11, 117, 0, 0, 1, 0, 0, 88, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 8F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 120, 0, 120, 0, 0, 0, 0, 0, 81, 0, 87, 6],
- [6, 0, 81, 6, 6, 6, 6, 6, 6, 6, 0, 0, 6],
- [6, 120, 6, 6, 12, 12, 6, 11, 11, 6, 6, 82, 6],
- [6, 0, 6, 12, 12, 12, 6, 11, 11, 11, 6, 0, 6],
- [6, 0, 6, 12, 12, 12, 6, 11, 11, 11, 6, 0, 6],
- [6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6],
- [6, 0, 6, 19, 19, 19, 6, 15, 15, 15, 6, 0, 6],
- [6, 0, 6, 19, 19, 19, 6, 16, 16, 16, 6, 0, 6],
- [6, 81, 6, 6, 19, 19, 6, 17, 17, 6, 6, 118, 6],
- [6, 0, 51, 6, 6, 6, 6, 6, 6, 6, 81, 0, 6],
- [6, 88, 0, 81, 0, 0, 0, 0, 0, 118, 0, 120, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 9F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 25, 7, 0, 1, 0, 1, 0, 0, 0, 0, 88, 6],
- [6, 7, 120, 124, 83, 15, 1, 124, 1, 1, 1, 1, 6],
- [6, 1, 81, 1, 1, 15, 1, 12, 1, 19, 12, 11, 6],
- [6, 19, 19, 19, 1, 124, 1, 118, 1, 0, 118, 0, 6],
- [6, 124, 0, 124, 1, 15, 1, 12, 1, 118, 124, 118, 6],
- [6, 1, 82, 1, 1, 15, 1, 118, 1, 1, 81, 1, 6],
- [6, 118, 0, 118, 120, 0, 1, 0, 118, 18, 18, 18, 6],
- [6, 1, 81, 1, 1, 0, 81, 0, 1, 1, 81, 1, 6],
- [6, 18, 0, 0, 1, 1, 81, 1, 1, 0, 120, 0, 6],
- [6, 1, 1, 118, 1, 118, 0, 118, 1, 81, 1, 81, 6],
- [6, 87, 120, 0, 82, 0, 1, 46, 1, 12, 1, 11, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 10F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 12, 1, 11, 1, 19, 1, 16, 1, 17, 1, 15, 6],
- [6, 12, 1, 11, 1, 19, 1, 16, 1, 17, 1, 15, 6],
- [6, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 6],
- [6, 119, 0, 119, 0, 119, 1, 124, 0, 124, 0, 124, 6],
- [6, 81, 1, 82, 1, 1, 1, 1, 1, 82, 1, 81, 6],
- [6, 18, 1, 0, 120, 145, 119, 145, 120, 0, 1, 18, 6],
- [6, 18, 1, 0, 1, 1, 1, 1, 1, 0, 1, 18, 6],
- [6, 1, 1, 145, 1, 120, 74, 120, 1, 145, 1, 1, 6],
- [6, 19, 120, 0, 1, 0, 145, 0, 1, 0, 120, 19, 6],
- [6, 1, 83, 1, 1, 15, 15, 15, 1, 1, 83, 1, 6],
- [6, 88, 0, 0, 120, 0, 145, 0, 120, 0, 0, 87, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 11F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6],
- [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6],
- [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6],
- [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6],
- [6, 1, 1, 1, 1, 1, 24, 1, 1, 1, 1, 1, 6],
- [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6],
- [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6],
- [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6],
- [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 87, 0, 145, 46, 145, 119, 145, 46, 145, 0, 88, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 12F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 19, 1, 1, 1, 1, 0, 0, 0, 0, 0, 87, 6],
- [6, 0, 1, 0, 0, 127, 0, 1, 1, 1, 1, 0, 6],
- [6, 0, 1, 0, 1, 1, 0, 1, 12, 12, 1, 0, 6],
- [6, 0, 1, 0, 43, 1, 0, 1, 12, 12, 1, 0, 6],
- [6, 119, 1, 1, 1, 1, 119, 1, 1, 1, 1, 119, 6],
- [6, 0, 0, 0, 0, 145, 0, 145, 0, 0, 0, 0, 6],
- [6, 126, 1, 1, 1, 1, 126, 1, 1, 1, 1, 126, 6],
- [6, 0, 1, 11, 11, 1, 0, 1, 47, 0, 141, 0, 6],
- [6, 0, 1, 11, 11, 1, 0, 1, 1, 1, 1, 0, 6],
- [6, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 6],
- [6, 88, 0, 0, 0, 0, 0, 1, 0, 0, 0, 19, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 13F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 87, 0, 126, 0, 0, 82, 0, 0, 126, 0, 88, 6],
- [6, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 6],
- [6, 126, 1, 1, 15, 1, 0, 1, 19, 1, 1, 126, 6],
- [6, 0, 1, 36, 15, 1, 0, 1, 19, 19, 1, 0, 6],
- [6, 127, 1, 15, 126, 1, 0, 1, 126, 19, 1, 127, 6],
- [6, 0, 1, 126, 127, 82, 128, 82, 127, 126, 1, 0, 6],
- [6, 127, 1, 12, 126, 1, 0, 1, 126, 11, 1, 127, 6],
- [6, 0, 1, 12, 12, 1, 0, 1, 11, 11, 1, 0, 6],
- [6, 127, 1, 1, 12, 1, 0, 1, 11, 1, 1, 127, 6],
- [6, 0, 0, 1, 1, 1, 83, 1, 1, 1, 0, 0, 6],
- [6, 0, 0, 128, 0, 128, 0, 128, 0, 128, 0, 0, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 14F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 1, 1, 18, 1, 1, 0, 0, 0, 6],
- [6, 0, 0, 0, 1, 18, 31, 18, 1, 0, 0, 0, 6],
- [6, 0, 0, 0, 1, 1, 18, 1, 1, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 1, 85, 1, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 141, 0, 141, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],
- [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 15F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 53, 6, 18, 1, 19, 1, 12, 12, 12, 1, 87, 6],
- [6, 0, 1, 131, 1, 126, 1, 12, 128, 12, 1, 0, 6],
- [6, 141, 82, 0, 1, 81, 1, 1, 81, 1, 1, 0, 6],
- [6, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6],
- [6, 19, 18, 1, 127, 1, 126, 1, 1, 0, 1, 0, 6],
- [6, 19, 18, 18, 1, 75, 0, 1, 52, 127, 83, 0, 6],
- [6, 19, 18, 1, 127, 1, 126, 1, 1, 0, 1, 0, 6],
- [6, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6],
- [6, 0, 82, 0, 1, 81, 1, 1, 81, 1, 1, 0, 6],
- [6, 43, 1, 131, 1, 126, 1, 11, 128, 11, 1, 0, 6],
- [6, 44, 6, 18, 1, 19, 1, 11, 11, 11, 1, 88, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 16F
- [4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [4, 4, 4, 4, 6, 0, 0, 0, 0, 0, 0, 88, 6],
- [4, 4, 4, 4, 6, 6, 0, 6, 6, 6, 6, 6, 6],
- [4, 4, 4, 4, 4, 6, 0, 6, 4, 4, 4, 4, 4],
- [4, 4, 4, 4, 4, 6, 0, 6, 4, 4, 4, 4, 4],
- [4, 4, 4, 4, 4, 6, 0, 6, 4, 4, 4, 4, 4],
- [4, 4, 4, 4, 4, 6, 108, 6, 4, 4, 4, 4, 4],
- [4, 4, 4, 4, 4, 6, 0, 6, 4, 4, 4, 4, 4],
- [4, 4, 4, 4, 4, 6, 87, 6, 4, 4, 4, 4, 4],
- [4, 4, 4, 4, 4, 6, 6, 6, 4, 4, 4, 4, 4],
- [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
- [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
- [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
- ],
- [ // 17F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 1, 131, 128, 0, 0, 0, 0, 0, 0, 0, 131, 6],
- [6, 1, 128, 1, 1, 1, 1, 1, 1, 1, 1, 0, 6],
- [6, 1, 0, 1, 131, 0, 0, 0, 0, 0, 0, 131, 6],
- [6, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 6],
- [6, 1, 0, 1, 0, 1, 131, 0, 0, 0, 131, 89, 6],
- [6, 1, 0, 1, 131, 0, 0, 1, 1, 1, 0, 1, 6],
- [6, 1, 0, 1, 1, 1, 1, 1, 131, 0, 131, 1, 6],
- [6, 1, 128, 1, 1, 1, 88, 1, 0, 1, 1, 1, 6],
- [6, 1, 131, 128, 0, 0, 0, 1, 131, 0, 0, 131, 6],
- [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 6],
- [6, 87, 84, 131, 0, 0, 0, 0, 0, 0, 0, 131, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 18F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 1, 1, 1, 126, 0, 87, 0, 131, 1, 1, 1, 6],
- [6, 1, 1, 1, 1, 19, 1, 19, 1, 1, 1, 1, 6],
- [6, 1, 1, 1, 126, 0, 19, 0, 131, 1, 1, 1, 6],
- [6, 126, 1, 126, 1, 128, 1, 128, 1, 131, 1, 131, 6],
- [6, 0, 15, 0, 128, 0, 0, 0, 128, 0, 15, 0, 6],
- [6, 15, 1, 15, 1, 0, 54, 0, 1, 15, 1, 15, 6],
- [6, 0, 15, 0, 128, 0, 0, 0, 128, 0, 15, 0, 6],
- [6, 131, 1, 131, 1, 128, 1, 128, 1, 127, 1, 127, 6],
- [6, 0, 0, 0, 131, 0, 17, 0, 127, 1, 1, 1, 6],
- [6, 0, 1, 0, 1, 17, 1, 17, 1, 1, 1, 1, 6],
- [6, 88, 0, 0, 131, 0, 17, 0, 127, 1, 1, 1, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 19F
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- [6, 128, 0, 12, 12, 0, 88, 0, 18, 18, 0, 141, 6],
- [6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6],
- [6, 19, 6, 4, 4, 4, 4, 4, 4, 4, 6, 11, 6],
- [6, 19, 6, 4, 4, 4, 4, 4, 4, 4, 6, 11, 6],
- [6, 0, 6, 4, 4, 4, 4, 4, 4, 4, 6, 0, 6],
- [6, 131, 6, 4, 4, 4, 4, 4, 4, 4, 6, 131, 6],
- [6, 0, 6, 4, 4, 4, 4, 4, 4, 4, 6, 0, 6],
- [6, 11, 6, 4, 4, 4, 4, 4, 4, 4, 6, 19, 6],
- [6, 11, 6, 4, 4, 4, 4, 4, 4, 4, 6, 19, 6],
- [6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6],
- [6, 141, 0, 18, 18, 0, 89, 0, 12, 12, 0, 128, 6],
- [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
- ],
- [ // 20F
- [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
- [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
- [4, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4],
- [4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4],
- [4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4],
- [4, 4, 6, 0, 0, 131, 131, 131, 0, 0, 6, 4, 4],
- [4, 4, 6, 0, 0, 131, 144, 131, 0, 0, 6, 4, 4],
- [4, 4, 6, 0, 0, 131, 131, 131, 0, 0, 6, 4, 4],
- [4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4],
- [4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 6, 4, 4],
- [4, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4],
- [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
- [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
- ],
-
- // 隐藏1层
- [
- [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
- [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
- [4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4],
- [4, 4, 2, 11, 2, 43, 0, 30, 2, 12, 2, 4, 4],
- [4, 4, 2, 11, 2, 2, 81, 2, 2, 12, 2, 4, 4],
- [4, 4, 2, 11, 81, 0, 0, 0, 81, 12, 2, 4, 4],
- [4, 4, 2, 11, 2, 0, 0, 0, 2, 12, 2, 4, 4],
- [4, 4, 2, 11, 2, 0, 142, 0, 2, 12, 2, 4, 4],
- [4, 4, 2, 2, 2, 2, 83, 2, 2, 2, 2, 4, 4],
- [4, 4, 2, 0, 0, 0, 0, 0, 0, 89, 2, 4, 4],
- [4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4],
- [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
- [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
- ]
- ]
-
- this.maps = [];
- for (var f = 0; f < map_txt.length; f++) {
- var floorId = 'MT' + f;
- var map = map_txt[f];
- var content = {};
- content['floorId'] = floorId;
- content['name'] = f;
- content['title'] = '主塔 ' + f + ' 层';
- if (f==21) { // 隐藏层
- content['name'] = '17';
- content['title'] = '隐藏层';
+maps.prototype.loadFloor = function (floorId, map, enables) {
+ var floor = core.floors[floorId];
+ var content = {};
+ content['floorId'] = floor.floorId;
+ content['name'] = floor.name;
+ content['title'] = floor.title;
+ content['canFlyTo'] = floor.canFlyTo;
+ content['firstArrive'] = floor.firstArrive;
+ if (!core.isset(map)) map=floor.map;
+ var blocks = [];
+ for (var i = 0; i < 13; i++) {
+ for (var j = 0; j < 13; j++) {
+ var block = this.getBlock(j, i, map[i][j]);
+ this.addEvent(block,j,i,floor.events[j+","+i])
+ if (core.isset(block.event)) blocks.push(block);
}
- content['canFlyTo'] = true;
- if (f==0 || f==14 || f==20 || f==21) content['canFlyTo'] = false;
- var blocks = [];
- for (var i = 0; i < 13; i++) {
- for (var j = 0; j < 13; j++) {
- var id = map[i][j];
- var block = this.getBlock(floorId, f, j, i, id);
- if (block!=null) blocks.push(block);
- }
- }
- content['blocks'] = blocks;
- this.maps[floorId] = content;
}
+ // 事件处理
+ content['blocks'] = blocks;
+ return content;
}
-maps.prototype.getBlock = function (floorId, f, x, y, id) {
+maps.prototype.getBlock = function (x, y, id) {
+ var enable=null;
+ id = ""+id;
+ if (id.length>2) {
+ if (id.indexOf(":f")==id.length-2) {
+ id = id.substring(0, id.length - 2);
+ enable = false;
+ }
+ else if (id.indexOf(":t")==id.length-2) {
+ id = id.substring(0, id.length - 2);
+ enable = true;
+ }
+ }
var tmp = {'x': x, 'y': y, 'id': id};
+ if (enable!=null) tmp.enable = enable;
- // 16F的事件处理
- if (id == 0) {
- if (floorId=="MT16" && x==6 && y==2) {
- tmp.event = {'cls': 'terrains', 'id': 'ground', 'noPass': false, 'trigger': 'blockEvent'};
- }
- }
// 0-9 地形
if (id == 1) tmp.event = {'cls': 'terrains', 'id': 'yellowWall'}; // 黄墙
- if (id == 2) tmp.event = {'cls': 'terrains', 'id': 'blueWall'}; // 蓝墙
- if (id == 3) tmp.event = {'cls': 'animates', 'id': 'lava', 'animate': 4, 'noPass': true}; // 岩浆
- if (id == 4) tmp.event = {'cls': 'animates', 'id': 'star', 'animate': 4, 'noPass': true}; // 星空
- // if (id==5) tmp.fg = {'cls': 'animates', 'id': 'star', 'animate': 4, 'noPass': true}; // 栅栏
- if (id == 6) tmp.event = {'cls': 'terrains', 'id': 'whiteWall'}; // 白墙
- if (id == 7) tmp.event = {'cls': 'animates', 'id': 'lavaNet', 'animate': 4, 'noPass': false, 'trigger': 'passNet'};
-
- // 11-50 物品
- if (id == 11) tmp.event = {'cls': 'items', 'id': 'redJewel', 'trigger': 'getItem'}; // 红宝石
- if (id == 12) tmp.event = {'cls': 'items', 'id': 'blueJewel', 'trigger': 'getItem'}; // 蓝宝石
- if (id == 13) tmp.event = {'cls': 'items', 'id': 'greenJewel', 'trigger': 'getItem'}; // 绿宝石
- if (id == 14) tmp.event = {'cls': 'items', 'id': 'yellowJewel', 'trigger': 'getItem'}; // 黄宝石
- if (id == 15) tmp.event = {'cls': 'items', 'id': 'yellowKey', 'trigger': 'getItem'}; // 黄钥匙
- if (id == 16) tmp.event = {'cls': 'items', 'id': 'blueKey', 'trigger': 'getItem'}; // 蓝钥匙
- if (id == 17) tmp.event = {'cls': 'items', 'id': 'redKey', 'trigger': 'getItem'}; // 红钥匙
- if (id == 18) tmp.event = {'cls': 'items', 'id': 'redPotion', 'trigger': 'getItem'}; // 红血瓶
- if (id == 19) tmp.event = {'cls': 'items', 'id': 'bluePotion', 'trigger': 'getItem'}; // 蓝血瓶
- if (id == 20) tmp.event = {'cls': 'items', 'id': 'yellowPotion', 'trigger': 'getItem'}; // 黄血瓶
- if (id == 21) tmp.event = {'cls': 'items', 'id': 'greenPotion', 'trigger': 'getItem'}; // 绿血瓶
- if (id == 22) tmp.event = {'cls': 'items', 'id': 'sword1', 'trigger': 'getItem'}; // 铁剑
- if (id == 23) tmp.event = {'cls': 'items', 'id': 'shield1', 'trigger': 'getItem'}; // 铁盾
- if (id == 24) tmp.event = {'cls': 'items', 'id': 'sword2', 'trigger': 'getItem'}; // 银剑
- if (id == 25) tmp.event = {'cls': 'items', 'id': 'shield2', 'trigger': 'getItem'}; // 银盾
- if (id == 26) tmp.event = {'cls': 'items', 'id': 'sword3', 'trigger': 'getItem'}; // 骑士剑
- if (id == 27) tmp.event = {'cls': 'items', 'id': 'shield3', 'trigger': 'getItem'}; // 骑士盾
- if (id == 28) tmp.event = {'cls': 'items', 'id': 'sword4', 'trigger': 'getItem'}; // 圣剑
- if (id == 29) tmp.event = {'cls': 'items', 'id': 'shield4', 'trigger': 'getItem'}; // 圣盾
- if (id == 30) tmp.event = {'cls': 'items', 'id': 'sword5', 'trigger': 'getItem'}; // 神圣剑
- if (id == 31) tmp.event = {'cls': 'items', 'id': 'shield5', 'trigger': 'getItem'}; // 神圣盾
- if (id == 32) tmp.event = {'cls': 'items', 'id': 'book', 'trigger': 'getItem'}; // 怪物手册
- if (id == 33) tmp.event = {'cls': 'items', 'id': 'fly', 'trigger': 'getItem'}; // 楼层传送器
- if (id == 34) tmp.event = {'cls': 'items', 'id': 'pickaxe', 'trigger': 'getItem'}; // 破墙镐
- if (id == 35) tmp.event = {'cls': 'items', 'id': 'bomb', 'trigger': 'getItem'}; // 炸弹
- if (id == 36) tmp.event = {'cls': 'items', 'id': 'centerFly', 'trigger': 'getItem'}; // 中心对称
- if (id == 37) tmp.event = {'cls': 'items', 'id': 'upFly', 'trigger': 'getItem'}; // 上楼器
- if (id == 38) tmp.event = {'cls': 'items', 'id': 'downFly', 'trigger': 'getItem'}; // 下楼器
- if (id == 39) tmp.event = {'cls': 'items', 'id': 'icePickaxe', 'trigger': 'getItem'}; // 破冰镐
- if (id == 40) tmp.event = {'cls': 'items', 'id': 'coin', 'trigger': 'getItem'}; // 幸运金币
- if (id == 41) tmp.event = {'cls': 'items', 'id': 'snow', 'trigger': 'getItem'}; // 冰冻徽章
- if (id == 42) tmp.event = {'cls': 'items', 'id': 'cross', 'trigger': 'getItem'}; // 十字架
- if (id == 43) tmp.event = {'cls': 'items', 'id': 'superPotion', 'trigger': 'getItem'}; // 圣水
- if (id == 44) tmp.event = {'cls': 'items', 'id': 'greenKey', 'trigger': 'getItem'}; // 绿钥匙
- if (id == 45) tmp.event = {'cls': 'items', 'id': 'steelKey', 'trigger': 'getItem'}; // 铁门钥匙
- if (id == 46) tmp.event = {'cls': 'items', 'id': 'bigKey', 'trigger': 'getItem'}; // 钥匙盒/大黄门钥匙
- if (id == 47) tmp.event = {'cls': 'items', 'id': 'earthquake', 'trigger': 'getItem'} // 地震卷轴
-
- // 51-80 NPC
- if (id == 51) tmp.event = {'cls': 'npcs', 'id': 'magician', 'trigger': 'visitNpc', 'npcid': 'npc1'};
- if (id == 52) tmp.event = {'cls': 'npcs', 'id': 'magician', 'trigger': 'visitNpc', 'npcid': 'npc2'};
- if (id == 53) tmp.event = {'cls': 'npcs', 'id': 'womanMagician', 'trigger': 'visitNpc', 'npcid': 'npc3'};
- if (id == 54) tmp.event = {'cls': 'npcs', 'id': 'womanMagician', 'trigger': 'visitNpc', 'npcid': 'npc4'};
-
- // 商店
- if (id == 71) tmp.event = {'cls': 'npcs', 'id': 'blueShop', 'trigger': 'openShop', 'shopid': 'shop1'};
- if (id == 72) tmp.event = {'cls': 'npcs', 'id': 'redShop', 'trigger': 'openShop', 'shopid': 'shop2'};
- if (id == 73) tmp.event = {'cls': 'npcs', 'id': 'womanMagician', 'trigger': 'openShop', 'shopid': 'shop3'};
- if (id == 74) tmp.event = {'cls': 'npcs', 'id': 'blueShop', 'trigger': 'openShop', 'shopid': 'shop4'};
- if (id == 75) tmp.event = {'cls': 'npcs', 'id': 'redShop', 'trigger': 'openShop', 'shopid': 'shop5'};
+ if (id == 2) tmp.event = {'cls': 'terrains', 'id': 'whiteWall'}; // 白墙
+ if (id == 3) tmp.event = {'cls': 'terrains', 'id': 'blueWall'}; // 白墙
+ if (id == 4) tmp.event = {'cls': 'animates', 'id': 'star', 'noPass': true}; // 星空
+ if (id == 5) tmp.event = {'cls': 'animates', 'id': 'lava', 'noPass': true}; // 岩浆
+ if (id == 6) tmp.event = {'cls': 'terrains', 'id': 'ice'}; // 岩浆
+ if (id == 7) tmp.event = {'cls': 'terrains', 'id': 'blueShop-left'}; // 蓝色商店左
+ if (id == 8) tmp.event = {'cls': 'terrains', 'id': 'blueShop-right'}; // 蓝色商店右
+ if (id == 9) tmp.event = {'cls': 'terrains', 'id': 'pinkShop-left'}; // 粉色商店左
+ if (id == 10) tmp.event = {'cls': 'terrains', 'id': 'pinkShop-right'}; // 粉色商店左
+ if (id == 11) tmp.event = {'cls': 'animates', 'id': 'lavaNet', 'noPass': false, 'trigger': 'passNet'}; // 血网
+ if (id == 12) tmp.event = {'cls': 'animates', 'id': 'poisonNet', 'noPass': false, 'trigger': 'passNet'}; // 毒网
+ if (id == 13) tmp.event = {'cls': 'animates', 'id': 'weakNet', 'noPass': false, 'trigger': 'passNet'}; // 衰网
+ if (id == 14) tmp.event = {'cls': 'animates', 'id': 'curseNet', 'noPass': false, 'trigger': 'passNet'}; // 咒网
+ // 21-80 物品
+ if (id == 21) tmp.event = {'cls': 'items', 'id': 'yellowKey'}; // 黄钥匙
+ if (id == 22) tmp.event = {'cls': 'items', 'id': 'blueKey'}; // 蓝钥匙
+ if (id == 23) tmp.event = {'cls': 'items', 'id': 'redKey'}; // 红钥匙
+ if (id == 24) tmp.event = {'cls': 'items', 'id': 'greenKey'}; // 绿钥匙
+ if (id == 25) tmp.event = {'cls': 'items', 'id': 'steelKey'}; // 铁门钥匙
+ if (id == 26) tmp.event = {'cls': 'items', 'id': 'bigKey'}; // 大黄门钥匙(钥匙盒)
+ if (id == 27) tmp.event = {'cls': 'items', 'id': 'redJewel'}; // 红宝石
+ if (id == 28) tmp.event = {'cls': 'items', 'id': 'blueJewel'}; // 蓝宝石
+ if (id == 29) tmp.event = {'cls': 'items', 'id': 'greenJewel'}; // 绿宝石
+ if (id == 30) tmp.event = {'cls': 'items', 'id': 'yellowJewel'}; // 黄宝石
+ if (id == 31) tmp.event = {'cls': 'items', 'id': 'redPotion'}; // 红血瓶
+ if (id == 32) tmp.event = {'cls': 'items', 'id': 'bluePotion'}; // 蓝血瓶
+ if (id == 33) tmp.event = {'cls': 'items', 'id': 'greenPotion'}; // 绿血瓶
+ if (id == 34) tmp.event = {'cls': 'items', 'id': 'yellowPotion'}; // 黄血瓶
+ if (id == 35) tmp.event = {'cls': 'items', 'id': 'sword1'}; // 铁剑
+ if (id == 36) tmp.event = {'cls': 'items', 'id': 'shield1'}; // 铁盾
+ if (id == 37) tmp.event = {'cls': 'items', 'id': 'sword2'}; // 银剑
+ if (id == 38) tmp.event = {'cls': 'items', 'id': 'shield2'}; // 银盾
+ if (id == 39) tmp.event = {'cls': 'items', 'id': 'sword3'}; // 骑士剑
+ if (id == 40) tmp.event = {'cls': 'items', 'id': 'shield3'}; // 骑士盾
+ if (id == 41) tmp.event = {'cls': 'items', 'id': 'sword4'}; // 圣剑
+ if (id == 42) tmp.event = {'cls': 'items', 'id': 'shield4'}; // 圣盾
+ if (id == 43) tmp.event = {'cls': 'items', 'id': 'sword5'}; // 神圣剑
+ if (id == 44) tmp.event = {'cls': 'items', 'id': 'shield5'}; // 神圣盾
+ if (id == 45) tmp.event = {'cls': 'items', 'id': 'book'}; // 怪物手册
+ if (id == 46) tmp.event = {'cls': 'items', 'id': 'fly'}; // 楼层传送器
+ if (id == 47) tmp.event = {'cls': 'items', 'id': 'pickaxe'}; // 破墙镐
+ if (id == 48) tmp.event = {'cls': 'items', 'id': 'icePickaxe'}; // 破冰镐
+ if (id == 49) tmp.event = {'cls': 'items', 'id': 'bomb'}; // 炸弹
+ if (id == 50) tmp.event = {'cls': 'items', 'id': 'centerFly'}; // 中心对称
+ if (id == 51) tmp.event = {'cls': 'items', 'id': 'upFly'}; // 上楼器
+ if (id == 52) tmp.event = {'cls': 'items', 'id': 'downFly'}; // 下楼器
+ if (id == 53) tmp.event = {'cls': 'items', 'id': 'coin'}; // 幸运金币
+ if (id == 54) tmp.event = {'cls': 'items', 'id': 'snow'}; // 冰冻徽章
+ if (id == 55) tmp.event = {'cls': 'items', 'id': 'cross'}; // 十字架
+ if (id == 56) tmp.event = {'cls': 'items', 'id': 'superPotion'}; // 圣水
+ if (id == 57) tmp.event = {'cls': 'items', 'id': 'earthquake'} // 地震卷轴
+ if (id == 58) tmp.event = {'cls': 'items', 'id': 'poisonWine'} // 解毒药水
+ if (id == 59) tmp.event = {'cls': 'items', 'id': 'weakWine'} // 解衰药水
+ if (id == 60) tmp.event = {'cls': 'items', 'id': 'curseWine'} // 解咒药水
+ if (id == 61) tmp.event = {'cls': 'items', 'id': 'superWine'} // 万能药水
+ if (id == 62) tmp.event = {'cls': 'items', 'id': 'knife'} // 屠龙匕首
+ if (id == 63) tmp.event = {'cls': 'items', 'id': 'moneyPocket'} // 金钱袋
+ if (id == 64) tmp.event = {'cls': 'items', 'id': 'shoes'} // 绿鞋
+ if (id == 65) tmp.event = {'cls': 'items', 'id': 'hammer'} // 圣锤
// 81-100 门
- if (id == 81) tmp.event = {'cls': 'terrains', 'id': 'yellowDoor', 'trigger': 'openDoor'};
- if (id == 82) tmp.event = {'cls': 'terrains', 'id': 'blueDoor', 'trigger': 'openDoor'};
- if (id == 83) tmp.event = {'cls': 'terrains', 'id': 'redDoor', 'trigger': 'openDoor'};
- if (id == 84) tmp.event = {'cls': 'terrains', 'id': 'greenDoor', 'trigger': 'openDoor'};
- if (id == 85) tmp.event = {'cls': 'terrains', 'id': 'specialDoor', 'trigger': 'openDoor'}; // 商店左
- if (id == 86) tmp.event = {'cls': 'terrains', 'id': 'steelDoor', 'trigger': 'openDoor'}; // 商店左
- if (id == 87) {
- var toFloor = f+1;
- if (f==13) toFloor = 15;
- tmp.event = {
- 'cls': 'terrains', 'id': 'upFloor', 'trigger': 'changeFloor', 'noPass': false,
- 'data': {'floorId': 'MT' + toFloor, 'stair': 'downFloor'}, 'noTriggerCross': true
- };
- }
- if (id == 88) {
- var toFloor = f-1;
- if (f==15) toFloor = 13;
- tmp.event = {
- 'cls': 'terrains', 'id': 'downFloor', 'trigger': 'changeFloor', 'noPass': false,
- 'data': {'floorId': 'MT' + toFloor, 'stair': 'upFloor'}, 'noTriggerCross': true
- };
- }
- // 传送门
- if (id==89) {
- var toFloor = 0, toX = 0, toY = 0;
- if (floorId == "MT17") {toFloor = 21; toX = 9; toY = 9;}
- else if (floorId == "MT21") {toFloor = 17; toX = 11; toY = 5;}
- else if (floorId == "MT19") {toFloor = 20; toX = 6; toY = 9;}
- tmp.event = {
- 'cls': 'animates', 'id': 'portal', 'trigger': 'changeFloor', 'noPass': false, 'animate': 4,
- 'data': {'floorId': 'MT' + toFloor, 'heroLoc': {'direction': 'up', 'x': toX, 'y': toY}}
- }
- }
+ if (id == 81) tmp.event = {'cls': 'terrains', 'id': 'yellowDoor', 'trigger': 'openDoor'}; // 黄门
+ if (id == 82) tmp.event = {'cls': 'terrains', 'id': 'blueDoor', 'trigger': 'openDoor'}; // 蓝门
+ if (id == 83) tmp.event = {'cls': 'terrains', 'id': 'redDoor', 'trigger': 'openDoor'}; // 红门
+ if (id == 84) tmp.event = {'cls': 'terrains', 'id': 'greenDoor', 'trigger': 'openDoor'}; // 绿门
+ if (id == 85) tmp.event = {'cls': 'terrains', 'id': 'specialDoor', 'trigger': 'openDoor'}; // 机关门左
+ if (id == 86) tmp.event = {'cls': 'terrains', 'id': 'steelDoor', 'trigger': 'openDoor'}; // 铁门
+ if (id == 87) tmp.event = {'cls': 'terrains', 'id': 'upFloor', 'noPass': false}; // 上楼梯
+ if (id == 88) tmp.event = {'cls': 'terrains', 'id': 'downFloor', 'noPass': false}; // 下楼梯
+ if (id == 89) tmp.event = {'cls': 'animates', 'id': 'portal', 'noPass': false}; // 传送门
+ if (id == 90) tmp.event = {'cls': 'animates', 'id': 'starPortal', 'noPass': false}; // 星空传送门
+ if (id == 91) tmp.event = {'cls': 'animates', 'id': 'upPortal', 'noPass': false}; // 上箭头
+ if (id == 92) tmp.event = {'cls': 'animates', 'id': 'leftPortal', 'noPass': false}; // 左箭头
+ if (id == 93) tmp.event = {'cls': 'animates', 'id': 'downPortal', 'noPass': false}; // 下箭头
+ if (id == 94) tmp.event = {'cls': 'animates', 'id': 'rightPortal', 'noPass': false}; // 右箭头
- // 101-200 怪物
- if (id == 101) tmp.event = {'cls': 'enemys', 'id': 'greenSlime', 'trigger': 'battle'};
- if (id == 102) tmp.event = {'cls': 'enemys', 'id': 'redSlime', 'trigger': 'battle'};
- if (id == 103) tmp.event = {'cls': 'enemys', 'id': 'blackSlime', 'trigger': 'battle'};
- if (id == 104) tmp.event = {'cls': 'enemys', 'id': 'slimelord', 'trigger': 'battle'};
- if (id == 105) tmp.event = {'cls': 'enemys', 'id': 'bat', 'trigger': 'battle'};
- if (id == 106) tmp.event = {'cls': 'enemys', 'id': 'bigBat', 'trigger': 'battle'};
- if (id == 107) tmp.event = {'cls': 'enemys', 'id': 'redBat', 'trigger': 'battle'};
- if (id == 108) tmp.event = {'cls': 'enemys', 'id': 'vampire', 'trigger': 'battle'};
- if (id == 109) tmp.event = {'cls': 'enemys', 'id': 'bluePriest', 'trigger': 'battle'};
- if (id == 110) tmp.event = {'cls': 'enemys', 'id': 'redPriest', 'trigger': 'battle'};
- if (id == 111) tmp.event = {'cls': 'enemys', 'id': 'brownWizard', 'trigger': 'battle'};
- if (id == 112) tmp.event = {'cls': 'enemys', 'id': 'redWizard', 'trigger': 'battle'};
- if (id == 113) tmp.event = {'cls': 'enemys', 'id': 'skeleton', 'trigger': 'battle'};
- if (id == 114) tmp.event = {'cls': 'enemys', 'id': 'skeletonSoilder', 'trigger': 'battle'};
- if (id == 115) tmp.event = {'cls': 'enemys', 'id': 'skeletonCaptain', 'trigger': 'battle'};
- if (id == 116) tmp.event = {'cls': 'enemys', 'id': 'ghostSkeleton', 'trigger': 'battle'};
- if (id == 117) tmp.event = {'cls': 'enemys', 'id': 'zombie', 'trigger': 'battle'};
- if (id == 118) tmp.event = {'cls': 'enemys', 'id': 'zombieKnight', 'trigger': 'battle'};
- if (id == 119) tmp.event = {'cls': 'enemys', 'id': 'rock', 'trigger': 'battle'};
- if (id == 120) tmp.event = {'cls': 'enemys', 'id': 'slimeMan', 'trigger': 'battle'};
- if (id == 121) tmp.event = {'cls': 'enemys', 'id': 'yellowGuard', 'trigger': 'battle'};
- if (id == 122) tmp.event = {'cls': 'enemys', 'id': 'blueGuard', 'trigger': 'battle'};
- if (id == 123) tmp.event = {'cls': 'enemys', 'id': 'redGuard', 'trigger': 'battle'};
- if (id == 124) tmp.event = {'cls': 'enemys', 'id': 'swordsman', 'trigger': 'battle'};
- if (id == 125) tmp.event = {'cls': 'enemys', 'id': 'soldier', 'trigger': 'battle'};
- if (id == 126) tmp.event = {'cls': 'enemys', 'id': 'yellowKnight', 'trigger': 'battle'};
- if (id == 127) tmp.event = {'cls': 'enemys', 'id': 'redKnight', 'trigger': 'battle'};
- if (id == 128) tmp.event = {'cls': 'enemys', 'id': 'darkKnight', 'trigger': 'battle'};
- if (id == 129) tmp.event = {'cls': 'enemys', 'id': 'redKing', 'trigger': 'battle'};
- if (id == 130) tmp.event = {'cls': 'enemys', 'id': 'whiteKing', 'trigger': 'battle'};
- if (id == 131) tmp.event = {'cls': 'enemys', 'id': 'blackMagician', 'trigger': 'battle'};
- if (id == 132) tmp.event = {'cls': 'enemys', 'id': 'silverSlime', 'trigger': 'battle'};
- if (id == 133) tmp.event = {'cls': 'enemys', 'id': 'poisonSkeleton', 'trigger': 'battle'};
- if (id == 134) tmp.event = {'cls': 'enemys', 'id': 'poisonBat', 'trigger': 'battle'};
- if (id == 135) tmp.event = {'cls': 'enemys', 'id': 'steelRock', 'trigger': 'battle'};
- if (id == 136) tmp.event = {'cls': 'enemys', 'id': 'poisonZombie', 'trigger': 'battle'};
- if (id == 137) tmp.event = {'cls': 'enemys', 'id': 'blackKing', 'trigger': 'battle'};
- if (id == 138) tmp.event = {'cls': 'enemys', 'id': 'yellowKing', 'trigger': 'battle'};
- if (id == 139) tmp.event = {'cls': 'enemys', 'id': 'greenKing', 'trigger': 'battle'};
- if (id == 140) tmp.event = {'cls': 'enemys', 'id': 'blueKnight', 'trigger': 'battle'};
- if (id == 141) tmp.event = {'cls': 'enemys', 'id': 'greenKnight', 'trigger': 'battle'};
- if (id == 142) tmp.event = {'cls': 'enemys', 'id': 'magicDragon', 'trigger': 'battle'};
- if (id == 143) tmp.event = {'cls': 'enemys', 'id': 'octopus', 'trigger': 'battle'};
- if (id == 144) tmp.event = {'cls': 'enemys', 'id': 'fairy', 'trigger': 'battle'};
- if (id == 145) tmp.event = {'cls': 'enemys', 'id': 'whiteGhost', 'trigger': 'battle'};
- if (id == 146) tmp.event = {'cls': 'enemys', 'id': 'blueKnight', 'trigger': 'battle'};
- if (id == 147) tmp.event = {'cls': 'enemys', 'id': 'blueKnight', 'trigger': 'battle'};
- if (id == 148) tmp.event = {'cls': 'enemys', 'id': 'blueKnight', 'trigger': 'battle'};
- if (id == 149) tmp.event = {'cls': 'enemys', 'id': 'blueKnight', 'trigger': 'battle'};
- if (id == 150) tmp.event = {'cls': 'enemys', 'id': 'blueKnight', 'trigger': 'battle'};
- if (id == 151) tmp.event = {'cls': 'enemys', 'id': 'blueKnight', 'trigger': 'battle'};
- if (id == 152) tmp.event = {'cls': 'enemys', 'id': 'blueKnight', 'trigger': 'battle'};
- if (id == 153) tmp.event = {'cls': 'enemys', 'id': 'blueKnight', 'trigger': 'battle'};
- if (id == 154) tmp.event = {'cls': 'enemys', 'id': 'blueKnight', 'trigger': 'battle'};
+ // 121-150 NPC
+ if (id == 121) tmp.event = {'cls': 'npcs', 'id': 'man'};
+ if (id == 122) tmp.event = {'cls': 'npcs', 'id': 'woman'};
+ if (id == 123) tmp.event = {'cls': 'npcs', 'id': 'thief'};
+ if (id == 124) tmp.event = {'cls': 'npcs', 'id': 'fairy'};
+ if (id == 125) tmp.event = {'cls': 'npcs', 'id': 'magician'};
+ if (id == 126) tmp.event = {'cls': 'npcs', 'id': 'womanMagician'};
+ if (id == 127) tmp.event = {'cls': 'npcs', 'id': 'oldMan'};
+ if (id == 128) tmp.event = {'cls': 'npcs', 'id': 'child'};
+ if (id == 129) tmp.event = {'cls': 'npcs', 'id': 'wood'};
+ if (id == 130) tmp.event = {'cls': 'npcs', 'id': 'pinkShop'};
+ if (id == 131) tmp.event = {'cls': 'npcs', 'id': 'blueShop'};
+ if (id == 132) tmp.event = {'cls': 'npcs', 'id': 'princess'};
- // 200+ 特殊
- if (tmp.event == undefined) return null;
+ // 201-300 怪物
+ if (id == 201) tmp.event = {'cls': 'enemys', 'id': 'greenSlime'};
+ if (id == 202) tmp.event = {'cls': 'enemys', 'id': 'redSlime'};
+ if (id == 203) tmp.event = {'cls': 'enemys', 'id': 'blackSlime'};
+ if (id == 204) tmp.event = {'cls': 'enemys', 'id': 'slimelord'};
+ if (id == 205) tmp.event = {'cls': 'enemys', 'id': 'bat'};
+ if (id == 206) tmp.event = {'cls': 'enemys', 'id': 'bigBat'};
+ if (id == 207) tmp.event = {'cls': 'enemys', 'id': 'redBat'};
+ if (id == 208) tmp.event = {'cls': 'enemys', 'id': 'vampire'};
+ if (id == 209) tmp.event = {'cls': 'enemys', 'id': 'skeleton'};
+ if (id == 210) tmp.event = {'cls': 'enemys', 'id': 'skeletonSoilder'};
+ if (id == 211) tmp.event = {'cls': 'enemys', 'id': 'skeletonCaptain'};
+ if (id == 212) tmp.event = {'cls': 'enemys', 'id': 'ghostSkeleton'};
+ if (id == 213) tmp.event = {'cls': 'enemys', 'id': 'zombie'};
+ if (id == 214) tmp.event = {'cls': 'enemys', 'id': 'zombieKnight'};
+ if (id == 215) tmp.event = {'cls': 'enemys', 'id': 'rock'};
+ if (id == 216) tmp.event = {'cls': 'enemys', 'id': 'slimeMan'};
+ if (id == 217) tmp.event = {'cls': 'enemys', 'id': 'bluePriest'};
+ if (id == 218) tmp.event = {'cls': 'enemys', 'id': 'redPriest'};
+ if (id == 219) tmp.event = {'cls': 'enemys', 'id': 'brownWizard'};
+ if (id == 220) tmp.event = {'cls': 'enemys', 'id': 'redWizard'};
+ if (id == 221) tmp.event = {'cls': 'enemys', 'id': 'yellowGuard'};
+ if (id == 222) tmp.event = {'cls': 'enemys', 'id': 'blueGuard'};
+ if (id == 223) tmp.event = {'cls': 'enemys', 'id': 'redGuard'};
+ if (id == 224) tmp.event = {'cls': 'enemys', 'id': 'swordsman'};
+ if (id == 225) tmp.event = {'cls': 'enemys', 'id': 'soldier'};
+ if (id == 226) tmp.event = {'cls': 'enemys', 'id': 'yellowKnight'};
+ if (id == 227) tmp.event = {'cls': 'enemys', 'id': 'redKnight'};
+ if (id == 228) tmp.event = {'cls': 'enemys', 'id': 'darkKnight'};
+ if (id == 229) tmp.event = {'cls': 'enemys', 'id': 'blackKing'};
+ if (id == 230) tmp.event = {'cls': 'enemys', 'id': 'yellowKing'};
+ if (id == 231) tmp.event = {'cls': 'enemys', 'id': 'greenKing'};
+ if (id == 232) tmp.event = {'cls': 'enemys', 'id': 'blueKnight'};
+ if (id == 233) tmp.event = {'cls': 'enemys', 'id': 'goldSlime'};
+ if (id == 234) tmp.event = {'cls': 'enemys', 'id': 'poisonSkeleton'};
+ if (id == 235) tmp.event = {'cls': 'enemys', 'id': 'poisonBat'};
+ if (id == 236) tmp.event = {'cls': 'enemys', 'id': 'steelRock'};
+ if (id == 237) tmp.event = {'cls': 'enemys', 'id': 'skeletonPriest'};
+ if (id == 238) tmp.event = {'cls': 'enemys', 'id': 'skeletonKing'};
+ if (id == 239) tmp.event = {'cls': 'enemys', 'id': 'skeletonWizard'};
+ if (id == 240) tmp.event = {'cls': 'enemys', 'id': 'redSkeletonCaption'};
+ if (id == 241) tmp.event = {'cls': 'enemys', 'id': 'badHero'};
+ if (id == 242) tmp.event = {'cls': 'enemys', 'id': 'demon'};
+ if (id == 243) tmp.event = {'cls': 'enemys', 'id': 'demonPriest'};
+ if (id == 244) tmp.event = {'cls': 'enemys', 'id': 'goldHornSlime'};
+ if (id == 245) tmp.event = {'cls': 'enemys', 'id': 'redKing'};
+ if (id == 246) tmp.event = {'cls': 'enemys', 'id': 'whiteKing'};
+ if (id == 247) tmp.event = {'cls': 'enemys', 'id': 'blackMagician'};
+ if (id == 248) tmp.event = {'cls': 'enemys', 'id': 'silverSlime'};
+ if (id == 249) tmp.event = {'cls': 'enemys', 'id': 'swordEmperor'};
+ if (id == 250) tmp.event = {'cls': 'enemys', 'id': 'whiteHornSlime'};
+ if (id == 251) tmp.event = {'cls': 'enemys', 'id': 'badPrincess'};
+ if (id == 252) tmp.event = {'cls': 'enemys', 'id': 'badFairy'};
+ if (id == 253) tmp.event = {'cls': 'enemys', 'id': 'grayPriest'};
+ if (id == 254) tmp.event = {'cls': 'enemys', 'id': 'redSwordsman'};
+ if (id == 255) tmp.event = {'cls': 'enemys', 'id': 'whiteGhost'};
+ if (id == 256) tmp.event = {'cls': 'enemys', 'id': 'poisonZombie'};
+ if (id == 257) tmp.event = {'cls': 'enemys', 'id': 'magicDragon'};
+ if (id == 258) tmp.event = {'cls': 'enemys', 'id': 'octopus'};
+ if (id == 259) tmp.event = {'cls': 'enemys', 'id': 'fairy'};
+ if (id == 260) tmp.event = {'cls': 'enemys', 'id': 'greenKnight'};
+
return tmp;
}
-maps.prototype.getMaps = function (mapName) {
- if (mapName == undefined) {
- return this.updateNoPass(this.maps);
+maps.prototype.addEvent = function (block, x, y, event) {
+ if (!core.isset(event)) return;
+ if (!core.isset(block.event)) { // 本身是空地?
+ block.event = {'cls': 'terrains', 'id': 'ground', 'noPass': false};
}
- return this.maps[mapName];
+ // event是字符串或数组?
+ if (typeof event == "string") {
+ event = {"data": [event]};
+ }
+ else if (event instanceof Array) {
+ event = {"data": event};
+ }
+
+ // 覆盖enable
+ if (!core.isset(block.event.enable) && core.isset(event.enable)) {
+ block.enable=event.enable;
+ }
+ // 覆盖trigger
+ if (!core.isset(block.event.trigger)) {
+ if (core.isset(event.trigger)) block.event.trigger=event.trigger;
+ else block.event.trigger='action';
+ }
+ // 覆盖data
+ block.event.data = event.data;
}
-maps.prototype.updateNoPass = function (maps) {
+maps.prototype.initMaps = function (floorIds) {
+ var maps = {};
+ for (var i=0;i=0) {
+ var str=content.substring(2, index);
+ content=content.substring(index+1);
+ var ss=str.split(",");
+ if (ss.length==1) {
+ // id
+ id=ss[0];
+ // monster
+ if (id!='hero') {
+ var enemys = core.material.enemys[id];
+ if (core.isset(enemys)) {
+ name = core.material.enemys[id].name;
+ image = core.material.images.enemys;
+ icon = core.material.icons.enemys[id];
+ }
+ else {
+ name=id;
+ id='npc';
+ image=null;
+ icon=null;
+ }
+ }
+ }
+ else {
+ id='npc';
+ name=ss[0];
+ image=core.material.images.npcs;
+ icon=core.material.icons.npcs[ss[1]];
+ }
+ }
+ }
var background = core.canvas.ui.createPattern(core.material.ground, "repeat");
var contents = content.split('\n');
@@ -54,6 +85,8 @@ ui.prototype.drawTextBox = function(content, id) {
core.fillRect('ui', left, top, right, bottom, '#000000');
core.setAlpha('ui', 1);
core.strokeRect('ui', left - 1, top - 1, right + 1, bottom + 1, '#FFFFFF', 2);
+ core.status.boxAnimateObjs = [];
+ core.setBoxAnimate();
// 名称
core.canvas.ui.textAlign = "left";
@@ -61,42 +94,30 @@ ui.prototype.drawTextBox = function(content, id) {
var content_left = left + 25, content_top = top + 35;
if (core.isset(id)) {
- content_left = left+63;
content_top = top+57;
- var name, image, cls;
// 动画
- core.strokeRect('ui', left + 15 - 1, top + 40 - 1, 34, 34, '#FFD700', 2);
+ if (id=='hero' || core.isset(icon)) {
+ core.strokeRect('ui', left + 15 - 1, top + 40 - 1, 34, 34, '#FFD700', 2);
+ content_left = left+63;
+ }
if (id == 'hero') {
- core.fillText('ui', core.status.hero.name, left + 63, top + 30, '#FFD700', 'bold 22px Verdana');
- core.status.boxAnimateObjs = [];
- core.setBoxAnimate(core.firstData.animateSpeed);
+ core.fillText('ui', core.status.hero.name, content_left, top + 30, '#FFD700', 'bold 22px Verdana');
core.clearMap('ui', left + 15, top + 40, 32, 32);
core.fillRect('ui', left + 15, top + 40, 32, 32, background);
var heroIcon = core.material.icons.heros[core.status.hero.id]['down'];
- core.canvas.ui.drawImage(core.material.images.heros, heroIcon.loc['stop'] * heroIcon.size, heroIcon.loc.iconLoc * heroIcon.size, heroIcon.size, heroIcon.size, left+15, top+40, 32, 32);
+ core.canvas.ui.drawImage(core.material.images.heros, heroIcon.stop * 32, heroIcon.loc *32, 32, 32, left+15, top+40, 32, 32);
}
else {
- var name = null, image = null, icon = null;
- if (core.material.npcs.hasOwnProperty(id)) {
- name = core.material.npcs[id].name;
- image = core.material.images.npcs;
- icon = core.material.icons.npcs[core.material.npcs[id].icon];
- }
- else if (core.material.enemys.hasOwnProperty(id)) {
- name = core.material.enemys[id].name;
- image = core.material.images.enemys;
- icon = core.material.icons.enemys[id];
- }
- if (name != null) {
- core.fillText('ui', name, left + 63, top + 30, '#FFD700', 'bold 22px Verdana');
+ core.fillText('ui', name, content_left, top + 30, '#FFD700', 'bold 22px Verdana');
+ if (core.isset(icon)) {
core.status.boxAnimateObjs = [];
core.status.boxAnimateObjs.push({
'bgx': left + 15, 'bgy': top + 40, 'bgsize': 32,
'image': image, 'x': left + 15, 'y': top + 40, 'icon': icon
});
- core.setBoxAnimate(core.firstData.animateSpeed);
+ core.setBoxAnimate();
}
}
}
@@ -254,7 +275,7 @@ ui.prototype.drawShop = function (id) {
'image': core.material.images.npcs,
'x': left + 15, 'y': top + 30, 'icon': core.material.icons.npcs[shop.icon]
});
- core.setBoxAnimate(core.firstData.animateSpeed);
+ core.setBoxAnimate();
// 对话
core.canvas.ui.textAlign = "left";
@@ -451,7 +472,7 @@ ui.prototype.drawEnemyBook = function (page) {
core.fillText('ui', enemy.defDamage, 365, 62 * i + 68, '#DDDDDD', 'bold 13px Verdana');
}
- core.setBoxAnimate(core.firstData.animateSpeed);
+ core.setBoxAnimate();
this.drawPagination(page, totalPage);
}
@@ -547,16 +568,18 @@ ui.prototype.drawToolbox = function(selectId) {
var tool=tools[i];
var icon=core.material.icons.items[tool];
if (i<6) {
- core.canvas.ui.drawImage(images, 0, icon.loc*icon.size, icon.size, icon.size, 16*(4*i+1)+5, 144+5, icon.size, icon.size)
+ core.canvas.ui.drawImage(images, 0, icon*32, 32, 32, 16*(4*i+1)+5, 144+5, 32, 32)
// 个数
core.fillText('ui', core.itemCount(tool), 16*(4*i+1)+40, 144+38, '#FFFFFF', "bold 14px Verdana");
if (selectId == tool)
- core.strokeRect('ui', 16*(4*i+1)+1, 144+1, icon.size+8, icon.size+8, '#FFD700');
+ core.strokeRect('ui', 16*(4*i+1)+1, 144+1, 40, 40, '#FFD700');
}
else {
- core.canvas.ui.drawImage(images, 0, icon.loc*icon.size, icon.size, icon.size, 16*(4*(i-6)+1)+5, 144+64+5, icon.size, icon.size)
+ core.canvas.ui.drawImage(images, 0, icon*32, 32, 32, 16*(4*(i-6)+1)+5, 144+64+5, 32, 32)
+ // 个数
+ core.fillText('ui', core.itemCount(tool), 16*(4*(i-6)+1)+40, 144+64+38, '#FFFFFF', "bold 14px Verdana");
if (selectId == tool)
- core.strokeRect('ui', 16*(4*(i-6)+1)+1, 144+64+1, icon.size+8, icon.size+8, '#FFD700');
+ core.strokeRect('ui', 16*(4*(i-6)+1)+1, 144+64+1, 40, 40, '#FFD700');
}
}
@@ -567,15 +590,15 @@ ui.prototype.drawToolbox = function(selectId) {
var constant=constants[i];
var icon=core.material.icons.items[constant];
if (i<6) {
- core.canvas.ui.drawImage(images, 0, icon.loc*icon.size, icon.size, icon.size, 16*(4*i+1)+5, 304+5, icon.size, icon.size)
+ core.canvas.ui.drawImage(images, 0, icon*32, 32, 32, 16*(4*i+1)+5, 304+5, 32, 32)
// core.fillText('ui', core.itemCount(constant), 16*(4*i+1)+40, 304+38, '#FFFFFF', "bold 16px Verdana")
if (selectId == constant)
- core.strokeRect('ui', 16*(4*i+1)+1, 304+1, icon.size+8, icon.size+8, '#FFD700');
+ core.strokeRect('ui', 16*(4*i+1)+1, 304+1, 40, 40, '#FFD700');
}
else {
- core.canvas.ui.drawImage(images, 0, icon.loc*icon.size, icon.size, icon.size, 16*(4*(i-6)+1)+5, 304+64+5, icon.size, icon.size)
+ core.canvas.ui.drawImage(images, 0, icon*32, 32, 32, 16*(4*(i-6)+1)+5, 304+64+5, 32, 32)
if (selectId == constant)
- core.strokeRect('ui', 16*(4*(i-6)+1)+1, 304+64+1, icon.size+8, icon.size+8, '#FFD700');
+ core.strokeRect('ui', 16*(4*(i-6)+1)+1, 304+64+1, 40, 40, '#FFD700');
}
}
@@ -654,7 +677,7 @@ ui.prototype.drawThumbnail = function(canvas, blocks, x, y, size, heroLoc, heroI
for (var j=0;j<13;j++) {
var blockIcon = core.material.icons.terrains.ground;
var blockImage = core.material.images.terrains;
- core.canvas[canvas].drawImage(blockImage, 0, blockIcon.loc * blockIcon.size, blockIcon.size, blockIcon.size, x + i * persize, y + j * persize, persize, persize);
+ core.canvas[canvas].drawImage(blockImage, 0, blockIcon * 32, 32, 32, x + i * persize, y + j * persize, persize, persize);
}
}
for (var b in blocks) {
@@ -664,13 +687,13 @@ ui.prototype.drawThumbnail = function(canvas, blocks, x, y, size, heroLoc, heroI
var blockIcon = core.material.icons[block.event.cls][block.event.id];
var blockImage = core.material.images[block.event.cls];
//core.canvas[canvas].clearRect(x + i * persize, y + j * persize, persize, persize);
- core.canvas[canvas].drawImage(blockImage, 0, blockIcon.loc * blockIcon.size, blockIcon.size, blockIcon.size, x + i * persize, y + j * persize, persize, persize);
+ core.canvas[canvas].drawImage(blockImage, 0, blockIcon * 32, 32, 32, x + i * persize, y + j * persize, persize, persize);
}
}
if (core.isset(heroLoc)) {
var id = core.isset(heroId)?heroId:core.status.hero.id;
var heroIcon = core.material.icons.heros[id][heroLoc.direction];
- core.canvas[canvas].drawImage(core.material.images.heros, heroIcon.loc['stop'] * heroIcon.size, heroIcon.loc.iconLoc * heroIcon.size, heroIcon.size, heroIcon.size, x+persize*heroLoc.x, y+persize*heroLoc.y, persize, persize);
+ core.canvas[canvas].drawImage(core.material.images.heros, heroIcon.stop * 32, heroIcon.loc * 32, 32, 32, x+persize*heroLoc.x, y+persize*heroLoc.y, persize, persize);
}
}
diff --git a/main.js b/main.js
index fc41fef9..41aa9ef8 100644
--- a/main.js
+++ b/main.js
@@ -1,4 +1,5 @@
function main() {
+ this.version = "0.0.1";
this.dom = {
'body': document.body,
'gameGroup': document.getElementById('gameGroup'),
@@ -76,7 +77,7 @@ function main() {
'hard': document.getElementById("hard")
}
this.floorIds = [
- "MT1"
+ "sample0"
]
this.floors = {}
this.instance = {};
@@ -87,7 +88,7 @@ main.prototype.init = function () {
for (var i = 0; i < main.dom.gameCanvas.length; i++) {
main.canvas[main.dom.gameCanvas[i].id] = main.dom.gameCanvas[i].getContext('2d');
}
- main.loader(function () {
+ main.loaderJs(function () {
var coreData = {};
for (i = 0; i < main.loadList.length; i++) {
var name = main.loadList[i];
@@ -100,13 +101,24 @@ main.prototype.init = function () {
main[name].init(main.dom);
coreData[name] = main[name];
}
- main.core.init(main.dom, main.statusBar, main.canvas, main.images, main.sounds, coreData);
- main.core.resize(main.dom.body.clientWidth, main.dom.body.clientHeight);
+ main.loaderFloors(function() {
+ // 处理.min
+ for (var i=0;i