模式文件应当是一个合(语)法的lua程序文件，其必须返回一个table，里面的内容包括：
    color:
        必选
        模式的颜色，用于点击地图图标后显示的提示文本
    env:
        必选
        模式环境变量，决定了关卡的各项属性
            *属性名*          *默认值*         *说明*
            drop            60             下落延迟(帧，支持正整数,1/2^n,和0(20G))
            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          是否开启强制任务
            noInitSZO       false          是否禁止SZO块开局，如果禁止，开局序列会自动跳过最多连续五个SZO

            mesDisp         NULL           需要在玩家侧边栏显示的信息(或函数列表,依次执行,可以显示在外面但是强烈不建议)，输入玩家对象
            dropPiece       NULL           放一块后要执行的函数(或函数列表,依次执行)，输入玩家对象
            task            NULL           每帧会*继续执行*的函数(或函数列表,依次执行,返回true会把自身从队列里清除)(初始化时会执行一次，可以用来设置场地等)，输入玩家对象，注意：使用协程技术
            eventSet        false          使用预设事件套件名称(字符串)，和上面三个套件会叠加，使用时请小心，尽量不要同时指定太多组件

            bg              'none'         背景，只能填写内置背景的名字
            bgm             'race'         背景音乐名(或者列表随机，例如{'race','push'})，只能用内置音乐库的音乐名
            allowMod        true           是否允许mod
    load:
        必选
        模式初始化函数，一般创建一个玩家即可
        无输入
        无输出

    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,
        eventSet='checkLine_40',--这个预设eventSet包含了dropPiece和mesDisp，就是40行需要的东西
        bg='bg2',bgm='race',
    },
    load=function()--模式加载函数，这里只生成了一个玩家，常用的单人模式可以不写，默认使用这个函数
        PLY.newPlayer(1)--1是玩家编号，默认用户控制1号玩家
    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]<b[1]or a[1]==b[1]and a[2]<b[2]end,--按照时间排序，时间一样就看块数
    getRank=function(P)--计算评级
        if P.stat.row<40 then return end--你总得打完40行对吧，否则直接return空掉，成绩都不记录
        local T=P.stat.time
        return
        T<=26 and 5 or--时间小于等于26秒就是S级要求
        T<=32.6 and 4 or--A级要求
        T<=52.6 and 3 or--B级要求
        T<=92.9 and 2 or--C级要求
        T<=183 and 1 or--D级要求，解锁别的模式的最低标准
        0--记录成绩的最低标准
    end,
}
