正确的模式文件应当是一个合法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:提前移动 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:是否使用简单锁延刷新规则 fkey1:按下功能键1后执行的函数 fkey2:按下功能键2后执行的函数 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_40l.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)--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.frame/60,P.stat.piece}end,--游戏结束时需要保存的本局关键信息 scoreDisp=function(D)return toTime(D[1]).." "..D[2].." Pieces"end,--把score返回的数据显示出来的方法 comp=function(a,b)return a[1]