模式文件应当是一个合(语)法的lua程序文件,其必须返回一个table,里面的内容包括: color: 必选 模式的颜色,用于点击地图图标后显示的提示文本 env: 必选 模式环境变量,决定了关卡的各项属性 *属性名* *默认值* *说明* drop 60 下落延迟(帧,支持自然数和2的整数次幂) lock 60 锁定延迟(帧) wait 0 出块延迟(帧) fall 0 消行延迟(帧) bone false 是否开启骨块模式 fieldH 20 场地高度 heightLimit 1e99 允许的最大场地高度 nextCount 6 显示next个数 nextStartPos 1 next从第几个开始显示 holdCount 1 hold个数 infHold false 是否能无限hold phyHold false 是否开启物理hold ospin true 是否能O-spin deepDrop false 是否开启深降 RS 'TRS' 旋转系统名 das 10 DAS arr 2 ARR sddas 2 软降DAS sdarr 2 软降ARR mindas 0 允许的最小DAS minarr 0 允许的最小ARR minsdarr 0 允许的最小软降ARR ihs true 提前Hold irs true 提前旋转 ims true 提前移动 skinSet [设置] 方块贴图,只能填写内置皮肤的名字 skin [设置] 方块颜色,包含25个整数(1~16)的table face [设置] 方块朝向,包含25个整数(0~3)的table block true 是否显示方块 ghost 0.3 影子透明度(0~1) center 1 旋转中心透明度(0~1) smooth false 是否平滑下落 grid 0.16 网格透明度(0~1) bagLine true 是否显示包分界线(如果存在) lockFX 2 锁定特效等级(0~5整数) dropFX 2 瞬间下落特效等级(0~5整数) moveFX 2 移动特效等级(0~5整数) clearFX 2 消除特效等级(0~5整数) splashFX 2 溅射特效等级(0~5整数) shakeFX 2 晃动特效等级(0~5整数) atkFX 2 攻击特效等级(0~5整数) text true 是否显示消行文本 score true 是否显示落块分数 highCam false 是否开启超屏视野 nextPos false 是否开启生成预览 showSpike false 是否开启spike计数器 hideBoard false 场地隐藏模式("down"|"up"|"all") flipBoard false 场地翻转模式("U-D"|"L-R"|"180") sequence 'bag' 序列模式,是放一块后对next序列的刷新函数,可以使用默认的几个函数用字符串表示。也可以自己写一个,注意:使用协程技术 seqData {1,2,3,4,5,6,7}序列模式使用的"包"数据(本质是生成序列用的数据,会作为参数传进上面那个叫sequence的序列生成函数,不一定是包) mission false 包含任务的table,说明暂时略 life 0 生命数(复活次数) garbageSpeed 1 垃圾行释放速度 pushSpeed 3 垃圾行上涨速度 noTele false 是否禁止10个高级按键 visible 'show' 方块可见性,填写固定的几个字符串 freshLimit 1e99 锁延刷新次数限制 easyFresh true 是否使用简单锁延刷新规则 bufferLimit 1e99 攻击缓冲行数上限 fkey1 false 按下功能键1后执行的函数 fkey2 false 按下功能键2后执行的函数 keyCancel {} 包含禁止使用的按键的id,例如{1,2}就是禁止左移和右移 fine [设置] 是否开启非极简提示音 fineKill false 是否开启非极简即死 b2bKill false 是否开启断b2b即死 missionKill false 是否开启强制任务 dropPiece NULL 放一块后要执行的函数,输入玩家对象 task NULL 每帧会*继续执行*的函数,输入玩家对象,注意:使用协程技术 noInitSZO false 是否禁止SZO块开局,如果禁止,开局序列会自动跳过最多连续五个SZO bg 'none' 背景,只能填写内置背景的名字 bgm 'race' 背景音乐名(或者列表随机,例如{'race','push'}),只能用内置音乐库的音乐名 allowMod true 是否允许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,63,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]