From c0fcbea20181a86fad38679a037089cdcc0e8201 Mon Sep 17 00:00:00 2001 From: oc Date: Fri, 9 Feb 2018 20:56:05 +0800 Subject: [PATCH] V1.4.1 --- animates/jianji.animate | 1 + docs/event.md | 27 +++++++++++++++++- libs/core.js | 58 +++++++++++++++++++++++++++++++------- libs/data.js | 1 + libs/events.js | 52 ++++++++++++++++++++++++++++++++++ libs/floors/MT0.js | 7 ++++- libs/floors/sample0.js | 7 ++++- libs/floors/sample1.js | 7 ++++- libs/floors/sample2.js | 7 ++++- libs/maps.js | 47 ++++++++++++++++-------------- libs/ui.js | 3 +- main.js | 2 +- 常用工具/RM动画导出器.exe | Bin 33792 -> 33792 bytes 更新说明.txt | 14 ++++++++- 14 files changed, 194 insertions(+), 39 deletions(-) create mode 100644 animates/jianji.animate diff --git a/animates/jianji.animate b/animates/jianji.animate new file mode 100644 index 00000000..2720aafc --- /dev/null +++ b/animates/jianji.animate @@ -0,0 +1 @@ +{"ratio":2,"bitmaps":["","","","","","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJKSURBVHhe7dpNTxNBHMfxAhox0QRNTPSgV+PJiy/DA569E6+ePXD2LCYai0k1JFKpPEgL8rS4FEIrpnApiGmaGpOmBqUgpC07D3aawfgKZhLz/Vxm5re3ncx/ZtqNAQAAAAD+Y1rrLtuFa+blMwGeBUFwxnbhSzKpezodHWM1+DI4qLuZAI+mpyuXbJdJ8CEIyr1/SxHc+fcUlCse3TWtjnEy8mJl/dft0Vl12Q6ZBNdMGUpnxWc7hA+LuWho+L26Z/qUIg9m8gc3n6SkON0buCk7Zk5CM6tifSglQxvBtfHwsP/pmJTDGXXFRnAp9fHHtXehOBh6K5s2gkum7o8siYGwIFV8Sj2wMVxKzB3eSgWRfJWWihuyB8839NnMqhhotqR6MSl3bQyXgkD3Lm/J46W8PB6fVddtDFfae0HPyAcRtlv9Zl6UuRN4sLamzpeqorFTOVGp5ahzQ4ZDnRNRRlbMKhgPo912020fwZVkoK8Wy+J36XskR+eixzaGS68X5ZZZBVNho1Uu614bw5XEvL5R+BodfqtGcmxBPbIxXHo2ITaUXQW1Wu2CjeGK+bdssyTq1b1IZrLqoY3h0stJmejsBSuNk0JZ99kYrrTffdfml6j6sy7EfE7ctzFciqfVHdXeDMwqsBFcyxdlvH4kRKWuTz/ogmt7+yKcyDaapizZCC6Z70k/bbcWstvqoo3gmlLqXGGn2W+H8GF/X/e1yxA/0gGAAxz7PGPDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAs1jsD8fsSMjMXLQKAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAPYSURBVHhe7dxLT5xVGAdwpKKkiYmX1oTExIULozHxMxhjYqILdeta070foBt3rkSUgsO0OIW0XMZhrgwX33BrwULAcilWKQ6ptRKRDpeBmfe5eE49NX4Bz0vG/y+ZzDnPmQXvec6VMDQAAAAAAABAHVPVx1wRfLOdjwRELAiCx10RotLXp6ceFrQBsyEq589rIxIQoWy29IwrIglRCILN5n+WIvDn36egubWDd+27NuBkFImp2T9fvzosz7oqkuCbXYZy07TgqhCF8bmwrSsj79sylqIIFL4vv/zFINOjvQE3Zc/sSagwQ7NtgzzpQuDbt5N77305wNyVl7MuBD4NTmy3JCep3NbPxy4EPtl1v+c7+ri1jyWWlnMuDD51j+y90jMScntSFTfkCHTMa9PwNfqwf4y1M8W3XRh8yt+WJy+kVOM51eSoPOfC4IvZC05dKvD49JJqe5LZha1G9w7/tSDQ5kRRNXtNNTUdvuHC4Is9EcWGuHxrM5TeUTrAzTgCiUBeuLFGPLtKfGWc+10YifDFjvrECO+X7pJkprhmN2fMBM8SI/Lm8s8hrZeIL+f4D5sAJMGz4RtU+XVH9PoK02Agr5kE2NPQ/yMJ7mEjY0f75WL46S/3Q9n6nTlW4LK9IfeZo6r7SH0TkRbTCU2uGol5czsOlqh6UBGdW6Wwp8ifuWWofmeBfUDX+SdipMXTvLa7L7prDqTJKX2Qn5SzLgn1yTxco31A84p09D/St6JPFK+THB+zLG9yrXOIb9Z7AprM60Sts20DXN0ukxxVze14JjwIFvXpuk7CSZMoSMvwTMhVUi39RhLP8LZrAh/saG8dYNoti9ZYdGKRqvlZedU1gw+dKfloZoXFzoIdsxxdKtI+liHPzF4ge4dqZoHqDxscdmd4wCQBv6r2pX2IP1/cIBHT6/uHJOZeUEkHesY1gw+xDB9Va6o2CeslCttTfNM1gQ/xnLxVukdsViG1U+GbLB+m5/W0a65PJ22zu5jjROX471nw4wZRPMe9rqk+mec8URud/XrTwi1aNj+XmQWi3Vl6gD9l8awjrWe2dnjPJmF8gWpfZ8O3XRP4MrZA55hZdsuhdGX4vskF7gU+2aVoa5vH7GZ8ZZQrXxXledcEvlwMtLlGfHf9DlFvgZZdGHxavSMvHtWo0j3Chw+/fwz+haF8sPQT1TqGaMKFwCe7AW/ek09iea5gM46I7fjMFMdbr4bvuBD4ZpLQ2J7ioqtCFNJpPR1LyVOuClG4kJSXXBGiEgSKfw4FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPWtoeEvT/ukTdlu2cUAAAAASUVORK5CYII=","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAScSURBVHhe7dzLT9xVFAdwpFqrxrdt0sSVG6MxMel/0Lgx0YUuXLlw1xj/CRa600QLtLyH0gEKwwzMwDDD8PqVZ0EgQHkIDRShNQK1pcOb+d1zjvfi1fgPcH8N+X42c3/nsuF35p57z/wY8gAAAAAAAOAUE5Hn7BBcMzcfCQiY53nP2yEEJRKRM8cDycNqCEpBgeQjAQFKJlfftEMkIQiet3Luv1IE7vz/FDQ6v/u5eZU8nIwCMTDy5OPGDn7LXiIJrpky1D6oJuwlBKFn1C+uauMvzRilKADpX7PvF8VI/bs3oFN2zJyE0kNqpDhG/TYErrX0b39xLUpUleLzNgQuxfo2Lzb3q2xxEx3aELhk6n5dr7pSGCGubOVvbRhcqunc/qCu06eSZhF0yAEoG5cXOobV103dJOVxumfD4FLqHr9YGhcJtYs0d/HbNgyu6L3gzI009QxOiZQ0E9mwkW9f4aR5npwLZ0SSwyLxQf+yDYMr5kRUmaDsbys+13epXXTGAQh7/O7YvKKROUUNPdRkw0iEK+ZdH+6kndWHitsGKGc2Z6wEx8Kd/MnMkq8WVhXVttNfJgFIgmMdY2r/j8csd2ZJxTz+SCfAnIaQBBfMu7024//w+7rPaxtElWnKmg45oo+q9kfgpI3r7tibUke7+yyjc8qvy9CPtgxhFbgSaqX5rR2WLX0gbR6Qp6l+Po+9wKHIrJzN3FF8eEg8s0K58gTdRQIcK47S0WZW8cGR7o6H/F1vUt5AEhwKp/lix5BPR0pk9U/FoTbatFPggnm3F0ZJbWVZcsTSN6mOUiP8oZ0GF0pb5MrQLLFZBY91ObqRUTsoQw6Zm633At7eE70KRKaXya9po6iO46NqV0rjFJ1cVsz6ru/sKdZ9wX6rJ+/YaThp5rFlZZsuQzkRk4SFVeWXxOmunQYXQu00/GCdRVchMUvhZpL2WsflZTt9Opn6a4eBM6ugSq+C/cN/VsHislI6KfV2+nTSv+cztdFVJcgbm/PN/dergKUmqZ7iT1kcMiuyOEa89kg3BVrPhMpVJP1P7TS4UBTjS70TZicQ2cr6rMvSuh6iL3CptEXtrm2QqULS0EX71zN8wU6BC1dT/FrLbRalE7BwX6n6tJqxU+BKRSvdmr3PcpBTXNNJe8ffPwZ3dN3PD+ljqdLbwdSiUmUJ1WenwJVQK18ammZZeagolCTdIWAzdq66Xe1sPGFJDCm/qMk//v4xOHQzw68kB483Y74epz0bBldM2alIqP7FZZa6TuVHuuR1OwWumI8jqlPE/dOKy1rowIbBpatRvjwyy1LWIlI5yK/aMLh0q4NyXRMs4Qwt2RC4VBCRs3UZEfOty1P/rOBZVZ6kqehtltoMNdoQuBbtJSpqEinAg/tgVKflq1K9GYcz/I0NgWuFUcoVNh0/uMHHE0HQHfKF4qhIY7d//D+JIACxPposRWMWnOFhfunnBpFol7xnQ+CSqf/lcequSeF/UATGHEV/acSRNFCVCQq1DdP39hJcM6Xop3piewlBWHrAn12L8Xf2EoJQ30GP0JgBAAAAAAAAAAAAAAAAAMDJy8v7G+ppS3n2R3dTAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAANMSURBVHhe7dlLT1NREAfwqtFEjboxJm6Nn8Bv4M5ENy5cu3PhypUuSXRrogJqESgBBKVcUlrKowVBjFSjEAXRiBF8JopGEbEFeufhOXq+Auc25f9b3Tuz6p3MnEdjAAAAAAAAUMVUdYt7BACIlMYwjiKFAlQEFAE2OY1ha1oJUATY5DCKKgCuKgAAAAAAAAAANhd7H4Q7oYi1Dclh9whRyT+Rc+iEiNgP35EPL71fpAsoQkQmJ3X76AyVVkp804XAt0SGX/1YJln6w3XohAgkZ3VH7hHJ2hrTzALXowgRqA94/ZvpguIqc6bAF10YfGkflINDEyGvk+qHL0TN/XLepcAHO3ZqA6alZdEyi45PU2nwqRx0afAhntIzE7MstgvsotyWp99YDzyyH9usBfK7qKYLVKfnOWzt4wBF8Cjey8GzeRIxX32lSNKR41JmTPe7NGy0BnMwa+ozY6isaovw+gOFN3t5xqXBh0Q/Fz59FTVTSG0rtGW5mJnUXS5dnSppztouaDZdUFr73wVz80SmKJ0uXZ3M79zqHitCc5rHnr4M7fc3XSDamqVfyaRuc2nYaLYj63tYPn43hwLj3hSVG7PhMZcGH+p65MjolF0JVJeWQzFj6at5xJbUp3iK/nxcZDuF9O4wl27k5IBLgQ/XBmRv6r4omQK8XiDqHKQXLgW+NGb4zuyC6GqZpDXPxZqaytowVD0z97cmzLaUzHLwfI6oIU3jLgW+JDJyZGJa9N1n4kSWzQkBi7F3Lf20svhTND1BYV13eMKFwZe2nOzOPvy3GMuNXi66MPhix05jmh7MzYt25ClMDus+lwJf7HVEywDLg2mShhSvujD4dC2Qo49nRRtSqk0PZY8Lg093hrg8PCXanuO3LgQ+1SR1R0dOtTbJUvX/FVSqW1l+HtwXvZ3jLhcC34JR5rpu1ZoK+z9j02gZ1FNxsxi35+S0C4FvtQGXa7v//XGD64komBPygfpAtWskPOlC4FvPOD+L42AWnUJBdl65qxoM6yEXAp/s/L/VyyOtA/zGhcA3uxW92oUtaaSa0pzoK/Al9wq+2VF0uZPFvUIU3n6S49d75Kx7hSh0DvF3HMwAAAAAAAAAAAAAAAAAAGDjxWJ/Ae8wTjJnuOHhAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAI9SURBVHhe7drLa1NBFMfxaFFRUXfudOGf0LUb165ciDvd+0eo4FbQPmn6ClrtI02ITZPa2BJ8tN1YsYpQLBXxgV1EQTBSbe45x1w4/4JzL+b7Wc35ZRUm98zMzWQAAAAAAP8xM9vnQwBIlGVoR4liAlKBSUCHswxb0zRgEtDhaEUpwKsKAAAAAAAAAAAAAAAABBRfV+HKSsKyZTvrQyQhu24Hxip2xkskIVeR6XYr6vKyM6Sp98ZPQa4qxY5aD9pfdr8PU2GsLPWXm3LDS4QW//r7S/Lny3e95BFC6ytqd/1Fq9mejNMeIbShUtT81JB3qnrII4TUs6DHi/VII5FqRy3KaTJSlqm321H0uyWDTEIC4h3a+LzoXktkY0uveYyQxsvavfpa7cPX6NdYVS97jJBy1ehnc1dtbjVqDkzpKY8Ryr2aHq2smO00Ih0s2w+PEUq8AI/MRc8a39QePI5a+SU74R8hlHzeunILopsfI82WZNdjhNRT0HM77acgWzIbXdFjHiOkqUXZe/NebaIm2x4hpOt5O/h8w6w3L1petyMeI6ThimwUnqjdr8mMRwitUBfpmzW7nrL/MzpG7pFdHGovxhM1veIRQustyF7vrCgv6hLSPiGf7C+YzSy3LniE0IpP5dUQB7PkrK3p4dvTZoUl7hQlIu7/ww9l+e6CbHmE0OKt6J0ZtqSJGp2T8fk1ueklQotb0a1JUS+RhO3Pen6gqFe9RBImF6XBwQwAAAAAAAAAAAAA8O9lMn8BWYFAb1I8LpQAAAAASUVORK5CYII=","","","","","","","","","",""],"frame_max":20,"frames":[[[5,0,0,50,255,0,120]],[[6,0,0,50,255,0,120]],[[7,0,0,50,255,0,120]],[[8,0,0,50,255,0,120]],[[5,0,0,60,255,1,60]],[[5,0,0,60,255,1,60]],[[5,0,0,60,255,1,60]],[[6,0,0,60,255,1,60]],[[7,0,0,60,255,1,60]],[[8,0,0,60,200,1,60]],[[5,-8,-8,60,255,0,60]],[[6,0,-8,60,200,0,60]],[[6,0,-8,60,255,0,60]],[[6,0,-8,60,255,0,60]],[[7,0,-8,60,255,0,60]],[[8,0,-8,60,255,0,60]],[[8,0,-8,60,255,0,60]],[[9,0,-8,60,255,0,60]],[[9,0,-8,60,200,0,60]],[[9,0,-8,60,50,0,60]]]} \ No newline at end of file diff --git a/docs/event.md b/docs/event.md index 919cbb6f..28da579e 100644 --- a/docs/event.md +++ b/docs/event.md @@ -419,13 +419,38 @@ revisit常常使用在一些商人之类的地方,当用户购买物品后不 ] ``` +### setBlock:设置某个图块 + +我们可以采用 `{"type": "setBlock"}` 来改变某个地图块。 + +``` js +"x,y": [ // 实际执行的事件列表 + {"type": "setBlock", "floorId": "MT1", "loc": [3,3], "number": 233}, // 将MT1层的(3,3)点变成数字233 + {"type": "setBlock", "loc": [2,1], "number": 121}, // 省略floorId则默认为本层 + {"type": "setBlock", "number": 57}, // loc也可省略,默认为当前点 +] +``` + +floorId为可选的,表示要更改的目标楼层。如果忽略此项,则默认为当前楼层。 + +loc为可选的,表示要更改地图块的坐标。如果忽略此项,则默认为当前事件点。 + +number为**要更改到的数字**,有关“数字”的定义详见参见[素材的机制](personalization#素材的机制)。 + +图块更改后: + + - 其启用/禁用状态不会发生任何改变。原来是启用还是启用,原来是禁用还是禁用。 + - 可通行状态遵循覆盖原则,即**取该图块的默认noPass属性,如果剧本的events中定义该点的noPass则覆盖**。 + - 其触发器(trigger)亦采用覆盖原则,即**取该图块的默认触发器(例如怪物是battle,道具是getItem,门是openDoor),如果剧本的events中定义了该点的trigger则覆盖**。 + ### update: 立刻更新状态栏和地图显伤 -当我们在上面调用show事件,显示一个怪物后,该怪物将不会有显伤显示。如果你需要刷新状态栏和地图显伤,只需要简单地调用 `{"type": "update"}` 即可。 +如果你需要刷新状态栏和地图显伤,只需要简单地调用 `{"type": "update"}` 即可。 ### sleep: 等待多少毫秒 等价于RMXP中的"等待x帧",不过是以毫秒来计算。 + 基本写法:`{"type": "sleep", "time": xxx}` ,其中xxx为指定的毫秒数。 ``` js diff --git a/libs/core.js b/libs/core.js index befe9eaa..56d32eec 100644 --- a/libs/core.js +++ b/libs/core.js @@ -591,6 +591,7 @@ core.prototype.loadAnimates = function (callback) { data.ratio = content.ratio; data.images = []; + data.images_rev = []; content.bitmaps.forEach(function (t2) { if (!core.isset(t2) || t2=="") { data.images.push(null); @@ -615,7 +616,9 @@ core.prototype.loadAnimates = function (callback) { 'x': t3[1], 'y': t3[2], 'zoom': t3[3], - 'opacity': t3[4] + 'opacity': t3[4], + 'mirror': t3[5]||0, + 'angle': t3[6]||0, }) }) data.frames.push(info); @@ -1687,15 +1690,21 @@ core.prototype.automaticRoute = function (destX, destY) { f=f%169; var nowX = parseInt(f / 13), nowY = f % 13; var nowIsArrow = false, nowId, nowBlock = core.getBlock(nowX,nowY); + /* if (nowBlock!=null){ nowId = nowBlock.block.event.id; nowIsArrow = nowId.slice(0, 5).toLowerCase() == 'arrow'; } + */ for (var direction in scan) { + /* if(nowIsArrow){ var nowArrow = nowId.slice(5).toLowerCase(); if (direction != nowArrow) continue; } + */ + if (!core.canMoveHero(nowX, nowY, direction)) + continue; var nx = nowX + scan[direction].x; var ny = nowY + scan[direction].y; @@ -1711,12 +1720,14 @@ core.prototype.automaticRoute = function (destX, destY) { var nextId, nextBlock = core.getBlock(nx,ny); if (nextBlock!=null){ nextId = nextBlock.block.event.id; + /* // 遇到单向箭头处理 var isArrow = nextId.slice(0, 5).toLowerCase() == 'arrow'; if(isArrow){ var nextArrow = nextId.slice(5).toLowerCase(); if ( (scan[direction].x + scan[nextArrow].x) == 0 && (scan[direction].y + scan[nextArrow].y) == 0 ) continue; } + */ // 绕过亮灯(因为只有一次通行机会很宝贵) if(nextId == "light") deepAdd=100; // 绕过路障 @@ -1925,9 +1936,18 @@ core.prototype.turnHero = function() { } ////// 勇士能否前往某方向 ////// -core.prototype.canMoveHero = function() { - var direction = core.getHeroLoc('direction'); - var nowBlock = core.getBlock(core.getHeroLoc('x'),core.getHeroLoc('y')); +core.prototype.canMoveHero = function(x,y,direction,floorId) { + if (!core.isset(x)) x=core.getHeroLoc('x'); + if (!core.isset(y)) y=core.getHeroLoc('y'); + if (!core.isset(direction)) direction=core.getHeroLoc('direction'); + if (!core.isset(floorId)) floorId=core.status.floorId; + + // 检查当前块的cannotMove + var cannotMove = core.floors[floorId].cannotMove[x+","+y]; + if (core.isset(cannotMove) && cannotMove instanceof Array && cannotMove.indexOf(direction)>=0) + return false; + + var nowBlock = core.getBlock(x,y,floorId); if (nowBlock!=null){ nowId = nowBlock.block.event.id; var nowIsArrow = nowId.slice(0, 5).toLowerCase() == 'arrow'; @@ -1944,7 +1964,7 @@ core.prototype.canMoveHero = function() { 'down': {'x': 0, 'y': 1}, 'right': {'x': 1, 'y': 0} }; - var nextBlock = core.getBlock(core.nextX(),core.nextY()); + var nextBlock = core.getBlock(x+scan[direction].x,y+scan[direction].y); if (nextBlock!=null){ nextId = nextBlock.block.event.id; // 遇到单向箭头处理 @@ -1991,6 +2011,8 @@ core.prototype.canMoveDirectly = function (destX,destY) { ////// 让勇士开始移动 ////// core.prototype.moveHero = function (direction, callback) { + // 如果正在移动,直接return + if (core.status.heroMoving>0) return; if (core.isset(direction)) core.setHeroLoc('direction', direction); if (!core.isset(callback)) { // 如果不存在回调函数,则使用heroMoveTrigger @@ -2978,6 +3000,7 @@ core.prototype.showBlock = function(x, y, floodId) { // core.setGlobalAnimate(core.values.animateSpeed); core.syncGlobalAnimate(); } + core.updateStatusBar(); } } @@ -3160,7 +3183,22 @@ core.prototype.drawAnimate = function (name, x, y, callback) { var realWidth = image.width * ratio * t.zoom / 100; var realHeight = image.height * ratio * t.zoom / 100; core.setAlpha('animate', t.opacity / 255); - core.canvas.animate.drawImage(image, centerX+t.x-realWidth/2, centerY+t.y-realHeight/2, realWidth, realHeight); + + var cx = centerX+t.x, cy=centerY+t.y; + + if (!t.mirror && !t.angle) { + core.canvas.animate.drawImage(image, cx-realWidth/2, cy-realHeight/2, realWidth, realHeight); + } + else { + core.saveCanvas('animate'); + core.canvas.animate.translate(cx,cy); + if (t.angle) + core.canvas.animate.rotate(-t.angle*Math.PI/180); + if (t.mirror) + core.canvas.animate.scale(-1,1); + core.canvas.animate.drawImage(image, -realWidth/2, -realHeight/2, realWidth, realHeight); + core.loadCanvas('animate'); + } }) } @@ -3464,13 +3502,13 @@ core.prototype.setWeather = function (type, level) { // 当前天气:则忽略 if (type==core.animateFrame.weather.type && - (!core.isset(level) || 16*level==core.animateFrame.weather.level)) { + (!core.isset(level) || 20*level==core.animateFrame.weather.level)) { return; } if (!core.isset(level)) level=5; if (level<1) level=1; if (level>10) level=10; - level *= 16; + level *= 20; core.clearMap('weather', 0, 0, 416, 416) core.animateFrame.weather.type = type; @@ -3483,7 +3521,7 @@ core.prototype.setWeather = function (type, level) { core.animateFrame.weather.nodes.push({ 'x': Math.random()*416, 'y': Math.random()*416, - 'l': Math.random() * 1.2, + 'l': Math.random() * 2.5, 'xs': -4 + Math.random() * 4 + 2, 'ys': Math.random() * 10 + 10 }) @@ -3494,7 +3532,7 @@ core.prototype.setWeather = function (type, level) { core.animateFrame.weather.nodes.push({ 'x': Math.random()*416, 'y': Math.random()*416, - 'r': Math.random() * 4 + 1, + 'r': Math.random() * 5 + 1, 'd': Math.random() * level, }) } diff --git a/libs/data.js b/libs/data.js index 0858eea7..79200541 100644 --- a/libs/data.js +++ b/libs/data.js @@ -159,6 +159,7 @@ data.prototype.init = function() { "bombFourDirections": true, // 使用炸弹是否四个方向都会炸;如果false则只炸面前的怪物(即和圣锤等价) "bigKeyIsBox": false, // 如果此项为true,则视为钥匙盒,红黄蓝钥匙+1;若为false,则视为大黄门钥匙 "equipment": false, // 剑和盾是否直接作为装备。如果此项为true,则作为装备,需要在道具栏使用,否则将直接加属性。 + "enableDeleteItem": true, // 是否允许删除(丢弃)道具 /****** 怪物相关 ******/ "enableNegativeDamage": true, // 是否支持负伤害(回血) "hatredDecrease": true, // 是否在和仇恨怪战斗后减一半的仇恨值,此项为false则和仇恨怪不会扣减仇恨值。 diff --git a/libs/events.js b/libs/events.js index a7bd57ad..b80f61f0 100644 --- a/libs/events.js +++ b/libs/events.js @@ -334,6 +334,33 @@ events.prototype.doAction = function() { } else this.doAction(); break; + case "setBlock": // 设置某图块 + { + if (core.isset(data.loc)) { + x=data.loc[0]; + y=data.loc[1]; + } + var floorId = data.floorId||core.status.floorId; + var originBlock=core.getBlock(x,y,toId,false); + var block = core.maps.getBlock(x,y,data.number); + core.maps.addInfo(block); + core.maps.addEvent(block,x,y,core.floors[floorId].events[x+","+y]); + core.maps.addChangeFloor(block,x,y,core.floors[floorId].changeFloor[x+","+y]); + if (core.isset(block.event)) { + if (originBlock==null) { + core.status.maps[floorId].blocks.push(block); + } + else { + originBlock.block.id = data.number; + originBlock.block.event = block.event; + } + core.drawMap(floorId); + core.drawHero(core.getHeroLoc('direction'), core.getHeroLoc('x'), core.getHeroLoc('y'), 'stop'); + core.updateStatusBar(); + } + this.doAction(); + break; + } case "animate": // 显示动画 if (core.isset(data.loc)) { if (data.loc == 'hero') { @@ -1302,6 +1329,18 @@ events.prototype.clickToolbox = function(x,y) { core.ui.closePanel(); return; } + if (x>=10 && x<=12 && y<=1) { + if (!core.isset(core.status.event.data)) return; + if (!core.flags.enableDeleteItem) { + core.drawTip("不支持删除道具!"); + return; + } + core.removeItem(core.status.event.data); + core.status.event.data = null; + core.ui.drawToolbox(); + return; + } + var index=0; if (y==4||y==5||y==9||y==10) index=parseInt(x/2); else index=6+parseInt(x/2); @@ -1406,6 +1445,19 @@ events.prototype.keyUpToolbox = function (keycode) { this.clickToolboxIndex(core.status.event.selection); return; } + + if (keycode==46) { // delete + if (!core.isset(core.status.event.data)) return; + if (!core.flags.enableDeleteItem) { + core.drawTip("不支持删除道具!"); + return; + } + core.removeItem(core.status.event.data); + core.status.event.data = null; + core.ui.drawToolbox(); + return; + } + } ////// 存读档界面时的点击操作 ////// diff --git a/libs/floors/MT0.js b/libs/floors/MT0.js index 8ccee59e..602637a4 100644 --- a/libs/floors/MT0.js +++ b/libs/floors/MT0.js @@ -32,6 +32,11 @@ main.floors.MT0 = { }, "afterOpenDoor": { // 开完门后可能触发的事件列表 - } + }, + "cannotMove": { // 每个图块不可通行的方向 + // 可以在这里定义每个点不能前往哪个方向,例如悬崖边不能跳下去 + // "x,y": ["up", "left"], // (x,y)点不能往上和左走 + + }, } diff --git a/libs/floors/sample0.js b/libs/floors/sample0.js index ee23ced3..38118dd7 100644 --- a/libs/floors/sample0.js +++ b/libs/floors/sample0.js @@ -109,7 +109,12 @@ main.floors.sample0 = { }, "afterOpenDoor": { // 开完门后可能触发的事件列表 "11,12": ["你开了一个绿门,触发了一个afterOpenDoor事件"] - } + }, + "cannotMove": { // 每个图块不可通行的方向 + // 可以在这里定义每个点不能前往哪个方向,例如悬崖边不能跳下去 + // "x,y": ["up", "left"], // (x,y)点不能往上和左走 + + }, } diff --git a/libs/floors/sample1.js b/libs/floors/sample1.js index f896de9e..4fbc0fd7 100644 --- a/libs/floors/sample1.js +++ b/libs/floors/sample1.js @@ -321,6 +321,11 @@ main.floors.sample1 = { }, "afterOpenDoor": { // 开完门后可能触发的事件列表 - } + }, + "cannotMove": { // 每个图块不可通行的方向 + // 可以在这里定义每个点不能前往哪个方向,例如悬崖边不能跳下去 + // "x,y": ["up", "left"], // (x,y)点不能往上和左走 + + }, } diff --git a/libs/floors/sample2.js b/libs/floors/sample2.js index a122b8df..d57b5b2f 100644 --- a/libs/floors/sample2.js +++ b/libs/floors/sample2.js @@ -401,6 +401,11 @@ main.floors.sample2 = { }, "afterOpenDoor": { // 开完门后可能触发的事件列表 - } + }, + "cannotMove": { // 每个图块不可通行的方向 + // 可以在这里定义每个点不能前往哪个方向,例如悬崖边不能跳下去 + // "x,y": ["up", "left"], // (x,y)点不能往上和左走 + + }, } diff --git a/libs/maps.js b/libs/maps.js index dce6c382..b301d9d4 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -14,27 +14,7 @@ maps.prototype.loadFloor = function (floorId, map) { for (var i = 0; i < 13; i++) { for (var j = 0; j < 13; j++) { var block = this.getBlock(j, i, map[i][j]); - if (core.isset(block.event)) { - if (block.event.cls == 'enemys' && block.event.trigger==undefined) { - block.event.trigger = 'battle'; - } - if (block.event.cls == 'items' && block.event.trigger==undefined) { - block.event.trigger = 'getItem'; - } - if (block.event.noPass == undefined) { - if (block.event.cls=='enemys' || block.event.cls=='terrains' || block.event.cls=='npcs') { - block.event.noPass = true; - } - } - if (block.event.animate == undefined) { - if (block.event.cls=='enemys' || block.event.cls=='npcs') { - block.event.animate = 2; - } - if (block.event.cls == 'animates') { - block.event.animate = 4; - } - } - } + this.addInfo(block); this.addEvent(block,j,i,floor.events[j+","+i]) this.addChangeFloor(block,j,i,floor.changeFloor[j+","+i]); if (core.isset(block.event)) blocks.push(block); @@ -257,6 +237,31 @@ maps.prototype.getBlock = function (x, y, id) { return tmp; } +////// 添加一些信息到block上 ////// +maps.prototype.addInfo = function (block) { + if (core.isset(block.event)) { + if (block.event.cls == 'enemys' && block.event.trigger==undefined) { + block.event.trigger = 'battle'; + } + if (block.event.cls == 'items' && block.event.trigger==undefined) { + block.event.trigger = 'getItem'; + } + if (block.event.noPass == undefined) { + if (block.event.cls=='enemys' || block.event.cls=='terrains' || block.event.cls=='npcs') { + block.event.noPass = true; + } + } + if (block.event.animate == undefined) { + if (block.event.cls=='enemys' || block.event.cls=='npcs') { + block.event.animate = 2; + } + if (block.event.cls == 'animates') { + block.event.animate = 4; + } + } + } +} + ////// 向该楼层添加剧本的自定义事件 ////// maps.prototype.addEvent = function (block, x, y, event) { if (!core.isset(event)) return; diff --git a/libs/ui.js b/libs/ui.js index d96a1fa9..5ac798bc 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -481,7 +481,7 @@ ui.prototype.drawBattleAnimate = function(monsterId, callback) { var initDamage = 0; // 战前伤害 // 吸血 - if (this.hasSpecial(mon_special, 11)) { + if (core.enemys.hasSpecial(mon_special, 11)) { var vampireDamage = hero_hp * monster.value; // 如果有神圣盾免疫吸血等可以在这里写 @@ -1207,6 +1207,7 @@ ui.prototype.drawToolbox = function(index) { // 退出 core.canvas.ui.textAlign = 'center'; + core.fillText('ui', '删除道具', 370, 32,'#DDDDDD', 'bold 15px Verdana'); core.fillText('ui', '返回游戏', 370, 403,'#DDDDDD', 'bold 15px Verdana'); } diff --git a/main.js b/main.js index 3ef78144..ccbf162e 100644 --- a/main.js +++ b/main.js @@ -20,7 +20,7 @@ function main() { ]; this.animates = [ // 在此存放所有可能使用的动画,必须是animate格式,在这里不写后缀名 // 动画必须放在animates目录下;文件名不能使用中文,不能带空格或特殊字符 - "hand", "sword", "zone", "yongchang", // "thunder" // 根据需求自行添加 + "hand", "sword", "zone", "yongchang", // "jianji", "thunder" // 根据需求自行添加 ]; this.bgms = [ // 在此存放所有的bgm,和文件名一致。第一项为默认播放项 // 音频名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好 diff --git a/常用工具/RM动画导出器.exe b/常用工具/RM动画导出器.exe index 9206e88fcdf50b263138e6bcc638bff94f01089d..0e762d67695a42ca135c482e611e77202c42a737 100644 GIT binary patch delta 14508 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 diff --git a/更新说明.txt b/更新说明.txt index d6e43c3e..63fe424a 100644 --- a/更新说明.txt +++ b/更新说明.txt @@ -1,4 +1,16 @@ -HTML5魔塔样板V1.3.3 +HTML5魔塔样板V1.4.1 + +改变图块(setBlock事件)。 +同一个点的多事件处理(做法详见文档)。 +地图中每个块的可通行方向控制(悬崖效果)。 +动画支持带旋转和翻转的帧。 +现在可以允许用户丢弃道具了(例如不会再使用的装备)。 +修复行走时按键会发生动画抖动问题。 +修复无法打开战斗动画的Bug。 + +----------------------------------------------------------------------- + +HTML5魔塔样板V1.4 动画!动画!!动画!!! 瞬间移动。