From 42430e2dc7f541fc197316714adbd601bb023a6f Mon Sep 17 00:00:00 2001 From: MrZ626 <1046101471@qq.com> Date: Mon, 30 Nov 2020 19:00:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E6=96=87=E6=A1=A3=E5=88=9D?= =?UTF-8?q?=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- document/mode.txt | 144 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 document/mode.txt diff --git a/document/mode.txt b/document/mode.txt new file mode 100644 index 00000000..d9da7a96 --- /dev/null +++ b/document/mode.txt @@ -0,0 +1,144 @@ +一个正确的模式文件应是一个合法lua程序,其必须立刻返回一个table,里面的内容包括: + color:模式的颜色,用于点击地图图标后显示的提示文本 + env: + 必选 + 模式环境变量,决定了关卡的各项属性 + table值: + drop:下落延迟(帧,支持自然数和2的整数次幂) + lock:锁定延迟(帧) + wait:出块延迟(帧) + fall:下落延迟(帧) + bone:是否开启骨块模式 + nextCount:显示next个数 + nextStartPos:next从第几个开始显示 + holdCount:hold个数, + infHold:是否能无限hold + ospin=是否能O-spin + RS:旋转系统名 + + das:DAS + arr:ARR + sddas:软降DAS + sdarr:软降ARR + mindas:允许的最小DAS + minarr:允许的最小ARR + minsdarr:允许的最小软降ARR + ihs:提前Hold + irs:提前旋转 + ims:提前移动 + maxNext:最大next数 + + skin:方块颜色,包含25个整数(1~16)的table + face:方块朝向,包含25个整数(0~3)的table + + block:是否显示方块 + ghost:影子透明度(0~1) + center:旋转中心透明度(0~1) + smooth:是否平滑下落 + grid:是否显示网格 + bagLine:是否显示包分界线 + lockFX:特效等级(0,5) + dropFX:特效等级(0,5) + moveFX:特效等级(0,5) + clearFX:特效等级(0,5) + splashFX:特效等级(0,5) + shakeFX:特效等级(0,5) + atkFX:特效等级(0,5) + + text:是否显示消行文本 + score:是否显示落块分数 + warn:是否开启死亡预警 + highCam:是否开启超屏视野 + nextPos:是否开启生成预览 + + sequence:序列模式,可以使用默认的几个函数用字符串表示,也可以自己写 + freshMethod=放一块后对next序列的刷新函数,不使用默认sequence的话就要自己写 + bag:一包的方块(本质是基准序列,不一定是包) + mission:包含任务的table,说明暂时略 + + life:生命数, + pushSpeed:上涨速度 + noTele:是否禁止10个高级按键, + visible:方块可见性,填写固定的几个字符串 + freshLimit:锁延刷新次数限制 + easyFresh:是否使用简单锁延刷新规则 + + Fkey:按下功能键后执行的函数 + keyCancel:包含禁止使用的按键的id们的table + fineKill:是否开启非极简即死 + b2bKill:是否开启断b2b即死 + missionKill:是否开启强制任务 + target:目标行数,如果dropPiece使用了默认的几个通用通关函数或者自己有一个目标数字就要写 + dropPiece:放一块后要执行的函数,输入玩家对象 + + bg:背景,只能填写默认背景的名字 + bgm:背景音乐,只能填写默认音乐库的音乐名 + noMod:是否禁用玩家开启mod + load: + 必选 + 模式初始化函数,一般创建一个玩家即可 + 无输入和输出 + mesDisp: + 必选 + 模式显示信息,是一个绘图函数,坐标系原点是玩家对象最左上角 + 输入玩家对象 + 无输出 + + score: + 可选(不填就没有分数保存和计算) + 一局打完后要存储的数据 + 输入玩家对象 + 输出游戏结束瞬间返回一个包含直接决定该模式成绩的数据table(会被强制加上date标签) + + scoreDisp: + 可选(当模式不出现在地图上的时候) + 是把score()存起来的table转换为字符串显示出来的函数 + 输入一个成绩table + 输出一个字符串 + + comp: + 可选(当没有score函数的时候) + 是成绩table之间对比并排序的规则 + 输入两个成绩table + 输出[第一个是不是排在第二个前面]的布尔值(可以类比"小于"运算) + + getRank: + 可选,模式评级函数 + 是用于评价玩家表现的函数 + 输入玩家对象 + 返回0~5,0表示除了记录到排行榜外什么都不做;1/2/3/4/5表示D/C/B/A/S级,能解锁连接的模式,还会让模式图标在地图上显示不同的颜色 + +以下是40行的模式文件内容: +//sprint_40.lua +return{--返回一个table,你也可以在之前定义一些常量或者函数什么的 + color=COLOR.green,--颜色 + env={--模式环境变量 + drop=60,lock=60, + target=40,dropPiece=PLY.check_lineReach, + bg="bg2",bgm="race", + }, + load=function()--生成玩家 + PLY.newPlayer(1,340,15) + end, + mesDisp=function(P)--40行模式需要显示的信息 + setFont(55) + local r=40-P.stat.row + if r<0 then r=0 end + mStr(r,69,335)--把计算出来的剩余行数r显示出来 + PLY.draw.drawTargetLine(P,r)--使用自带的境界高度线绘制函数 + end, + score=function(P)return{P.stat.time,P.stat.piece}end,--游戏结束时需要保存的本局关键信息 + scoreDisp=function(D)return toTime(D[1]).." "..D[2].." Pieces"end,--把score返回的数据显示出来的方法 + comp=function(a,b)return a[1]