模式文件应当是一个合(语)法的lua程序文件,其必须返回一个table,里面的内容包括: color: 必选 模式的颜色,用于点击地图图标后显示的提示文本 env: 必选 模式环境变量,决定了关卡的各项属性 table值: drop:下落延迟(帧,支持自然数和2的整数次幂) lock:锁定延迟(帧) wait:出块延迟(帧) fall:下落延迟(帧) bone:是否开启骨块模式 fieldH:场地高度 heightLimit:允许的最大场地高度 nextCount:显示next个数 nextStartPos:next从第几个开始显示 holdCount:hold个数 infHold:是否能无限hold phyHold:是否开启物理hold ospin=是否能O-spin deepDrop:是否开启深降 RS:旋转系统名 das:DAS arr:ARR sddas:软降DAS sdarr:软降ARR mindas:允许的最小DAS minarr:允许的最小ARR minsdarr:允许的最小软降ARR ihs:提前Hold irs:提前旋转 ims:提前移动 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=序列模式,是放一块后对next序列的刷新函数,可以使用默认的几个函数用字符串表示。也可以自己写一个,注意:使用协程技术 seqData:序列模式使用的"包"数据(本质是生成序列用的数据,会作为参数传进序列生成函数,不一定是包) mission:包含任务的table,说明暂时略 life:生命数 garbageSpeed:垃圾行释放速度 pushSpeed:垃圾行上涨速度 noTele:是否禁止10个高级按键 visible:方块可见性,填写固定的几个字符串 freshLimit:锁延刷新次数限制 easyFresh:是否使用简单锁延刷新规则 bufferLimit:攻击缓冲行数上限 fkey1:按下功能键1后执行的函数 fkey2:按下功能键2后执行的函数 keyCancel:包含禁止使用的按键的id们的table,例如{1,2}就是禁止左右移 fineKill:是否开启非极简即死 b2bKill:是否开启断b2b即死 missionKill:是否开启强制任务 dropPiece:放一块后要执行的函数,输入玩家对象 bg:背景,只能填写内置背景的名字 bgm:背景音乐名(或者列表随机,例如{"race","push"}),只能用内置音乐库的音乐名 allowMod:是否允许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_40l.lua return{--返回一个table,你也可以在之前定义一些常量或者函数什么的 color=COLOR.green,--颜色 env={--模式环境变量 drop=60,lock=60, dropPiece=function(P)if P.stat.row>=40 then P:win('finish')end end, bg='bg2',bgm='race', }, load=function()--生成玩家 PLY.newPlayer(1)--1是玩家编号,默认用户控制1号玩家 end, mesDisp=function(P)--40行模式需要显示的信息 setFont(55) local r=40-P.stat.row if r<0 then r=0 end mStr(r,69,265)--把计算出来的剩余行数r显示出来 PLY.draw.drawTargetLine(P,r)--使用自带的境界高度线绘制函数 end, score=function(P)return{P.stat.time,P.stat.piece}end,--游戏结束时需要保存的本局关键信息 scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,--把score返回的数据显示出来的方法 comp=function(a,b)return a[1]