diff --git a/images/autotile1.png b/images/autotile1.png new file mode 100644 index 00000000..2dacd883 Binary files /dev/null and b/images/autotile1.png differ diff --git a/images/autotile2.png b/images/autotile2.png new file mode 100644 index 00000000..496bdc9a Binary files /dev/null and b/images/autotile2.png differ diff --git a/images/autotile3.png b/images/autotile3.png new file mode 100644 index 00000000..c7a9179d Binary files /dev/null and b/images/autotile3.png differ diff --git a/libs/core.js b/libs/core.js index f0a0a18c..f1c3f1ae 100644 --- a/libs/core.js +++ b/libs/core.js @@ -210,31 +210,24 @@ core.prototype.loader = function (callback) { for (var i = 0; i < core.images.length; i++) { core.loadImage(core.images[i], function (imgName, image) { core.setStartLoadTipText('正在加载图片 ' + imgName + "..."); - imgName = imgName.split('-'); - imgName = imgName[0]; core.material.images[imgName] = image; loadedImageNum++; core.setStartLoadTipText(imgName + ' 加载完毕...'); core.setStartProgressVal(loadedImageNum * (100 / allImageNum)); if (loadedImageNum == allImageNum) { - // 加载音频 - for (var key in core.sounds) { - for (var i = 0; i < core.sounds[key].length; i++) { - var soundName=core.sounds[key][i]; - soundName = soundName.split('-'); - var sound = new Audio(); - sound.preload = 'none'; - sound.src = 'sounds/' + soundName[0] + '.' + key; - if (soundName[1] == 'loop') { - sound.loop = 'loop'; + + // 加载Autotile + core.material.images.autotile={}; + var autotileIds = Object.keys(core.material.icons.autotile); + for (var x=0;x12 || y<0 || y>12) return 0; - return autotileMaps[13*x+y]?1:0; + return autotileMaps[13*x+y]==autotileId?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(floorId, canvas, left + xx * size, top + yy * size, size, core.material.images.autotile, id); + core.drawAutotileBlock(floorId, canvas, left + xx * size, top + yy * size, size, core.material.images.autotile[autotileId], id); } } } @@ -1810,16 +1827,16 @@ core.prototype.drawAutotile = function (floorId, canvas, autotileMaps, left, top 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(floorId, canvas, left + xx * size + size, top + yy * size + size, size, core.material.images.autotile, 16); + core.drawAutotileBlock(floorId, canvas, left + xx * size + size, top + yy * size + size, size, core.material.images.autotile[autotileId], 16); } if (!isAutotile(xx + 1, yy)) { - core.drawAutotileBlock(floorId, canvas, left + xx * size + size / 2, top + yy * size + size, size, core.material.images.autotile, 17); + core.drawAutotileBlock(floorId, canvas, left + xx * size + size / 2, top + yy * size + size, size, core.material.images.autotile[autotileId], 17); } if (!isAutotile(xx + 1, yy + 1)) { - core.drawAutotileBlock(floorId, canvas, left + xx * size + size / 2, top + yy * size + size / 2, size, core.material.images.autotile, 18); + core.drawAutotileBlock(floorId, canvas, left + xx * size + size / 2, top + yy * size + size / 2, size, core.material.images.autotile[autotileId], 18); } if (!isAutotile(xx, yy + 1)) { - core.drawAutotileBlock(floorId, canvas, left + xx * size + size, top + yy * size + size / 2, size, core.material.images.autotile, 19); + core.drawAutotileBlock(floorId, canvas, left + xx * size + size, top + yy * size + size / 2, size, core.material.images.autotile[autotileId], 19); } } } diff --git a/libs/floors/sample1.js b/libs/floors/sample1.js index 4aaa4a92..b9197f2f 100644 --- a/libs/floors/sample1.js +++ b/libs/floors/sample1.js @@ -9,19 +9,19 @@ main.floors.sample1 = { "canUseQuickShop": true, // 该层是否允许使用快捷商店 "defaultGround": "grass", // 默认地面的图块ID(terrains中) "map": [ // 地图数据,需要是13x13,建议使用地图生成器来生成 - [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, 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], - [1, 246, 1, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2], + [7, 131, 8, 152, 9, 130, 10, 152, 166, 165, 132, 165, 166], + [0, 0, 0, 0, 0, 0, 0, 152, 165, 164, 0, 162, 165], + [152, 152, 152, 152, 121, 152, 152, 152, 0, 0, 229, 0, 0], + [43, 33, 44, 151, 0, 0, 0, 152, 165, 161, 0, 163, 165], + [21, 22, 21, 151, 0, 0, 0, 152, 166, 165, 0, 165, 166], + [151, 245, 151, 151, 0, 87, 0, 152, 152, 152, 85, 153, 153], + [0, 246, 0, 151, 0, 0, 0, 152, 152, 221, 0, 221, 153], + [246, 0, 246, 151, 0, 0, 0, 121, 85, 0, 0, 0, 153], + [151, 246, 151, 151, 0, 153, 153, 153, 153, 153, 153, 153, 153], [0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 163, 0, 0], - [1, 1, 1, 1, 0, 3, 0, 0, 0, 162, 0, 161, 0], - [1, 0, 123, 1, 0, 3, 124, 0, 121, 0, 122, 0, 126], - [1, 0, 0, 1, 88, 3, 86, 0, 0, 0, 0, 0, 0], + [1, 1, 1, 1, 0, 20, 0, 0, 0, 162, 0, 161, 0], + [1, 0, 123, 1, 0, 20, 124, 0, 121, 0, 122, 0, 126], + [1, 0, 0, 1, 88, 20, 86, 0, 0, 0, 0, 0, 0], ], "firstArrive": [ // 第一次到该楼层触发的事件 diff --git a/libs/floors/sample2.js b/libs/floors/sample2.js index 10be1230..fb7af2b4 100644 --- a/libs/floors/sample2.js +++ b/libs/floors/sample2.js @@ -7,7 +7,7 @@ main.floors.sample2 = { "name": 40, // 显示在状态栏中的层数 "canFlyTo": false, // 该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器) "canUseQuickShop": true, // 该层是否允许使用快捷商店 - "defaultGround": "soil", // 默认地面的图块ID(terrains中) + "defaultGround": "snowGround", // 默认地面的图块ID(terrains中) "map": [ // 地图数据,需要是13x13,建议使用地图生成器来生成 [5, 5, 5, 5, 5, 5, 87, 5, 5, 5, 5, 5, 5], [5, 4, 4, 4, 4, 1, 0, 1, 4, 4, 4, 4, 5], diff --git a/libs/icons.js b/libs/icons.js index 2cd08b4a..4aced479 100644 --- a/libs/icons.js +++ b/libs/icons.js @@ -209,6 +209,12 @@ icons.prototype.init = function () { 'moneyPocket': 46, 'shoes': 47, 'hammer': 48 + }, + 'autotile': { // 所有的Autotile列表;后面的index简单取0即可 + 'autotile': 0, + 'autotile1': 0, + 'autotile2': 0, + 'autotile3': 0, } } } diff --git a/libs/maps.js b/libs/maps.js index aedd7101..0557f07a 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -61,6 +61,8 @@ maps.prototype.getBlock = function (x, y, id) { var tmp = {'x': x, 'y': y, 'id': id}; if (enable!=null) tmp.enable = enable; + ////////////////////////// 地形部分 ////////////////////////// + // 0-20 地形 if (id == 1) tmp.event = {'cls': 'terrains', 'id': 'yellowWall'}; // 黄墙 if (id == 2) tmp.event = {'cls': 'terrains', 'id': 'whiteWall'}; // 白墙 @@ -77,13 +79,19 @@ 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 == 15) tmp.event = {'cls': 'animates', 'id': 'water', 'noPass': true}; // 水 + // 在这里添加更多地形 + // 如果空地不足,可以从180以后开始继续放,只要不和现有的数字冲突即可 - - // autotile: 20 + // Autotile if (id == 20) tmp.event = {'cls': 'autotile', 'id': 'autotile', 'noPass': true}; // autotile - // 更多的autotile从350继续放 + // 更多的autotile从151到160,只要不和现有的数字冲突即可 + if (id == 151) tmp.event = {'cls': 'autotile', 'id': 'autotile1', 'noPass': true}; + if (id == 152) tmp.event = {'cls': 'autotile', 'id': 'autotile2', 'noPass': true}; + if (id == 153) tmp.event = {'cls': 'autotile', 'id': 'autotile3', 'noPass': true}; + ////////////////////////// 物品部分 ////////////////////////// + // 21-80 物品 if (id == 21) tmp.event = {'cls': 'items', 'id': 'yellowKey'}; // 黄钥匙 if (id == 22) tmp.event = {'cls': 'items', 'id': 'blueKey'}; // 蓝钥匙 @@ -131,6 +139,9 @@ maps.prototype.getBlock = function (x, y, id) { 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'}; // 蓝门 @@ -148,6 +159,8 @@ maps.prototype.getBlock = function (x, y, id) { if (id == 94) tmp.event = {'cls': 'animates', 'id': 'rightPortal', 'noPass': false}; // 右箭头 + ////////////////////////// NPC部分 ////////////////////////// + // 121-150 NPC if (id == 121) tmp.event = {'cls': 'npcs', 'id': 'man'}; if (id == 122) tmp.event = {'cls': 'npcs', 'id': 'woman'}; @@ -162,6 +175,8 @@ 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': 'arrowUp', 'noPass': false}; // 单向上箭头 if (id == 162) tmp.event = {'cls': 'terrains', 'id': 'arrowDown', 'noPass': false}; // 单向下箭头 @@ -170,6 +185,9 @@ maps.prototype.getBlock = function (x, y, id) { 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'}; if (id == 202) tmp.event = {'cls': 'enemys', 'id': 'redSlime'}; @@ -232,6 +250,9 @@ maps.prototype.getBlock = function (x, y, id) { if (id == 259) tmp.event = {'cls': 'enemys', 'id': 'darkFairy'}; if (id == 260) tmp.event = {'cls': 'enemys', 'id': 'greenKnight'}; + ////////////////////////// 待定... ////////////////////////// + // 目前ID暂时不要超过400 + return tmp; } diff --git a/libs/ui.js b/libs/ui.js index 6ac8143a..97e9b6df 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -1044,7 +1044,7 @@ ui.prototype.drawThumbnail = function(floorId, canvas, blocks, x, y, size, heroL 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; + autotileMaps[13*block.x + block.y] = block.event.id; continue; } else { diff --git a/main.js b/main.js index f173fa80..6d7f82bc 100644 --- a/main.js +++ b/main.js @@ -33,14 +33,12 @@ function main() { 'mdefCol': document.getElementById('mdefCol'), 'expCol': document.getElementById('expCol'), }; - // console.log('加载游戏容器和开始界面dom对象完成 如下'); - // console.log(this.dom); this.loadList = [ 'items', 'icons', 'maps', 'enemys', 'events', 'data', 'ui', 'core' ]; - // console.log('加载js文件列表加载完成' + this.loadList); this.images = [ - 'animates', 'enemys', 'hero', 'items', 'npcs', 'terrains', "autotile" + 'animates', 'enemys', 'hero', 'items', 'npcs', 'terrains' + // Autotile 动态添加 ]; this.sounds = { 'mp3': ['bgm-loop', 'floor'], @@ -78,6 +76,8 @@ function main() { 'curse': document.getElementById('curse'), 'hard': document.getElementById("hard") } + + //------------------------ 用户修改内容 ------------------------// this.version = "0.1"; // 游戏版本号;如果更改了游戏内容建议修改此version以免造成缓存问题。 this.useCompress = false; // 是否使用压缩文件 @@ -88,6 +88,8 @@ function main() { this.floorIds = [ // 在这里按顺序放所有的楼层;其顺序直接影响到楼层传送器的顺序和上楼器/下楼器的顺序 "sample0", "sample1", "sample2" ] + //------------------------ 用户修改内容 END ------------------------// + this.floors = {} this.instance = {}; this.canvas = {};