From e957966935caab030dff8f2ca91434dbc259eb65 Mon Sep 17 00:00:00 2001 From: oc Date: Mon, 29 Oct 2018 00:20:26 +0800 Subject: [PATCH] items --- libs/actions.js | 13 +++++++-- libs/control.js | 50 ++++++++++++++++++++------------- libs/core.js | 5 ++++ libs/maps.js | 6 ++-- libs/ui.js | 8 +++++- main.js | 27 +----------------- project/data.js | 5 +++- project/items.js | 52 +++++++++++++++++++++++++---------- project/sounds/bomb.mp3 | Bin 0 -> 4329 bytes project/sounds/centerFly.mp3 | Bin 0 -> 4329 bytes project/sounds/pickaxe.mp3 | Bin 0 -> 3180 bytes 11 files changed, 99 insertions(+), 67 deletions(-) create mode 100644 project/sounds/bomb.mp3 create mode 100644 project/sounds/centerFly.mp3 create mode 100644 project/sounds/pickaxe.mp3 diff --git a/libs/actions.js b/libs/actions.js index 937fb7ec..1eab51f4 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -1848,12 +1848,16 @@ actions.prototype.clickSwitchs = function (x,y) { core.ui.drawSwitchs(); break; case 7: - window.open(core.platform.isPC?"editor.html":"editor-mobile.html", "_blank"); + core.setFlag('bigmapMoveDirectly', !core.getFlag('bigmapMoveDirectly', false)); + core.ui.drawSwitchs(); break; case 8: - window.open(core.firstData.name+".zip", "_blank"); + window.open(core.platform.isPC?"editor.html":"editor-mobile.html", "_blank"); break; case 9: + window.open(core.firstData.name+".zip", "_blank"); + break; + case 10: core.status.event.selection=0; core.ui.drawSettings(); break; @@ -2367,6 +2371,9 @@ actions.prototype.clickReplay = function (x, y) { break; } case 2: + core.chooseReplayFile(); + break; + case 3: if (core.hasFlag('debug')) { core.drawText("\t[系统提示]调试模式下无法下载录像"); break; @@ -2379,7 +2386,7 @@ actions.prototype.clickReplay = function (x, y) { })); break; break; - case 3: + case 4: core.ui.closePanel(); break; } diff --git a/libs/control.js b/libs/control.js index 92fa9d9a..52ba8e3a 100644 --- a/libs/control.js +++ b/libs/control.js @@ -1658,25 +1658,37 @@ control.prototype.doEffect = function (effect) { ////// 开启debug模式 ////// control.prototype.debug = function() { core.setFlag('debug', true); - core.insertAction(["\t[调试模式开启]此模式下按住Ctrl键(或Ctrl+Shift键)可以穿墙并忽略一切事件。\n同时,录像将失效,也无法上传成绩。"]); - /* - core.setStatus('hp', 999999); - core.setStatus('atk', 10000); - core.setStatus('def', 10000); - core.setStatus('mdef', 10000); - core.setStatus('money', 10000); - core.setStatus('experience', 10000); - core.setItem('yellowKey', 50); - core.setItem('blueKey', 50); - core.setItem('redKey', 50); - core.setItem('book', 1); - core.setItem('fly', 1); - for (var i in core.status.maps) - if (core.status.maps[i].canFlyTo && core.status.hero.flyRange.indexOf(i)<0) - core.status.hero.flyRange.push(i); - core.updateStatusBar(); - core.drawTip("作弊成功"); - */ + core.drawText("\t[调试模式开启]此模式下按住Ctrl键(或Ctrl+Shift键)可以穿墙并忽略一切事件。\n同时,录像将失效,也无法上传成绩。"); +} + +////// 选择录像文件 ////// +control.prototype.chooseReplayFile = function () { + core.readFile(function (obj) { + if (obj.name!=core.firstData.name) { + alert("存档和游戏不一致!"); + return; + } + if (core.isset(obj.version) && obj.version!=core.firstData.version) { + // alert("游戏版本不一致!"); + if (!confirm("游戏版本不一致!\n你仍然想播放录像吗?")) + return; + } + if (!core.isset(obj.route) || !core.isset(obj.hard)) { + alert("无效的录像!"); + return; + } + + core.dom.startPanel.style.display = 'none'; + core.resetStatus(core.firstData.hero, obj.hard, core.firstData.floorId, null, core.initStatus.maps); + core.setFlag('seed', obj.seed); + core.setFlag('rand', obj.seed); + core.events.setInitData(obj.hard); + core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() { + core.startReplay(core.decodeRoute(obj.route)); + }, true); + }, function () { + + }) } ////// 开始播放 ////// diff --git a/libs/core.js b/libs/core.js index 2cbbb589..81d6f7af 100644 --- a/libs/core.js +++ b/libs/core.js @@ -1030,6 +1030,11 @@ core.prototype.resetMap = function(floorId) { core.maps.resetMap(floorId); } +////// 选择录像文件 ////// +core.prototype.chooseReplayFile = function () { + core.control.chooseReplayFile(); +} + ////// 开始播放 ////// core.prototype.startReplay = function (list) { core.control.startReplay(list); diff --git a/libs/maps.js b/libs/maps.js index f3119d2d..fe7bd20f 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -316,10 +316,10 @@ maps.prototype.canMoveDirectly = function (destX,destY) { if (fromX==destX&&fromY==destY) return 0; // 大地图且会改变左上角坐标,不能 - var sx = core.clamp(fromX-6,0,core.bigmap.width-13), sy = core.clamp(fromY-6,0,core.bigmap.width-13), - ex = core.clamp(destX-6,0,core.bigmap.height-13), ey = core.clamp(destY-6,0,core.bigmap.height-13); + var sx = core.clamp(fromX-6,0,core.bigmap.width-13), sy = core.clamp(fromY-6,0,core.bigmap.height-13), + ex = core.clamp(destX-6,0,core.bigmap.width-13), ey = core.clamp(destY-6,0,core.bigmap.height-13); - if (sx!=ex || sy!=ey) return -1; + if (!core.hasFlag('bigmapMoveDirectly') && (sx!=ex || sy!=ey)) return -1; // 无视起点事件 var nowBlockId = core.getBlockId(fromX, fromY); diff --git a/libs/ui.js b/libs/ui.js index eb4836c9..b6774045 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -822,6 +822,7 @@ ui.prototype.drawSwitchs = function() { "临界显伤: "+(core.flags.displayCritical ? "[ON]" : "[OFF]"), "领域显伤: "+(core.flags.displayExtraDamage ? "[ON]" : "[OFF]"), "新版存档: "+(core.platform.useLocalForage ? "[ON]":"[OFF]"), + "大地图瞬移:"+(core.hasFlag('bigmapMoveDirectly') ? "[ON]":"[OFF]"), "查看工程", "下载离线版本", "返回主菜单" @@ -1230,7 +1231,7 @@ ui.prototype.drawReplay = function () { core.lockControl(); core.status.event.id = 'replay'; this.drawChoices(null, [ - "从头回放录像", "从存档开始回放", "下载当前录像", "返回游戏" + "从头回放录像", "从存档开始回放", "选择录像文件", "下载当前录像", "返回游戏" ]); } @@ -1768,6 +1769,11 @@ ui.prototype.drawToolbox = function(index) { core.fillText('ui', item.name, 10, 32, '#FFD700', "bold 20px Verdana") var text = item.text||"该道具暂无描述。"; + try { + // 检查能否eval + text = eval(text); + } catch (e) {} + var lines = core.splitLines('ui', text, 406, '17px Verdana'); core.fillText('ui', lines[0], 10, 62, '#FFFFFF', '17px Verdana'); diff --git a/main.js b/main.js index 02a0a8f2..ad0c7ff2 100644 --- a/main.js +++ b/main.js @@ -531,32 +531,7 @@ main.dom.replayGame.onclick = function () { } } - core.readFile(function (obj) { - if (obj.name!=core.firstData.name) { - alert("存档和游戏不一致!"); - return; - } - if (core.isset(obj.version) && obj.version!=core.firstData.version) { - // alert("游戏版本不一致!"); - if (!confirm("游戏版本不一致!\n你仍然想播放录像吗?")) - return; - } - if (!core.isset(obj.route) || !core.isset(obj.hard)) { - alert("无效的录像!"); - return; - } - - core.dom.startPanel.style.display = 'none'; - core.resetStatus(core.firstData.hero, obj.hard, core.firstData.floorId, null, core.initStatus.maps); - core.setFlag('seed', obj.seed); - core.setFlag('rand', obj.seed); - core.events.setInitData(obj.hard); - core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() { - core.startReplay(core.decodeRoute(obj.route)); - }, true); - }, function () { - - }) + core.chooseReplayFile(); } diff --git a/project/data.js b/project/data.js index 3a651825..f89628d3 100644 --- a/project/data.js +++ b/project/data.js @@ -27,7 +27,10 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "item.mp3", "equip.mp3", "zone.mp3", - "jump.mp3" + "jump.mp3", + "pickaxe.mp3", + "bomb.mp3", + "centerFly.mp3" ], "startBackground": "bg.jpg", "startLogoStyle": "color: black", diff --git a/project/items.js b/project/items.js index d4bedf6e..ac20097b 100644 --- a/project/items.js +++ b/project/items.js @@ -15,35 +15,43 @@ items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = }, "redJewel": { "cls": "items", - "name": "红宝石" + "name": "红宝石", + "text": "',攻击+'+core.values.redJewel" }, "blueJewel": { "cls": "items", - "name": "蓝宝石" + "name": "蓝宝石", + "text": "',防御+'+core.values.blueJewel" }, "greenJewel": { "cls": "items", - "name": "绿宝石" + "name": "绿宝石", + "text": "',魔防+'+core.values.greenJewel" }, "yellowJewel": { "cls": "items", - "name": "黄宝石" + "name": "黄宝石", + "text": "可以进行加点" }, "redPotion": { "cls": "items", - "name": "红血瓶" + "name": "红血瓶", + "text": "',生命+'+core.values.redPotion" }, "bluePotion": { "cls": "items", - "name": "蓝血瓶" + "name": "蓝血瓶", + "text": "',生命+'+core.values.bluePotion" }, "yellowPotion": { "cls": "items", - "name": "黄血瓶" + "name": "黄血瓶", + "text": "'生命+'+core.values.yellowPotion" }, "greenPotion": { "cls": "items", - "name": "绿血瓶" + "name": "绿血瓶", + "text": "',生命+'+core.values.greenPotion" }, "sword0": { "cls": "items", @@ -343,13 +351,13 @@ items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "book": "core.ui.drawBook(0);", "fly": "core.ui.drawFly(core.status.hero.flyRange.indexOf(core.status.floorId));", "earthquake": "core.removeBlockByIds(core.status.floorId, core.status.event.data);\ncore.drawMap(core.status.floorId, function () {\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n});", - "pickaxe": "core.removeBlockByIds(core.status.floorId, core.status.event.data);\ncore.drawMap(core.status.floorId, function () {\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n});", + "pickaxe": "core.playSound('pickaxe.mp3');\ncore.removeBlockByIds(core.status.floorId, core.status.event.data);\ncore.drawMap(core.status.floorId, function () {\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n});", "icePickaxe": "core.removeBlockByIds(core.status.floorId, core.status.event.data);\ncore.drawMap(core.status.floorId, function () {\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n});", "snow": "core.removeBlockByIds(core.status.floorId, core.status.event.data);\ncore.drawMap(core.status.floorId, function () {\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n});", "bigKey": "core.removeBlockByIds(core.status.floorId, core.status.event.data);\ncore.drawMap(core.status.floorId, function () {\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n});", - "bomb": "core.removeBlockByIds(core.status.floorId, core.status.event.data);\ncore.drawMap(core.status.floorId, function () {\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\tcore.events.afterUseBomb();\n});", - "hammer": "core.removeBlockByIds(core.status.floorId, core.status.event.data);\ncore.drawMap(core.status.floorId, function () {\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\tcore.events.afterUseBomb();\n});", - "centerFly": "core.clearMap('hero');\ncore.setHeroLoc('x', (core.bigmap.width||13)-1-core.getHeroLoc('x'));\ncore.setHeroLoc('y', (core.bigmap.height||13)-1-core.getHeroLoc('y'));\ncore.drawHero();\ncore.drawTip(core.material.items[itemId].name + '使用成功');", + "bomb": "core.playSound('bomb.mp3');\ncore.removeBlockByIds(core.status.floorId, core.status.event.data);\ncore.drawMap(core.status.floorId, function () {\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\tcore.events.afterUseBomb();\n});", + "hammer": "core.playSound('bomb.mp3');\ncore.removeBlockByIds(core.status.floorId, core.status.event.data);\ncore.drawMap(core.status.floorId, function () {\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\tcore.events.afterUseBomb();\n});", + "centerFly": "core.playSound('centerFly.mp3');\ncore.clearMap('hero');\ncore.setHeroLoc('x', (core.bigmap.width||13)-1-core.getHeroLoc('x'));\ncore.setHeroLoc('y', (core.bigmap.height||13)-1-core.getHeroLoc('y'));\ncore.drawHero();\ncore.drawTip(core.material.items[itemId].name + '使用成功');", "upFly": "var loc = {'direction': core.status.hero.loc.direction, 'x': core.status.event.data.x, 'y': core.status.event.data.y};\ncore.changeFloor(core.status.event.data.id, null, loc, null, function (){\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\tcore.replay();\n});", "downFly": "var loc = {'direction': core.status.hero.loc.direction, 'x': core.status.event.data.x, 'y': core.status.event.data.y};\ncore.changeFloor(core.status.event.data.id, null, loc, null, function (){\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n\tcore.replay();\n});", "poisonWine": "core.setFlag('poison', false);", @@ -357,7 +365,15 @@ items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "curseWine": "core.setFlag('curse', false);", "superWine": "core.setFlag('poison', false);\nif (core.hasFlag('weak')) {\n\tcore.setFlag('weak', false);\n\tcore.status.hero.atk += core.getFlag('weakAtk', core.values.weakValue);\n\tcore.status.hero.def += core.getFlag('weakDef', core.values.weakValue);\n}\ncore.setFlag('curse', false);", "lifeWand": "core.insertAction([\n\t{\"type\": \"input\", \"text\": \"请输入生命魔杖使用次数:(0-${item:lifeWand})\"},\n\t{\"type\": \"if\", \"condition\": \"flag:input<=item:lifeWand\",\n\t\t\"true\": [\n\t\t\t{\"type\": \"setValue\", \"name\": \"item:lifeWand\", \"value\": \"item:lifeWand-flag:input\"},\n\t\t\t{\"type\": \"setValue\", \"name\": \"status:hp\", \"value\": \"status:hp+flag:input*100\"},\n\t\t\t\"成功使用${flag:input}次生命魔杖,恢复${flag:input*100}点生命。\"\n\t\t],\n\t\t\"false\": [\"输入不合法!\"]\n\t},\n]);\ncore.addItem('lifeWand', 1);", - "jumpShoes": "core.insertAction({\"type\":\"jumpHero\",\"loc\":[core.nextX(2),core.nextY(2)]});" + "jumpShoes": "core.insertAction({\"type\":\"jumpHero\",\"loc\":[core.nextX(2),core.nextY(2)]});", + "redPotion": "core.status.hero.hp += core.values.redPotion", + "bluePotion": "core.status.hero.hp += core.values.bluePotion", + "greenPotion": "core.status.hero.hp += core.values.greenPotion", + "yellowPotion": "core.status.hero.hp += core.values.yellowPotion", + "redJewel": "core.status.hero.atk += core.values.redJewel", + "blueJewel": "core.status.hero.def += core.values.blueJewel", + "greenJewel": "core.status.hero.mdef += core.values.greenJewel", + "yellowJewel": "core.insertAction([\n\t{\"type\": \"choices\", \"choices\": [\n\t\t{\"text\": \"攻击+1\", \"action\": [\n\t\t\t{\"type\": \"setValue\", \"name\": \"status:atk\", \"value\": \"status:atk+1\"}\n\t\t]},\n\t\t{\"text\": \"防御+2\", \"action\": [\n\t\t\t{\"type\": \"setValue\", \"name\": \"status:def\", \"value\": \"status:def+2\"}\n\t\t]},\n\t\t{\"text\": \"生命+200\", \"action\": [\n\t\t\t{\"type\": \"setValue\", \"name\": \"status:hp\", \"value\": \"status:hp+200\"}\n\t\t]},\n\t]}\n]);" }, "canUseItemEffect": { "book": "true", @@ -377,6 +393,14 @@ items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "curseWine": "core.hasFlag('curse')", "superWine": "core.hasFlag('poison') || core.hasFlag('weak') || core.hasFlag('curse')", "lifeWand": "true", - "jumpShoes": "var nx=core.nextX(2),ny=core.nextY(2);nx>=0&&nx=0&&ny=0&&nx=0&&ny-g&)Vy^_N;v|C^ZQ(fEe7y_wK3x-Dv@URL9oeNlI2k zOh!aZRP4W}|F;khkUhZlT1Ydw788JGCnu+3Var8c3p?n8!NhZ*0l~9`)5M)KfFl2I zJ_*!I6a-Q6T=D36QRu`EG0G(Lb1C<^a!$#OTC|wk2yTH=7OV*kMY>=ifMY(cxttZqsEW8A?cvKDTFRfc9 zm5#I5>PWxz#mzr%@x!# za|mKPChk8cf?)8)u8WglCK9(HOtnH&f;**YXe7go1{g6t1!16-eS~%1^MJ6>=Q^hj zERLrpa?yOvNe!#G6g6?o^^0Y}9+o|{(%xhRO;9`gGgP( z*%Cnz1{C|5H7crN@�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 G&HfMT4JhjX literal 0 HcmV?d00001 diff --git a/project/sounds/pickaxe.mp3 b/project/sounds/pickaxe.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..be59c534158fb91ad320d0afdc0b9c4ac4e29c0b GIT binary patch literal 3180 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 hsS06*a!EYk-|T;X5P