From 951b26fad5398c7df54b77d273fe0e736124c4ba Mon Sep 17 00:00:00 2001 From: oc Date: Mon, 9 Jul 2018 22:59:18 +0800 Subject: [PATCH 1/8] V2.3.2 --- README.md | 16 ++++++++++++++++ main.js | 2 +- project/data.js | 2 +- 更新说明.txt | 21 +++++++++++---------- 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 646ba1e8..e2436be6 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,7 @@ HTML5 canvas制作的魔塔样板,支持全平台游戏! │ └─ 伤害和临界值计算器.exe # 一个能帮助计算怪物的伤害和临界值的小工具。 http://github.com/ckcz123/magic-tower-calculator/ ├── /启动服务(mac版).app/ # 启动服务的mac版本。 ├── editor.html # 可视化地图编辑工具 +├── editor-mobile.html # 可视化地图编辑工具(手机版) ├── index.html # 主程序,游戏的入口 ├── main.js # JS程序的入口,将动态对所需JS进行加载 ├── style.css # 游戏所需要用到的样式表 @@ -58,6 +59,21 @@ HTML5 canvas制作的魔塔样板,支持全平台游戏! ## 更新说明 +### 2018.7.9 V2.3.3 + +适配手机端的造塔页面 +启动服务的多开版本 +事件:跟随效果 +怪物数据导出器 +RM动画导出器也能导出音效 +gif播放可随着分辨率自动放缩 +状态栏可随文字长度自动调整放缩 +也可以用status:exp来代替经验值的写法 +V键也可以打开快捷商店 +破炸在周围只有一个目标时无需转向面对它 +道具效果中,无需再将null改成""才能双击编辑了 +各个已知Bug的修复,部分细节优化 + ### 2018.6.16 V2.3.1 * [x] 存档采用高比率压缩,单个大小是原来的1/10! diff --git a/main.js b/main.js index 5f19aee0..20ccef09 100644 --- a/main.js +++ b/main.js @@ -2,7 +2,7 @@ function main() { //------------------------ 用户修改内容 ------------------------// - this.version = "2.3.1"; // 游戏版本号;如果更改了游戏内容建议修改此version以免造成缓存问题。 + this.version = "2.3.2"; // 游戏版本号;如果更改了游戏内容建议修改此version以免造成缓存问题。 this.useCompress = false; // 是否使用压缩文件 // 当你即将发布你的塔时,请使用“JS代码压缩工具”将所有js代码进行压缩,然后将这里的useCompress改为true。 diff --git a/project/data.js b/project/data.js index 2a1ca82d..1600b72c 100644 --- a/project/data.js +++ b/project/data.js @@ -26,7 +26,7 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "firstData" : { "title": "魔塔样板", "name": "template", - "version": "Ver 2.3.1", + "version": "Ver 2.3.2", "floorId": "sample0", "hero": { "name": "阳光", diff --git a/更新说明.txt b/更新说明.txt index 43aa8145..692c6410 100644 --- a/更新说明.txt +++ b/更新说明.txt @@ -1,16 +1,17 @@ HTML5魔塔样板V2.3.2 -启动服务的多开版本 √ -跟随效果 √ +适配手机端的造塔页面 +启动服务的多开版本 +事件:跟随效果 怪物数据导出器 -RM动画导出器也能导出音效 √ -gif播放可随着分辨率自动放缩 √ -状态栏可随文字长度自动调整放缩 √ -也可以用status:exp来代替经验值的写法 √ -V键也可以打开快捷商店 √ -破炸在周围只有一个目标时无需转向面对它 √ -道具效果中,无需再将null改成""才能双击编辑了 √ -各个已知Bug的修复,部分细节优化 √ +RM动画导出器也能导出音效 +gif播放可随着分辨率自动放缩 +状态栏可随文字长度自动调整放缩 +也可以用status:exp来代替经验值的写法 +V键也可以打开快捷商店 +破炸在周围只有一个目标时无需转向面对它 +道具效果中,无需再将null改成""才能双击编辑了 +各个已知Bug的修复,部分细节优化 ----------------------------------------------------------------------- From 735545e0aaf77c766a271acdada84fc0e2bbc82b Mon Sep 17 00:00:00 2001 From: oc Date: Mon, 9 Jul 2018 23:00:21 +0800 Subject: [PATCH 2/8] V2.3.2 --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index e2436be6..66eeffb1 100644 --- a/README.md +++ b/README.md @@ -61,18 +61,18 @@ HTML5 canvas制作的魔塔样板,支持全平台游戏! ### 2018.7.9 V2.3.3 -适配手机端的造塔页面 -启动服务的多开版本 -事件:跟随效果 -怪物数据导出器 -RM动画导出器也能导出音效 -gif播放可随着分辨率自动放缩 -状态栏可随文字长度自动调整放缩 -也可以用status:exp来代替经验值的写法 -V键也可以打开快捷商店 -破炸在周围只有一个目标时无需转向面对它 -道具效果中,无需再将null改成""才能双击编辑了 -各个已知Bug的修复,部分细节优化 +* [x] 适配手机端的造塔页面 +* [x] 启动服务的多开版本 +* [x] 新增事件:跟随效果 +* [x] 怪物数据导出器 +* [x] RM动画导出器也能导出音效 +* [x] gif播放可随着分辨率自动放缩 +* [x] 状态栏可随文字长度自动调整放缩 +* [x] 也可以用status:exp来代替经验值的写法 +* [x] V键也可以打开快捷商店 +* [x] 破炸在周围只有一个目标时无需转向面对它 +* [x] 道具效果中,无需再将null改成""才能双击编辑了 +* [x] 各个已知Bug的修复,部分细节优化 ### 2018.6.16 V2.3.1 From 9c01d0fefb341b64acceaacd59ee14c838840cba Mon Sep 17 00:00:00 2001 From: oc Date: Mon, 9 Jul 2018 23:19:16 +0800 Subject: [PATCH 3/8] 10 floors fly --- README.md | 1 + libs/actions.js | 8 ++++++-- libs/ui.js | 14 ++++++++++---- 更新说明.txt | 1 + 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 66eeffb1..4ea48018 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,7 @@ HTML5 canvas制作的魔塔样板,支持全平台游戏! * [x] RM动画导出器也能导出音效 * [x] gif播放可随着分辨率自动放缩 * [x] 状态栏可随文字长度自动调整放缩 +* [x] 楼传器一次可以翻10层 * [x] 也可以用status:exp来代替经验值的写法 * [x] V键也可以打开快捷商店 * [x] 破炸在周围只有一个目标时无需转向面对它 diff --git a/libs/actions.js b/libs/actions.js index 35e5f9d4..8ac8964f 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -931,6 +931,8 @@ actions.prototype.clickBookDetail = function () { actions.prototype.clickFly = function(x,y) { if ((x==10 || x==11) && y==9) core.ui.drawFly(core.status.event.data-1); if ((x==10 || x==11) && y==5) core.ui.drawFly(core.status.event.data+1); + if ((x==10 || x==11) && y==10) core.ui.drawFly(core.status.event.data-10); + if ((x==10 || x==11) && y==4) core.ui.drawFly(core.status.event.data+10); if (x>=5 && x<=7 && y==12) core.ui.closePanel(); if (x>=0 && x<=9 && y>=3 && y<=11) { var index=core.status.hero.flyRange.indexOf(core.status.floorId); @@ -948,8 +950,10 @@ actions.prototype.clickFly = function(x,y) { ////// 楼层传送器界面时,按下某个键的操作 ////// actions.prototype.keyDownFly = function (keycode) { - if (keycode==37 || keycode==38) core.ui.drawFly(core.status.event.data+1); - else if (keycode==39 || keycode==40) core.ui.drawFly(core.status.event.data-1); + if (keycode==37) core.ui.drawFly(core.status.event.data-10); + else if ( keycode==38) core.ui.drawFly(core.status.event.data+1); + else if (keycode==39) core.ui.drawFly(core.status.event.data+10); + else if (keycode==40) core.ui.drawFly(core.status.event.data-1); return; } diff --git a/libs/ui.js b/libs/ui.js index 20586634..eab5c194 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -1419,10 +1419,16 @@ ui.prototype.drawFly = function(page) { core.fillText('ui', '楼层跳跃', 208, 60, '#FFFFFF', "bold 28px Verdana"); core.fillText('ui', '返回游戏', 208, 403, '#FFFFFF', "bold 15px Verdana") core.fillText('ui', title, 356, 247, '#FFFFFF', "bold 19px Verdana"); - if (page0) - core.fillText('ui', '▼', 356, 247+64, '#FFFFFF', "17px Verdana"); + if (page0) { + core.fillText('ui', '▼', 356, 247 + 64, '#FFFFFF', "17px Verdana"); + core.fillText('ui', '▼', 356, 247 + 96, '#FFFFFF', "17px Verdana"); + core.fillText('ui', '▼', 356, 247 + 96 + 7, '#FFFFFF', "17px Verdana"); + } core.strokeRect('ui', 20, 100, 273, 273, '#FFFFFF', 2); this.drawThumbnail(floorId, 'ui', core.status.maps[floorId].blocks, 20, 100, 273); } diff --git a/更新说明.txt b/更新说明.txt index 692c6410..67077a85 100644 --- a/更新说明.txt +++ b/更新说明.txt @@ -7,6 +7,7 @@ RM动画导出器也能导出音效 gif播放可随着分辨率自动放缩 状态栏可随文字长度自动调整放缩 +楼传器一次可以翻10层 也可以用status:exp来代替经验值的写法 V键也可以打开快捷商店 破炸在周围只有一个目标时无需转向面对它 From 7aa6c7ed957887558b4e240408f31207378a3f75 Mon Sep 17 00:00:00 2001 From: oc Date: Tue, 10 Jul 2018 00:23:13 +0800 Subject: [PATCH 4/8] Fix page bug --- libs/actions.js | 4 ++-- libs/ui.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/actions.js b/libs/actions.js index 8ac8964f..4c0e2d67 100644 --- a/libs/actions.js +++ b/libs/actions.js @@ -1188,8 +1188,8 @@ actions.prototype.clickToolbox = function(x,y) { } // 下一页 if ((x == 8 || x == 9) && y == 12) { - var toolPage = parseInt(Object.keys(core.status.hero.items.tools).length/12)+1, - constantPage = parseInt(Object.keys(core.status.hero.items.constants).length/12)+1; + var toolPage = Math.ceil(Object.keys(core.status.hero.items.tools).length/12), + constantPage = Math.ceil(Object.keys(core.status.hero.items.constants).length/12); if (page Date: Thu, 12 Jul 2018 12:05:04 +0800 Subject: [PATCH 5/8] Fix setInitData Bug --- libs/core.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/core.js b/libs/core.js index 264a76d4..66b7c12a 100644 --- a/libs/core.js +++ b/libs/core.js @@ -310,7 +310,7 @@ core.prototype.resetStatus = function(hero, hard, floorId, route, maps, values) ////// 开始游戏 ////// core.prototype.startGame = function (hard, callback) { - core.control.startGame(hard, callback);huo + core.control.startGame(hard, callback); } ////// 重新开始游戏;此函数将回到标题页面 ////// From 1d70bcd1311975a4d0d0617f15b15b8173726dc7 Mon Sep 17 00:00:00 2001 From: oc Date: Thu, 19 Jul 2018 02:08:04 +0800 Subject: [PATCH 6/8] Move enemy functions to proect --- _server/blockly/MotaAction.g4 | 17 ++ _server/data.comment.js | 6 + _server/editor_blockly.js | 1 + _server/functions.comment.js | 24 +++ docs/api.md | 2 +- docs/event.md | 40 +++-- editor-mobile.html | 4 +- libs/control.js | 22 +-- libs/core.js | 11 +- libs/enemys.js | 292 +++++++++++----------------------- libs/events.js | 8 +- libs/ui.js | 6 +- project/data.js | 3 +- project/functions.js | 138 +++++++++++++++- 更新说明.txt | 13 +- 15 files changed, 353 insertions(+), 234 deletions(-) diff --git a/_server/blockly/MotaAction.g4 b/_server/blockly/MotaAction.g4 index ab728be1..16938dcb 100644 --- a/_server/blockly/MotaAction.g4 +++ b/_server/blockly/MotaAction.g4 @@ -193,6 +193,7 @@ action | setBlock_s | setHeroIcon_s | update_s + | updateEnemys_s | sleep_s | wait_s | battle_s @@ -496,6 +497,18 @@ var code = '{"type": "update"},\n'; return code; */; +updateEnemys_s + : '更新怪物数据' Newline + + +/* updateEnemys_s +tooltip : updateEnemys: 立刻更新怪物数据 +helpUrl : https://ckcz123.github.io/mota-js/#/event?id=updateEnemys%ef%bc%9a%e6%9b%b4%e6%96%b0%e6%80%aa%e7%89%a9%e6%95%b0%e6%8d%ae +colour : this.dataColor +var code = '{"type": "updateEnemys"},\n'; +return code; +*/; + sleep_s : '等待' Int '毫秒' Newline @@ -1702,6 +1715,10 @@ ActionParser.prototype.parseAction = function() { this.next = MotaActionBlocks['update_s'].xmlText([ this.next]); break; + case "updateEnemys": + this.next = MotaActionBlocks['updateEnemys_s'].xmlText([ + this.next]); + break; case "sleep": // 等待多少毫秒 this.next = MotaActionBlocks['sleep_s'].xmlText([ data.time,this.next]); diff --git a/_server/data.comment.js b/_server/data.comment.js index 83bcb8a9..74cd5fea 100644 --- a/_server/data.comment.js +++ b/_server/data.comment.js @@ -495,6 +495,12 @@ data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = "_bool": "bool", "_data": "夹击方式是向上取整还是向下取整。如果此项为true则为向上取整,为false则为向下取整" }, + "useLoop": { + "_leaf": true, + "_type": "checkbox", + "_bool": "bool", + "_data": "是否循环计算临界;如果此项为true则使用循环法(而不是回合数计算法)来算临界" + }, "startDirectly": { "_leaf": true, "_type": "checkbox", diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index dfbe4314..d5898b3e 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -87,6 +87,7 @@ editor_blockly = function () { MotaActionBlocks['setValue_s'].xmlText(), MotaActionBlocks['input_s'].xmlText(), MotaActionBlocks['update_s'].xmlText(), + MotaActionBlocks['updateEnemys_s'].xmlText(), MotaActionBlocks['moveHero_s'].xmlText(), MotaActionBlocks['jumpHero_s'].xmlText(), MotaActionBlocks['changeFloor_s'].xmlText(), diff --git a/_server/functions.comment.js b/_server/functions.comment.js index dd9466e7..cc426cae 100644 --- a/_server/functions.comment.js +++ b/_server/functions.comment.js @@ -99,6 +99,30 @@ functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = } } }, + "enemy": { + "_leaf": false, + "_type": "object", + "_data": { + "getSpecials": { + "_leaf": true, + "_type": "textarea", + "_lint": true, + "_data": "怪物特殊属性的定义(获得怪物的特殊属性)" + }, + "getDamageInfo": { + "_leaf": true, + "_type": "textarea", + "_lint": true, + "_data": "获得战斗伤害信息(实际伤害计算函数)" + }, + "updateEnemys": { + "_leaf": true, + "_type": "textarea", + "_lint": true, + "_data": "更新怪物数据,可以在这里对怪物属性和数据进行动态更新" + } + } + }, "plugins": { "_leaf": false, "_type": "object", diff --git a/docs/api.md b/docs/api.md index e2a9fd86..eaa6f276 100644 --- a/docs/api.md +++ b/docs/api.md @@ -338,7 +338,7 @@ core.enemys.getDamageInfo(enemy, hero_hp, hero_atk, hero_def, hero_mdef) core.enemys.calDamage(enemy, hero_hp, hero_atk, hero_def, hero_mdef) -计算战斗伤害;实际返回的是上面getDamageInfo中伤害的数值。 +获得在某个勇士属性下怪物伤害;实际返回的是上面getDamageInfo中伤害的数值。 core.enemys.getCurrentEnemys(floorId) diff --git a/docs/event.md b/docs/event.md index 1bf94a19..cfeb84ed 100644 --- a/docs/event.md +++ b/docs/event.md @@ -509,6 +509,12 @@ name是可选的,代表目标行走图的文件名。 如果你需要刷新状态栏和地图显伤,只需要简单地调用 `{"type": "update"}` 即可。 +### updateEnemys:更新怪物数据 + +使用 `{"type": "updateEnemys"}` 可以动态修改怪物数据。 + +详见[怪物数据的动态修改](#怪物数据的动态修改)。 + ### sleep:等待多少毫秒 等价于RMXP中的"等待x帧",不过是以毫秒来计算。 @@ -1591,25 +1597,33 @@ core.insertAction([ 而在我们的存档中,是不会对怪物数据进行存储的,只会存各个变量和Flag,因此我们需要在读档后根据变量或Flag来调整怪物数据。 -我们可以在脚本编辑中的`afterLoadData`进行处理。 +我们可以在脚本编辑中的`updateEnemys`进行处理。 ``` js ////// 读档事件后,载入事件前,可以执行的操作 ////// -"afterLoadData" : function(data) { - // 读档事件后,载入事件前,可以执行的操作 - if (core.hasFlag("fengyin")) { // 如果存在封印(flag为真) - core.material.enemys.blackKing.hp/=10; // 将怪物的血量变成原来的十分之一 - // ... - } - // 同样难度分歧可以类似写 if (core.getFlag('hard', 0)==3) {... +"updateEnemys" : function () { + // 更新怪物数据,可以在这里对怪物属性和数据进行动态更新,详见文档——事件——怪物数据的动态修改 + // 比如下面这个例子,如果flag:xxx为真,则将绿头怪的攻击设为100,红头怪的金币设为20 + // 推荐写变化后的具体数值,以免多次变化导致冲突 + /* + // 如果flag:xxx为真;你也可以写其他判断语句比如core.hasItem(...)等等 + if (core.hasFlag('xxx')) { + core.material.enemys.greenSlime.atk = 100; + core.material.enemys.redSlime.money = 20; + } + */ + // 别忘了在事件中调用“更新怪物数据”事件! } +``` -// 在封印时,可以调用setValue将该flag置为真,然后调用自定义脚本 core.afterLoadData() 即可。 +当我们获得一个道具(或者触发某个事件等)后,需要在事件中调用“更新怪物数据”事件。 + +``` js +// 调用`updateEnemys`(更新怪物数据)事件就可以触发了 "x,y": [ - {"type": "setValue", "name": "flag:fengyin", "value": "true"}, // 封印 - {"type": "function", "function": function() { // 手动调用自定义JS脚本 core.afterLoadData() - core.afterLoadData(); - }} + "将flag:xxx置为真,就可以让怪物数据发生改变!", + {"type": "setValue", "name": "flag:xxx", "value": "true"}, // 将flag:xxx置为真 + {"type": "updateEnemys"} // 更新怪物数据;此时绿头怪攻击就会变成100了 ] ``` diff --git a/editor-mobile.html b/editor-mobile.html index 954e81e1..8d22e24f 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -244,6 +244,7 @@ +