-
Notifications
You must be signed in to change notification settings - Fork 68
Mode (English)
GamerOn117 edited this page Aug 13, 2023
·
3 revisions
The schema file should be a syntactically valid Lua program file, which must return a table
whose contents include:
Required, the color of the mode, which is used for the prompt text displayed after clicking the map icon.
Required, the mode environment variable, determines the attributes of the level.
See the table below for specific parameters:
Attribute name | Default | Explanation |
---|---|---|
drop |
60 |
Drop delay (in frames, supports positive integers, 2^(-n) , and 0 [20G]) |
lock |
60 |
Lock delay (in frames) |
wait |
0 |
Block delay(in frames) |
fall |
0 |
Line clear delay(in frames) |
hang |
0 |
Apnea delay(in frames) |
bone |
false |
Whether to enable bone block mode |
fieldH |
20 |
Field height |
heightLimit |
1e99 |
Height limit |
nextCount |
6 |
Blocks in Next queue |
nextStartPos |
1 |
Blocks to show in start position |
holdCount |
1 |
Number of blocks to hold |
infHold |
false |
Whether to hold blocks infinitely |
phyHold |
false |
Whether to enable Hold physics |
ospin |
true |
Whether to allow O-Spins |
deepDrop |
false |
Whether to enable Deep Drop |
RS |
'TRS' |
Rotation system |
das |
10 |
DAS |
arr |
2 |
ARR |
sddas |
2 |
Soft drop DAS |
sdarr |
2 |
Soft drop ARR |
mindas |
0 |
Minimum DAS |
minarr |
0 |
Minimum ARR |
minsdarr |
0 |
Minimum soft drop ARR |
ihs |
true |
Whether to Hold in advance |
irs |
true |
Whether to rotate in advance |
ims |
true |
Whether to move in advance |
FTlock |
true |
Whether to enable logical frame tracking and force acceleration logic when the screen is less than 60 frames, so as not to slow down the game |
skinSet |
[设置] | Block texture, only the name of the built-in skin can be filled in |
skin |
[设置] | Block color, a table of 25 integers (1 ~16 ) |
face |
[设置] | Block orientation, a table of 25 integers (0 ~3 ) |
block |
true |
Whether to display the block |
ghost |
0.3 |
Ghost block transparency(0 ~1 ) |
center |
1 |
Rotation center transparency(0 ~1 ) |
smooth |
false |
Whether the block falls smoothly |
grid |
0.16 |
Grid transparency(0 ~1 ) |
bagLine |
true |
Whether to show packet boundaries (if present) |
lockFX |
2 |
Lock effect level (integer from 0 ~5 ) |
dropFX |
2 |
Hard drop effect level(integer from 0 ~5 ) |
moveFX |
2 |
Movement effect level(integer from 0 ~5 ) |
clearFX |
2 |
Line clear effect level(integer from 0 ~5 ) |
splashFX |
2 |
Splash effect level(integer from 0 ~5 ) |
shakeFX |
2 |
Shake effect levle(integer from 0 ~5 ) |
atkFX |
2 |
Attack effect level(integer from 0 ~5 ) |
text |
true |
Whether to display line text |
score |
true |
Whether to display score |
highCam |
false |
Whether to open the super screen view |
nextPos |
false |
Whether to enable generate preview |
showSpike |
false |
Whether to enable the spike counter |
hideBoard |
false |
To hide upper/lower halves of the board("down " |
flipBoard |
false |
To flip or rotate the board("U-D " |
sequence |
bag |
Sequence mode is a refresh function for the next sequence after putting a block, you can use several default functions to represent with strings,you can also write one yourself. Note: use coroutine technology |
seqData |
{1,2,3,4,5,6,7} |
"packet" data used by sequence mode (The essence is to generate the data for the sequence, which will be passed as a parameter to the sequence generation function called sequence above, not necessarily a package) |
mission |
false |
A table containing tasks, the description is omitted temporarily |
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 |
需要在玩家侧边栏显示的信息(或函数列表,依次执行,可以显示在任何地方但是强烈不建议脱离玩家框体),输入玩家对象 |
hook_drop |
NULL |
放一块后要执行的函数(或函数列表,依次执行),输入玩家对象 |
hook_die |
NULL |
通常的死亡条件(超高和窒息)时触发(或函数列表,依次执行),输入玩家对象 |
task |
NULL |
每帧会继续执行的函数(或函数列表,依次执行,返回true 会把自身从队列里清除) (初始化时会执行一次,可以用来设置场地等),输入玩家对象,注意:使用协程技术 |
eventSet |
false |
使用预设事件套件名称(字符串),和上面四个套件会叠加,使用时请小心,尽量不要同时指定太多组件 |
bg |
'none' |
背景,只能填写内置背景的名字 |
bgm |
'race' |
背景音乐名(或者列表随机,例如{‘race ','push '}),只能用内置音乐库的音乐名 |
allowMod |
true |
是否允许mod |
必选,模式初始化函数,一般创建一个玩家即可,无输入,无输出。
可选(不填就没有分数保存和计算),一局打完后要存储的数据。
输入玩家对象,输出游戏结束瞬间返回一个包含直接决定该模式成绩的数据 table (会被强制加上date
标签)。
可选(模式不出现在地图上的时候不用写),是把score()
存起来的table转换为字符串显示出来的函数。 输入一个成绩 table,输出一个字符串。
可选(没有score
函数的时候不用写),是成绩 table 之间对比并排序的规则。
输入两个成绩table,输出[第一个是不是排在第二个前面]的布尔值(可以类比”小于"运算)
可选,模式评级函数,是用于评价玩家表现的函数。
输入玩家对象,输出 0
~5
,0
表示除了记录到排行榜外什么都不做;
1/2/3/4/5 表示 B/A/S/U/X 级,能解锁连接的模式,还会让模式图标在地图上显示不同的颜色。
以下是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秒就是X级要求
T<=32.6 and 4 or --U级要求
T<=52.6 and 3 or --S级要求
T<=92.9 and 2 or --A级要求
T<=183 and 1 or --B级要求,解锁别的模式的最低标准
0 --记录成绩的最低标准
end,
}