From e77762b10ffc050e41cc00c81977349d9aac7a2c Mon Sep 17 00:00:00 2001 From: oc Date: Sun, 17 Dec 2017 14:39:21 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=80=AA=E7=89=A9=E5=8F=8C=E5=B1=9E?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/autotile.png | Bin 0 -> 3476 bytes libs/core.js | 114 +++++++----- libs/data.js | 7 +- libs/enemys.js | 67 +++---- libs/events.js | 12 +- libs/ui.js | 54 +++--- test/autotile.png | Bin 0 -> 3476 bytes test/grassAutotile.html | 377 ++++++++++++++++++++++++++++++++++++++++ 更新内容.txt | 6 + 9 files changed, 531 insertions(+), 106 deletions(-) create mode 100644 images/autotile.png create mode 100644 test/autotile.png create mode 100644 test/grassAutotile.html create mode 100644 更新内容.txt diff --git a/images/autotile.png b/images/autotile.png new file mode 100644 index 0000000000000000000000000000000000000000..18e92ecf67f14cc3fd87ca19d10a03b4b462911b GIT binary patch literal 3476 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 literal 0 HcmV?d00001 diff --git a/libs/core.js b/libs/core.js index 82d7ddd6..831c1e41 100644 --- a/libs/core.js +++ b/libs/core.js @@ -425,49 +425,48 @@ core.prototype.keyDown = function(keyCode) { } core.prototype.keyUp = function(keyCode) { - if(!core.status.played) { - return; -} + if(!core.status.played) + return; -if (core.status.lockControl) { - if (core.status.event.id == 'book' && (keyCode==27 || keyCode==88)) - core.ui.closePanel(true); - if (core.status.event.id == 'fly' && (keyCode==71 || keyCode==27)) - core.ui.closePanel(); - if (core.status.event.id == 'fly' && keyCode==13) { - var index=core.status.hero.flyRange.indexOf(core.status.floorId); - var stair=core.status.event.data1) { // 1血夹击不死 core.status.hero.hp = parseInt(core.status.hero.hp/2); @@ -490,19 +490,19 @@ events.prototype.afterBattle = function(enemyId,x,y,callback) { // 毒衰咒的处理 var special = core.material.enemys[enemyId].special; // 中毒 - if (special==12 && !core.hasFlag('poison')) { + if (core.enemys.hasSpecial(special, 12) && !core.hasFlag('poison')) { core.setFlag('poison', true); core.updateStatusBar(); } // 衰弱 - if (special==13 && !core.hasFlag('weak')) { + if (core.enemys.hasSpecial(special, 13) && !core.hasFlag('weak')) { core.setFlag('weak', true); core.status.hero.atk-=core.values.weakValue; core.status.hero.def-=core.values.weakValue; core.updateStatusBar(); } // 诅咒 - if (special==14 && !core.hasFlag('curse')) { + if (core.enemys.hasSpecial(special, 14) && !core.hasFlag('curse')) { core.setFlag('curse', true); core.updateStatusBar(); } diff --git a/libs/ui.js b/libs/ui.js index bd62e491..9ee04878 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -377,28 +377,34 @@ ui.prototype.drawBattleAnimate = function(monsterId, callback) { hero_hp -= core.enemys.getExtraDamage(monster); - if (mon_special==2) hero_def=0; // 魔攻 - if (mon_special==3 && mon_defH9Xy06pc{#>6s_KfXGg)O_b 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 literal 0 HcmV?d00001 diff --git a/test/grassAutotile.html b/test/grassAutotile.html new file mode 100644 index 00000000..4d452305 --- /dev/null +++ b/test/grassAutotile.html @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + + +

通过鼠标拖拽或点击添加草地

+ + + + + + \ No newline at end of file diff --git a/更新内容.txt b/更新内容.txt new file mode 100644 index 00000000..d67dbba6 --- /dev/null +++ b/更新内容.txt @@ -0,0 +1,6 @@ +新增:支持Autotile +新增:怪物支持双属性 √ +新增:单向箭头、感叹号 +快捷道具使用:1破2炸3飞;读档改为D键 √ +更多的默认素材;无需P图,直接替换即可 +破甲、反击、净化等效果放全局变量 From 0de35b6258ac07977783fbb03f6a2d491faf4cf1 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Sun, 17 Dec 2017 18:01:45 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0Autotile=E5=92=8C?= =?UTF-8?q?=E6=84=9F=E5=8F=B9=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/terrains.png | Bin 6702 -> 7231 bytes index.html | 1 - libs/core.js | 135 +++++++++++++- libs/enemys.js | 6 +- libs/events.js | 26 +++ libs/floors/sample0.js | 10 +- libs/floors/sample1.js | 8 +- libs/icons.js | 8 +- libs/maps.js | 11 +- libs/ui.js | 41 ++++- main.js | 2 +- test/autotile.png | Bin 3476 -> 0 bytes test/grassAutotile.html | 377 ---------------------------------------- 更新内容.txt | 2 +- 14 files changed, 223 insertions(+), 404 deletions(-) delete mode 100644 test/autotile.png delete mode 100644 test/grassAutotile.html diff --git a/images/terrains.png b/images/terrains.png index 594ea61557b0911121587d1c8103786e8bb5ac6c..a28642a0849fe86292b584543d69cedc26e29908 100644 GIT binary patch literal 7231 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 N002ovPDHLkV1gv@>(&4O literal 6702 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 WU9nk-iR8aK5TK)Js8OXxi1;6PmqlX$ diff --git a/index.html b/index.html index f474ad47..fb79075f 100644 --- a/index.html +++ b/index.html @@ -35,7 +35,6 @@ 关于本塔
- 简单 普通 困难 diff --git a/libs/core.js b/libs/core.js index 831c1e41..9c69577f 100644 --- a/libs/core.js +++ b/libs/core.js @@ -1558,21 +1558,146 @@ core.prototype.drawMap = function (mapName, callback) { core.canvas.bg.drawImage(blockImage, 0, blockIcon * 32, 32, 32, x * 32, y * 32, 32, 32); } } + var autotileMaps = []; for (var b = 0; b < mapBlocks.length; b++) { // 事件启用 - if (core.isset(mapBlocks[b].event) && !(core.isset(mapBlocks[b].enable) && !mapBlocks[b].enable)) { - 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 * 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); + var block = mapBlocks[b]; + if (core.isset(block.event) && !(core.isset(block.enable) && !block.enable)) { + if (block.event.cls == 'autotile') { + // core.drawAutotile(); + autotileMaps[13*block.x + block.y] = true; + continue; + } + else { + blockIcon = core.material.icons[block.event.cls][block.event.id]; + blockImage = core.material.images[block.event.cls]; + core.canvas.event.drawImage(core.material.images[block.event.cls], 0, blockIcon * 32, 32, 32, block.x * 32, block.y * 32, 32, 32); + core.addGlobalAnimate(block.event.animate, block.x * 32, block.y * 32, blockIcon, blockImage); + } } } + core.drawAutotile('event', autotileMaps, 0, 0, 32); core.setGlobalAnimate(core.values.animateSpeed); if (core.isset(callback)) callback(); } +core.prototype.drawAutotile = function (canvas, autotileMaps, left, top, size) { + var isAutotile = function(x, y) { + if (x<0 || x>12 || y<0 || y>12) return 0; + return autotileMaps[13*x+y]?1:0; + } + for (var xx=0;xx<13;xx++) { + for (var yy=0;yy<13;yy++) { + if (isAutotile(xx, yy)) { + // 绘制autotile + var id=isAutotile(xx, yy - 1) + 2 * isAutotile(xx - 1, yy) + 4 * isAutotile(xx, yy + 1) + 8 * isAutotile(xx + 1, yy); + core.drawAutotileBlock(canvas, left + xx * size, top + yy * size, size, core.material.images.autotile, id); + } + } + } + for (var xx=0;xx<13;xx++) { + for (var yy=0;yy<13;yy++) { + if (isAutotile(xx, yy) + isAutotile(xx + 1, yy) + isAutotile(xx + 1, yy + 1) + isAutotile(xx, yy + 1) != 3) continue; + if (!isAutotile(xx, yy)) { + core.drawAutotileBlock(canvas, left + xx * size + size, top + yy * size + size, size, core.material.images.autotile, 16); + } + if (!isAutotile(xx + 1, yy)) { + core.drawAutotileBlock(canvas, left + xx * size + size / 2, top + yy * size + size, size, core.material.images.autotile, 17); + } + if (!isAutotile(xx + 1, yy + 1)) { + core.drawAutotileBlock(canvas, left + xx * size + size / 2, top + yy * size + size / 2, size, core.material.images.autotile, 18); + } + if (!isAutotile(xx, yy + 1)) { + core.drawAutotileBlock(canvas, left + xx * size + size, top + yy * size + size / 2, size, core.material.images.autotile, 19); + } + } + } +} + +core.prototype.drawAutotileBlock = function (map, x, y, size, autotile, index) { + var canvas = core.canvas[map]; + var blockIcon = core.material.icons.terrains.ground; + var blockImage = core.material.images.terrains; + switch (index) { + case 0: + canvas.drawImage(autotile, 0, 0, 32, 32, x, y, size, size); + break; + case 1: + canvas.drawImage(autotile, 0, 3 * 32, 16, 32, x, y, size / 2, size); + canvas.drawImage(autotile, 2 * 32 + 16, 3 * 32, 16, 32, x + size / 2, y, size / 2, size); + break; + case 2: + canvas.drawImage(autotile, 2 * 32, 32, 32, 16, x, y, size, size / 2); + canvas.drawImage(autotile, 2 * 32, 3 * 32 + 16, 32, 16, x, y + size / 2, size, size / 2); + break; + case 3: + canvas.drawImage(autotile, 2 * 32, 3 * 32, 32, 32, x, y, size, size); + break; + case 4: + canvas.drawImage(autotile, 0, 1 * 32, 16, 32, x, y, size / 2, size); + canvas.drawImage(autotile, 2 * 32 + 16, 1 * 32, 16, 32, x + size / 2, y, size / 2, size); + break; + case 5: + canvas.drawImage(autotile, 0, 2 * 32, 16, 32, x, y, size / 2, size); + canvas.drawImage(autotile, 2 * 32 + 16, 2 * 32, 16, 32, x + size / 2, y, size / 2, size); + break; + case 6: + canvas.drawImage(autotile, 2 * 32, 1 * 32, 32, 32, x, y, size, size); + break; + case 7: + canvas.drawImage(autotile, 2 * 32, 2 * 32, 32, 32, x, y, size, size); + break; + case 8: + canvas.drawImage(autotile, 0, 32, 32, 16, x, y, size, size / 2); + canvas.drawImage(autotile, 0, 3 * 32 + 16, 32, 16, x, y + size / 2, size, size / 2); + break; + case 9: + canvas.drawImage(autotile, 0, 3 * 32, 32, 32, x, y, size, size); + break; + case 10: + canvas.drawImage(autotile, 32, 32, 32, 16, x, y, size, size / 2); + canvas.drawImage(autotile, 32, 3 * 32 + 16, 32, 16, x, y + size / 2, size, size / 2); + break; + case 11: + canvas.drawImage(autotile, 32, 3 * 32, 32, 32, x, y, size, size); + break; + case 12: + canvas.drawImage(autotile, 0, 32, 32, 32, x, y, size, size); + break; + case 13: + canvas.drawImage(autotile, 0, 2 * 32, 32, 32, x, y, size, size); + break; + case 14: + canvas.drawImage(autotile, 32, 32, 32, 32, x, y, size, size); + break; + case 15: + canvas.drawImage(autotile, 32, 2 * 32, 32, 32, x, y, size, size); + break; + case 16: + canvas.clearRect(x, y, size / 2, size / 2); + canvas.drawImage(blockImage, 0, blockIcon * 32, 16, 16, x, y, size / 2, size / 2); + canvas.drawImage(autotile, 2 * 32, 0, 16, 16, x, y, size / 2, size / 2); + break; + case 17: + canvas.clearRect(x, y, size / 2, size / 2); + canvas.drawImage(blockImage, 0, blockIcon * 32, 16, 16, x, y, size / 2, size / 2); + canvas.drawImage(autotile, 2 * 32 + 16, 0, 16, 16, x, y, size / 2, size / 2); + break; + case 18: + canvas.clearRect(x, y, size / 2, size / 2); + canvas.drawImage(blockImage, 0, blockIcon * 32, 16, 16, x, y, size / 2, size / 2); + canvas.drawImage(autotile, 2 * 32 + 16, 16, 16, 16, x, y, size / 2, size / 2); + break; + case 19: + canvas.clearRect(x, y, size / 2, size / 2); + canvas.drawImage(blockImage, 0, blockIcon * 32, 16, 16, x, y, size / 2, size / 2); + canvas.drawImage(autotile, 2 * 32, 16, 16, 16, x, y, size / 2, size / 2); + break; + } +} + core.prototype.noPassExists = function (x, y, floorId) { var block = core.getBlock(x,y,floorId); if (block==null) return false; diff --git a/libs/enemys.js b/libs/enemys.js index 625ddd3a..2676753c 100644 --- a/libs/enemys.js +++ b/libs/enemys.js @@ -182,8 +182,10 @@ enemys.prototype.calDamage = function (hero_atk, hero_def, hero_mdef, mon_hp, mo if (this.hasSpecial(mon_special, 4)) per_damage *= 2; if (this.hasSpecial(mon_special, 5)) per_damage *= 3; if (this.hasSpecial(mon_special, 6)) per_damage *= 4; + + var counterDamage = 0; // 反击 - if (this.hasSpecial(mon_special, 8)) per_damage += parseInt(core.values.counterAttack * hero_atk); + if (this.hasSpecial(mon_special, 8)) counterDamage += parseInt(core.values.counterAttack * hero_atk); // 先攻 var damage = mon_special == 1 ? per_damage : 0; @@ -193,7 +195,7 @@ enemys.prototype.calDamage = function (hero_atk, hero_def, hero_mdef, mon_hp, mo if (this.hasSpecial(mon_special, 9)) damage = core.values.purify * hero_mdef; var turn = parseInt((mon_hp - 1) / (hero_atk - mon_def)); - var ans = damage + turn * per_damage; + var ans = damage + turn * per_damage + (turn + 1) * counterDamage; ans -= hero_mdef; // 魔防回血 diff --git a/libs/events.js b/libs/events.js index 8e69ab73..b00e6e0e 100644 --- a/libs/events.js +++ b/libs/events.js @@ -39,6 +39,11 @@ events.prototype.init = function () { if (core.isset(callback)) callback(); }, + "changeLight": function (data, core, callback) { + core.events.changeLight(data.x, data.y); + if (core.isset(callback)) + callback(); + }, 'action': function (data, core, callback) { core.events.doEvents(data.event.data, data.x, data.y); if (core.isset(callback)) callback(); @@ -577,6 +582,27 @@ events.prototype.passNet = function (data) { core.updateStatusBar(); } +events.prototype.changeLight = function(x, y) { + var block = core.getBlock(x, y); + if (block==null) return; + var index = block.index; + block = block.block; + if (block.event.id != 'light') return; + // 改变为dark + block.id = 166; + block.event = {'cls': 'terrains', 'id': 'darkLight', 'noPass': true}; + // 更新地图 + core.canvas.event.clearRect(x * 32, y * 32, 32, 32); + var blockIcon = core.material.icons[block.event.cls][block.event.id]; + core.canvas.event.drawImage(core.material.images[block.event.cls], 0, blockIcon * 32, 32, 32, block.x * 32, block.y * 32, 32, 32); + this.afterChangeLight(); +} + +// 改变灯后的事件 +events.prototype.afterChangeLight = function() { + +} + // 存档事件前一刻的处理 events.prototype.beforeSaveData = function(data) { diff --git a/libs/floors/sample0.js b/libs/floors/sample0.js index a53520b8..e31aea3f 100644 --- a/libs/floors/sample0.js +++ b/libs/floors/sample0.js @@ -8,12 +8,12 @@ main.floors.sample0 = { "canFlyTo": true, // 该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器) "canUseQuickShop": 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], + [0, 0, 220, 0, 0, 20, 87, 3, 65, 64, 44, 43, 42], + [0, 246, 0, 246, 0, 20, 0, 3, 58, 59, 60, 61, 41], + [219, 0, 0, 0, 219, 20, 0, 3, 57, 26, 62, 63, 40], + [20, 20, 20, 20, 20, 20, 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], + [6, 6, 125, 6, 6, 6, 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], diff --git a/libs/floors/sample1.js b/libs/floors/sample1.js index ca1ae611..4104b7b1 100644 --- a/libs/floors/sample1.js +++ b/libs/floors/sample1.js @@ -8,11 +8,11 @@ main.floors.sample1 = { "canFlyTo": true, // 该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器) "canUseQuickShop": true, // 该层是否允许使用快捷商店 "map": [ // 地图数据,需要是13x13,建议使用地图生成器来生成 - [7, 131, 8, 2, 9, 130, 10, 2, 0, 0, 132, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], + [7, 131, 8, 2, 9, 130, 10, 2, 166, 165, 132, 165, 166], + [0, 0, 0, 0, 0, 0, 0, 2, 165, 164, 0, 162, 165], [2, 2, 2, 2, 121, 2, 2, 2, 0, 0, 229, 0, 0], - [43, 33, 44, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0], - [21, 22, 21, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0], + [43, 33, 44, 1, 0, 0, 0, 2, 165, 161, 0, 163, 165], + [21, 22, 21, 1, 0, 0, 0, 2, 166, 165, 0, 165, 166], [1, 245, 1, 1, 0, 87, 0, 2, 2, 2, 85, 2, 2], [0, 246, 0, 1, 0, 0, 0, 2, 2, 221, 0, 221, 2], [246, 0, 246, 1, 0, 0, 0, 121, 85, 0, 0, 0, 2], diff --git a/libs/icons.js b/libs/icons.js index 1fc2eac8..f35d9b86 100644 --- a/libs/icons.js +++ b/libs/icons.js @@ -29,7 +29,13 @@ icons.prototype.init = function () { 'blueShop-left': 15, 'blueShop-right': 16, 'pinkShop-left': 17, - 'pinkShop-right': 18 + 'pinkShop-right': 18, + 'up': 19, + 'down': 20, + 'left': 21, + 'right': 22, + 'light': 23, + 'darkLight': 24 }, 'animates': { 'star': 0, diff --git a/libs/maps.js b/libs/maps.js index 5a929f2f..38106fe4 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -63,7 +63,7 @@ maps.prototype.getBlock = function (x, y, id) { var tmp = {'x': x, 'y': y, 'id': id}; if (enable!=null) tmp.enable = enable; - // 0-9 地形 + // 0-20 地形 if (id == 1) tmp.event = {'cls': 'terrains', 'id': 'yellowWall'}; // 黄墙 if (id == 2) tmp.event = {'cls': 'terrains', 'id': 'whiteWall'}; // 白墙 if (id == 3) tmp.event = {'cls': 'terrains', 'id': 'blueWall'}; // 白墙 @@ -79,6 +79,8 @@ maps.prototype.getBlock = function (x, y, id) { 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'}; // 咒网 + if (id == 20) tmp.event = {'cls': 'autotile', 'id': 'autotile', 'noPass': true}; + // 21-80 物品 if (id == 21) tmp.event = {'cls': 'items', 'id': 'yellowKey'}; // 黄钥匙 if (id == 22) tmp.event = {'cls': 'items', 'id': 'blueKey'}; // 蓝钥匙 @@ -157,6 +159,13 @@ maps.prototype.getBlock = function (x, y, id) { if (id == 131) tmp.event = {'cls': 'npcs', 'id': 'blueShop'}; if (id == 132) tmp.event = {'cls': 'npcs', 'id': 'princess'}; + // 161-200 其他(单向箭头、灯、箱子等等) + if (id == 161) tmp.event = {'cls': 'terrains', 'id': 'up'}; // 单向上箭头 + if (id == 162) tmp.event = {'cls': 'terrains', 'id': 'down'}; // 单向下箭头 + if (id == 163) tmp.event = {'cls': 'terrains', 'id': 'left'}; // 单向左箭头 + if (id == 164) tmp.event = {'cls': 'terrains', 'id': 'right'}; // 单向右箭头 + if (id == 165) tmp.event = {'cls': 'terrains', 'id': 'light', 'trigger': 'changeLight', 'noPass': false}; // 灯 + if (id == 166) tmp.event = {'cls': 'terrains', 'id': 'darkLight', 'noPass': true}; // 暗灯 // 201-300 怪物 if (id == 201) tmp.event = {'cls': 'enemys', 'id': 'greenSlime'}; diff --git a/libs/ui.js b/libs/ui.js index 9ee04878..d70c7551 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -570,6 +570,27 @@ ui.prototype.drawBattleAnimate = function(monsterId, callback) { core.canvas.data.textAlign='left'; core.fillText('data', mon_hp, right_start, top+margin+10+26, '#DDDDDD', 'bold 16px Verdana'); + // 反击 + if (core.enemys.hasSpecial(mon_special, 8)) { + var counterDamage = parseInt(core.values.counterAttack * hero_atk); + hero_mdef -= counterDamage; + + if (hero_mdef<0) { + hero_hp+=hero_mdef; + hero_mdef=0; + } + // 更新勇士数据 + core.clearMap('data', left_start, top+margin+10, lineWidth, 40); + core.canvas.data.textAlign='right'; + core.fillText('data', hero_hp, left_end, top+margin+10+26, '#DDDDDD', 'bold 16px Verdana'); + + if (core.flags.enableMDef) { + core.clearMap('data', left_start, top+margin+10+3*lineHeight, lineWidth, 40); + core.fillText('data', hero_mdef, left_end, top+margin+10+26+3*lineHeight); + } + + } + } else { // 怪物攻击 @@ -580,7 +601,7 @@ ui.prototype.drawBattleAnimate = function(monsterId, callback) { }, 250); var per_damage = mon_atk-hero_def; - if (core.enemys.hasSpecial(mon_special, 8)) per_damage += parseInt(core.values.counterAttack * hero_atk); // 反击 + if (per_damage < 0) per_damage = 0; hero_mdef-=per_damage; if (hero_mdef<0) { @@ -992,16 +1013,24 @@ ui.prototype.drawThumbnail = function(canvas, blocks, x, y, size, heroLoc) { core.canvas[canvas].drawImage(blockImage, 0, blockIcon * 32, 32, 32, x + i * persize, y + j * persize, persize, persize); } } + var autotileMaps = []; for (var b in blocks) { var block = blocks[b]; if (core.isset(block.event) && !(core.isset(block.enable) && !block.enable)) { - var i = block.x, j = block.y; - 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 * 32, 32, 32, x + i * persize, y + j * persize, persize, persize); + if (block.event.cls == 'autotile') { + // core.drawAutotile(); + autotileMaps[13*block.x + block.y] = true; + continue; + } + else { + var blockIcon = core.material.icons[block.event.cls][block.event.id]; + var blockImage = core.material.images[block.event.cls]; + core.canvas[canvas].drawImage(blockImage, 0, blockIcon * 32, 32, 32, x + block.x * persize, y + block.y * persize, persize, persize); + } } } + core.drawAutotile('ui', autotileMaps, x, y, persize); + if (core.isset(heroLoc)) { var heroIcon = core.material.icons.hero[heroLoc.direction]; var height = core.material.icons.hero.height; diff --git a/main.js b/main.js index 736ef6b9..4e7bcec1 100644 --- a/main.js +++ b/main.js @@ -40,7 +40,7 @@ function main() { ]; // console.log('加载js文件列表加载完成' + this.loadList); this.images = [ - 'animates', 'enemys', 'hero', 'items', 'npcs', 'terrains' + 'animates', 'enemys', 'hero', 'items', 'npcs', 'terrains', "autotile" ]; this.sounds = { 'mp3': ['bgm-loop', 'floor'], diff --git a/test/autotile.png b/test/autotile.png deleted file mode 100644 index 18e92ecf67f14cc3fd87ca19d10a03b4b462911b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3476 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 diff --git a/test/grassAutotile.html b/test/grassAutotile.html deleted file mode 100644 index 4d452305..00000000 --- a/test/grassAutotile.html +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - - - - - - - - - - -

通过鼠标拖拽或点击添加草地

- - - - - - \ No newline at end of file diff --git a/更新内容.txt b/更新内容.txt index d67dbba6..39e845ca 100644 --- a/更新内容.txt +++ b/更新内容.txt @@ -3,4 +3,4 @@ 新增:单向箭头、感叹号 快捷道具使用:1破2炸3飞;读档改为D键 √ 更多的默认素材;无需P图,直接替换即可 -破甲、反击、净化等效果放全局变量 +破甲、反击、净化等效果放全局变量 √