diff --git a/_docs/element.md b/_docs/element.md
index 099a9fca..a4eac405 100644
--- a/_docs/element.md
+++ b/_docs/element.md
@@ -12,7 +12,7 @@
大多数宝物都有默认的效果,屠龙匕首暂未定义,如有自己的需求可参见[自定义道具效果](personalization#自定义道具效果)。
-拿到道具后将触发`afterGetItem`事件,有关事件的详细介绍请参见[事件](event)。
+拿到道具后将触发`afterGetItem`事件(从V2.7起,`afterGetItem` 脚本提供了一个参数表示该道具是否是通过轻按捡到的,对应的事件也允许在轻按时不予触发),有关事件的详细介绍请参见[事件](event)。
如需修改某个道具的效果,在不同区域宝石数据发生变化等问题,请参见[自定义道具效果](personalization#自定义道具效果)的说明。
**有关轻按,在全塔属性的系统开关中有定义。如果勾选了 `enableGentleClick` ,则鼠标(触摸屏)通过双击勇士,键盘通过空格,手机通过虚拟数字键 7 可达到轻按效果,即不移动而获得周围物品。**
@@ -38,35 +38,11 @@
如果要将一个道具设置为装备,首先需要将其`cls`设为`equips`。
-然后在图块属性的`equip`一项中设置装备的具体属性。该项写法如下:
-``` json
-{"type": 0, "atk": 0, "def": 0, "mdef": 0, "animate": "hand", "percentage": true}
-```
-
-type为该装备的类型,必填,和上面装备栏一一对应。例如,0就是武器,2就是首饰等等。
-
-atk/def/mdef为该装备分别增加的攻防护盾数值(支持负数);如果不加也可省略不写。
-
-从V2.6开始,可以拓展到任何勇士的属性,如hpmax, atk, def, mdef, exp等等;自行添加的属性包括攻速speed也能使用。
-
-animate为该装备的攻击动画,仅对type为0时有效。具体可参见[动画和天气系统](#动画和天气系统)。
-
-percentage为该装备是否按比例增加属性。
-
-下面是几个写法例子。
-``` json
-{"type": 0, "atk": 10} // 装备类型是武器,效果是攻击+10,使用默认的攻击动画
-{"type": 0, "atk": 40, "animate": "sword"} // 装备类型为武器,效果是攻击+10,攻击动画是sword
-{"type": 1, "def": 40, "percentage": true} // 装备类型是防具,效果是防御提升40%
-{"type": 1, "def": 100, "mdef": 100} // 装备类型是防具,效果是防御和护盾各+100
-{"type": 3, "atk": -20, "def": 50, "mdef": 50} // 装备类型是魔杖,效果是攻击-20,防御和护盾各+50
-{"type": 2, "atk": -20, "def": 50, "mdef": 50, "percentage": true} // 装备类型是魔杖,效果是攻击下降20%,防御和护盾各提升50%
-```
-
-所有取值全部向下取整。
-
-值得注意的是,如果多个装备同时按比例增加属性,使用加法计算。比如武器增加30%攻击,防具增加10%攻击,最终合起来增加的是40%而不是43%的属性。
-如果某件装备需要按常数增加一种属性但按百分比增加另一种属性,请参考[插件库](https://h5mota.com/plugins/)
+然后在图块属性的`equip`一项中设置装备的具体属性。从V2.7起,该项通过事件编辑器编辑。分为以下几项:
+1. 类型:自然数或字符串常量,和前面的 `equipName` 对应,填字符串一般是因为 `equipName` 中有重复项(比如可以装备两件饰品什么的)。
+2. 普攻动画:一个已注册的 `.animate` 文件名(这里不再写后缀),只对第一个装备位才有效。具体可参见[动画和天气系统](#动画和天气系统)。
+3. 数值提升项:若干个键值对,表示该装备增加属性的常数值(支持负数,会影响 `core.getStatus()` 的结果,可以用 `core.getEquippedStatus()` 来获取),7个常用属性可以通过下拉框选取,自定义的新属性也可以手动输入。
+4. 百分比提升项:若干个键值对,表示该装备增加属性的百分比(支持负数,会影响 `core.getRealStatus()` 的结果,可以用 `core.getBuff()` 来获取。最终的状态栏属性向下取整,百分比之间用加法叠加,且晚于常数结算),修改方法同上,精确到千分之一。
### 检测是否存在装备
可以使用`core.hasEquip(itemId)`来检测是否装上某个装备。
@@ -89,10 +65,6 @@ percentage为该装备是否按比例增加属性。
然后对于某个装备,将其`type`(装备类型)写对应的装备孔名称即可。
-``` js
-{"type": "武器", "atk": 20, "def": 0, ...}
-```
-
这样写的话,则所有该名称的装备孔均可装上此装备。
当尝试装上此装备时,会取最小的一个空的装备孔进行装备。如果没有空闲的装备孔,则会提示“请先卸下装备”。
@@ -100,9 +72,9 @@ percentage为该装备是否按比例增加属性。
装备动画仍然会取第一个(装备类型为0)的装备的`animate`项,即使装备了多个有动画的武器。
## 门
-样板自带6种门,黄蓝红绿铁花。前五种门需要有对应的钥匙打开,花门只能通过调用 `openDoor` 事件进行打开。
+样板自带6种门,黄蓝红绿铁花。前四种门需要有对应的钥匙打开,花门只能通过调用 `openDoor` 事件进行打开。铁门是否需要钥匙,由全塔属性的 `steelDoorWithoutKey` 开关控制,详见“万能铁门钥匙”道具的拾取效果。
开门后可触发该点的 `afterOpenDoor` 事件,有关事件的详细介绍请参见[事件](event)。
-如果要新增自己的门,请参见[新增门和对应的钥匙](personalization#新增门和对应的钥匙)。
+如果要新增自己的门(支持32×48尺寸),请参见[新增门和对应的钥匙](personalization#新增门和对应的钥匙)。
## 暗墙
样板支持暗墙。要制作一个暗墙非常简单:在该点直接放一个普通墙壁,然后事件写“开门”,坐标为该点就行。
@@ -140,12 +112,12 @@ N连击怪物的special是6,且我们可以为它定义n代表实际连击数
**将 `flags.no_zone` 设置为 `true` 可以免疫领域效果。**
阻击怪同样需要设置value,代表阻击伤害的数值。如果勇士生命值扣减到0,则直接死亡触发lose事件。
**将`flags.no_repulse`设置为true可以免疫阻击效果(包括伤害和移动!)。**
-!> 阻击怪后退的地点不能有任何事件存在,即使是已经被禁用的红绿事件或重生怪!(会导致此事件意外被重新启用)
+!> 阻击怪后退的地点不能有任何事件层图块,否则不会后退。另外它会无视可通行方向,请自行注意悬崖效果的影响!
激光怪同样需要设置value,代表激光伤害的数值。
-
请注意如果吸血、领域、阻击、生命光环中任何两个同时存在,则 `value` 会冲突。**因此请勿将吸血、领域、阻击或激光放置在同一个怪物身上。退化和攻防光环同理!
**
+
请注意如果吸血、领域、阻击、激光、生命光环中任何两个同时存在,则 `value` 会冲突。**因此请勿将吸血、领域、阻击、激光或生命光环放置在同一个怪物身上。退化和攻防光环、吸血加到自身和光环叠加同理!
**
**将 `flags.no_laser` 设置为 `true` 可以免疫激光效果。将 `flags.no_ambush` 设置为 `true` 可以免疫捕捉效果。**
-退化怪需要设置'atkValue'和'defValue'表示退化的数值;也可以不设置默认为0。
-
**将`flags.no_betweenAttack`设置为true可以免疫夹击效果,在全塔属性中还有一个系统开关可以控制夹击伤害是否封顶至夹击怪的战斗伤害。**
+退化怪和光环怪需要设置'atkValue'和'defValue'表示退化或增幅的数值;也可以不设置默认为0。
+
**将`flags.no_betweenAttack`设置为true可以免疫夹击效果,在全塔属性中还有一个系统开关 `betweenAttackMax` 可以控制夹击伤害是否封顶至夹击怪的战斗伤害。**
固伤怪则需要设置`damage`选项,代表战前扣血数值。
如有额外需求,可参见[自定义怪物属性](personalization#自定义自定义怪物属性),里面讲了如何设置一个新的怪物属性。
@@ -183,6 +155,7 @@ N连击怪物的special是6,且我们可以为它定义n代表实际连击数
则可以在这几个图块属性中的`faceIds`中写:`{"up": "N333", "down": "N334", "left": "N335"}`。
当勇士从左边撞上此NPC后,将从该图块的图块属性中的 `faceIds` 中寻求 `left` 所对应的ID。
如果存在定义(如N335),则会在触发对话事件前改变当前图块为N335,看起来就是在对话前进行了转向,面向勇士。
+对话中,`\t[this]` 效果的图像也会尝试选用该NPC的当前朝向(朝上不好看,会自动改为用朝下的)
!> 请注意,在对话结束后朝向不会切换回来,因此如果有必要切换朝向请在事件结束前调用转变图块事件。
从v2.7起,也提供了“事件转向”指令来执行这种转变图块,从而省去了手动填写ID的不便。
同理,使用移动事件让NPC在行走时,不同朝向的行走会自动调用`faceIds`中不同朝向的ID所对应的行走图,看起来就是在行走时也可以不断转向了。
@@ -192,13 +165,13 @@ N连击怪物的special是6,且我们可以为它定义n代表实际连击数
## 路障,楼梯,传送门
血网的伤害数值、中毒后每步伤害数值、衰弱时暂时攻防下降的数值,都在全塔属性的values内定义。
-
-路障同样会尽量被自动寻路绕过。
+
如果有个性化需求,可以自行修改路障的图块属性 `script`、脚本编辑“阻激夹域伤害、每步后操作”和公共事件“毒衰咒处理”。
+路障同样会尽量被自动寻路绕过(目前,后三种路障在已主角附加对应debuff的情况下依然会绕过)。
有关楼梯和传送门,必须在该点的 `changeFloor` 事件里指定传送点的目标。
楼层ID指定的是目标楼层的唯一标识符(ID),也可以在第一个下拉框中选择“前一楼”和“后一楼”。
第二个下拉框可以选择传送到哪个楼梯,或选择三种对称位置,或显式指定坐标(比如目标楼层有多个楼梯时)。
-“朝向”为勇士上下楼后面对的方向,不填则不改变。“动画时间”为上下楼的黑屏时间,不填则使用玩家设定值。
“穿透性”表示鼠标或触屏寻路时勇士能否穿过此传送点,在转不开身的狭窄区域建议设为可穿透。
-**从v2.1.1开始,楼层属性中提供了 `upFloor` 和 `downFloor` 两项。如果设置此项(比如`"upFloor": [2,3]`),则写传送到哪个楼梯或者楼传器的落点将用此点来替换楼梯位置(即类似于RMXP中的上箭头)。**
+“朝向”为勇士上下楼后面对的方向(从V2.7起,支持三种相对转向),不填则不改变。“动画时间”为上下楼的黑屏时间,不填则使用玩家设定值。
“穿透性”表示鼠标或触屏寻路时勇士能否穿过此传送点,在转不开身的狭窄区域建议设为可穿透。
+**从v2.1.1开始,楼层属性中提供了 `upFloor` 和 `downFloor` 两项。如果设置此项(比如`"upFloor": [2,3]`,从V2.7起支持地图选点法设置),则写传送到哪个楼梯或者楼传器的落点将用此点来替换楼梯位置(即类似于RMXP中的上箭头)。**
## 剧情文本控制与对话框效果
在写剧情文本时,可以:
@@ -221,9 +194,7 @@ N连击怪物的special是6,且我们可以为它定义n代表实际连击数
详细信息请参见[剧情文本控制](event#text:显示一段文字(剧情))中的说明。
从V2.5.2开始,可以用一张WindowSkin图片作为对话框的背景皮肤。
-
-使用时,需要将图片放在images目录下,并在全塔属性中予以注册。
-
+
使用时,需要将图片放在images目录下,并在全塔属性中予以注册。已有的 `winskin.png` 请勿删除,否则会影响道具商店插件的使用。
可以使用[设置剧情文本的属性](setText:设置剧情文本的属性)事件将对话框背景设置为需要的皮肤。
!> 关于对话框效果请注意,现在是采用WindowSkin的右下角两个32x32的图片作为对话框尖角进行绘制。因此请尽量使用群文件或网盘的常用素材中给出的WindowSkin素材(均已进行对话框适配)。如需使用来自第三方的WindowSkin素材,请自行注意对话框的尖角问题,或弃用`\b`效果。
@@ -233,6 +204,7 @@ N连击怪物的special是6,且我们可以为它定义n代表实际连击数
- 如果用户存在手动换行`\n`,则选取**最长的一段话**作为文本框宽度。
- 如果用户不存在手动换行,则会将文本框宽度调整为X行半的最佳宽度。
- 文本框宽度存在上下界,最终宽度一定会控制在该范围内。
+- 从V2.7开始,自动换行增加了标点禁则,成对标点的左部不会出现在行尾,右部和不成对标点不会出现在行首。
该自动调整仅对`\b`的对话框效果有效。非对话框仍然会绘制整个界面的宽度。
@@ -241,20 +213,20 @@ N连击怪物的special是6,且我们可以为它定义n代表实际连击数
从V2.4开始,H5魔塔开始支持大地图。
大地图在创建时可以指定宽高,要求**宽和高都不得小于13(15x15版本则是不小于15),且宽高之积不超过1000**。
-
大地图一旦创建成功则难以修改宽高数值,如确需修改,请手动打开 `floors` 文件夹中的 `JS` 文件并同时修改宽高和地图矩阵。
+
您也可以在楼层属性的最下面修改宽高,还可以指定偏移量。
## 动画和天气系统
现在我们的H5魔塔支持播放动画,也支持天气系统了。
-
要播放动画,你可以先使用“RM动画导出器”将动画导出,放在animates目录下,然后在全塔属性的animates中定义。
+
要播放动画,你可以先使用“RM动画导出器”将 `RPG Maker XP 1.03` 的动画导出,放在animates目录下,然后在全塔属性的animates中定义。
``` json
// 在此存放所有可能使用的动画,必须是animate格式,在这里不写后缀名
// 动画必须放在animates目录下;文件名不能使用中文,不能带空格或特殊字符
"animates": ["hand", "sword", "zone", "yongchang", "thunder"]
```
-
+目前不支持用浏览器预览动画,Windows系统请使用“动画编辑器”预览,然而预览不会播放音效。
!> 动画必须是animate格式,名称不能使用中文,不能带空格或特殊字符。
-导出动画时可能会进行一些压缩以节省流量,因此清晰度可能不如原版。
+导出动画时可能会进行一些压缩(譬如把本来是128×128尺寸的动画压缩为64×64,播放时再临时放大)以节省流量,因此清晰度可能不如原版。
从2.3.2开始,动画可以同时导出所用的音效。**如果导出音效,请确保将所用到的音效复制到了`sounds`目录下,并且在全塔属性中注册过。**
确切地说,动画文件中记录着第几帧该用什么音效的文件名,您可以用记事本等文本编辑器打开动画文件并手动修改用到的音效文件名(原本可能是中文甚至日文),以和实际的文件名相匹配
@@ -284,7 +256,7 @@ N连击怪物的special是6,且我们可以为它定义n代表实际连击数
```
!> 音频名不能使用中文,不能带空格或特殊字符。
-
目前BGM支持主流的音乐格式,如 `wav, mp3, ogg, flac, m4r` 等。不支持 `mid` 格式的播放。
`iOS` 系统对 `ogg` 的支持性较差,但 `ogg` 比 `mp3` 体积小,请注意权衡。
+
目前BGM支持主流的音乐格式,有 `wav, mp3, ogg`,不支持 `mid` 格式的播放。
`iOS` 系统对 `ogg` 的支持性较差,但 `ogg` 比 `mp3` 体积小,请注意权衡。
定义完毕后,我们可以调用`playBgm`/`playSound`事件来播放对应的音乐/音效,有关事件的详细介绍请参见[事件](event)。
**另外,考虑到用户的流量问题,将遵循如下规则:**
@@ -298,7 +270,7 @@ N连击怪物的special是6,且我们可以为它定义n代表实际连击数
从V2.5.3开始,可以使用`loadBgm`事件来预加载一个bgm,这样到播放时无需等待,直接播放。
同时BGM将使用LRU算法增加缓存机制。默认最多缓存4个BGM(在core.js的musicStatus.cachedBgmCount控制)。
-
系统会自动释放最久未使用的BGM。也可以使用 `freeBgm` 脚本来手动释放一个无需再用的 `bgm` 。
+
系统会自动释放最久未使用的BGM。也可以使用 `freeBgm` 事件来手动释放一个无需再用的bgm
## 录像
HTML5魔塔一大亮点就是存在录像系统,可以很方便进行录像回放。
diff --git a/_docs/event.md b/_docs/event.md
index 03d00562..f14a9265 100644
--- a/_docs/event.md
+++ b/_docs/event.md
@@ -5,12 +5,12 @@
## 事件的机制
本塔所有的事件都是依靠触发器 `trigger` 完成的。例如,勇士碰到一个门可以触发一个事件 `openDoor` ,勇士碰到怪物可以触发一个事件 `battle` ,勇士碰到一个(上面定义的)楼层传送点可以触发一个事件 `changeFloor` ,等等。上面说的这些事件都是系统本身自带的,即类似于RMXP中的公共事件。
上述这些默认的事件已经存在处理机制,不需要我们操心。我们真正所需要关心的,其实只是一个自定义的事件。
-
所有普通事件(红)、楼层传送事件(绿)和重生怪,都存在两种状态:启用和禁用。
+
所有事件都存在两种状态:启用和禁用。
- 启用状态下,该事件才处于可见状态,可被触发、交互与处理。
- 禁用状态下该事件相当于不存在,不可见、不可被触发、不可交互。
-所有普通事件(红)默认情况下都是启用的,除非取消了“启用”的勾选。
-在事件列表中使用“显示事件”和“隐藏事件”可以将一个禁用事件给启用,或将一个启用事件给禁用(如果不是红、绿或重生怪,则会直接永久从地图中删除)。
+所有事件默认情况下初始都是启用的,除非取消了“启用”的勾选(适用于普通事件)。
+在事件列表中使用“显示事件”和“隐藏事件”可以将一个禁用事件给启用,或将一个启用事件给禁用(后者也提供了一个勾选项,勾选后不禁用而是直接永久从地图中删除)。
因此,非常不推荐仅仅为了初始隐藏一个图块,就去给它绑定一个本身没有任何指令的普通事件。
如有需求,请使用“转变图块”或“关门”事件
## 关于V2.0的重要说明
@@ -43,7 +43,8 @@
```
`"type"`为该自定义事件的类型;而后面的`...`则为具体的一些事件参数。
-
每次,系统都将取出数组中的下一个事件,并进行处理;直到数组中再无任何事件,或遇到“立刻结束当前事件”,才会完全结束本次普通事件,恢复游戏状态。
+
每次,系统都将取出数组中的下一个事件,并进行处理(执行 `core.events_action_xxx()` 函数);直到数组中再无任何事件,或遇到“立刻结束当前事件”,才会完全结束本次普通事件,恢复游戏状态。
+从V2.7起,事件流结束时会清空所有临时变量和参数变量(以 `@temp` 开头、或 `arg` 加纯数字的 `flag`)。
下面将依次对所有自定义事件类型进行介绍。
### text:显示一段文字(剧情)
@@ -73,7 +74,7 @@
```
我们可以给文字加上标题或图标,只要以`\t[...]`开头就可以。
-
其一般写法是 `\t[名字,ID]` ,其中名字为你要显示的标题,ID为图块ID,也可以填 `hero` 。
如果不需要可以不写ID,则只会显示标题。对于非道具,也可以不写名字代表使用默认值。
+
其一般写法是 `\t[名字,ID]` ,其中名字为你要显示的标题,ID为图块ID,也可以填 `hero` 或`this`。
如果不需要可以不写ID,则只会显示标题。对于非道具,也可以不写名字代表使用默认值。
从V2.5.2以后,新增了绘制大头像的功能。绘制大头像图的基本写法是`\t[1.png]`或者`\t[标题,1.png]`。
从V2.6开始,所有图块都允许只写ID,对于非怪物也非道具则仅当图块属性中设置了 `name` 才有标题(否则不显示标题)。另外注意的是,名字可以用null从而只显示动画而不显示标题。
``` json
@@ -82,6 +83,7 @@
"\t[勇士,hero]这是一段勇士说的话",
"\t[hero]如果使用勇士默认名称也可以直接简写hero",
"\t[黑暗大法师,magicMaster]我是黑暗大法师",
+ "\t[黑暗大法师,this]如果使用当前点的图块作为图标也可以简写this",
"\t[magicMaster]如果使用怪物的默认名称也可以简写怪物id",
"\t[小妖精,fairy]这是一段小妖精说的话,使用仙子(fairy)的图标",
"\t[你赢了]直接显示标题为【你赢了】",
@@ -104,17 +106,21 @@
- 从V2.6开始,也允许写`\b[hero]`来根据勇士在视野中的位置自动决定上方还是下方
- `\b[up,x,y]` 显示在(x,y)点的上方(下方);x和y都为整数,表示该点的绝对坐标
- 从V2.6开始,也允许写`\b[null,x,y]`来根据(x,y)位置自动决定上方还是下方
-- `\b[up,x]` 显示在勇士的第x个跟随的行走图的上方(下方);也允许把 `up` 换成 `down` ,`hero`或`null` 来自动适配
+- `\b[up,x]` 显示在勇士的第x个跟随的行走图的上方(下方);也允许把 `up` 换成 `down`,或用 `hero` 来自动适配
``` json
[
- "\b[up]这段文字显示在当前点上方",
- "\b[down]这段文字显示在当前点上方",
- "\t[hero]\b[up,hero]这是一段勇士说的话,会显示在勇士上方",
- "\t[hero]\b[hero]这是一段勇士说的话,根据勇士位置自动适配上下",
- "\t[小妖精,fairy]\b[down,2,2]这是一段小妖精说的话,会显示在(2,2)点下方",
- "\t[null,1,3]根据坐标位置自动适配上下",
- "\t[up,1]显示在勇士第一个跟随的行走图上方",
- "\t[null,2]显示在勇士第二个跟随的行走图,自动适配上下",
+ "\b[up]这段文字显示在当前点上方",
+ "\b[down]这段文字显示在当前点下方",
+ "\b[this]这段文字显示在当前点,根据位置自动适配上下",
+ "\b[up,null]这段文字显示在视野最上方",
+ "\b[down,null]这段文字显示在视野最下方",
+ "\b[center]这段文字显示在视野中央",
+ "\t[hero]\b[up,hero]这是一段勇士说的话,会显示在勇士上方",
+ "\t[hero]\b[hero]这是一段勇士说的话,根据勇士位置自动适配上下",
+ "\t[小妖精,fairy]\b[down,2,2]这是一段小妖精说的话,会显示在(2,2)点下方",
+ "\b[this,1,3]根据坐标位置自动适配上下",
+ "\b[up,1]显示在勇士第一个跟随的行走图上方",
+ "\b[hero,2]显示在勇士第二个跟随的行走图,自动适配上下",
]
```
@@ -137,7 +143,7 @@
其基本写法是`\f[img,x,y]`,或者`\f[img,x,y,w,h]`,或者`\f[img,sx,sy,sw,sh,x,y,w,h]`。
从V2.6.3开始,也可以在最后加上alpha值,即`\f[img,sx,sy,sw,sh,x,y,w,h,alpha]`。
-
+
从V2.7开始,也可以在图片名结尾加上 `:x, :y, :o`,分别表示将图片水平翻转、竖直反转、旋转180°。
需要注意的是,这个图片是绘制在UI层上的,下一个事件执行时即会擦除;同时如果使用了\t的图标动画效果,重叠的地方也会被图标动画给覆盖掉。
``` json
[
@@ -165,11 +171,11 @@
**可以在控制台中输入`core.statusBar.icons`以查看所有的系统图标定义。**
!> 注意,在事件块中,允许只写一个反斜杠`\i`,系统会自动转义成`\\i`;但是在脚本中必须两个反斜杠都写上!`\c`、`\d`、`\e` 和 `\z` 同理
-从V2.6.3开始,也可以使用`\\c[...]`来切换当前字体,`\\d`来加粗或取消粗体,`\\e`来加斜体或取消斜体。
从V2.7开始,还可以使用`\\z[...]`来调节打字速度。
+从V2.6.3开始,也可以使用`\\c[...]`来切换当前字号,`\\d`来加粗或取消粗体,`\\e`来加斜体或取消斜体。
从V2.7开始,还可以使用`\\z[...]`来调节打字速度。
``` json
[
- "这是原始字体,\\c[20]使用20号字体,\\c[10]使用10号字体",
- "\\c如果不加中括号则切换回原始字体。",
+ "这是原始字号,\\c[20]使用20号字体,\\c[10]使用10号字体",
+ "\\c如果不加中括号则切换回原始字号。",
"\\d这是粗体\\d取消粗体,\\e加斜体\\e取消斜体",
"\t[hero]\b[hero]让我想想...\\z[10]有了!" // 打出省略号后,暂停相当于打10个字的时间
]
@@ -377,14 +383,13 @@ value为必填项,代表要修改到的内容。对于修改名称的,必须
### setFloor:设置楼层属性
使用`{"type":"setFloor"}`可以设置某层楼的楼层属性。
-
-``` js
+``` json
[
{"type": "setFloor", "name": "title", "value": "'主塔 0 层'" } // 设置当前楼层的中文名为主塔0层
{"type": "setFloor", "name": "canFlyTo", "floorId": "MT2", "value": "false" } // 设置MT2层不可飞行
{"type": "setFloor", "name": "cannotViewMap", "floorId": "MT0", "value": "true" } // 设置MT0层不可被浏览地图
{"type": "setFloor", "name": "ratio", "value": "5" } // 设置当前楼层的宝石血瓶属性加成为5
- {"type": "setFloor", "name": "images", "value": "[[0,0,'tree.png',2]]" } // 设置当前楼层的楼层贴图
+ {"type": "setFloor", "name": "images", "value": "[[0,0,'tree.png',2]]" } // 设置当前楼层的楼层贴图,设置完以后记得用core.drawMap()刷新一下
{"type": "setFloor", "name": "upFloor", "value": "[2,3]" } // 设置当前楼层的上楼梯
{"type": "setFloor", "name": "bgm", "floorId": "MT10", "value": "'233.mp3'" } // 设置当前楼层的背景音乐
]
@@ -403,10 +408,9 @@ value为必填项,代表要修改到的数值。其应该和楼层属性中的
### setGlobalAttribute:设置一个全局属性
使用`{"type":"setGlobalAttribute"}`可以设置一个全局属性。
-
-``` js
+``` json
[
- {"type": "setGlobalAttribute", "name": "font", "value": "Verdana"}, // 设置字体为Verdana
+ {"type": "setGlobalAttribute", "name": "font", "value": "Consolas"}, // 设置字体为Consolas
]
```
@@ -419,8 +423,7 @@ value为必填项,代表要修改到的结果。此项无需再手动加单引
### setGlobalValue:设置一个全局数值
使用`{"type":"setGlobalValue"}`可以设置一个全局数值。
-
-``` js
+``` json
[
{"type": "setGlobalValue", "name": "lavaDamage", "value": 200}, // 设置血网伤害为200
]
@@ -435,10 +438,9 @@ value为必填项,代表要修改到的结果。该项必须是个数值。
### setGlobalFlag:设置一个系统开关
使用`{"type":"setGlobalFlag"}`可以设置一个系统开关。
-
-``` js
+``` json
[
- {"type": "setGlobalFlag", "name": "enableMDef", "value": false}, // 不在状态栏显示护盾值
+ {"type": "setGlobalFlag", "name": "steelDoorWithoutKey", "value": true}, // 设置开铁门不需要钥匙
]
```
@@ -474,14 +476,14 @@ time为动画效果时间,如果指定了某个大于0的数,则会以动画
async可选,如果为true则会异步执行(即不等待当前事件执行完毕,立刻执行下一个事件)。
!> **要注意的是,调用show事件后只是让该事件从禁用状态变成启用,从不可见不可交互变成可见可交互,但本身不会去执行该点的事件。**
-### hide:将一个启用事件禁用,或将非红非绿非重生的图块删除
+### hide:将一个启用事件禁用,或将其从地图永久删除
`{"type":"hide"}`和show刚好相反,它会让一个已经启用的事件被禁用。
其参数和show也完全相同,loc指定事件的位置,floorId为楼层(同层可忽略),time指定的话事件会以动画效果从有到无慢慢消失,async代表是否是异步效果。
loc同样可以简单的写[x,y]表示单个点,或二维数组[[x1,y1],[x2,y2],...]表示多个点。
-但是和show事件有所区别的是:loc选项也可以忽略;如果忽略loc则使当前事件禁用。(即使禁用当前事件,也不会立刻结束当前正在进行的,而是仍然会依次将列表中剩下的事件执行完)
+但是和show事件有所区别的是:loc选项也可以忽略;如果忽略loc则使当前事件禁用。(即使禁用当前事件,也不会立刻结束当前正在进行的,而是仍然会依次将列表中剩下的事件执行完)另外还多了一个“同时删除”的勾选项,如果勾选此项就不会禁用而是直接从地图永久删除(不可再被重新显示)
请注意,一次性事件必须要加 `{"type":"hide"}`,尤其是例如走到某个点,触发对话或机关门(陷阱)这种,否则每次都会重复触发。
@@ -567,7 +569,7 @@ keep可选,如果此项为true则不会结束当前的事件列表,否则会
即可在事件中直接取用`flag:arg1`等等来获得各项参数值!。
### exit:立刻结束当前事件
-可以使用`{"type":"exit"}`立刻结束事件。调用 `exit` 后,将立刻结束一切事件,清空事件列表,并返回游戏。
+可以使用`{"type":"exit"}`立刻结束事件。调用 `exit` 后,将立刻结束一切事件,清空事件列表、清空 `@temp` 临时变量和 `arg0-9` 参数变量,并返回游戏。
例如玩家点击商人的"离开"选项,则可以调用exit返回游戏。
``` json
[
@@ -600,9 +602,8 @@ number为**要更改到的数字**,有关“数字”的定义详见参见[素
从V2.6开始,number也允许写图块的ID,将自动转成对应的数字。
-从V2.7开始,还可以指定转变的淡入动画时间,用于该点原本是空地或空气墙的场合,从而避免“仅仅为了做个淡入效果,就去创建了一个本身没有任何指令的普通事件”。
-图块更改后:
-
+从V2.7开始,还可以指定转变的动画时间。您可以用于该点原本是空地的场合,从而避免“仅仅为了做个淡入效果,就去创建了一个本身没有任何指令的普通事件”。
+指定动画时间的话,前一半时间会用于将该点原有的图块淡出,后一半用于将新图块淡入。图块更改后:
- 其启用/禁用状态不会发生任何改变。原来是启用还是启用,原来是禁用还是禁用。
- 可通行状态遵循覆盖原则,即**首先取该图块的 `canPass` 属性(道具和怪物没有此属性,道具可通行,怪物不可通行),如果该点的普通事件中定义了 `noPass` 则覆盖**。
- 触发器( `trigger` )亦采用覆盖原则,即**首先取该图块的默认触发器(例如怪物是battle,道具是getItem,门是openDoor),如果该点绑定了楼层转换事件(绿)或普通事件(红)中覆盖触发器,则覆盖**。
@@ -673,11 +674,8 @@ loc为可选的,表示要更改地图块的坐标。如果忽略此项,则

name是可选的,代表目标行走图的文件名。
-
!> **目标行走图必须在全塔属性的this.images中被定义过,且宽度至少是128像素(高度不限)。**
-如果不加name,则恢复默认的角色行走图。
-
-如果你需要同时修改勇士的名称,可以使用`setValue`事件来修改`status:name`,但请注意value必须加单引号,不然会报错。
-
+
!> **目标行走图必须在全塔属性的 `images` 中被定义过,且宽度至少是128像素(高度不限)。**
如果不加name,则恢复默认的角色行走图 `hero.png` 。
+如果要修改勇士的名称,可以使用`setValue`事件来修改`status:name`,但请注意value必须加单引号,不然会报错。
如果你需要获取当前的行走图文件名,可以使用 `flags.heroIcon` ,但不要直接修改它。
### update:立刻更新状态栏和地图显伤
如果你需要刷新状态栏和地图显伤,只需要简单地调用 `{"type": "update", "doNotCheckAutoEvents": true}` 。
@@ -685,7 +683,8 @@ name是可选的,代表目标行走图的文件名。
使用`{"type": "hideStatusBar"}`可以隐藏状态栏。读档或重新开始游戏时,状态栏会重新显示。
可以添加`"toolbox": true`来不隐藏竖屏模式下的工具栏。使用`{"type": "showStatusBar"}`会重新显示状态栏。
### showHero / hideHero:显隐勇士
-使用`{"type": "hideHero"}`可以隐藏勇士。使用`{"type": "showHero"}`会重新显示勇士。
+使用`{"type": "hideHero"}`可以隐藏勇士和跟随者。使用`{"type": "showHero"}`会重新显示勇士和跟随者。
+
从V2.7开始,可以指定勇士和跟随者们淡入淡出的时间,也支持异步效果。
### sleep:等待多少毫秒
等价于RPG Maker中的"等待x帧",不过是以毫秒来计算。
基本写法:`{"type": "sleep", "time": xxx}` ,其中xxx为指定的毫秒数。
@@ -699,7 +698,7 @@ name是可选的,代表目标行走图的文件名。

默认的等待事件可以被Ctrl跳过,下面两种情况下不可被跳过:
- 加上`"noSkip": true`后
- - 当前存在尚未执行完毕的异步事件。
+ - 当前存在尚未执行完毕的异步事件(异步动画除外)。
### battle:强制战斗
@@ -781,9 +780,8 @@ changeFloor的事件写法大致如下。
```

可以看到,与之前的楼梯、传送门的写法十分类似。
但是相比那个而言,这个不支持穿透选项。
-direction为可选的,指定的话将使勇士的朝向变成该方向
-
-time为可选的,指定的话将作为楼层切换动画的时间。
+direction为可选的,指定的话将使勇士的朝向变成该方向(从V2.7起,支持三种相对转向)
+time为可选的,指定的话将作为楼层切换动画的时间,不指定则使用玩家设定值。
**如果time指定为小于100,则视为没有楼层切换动画。**
### changePos:当前位置切换/勇士转向
@@ -795,6 +793,7 @@ time为可选的,指定的话将作为楼层切换动画的时间。
{"type": "changePos", "loc": [10,10], "direction": "left"}, // 直接切换勇士的坐标,loc为目标地点,后面勇士换位后方向
{"type": "changePos", "loc": [10,10]}, // 如无需指定方向则direction可省略
{"type": "changePos", "direction": "left"} // loc也可省略,只指定direction;此时等价于当前勇士转向到某个方向。
+ {"type": "changePos", "direction": ":left"} // 从V2.7开始,支持相对转向,如":left"会让勇士逆时针旋转90°
]
```
@@ -845,6 +844,7 @@ pos必填,为要卸下的装备孔编号,从0开始。
```
`name` 为要加入或取消跟随的行走图文件名,取消跟随时取第一个,不填则取消所有。
`name` 所指定的图片必须存在,在全塔属性中的 `images` 中注册,且为一个合法的行走图(宽至少为128像素,高不限)
+
您可以随时使用 `core.status.hero.followers` 去查看当前跟随者们的状态,每个跟随者的状态分为“朝向、坐标和是否已停止”三项,其中“是否已停止”为 `true` 表示该队员当前因与其前一个队员重叠,主角下一步行走时该队员将不动。
### vibrate:画面震动
使用 `{"type": "vibrate", "time": 2000, "async": true}` 可以造成画面震动效果。
@@ -905,6 +905,7 @@ time为渐变时间,默认值为0,即不渐变直接显示。
async可选,如果为true则会异步执行(即不等待当前事件执行完毕,立刻执行下一个事件)。
+从V2.7起,提供了“翻转”下拉框,您可以将图片左右翻转、上下翻转或旋转180°。UI绘制事件中的“绘制图片”同理。
### showTextImage:显示图片化文本
我们可以使用 `{"type": "showTextImage"}` 以图片的方式显示文本。
@@ -930,6 +931,7 @@ async可选,如果为true则会异步执行(即不等待当前事件执行
文本通过图片的方式显示后,即视为一张正常图片,可以被清除或者移动。
+从V2.7开始,和普通的显示图片一样,支持三种翻转效果。
### hideImage:清除图片
我们可以使用 `{"type": "hideImage"}` 来清除一张图片。
@@ -1064,14 +1066,10 @@ level为天气的强度等级,在1-10之间。1级为最弱,10级为最强
loc为需要移动的事件位置。可以省略,如果省略则移动本事件。
steps为一个数组,其每一项是`up, down, left, right`之一,表示这一步应该朝哪个方向走。
-
-对于有 `faceIds` 的NPC,也支持 `forward, backward` ,表示前进和后退
-
+
对于有 `faceIds` 的NPC,也支持 `forward, backward` ,表示前进和后退。
keep为一个可选项,代表该事件移动完毕后是否消失。如果该项指定了并为true,则移动完毕后将不消失,否则以动画效果消失。
-值得注意的是,当调用move事件时,实际上是使事件脱离了原始地点。为了避免冲突,规定:move事件会自动调用该点的hide事件。
-
-换句话说,当move事件被调用后,该点本身的事件将被禁用。
+值得注意的是,当调用move事件时,实际上是使事件脱离了原始地点。为了避免冲突,规定:move事件会自动在该点调用 `core.removeBlock()` 函数。换句话说,当move事件被调用后,该点本身的事件将被永久删除。
如果指定了 `"keep": true` ,则相当于会在目标地点触发一个 `setBlock` 和一个 `show` 事件;
如需能继续对话交互请在目标地点再写事件。
阻击属性的移动效果就是这样,推箱子和阻击类似但目标点只 `setBlock` 不 `show` ,请自行注意可能的隐患。
@@ -1095,12 +1093,8 @@ keep为一个可选项,代表该事件移动完毕后是否消失。如果该
即,在移动的到达点指定一个事件,然后move事件中指定"keep":true,然后就可以触发目标点的事件了。
async可选,如果为true则会异步执行(即不等待当前事件执行完毕,立刻执行下一个事件)。
-
-### moveHero:移动勇士
-
-如果我们需要移动勇士,可以使用`{"type": "moveHero"}`。
-
-下面是该事件常见的写法:
+### moveHero:无视地形移动勇士
+如果我们需要无视地形移动勇士,可以使用`{"type": "moveHero"}`。下面是该事件常见的写法:
``` json
"x,y": [ // 实际执行的事件列表
{"type": "moveHero", "time": 750, "async": true, "steps": [// 动画效果,time为移动速度(比如这里每750ms一步),steps为移动数组
@@ -1116,16 +1110,9 @@ async可选,如果为true则会异步执行(即不等待当前事件执行
不过值得注意的是,用这种方式移动勇士的过程中将无视一切地形,无视一切事件,中毒状态也不会扣血。
async可选,如果为true则会异步执行(即不等待当前事件执行完毕,立刻执行下一个事件)。
-### moveAction:移动一步
+### moveAction:勇士前进一格或撞击
如果我们需要像事件外一样移动一步,可以使用`{"type": "moveAction"}`。
-下面是该事件常见的写法:
-``` json
-"x,y": [ // 实际执行的事件列表
- {"type": "moveAction", "time": 750, "direction": "forward"}
-]
-```
-`time` 可选,为移动的用时,单位是毫秒,不填则取玩家设置值。`direction` 可选,为移动的方向,不填则取 `forward`
-用这种办法移动时会检查通行性,也会正常触发阻激夹域捕和地形效果,如果不可通行则会去撞击(如开门打怪)
+
用这种办法移动时会检查通行性,也会正常触发阻激夹域捕毒和地形效果,如果不可通行则会去撞击(如开门打怪)
### jump:让某个NPC/怪物跳跃
如果我们需要移动某个NPC或怪物,可以使用`{"type": "jump"}`。
@@ -1172,7 +1159,7 @@ async可选,如果为true则会异步执行(即不等待当前事件执行
使用方法:`{"type": "playBgm", "name": "bgm.mp3"}`
音乐文件放在 `project\sounds` 文件夹,文件名在全塔属性中注册,不得使用中文。
-目前支持 `mp3/ogg/wav/flac/m4r` 等多种格式的音乐播放,不支持 `mid` 格式。
+目前支持 `mp3/ogg/wav` 格式的音乐播放,不支持 `mid` 格式。
从V2.6.3开始,还提供了keep项。如果此项为真,则会记录该bgm,并且持续到下次调用本事件位置(楼层切换不改变bgm,读档也有效)。
@@ -1657,7 +1644,7 @@ yes和no均为必填项,即用户点击确认或取消后执行的事件。
action为如果满足该条件时应该执行的事件列表。
-从V2.7开始,提供了“限制时间”,如果玩家在若干毫秒内不做出响应,就会跳过这些场合,直接继续执行后面的事件。
+从V2.7开始,提供了“限制时间”,如果玩家在若干毫秒内不做出响应,就会跳过这些场合,直接继续执行后面的事件。而 `flag:type` 会被置为 `-1`
### waitAsync:等待所有异步事件执行完毕
上面有很多很多的异步事件(也就是执行时不等待执行完毕)。
@@ -1810,6 +1797,7 @@ style可选,表示绘制时的颜色,为三元组RGB或四元组RGBA。
lineWidth可选,表示边框的线宽。
+从V2.7起,实心和空心矩形都支持圆角,您可以指定圆角的半径。
### drawLine:绘制线段
UI绘制事件。此事件可以绘制一条直线段,循环使用的话您甚至可以画出带渐变色的复杂曲线。
```json
@@ -1846,30 +1834,26 @@ style可选,表示绘制时的颜色,为三元组RGB或四元组RGBA。
UI绘制事件。此事件可以绘制一个多边形边框。
参数列表和`fillPolygon`基本相同,不过多了一个`lineWidth`表示的绘制线宽。
-### fillCircle:绘制实心圆盘
-UI绘制事件。此项可以绘制一个圆
-```json
+### fillEllipse/strokeEllipse/fillArc/strokeArc:绘制实心/空心椭圆/扇形/弧
+``` json
[
- {"type": "fillCircle", "x": 100, "y": 100, "r": 10, "style": [255,0,0,1]}
+ {"type": "fillEllipse", "x": 0, "y": 0, "a": 100, "b": 100, "angle": 0},
+ // 绘制实心椭圆,x和y为中心坐标,a和b为长短半轴,angle为旋转度数
+ {"type": "strokeEllipse", "x": 0, "y": 0, "a": 100, "b": 100, "angle": 0},
+ // 绘制空心椭圆,参数意义同上
+ {"type": "fillArc", "x": 0, "y": 0, "r": 100, "start": 0, "end": 90},
+ // 绘制扇形,x和y为顶点坐标,r为半径,start和end为起终点角度
+ {"type": "strokeArc", "x": 0, "y": 0, "r": 100, "start": 0, "end": 90},
+ // 绘制弧,参数意义同上
]
```
-
-x, y, r必填,为要绘制的圆心和半径;也可以用`flag:xxx`。
-
-color可选,表示绘制时的颜色,为三元组RGB或四元组RGBA。
-### strokeCircle:绘制空心圆环
-UI绘制事件。此项可以绘制一个圆边框。
-
-参数列表和`fillCircle`基本相同,不过多了一个`lineWidth`表示的绘制线宽。
-
-如果您需要绘制椭圆,可以使用参数方程。譬如:
+如果您需要绘制渐变色的椭圆,可以使用参数方程。譬如:(这个例子画在了UI层,UIevent层也是一样的道理)
``` js
for(var x = 0; x < 6.28; x += .01)
- core.drawLine('ui', 208 + 200 * Math.cos(x), 208 + 100 * Math.sin(x), 208 + 200 * Math.cos(x + .01), 208 + 100 * Math.sin(x + .01))
+ core.drawLine('ui', 208 + 200 * Math.cos(x), 208 + 100 * Math.sin(x), 208 + 200 * Math.cos(x + .01), 208 + 100 * Math.sin(x + .01),[x * 20, 255 - x * 20, core.rand2(256), 1])
```
### drawImage:绘制图片
-
-UI绘制事件。此事件可以绘制一个图片。
+UI绘制事件。此事件可以绘制一个图片。和“显示图片”一样,从V2.7开始支持三种翻转效果。
```json
[
{"type": "drawImage", "image": "bg.jpg", "x": 0, "y": 0}, // 在(0,0)绘制bg.jpg
@@ -1903,7 +1887,7 @@ id必填,为要绘制的图标ID。可以是一个注册过的图标ID,也
x, y必填,为要绘制的左上角坐标。width和height可选,如果设置则会将图标放缩成对应的宽高。
-从V2.7开始,对于多帧图块,允许指定绘制哪一帧,默认绘制第 `0` 帧。
+从V2.7开始,对于多帧图块,允许指定绘制哪一帧,默认绘制第一帧(0)。
### drawBackground:绘制背景图
UI绘制事件。此事件可以绘制一个背景图。
@@ -2180,7 +2164,7 @@ if (core.flags.enableAddPoint && point > 0) {
"disablePreview": false,
"choices": [
{"text": "生命+800", "need": "status:money>=20+2*flag:shop1", "action": [
- {"type": "setValue", "name": "status:money", "operator": "-=", "value": "20+2*flag:shop1"}, // 从V2.7起,全局商店由自带插件实现。标准商店中需要手动扣减金币和增加访问次数
+ {"type": "setValue", "name": "status:money", "operator": "-=", "value": "20+2*flag:shop1"}, // 从V2.7起,全局商店由自带插件实现。标准商店中需要手动处理扣费和涨价问题
{"type": "setValue", "name": "flag:shop1", "operator": "+=", "value": "1"},
{"type": "setValue", "name": "status:hp", "operator": "+=", "value": "800"}]}]}]
```
@@ -2241,7 +2225,7 @@ if (core.flags.enableAddPoint && point > 0) {
## 系统引发的自定义事件
我们知道,所有普通事件都是需要定义在`"x,y"`处,并且得让用户经过或撞上才能触发的。
-但是有一系列的事件,例如战斗、获取道具、开门等,是系统已经预先设定好的事件,我们如果将其覆盖触发器,原本的战斗等事件就会被覆盖。
+但是有一系列的事件,例如战斗、获取道具、开门等,是系统已经预先设定好的事件,我们如果在该点绑定普通事件(红)并覆盖触发器,原本的战斗等事件就会被覆盖。
为了解决此问题,在每个点的事件中引入了三个元素:`afterBattle`, `afterGetItem`, `afterOpenDoor`。
- 当某个战斗结束后,将执行`afterBattle`中,对应位置的事件。
@@ -2279,12 +2263,9 @@ if (core.flags.enableAddPoint && point > 0) {
除此以外,每层楼还提供了`firstArrive`和`eachArrive`事件,分别为首次到达该楼层和每次到达该楼层时执行的事件。
## 滑冰事件
+从V2.6开始,滑冰事件被重写。在新版本中,冰面应该放在背景层上,上面可以放置道具、怪物、门等图块。
-从V2.6开始,滑冰事件被重写。现在的滑冰由公共事件执行。
-
-在新版本中,冰面应该放在背景层上,上面可以放置道具、怪物、门等图块。
-
-角色走上冰面后,将一直向前滑行,直到撞上不可通行的图块,或触发事件为止。
+角色走上冰面后,将一直向前滑行,直到撞上不可通行的图块,或触发事件,或走下冰面为止。
如果撞上怪物将自动进行战斗,此战斗是强制的,打不过将直接死亡。
@@ -2294,7 +2275,7 @@ if (core.flags.enableAddPoint && point > 0) {
## 推箱子事件
关于推箱子,存在三种状态:花(flower),箱子(box)和已经推到花的箱子(boxed)。
-!> 推箱子的前方不允许存在任何事件(花除外),包括已经禁用的红绿事件或者重生怪。(会导致箱子消失)
+!> 推箱子的前方不允许存在任何事件层图块(花除外),否则会推不动。
推完箱子后将触发脚本编辑中的afterPushBox函数,你可以在这里进行开门判断。
@@ -2334,12 +2315,9 @@ if (core.flags.enableAddPoint && point > 0) {
```

-
-另外,从V2.6开始,脚本编辑中提供了战前事件`beforeBattle`,这里不再详细展开,如有需求可自行前往研究。
-
+另外,从V2.6开始,脚本编辑中提供了战前脚本`beforeBattle`,这里不再详细展开,如有需求可自行前往研究。
## 经验升级(进阶/境界塔)
-
-本塔也支持经验升级,即用户杀怪获得经验后,可以到达某些数值自动进阶,全面提升属性。
+样板也支持经验升级,即用户杀怪获得经验后,可以到达某些数值自动进阶,全面提升属性。
要经验升级,你需要在全塔属性中同时勾选“显示等级称号”、“显示经验值”、“开启自动进阶”。
@@ -2369,36 +2347,31 @@ if (core.flags.enableAddPoint && point > 0) {
- `need` 该等级所需要的经验值,可以是个表达式。请确保数组中的need依次递增。
- `title` 该等级的名称,比如“佣兵下级”等。该项可以忽略,以使用系统默认的等级。该项将显示在状态栏中。
- `clear` 是否扣除经验。如果此项为true,则升级时自动扣除经验。
-- `action` 为本次等级要执行的事件流。
-
+- `action` 为本次升级要执行的事件流。
## 开始游戏与难度分歧
-游戏开始时将调用全塔属性中的 `startText` 事件,我们可以修改它的内容来对于不同难度分别设置初始属性。
-
-其中 `core.status.hard` 为全塔属性“难度分歧”二维数组的第二列(四个单词),会以红色显示在状态栏一角。
+游戏开始时将依次调用全塔属性中的 `levelChoose` 和 `startText` 事件,我们可以修改它们俩的内容来对于不同难度分别设置初始属性。
``` json
-////// 不同难度分别设置初始属性 //////
-"startText": [ // 根据难度分歧设置<变量:hard>并给其他初始值
- {"type": "switch", "condition": "core.status.hard", "caseList": [
- {"case": "'Easy'", "action": [ // 可以在这里修改初始道具或属性,比如赠送黄钥匙等
- {"type": "setValue", "name": "flag:hard", "value": "1"},
- {"type": "hide", "loc": [[6,6]], "floorId": "MT10"} // 简单难度删除主塔10层中央的图块
+"levelChoose": [
+ {"title": "简单", "name": "Easy", "hard": 1, "action": [
+ // 在这里写该难度需执行的事件
+ {"type": "comment", "text": "在这里写该难度需执行的事件"},
+ ]},
+ {"title": "普通", "name": "Normal", "hard": 2, "color": [0,255,0,1], "action": [
+ ]},
+], ////// 不同难度分别设置初始属性 //////
+"startText": [
+ {"type": "switch", "condition": "flag:hard", "caseList": [
+ {"case": "1", "action": [ // 简单难度,初始攻击力设为20点
+ {"type": "setValue", "name": "status:atk", "value": "20"},
]},
- {"case": "'Normal'", "action": [
- {"type": "setValue", "name": "flag:hard", "value": "2"}
+ {"case": "2", "action": [ // 普通难度,隐藏主塔10层中央的图块(比如圣水什么的)
+ {"type": "hide", "loc": [[6,6]], "floorId": "MT10"},
]},
- {"case": "'Hard'", "action": [
- {"type": "setValue", "name": "flag:hard", "value": "3"}
- ]},
- {"case": "'Hell'", "action": [
- {"type": "setValue", "name": "flag:hard", "value": "4"}
- ]}
- ]}, // 初始剧情
+ ], },
"Hi,欢迎来到 HTML5 魔塔样板!\n本样板由艾之葵制作,可以让你在不会写任何代码\n的情况下也能做出属于自己的H5魔塔!",
- "这是游戏开始时的剧情。\n你可以在这里写上自己的内容。\n赶快来试一试吧!"
+ "这是游戏开始时的剧情。\n你可以在这里写上自己的内容。\n赶快来试一试吧!",
]
```
-`flag:hard` 为计榜难度系数,即在线游戏排行榜中只统计此值最大且有人通关的难度。游戏过程中请勿二次修改它。
-
==========================================================================================
[继续阅读下一章:个性化](personalization)
diff --git a/_docs/img/events/3.jpg b/_docs/img/events/3.jpg
index b5aff14b..f4c6ddde 100644
Binary files a/_docs/img/events/3.jpg and b/_docs/img/events/3.jpg differ
diff --git a/_docs/img/keyboard.png b/_docs/img/keyboard.png
index 9f2b057a..0a89fc52 100644
Binary files a/_docs/img/keyboard.png and b/_docs/img/keyboard.png differ
diff --git a/_docs/index.md b/_docs/index.md
index 31bacae7..e585c3c2 100644
--- a/_docs/index.md
+++ b/_docs/index.md
@@ -7,7 +7,7 @@
但是,现在我们有了HTML5。 HTML5的画布(canvas)以及它被Android/iOS内置浏览器所支持的特性,可以让我们做出真正意义上的全平台覆盖的魔塔。
-然而,一般而言使用非RPG Maker MV制作魔塔往往需要一定的编程技术,HTML5魔塔自然也不例外。但是,为了能让大家更加注重于“做塔”本身,而不用考虑做塔以外的各种脚本问题,@艾之葵(GitHub ckcz123)特意制作了这样一部HTML5的魔塔样板。
+然而,一般而言使用非RPG Maker制作魔塔往往需要一定的编程技术,HTML5魔塔自然也不例外。但是,为了能让大家更加注重于“做塔”本身,而不用考虑做塔以外的各种脚本问题,@艾之葵(GitHub ckcz123)特意制作了这样一部HTML5的魔塔样板。
> 这个魔塔样板,可以让你在完全不懂任何编程语言的情况下,做出自己的H5魔塔。不会代码?没关系!只要你想做,就能做出来!
继续查看文档的详细介绍,让你学会如何使用这一个样板来制作属于自己的HTML5魔塔,或者……任何非即时的网格地图游戏。
diff --git a/_docs/personalization.md b/_docs/personalization.md
index c554b497..77e87529 100644
--- a/_docs/personalization.md
+++ b/_docs/personalization.md
@@ -55,18 +55,16 @@ core.fillText('test', '这是一段文字', 10, 30, '#FF0000', '16px Verdana');
更多详细API请参见[API列表](api)。
## 自定义素材
-
-所有素材的图片都在`images`目录下。
+所有系统素材的图片都在 `project\materials` 目录下。
- `animates.png` 为所有动画效果。主要是星空熔岩,开门,毒网,传送门之类的效果。为四帧。
-- `autotile*.png` 为Autotile块。
- `enemys.png` 为所有怪物的图片。
- `enemy48.png` 为所有48x32怪物的图片。
-- `heros.png` 为勇士行走图。
- `items.png` 为所有道具的图标。
- `npcs.png` 为所有NPC的图标。
- `npc48.png` 为所有48x32的NPC图标。
- `terrains.png` 为所有地形的图标。
+从V2.7起,自动元件和 `tileset` 图片被分别放在了独立的文件夹中,而其余的由作者追加的图片(如动图、勇士和跟随者行走图、楼层贴图、对话皮肤)等留在了 `project\images` 文件夹。
系统会读取`icon.js`文件,并获取每个ID对应的图标所在的位置。
### 背景和前景图层
@@ -84,9 +82,8 @@ core.fillText('test', '这是一段文字', 10, 30, '#FF0000', '16px Verdana');
为了解决这个问题,我们允许用户自己放置一张或多张图片作为某一层的背景/前景素材。
-要启用这个功能,我们首先需要在`data.js`中将可能的图片进行加载。
-
-``` js
+要启用这个功能,我们首先需要在全塔属性中将可能的图片进行注册。
+``` json
"images": [ // 在此存放所有可能使用的图片
// 图片可以被作为背景/前景图,也可以直接用自定义事件进行显示。
// 图片名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好
@@ -99,30 +96,15 @@ core.fillText('test', '这是一段文字', 10, 30, '#FF0000', '16px Verdana');
之后,我们可以在每层剧本的`"images"`里来定义该层的默认背景/前景层的图片素材。
-从V2.5.4开始,贴图也允许进行帧动画,只要设置第五项的数值。
-
-``` js
-[[96,120,"bg.jpg",0]] // 背景图;你可以选择一张或多张图片来作为背景/前景素材。
-[] // 无任何背景图
-[[32,32,"house.png",0], [160,170,"bed.png",1]] // 在(32,32)放一个house.png在背景层,且(160,170)放bed.png在前景层
-[[96,120,"tree.png",2]] // 如果写2,则会自动调节遮挡效果
-[[64,0,"x.png",1,4]] // 这是一个前景层的4帧动画贴图
+从V2.5.4开始,贴图也允许进行帧动画。从V2.7开始,楼层贴图使用事件编辑器编辑。
+``` json
+[ // canvas为贴图所在的图层,可以写bg、fg或auto。"disable": true表示初始隐藏,frame为总帧数
+ {"name": "bg.jpg", "canvas": "bg", "x": 0, "y": 0, "disable": true, "sx": 0, "sy": 0, "w": 416, "h": 416, "frame": 4},
+] // x和y为绘制的左上角坐标,sx和sy为裁剪的左上角坐标,w和h为裁剪的宽高(不支持伸缩)
```
-
-images为一个数组,代表当前层所有作为背景素材的图片信息。每一项为一个五元组,分别为该背景素材的x,y,图片名,遮挡方式和帧数。
-
-其中x和y分别为左上角的像素坐标;图片名则必须在全塔属性的images中定义过。
-
-第四项为遮挡方式,定义如下:
-
-- 0:该图片将全部画在背景层,被勇士所遮挡。举例:某些特殊地形等。
-- 1:该图片将全部画在前景层,可以遮挡勇士。举例:云彩等效果。
-- 2:该图片将上部分画在前景层,下部分画在背景层。从而可以达到一个“自动调节遮挡的效果”。举例:树、房子等等。
-
-!> 如果写2的话,最好让x,y和图片高度都是32的倍数!
-
-第五项为图片的帧数,可选。如果进行了设置,则会将该贴图视为帧动画,并切分成对应的帧数。
-
+关于图层,`bg` 和 `fg` 分别表示该贴图全部画在背景层(如沼泽)或前景层(如云),被勇士遮挡或遮挡勇士。
`auto` 表示上部分画在前景层,下部分画在背景层。从而可以达到一个“自动调节遮挡的效果”。举例:树、房子等等。
+!> 如果写 `auto` 的话,最好让 `x, y` 和图片高度都是 `32` 的倍数!
+`frame` 为图片的帧数,可选。如果进行了设置,则会将该贴图视为帧动画,并【从左到右】切分成对应的帧数。
例如,假设图片是100x100的,且帧数设为4,则视为四帧帧动画,每次绘制的图片大小实际上是25x100。
关于楼层贴图和前景、背景层的层叠覆盖关系,默认是:**地板 - 背景贴图 - 背景图块 - 事件 - 勇士 - 前景贴图 - 前景图块**。
@@ -217,11 +199,9 @@ ID必须由数字字母下划线组成,数字在1000以内,且均不能和
所谓`额外素材`,即用户可以自定导入任意张素材图片,无需PS,无需注册,即可直接在游戏中使用。这一点已经十分向RM靠拢了。
-要使用额外素材,请将你需要的素材图片放在`images`目录下,并在`全塔属性`的`tilesets`中定义图片名。
-
+要使用额外素材,请将你需要的素材图片放在 `project\tilesets` 目录下,并在`全塔属性`的`tilesets`中定义图片名。
**该素材的宽高必须都是32的倍数,且图片上的总图块数不超过1000(即最多有1000个32*32的图块在该图片上)。**
-
-```js
+```json
// 在全塔属性中的tilesets导入素材
"tilesets": ["1.png", "2.png"] // 导入两个额外素材,文件名分别是1.png和2.png
```
@@ -316,9 +296,9 @@ function (enemy, hero_hp, hero_atk, hero_def, hero_mdef, x, y, floorId) {
## 新增门和对应的钥匙
如果要新增一个门和对应的钥匙,只需要进行如下三步:
-1. 在 `project\images\animates.png` 中添加开门的四帧动画并注册,其中第一帧也作为未开启的静止门。
-2. 在图块属性中将其默认触发器改为 `openDoor` ,动画帧数填 `1` 表示门未开启时静止在第一帧。
-3. 在 `doorInfo` 中填写需要哪些钥匙(可以填任何消耗类道具)各多少把,开关门分别播放什么音效等。
+1. 在 `project\images\animates.png` 或 `npc48.png` 中添加开门的四帧动画并注册,其中第一帧也作为未开启的静止门。
+2. 在图块属性中将其默认触发器改为 `openDoor`(如果依然写 `null` 则和三色墙一样可以用来制作暗墙),动画帧数填 `1` 表示门未开启时静止在第一帧。
+3. 在 `doorInfo` 中填写需要哪些钥匙(可以填任何消耗类道具)各多少把,开关门时间、开关门分别播放什么音效等。
## 覆盖楼传事件
对于特殊的塔,我们可以考虑修改楼传事件来完成一些特殊的要求,比如镜子可以按楼传来切换表里。
@@ -336,19 +316,21 @@ function (enemy, hero_hp, hero_atk, hero_def, hero_mdef, x, y, floorId) {
## 自定义怪物属性
-如果你对现有的怪物不满意,想自行添加怪物属性也是可以的。具体参见脚本编辑的getSpecials。
+如果你对现有的怪物不满意,想自行添加怪物属性也是可以的。具体参见脚本编辑的 `getSpecials`。
你需自己指定一个special数字,修改属性名和属性提示文字。提示文字可以直接写字符串,或写个函数传入怪物。
如果要改动怪物在手册中的显示数值(也会被用于伤害计算,如模仿),请修改下面的 `getEnemyInfo` 函数。
-如果要修改伤害计算公式,请修改下面的getDamageInfo函数。请注意,如果无法战斗,该函数必须返回`null`。
+如果要修改伤害计算公式,请修改下面的 `getDamageInfo` 函数。请注意,如果无法战斗,该函数必须返回`null`。
!> 如果改动了伤害计算公式,可能导致临界计算崩掉,因此建议将全塔属性中的`useLoop`置为true。
对于毒衰咒、自爆、退化怪物和加点、仇恨值累加等战斗后结算在脚本编辑中的 `afterBattle` 函数中。
对于领域、夹击、阻击、激光、捕捉怪物的检查在脚本编辑中的 `updateCheckBlock` 函数中。
+
+如果想给怪物在血攻防之外添加新的数值项,请阅读 `@zhaouv` 撰写的另一篇文档,并配置表格来实现。
## 自定义快捷键
如果需要绑定某个快捷键为处理一段事件,也是可行的。
diff --git a/_docs/start.md b/_docs/start.md
index 69b6fed1..5f698050 100644
--- a/_docs/start.md
+++ b/_docs/start.md
@@ -47,8 +47,12 @@
如果提示“该素材未被定义”或有红色问号框,请参见[素材注册](#素材注册)。
绘制地图时可以右键弹出菜单,复制、交换、删除图块、选中素材、更改出生点或快速创建常用事件。
从V2.4.2开始,可以使用 `Alt+0~9` 对一个图块素材快速保存,大键盘 `0~9` 来快速选用。
从V2.6.6开始,最近使用的图块也会直接显示在地图下方,您可以随时选取或清空它们。
+
从V2.7开始,除最近使用的图块外,还显示了最常使用的图块,您可以右击它们来置顶和取消置顶。
+
+您还可以用右键在地图上拖动或用左键在素材区 `tileset` 区域拖动来批量选中图块,从而进行复制和平铺绘制。
### 从RMXP导入已有的地图
!> 注:现在已经不推荐此方法,如需从RMXP复刻魔塔请观看 [RM转H5刻塔器使用教程](https://www.bilibili.com/video/av43125840) 进行操作。
+从V2.7起,RM转H5刻塔器被废弃,导出结果仅供阅读,仍需手动翻译成新样板的合适写法。
如果我们想复刻一个现有的,已经被RMXP所制作的塔,也有很便捷的方式,那就是用到我们的“地图生成器”。
首先,我们打开RMXP和对应的项目,可以看到它的地图。
@@ -81,13 +85,16 @@
当地图绘制完毕后,我们可能需要进行属性的编辑。属性编辑有四类:楼层属性、怪物属性、道具属性、全塔属性。
### 楼层属性(快捷键V)
我们切换到楼层属性,并进行一项项的编辑。将鼠标放在中间有具体的每一项注释,这里不再细说。
-
+
从V2.7起,表格的注释被大幅度精简,因此没有下图中显示的那么冗长,上下楼点属性可以通过地图选点指定。
+另外,地面图块被改为了允许使用任何图块(不一定非要是 `terrains.png` 中的)。
+色调的设置提供了颜色选择器,贴图的设置则通过事件编辑器实现,地图的宽高也可以修改了。
+“宝石血瓶效果”的标识符进行了改动,请参考4种血瓶和3种宝石的拾取效果。

### 怪物属性
我们点击右边的怪物图块,可以在左边的框内设置该怪物的各项属性。将鼠标放在中间有具体的每一项注释,这里不再细说。
-
+
从V2.7起,怪物特殊属性的格式强制为数组(即不再允许写单项,之前的单项0也要改为空数组`[]`),在编辑器中通过勾选框的方式启用。游戏作者在“脚本编辑”`getSpecials`中新追加的特殊属性也将在刷新浏览器页面后出现。
有关怪物的更详细信息可参见[元件说明:怪物](element#怪物)。

@@ -95,18 +102,35 @@
### 道具属性
同理,点击道具可以对道具属性进行编辑。
-
+
从V2.6.6起,即捡即用类道具的捡拾效果和其他非装备的使用效果可以通过 `useItemEvent` 项用事件而不是脚本来书写。
+从V2.7起,定义道具属性的js文件被大幅度重构,`text` 和 `tip` 不再通过 `eval` 而是通过模板字符串 `${}` 实现。
+道具子类 `cls` 中的 `keys` 被移除,原本的黄蓝红钥匙的子类被改为 `tools`,
+道具属性中追加了一项“不显示在道具栏”可供您利用,例如制作一些隐藏的剧情物品。
+此外,部分道具的素材被重制,如地震卷轴、怪物手册、楼层传送器、四种解药瓶、金钱袋和两种鞋。
目前大多数道具都已有默认效果。更多信息可参见[元件说明:道具](element#道具)。
### 全塔属性(快捷键B)
我们切换到全塔属性,并进行一项项的编辑。同样鼠标放在中间可以查看注释。
我们可以在这里定义一些全局的属性,比如开始剧情、宝石血瓶数值,破甲反击净化的比例,以及一些系统开关比如是否启用加点,是否允许负伤害等等。
!> **注:name作为游戏的唯一标识符必须进行修改,否则可能会导致存档等出现问题。**
-
-
+
从V2.7起,全塔属性被大幅度重构,同时几类属性之间支持折叠。具体有如下变动:
+1. 音像素材的注册半自动化:现在编辑器会自动读取文件系统,将支持的格式的文件列出,还可以预览/试听。具体支持的格式类型,可以通过点击左上角的“配置表格”来查阅和修改(关于“配置表格”的详细用法,请阅读 `@zhaouv` 撰写的另一篇文档)。
+2. 支持个性化字体:请将`.ttf` 格式的字体文件放在 `project\fonts` 文件夹。
+3. 部分素材目录变动:背景音乐从 `project\sounds` 移到了 `project\bgms`,主角行走图和对话框皮肤图以外的图片从 `project\images` 被移到了 `project\materials`,自动元件和 `tileset` 类素材从 `project\images` 被移到了专门提供的新文件夹 `project\autotiles` 和 `project\tilesets`,且对后者的追加总会追加在末尾。
+4. “难度分歧”现在由事件编辑器编写,分为“名称、简写、`flag:hard`值、颜色和事件”五项,含义分别为:
+ 1. 名称:标题界面点击“开始游戏”后弹出的二级菜单中的名称,您可以简要介绍一下该难度的差异(如减伤比例、初始属性变化)。
+ 2. 简写:即游戏中 `core.status.hard` 的值,将作为横屏状态栏左下角(竖屏状态栏右下角,该位置也作为数字键盘切换按钮,故无难度分歧的情况下推荐在这里注明此功能)、存读档界面和在线游戏排行榜中显示的难度名称。该值也允许使用中文,但请注意控制字数。
+ 3. `flag:hard` 值:同一个名称的游戏结局有多个难度有人通关时,在线游戏排行榜中只统计此flag值最大的难度。
+ 4. 颜色:`flag:__hardColor__` 的值,将作为上述“简写”在状态栏和存读档界面的文字颜色。习惯上低难度用冷色,高难度用暖色。
+ 5. 事件:在全塔属性 `startText` 之前执行的事件,可以设置一些初始属性和道具。
+5. css设置项被合并,现在叫“主样式”,由事件编辑器编辑,同时横竖屏的标题画面支持用不同的图片啦~
+6. 编辑器和游戏中的所有“魔防”都已改名为“护盾”,所有 `experience` 都已改为 `exp`
+7. 主角的初始行走图(包括文件名)可以直接修改了,同时还支持了踏步动画(可以用于剧情对话中,但朝上会自动改为朝下否则不好看),这在表现长翅膀的主角时非常有用。
+8. 第一代全局商店被彻底重构,不再支持长按连续购买。需要自行处理扣钱和涨价问题,但用法也更灵活了,功能也更自由了。
+9. 全局开关被大幅度重构,形如“状态栏是否显示某某项”的开关被合并。其他一些影响道具属性的开关被删除(破炸冰的目标个数请直接在使用效果中指定),检查控制台和夹击上下整也被删除。
上述属性全部修改完毕后,保存,然后点启动服务的“开始游戏”,就可以看到我们写的游戏效果啦!
-## 新建和删除楼层
+## 新建和删除楼层、调节尺寸
如果要新建楼层,请切换到“地图编辑”,输入新的楼层ID,并新建空白地图,然后刷新编辑器。
@@ -114,8 +138,9 @@
你也可以删除当前楼层(比如几个样板层),只需要点击删除楼层再刷新就行。删除楼层并不会删除文件,只是不再被游戏所引入而已。
-你可以在全塔属性 - floorIds中看到所有的楼层。其顺序将影响到楼传器的顺序、浏览地图的顺序和上下楼器等的顺序。
-
+你可以在全塔属性 - floorIds中看到所有的楼层。其顺序将影响到楼传器的顺序、浏览地图的顺序和上下楼器等的顺序。您可以在这里对它们进行顺序的调换和批量删除,只要注意别把出生楼层删了!
+从V2.6.1起,支持修改楼层ID,修改按钮在楼层属性最下面,修改后请立即刷新浏览器页面。
+从V2.7起,还支持调节地图尺寸。调节按钮的位置同上,“偏移”允许你做出“给13×13地图加一圈外墙”、“截取20×20地图的右下角13×13部分”这样的操作。
## 事件编辑
我们点击任意一个图块,都可以进入事件编辑模式。
@@ -135,9 +160,9 @@
### 新素材的添加
如果我们需要新增加一些素材,比如样板中没有的怪物等。
-
我们可以从启动服务打开便捷PS工具,然后选择对应的图片进行添加。
+
我们可以从启动服务打开便捷PS工具,然后选择对应的图片进行添加。非Windows系统,请使用“追加素材”功能。

-在左边选择你要导入到的文件,比如怪物就是enemy.png,道具就是items.png等等,再在右边导入你的新素材图片。
+在左边选择你要导入到的文件,比如怪物就是enemys.png,道具就是items.png等等,再在右边导入你的新素材图片。
之后就可以简单的使用 C 和 V 来复制粘贴了。
保存后,刷新地图编辑器即可生效。
@@ -148,18 +173,18 @@

出现这种情况,是因为我们没有将该素材定义到游戏中,也无法进行使用。
-
要解决这个问题,只需要在左边的图块属性中定义新的图块ID和图块数字即可。ID必须由数字字母下划线组成,ID不允许使用纯数字。图块数字在1000以内,ID和图块数字均不能和已有的进行重复。
+
要解决这个问题,只需要在左边的图块属性中定义新的图块ID和图块数字即可。ID必须由数字字母下划线组成,ID不允许使用纯数字。图块数字在1000以内,ID和图块数字均不能和已有的重复。
有关图块的ID和数字定义请参见[素材的机制](personalization#素材的机制)。
之后刷新编辑器即可。
-
也可以进行自动注册,只需要点击“自动注册”按钮,将对该栏下所有未注册的素材进行自动注册(自动分配ID和数字,随后强烈建议手动修改ID)。
+
也可以进行自动注册,只需要点击“自动注册”按钮,将对该栏下所有未注册的素材进行自动注册(自动分配ID和数字,随后强烈建议立即手动修改ID)。
素材注册完毕后,即可在游戏中正常使用,也可以被地图生成器所识别(需要重开地图生成器)。
### 额外素材
从2.4.2开始,H5魔塔样板支持额外素材,你可以导入任意个类似RM中的tilesets文件,且无需注册即可使用。
-要使用额外素材,请在`全塔属性`中的`tilesets`项,添加额外素材的图片名称,刷新后即可在地图编辑器中使用。
+要使用额外素材,请在`全塔属性`中的`tilesets`项,添加额外素材的图片名称(从V2.7起,额外素材的图片文件要放在 `project\tilestes` 文件夹),刷新后即可在地图编辑器中使用。
额外素材不可注册,其数字、ID和索引都是和该图块在图片上的位置相关,不可编辑。
@@ -178,7 +203,7 @@ HTML5游戏都是可以进行控制台调试的。
- `core.status.hero` 获得当前勇士状态信息。例如`core.status.hero.atk`就是当前勇士的攻击力数值。
- `core.material.enemys` 获得所有怪物信息。例如`core.material.enemys.greenSlime`就是获得绿色史莱姆的属性数据。
- `core.material.items` 获得所有道具的信息。例如`core.material.items.pickaxe`就是获得破墙镐的信息。
-- `flags.debug = true` 开启调试模式;此模式下可以按住 Ctrl 键进行穿墙。
+- `flags.debug = true` 开启调试模式;此模式下可以按住 `Ctrl` 键进行穿墙。
- `core.updateStatusBar()` 立刻更新状态栏和地图显伤,并检查自动事件。
- `core.setStatus('atk', 1000)` 直接设置勇士的某项属性。本句等价于 `core.status.hero.atk = 1000`。
- `core.getStatus('atk')` 返回勇士当前某项属性数值。本句等价于 `core.status.hero.atk`。
@@ -204,16 +229,20 @@ HTML5游戏都是可以进行控制台调试的。
## 编辑器的基本操作
- **H** 查看所有快捷键
-- **Alt+0~9, 0~9** 保存和读取当前选中图块
+- **Alt+0~9, 0~9** 保存和读取当前选中图块(V2.7起,也可以用最常/最近使用图块置顶来代替)
- **W/A/S/D** 移动大地图
- **Ctrl+Z** 撤销上次绘图
- **Ctrl+Y** 重做上次绘图
- **PgUp/PgDn,或滚轮** 切换楼层
- **Ctrl+S** 保存事件编辑器/脚本编辑器
- **地图上单击** 选中该点
+- **DELETE键** 删除选中点的事件和图块
- **地图上双击** 选中该点图块
+- **ESC键** 取消选中的点
- **地图上右键** 弹出菜单栏,包括选中、复制、交换、清除、更改出生点、快速绑定等操作
-- **事件编辑器中Ctrl+C, Ctrl+X, 右键等** 执行相应操作
+- **地图上右键按住并拖动** 批量框选图块,然后可以 `ctrl+C/V` 复制到别处
+- **素材区tileset区域左键按住并拖动** 批量框选素材,然后可以单击地图批量绘制、在地图上拉框平铺
+- **事件编辑器中Ctrl+C, Ctrl+X, 右键, 双击等** 执行相应操作,如进入多行编辑、UI绘制预览等
## 报错处理
diff --git a/_server/config.json b/_server/config.json
index 4965dae4..13bd3550 100644
--- a/_server/config.json
+++ b/_server/config.json
@@ -1 +1 @@
-{"lastUsed":[],"foldPerCol":50,"folded":false,"editorLastFloorId":"sample0","disableBlocklyReplace":false,"disableBlocklyExpandCompare":false,"shortcut":{"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0}}
\ No newline at end of file
+{"lastUsed":[{"idnum":10016,"id":"X10016","images":"magictower.png","x":0,"y":2,"isTile":true,"recent":1590311075105,"frequent":1}],"foldPerCol":50,"folded":false,"editorLastFloorId":"sample1","disableBlocklyReplace":false,"disableBlocklyExpandCompare":false,"shortcut":{"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0}}
\ No newline at end of file
diff --git a/v266-v2.7接档说明.txt b/v266-v2.7接档说明.txt
deleted file mode 100644
index e75cf70a..00000000
--- a/v266-v2.7接档说明.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-V2.6.6 -> V2.7 接档说明:
-
-此版本仅可接档【地图】,【事件】和【怪物数据】。脚本编辑等不可进行接档。
-
-请严格按照此说明进行每一步操作以避免可能的bug。接档前请做好备份。
-
-接档准备:
- - Visual Studio Code
- - 需要进行接档的V266的样板
- - 两个全新的V2.7的样板(一个用于接档结果,一个用于抄部分修改后的内容)
-
-接档步骤:
-1. 将V266的样板中,【project】目录下的如下文件和文件夹,直接复制并覆盖到V2.7的样板中的project目录下:
- - animates/
- - floors/
- - enemys.js
- - events.js
- - icons.js
- - items.js
- - maps.js
-
-2. 将V266样板中,【project/images】目录下的图片,拆分后放入V2.7的对应图片目录下:
- - 系统默认图片放入materials中
- - 自动元件放入autotiles中
- - 额外素材放入tilesets中
- - 使用到的其他图片放入images中
-【请注意】hero.png在V2.7请放入images目录(而不是materials目录)
-
-3. 将V266样板中,【project/sounds】目录下的音乐和音效,分别放入V2.7的bgms和sounds目录。
-
-4. 使用VSCode直接分别打开V266和V2.7的【project/data.js】,并执行以下操作:
- - 将【main】一项的全部内容从V2.6.6直接复制到V2.7
- - 将【firstData】一项中的,【title】,【name】,【floorId】,【hero】直接复制到
- - 在注册的图片中,请手动补上【hero.png】项
- - 在【hero】中【name】上方增加 "image": "hero.png"
- - 在【hero】中【steps】上方新增一项 "followers": []
- - 将【hero】中的【experience】改成【exp】
- - 删除【hero】中【items】中的【keys】项
-请勿覆盖或复制其他内容(例如全塔数值或全局开关),否则可能导致编辑器无法打开。
-
-5. 使用VSCode分别打开接档后的V2.7和纯净的V2.7的【project/items.js】,并执行以下操作:
- - 将三色钥匙的cls从"keys"改成"tools",并新增 "hideInToolbox": true
- - 如下道具的【useItemEffect】和【canUseItemEffect】有所改变,请直接从纯净的V2.7覆盖到你要接档的V2.7:
- - earthquake, pickaxe, icePickaxe, freezeBadge, bigKey, bomb, upFly, downFly
- - 如果确认你的塔不会使用该道具,可忽略
- - 黄宝石和生命魔杖增加了【useItemEvent】;如需使用请进行复制
-
-6. 使用VSCode打开接档后的V2.7的【project/icons.js】,并执行如下操作:
- - 找到【terrains】中的三色墙和六色门,删除对应的这几行
- - yellowWall, blueWall, whiteWall, yellowDoor, blueDoor, redDoor, greenDoor, specialDoor, steelDoor
- - (在V2.7中,terrains不再保留门的引用,门效果仅由animates决定)
- - 将【terrains】中的 moneyShop-left, moneyShop-right, expShop-left, expShop-right 分别重命名为
- blueShopLeft, blueShopRight, pinkShopLeft, pinkShopRight
-
-7. 使用VSCode分别打开接档后的V2.7和纯净的V2.7的【project/maps.js】,并执行以下操作:
- - 将纯净的V2.7中如下ID的行,直接替换掉要接档的V2.7:
- - yellowWall, whiteWall, blueWall, blueShopLeft, blueShopRight, pinkShopLeft, pinkShopRight,
- lavaNet, poisonNet, weakNet, curseNet, yellowDoor, blueDoor, redDoor, greenDoor, specialDoor, steelDoor,
- arrowUp, arrowDown, arrowLeft, arrowRight, light
- - 将所有的 "noPass":false 改成 "canPass":true 原来是 "noPass":true 的请直接删除
- - V2.7中,不再在图块属性使用noPass,而是全部改成了canPass;请检查此文件的全部noPass是否被替换或删除
-
-8. 到这一步后已经可以打开编辑器了。
- - 如果打开编辑器白屏或报错,请检查一下上面是否每个步骤都完成了
- - 如果还有问题请联系小艾
-
-9. 在编辑器中,切换到「全塔属性」标签,并进行修改:
- - V2.7中,全局商店的结构完全重写了,请重新实现一遍
- - 全塔开关中,是否在状态栏显示XXX改成在同一个方框中
- - 删除了部分全局数值和全塔开关
-
-10. 在编辑器中,切换到「脚本编辑」标签,并进行修改:
- - setInitData已经被删除;移动到了开场剧情的startText中
- - 删除了afterChangeLight和afterPassNet脚本
- - 很多函数的实现有所改变,改变较为严重的有:
- - resetGame, changingFloor, afterBattle, getDamageInfo, saveData, loadData,
- updateStatusBar, updateCheckBlock, moveOneStep
- - 修改脚本编辑(例如getDamageInfo)时,请勿直接拿原来的脚本进行覆盖,而是重新对函数进行修改!
-
-11. 在编辑器中,切换到「插件编写」标签,并重新增加新增的插件插件
- - 请勿随意修改已有的默认插件
-
-12. 逐楼层检查firstArrive以及每个点的事件列表;主要事件API变化如下:
- - 所有的「数值增减」事件已被删除,被数值设置+运算符替代
- - 编辑器将无法再解析「数值增减」事件(会被解析成自定义事件),但是游戏中仍然可以正确执行
- - 「隐藏事件」将不再默认删除该点(而只是纯粹的隐藏);请给有需要的「隐藏事件」勾选「同时删除」选项
- - 「重启当前事件」已经被删除并且无法在游戏中使用。请替换成等价的循环处理或者插入事件
- - 在V2.7中,所有的experience全部改名exp;请检查所有对经验值进行操作的地方
-
-其他:
-Jewel改名Gem
-道具效果提示文字replaceText
-
-