Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fd5fac4e8a | ||
|
|
1641440886 | ||
|
|
c14124d00c |
BIN
BGM/blank.ogg
BIN
BGM/cruelty.ogg
BIN
BGM/end.ogg
BIN
BGM/final.ogg
BIN
BGM/infinite.ogg
BIN
BGM/newera.ogg
BIN
BGM/push.ogg
BIN
BGM/race.ogg
BIN
BGM/reason.ogg
BIN
BGM/way.ogg
@@ -70,7 +70,7 @@ function button:draw()
|
||||
end
|
||||
end
|
||||
function button:getInfo()
|
||||
print(format("x=%d,y=%d,w=%d,h=%d,font=%d",self.x,self.y,self.w,self.h,self.font))
|
||||
print(format("x=%d,y=%d,w=%d,h=%d,font=%d",self.x+self.w*.5,self.y+self.h*.5,self.w,self.h,self.font))
|
||||
end
|
||||
|
||||
local switch={type="switch"}
|
||||
@@ -108,7 +108,6 @@ function switch:draw()
|
||||
--frame
|
||||
local t=self.text
|
||||
if t then
|
||||
if type(t)=="function"then t=t()end
|
||||
gc.setColor(1,1,1)
|
||||
setFont(self.font)
|
||||
gc.printf(t,x-412,y+20-self.font*.7,400,"right")
|
||||
|
||||
12
conf.lua
@@ -1,4 +1,5 @@
|
||||
gameVersion="Alpha V0.7.28"
|
||||
math.randomseed(os.time())
|
||||
gameVersion="Alpha V0.7.32"
|
||||
function love.conf(t)
|
||||
t.identity="Techmino"--Save directory name
|
||||
t.version="11.1"
|
||||
@@ -9,7 +10,12 @@ function love.conf(t)
|
||||
t.audio.mixwithsystem=true--Switch on to keep sysBGM
|
||||
|
||||
local W=t.window
|
||||
W.title=math.random()>.01 and "Techmino "..gameVersion or"MrZ NB!"
|
||||
if math.random()>.26 then
|
||||
W.title="Techmino "..gameVersion
|
||||
else
|
||||
math.randomseed(tonumber(os.date("%Y%j")))
|
||||
W.title="Your lucky number today:"..math.random(100,626)
|
||||
end
|
||||
W.icon="/image/icon.png"
|
||||
W.width,W.height=1280,720
|
||||
W.minwidth,W.minheight=640,360
|
||||
@@ -17,7 +23,7 @@ function love.conf(t)
|
||||
W.resizable=1
|
||||
W.fullscreentype="desktop"--"exclusive"
|
||||
W.fullscreen=X
|
||||
W.vsync=X--0→∞fps
|
||||
W.vsync=0--0→∞fps
|
||||
W.msaa=X--The number of samples to use with multi-sampled antialiasing (number)
|
||||
W.depth=X--Bits per sample in the depth buffer
|
||||
W.stencil=1--The number of bits per sample in the stencil buffer
|
||||
|
||||
1391
dataList.lua
97
default_data.lua
Normal file
@@ -0,0 +1,97 @@
|
||||
setting={
|
||||
das=10,arr=2,
|
||||
sddas=0,sdarr=2,
|
||||
quickR=true,swap=true,
|
||||
fine=false,
|
||||
--game
|
||||
|
||||
ghost=true,center=true,
|
||||
smo=true,grid=false,
|
||||
dropFX=3,
|
||||
shakeFX=3,
|
||||
atkFX=3,
|
||||
frameMul=100,
|
||||
--
|
||||
fullscreen=false,
|
||||
bg=true,
|
||||
bgblock=true,
|
||||
lang=1,
|
||||
skin=1,
|
||||
--graphic
|
||||
|
||||
sfx=10,bgm=7,
|
||||
vib=3,voc=0,
|
||||
stereo=6,
|
||||
--sound
|
||||
|
||||
keyMap={
|
||||
{"left","right","x","z","c","up","down","space","tab","r"},
|
||||
{},{},{},{},{},{},{},
|
||||
--keyboard
|
||||
{"dpleft","dpright","a","b","y","dpup","dpdown","rightshoulder","x","leftshoulder"},
|
||||
{},{},{},{},{},{},{},
|
||||
--joystick
|
||||
},
|
||||
VKSwitch=true,
|
||||
VKTrack=true,--If tracked
|
||||
VKDodge=false,--If repel
|
||||
VKTchW=3,--Touch Weight
|
||||
VKCurW=4,--CurPos Weight
|
||||
VKIcon=true,
|
||||
VKAlpha=3,
|
||||
--control
|
||||
}
|
||||
local L=setting.keyMap
|
||||
for i=1,#L do
|
||||
for j=1,20 do
|
||||
if not L[i][j]then
|
||||
L[i][j]=""
|
||||
end
|
||||
end
|
||||
end
|
||||
stat={
|
||||
run=0,game=0,time=0,
|
||||
extraPiece=0,extraRate=0,
|
||||
key=0,rotate=0,hold=0,piece=0,row=0,
|
||||
atk=0,send=0,recv=0,pend=0,
|
||||
clear_1=0,clear_2=0,clear_3=0,clear_4=0,
|
||||
spin_0=0,spin_1=0,spin_2=0,spin_3=0,
|
||||
b2b=0,b3b=0,pc=0,score=0,
|
||||
}
|
||||
--Things related to virtualkey
|
||||
function restoreVirtualKey()
|
||||
for i=1,#VK_org do
|
||||
local B,O=virtualkey[i],VK_org[i]
|
||||
B.ava=O.ava
|
||||
B.x=O.x
|
||||
B.y=O.y
|
||||
B.r=O.r
|
||||
end
|
||||
end
|
||||
local O,_=true,false
|
||||
VK_org={--Original set,for restore VK' position
|
||||
{ava=O,x=80, y=720-200, r=80},--moveLeft
|
||||
{ava=O,x=320, y=720-200, r=80},--moveRight
|
||||
{ava=O,x=1280-80, y=720-200, r=80},--rotRight
|
||||
{ava=O,x=1280-200, y=720-80, r=80},--rotLeft
|
||||
{ava=O,x=1280-200, y=720-320, r=80},--rotFlip
|
||||
{ava=O,x=200, y=720-320, r=80},--hardDrop
|
||||
{ava=O,x=200, y=720-80, r=80},--softDrop
|
||||
{ava=O,x=1280-320, y=720-200, r=80},--hold
|
||||
{ava=O,x=1280-80, y=280, r=80},--func
|
||||
{ava=O,x=80, y=280, r=80},--restart
|
||||
{ava=_,x=100, y=50, r=80},--insLeft
|
||||
{ava=_,x=200, y=50, r=80},--insRight
|
||||
{ava=_,x=300, y=50, r=80},--insDown
|
||||
{ava=_,x=400, y=50, r=80},--down1
|
||||
{ava=_,x=500, y=50, r=80},--down4
|
||||
{ava=_,x=600, y=50, r=80},--down10
|
||||
{ava=_,x=700, y=50, r=80},--dropLeft
|
||||
{ava=_,x=800, y=50, r=80},--dropRight
|
||||
{ava=_,x=900, y=50, r=80},--addToLeft
|
||||
{ava=_,x=1000, y=50, r=80},--addToRight
|
||||
}
|
||||
virtualkey={}
|
||||
for i=1,#VK_org do
|
||||
virtualkey[i]={}
|
||||
end
|
||||
116
document.txt
@@ -1,31 +1,89 @@
|
||||
攻击系统:
|
||||
消1/2/3/4攻击0/1/2/4
|
||||
spin1/2/3攻击2/4/6,若mini则减半
|
||||
b2b:增加1~2(tetris)/1~3(spin)攻击
|
||||
b3b:满b2b效果+1额外抵挡
|
||||
PC:其它攻击与6~8(本局内递增)取高+2额外抵挡
|
||||
连击:0,0,1,1,2,2,3,3,4,4,3……
|
||||
游戏方法:
|
||||
控制系统提供的一个个方块,每填满场地的一行就会将其消除,根据消除方式会给对手攻击(如果有对手的话)
|
||||
完成当前游戏模式中的目标或者是活到最后即算胜利.
|
||||
|
||||
旋转系统:
|
||||
使用Techmino专属旋转系统,细节不赘述
|
||||
|
||||
spin判定:
|
||||
结合了不可移动判定和三角判定,是否为mini也与这二者有关,细节不赘述
|
||||
|
||||
攻击系统:
|
||||
消1/2/3/4攻击0/1/2/4
|
||||
spin1/2/3攻击2/4/6,若mini则减半
|
||||
b2b:增加1~2(tetris)/1~3(spin)攻击
|
||||
b3b:满b2b效果+1额外抵挡
|
||||
PC:其它攻击与6~8(本局内递增)取高+2额外抵挡
|
||||
连击:0,0,1,1,2,2,3,3,4,4,3……
|
||||
|
||||
back to back(B2B)点数说明:
|
||||
B2B点数的范围在0~1200
|
||||
在40及以上特殊消除时B2B,在1000以上特殊消除时B3B,1200封顶
|
||||
消四+100
|
||||
空spin加20,不超过1000
|
||||
spin1~3+50/100/180 (mini*.5)
|
||||
普通消除-250
|
||||
1000以上空放一块-40(不减到低于1000)
|
||||
|
||||
攻击延迟:
|
||||
消2/3的攻击生效最快,消四其次,spin攻击生效较慢,高连击生效最慢
|
||||
b2b或者b3b增加攻击力的同时也会减缓一点生效速度,mini大幅减缓生效速度
|
||||
|
||||
抵消逻辑:
|
||||
发动攻击时,若缓冲条有攻击则先用额外抵挡再用攻击力1:1抵消最先受到的攻击
|
||||
没有用上的额外抵挡会被丢弃,最后剩下的攻击力会发送给对手
|
||||
|
||||
|
||||
抵消逻辑:发动攻击时,若缓冲条有攻击则先用额外抵挡再用攻击力抵消受到的攻击,多余的攻击力会发送给对手,没有用上的额外抵挡会被丢弃。
|
||||
|
||||
|
||||
攻击延迟:消2/3的攻击生效最快,消四其次,spin攻击生效较慢,高连击生效最慢,b2b或者b3b增加攻击力的同时也会减缓一点生效时间,mini大幅增加生效时间。
|
||||
|
||||
|
||||
back to back点数说明:取值范围0~1200
|
||||
在40及以上特殊消除时b2b,在1000以上特殊消除时b3b,1200封顶
|
||||
消四+100
|
||||
空spin加20,不超过1000
|
||||
spin1~3+50/100/180 (mini*.5)
|
||||
普通消除-250
|
||||
1000以上空放一块-40(不减到低于1000)
|
||||
|
||||
|
||||
吃鸡模式:
|
||||
许多玩家同时进行一局游戏(其它的是AI,不是真人),坚持到最后的玩家胜利。随着玩家数量的减少,方块下落/垃圾生效速度/垃圾升起速度都会增加。淘汰其它玩家后可以获得一个徽章和该玩家持有的徽章,增强自己的攻击力。
|
||||
玩家可选四个攻击模式:
|
||||
1.随机:每次攻击后10%随机锁定一个玩家
|
||||
2.最多徽章:攻击后或者锁定玩家死亡时锁定徽章最多的玩家
|
||||
3.最高:攻击后或者锁定玩家死亡时锁定场地最高的玩家(每秒刷新)
|
||||
4.反击:攻击所有锁定自己的玩家(AOE),若无则伏击随机玩家
|
||||
模式说明:
|
||||
竞速:
|
||||
用你最快的速度消除40行(据难度而定)吧!
|
||||
马拉松:
|
||||
根据总消行数,速度会逐渐加快,消除两百行吧!(easy和hard就是normal开始和结束的速度,消除200行不加速)
|
||||
大师:
|
||||
马拉松进化版,如果觉得马拉松太简单了久玩这个吧,每一个难度都是一层境界,L难度和U难度攒到500点数通关,final难度为上级者专属游戏模式,不建议游玩.
|
||||
经典:
|
||||
使用低速控制设置在高速下落时尽可能消除更多的行,没有通关目标.(到90有"彩蛋")
|
||||
禅:
|
||||
闲得无聊,只是想单纯地打打块地时候可以玩此模式,无重力消除200行.
|
||||
无尽:
|
||||
无尽模式,边上会显示玩家的消行数和攻击效率,适合科研(术语).
|
||||
单挑:
|
||||
和一个电脑玩家单挑,带加号的和最后一个模式是超强机器人(仅限Windows平台),试试你能稳定打败多难的对手吧!
|
||||
回合制:
|
||||
玩法同单挑模式,只不过只有当一个人放下一个方块后另一个人才能放下一块.
|
||||
仅TSD:
|
||||
这个模式中,玩家必须用TSD(T spin double)的方式消除,否则直接判负,你能连续打出多少个TSD呢?
|
||||
隐形:
|
||||
根据不同难度,场地内(甚至当前方块)会隐形,看看你能活多久吧!(GM难度为类似TGM3的GM Roll,用于上级者练习)
|
||||
挖掘:
|
||||
每隔一定时间,系统会向场地的低端添加一行垃圾行,间隔会随着波数增加而越来越短,你能顶住几波呢?
|
||||
生存:
|
||||
每隔一定时间,系统会向玩家的垃圾缓冲槽中添加垃圾行,释放速度和间隔会随着波数增加而越来越短,玩家可以将其抵消也可以让其释放,尽可能活更久的时间.
|
||||
防守:
|
||||
系统会向玩家的垃圾缓冲槽中添加难消除的垃圾行,释放速度和间隔会随着波数增加而越来越短,玩家要尽量抵消他们来让自己存活更久.
|
||||
进攻:
|
||||
当玩家的攻击缓冲槽空时,系统会向玩家的垃圾缓冲槽中添加大量的垃圾行(高难度下后期甚至会远超过20),释放速度和间隔都会随着波数增加而越来越短,垃圾上涨速度也会提升.赶紧在其释放之前将攻击抵消到不会一下致命的量!
|
||||
科研:
|
||||
玩家只被允许做特殊消除(spin/全消/消四),在带+的难度中不允许消四,U难度下玩家甚至只被允许每一个方块都使用最简操作控制,任何违反规则的行为都会判负.
|
||||
C4W练习:(或者说是4w练习)
|
||||
系统直接提供给玩家"留4列"的场地,玩家可以自由练习4w消除,该技巧在某些时候实战很有用.(需要学会spin,否则意义不是很大)
|
||||
全清训练:
|
||||
系统会连续给玩家提供"标准开局PC套路"的场地和四个方块(不允许使用hold),玩家需要一直完成PC,否则判负.
|
||||
全清挑战:
|
||||
在消除一百行的限制内,你能全清几次?
|
||||
49人混战:
|
||||
许多玩家同时进行一局游戏(其它的是AI,不是真人).随着玩家数量的减少,方块下落/垃圾生效速度/垃圾升起速度都会增加.淘汰其它玩家后可以获得一个徽章和该玩家持有的徽章,增强自己的攻击力.
|
||||
玩家可选四个攻击模式:
|
||||
1.随机:每次攻击后10%随机挑选一个玩家锁定
|
||||
2.最多徽章:攻击后或者锁定玩家死亡时锁定徽章最多的玩家
|
||||
3.最高:攻击后或者锁定玩家死亡时锁定场地最高的玩家(每秒刷新)
|
||||
4.反击:攻击所有锁定自己的玩家(AOE),若无则伏击随机玩家
|
||||
坚持到最后的玩家就是胜利者.
|
||||
99人混战:
|
||||
同49人混战,只是增加到了99名玩家,难度系数也有调整,对设备的要求也较高.
|
||||
干旱:
|
||||
系统提供的方块序列变得奇怪了!你能消除100行不死吗,或者,多快?
|
||||
多人:
|
||||
使用键盘或者多个手柄(也许?)
|
||||
自定义:
|
||||
玩家可以自由调整下落速度等等几乎大多数设置(不包括上述各种游戏模式的特殊效果),也可以画一个场地去消除或者是作为提示模板来玩方块拼图.在拼图模式下,按功能键切换是否显示提示模板.其中打"X"的格子不允许有方块,空的格子可以是任何状态,玩家能获得的七种普通方块必须完全符合,垃圾行方块的为止只要有方块就可以,但是不能是空气,玩家拼出自己画的图后就会判定胜利.
|
||||
BIN
image/block.png
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
BIN
image/icon.png
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 40 KiB |
BIN
image/virtualkey.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 370 B |
|
Before Width: | Height: | Size: 227 B |
|
Before Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 219 B |
|
Before Width: | Height: | Size: 219 B |
|
Before Width: | Height: | Size: 243 B |
|
Before Width: | Height: | Size: 262 B |
|
Before Width: | Height: | Size: 241 B |
|
Before Width: | Height: | Size: 243 B |
|
Before Width: | Height: | Size: 220 B |
@@ -1,4 +1,13 @@
|
||||
local BK="返回"
|
||||
local actName={
|
||||
"左移:","右移:",
|
||||
"顺时针旋转:","逆时针旋转:","180°旋转:",
|
||||
"硬降:","软降:",
|
||||
"暂存:","功能键:",
|
||||
"重新开始:",
|
||||
"左瞬移:","右瞬移:","软降到底:","软降一格:","软降四格:","软降十格:",
|
||||
"落在最左:","落在最右:","列在最左:","列在最右:",
|
||||
}
|
||||
return{
|
||||
atkModeName={"随机","徽章","击杀","反击"},
|
||||
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
|
||||
@@ -67,8 +76,11 @@ return{
|
||||
setting_sound="声音设置",
|
||||
musicRoom="音乐室",
|
||||
nowPlaying="正在播放:",
|
||||
VKTchW="触摸点权重",
|
||||
VKOrgW="原始点权重",
|
||||
VKCurW="当前点权重",
|
||||
|
||||
actName={"左移:","右移:","顺时针旋转:","逆时针旋转:","180°旋转","硬降:","软降:","暂存:","功能键:","重新开始:","左瞬移:","右瞬移:","软降到底:"},
|
||||
actName=actName,
|
||||
modeName={
|
||||
[0]="自定义",
|
||||
"竞速","马拉松","大师","经典","禅","无尽","单挑","回合制","仅TSD","隐形",
|
||||
@@ -128,6 +140,8 @@ return{
|
||||
"使用love2d引擎制作",
|
||||
"有疑问?先看设置有没有你想要的",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"不要按F8",
|
||||
"秘密代码:626",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
|
||||
},
|
||||
@@ -149,7 +163,8 @@ return{
|
||||
"B2B数:",
|
||||
"PC数:",
|
||||
"效率:",
|
||||
"多余操作:"
|
||||
"多余操作:",
|
||||
"最简操作率:",
|
||||
},
|
||||
help={
|
||||
"好像也没啥好帮助的吧?就当是关于了",
|
||||
@@ -177,7 +192,7 @@ return{
|
||||
warning="禁 止 私 自 传 播",
|
||||
WidgetText={
|
||||
main={
|
||||
lang="中文",
|
||||
lang="文-Lang",
|
||||
qplay="快速开始",
|
||||
play="开始",
|
||||
setting="设置",
|
||||
@@ -210,11 +225,11 @@ return{
|
||||
start1="消除开始",
|
||||
start2="拼图开始",
|
||||
draw="画图(D)",
|
||||
set1="40行",
|
||||
set2="1v1",
|
||||
set3="无尽",
|
||||
set4="隐形",
|
||||
set5="极限",
|
||||
set1="40行(1)",
|
||||
set2="1v1(2)",
|
||||
set3="无尽(3)",
|
||||
set4="隐形(4)",
|
||||
set5="极限(5)",
|
||||
back=BK,
|
||||
},
|
||||
draw={
|
||||
@@ -241,6 +256,7 @@ return{
|
||||
pause={
|
||||
resume= "继续",
|
||||
restart="重新开始",
|
||||
setting="设置",
|
||||
quit= "退出",
|
||||
},
|
||||
setting_game={
|
||||
@@ -283,16 +299,33 @@ return{
|
||||
voc="语音",
|
||||
back=BK,
|
||||
},
|
||||
setting_control={
|
||||
setting_key={
|
||||
back=BK,
|
||||
},
|
||||
setting_touch={
|
||||
hide=function()return setting.virtualkeySwitch and"隐藏虚拟按键"or"显示虚拟按键"end,
|
||||
hide="显示虚拟按键",
|
||||
track="按键自动跟踪",
|
||||
tkset="跟踪设置",
|
||||
default="默认组合",
|
||||
snap=function()return text.snapLevelName[snapLevel]end,
|
||||
alpha=function()return setting.virtualkeyAlpha.."0%"end,
|
||||
alpha=function()return setting.VKAlpha.."0%"end,
|
||||
icon="图标",
|
||||
size="大小",
|
||||
toggle="开关",
|
||||
back=BK,
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= actName[1],b2=actName[2],b3=actName[3],b4=actName[4],
|
||||
b5= actName[5],b6=actName[6],b7=actName[7],b8=actName[8],
|
||||
b9= actName[9],b10=actName[10],b11=actName[11],b12=actName[12],
|
||||
b13=actName[13],b14=actName[14],b15=actName[15],b16=actName[16],
|
||||
b17=actName[17],b18=actName[18],b19=actName[19],b20=actName[20],
|
||||
norm="标准",
|
||||
pro="专业",
|
||||
back=BK,
|
||||
},
|
||||
setting_trackSetting={
|
||||
VKDodge="自动避让",
|
||||
back=BK,
|
||||
},
|
||||
help={
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
local BK="返回"
|
||||
local actName={
|
||||
"左移:","右移:",
|
||||
"顺时针旋转:","逆时针旋转:","180°旋转:",
|
||||
"硬降:","软降:",
|
||||
"暂存:","功能键:",
|
||||
"重新开始:",
|
||||
"左瞬移:","右瞬移:","软降到底:","软降一格:","软降四格:","软降十格:",
|
||||
"落在最左:","落在最右:","列在最左:","列在最右:",
|
||||
}
|
||||
return{
|
||||
atkModeName={"随机","徽章","击杀","反击"},
|
||||
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
|
||||
@@ -67,8 +76,11 @@ return{
|
||||
setting_sound="声音设置",
|
||||
musicRoom="音乐室",
|
||||
nowPlaying="正在播放:",
|
||||
VKTchW="触摸点权重",
|
||||
VKOrgW="原始点权重",
|
||||
VKCurW="当前点权重",
|
||||
|
||||
actName={"左移:","右移:","顺时针旋转:","逆时针旋转:","180°旋转","硬降:","软降:","暂存:","功能键:","重新开始:","左瞬移:","右瞬移:","软降到底:"},
|
||||
actName=actName,
|
||||
modeName={
|
||||
[0]="自定义",
|
||||
"竞速","马拉松","大师","经典","禅","无尽","单挑","回合制","仅TSD","隐形",
|
||||
@@ -128,6 +140,8 @@ return{
|
||||
"使用love2d引擎制作",
|
||||
"有疑问?先看设置有没有你想要的",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"不要按F8",
|
||||
"秘密代码:626",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
|
||||
},
|
||||
@@ -149,7 +163,8 @@ return{
|
||||
"满贯数:",
|
||||
"全清数:",
|
||||
"效率:",
|
||||
"多余操作:"
|
||||
"多余操作:",
|
||||
"最简操作率:",
|
||||
},
|
||||
help={
|
||||
"好像也没啥好帮助的吧?就当是关于了",
|
||||
@@ -177,7 +192,7 @@ return{
|
||||
warning="禁 止 私 自 传 播",
|
||||
WidgetText={
|
||||
main={
|
||||
lang="全中文",
|
||||
lang="文-Lang",
|
||||
qplay="快速开始",
|
||||
play="开始",
|
||||
setting="设置",
|
||||
@@ -210,11 +225,11 @@ return{
|
||||
start1="消除开始",
|
||||
start2="拼图开始",
|
||||
draw="画图(D)",
|
||||
set1="40行",
|
||||
set2="1v1",
|
||||
set3="无尽",
|
||||
set4="隐形",
|
||||
set5="极限",
|
||||
set1="40行(1)",
|
||||
set2="1v1(2)",
|
||||
set3="无尽(3)",
|
||||
set4="隐形(4)",
|
||||
set5="极限(5)",
|
||||
back=BK,
|
||||
},
|
||||
draw={
|
||||
@@ -241,6 +256,7 @@ return{
|
||||
pause={
|
||||
resume= "继续",
|
||||
restart="重新开始",
|
||||
setting="设置",
|
||||
quit= "退出",
|
||||
},
|
||||
|
||||
@@ -284,16 +300,33 @@ return{
|
||||
voc="语音",
|
||||
back=BK,
|
||||
},
|
||||
setting_control={
|
||||
setting_key={
|
||||
back=BK,
|
||||
},
|
||||
setting_touch={
|
||||
hide=function()return setting.virtualkeySwitch and"隐藏虚拟按键"or"显示虚拟按键"end,
|
||||
hide="显示虚拟按键",
|
||||
track="按键自动跟踪",
|
||||
tkset="跟踪设置",
|
||||
default="默认组合",
|
||||
snap=function()return text.snapLevelName[snapLevel]end,
|
||||
alpha=function()return setting.virtualkeyAlpha.."0%"end,
|
||||
alpha=function()return setting.VKAlpha.."0%"end,
|
||||
icon="图标",
|
||||
size="大小",
|
||||
toggle="开关",
|
||||
back=BK,
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= actName[1],b2=actName[2],b3=actName[3],b4=actName[4],
|
||||
b5= actName[5],b6=actName[6],b7=actName[7],b8=actName[8],
|
||||
b9= actName[9],b10=actName[10],b11=actName[11],b12=actName[12],
|
||||
b13=actName[13],b14=actName[14],b15=actName[15],b16=actName[16],
|
||||
b17=actName[17],b18=actName[18],b19=actName[19],b20=actName[20],
|
||||
norm="标准",
|
||||
pro="专业",
|
||||
back=BK,
|
||||
},
|
||||
setting_trackSetting={
|
||||
VKDodge="自动避让",
|
||||
back=BK,
|
||||
},
|
||||
help={
|
||||
@@ -311,4 +344,4 @@ return{
|
||||
back=BK,
|
||||
},
|
||||
},
|
||||
}--部分译文
|
||||
}
|
||||
@@ -1,4 +1,11 @@
|
||||
local BK="Back"
|
||||
local actName={
|
||||
"Move Left:","Move Right:",
|
||||
"Rotate Right:","Rotate Left:","Rotate Flip:",
|
||||
"Hard Drop:","Soft Drop:","Hold:","Function:","Restart:",
|
||||
"Instant Left:","Instant Right:","Ins Down:","Down 1:","Down 4:","Down 10:",
|
||||
"Left Drop:","Right Drop:","Left INS:","Right INS:",
|
||||
}
|
||||
return{
|
||||
atkModeName={"Random","Badges","K.O.s","Counters"},
|
||||
royale_remain=function(n)return n.." Players Remain"end,
|
||||
@@ -67,8 +74,11 @@ return{
|
||||
setting_sound="Sound setting",
|
||||
musicRoom="Music Room",
|
||||
nowPlaying="Now Playing:",
|
||||
VKTchW="Touch weight",
|
||||
VKOrgW="Origion weight",
|
||||
VKCurW="CurPos weight",
|
||||
|
||||
actName={"Move Left:","Move Right:","Rotate Right:","Rotate Left:","Rotate Flip:","Hard Drop:","Soft Drop:","Hold:","Function:","Restart:","Instant Left:","Instant Right:","Ins Down:"},
|
||||
actName=actName,
|
||||
modeName={
|
||||
[0]="Custom",
|
||||
"Sprint","Marathon","Master","Classic","Zen","Infinite","1v1","Round","TSD-only","Blind",
|
||||
@@ -128,6 +138,8 @@ return{
|
||||
"Powered by love2d",
|
||||
"Find out what's in the setting!",
|
||||
"Any suggestions to author!",
|
||||
"DO NOT PRESS F8",
|
||||
"Secret code:626",
|
||||
"Techmino=Technique+Tetromino",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
|
||||
@@ -150,7 +162,8 @@ return{
|
||||
"B2B:",
|
||||
"PC:",
|
||||
"Efficiency:",
|
||||
"Fineese:"
|
||||
"Finesse error:",
|
||||
"Finesse rate:",
|
||||
},
|
||||
help={
|
||||
"I don't think you need \"help\".",
|
||||
@@ -178,7 +191,7 @@ Lib used:
|
||||
warning="DO NOT DISTRIBUTE",
|
||||
WidgetText={
|
||||
main={
|
||||
lang="English",
|
||||
lang="文-Lang",
|
||||
qplay="Qplay",
|
||||
play="Play",
|
||||
setting="Settings",
|
||||
@@ -211,11 +224,11 @@ Lib used:
|
||||
start1="Clear Start",
|
||||
start2="Puzzle Start",
|
||||
draw="Draw(D)",
|
||||
set1="40L",
|
||||
set2="1v1",
|
||||
set3="infinite",
|
||||
set4="blind",
|
||||
set5="master",
|
||||
set1="40L(1)",
|
||||
set2="1v1(2)",
|
||||
set3="infinite(3)",
|
||||
set4="blind(4)",
|
||||
set5="master(5)",
|
||||
back=BK,
|
||||
},
|
||||
draw={
|
||||
@@ -242,6 +255,7 @@ Lib used:
|
||||
pause={
|
||||
resume="Resume",
|
||||
restart="Restart",
|
||||
setting="Setting",
|
||||
quit="Quit",
|
||||
},
|
||||
setting_game={
|
||||
@@ -253,7 +267,7 @@ Lib used:
|
||||
sdarrD="-",sdarrU="+",
|
||||
quickR="Quick restart",
|
||||
swap="Combo key to change ATK mode",
|
||||
fine="Fineese error SFX",
|
||||
fine="Finesse error SFX",
|
||||
ctrl="Key Setting",
|
||||
touch="Touch Setting",
|
||||
back=BK,
|
||||
@@ -284,16 +298,33 @@ Lib used:
|
||||
voc="VOC",
|
||||
back=BK,
|
||||
},
|
||||
setting_control={
|
||||
setting_key={
|
||||
back=BK,
|
||||
},
|
||||
setting_touch={
|
||||
hide=function()return setting.virtualkeySwitch and"Hide Virtual Key"or"Show Virtual Key"end,
|
||||
hide="Show Virtual Key",
|
||||
track="Auto track",
|
||||
tkset="Track setting",
|
||||
default="Defaults",
|
||||
snap=function()return text.snapLevelName[snapLevel]end,
|
||||
alpha=function()return setting.virtualkeyAlpha.."0%"end,
|
||||
alpha=function()return setting.VKAlpha.."0%"end,
|
||||
icon="Icon",
|
||||
size="Size",
|
||||
toggle="Toggle",
|
||||
back=BK,
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= actName[1],b2=actName[2],b3=actName[3],b4=actName[4],
|
||||
b5= actName[5],b6=actName[6],b7=actName[7],b8=actName[8],
|
||||
b9= actName[9],b10=actName[10],b11=actName[11],b12=actName[12],
|
||||
b13=actName[13],b14=actName[14],b15=actName[15],b16=actName[16],
|
||||
b17=actName[17],b18=actName[18],b19=actName[19],b20=actName[20],
|
||||
norm="Normal",
|
||||
pro="Professioanl",
|
||||
back=BK,
|
||||
},
|
||||
setting_trackSetting={
|
||||
VKDodge="Auto Dodge",
|
||||
back=BK,
|
||||
},
|
||||
help={
|
||||
|
||||
367
list.lua
@@ -1,6 +1,13 @@
|
||||
local mobile=system=="Android"or system=="iOS"
|
||||
|
||||
actName={"moveLeft","moveRight","rotRight","rotLeft","rotFlip","hardDrop","softDrop","hold","func","restart","insLeft","insRight","insDown"}
|
||||
actName={
|
||||
"moveLeft","moveRight",
|
||||
"rotRight","rotLeft","rotFlip",
|
||||
"hardDrop","softDrop",
|
||||
"hold","func",
|
||||
"restart",
|
||||
"insLeft","insRight","insDown","down1","down4","down10",
|
||||
"dropLeft","dropRight","addLeft","addRight",--Super contorl system
|
||||
}
|
||||
color={
|
||||
red={1,0,0},
|
||||
green={0,1,0},
|
||||
@@ -50,17 +57,20 @@ blockColor={
|
||||
}
|
||||
sfx={
|
||||
"welcome",
|
||||
"error","error_long",
|
||||
--Stereo sfxs
|
||||
"button","swipe",
|
||||
"ready","start","win","fail","collect",
|
||||
"move","rotate","rotatekick","hold",
|
||||
"prerotate","prehold",
|
||||
"lock","drop","fall",
|
||||
"error","error_long","reach",
|
||||
"reach",
|
||||
"ren_1","ren_2","ren_3","ren_4","ren_5","ren_6","ren_7","ren_8","ren_9","ren_10","ren_11","ren_mega",
|
||||
"clear_1","clear_2","clear_3","clear_4",
|
||||
"spin_0","spin_1","spin_2","spin_3",
|
||||
"emit","blip_1","blip_2",
|
||||
"perfectclear",
|
||||
--mono sfxs
|
||||
}
|
||||
bgm={
|
||||
"blank",
|
||||
@@ -156,7 +166,7 @@ customRange={
|
||||
RCPB={10,33,200,33,105,5,105,60}
|
||||
snapLevelValue={1,10,20,40,60,80}
|
||||
up0to4={[0]="000%UP","025%UP","050%UP","075%UP","100%UP",}
|
||||
|
||||
sectionName={"M7","M8","M9","M","MK","MV","MO","MM","GM"}
|
||||
modeID={
|
||||
[0]="custom",
|
||||
"sprint","marathon","master","classic","zen","infinite","solo","round","tsd","blind",
|
||||
@@ -203,65 +213,76 @@ for i=1,7 do blocks[i+7]=blocks[i]end
|
||||
|
||||
local virtualkeySet={
|
||||
{
|
||||
{80,720-200,6400,80},--moveLeft
|
||||
{320,720-200,6400,80},--moveRight
|
||||
{1280-80,720-200,6400,80},--rotRight
|
||||
{1280-200,720-80,6400,80},--rotLeft
|
||||
{1280-200,720-320,6400,80},--rotFlip
|
||||
{200,720-320,6400,80},--hardDrop
|
||||
{200,720-80,6400,80},--softDrop
|
||||
{1280-320,720-200,6400,80},--hold
|
||||
{1280-80,280,6400,80},--func
|
||||
{80,280,6400,80},--restart
|
||||
},--Farter's set 3
|
||||
{1, 80, 720-200, 80},--moveLeft
|
||||
{2, 320, 720-200, 80},--moveRight
|
||||
{3, 1280-80, 720-200, 80},--rotRight
|
||||
{4, 1280-200, 720-80, 80},--rotLeft
|
||||
{5, 1280-200, 720-320, 80},--rotFlip
|
||||
{6, 200, 720-320, 80},--hardDrop
|
||||
{7, 200, 720-80, 80},--softDrop
|
||||
{8, 1280-320, 720-200, 80},--hold
|
||||
{9, 1280-80, 280, 80},--func
|
||||
{10,80, 280, 80},--restart
|
||||
},--Farter's set,thanks
|
||||
{
|
||||
{1280-320,720-200,6400,80},--moveLeft
|
||||
{1280-80,720-200,6400,80},--moveRight
|
||||
{200,720-80,6400,80},--rotRight
|
||||
{80,720-200,6400,80},--rotLeft
|
||||
{200,720-320,6400,80},--rotFlip
|
||||
{1280-200,720-320,6400,80},--hardDrop
|
||||
{1280-200,720-80,6400,80},--softDrop
|
||||
{320,720-200,6400,80},--hold
|
||||
{80,280,6400,80},--func
|
||||
{1280-80,280,6400,80},--restart
|
||||
},--Mirrored farter's set 3
|
||||
{1, 1280-320, 720-200, 80},--moveLeft
|
||||
{2, 1280-80, 720-200, 80},--moveRight
|
||||
{3, 200, 720-80, 80},--rotRight
|
||||
{4, 80, 720-200, 80},--rotLeft
|
||||
{5, 200, 720-320, 80},--rotFlip
|
||||
{6, 1280-200, 720-320, 80},--hardDrop
|
||||
{7, 1280-200, 720-80, 80},--softDrop
|
||||
{8, 320, 720-200, 80},--hold
|
||||
{9, 80, 280, 80},--func
|
||||
{10,1280-80, 280, 80},--restart
|
||||
|
||||
},--Mirrored farter's set,sknaht
|
||||
{
|
||||
{80,720-80,6400,80},--moveLeft
|
||||
{240,720-80,6400,80},--moveRight
|
||||
{1280-240,720-80,6400,80},--rotRight
|
||||
{1280-400,720-80,6400,80},--rotLeft
|
||||
{1280-240,720-240,6400,80},--rotFlip
|
||||
{1280-80,720-80,6400,80},--hardDrop
|
||||
{1280-80,720-240,6400,80},--softDrop
|
||||
{1280-80,720-400,6400,80},--hold
|
||||
{80,360,6400,80},--func
|
||||
{80,80,6400,80},--restart
|
||||
},--Author's set
|
||||
{1, 80, 720-80, 80},--moveLeft
|
||||
{2, 240, 720-80, 80},--moveRight
|
||||
{3, 1280-240, 720-80, 80},--rotRight
|
||||
{4, 1280-400, 720-80, 80},--rotLeft
|
||||
{5, 1280-240, 720-240, 80},--rotFlip
|
||||
{6, 1280-80, 720-80, 80},--hardDrop
|
||||
{7, 1280-80, 720-240, 80},--softDrop
|
||||
{8, 1280-80, 720-400, 80},--hold
|
||||
{9, 80, 360, 80},--func
|
||||
{10,80, 80, 80},--restart
|
||||
},--Author's set,not recommend
|
||||
{
|
||||
{1280-400,720-80,6400,80},--moveLeft
|
||||
{1280-80,720-80,6400,80},--moveRight
|
||||
{240,720-80,6400,80},--rotRight
|
||||
{80,720-80,6400,80},--rotLeft
|
||||
{240,720-240,6400,80},--rotFlip
|
||||
{1280-240,720-240,6400,80},--hardDrop
|
||||
{1280-240,720-80,6400,80},--softDrop
|
||||
{1280-80,720-240,6400,80},--hold
|
||||
{80,720-240,6400,80},--func
|
||||
{80,320,6400,80},--restart
|
||||
{1, 1280-400, 720-80, 80},--moveLeft
|
||||
{2, 1280-80, 720-80, 80},--moveRight
|
||||
{3, 240, 720-80, 80},--rotRight
|
||||
{4, 80, 720-80, 80},--rotLeft
|
||||
{5, 240, 720-240, 80},--rotFlip
|
||||
{6, 1280-240, 720-240, 80},--hardDrop
|
||||
{7, 1280-240, 720-80, 80},--softDrop
|
||||
{8, 1280-80, 720-240, 80},--hold
|
||||
{9, 80, 720-240, 80},--func
|
||||
{10,80, 320, 80},--restart
|
||||
},--Keyboard set
|
||||
{
|
||||
{1200-370,40,1600,40},--moveLeft
|
||||
{1200-280,40,1600,40},--moveRight
|
||||
{1200-530,40,1600,40},--rotRight
|
||||
{1200-610,40,1600,40},--rotLeft
|
||||
{1200-450,40,1600,40},--rotFlip
|
||||
{1200-50,40,1600,40},--hardDrop
|
||||
{1200-130,40,1600,40},--softDrop
|
||||
{1200-210,40,1600,40},--hold
|
||||
{1200-690,40,1600,40},--func
|
||||
{1200-770,40,1600,40},--restart
|
||||
},--PC key feedback
|
||||
{10,70, 50,27},--restart
|
||||
{9, 130, 50,27},--func
|
||||
{4, 190, 50,27},--rotLeft
|
||||
{3, 250, 50,27},--rotRight
|
||||
{5, 310, 50,27},--rotFlip
|
||||
{1, 370, 50,27},--moveLeft
|
||||
{2, 430, 50,27},--moveRight
|
||||
{8, 490, 50,27},--hold
|
||||
{7, 550, 50,27},--softDrop1
|
||||
{6, 610, 50,27},--hardDrop
|
||||
{11,670, 50,27},--insLeft
|
||||
{12,730, 50,27},--insRight
|
||||
{13,790, 50,27},--insDown
|
||||
{14,850, 50,27},--down1
|
||||
{15,910, 50,27},--down4
|
||||
{16,970, 50,27},--down10
|
||||
{17,1030, 50,27},--dropLeft
|
||||
{18,1090, 50,27},--dropRight
|
||||
{19,1150, 50,27},--addLeft
|
||||
{20,1210, 50,27},--addRight
|
||||
},--PC key feedback(top&in a row)
|
||||
}
|
||||
local customSet={
|
||||
{20,20,1,1,7,1,1,1,3,4,1,2,3},
|
||||
@@ -277,69 +298,79 @@ local function useDefaultSet(n)
|
||||
curBG=customRange.bg[customSel[12]]
|
||||
BGM(customRange.bgm[customSel[13]])
|
||||
end
|
||||
local function VKAdisp(n)
|
||||
return function()
|
||||
return VK_org[n].ava
|
||||
end
|
||||
end
|
||||
local function VKAcode(n)
|
||||
return function()
|
||||
VK_org[n].ava=not VK_org[n].ava
|
||||
end
|
||||
end
|
||||
Widget={
|
||||
load={},intro={},quit={},
|
||||
main={
|
||||
play= newButton(150,280,200,160,color.red, 60,function()gotoScene("mode")end, nil,"setting"),
|
||||
setting=newButton(370,280,200,160,color.lightBlue, 50,function()gotoScene("setting_game")end, nil,"music"),
|
||||
music= newButton(590,280,200,160,color.lightPurple,37,function()gotoScene("music")end, nil,"help"),
|
||||
help= newButton(150,460,200,160,color.yellow, 55,function()gotoScene("help")end, nil,"stat"),
|
||||
stat= newButton(370,460,200,160,color.cyan, 48,function()gotoScene("stat")end, nil,"qplay"),
|
||||
qplay= newButton(540,415,100,70,color.lightGreen, 28,function()loadGame(modeSel,levelSel)end, nil,"lang"),
|
||||
play= newButton(150,280,200,160,color.red, 60,function()scene.push()scene.swapTo("mode")end, nil,"setting"),
|
||||
setting=newButton(370,280,200,160,color.lightBlue, 50,function()scene.push()scene.swapTo("setting_game")end, nil,"music"),
|
||||
music= newButton(590,280,200,160,color.lightPurple,37,function()scene.push()scene.swapTo("music")end, nil,"help"),
|
||||
help= newButton(150,460,200,160,color.yellow, 55,function()scene.push()scene.swapTo("help")end, nil,"stat"),
|
||||
stat= newButton(370,460,200,160,color.cyan, 48,function()scene.push()scene.swapTo("stat")end, nil,"qplay"),
|
||||
qplay= newButton(540,415,100,70,color.lightGreen, 28,function()scene.push()loadGame(modeSel,levelSel)end, nil,"lang"),
|
||||
lang= newButton(590,505,200,70,color.lightRed, 50,function()
|
||||
setting.lang=setting.lang%#langName+1
|
||||
swapLanguage(setting.lang)
|
||||
end,nil,"quit"),
|
||||
quit= newButton(370,620,280,100,color.lightGrey, 60,function()gotoScene("quit")end, nil,"play"),
|
||||
quit= newButton(370,620,280,100,color.lightGrey, 60,function()scene.swapTo("quit")end, nil,"play"),
|
||||
},
|
||||
mode={
|
||||
up= newButton(1000,210,200,140,color.white, 80,function()love.keypressed("up")end,function()return modeSel==1 end),
|
||||
down= newButton(1000,430,200,140,color.white, 80,function()love.keypressed("down")end,function()return modeSel==#modeID end),
|
||||
left= newButton(190, 160,100,80, color.white,40,function()love.keypressed("left")end,function()return levelSel==1 end),
|
||||
right= newButton(350, 160,100,80, color.white,40,function()love.keypressed("right")end,function()return levelSel==#modeLevel[modeID[modeSel]]end),
|
||||
start= newButton(1000,600,250,100,color.green, 50,function()loadGame(modeSel,levelSel)end),
|
||||
custom= newButton(275, 420,200,90, color.yellow,40,function()gotoScene("custom")end),
|
||||
back= newButton(640, 630,230,90, color.white,45,back),
|
||||
up= newButton(1000, 210,200,140,color.white, 80,function()love.keypressed("up")end,function()return modeSel==1 end),
|
||||
down= newButton(1000, 430,200,140,color.white, 80,function()love.keypressed("down")end,function()return modeSel==#modeID end),
|
||||
left= newButton(190, 160,100,80, color.white, 40,function()love.keypressed("left")end,function()return levelSel==1 end),
|
||||
right= newButton(350, 160,100,80, color.white, 40,function()love.keypressed("right")end,function()return levelSel==#modeLevel[modeID[modeSel]]end),
|
||||
start= newButton(1000, 600,250,100,color.green, 50,function()scene.push()loadGame(modeSel,levelSel)end),
|
||||
custom= newButton(275, 420,200,90, color.yellow, 40,function()scene.push()scene.swapTo("custom")end),
|
||||
back= newButton(640, 630,230,90, color.white, 45,scene.back),
|
||||
},
|
||||
music={
|
||||
bgm= newSlider(760,80,400,8,40,nil,function()return setting.bgm end,function(i)setting.bgm=i;BGM(bgmPlaying)end),
|
||||
up= newButton(1100,200,120,120,color.white,60,function()love.keypressed("up")end),
|
||||
play= newButton(1100,340,120,120,color.white,40,function()love.keypressed("space")end,function()return setting.bgm==0 end),
|
||||
down= newButton(1100,480,120,120,color.white,60,function()love.keypressed("down")end),
|
||||
back= newButton(640, 630,230,90, color.white,45,back),
|
||||
bgm= newSlider(760, 80,400,10,40,nil,function()return setting.bgm end,function(i)setting.bgm=i;BGM(bgmPlaying)end),
|
||||
up= newButton(1100, 200,120,120,color.white,60,function()love.keypressed("up")end),
|
||||
play= newButton(1100, 340,120,120,color.white,40,function()love.keypressed("space")end,function()return setting.bgm==0 end),
|
||||
down= newButton(1100, 480,120,120,color.white,60,function()love.keypressed("down")end),
|
||||
back= newButton(640, 630,230,90, color.white,45,scene.back),
|
||||
},
|
||||
custom={
|
||||
up= newButton(1000,220,100,100,color.white, 50,function()sel=(sel-2)%#customID+1 end),
|
||||
down= newButton(1000,460,100,100,color.white, 50,function()sel=sel%#customID+1 end),
|
||||
up= newButton(1000, 220,100,100,color.white, 50,function()sel=(sel-2)%#customID+1 end),
|
||||
down= newButton(1000, 460,100,100,color.white, 50,function()sel=sel%#customID+1 end),
|
||||
left= newButton(880, 340,100,100,color.white, 50,function()love.keypressed("left")end),
|
||||
right= newButton(1120,340,100,100,color.white, 50,function()love.keypressed("right")end),
|
||||
start1= newButton(880, 580,220,70, color.green, 40,function()loadGame(0,1)end),
|
||||
start2= newButton(1120,580,220,70, color.lightPurple, 40,function()loadGame(0,2)end),
|
||||
draw= newButton(1000,90, 190,85, color.cyan, 40,function()gotoScene("draw")end),
|
||||
right= newButton(1120, 340,100,100,color.white, 50,function()love.keypressed("right")end),
|
||||
start1= newButton(880, 580,220,70, color.green, 40,function()scene.push()loadGame(0,1)end),
|
||||
start2= newButton(1120, 580,220,70, color.lightPurple, 40,function()scene.push()loadGame(0,2)end),
|
||||
draw= newButton(1000, 90, 190,85, color.cyan, 40,function()scene.push()scene.swapTo("draw")end),
|
||||
set1= newButton(640, 160,240,75, color.lightRed, 40,function()useDefaultSet(1)end),
|
||||
set2= newButton(640, 250,240,75, color.lightRed, 40,function()useDefaultSet(2)end),
|
||||
set3= newButton(640, 340,240,75, color.lightRed, 40,function()useDefaultSet(3)end),
|
||||
set4= newButton(640, 430,240,75, color.lightRed, 40,function()useDefaultSet(4)end),
|
||||
set5= newButton(640, 520,240,75, color.lightRed, 40,function()useDefaultSet(5)end),
|
||||
back= newButton(640, 630,180,60, color.white, 40,back),
|
||||
back= newButton(640, 630,180,60, color.white, 40,scene.back),
|
||||
},
|
||||
draw={
|
||||
any= newButton(700, 80, 120,120,color.lightGrey, 45,function()pen=0 end),
|
||||
block1= newButton(840, 80, 120,120,color.red, 65,function()pen=1 end),
|
||||
block2= newButton(980, 80, 120,120,color.green, 65,function()pen=2 end),
|
||||
block3= newButton(1120,80, 120,120,color.orange, 65,function()pen=3 end),
|
||||
block4= newButton(840, 220,120,120,color.blue, 65,function()pen=4 end),
|
||||
block5= newButton(980, 220,120,120,color.magenta, 65,function()pen=5 end),
|
||||
block6= newButton(1120,220,120,120,color.yellow, 65,function()pen=6 end),
|
||||
block7= newButton(840, 360,120,120,color.cyan, 65,function()pen=7 end),
|
||||
gb1= newButton(980, 360,120,120,color.darkGrey, 65,function()pen=9 end),
|
||||
gb2= newButton(1120,360,120,120,color.grey, 65,function()pen=10 end),
|
||||
gb3= newButton(840, 500,120,120,color.darkPurple, 65,function()pen=11 end),
|
||||
gb4= newButton(980, 500,120,120,color.darkRed, 65,function()pen=12 end),
|
||||
gb5= newButton(1120,500,120,120,color.darkGreen, 65,function()pen=13 end),
|
||||
space= newButton(840, 640,120,120,color.grey, 70,function()pen=-1 end),
|
||||
clear= newButton(1120,640,120,120,color.white, 45,function()love.keypressed("delete")end),
|
||||
back= newButton(1235,45, 80, 80, color.white, 35,back),
|
||||
block1= newButton(920, 80, 120,120,color.red, 65,function()pen=1 end),
|
||||
block2= newButton(1060, 80, 120,120,color.green, 65,function()pen=2 end),
|
||||
block3= newButton(1200, 80, 120,120,color.orange, 65,function()pen=3 end),
|
||||
block4= newButton(920, 220,120,120,color.blue, 65,function()pen=4 end),
|
||||
block5= newButton(1060, 220,120,120,color.magenta, 65,function()pen=5 end),
|
||||
block6= newButton(1200, 220,120,120,color.yellow, 65,function()pen=6 end),
|
||||
block7= newButton(920, 360,120,120,color.cyan, 65,function()pen=7 end),
|
||||
gb1= newButton(1060, 360,120,120,color.darkGrey, 65,function()pen=9 end),
|
||||
gb2= newButton(1200, 360,120,120,color.grey, 65,function()pen=10 end),
|
||||
gb3= newButton(920, 500,120,120,color.darkPurple, 65,function()pen=11 end),
|
||||
gb4= newButton(1060, 500,120,120,color.darkRed, 65,function()pen=12 end),
|
||||
gb5= newButton(1200, 500,120,120,color.darkGreen, 65,function()pen=13 end),
|
||||
clear= newButton(780, 80, 120,120,color.white, 45,function()love.keypressed("delete")end),
|
||||
any= newButton(780, 220,120,120,color.lightGrey, 45,function()pen=0 end),
|
||||
space= newButton(780, 360,120,120,color.grey, 70,function()pen=-1 end),
|
||||
back= newButton(1200, 640,120,120,color.white, 40,scene.back),
|
||||
},
|
||||
play={
|
||||
pause= newButton(1235,45,80,80,color.white,30,pauseGame),
|
||||
@@ -350,15 +381,19 @@ Widget={
|
||||
clearTask("play")
|
||||
updateStat()
|
||||
resetGameData()
|
||||
gotoScene("play","none")
|
||||
scene.swapTo("play","none")
|
||||
end),
|
||||
quit= newButton(640,600,240,100,color.white,50,back),
|
||||
setting=newButton(1150,80,200,100,color.yellow,45,function()
|
||||
scene.push()
|
||||
scene.swapTo("setting_sound")
|
||||
end),
|
||||
quit= newButton(640,600,240,100,color.white,50,scene.back),
|
||||
},
|
||||
setting_game={
|
||||
graphic=newButton(200,80,240,80,color.lightGreen,40,function()gotoScene("setting_graphic")end, nil,"sound"),
|
||||
sound= newButton(1080,80,240,80,color.lightGreen,40,function()gotoScene("setting_sound")end, nil,"dasD"),
|
||||
dasD= newButton(180,230,50,50,color.white,40,function()setting.das=(setting.das-1)%31 end,nil,"dasU"),
|
||||
dasU= newButton(400,230,50,50,color.white,40,function()setting.das=(setting.das+1)%31 end,nil,"arrD"),
|
||||
graphic=newButton(200,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_graphic")end, nil,"sound"),
|
||||
sound= newButton(1080,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_sound")end, nil,"dasD"),
|
||||
dasD= newButton(180,230,50,50,color.white,40,function()setting.das=(setting.das-1)%31 end, nil,"dasU"),
|
||||
dasU= newButton(400,230,50,50,color.white,40,function()setting.das=(setting.das+1)%31 end, nil,"arrD"),
|
||||
arrD= newButton(500,230,50,50,color.white,40,function()
|
||||
setting.arr=(setting.arr-1)%16
|
||||
if setting.arr>setting.das then
|
||||
@@ -382,13 +417,13 @@ Widget={
|
||||
quickR= newSwitch(560,430,40,function()return setting.quickR end,function()setting.quickR=not setting.quickR end, nil,"swap"),
|
||||
swap= newSwitch(560,510,25,function()return setting.swap end,function()setting.swap=not setting.swap end, nil,"fine"),
|
||||
fine= newSwitch(560,590,25,function()return setting.fine end,function()setting.fine=not setting.fine end, nil,"ctrl"),
|
||||
ctrl= newButton(1020,230,320,80,color.white,40,function()gotoScene("setting_control")end, nil,"touch"),
|
||||
touch= newButton(1020,340,320,80,color.white,40,function()gotoScene("setting_touch")end, nil,"back"),
|
||||
back= newButton(1160,600,160,160,color.white,55,back,nil,"graphic"),
|
||||
ctrl= newButton(1020,230,320,80,color.white,40,function()scene.push()scene.swapTo("setting_key")end, nil,"touch"),
|
||||
touch= newButton(1020,340,320,80,color.white,40,function()scene.push()scene.swapTo("setting_touch")end, nil,"back"),
|
||||
back= newButton(1160,600,160,160,color.white,55,scene.back,nil,"graphic"),
|
||||
},
|
||||
setting_graphic={
|
||||
sound= newButton(200,80,240,80,color.lightGreen,40,function()gotoScene("setting_sound")end, nil,"game"),
|
||||
game= newButton(1080,80,240,80,color.lightGreen,40,function()gotoScene("setting_game")end, nil,"ghost"),
|
||||
sound= newButton(200,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_sound")end, nil,"game"),
|
||||
game= newButton(1080,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_game")end, nil,"ghost"),
|
||||
ghost= newSwitch(310,180,40,function()return setting.ghost end, function()setting.ghost= not setting.ghost end, nil,"center"),
|
||||
center= newSwitch(580,180,40,function()return setting.center end, function()setting.center= not setting.center end, nil,"smo"),
|
||||
smo= newSwitch(310,260,25,function()return setting.smo end, function()setting.smo= not setting.smo end, nil,"grid"),
|
||||
@@ -412,65 +447,111 @@ Widget={
|
||||
setting.skin=setting.skin%8+1
|
||||
changeBlockSkin(setting.skin)
|
||||
end,nil,"back"),
|
||||
back= newButton(1160,600,160,160,color.white,55,back,nil,"sound"),
|
||||
back= newButton(1160,600,160,160,color.white,55,scene.back,nil,"sound"),
|
||||
},
|
||||
setting_sound={
|
||||
game= newButton(200,80,240,80,color.lightGreen,40,function()gotoScene("setting_game")end, nil,"graphic"),
|
||||
graphic=newButton(1080,80,240,80,color.lightGreen,40,function()gotoScene("setting_graphic")end, nil,"sfx"),
|
||||
sfx=newSlider(180,250,400,8,40,function()SFX("blip_1")end, function()return setting.sfx end,function(i)setting.sfx=i end,nil,"bgm"),
|
||||
bgm=newSlider(750,250,400,8,40,function()BGM(bgmPlaying or"blank")end, function()return setting.bgm end,function(i)setting.bgm=i end,nil,"vib"),
|
||||
game= newButton(200,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_game")end, nil,"graphic"),
|
||||
graphic=newButton(1080,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_graphic")end, nil,"sfx"),
|
||||
sfx=newSlider(180,250,400,10,40,function()SFX("blip_1")end, function()return setting.sfx end,function(i)setting.sfx=i end,nil,"bgm"),
|
||||
bgm=newSlider(750,250,400,10,40,function()BGM(bgmPlaying or"blank")end, function()return setting.bgm end,function(i)setting.bgm=i end,nil,"vib"),
|
||||
vib=newSlider(180,440,400,5,40,function()VIB(1)end, function()return setting.vib end,function(i)setting.vib=i end,nil,"voc"),
|
||||
voc=newSlider(750,440,400,8,40,function()VOICE("nya")end, function()return setting.voc end,function(i)setting.voc=i end,nil,"back"),
|
||||
back=newButton(1160,600,160,160,color.white,55,back,nil,"game"),
|
||||
voc=newSlider(750,440,400,10,40,function()VOICE("nya")end, function()return setting.voc end,function(i)setting.voc=i end,nil,"back"),
|
||||
back=newButton(1160,600,160,160,color.white,55,scene.back,nil,"game"),
|
||||
},
|
||||
setting_control={
|
||||
back=newButton(840,630,180,60,color.white,40,back),
|
||||
setting_key={
|
||||
back=newButton(1140,650,200,80,color.white,50,scene.back),
|
||||
},
|
||||
setting_touch={
|
||||
hide= newButton(640,210,500,80,color.white,45,function()
|
||||
setting.virtualkeySwitch=not setting.virtualkeySwitch
|
||||
end),
|
||||
default=newButton(450,310,170,80,color.white,40,function()
|
||||
for K=1,#virtualkey do
|
||||
local b,b0=virtualkey[K],virtualkeySet[defaultSel][K]
|
||||
b[1],b[2],b[3],b[4]=b0[1],b0[2],b0[3],b0[4]
|
||||
end--Default virtualkey
|
||||
hide= newSwitch(810,140,45,function()return setting.VKSwitch end,function()setting.VKSwitch=not setting.VKSwitch end),
|
||||
track= newSwitch(810,220,45,function()return setting.VKTrack end,function()setting.VKTrack=not setting.VKTrack end),
|
||||
tkset= newButton(450,220,170,80,color.white,30,function()
|
||||
scene.push()
|
||||
scene.swapTo("setting_trackSetting")
|
||||
end,function()return not setting.VKTrack end),
|
||||
default=newButton(450,320,170,80,color.white,40,function()
|
||||
local D=virtualkeySet[defaultSel]
|
||||
for i=1,#VK_org do
|
||||
VK_org[i].ava=false
|
||||
end
|
||||
for n=1,#D do
|
||||
local T=D[n]
|
||||
if T[1]then
|
||||
local B=VK_org[n]
|
||||
B.ava=true
|
||||
B.x,B.y,B.r=T[2],T[3],T[4]
|
||||
end
|
||||
end--Replace keys
|
||||
defaultSel=defaultSel%5+1
|
||||
end),
|
||||
snap= newButton(640,310,170,80,color.white,40,function()
|
||||
snap= newButton(640,320,170,80,color.white,40,function()
|
||||
snapLevel=snapLevel%6+1
|
||||
end),
|
||||
alpha= newButton(830,310,170,80,color.white,45,function()
|
||||
setting.virtualkeyAlpha=(setting.virtualkeyAlpha+1)%11
|
||||
--VK=T,70,50,27/T,130,50,27/T,190,50,27/T,250,50,27/T,310,50,27/T,370,50,27/T,430,50,27/T,490,50,27/T,550,50,27/T,610,50,27/T,670,50,27/T,730,50,27/T,790,50,27/T,850,50,27/T,910,50,27/T,970,50,27/T,739,789,897/T,1090,50,27/T,1150,50,27/T,1210,50,27
|
||||
alpha= newButton(830,320,170,80,color.white,45,function()
|
||||
setting.VKAlpha=(setting.VKAlpha+1)%11
|
||||
--Adjust virtualkey alpha
|
||||
end),
|
||||
icon= newButton(450,410,170,80,color.white,45,function()
|
||||
setting.virtualkeyIcon=not setting.virtualkeyIcon
|
||||
icon= newButton(495,420,260,80,color.white,45,function()
|
||||
setting.VKIcon=not setting.VKIcon
|
||||
--Switch virtualkey icon
|
||||
end),
|
||||
size= newButton(830,410,170,80,color.white,45,function()
|
||||
size= newButton(785,420,260,80,color.white,45,function()
|
||||
if sel then
|
||||
local b=virtualkey[sel]
|
||||
b[4]=b[4]+10
|
||||
if b[4]==150 then b[4]=40 end
|
||||
b[3]=b[4]^2
|
||||
local B=VK_org[sel]
|
||||
B.r=B.r+10
|
||||
if B.r>=150 then B.r=B.r-110 end
|
||||
end
|
||||
end),
|
||||
back= newButton(640,410,170,80,color.white,45,back),
|
||||
toggle= newButton(495,520,260,80,color.white,45,function()
|
||||
scene.push()
|
||||
scene.swapTo("setting_touchSwitch")
|
||||
end),
|
||||
back= newButton(785,520,260,80,color.white,45,scene.back),
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= newSwitch(300,80, 40,VKAdisp(1),VKAcode(1)),
|
||||
b2= newSwitch(300,140, 40,VKAdisp(2),VKAcode(2)),
|
||||
b3= newSwitch(300,200, 40,VKAdisp(3),VKAcode(3)),
|
||||
b4= newSwitch(300,260, 40,VKAdisp(4),VKAcode(4)),
|
||||
b5= newSwitch(300,320, 40,VKAdisp(5),VKAcode(5)),
|
||||
b6= newSwitch(300,380, 40,VKAdisp(6),VKAcode(6)),
|
||||
b7= newSwitch(300,440, 40,VKAdisp(7),VKAcode(7)),
|
||||
b8= newSwitch(300,500, 40,VKAdisp(8),VKAcode(8)),
|
||||
b9= newSwitch(300,560, 40,VKAdisp(9),VKAcode(9)),
|
||||
b10= newSwitch(300,620, 40,VKAdisp(10),VKAcode(10)),
|
||||
b11= newSwitch(760,80, 40,VKAdisp(11),VKAcode(11)),
|
||||
b12= newSwitch(760,140, 40,VKAdisp(12),VKAcode(12)),
|
||||
b13= newSwitch(760,200, 40,VKAdisp(13),VKAcode(13)),
|
||||
b14= newSwitch(760,260, 40,VKAdisp(14),VKAcode(14)),
|
||||
b15= newSwitch(760,320, 40,VKAdisp(15),VKAcode(15)),
|
||||
b16= newSwitch(760,380, 40,VKAdisp(16),VKAcode(16)),
|
||||
b17= newSwitch(760,440, 40,VKAdisp(17),VKAcode(17)),
|
||||
b18= newSwitch(760,500, 40,VKAdisp(18),VKAcode(18)),
|
||||
b19= newSwitch(760,560, 40,VKAdisp(19),VKAcode(19)),
|
||||
b20= newSwitch(760,620, 40,VKAdisp(20),VKAcode(20)),
|
||||
norm= newButton(1080,150,240,80,color.white,50,function()for i=1,20 do VK_org[i].ava=i<11 end end),
|
||||
pro= newButton(1080,300,240,80,color.white,40,function()for i=1,20 do VK_org[i].ava=true end end),
|
||||
back= newButton(1080,600,240,80,color.white,50,scene.back),
|
||||
},
|
||||
setting_trackSetting={
|
||||
VKDodge= newSwitch(400,200, 40,function()return setting.VKDodge end,function()setting.VKDodge=not setting.VKDodge end),
|
||||
VKTchW= newSlider(140,310,1000,10,40,nil,function()return setting.VKTchW end,function(i)setting.VKTchW=i;setting.VKCurW=math.max(setting.VKCurW,i)end),
|
||||
VKCurW= newSlider(140,370,1000,10,40,nil,function()return setting.VKCurW end,function(i)setting.VKCurW=i;setting.VKTchW=math.min(setting.VKTchW,i)end),
|
||||
back= newButton(1080,600,240,80,color.white,50,scene.back),
|
||||
},
|
||||
help={
|
||||
his= newButton(1050,520,230,60,color.white,40,function()gotoScene("history")end,nil,"back"),
|
||||
his= newButton(1050,520,230,60,color.white,40,function()scene.push()scene.swapTo("history")end,nil,"back"),
|
||||
qq= newButton(1050,600,230,60,color.white,40,function()love.system.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end, function()return mobile end,"his"),
|
||||
back= newButton(640, 600,180,60,color.white,40,back,nil,"qq"),
|
||||
back= newButton(640, 600,180,60,color.white,40,scene.back,nil,"qq"),
|
||||
},
|
||||
history={
|
||||
prev= newButton(1155,170,180,180,color.white,70,function()love.keypressed("up")end,function()return sel==1 end),
|
||||
next= newButton(1155,400,180,180,color.white,70,function()love.keypressed("down")end,function()return sel==#updateLog-22 end),
|
||||
back= newButton(1155,600,180,90,color.white,40,back),
|
||||
back= newButton(1155,600,180,90,color.white,40,scene.back),
|
||||
},
|
||||
stat={
|
||||
path= newButton(980,620,250,60,color.white,30,function()love.system.openURL(love.filesystem.getSaveDirectory())end,function()return mobile end,"back"),
|
||||
back= newButton(640,620,180,60,color.white,40,back,nil,"path"),
|
||||
back= newButton(640,620,180,60,color.white,40,scene.back,nil,"path"),
|
||||
},
|
||||
}
|
||||
for S,L in next,Widget do
|
||||
|
||||
529
main.lua
@@ -14,21 +14,26 @@ NULL=function()end
|
||||
system=sys.getOS()
|
||||
local xOy=love.math.newTransform()
|
||||
local mx,my,mouseShow=-20,-20,false
|
||||
local touching--1st touching ID
|
||||
local touching--第一触摸ID
|
||||
|
||||
modeSel,levelSel=1,3--Initialize mode selection
|
||||
local devMode=0
|
||||
modeSel,levelSel=1,3--初始模式选择
|
||||
players={alive={},human=0}
|
||||
scr={x=0,y=0,w=gc.getWidth(),h=gc.getHeight(),k=1}
|
||||
local scr=scr
|
||||
scene=""
|
||||
curBG="none"
|
||||
bgmPlaying=nil
|
||||
voiceQueue={free=0}
|
||||
local devMode=0
|
||||
virtualkeyDown,virtualkeyPressTime={},{}
|
||||
for i=1,20 do
|
||||
virtualkeyDown[i]=X
|
||||
virtualkeyPressTime[i]=0
|
||||
end
|
||||
|
||||
kb.setKeyRepeat(true)
|
||||
kb.setTextInput(false)
|
||||
ms.setVisible(false)
|
||||
--Application Vars
|
||||
-------------------------------------------------------------
|
||||
local Fonts={}
|
||||
function setFont(s)
|
||||
@@ -50,96 +55,9 @@ for i=1,10 do preField[i]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}end
|
||||
for i=11,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end
|
||||
freeRow={L=40}for i=1,40 do freeRow[i]={0,0,0,0,0,0,0,0,0,0}end
|
||||
--Game system Vars
|
||||
setting={
|
||||
das=10,arr=2,
|
||||
sddas=0,sdarr=2,
|
||||
quickR=true,swap=true,
|
||||
fine=false,
|
||||
--game
|
||||
|
||||
ghost=true,center=true,
|
||||
smo=true,grid=false,
|
||||
dropFX=3,
|
||||
shakeFX=3,
|
||||
atkFX=3,
|
||||
frameMul=100,
|
||||
--
|
||||
fullscreen=false,
|
||||
bg=true,
|
||||
bgblock=true,
|
||||
lang=1,
|
||||
skin=1,
|
||||
--graphic
|
||||
|
||||
sfx=8,bgm=6,
|
||||
vib=3,voc=0,
|
||||
--sound
|
||||
|
||||
keyMap={
|
||||
{"left","right","x","z","c","up","down","space","tab","r","","",""},
|
||||
{"","","","","","","","","","","","",""},
|
||||
{"","","","","","","","","","","","",""},
|
||||
{"","","","","","","","","","","","",""},
|
||||
{"","","","","","","","","","","","",""},
|
||||
{"","","","","","","","","","","","",""},
|
||||
{"","","","","","","","","","","","",""},
|
||||
{"","","","","","","","","","","","",""},--keyboard
|
||||
{"dpleft","dpright","a","b","y","dpup","dpdown","rightshoulder","x","leftshoulder","","",""},
|
||||
{"","","","","","","","","","","","",""},
|
||||
{"","","","","","","","","","","","",""},
|
||||
{"","","","","","","","","","","","",""},
|
||||
{"","","","","","","","","","","","",""},
|
||||
{"","","","","","","","","","","","",""},
|
||||
{"","","","","","","","","","","","",""},
|
||||
{"","","","","","","","","","","","",""},--joystick
|
||||
},
|
||||
virtualkey={
|
||||
{80,720-80,6400,80}, --moveLeft
|
||||
{240,720-80,6400,80}, --moveRight
|
||||
{1280-240,720-80,6400,80}, --rotRight
|
||||
{1280-400,720-80,6400,80}, --rotLeft
|
||||
{1280-240,720-240,6400,80}, --rotFlip
|
||||
{1280-80,720-80,6400,80}, --hardDrop
|
||||
{1280-80,720-240,6400,80}, --softDrop
|
||||
{1280-80,720-400,6400,80}, --hold
|
||||
{80,80,6400,80}, --restart
|
||||
},
|
||||
virtualkeyAlpha=3,
|
||||
virtualkeyIcon=true,
|
||||
virtualkeySwitch=false,
|
||||
--control
|
||||
}
|
||||
stat={
|
||||
run=0,game=0,time=0,
|
||||
extraPiece=0,extraRate=0,
|
||||
key=0,rotate=0,hold=0,piece=0,row=0,
|
||||
atk=0,send=0,recv=0,pend=0,
|
||||
clear_1=0,clear_2=0,clear_3=0,clear_4=0,
|
||||
spin_0=0,spin_1=0,spin_2=0,spin_3=0,
|
||||
b2b=0,b3b=0,pc=0,score=0,
|
||||
}
|
||||
virtualkey={
|
||||
{80,720-80,6400,80},--moveLeft
|
||||
{240,720-80,6400,80},--moveRight
|
||||
{1280-240,720-80,6400,80},--rotRight
|
||||
{1280-400,720-80,6400,80},--rotLeft
|
||||
{1280-240,720-240,6400,80},--rotFlip
|
||||
{1280-80,720-80,6400,80},--hardDrop
|
||||
{1280-80,720-240,6400,80},--softDrop
|
||||
{1280-80,720-400,6400,80},--hold
|
||||
{80,360,6400,80},--func
|
||||
{80,80,6400,80},--restart
|
||||
--[[
|
||||
{x=0,y=0,r=0},--toLeft
|
||||
{x=0,y=0,r=0},--toRight
|
||||
{x=0,y=0,r=0},--toDown
|
||||
]]
|
||||
|
||||
}
|
||||
virtualkeyDown={X,X,X,X,X,X,X,X,X,X}
|
||||
virtualkeyPressTime={0,0,0,0,0,0,0,0,0,0,0,0,0}
|
||||
--User datas&settings
|
||||
-------------------------------------------------------------
|
||||
scene=require("scene")
|
||||
require("default_data")
|
||||
require("class")
|
||||
require("ai")
|
||||
require("toolfunc")
|
||||
@@ -202,100 +120,16 @@ local function getNewBlock()
|
||||
FX_BGblock.next=FX_BGblock.next%7+1
|
||||
return t
|
||||
end
|
||||
local sceneInit={
|
||||
load=function()
|
||||
loading=1--Loading mode
|
||||
loadnum=1--Loading counter
|
||||
loadprogress=0--Loading bar(0~1)
|
||||
loadTip=text.tips[rnd(#text.tips)]
|
||||
end,
|
||||
intro=function()
|
||||
count=0
|
||||
BGM("blank")
|
||||
updatePowerInfo()
|
||||
end,
|
||||
main=function()
|
||||
modeEnv={}
|
||||
if not players[1]then
|
||||
newDemoPlayer(1,900,35,1.1)
|
||||
end--create demo player
|
||||
collectgarbage()
|
||||
end,
|
||||
music=function()
|
||||
if bgmPlaying then
|
||||
for i=1,#musicID do
|
||||
if musicID[i]==bgmPlaying then
|
||||
sel=i
|
||||
return
|
||||
end
|
||||
end
|
||||
else
|
||||
sel=1
|
||||
end
|
||||
end,
|
||||
mode=function()
|
||||
curBG="none"
|
||||
destroyPlayers()
|
||||
BGM("blank")
|
||||
end,
|
||||
custom=function()
|
||||
sel=sel or 1
|
||||
destroyPlayers()
|
||||
curBG=customRange.bg[customSel[12]]
|
||||
BGM(customRange.bgm[customSel[13]])
|
||||
end,
|
||||
draw=function()
|
||||
curBG="none"
|
||||
clearSureTime=0
|
||||
pen,sx,sy=1,1,1
|
||||
end,
|
||||
play=function()
|
||||
kb.setKeyRepeat(false)
|
||||
restartCount=0
|
||||
if needResetGameData then
|
||||
resetGameData()
|
||||
needResetGameData=nil
|
||||
end
|
||||
end,
|
||||
pause=function()
|
||||
end,
|
||||
setting_game=function()
|
||||
curBG="none"
|
||||
end,
|
||||
setting_control=function()
|
||||
curBoard=1
|
||||
keyboardSet=1
|
||||
joystickSet=1
|
||||
keyboardSetting=false
|
||||
joystickSetting=false
|
||||
end,
|
||||
setting_touch=function()
|
||||
curBG="game1"
|
||||
defaultSel=1
|
||||
sel=nil
|
||||
snapLevel=1
|
||||
end,
|
||||
help=function()
|
||||
curBG="none"
|
||||
end,
|
||||
history=function()
|
||||
updateLog=require"updateLog"
|
||||
curBG="lightGrey"
|
||||
sel=1
|
||||
end,
|
||||
quit=function()
|
||||
love.timer.sleep(.3)
|
||||
love.event.quit()
|
||||
end,
|
||||
}
|
||||
local function onVirtualkey(x,y)
|
||||
local d2,nearest,distance
|
||||
local dist,nearest=1e15
|
||||
for K=1,#virtualkey do
|
||||
local b=virtualkey[K]
|
||||
d2=(x-b[1])^2+(y-b[2])^2
|
||||
if d2<b[3]then
|
||||
if not nearest or d2<distance then
|
||||
nearest,distance=K,d2
|
||||
if b.ava then
|
||||
local d1=(x-b.x)^2+(y-b.y)^2
|
||||
if d1<b.r^2 then
|
||||
if d1<dist then
|
||||
nearest,dist=K,d1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -326,19 +160,22 @@ local keyDown,keyUp={},{}
|
||||
local gamepadDown,gamepadUp={},{}
|
||||
function mouseDown.intro(x,y,k)
|
||||
if k==2 then
|
||||
back()
|
||||
scene.back()
|
||||
else
|
||||
gotoScene("main")
|
||||
scene.push()
|
||||
scene.swapTo("main")
|
||||
end
|
||||
end
|
||||
function touchDown.intro(id,x,y)
|
||||
gotoScene("main")
|
||||
scene.push()
|
||||
scene.swapTo("main")
|
||||
end
|
||||
function keyDown.intro(key)
|
||||
if key=="escape"then
|
||||
back()
|
||||
scene.back()
|
||||
else
|
||||
gotoScene("main")
|
||||
scene.push()
|
||||
scene.swapTo("main")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -368,11 +205,12 @@ function keyDown.mode(key)
|
||||
levelSel=levelSel+1
|
||||
end
|
||||
elseif key=="return"then
|
||||
loadGame(modeSel,levelSel)
|
||||
scene.push()loadGame(modeSel,levelSel)
|
||||
elseif key=="c"then
|
||||
gotoScene("custom")
|
||||
scene.push()
|
||||
scene.swapTo("custom")
|
||||
elseif key=="escape"then
|
||||
back()
|
||||
scene.back()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -395,7 +233,7 @@ function keyDown.music(key)
|
||||
BGM()
|
||||
end
|
||||
elseif key=="escape"then
|
||||
back()
|
||||
scene.back()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -419,13 +257,24 @@ function keyDown.custom(key)
|
||||
elseif key=="up"then
|
||||
sel=(sel-2)%#customID+1
|
||||
elseif key=="d"then
|
||||
gotoScene("draw")
|
||||
scene.push()
|
||||
scene.swapTo("draw")
|
||||
elseif key=="return"then
|
||||
loadGame(0,1)
|
||||
scene.push()loadGame(0,1)
|
||||
elseif key=="space"then
|
||||
loadGame(0,2)
|
||||
scene.push()loadGame(0,2)
|
||||
elseif key=="1"then
|
||||
Widget.custom.set1.code()
|
||||
elseif key=="2"then
|
||||
Widget.custom.set2.code()
|
||||
elseif key=="3"then
|
||||
Widget.custom.set3.code()
|
||||
elseif key=="4"then
|
||||
Widget.custom.set4.code()
|
||||
elseif key=="5"then
|
||||
Widget.custom.set5.code()
|
||||
elseif key=="escape"then
|
||||
back()
|
||||
scene.back()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -488,97 +337,127 @@ function keyDown.draw(key)
|
||||
elseif key=="backspace"or key=="lalt"then
|
||||
pen=0
|
||||
elseif key=="escape"then
|
||||
back()
|
||||
scene.back()
|
||||
else
|
||||
pen=string.find("123qwea#sdzxc",key)or pen
|
||||
end
|
||||
end
|
||||
|
||||
function keyDown.setting_control(key)
|
||||
function keyDown.setting_key(key)
|
||||
if key=="escape"then
|
||||
if keyboardSetting then
|
||||
keyboardSetting=false
|
||||
SFX("error",.5)
|
||||
else
|
||||
back()
|
||||
scene.back()
|
||||
end
|
||||
elseif keyboardSetting then
|
||||
for l=1,8 do
|
||||
for y=1,13 do
|
||||
for y=1,20 do
|
||||
if setting.keyMap[l][y]==key then
|
||||
setting.keyMap[l][y]=""
|
||||
end
|
||||
end
|
||||
end
|
||||
setting.keyMap[curBoard][keyboardSet]=key
|
||||
SFX("reach",.5)
|
||||
keyboardSetting=false
|
||||
elseif key=="return"then
|
||||
keyboardSetting=true
|
||||
SFX("lock",.5)
|
||||
elseif key=="up"then
|
||||
keyboardSet=max(keyboardSet-1,1)
|
||||
if keyboardSet>1 then
|
||||
keyboardSet=keyboardSet-1
|
||||
SFX("move",.5)
|
||||
end
|
||||
elseif key=="down"then
|
||||
keyboardSet=min(keyboardSet+1,13)
|
||||
if keyboardSet<20 then
|
||||
keyboardSet=keyboardSet+1
|
||||
SFX("move",.5)
|
||||
end
|
||||
elseif key=="left"then
|
||||
curBoard=max(curBoard-1,1)
|
||||
if curBoard>1 then
|
||||
curBoard=curBoard-1
|
||||
SFX("rotate",.5)
|
||||
end
|
||||
elseif key=="right"then
|
||||
curBoard=min(curBoard+1,8)
|
||||
if curBoard<8 then
|
||||
curBoard=curBoard+1
|
||||
SFX("rotate",.5)
|
||||
end
|
||||
end
|
||||
end
|
||||
function gamepadDown.setting_control(key)
|
||||
function gamepadDown.setting_key(key)
|
||||
if key=="back"then
|
||||
if joystickSetting then
|
||||
joystickSetting=false
|
||||
SFX("error",.5)
|
||||
else
|
||||
back()
|
||||
scene.back()
|
||||
end
|
||||
elseif joystickSetting then
|
||||
for l=9,16 do
|
||||
for y=1,12 do
|
||||
for y=1,20 do
|
||||
if setting.keyMap[l][y]==key then
|
||||
setting.keyMap[l][y]=""
|
||||
end
|
||||
end
|
||||
end
|
||||
setting.keyMap[8+curBoard][joystickSet]=key
|
||||
SFX("reach",.5)
|
||||
joystickSetting=false
|
||||
elseif key=="start"then
|
||||
joystickSetting=true
|
||||
SFX("lock",.5)
|
||||
elseif key=="up"then
|
||||
joystickSet=max(joystickSet-1,1)
|
||||
if joystickSet>1 then
|
||||
joystickSet=joystickSet-1
|
||||
SFX("move",.5)
|
||||
end
|
||||
elseif key=="down"then
|
||||
joystickSet=min(joystickSet+1,12)
|
||||
if joystickSet<20 then
|
||||
joystickSet=joystickSet+1
|
||||
SFX("move",.5)
|
||||
end
|
||||
elseif key=="left"then
|
||||
curBoard=max(curBoard-1,1)
|
||||
if curBoard>1 then
|
||||
curBoard=curBoard-1
|
||||
SFX("rotate",.5)
|
||||
end
|
||||
elseif key=="right"then
|
||||
curBoard=min(curBoard+1,8)
|
||||
if curBoard<8 then
|
||||
curBoard=curBoard+1
|
||||
SFX("rotate",.5)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function mouseDown.setting_touch(x,y,k)
|
||||
if k==2 then back()end
|
||||
for K=1,#virtualkey do
|
||||
local b=virtualkey[K]
|
||||
if (x-b[1])^2+(y-b[2])^2<b[3]then
|
||||
if k==2 then scene.back()end
|
||||
for K=1,#VK_org do
|
||||
local B=VK_org[K]
|
||||
if (x-B.x)^2+(y-B.y)^2<B.r^2 then
|
||||
sel=K
|
||||
end
|
||||
end
|
||||
end
|
||||
function mouseMove.setting_touch(x,y,dx,dy)
|
||||
if sel and ms.isDown(1)then
|
||||
local b=virtualkey[sel]
|
||||
b[1],b[2]=b[1]+dx,b[2]+dy
|
||||
local B=VK_org[sel]
|
||||
B.x,B.y=B.x+dx,B.y+dy
|
||||
end
|
||||
end
|
||||
function mouseUp.setting_touch(x,y,k)
|
||||
if sel then
|
||||
local b=virtualkey[sel]
|
||||
local B=VK_org[sel]
|
||||
local k=snapLevelValue[snapLevel]
|
||||
b[1],b[2]=int(b[1]/k+.5)*k,int(b[2]/k+.5)*k
|
||||
B.x,B.y=int(B.x/k+.5)*k,int(B.y/k+.5)*k
|
||||
end
|
||||
end
|
||||
function touchDown.setting_touch(id,x,y)
|
||||
for K=1,#virtualkey do
|
||||
local b=virtualkey[K]
|
||||
if (x-b[1])^2+(y-b[2])^2<b[3]then
|
||||
for K=1,#VK_org do
|
||||
local B=VK_org[K]
|
||||
if (x-B.x)^2+(y-B.y)^2<B.r^2 then
|
||||
sel=K
|
||||
end
|
||||
end
|
||||
@@ -587,43 +466,62 @@ function touchUp.setting_touch(id,x,y)
|
||||
if sel then
|
||||
x,y=xOy:inverseTransformPoint(x,y)
|
||||
if sel then
|
||||
local b=virtualkey[sel]
|
||||
local B=VK_org[sel]
|
||||
local k=snapLevelValue[snapLevel]
|
||||
b[1],b[2]=int(b[1]/k+.5)*k,int(b[2]/k+.5)*k
|
||||
B.x,B.y=int(B.x/k+.5)*k,int(B.y/k+.5)*k
|
||||
end
|
||||
end
|
||||
end
|
||||
function touchMove.setting_touch(id,x,y,dx,dy)
|
||||
if sel then
|
||||
local b=virtualkey[sel]
|
||||
b[1],b[2]=b[1]+dx,b[2]+dy
|
||||
local B=VK_org[sel]
|
||||
B.x,B.y=B.x+dx,B.y+dy
|
||||
end
|
||||
end
|
||||
|
||||
function keyDown.pause(key)
|
||||
if key=="escape"then
|
||||
back()
|
||||
scene.back()
|
||||
elseif key=="return"or key=="space"then
|
||||
resumeGame()
|
||||
elseif key=="r"and kb.isDown("lctrl","rctrl")then
|
||||
clearTask("play")
|
||||
updateStat()
|
||||
resetGameData()
|
||||
gotoScene("play","none")
|
||||
end--Restart with ctrl+R
|
||||
scene.swapTo("play","none")
|
||||
end--Ctrl+R重开
|
||||
end
|
||||
|
||||
function touchDown.play(id,x,y)
|
||||
if setting.virtualkeySwitch then
|
||||
if setting.VKSwitch then
|
||||
local t=onVirtualkey(x,y)
|
||||
if t then
|
||||
players[1]:pressKey(t)
|
||||
if setting.VKTrack then
|
||||
local B=virtualkey[t]
|
||||
--按钮软碰撞(做不来hhh随便做一个,效果还行!)
|
||||
if setting.VKDodge then
|
||||
for i=1,#virtualkey do
|
||||
local b=virtualkey[i]
|
||||
local d=B.r+b.r-((B.x-b.x)^2+(B.y-b.y)^2)^.5--碰撞深度(负数=间隔距离)
|
||||
if d>0 then
|
||||
b.x=b.x+(b.x-B.x)*d*b.r*.00005
|
||||
b.y=b.y+(b.y-B.y)*d*b.r*.00005
|
||||
end
|
||||
end
|
||||
end
|
||||
local O=VK_org[t]
|
||||
local _FW,_CW=setting.VKTchW*.1,1-setting.VKCurW*.1
|
||||
local _OW=1-_FW-_CW
|
||||
B.x,B.y=x*_FW+B.x*_CW+O.x*_OW,y*_FW+B.y*_CW+O.y*_OW
|
||||
--按钮自动跟随:手指位置,当前位置,原始位置,权重取决于设置
|
||||
end
|
||||
VIB(0)
|
||||
end
|
||||
end
|
||||
end
|
||||
function touchUp.play(id,x,y)
|
||||
if setting.virtualkeySwitch then
|
||||
if setting.VKSwitch then
|
||||
local t=onVirtualkey(x,y)
|
||||
if t then
|
||||
players[1]:releaseKey(t)
|
||||
@@ -631,26 +529,28 @@ function touchUp.play(id,x,y)
|
||||
end
|
||||
end
|
||||
function touchMove.play(id,x,y,dx,dy)
|
||||
if setting.virtualkeySwitch then
|
||||
if setting.VKSwitch then
|
||||
local l=tc.getTouches()
|
||||
for n=1,#virtualkey do
|
||||
local b=virtualkey[n]
|
||||
local B=virtualkey[n]
|
||||
for i=1,#l do
|
||||
local x,y=xOy:inverseTransformPoint(tc.getPosition(l[i]))
|
||||
if(x-b[1])^2+(y-b[2])^2<=b[3]then goto L end
|
||||
if(x-B.x)^2+(y-B.y)^2<=B.r^2 then
|
||||
goto nextButton
|
||||
end
|
||||
end
|
||||
players[1]:releaseKey(n)
|
||||
::L::
|
||||
::nextButton::
|
||||
end
|
||||
end
|
||||
end
|
||||
function keyDown.play(key)
|
||||
if key=="escape"and not sceneSwaping then
|
||||
if key=="escape"and not scene.swapping then
|
||||
return(frame<180 and back or pauseGame)()
|
||||
end
|
||||
local m=setting.keyMap
|
||||
for p=1,players.human do
|
||||
for k=1,12 do
|
||||
for k=1,20 do
|
||||
if key==m[2*p-1][k]or key==m[2*p][k]then
|
||||
players[p]:pressKey(k)
|
||||
return
|
||||
@@ -661,7 +561,7 @@ end
|
||||
function keyUp.play(key)
|
||||
local m=setting.keyMap
|
||||
for p=1,players.human do
|
||||
for k=1,12 do
|
||||
for k=1,20 do
|
||||
if key==m[2*p-1][k]or key==m[2*p][k]then
|
||||
players[p]:releaseKey(k)
|
||||
return
|
||||
@@ -670,10 +570,10 @@ function keyUp.play(key)
|
||||
end
|
||||
end
|
||||
function gamepadDown.play(key)
|
||||
if key=="back"then back()return end
|
||||
if key=="back"then scene.back()return end
|
||||
local m=setting.keyMap
|
||||
for p=1,players.human do
|
||||
for k=1,12 do
|
||||
for k=1,20 do
|
||||
if key==m[2*p+7][k]or key==m[2*p+8][k]then
|
||||
players[p]:pressKey(k)
|
||||
return
|
||||
@@ -684,7 +584,7 @@ end
|
||||
function gamepadUp.play(key)
|
||||
local m=setting.keyMap
|
||||
for p=1,players.human do
|
||||
for k=1,12 do
|
||||
for k=1,20 do
|
||||
if key==m[2*p+7][k]or key==m[2*p+8][k]then
|
||||
players[p]:releaseKey(k)
|
||||
return
|
||||
@@ -702,7 +602,7 @@ function keyDown.history(key)
|
||||
elseif key=="down"then
|
||||
sel=min(sel+5,#updateLog-22)
|
||||
elseif key=="escape"then
|
||||
back()
|
||||
scene.back()
|
||||
end
|
||||
end
|
||||
-------------------------------------------------------------
|
||||
@@ -742,10 +642,10 @@ local function widgetControl_key(i)
|
||||
if widget_sel then
|
||||
widget_sel=kb.isDown("lshift")and widget_sel.prev or widget_sel.next or widget_sel
|
||||
else
|
||||
widget_sel=select(2,next(Widget[scene]))
|
||||
widget_sel=select(2,next(Widget[scene.cur]))
|
||||
end
|
||||
elseif i=="space"or i=="return"then
|
||||
if not sceneSwaping and widget_sel then
|
||||
if not scene.swapping and widget_sel then
|
||||
widgetPress(widget_sel)
|
||||
end
|
||||
else
|
||||
@@ -770,10 +670,10 @@ local function widgetControl_gamepad(i)
|
||||
if widget_sel then
|
||||
widget_sel=i=="dpup"and widget_sel.prev or widget_sel.next or widget_sel
|
||||
else
|
||||
widget_sel=select(2,next(Widget[scene]))
|
||||
widget_sel=select(2,next(Widget[scene.cur]))
|
||||
end
|
||||
elseif i=="start"then
|
||||
if not sceneSwaping and widget_sel then
|
||||
if not scene.swapping and widget_sel then
|
||||
local W=widget_sel
|
||||
if W.hide and W.hide()then widget_sel=nil end
|
||||
if W.type=="button"then
|
||||
@@ -791,15 +691,16 @@ local function widgetControl_gamepad(i)
|
||||
end
|
||||
end
|
||||
function love.mousepressed(x,y,k,t,num)
|
||||
if devMode>0 then print(x,y)end
|
||||
if t then return end
|
||||
mx,my=xOy:inverseTransformPoint(x,y)
|
||||
if mouseDown[scene]then
|
||||
mouseDown[scene](mx,my,k)
|
||||
if mouseDown[scene.cur]then
|
||||
mouseDown[scene.cur](mx,my,k)
|
||||
elseif k==2 then
|
||||
back()
|
||||
scene.back()
|
||||
end
|
||||
if k==1 then
|
||||
if widget_sel and not sceneSwaping then
|
||||
if widget_sel and not scene.swapping then
|
||||
widgetPress(widget_sel,mx,my)
|
||||
end
|
||||
end
|
||||
@@ -809,14 +710,14 @@ function love.mousemoved(x,y,dx,dy,t)
|
||||
if t then return end
|
||||
mx,my=xOy:inverseTransformPoint(x,y)
|
||||
dx,dy=dx/scr.k,dy/scr.k
|
||||
if mouseMove[scene]then
|
||||
mouseMove[scene](mx,my,dx,dy)
|
||||
if mouseMove[scene.cur]then
|
||||
mouseMove[scene.cur](mx,my,dx,dy)
|
||||
end
|
||||
if ms.isDown(1)and widget_sel then
|
||||
widgetDrag(widget_sel,mx,my,dx,dy)
|
||||
else
|
||||
widget_sel=nil
|
||||
for _,W in next,Widget[scene]do
|
||||
for _,W in next,Widget[scene.cur]do
|
||||
if not(W.hide and W.hide())and W:isAbove(mx,my)then
|
||||
widget_sel=W
|
||||
return
|
||||
@@ -828,12 +729,12 @@ end
|
||||
function love.mousereleased(x,y,k,t,num)
|
||||
if t then return end
|
||||
mx,my=xOy:inverseTransformPoint(x,y)
|
||||
if mouseUp[scene]then
|
||||
mouseUp[scene](mx,my,k)
|
||||
if mouseUp[scene.cur]then
|
||||
mouseUp[scene.cur](mx,my,k)
|
||||
end
|
||||
end
|
||||
function love.wheelmoved(x,y)
|
||||
if wheelmoved[scene]then wheelmoved[scene](x,y)end
|
||||
if wheelmoved[scene.cur]then wheelmoved[scene.cur](x,y)end
|
||||
end
|
||||
|
||||
function love.touchpressed(id,x,y)
|
||||
@@ -842,20 +743,20 @@ function love.touchpressed(id,x,y)
|
||||
touching=id
|
||||
love.touchmoved(id,x,y,0,0)
|
||||
end
|
||||
if touchDown[scene]then
|
||||
touchDown[scene](id,xOy:inverseTransformPoint(x,y))
|
||||
if touchDown[scene.cur]then
|
||||
touchDown[scene.cur](id,xOy:inverseTransformPoint(x,y))
|
||||
end
|
||||
end
|
||||
function love.touchmoved(id,x,y,dx,dy)
|
||||
x,y=xOy:inverseTransformPoint(x,y)
|
||||
if touchMove[scene]then
|
||||
touchMove[scene](id,x,y,dx/scr.k,dy/scr.k)
|
||||
if touchMove[scene.cur]then
|
||||
touchMove[scene.cur](id,x,y,dx/scr.k,dy/scr.k)
|
||||
end
|
||||
if widget_sel then
|
||||
widgetDrag(widget_sel,x,y,dx,dy)
|
||||
else
|
||||
widget_sel=nil
|
||||
for _,W in next,Widget[scene]do
|
||||
for _,W in next,Widget[scene.cur]do
|
||||
if not(W.hide and W.hide())and W:isAbove(x,y)then
|
||||
widget_sel=W
|
||||
return
|
||||
@@ -870,13 +771,13 @@ function love.touchreleased(id,x,y)
|
||||
x,y=xOy:inverseTransformPoint(x,y)
|
||||
if id==touching then
|
||||
touching=nil
|
||||
if widget_sel and not sceneSwaping then
|
||||
if widget_sel and not scene.swapping then
|
||||
widgetPress(widget_sel,x,y)
|
||||
end
|
||||
widget_sel=nil
|
||||
end
|
||||
if touchUp[scene]then
|
||||
touchUp[scene](id,x,y)
|
||||
if touchUp[scene.cur]then
|
||||
touchUp[scene.cur](id,x,y)
|
||||
end
|
||||
end
|
||||
function love.keypressed(i)
|
||||
@@ -910,14 +811,14 @@ function love.keypressed(i)
|
||||
end
|
||||
end
|
||||
else
|
||||
if keyDown[scene]then keyDown[scene](i)
|
||||
elseif i=="escape"or i=="back"then back()
|
||||
if keyDown[scene.cur]then keyDown[scene.cur](i)
|
||||
elseif i=="escape"then scene.back()
|
||||
else widgetControl_key(i)
|
||||
end
|
||||
end
|
||||
end
|
||||
function love.keyreleased(i)
|
||||
if keyUp[scene]then keyUp[scene](i)end
|
||||
if keyUp[scene.cur]then keyUp[scene.cur](i)end
|
||||
end
|
||||
|
||||
local keyMirror={
|
||||
@@ -930,20 +831,20 @@ local keyMirror={
|
||||
}
|
||||
function love.gamepadpressed(joystick,i)
|
||||
mouseShow=false
|
||||
if gamepadDown[scene]then gamepadDown[scene](i)
|
||||
elseif keyDown[scene]then keyDown[scene](keyMirror[i]or i)
|
||||
elseif i=="back"then back()
|
||||
if gamepadDown[scene.cur]then gamepadDown[scene.cur](i)
|
||||
elseif keyDown[scene.cur]then keyDown[scene.cur](keyMirror[i]or i)
|
||||
elseif i=="back"then scene.back()
|
||||
else widgetControl_gamepad(i)
|
||||
end
|
||||
end
|
||||
function love.gamepadreleased(joystick,i)
|
||||
if gamepadUp[scene]then gamepadUp[scene](i)
|
||||
if gamepadUp[scene.cur]then gamepadUp[scene.cur](i)
|
||||
end
|
||||
end
|
||||
--[[
|
||||
function love.joystickpressed(js,k)end
|
||||
function love.joystickaxis(js,axis,valend
|
||||
function love.joystickhat(js,hat,dirend
|
||||
function love.joystickaxis(js,axis,val)end
|
||||
function love.joystickhat(js,hat,dir)end
|
||||
function love.sendData(data)end
|
||||
function love.receiveData(id,data)end
|
||||
]]
|
||||
@@ -964,7 +865,7 @@ function love.resize(w,h)
|
||||
gc.replaceTransform(xOy)
|
||||
end
|
||||
function love.focus(f)
|
||||
if system~="Android" and not f and scene=="play"then pauseGame()end
|
||||
if system~="Android" and not f and scene.cur=="play"then pauseGame()end
|
||||
end
|
||||
function love.update(dt)
|
||||
-- if players then for k,v in pairs(players[1])do
|
||||
@@ -990,28 +891,25 @@ function love.update(dt)
|
||||
FX_BGblock.tm=rnd(20,30)
|
||||
end
|
||||
end
|
||||
if sceneSwaping then
|
||||
sceneSwaping.time=sceneSwaping.time-1
|
||||
if sceneSwaping.time==sceneSwaping.mid then
|
||||
for k,W in next,Widget[scene]do
|
||||
if W.type=="button"then
|
||||
W.alpha=0
|
||||
end--Reset widgets' alpha
|
||||
end
|
||||
if scene.swapping then
|
||||
local S=scene.swap
|
||||
S.time=S.time-1
|
||||
if S.time==S.mid then
|
||||
scene.cur=S.tar
|
||||
scene.init(S.tar)
|
||||
widget_sel=nil
|
||||
scene=sceneSwaping.tar
|
||||
if sceneInit[scene] then sceneInit[scene]()end
|
||||
--scene swapped!
|
||||
elseif sceneSwaping.time==0 then
|
||||
sceneSwaping=nil
|
||||
--此时场景切换
|
||||
end
|
||||
if S.time==0 then
|
||||
scene.swapping=false
|
||||
end
|
||||
end
|
||||
if Tmr[scene]then
|
||||
Tmr[scene](dt)
|
||||
if Tmr[scene.cur]then
|
||||
Tmr[scene.cur](dt)
|
||||
end
|
||||
for i=#Task,1,-1 do
|
||||
local T=Task[i]
|
||||
if(not T.P or T.P and scene=="play")and T.code(T.P,T.data)then
|
||||
if T.code(T.P,T.data)then
|
||||
rem(Task,i)
|
||||
end
|
||||
end
|
||||
@@ -1036,14 +934,14 @@ function love.update(dt)
|
||||
end
|
||||
end
|
||||
Q[1]=L[n]
|
||||
Q[1]:setVolume(setting.voc*.125)
|
||||
Q[1]:setVolume(setting.voc*.1)
|
||||
Q[1]:play()
|
||||
--load voice with string
|
||||
end
|
||||
end
|
||||
end
|
||||
-- for k,W in next,Widget[scene]do
|
||||
-- end--update Widgets
|
||||
-- for k,W in next,Widget[scene.cur]do
|
||||
-- end--更新控件
|
||||
end
|
||||
local scs={1,2,1,2,1,2,1,2,1,2,1.5,1.5,.5,2.5}
|
||||
local FPS=love.timer.getFPS
|
||||
@@ -1059,9 +957,9 @@ function love.draw()
|
||||
gc.draw(img,FX_BGblock[n].x+(j-1)*30*size,FX_BGblock[n].y+(i-1)*30*size,nil,size)
|
||||
end
|
||||
end end
|
||||
end
|
||||
if Pnt[scene]then Pnt[scene]()end
|
||||
for k,W in next,Widget[scene]do
|
||||
end--Draw BG falling blocks
|
||||
if Pnt[scene.cur]then Pnt[scene.cur]()end
|
||||
for k,W in next,Widget[scene.cur]do
|
||||
if not(W.hide and W.hide())then
|
||||
W:draw()
|
||||
end
|
||||
@@ -1070,7 +968,7 @@ function love.draw()
|
||||
local r=Timer()*.5
|
||||
gc.setColor(1,1,1,min(1-math.abs(1-r%1*2),.3))
|
||||
r=int(r)%7+1
|
||||
gc.draw(mouseBlock[r],mx,my,Timer()%3.1416*4,20,20,scs[2*r]-.5,#blocks[r][0]-scs[2*r-1]+.5)
|
||||
gc.draw(miniBlock[r],mx,my,Timer()%3.1416*4,20,20,scs[2*r]-.5,#blocks[r][0]-scs[2*r-1]+.5)
|
||||
gc.setColor(1,1,1,.5)gc.circle("fill",mx,my,5)
|
||||
gc.setColor(1,1,1)gc.circle("fill",mx,my,3)
|
||||
end--Awesome mouse!
|
||||
@@ -1085,27 +983,27 @@ function love.draw()
|
||||
gc.setColor(1,1,1,1-S[2]/S[3])
|
||||
local r=(10*S[2]/S[3])^1.2
|
||||
gc.rectangle("line",S[4]-r,S[5]-r,S[6]+2*r,S[7]+2*r)
|
||||
--Ripple
|
||||
--按钮波纹
|
||||
elseif S[1]==1 then
|
||||
gc.setColor(S[4],S[5],S[6],1-S[2]/S[3])
|
||||
gc.rectangle("fill",S[7],S[8],S[9],S[10],2)
|
||||
--Shade
|
||||
--开关/滑条残影
|
||||
end
|
||||
end--sysFXs
|
||||
if sceneSwaping then
|
||||
sceneSwaping.draw()
|
||||
end--Swaping animation
|
||||
if scene.swapping then
|
||||
scene.swap.draw(scene.swap.time)
|
||||
end--Swapping animation
|
||||
if scr.r~=.5625 then
|
||||
gc.setColor(0,0,0)
|
||||
if scr.r>.5625 then
|
||||
local d=(scr.h-scr.w*9/16)*.5/scr.k
|
||||
gc.rectangle("fill",0,0,1280,-d)
|
||||
gc.rectangle("fill",0,720,1280,d)
|
||||
else--high
|
||||
else--高窗口
|
||||
local d=(scr.w-scr.h*16/9)*.5/scr.k
|
||||
gc.rectangle("fill",0,0,-d,720)
|
||||
gc.rectangle("fill",1280,0,d,720)
|
||||
end--wide
|
||||
end--扁窗口
|
||||
end--Black side
|
||||
setFont(20)
|
||||
gc.setColor(1,1,1)
|
||||
@@ -1121,12 +1019,12 @@ function love.draw()
|
||||
end
|
||||
function love.run()
|
||||
local T=love.timer
|
||||
local lastFrame,lastUpdatePowerInfo=T.getTime(),T.getTime()
|
||||
local lastFrame,lastFreshPow=T.getTime(),T.getTime()
|
||||
local readyDrawFrame=0
|
||||
local mini=love.window.isMinimized
|
||||
local PUMP,POLL=love.event.pump,love.event.poll
|
||||
love.resize(gc.getWidth(),gc.getHeight())
|
||||
scene="load"sceneInit.load()--System Launch
|
||||
scene.init("load")--Scene Launch
|
||||
return function()
|
||||
PUMP()
|
||||
for N,a,b,c,d,e in POLL()do
|
||||
@@ -1149,14 +1047,14 @@ function love.run()
|
||||
gc.present()
|
||||
end
|
||||
end
|
||||
repeat
|
||||
if Timer()-lastUpdatePowerInfo>5 then
|
||||
updatePowerInfo()
|
||||
lastUpdatePowerInfo=Timer()
|
||||
end
|
||||
until Timer()-lastFrame>.013
|
||||
T.sleep(.002)
|
||||
while Timer()-lastFrame<.0158 do
|
||||
T.sleep(.001)
|
||||
end
|
||||
lastFrame=Timer()
|
||||
if Timer()-lastFreshPow>5 then
|
||||
updatePowerInfo()
|
||||
lastFreshPow=Timer()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1168,8 +1066,9 @@ end
|
||||
if fs.getInfo("usersetting")then
|
||||
loadSetting()
|
||||
elseif system=="Android"or system=="iOS" then
|
||||
setting.virtualkeySwitch=true
|
||||
setting.swap=false
|
||||
else
|
||||
setting.VKSwitch=false
|
||||
end
|
||||
math.randomseed(os.time()*626)
|
||||
swapLanguage(setting.lang)
|
||||
|
||||
133
paint.lua
@@ -51,7 +51,9 @@ local function dataOpt(i)
|
||||
elseif i==14 then
|
||||
return format("%0.2f",stat.atk/stat.row)
|
||||
elseif i==15 then
|
||||
return stat.extraPiece.."["..(int(stat.extraRate/stat.piece*10000)*.01).."%]"
|
||||
return stat.extraPiece
|
||||
elseif i==16 then
|
||||
return max(100-int(stat.extraRate/stat.piece*10000)*.01,0).."%"
|
||||
end
|
||||
end
|
||||
local statOptL={
|
||||
@@ -177,29 +179,36 @@ local function drawAtkPointer(x,y)
|
||||
gc.circle("line",x,y,30*(1+a),6)
|
||||
end
|
||||
local function VirtualkeyPreview()
|
||||
for i=1,#virtualkey do
|
||||
local c=sel==i and .8 or 1
|
||||
gc.setColor(c,c,c,setting.virtualkeyAlpha*.1)
|
||||
local b=virtualkey[i]
|
||||
gc.setLineWidth(b[4]*.07)
|
||||
gc.circle("line",b[1],b[2],b[4]-5)
|
||||
if setting.virtualkeyIcon then gc.draw(virtualkeyIcon[i],b[1],b[2],nil,b[4]*.025,nil,18,18)end
|
||||
if setting.VKSwitch then
|
||||
for i=1,#VK_org do
|
||||
local B=VK_org[i]
|
||||
if B.ava then
|
||||
local c=sel==i and .6 or 1
|
||||
gc.setColor(c,1,c,setting.VKAlpha*.1)
|
||||
gc.setLineWidth(B.r*.07)
|
||||
gc.circle("line",B.x,B.y,B.r)
|
||||
if setting.VKIcon then gc.draw(VKIcon[i],B.x,B.y,nil,B.r*.025,nil,18,18)end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local function drawVirtualkey()
|
||||
local a=setting.virtualkeyAlpha*.1
|
||||
local a=setting.VKAlpha*.1
|
||||
for i=1,#virtualkey do
|
||||
if i~=9 or modeEnv.Fkey then
|
||||
local p,b=virtualkeyDown[i],virtualkey[i]
|
||||
if p then gc.setColor(.7,.7,.7,a)
|
||||
else gc.setColor(1,1,1,a)
|
||||
end
|
||||
gc.setLineWidth(b[4]*.07)
|
||||
gc.circle("line",b[1],b[2]+virtualkeyPressTime[i],b[4]-5)
|
||||
if setting.virtualkeyIcon then gc.draw(virtualkeyIcon[i],b[1],b[2]+virtualkeyPressTime[i],nil,b[4]*.025,nil,18,18)end
|
||||
if virtualkeyPressTime[i]>0 then
|
||||
gc.setColor(1,1,1,a*virtualkeyPressTime[i]*.1)
|
||||
gc.circle("line",b[1],b[2],b[4]*(1.4-virtualkeyPressTime[i]*.04))
|
||||
local B=virtualkey[i]
|
||||
if B.ava then
|
||||
local _=virtualkeyDown[i]and gc.setColor(.7,.7,.7,a)or gc.setColor(1,1,1,a)--Dark magic
|
||||
gc.setLineWidth(B.r*.07)
|
||||
local ΔY=virtualkeyPressTime[i]
|
||||
gc.circle("line",B.x,B.y+ΔY,B.r)--Outline circle
|
||||
if setting.VKIcon then
|
||||
gc.draw(VKIcon[i],B.x,B.y+ΔY,nil,B.r*.025,nil,18,18)
|
||||
end--Icon
|
||||
if ΔY>0 then
|
||||
gc.setColor(1,1,1,a*ΔY*.1)
|
||||
gc.circle("line",B.x,B.y,B.r*(1.4-ΔY*.04))
|
||||
end--Ripple
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -272,7 +281,7 @@ function Pnt.BG.game6()
|
||||
end
|
||||
gc.setColor(.3,.3,.3)
|
||||
local r=7-int(Timer()*.5)%7
|
||||
gc.draw(mouseBlock[r],640,360,Timer()%3.1416*6,400,400,scs[2*r]-.5,#blocks[r][0]-scs[2*r-1]+.5)
|
||||
gc.draw(miniBlock[r],640,360,Timer()%3.1416*6,400,400,scs[2*r]-.5,#blocks[r][0]-scs[2*r-1]+.5)
|
||||
end--Fast lightning&spining tetromino
|
||||
local matrixT={}for i=0,15 do matrixT[i]={}for j=0,8 do matrixT[i][j]=love.math.noise(i,j)+2 end end
|
||||
function Pnt.BG.matrix()
|
||||
@@ -413,12 +422,12 @@ function Pnt.draw()
|
||||
gc.translate(-200,-60)
|
||||
if clearSureTime>0 then
|
||||
gc.setColor(1,1,1,clearSureTime*.02)
|
||||
gc.draw(drawableText.question,1100,570)
|
||||
gc.draw(drawableText.question,760,11)
|
||||
end
|
||||
if pen>0 then
|
||||
gc.setLineWidth(13)
|
||||
gc.setColor(blockColor[pen])
|
||||
gc.rectangle("line",945,605,70,70)
|
||||
gc.rectangle("line",746,460,70,70)
|
||||
elseif pen==-1 then
|
||||
gc.setLineWidth(5)
|
||||
gc.setColor(.9,.9,.9)
|
||||
@@ -453,7 +462,7 @@ function Pnt.play()
|
||||
gc.pop()
|
||||
end--FX animation
|
||||
gc.setColor(1,1,1)
|
||||
if setting.virtualkeySwitch then drawVirtualkey()end
|
||||
if setting.VKSwitch then drawVirtualkey()end
|
||||
if modeEnv.royaleMode then
|
||||
for i=1,#FX_badge do
|
||||
local b=FX_badge[i]
|
||||
@@ -501,9 +510,9 @@ function Pnt.pause()
|
||||
gc.print(text.stat[i+3],110,30*i+270)
|
||||
gc.print(dataOpt(i),305,30*i+270)
|
||||
end
|
||||
for i=9,15 do
|
||||
for i=9,16 do
|
||||
gc.print(text.stat[i+3],860,30*i+30)
|
||||
gc.print(dataOpt(i),1000,30*i+30)
|
||||
gc.print(dataOpt(i),1050,30*i+30)
|
||||
end
|
||||
setFont(40)
|
||||
if system~="Android"then
|
||||
@@ -532,40 +541,54 @@ function Pnt.setting_sound()
|
||||
gc.setColor(1,1,1)
|
||||
mDraw(drawableText.setting_sound,640,15)
|
||||
end
|
||||
function Pnt.setting_control()
|
||||
function Pnt.setting_key()
|
||||
local a=.3+sin(Timer()*15)*.1
|
||||
if keyboardSetting then
|
||||
gc.setColor(1,.5,.5,a)
|
||||
else
|
||||
gc.setColor(.9,.9,.9,a)
|
||||
end
|
||||
gc.rectangle("fill",240,40*keyboardSet-10,200,40)
|
||||
if joystickSetting then
|
||||
gc.setColor(1,.5,.5,a)
|
||||
else
|
||||
gc.setColor(.9,.9,.9,a)
|
||||
end
|
||||
gc.rectangle("fill",440,40*joystickSet-10,200,40)
|
||||
if keyboardSetting then gc.setColor(1,.3,.3,a)else gc.setColor(1,.7,.7,a)end
|
||||
gc.rectangle("fill",
|
||||
keyboardSet<11 and 240 or 840,
|
||||
45*keyboardSet+20-450*int(keyboardSet/11),
|
||||
200,45
|
||||
)
|
||||
if joystickSetting then gc.setColor(.3,.3,.1,a)else gc.setColor(.7,.7,1,a)end
|
||||
gc.rectangle("fill",
|
||||
joystickSet<11 and 440 or 1040,
|
||||
45*joystickSet+20-450*int(joystickSet/11),
|
||||
200,45
|
||||
)
|
||||
--Selection rect
|
||||
|
||||
gc.setColor(1,.3,.3)
|
||||
mDraw(drawableText.keyboard,340,35)
|
||||
mDraw(drawableText.keyboard,940,35)
|
||||
gc.setColor(.3,.3,1)
|
||||
mDraw(drawableText.joystick,540,35)
|
||||
mDraw(drawableText.joystick,1140,35)
|
||||
|
||||
gc.setColor(1,1,1)
|
||||
setFont(25)
|
||||
for y=1,13 do
|
||||
mStr(text.actName[y],150,40*y-5)
|
||||
for x=1,2 do
|
||||
mStr(setting.keyMap[curBoard+x*8-8][y],200*x+140,40*y-3)
|
||||
setFont(31)
|
||||
for N=1,20 do
|
||||
if N<11 then
|
||||
gc.printf(text.actName[N],47,45*N+22,180,"right")
|
||||
mStr(setting.keyMap[curBoard][N],340,45*N+22)
|
||||
mStr(setting.keyMap[curBoard+8][N],540,45*N+22)
|
||||
else
|
||||
gc.printf(text.actName[N],647,45*N-428,180,"right")
|
||||
mStr(setting.keyMap[curBoard][N],940,45*N-428)
|
||||
mStr(setting.keyMap[curBoard+8][N],1040,45*N-428)
|
||||
end
|
||||
gc.line(40,40*y-10,640,40*y-10)
|
||||
end
|
||||
for x=1,4 do
|
||||
gc.line(200*x-160,30,200*x-160,550)
|
||||
gc.setLineWidth(2)
|
||||
for x=40,1240,200 do
|
||||
gc.line(x,65,x,515)
|
||||
end
|
||||
for y=65,515,45 do
|
||||
gc.line(40,y,1240,y)
|
||||
end
|
||||
gc.line(40,550,640,550)
|
||||
mDraw(drawableText.keyboard,340,0)
|
||||
mDraw(drawableText.joystick,540,0)
|
||||
gc.draw(drawableText.ctrlSetHelp,50,620)
|
||||
setFont(40)
|
||||
gc.print("P"..int(curBoard*.5+.5).."/P4",420,560)
|
||||
gc.print(curBoard.."/8",580,560)
|
||||
gc.print("Player:",170,590)
|
||||
gc.print(int(curBoard*.5+.5),300,590)
|
||||
gc.print(curBoard.."/8",580,590)
|
||||
gc.draw(drawableText.ctrlSetHelp,50,650)
|
||||
end
|
||||
function Pnt.setting_touch()
|
||||
VirtualkeyPreview()
|
||||
@@ -581,6 +604,12 @@ function Pnt.setting_touch()
|
||||
end
|
||||
end
|
||||
end
|
||||
function Pnt.setting_trackSetting()
|
||||
gc.setColor(1,1,1)
|
||||
mDraw(drawableText.VKTchW,140+50*setting.VKTchW,260)
|
||||
mDraw(drawableText.VKOrgW,140+50*setting.VKTchW+50*setting.VKCurW,320)
|
||||
mDraw(drawableText.VKCurW,640+50*setting.VKCurW,380)
|
||||
end
|
||||
function Pnt.help()
|
||||
setFont(30)
|
||||
gc.setColor(1,1,1)
|
||||
|
||||
257
player.lua
@@ -11,6 +11,7 @@ local scr=scr--screen camera
|
||||
local gameEnv0={
|
||||
das=10,arr=2,
|
||||
sddas=2,sdarr=2,
|
||||
quickR=true,swap=true,
|
||||
ghost=true,center=true,
|
||||
grid=false,swap=true,
|
||||
_20G=false,bone=false,
|
||||
@@ -192,7 +193,7 @@ local TMP1={
|
||||
TMP1[2]=TMP1[1]
|
||||
TMP1[4]=TMP1[3]
|
||||
TMP1[5]=TMP1[3]
|
||||
local fineeseCtrlPar=TMP1
|
||||
local finesseCtrlPar=TMP1
|
||||
TMP1,TMP2,TMP3,TMP4=nil----------release
|
||||
local CCblockID={4,3,5,6,1,2,0}
|
||||
local freshMethod={
|
||||
@@ -286,9 +287,8 @@ local mesDisp={
|
||||
classic=function(P)
|
||||
setFont(80)
|
||||
local r=P.gameEnv.target*.1
|
||||
mStr(r<11 and 19+r or r==11 and"00"or r==12 and"0a"or format("%x",r*10-110),-82,210)
|
||||
setFont(20)
|
||||
mStr("speed level",-82,290)
|
||||
mStr(r<11 and 18 or r<22 and r+8 or r==22 and"00"or r==23 and"0a"or format("%x",r*10-220),-82,210)
|
||||
mDraw(drawableText.speedLV,-82,290)
|
||||
setFont(50)
|
||||
mStr(P.stat.row,-82,320)
|
||||
mStr(P.gameEnv.target,-82,370)
|
||||
@@ -302,24 +302,21 @@ local mesDisp={
|
||||
setFont(50)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
setFont(20)
|
||||
mStr("Attack",-82,363)
|
||||
mStr("Efficiency",-82,475)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
end,
|
||||
tsd=function(P)
|
||||
setFont(35)
|
||||
mStr("TSD",-82,407)
|
||||
setFont(80)
|
||||
mStr(P.modeData.event,-82,330)
|
||||
mDraw(drawableText.tsd,-82,407)
|
||||
end,
|
||||
blind=function(P)
|
||||
setFont(25)
|
||||
mStr("Lines",-82,300)
|
||||
mStr("Techrash",-82,420)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
if curMode.lv==6 then
|
||||
mStr("Point",-82,170)
|
||||
mDraw(drawableText.grade,-82,170)
|
||||
setFont(60)
|
||||
mStr(P.modeData.point*.1,-82,110)
|
||||
mStr(P.modeData.event,-82,110)
|
||||
end
|
||||
setFont(80)
|
||||
mStr(P.stat.row,-82,220)
|
||||
@@ -328,57 +325,51 @@ local mesDisp={
|
||||
dig=function(P)
|
||||
setFont(70)
|
||||
mStr(P.modeData.event,-82,310)
|
||||
setFont(30)
|
||||
mStr("Wave",-82,375)
|
||||
mDraw(drawableText.wave,-82,375)
|
||||
end,
|
||||
survivor=function(P)
|
||||
setFont(70)
|
||||
mStr(P.modeData.event,-82,310)
|
||||
setFont(30)
|
||||
mStr("Wave",-82,375)
|
||||
mDraw(drawableText.wave,-82,375)
|
||||
end,
|
||||
defender=function(P)
|
||||
setFont(60)
|
||||
mStr(P.modeData.point,-82,315)
|
||||
setFont(30)
|
||||
mStr("RPM",-82,375)
|
||||
mDraw(drawableText.rpm,-82,375)
|
||||
end,
|
||||
attacker=function(P)
|
||||
setFont(60)
|
||||
mStr(P.modeData.point,-82,315)
|
||||
setFont(30)
|
||||
mStr("RPM",-82,375)
|
||||
mDraw(drawableText.rpm,-82,375)
|
||||
end,
|
||||
tech=function(P)
|
||||
setFont(50)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
setFont(20)
|
||||
mStr("Attack",-82,363)
|
||||
mStr("Efficiency",-82,475)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
end,
|
||||
c4wtrain=function(P)
|
||||
setFont(50)
|
||||
mStr(max(100-P.stat.row,0),-82,220)
|
||||
mStr(P.combo,-82,310)
|
||||
mStr(P.modeData.point,-82,400)
|
||||
setFont(20)
|
||||
mStr("combo",-82,358)
|
||||
mStr("max combo",-82,450)
|
||||
mDraw(drawableText.combo,-82,358)
|
||||
mDraw(drawableText.mxcmb,-82,450)
|
||||
end,
|
||||
pctrain=function(P)
|
||||
setFont(22)
|
||||
mStr("Perfect Clear",-82,412)
|
||||
setFont(80)
|
||||
mStr(P.stat.pc,-82,330)
|
||||
mDraw(drawableText.pc,-82,412)
|
||||
end,
|
||||
pcchallenge=function(P)
|
||||
setFont(22)
|
||||
mStr("Perfect Clear",-82,432)
|
||||
setFont(80)
|
||||
mStr(P.stat.pc,-82,350)
|
||||
setFont(50)
|
||||
mStr(max(100-P.stat.row,0),-82,250)
|
||||
|
||||
setFont(80)
|
||||
mStr(P.stat.pc,-82,350)
|
||||
mDraw(drawableText.pc,-82,432)
|
||||
|
||||
gc.setColor(.5,.5,.5)
|
||||
if frame>179 then
|
||||
local y=72*(7-(P.stat.piece+(P.hd.id>0 and 2 or 1))%7)-36
|
||||
@@ -389,8 +380,8 @@ local mesDisp={
|
||||
setFont(40)
|
||||
mStr(#players.alive.."/49",-82,175)
|
||||
mStr(P.ko,-70,215)
|
||||
gc.draw(drawableText.ko,-127,225)
|
||||
setFont(25)
|
||||
gc.print("KO",-127,225)
|
||||
gc.setColor(1,.5,0,.6)
|
||||
gc.print(P.badge,-47,227)
|
||||
gc.setColor(1,1,1)
|
||||
@@ -404,8 +395,8 @@ local mesDisp={
|
||||
setFont(40)
|
||||
mStr(#players.alive.."/99",-82,175)
|
||||
mStr(P.ko,-70,215)
|
||||
gc.draw(drawableText.ko,-127,225)
|
||||
setFont(25)
|
||||
gc.print("KO",-127,225)
|
||||
gc.setColor(1,.5,0,.6)
|
||||
gc.print(P.badge,-47,227)
|
||||
gc.setColor(1,1,1)
|
||||
@@ -421,10 +412,9 @@ local mesDisp={
|
||||
end,
|
||||
custom=function(P)
|
||||
if P.gameEnv.puzzle or P.gameEnv.target>1e10 then
|
||||
setFont(25)
|
||||
mStr("Lines",-82,290)
|
||||
setFont(60)
|
||||
mStr(P.stat.row,-82,225)
|
||||
mDraw(drawableText.line,-82,290)
|
||||
else
|
||||
setFont(60)
|
||||
mStr(max(P.gameEnv.target-P.stat.row,0),-82,240)
|
||||
@@ -516,7 +506,7 @@ function newDemoPlayer(id,x,y,size)
|
||||
P.ctrlCount=0
|
||||
|
||||
local bag1={1,2,3,4,5,6,7}
|
||||
for i=1,7 do
|
||||
for _=1,7 do
|
||||
P:newNext(rem(bag1,rnd(#bag1)))
|
||||
end
|
||||
P.freshNext=freshMethod.bag7
|
||||
@@ -554,7 +544,7 @@ function newDemoPlayer(id,x,y,size)
|
||||
P.keyPressing={}for i=1,12 do P.keyPressing[i]=false end
|
||||
P.moving,P.downing=0,0
|
||||
P.waiting,P.falling=-1,-1
|
||||
P.clearing={}
|
||||
P.clearing,P.cleared={},{}
|
||||
P.combo,P.b2b=0,0
|
||||
P.fieldBeneath=0
|
||||
P.shade={}
|
||||
@@ -628,28 +618,28 @@ function newPlayer(id,x,y,size,AIdata)
|
||||
P.freshTime=0
|
||||
P.spinLast,P.lastClear=false,nil
|
||||
P.spinSeq=0--for Ospin,each digit mean a spin
|
||||
P.ctrlCount=0--key press time,for fineese check
|
||||
P.ctrlCount=0--key press time,for finesse check
|
||||
|
||||
P.his={rnd(7),rnd(7),rnd(7),rnd(7)}
|
||||
local s=P.gameEnv.sequence
|
||||
if s=="bag7"or s=="his4"then
|
||||
local bag1={1,2,3,4,5,6,7}
|
||||
for i=1,7 do
|
||||
for _=1,7 do
|
||||
P:newNext(rem(bag1,rnd(#bag1)))
|
||||
end
|
||||
elseif s=="rnd"then
|
||||
for i=1,6 do
|
||||
for _=1,6 do
|
||||
local r=rnd(7)
|
||||
P:newNext(r)
|
||||
end
|
||||
elseif s=="drought1"then
|
||||
local bag1={1,2,3,4,5,6}
|
||||
for i=1,6 do
|
||||
for _=1,6 do
|
||||
P:newNext(rem(bag1,rnd(#bag1)))
|
||||
end
|
||||
elseif s=="drought2"then
|
||||
local bag1={1,2,3,4,6,6}
|
||||
for i=1,6 do
|
||||
for _=1,6 do
|
||||
P:newNext(rem(bag1,rnd(#bag1)))
|
||||
end
|
||||
end
|
||||
@@ -703,7 +693,7 @@ function newPlayer(id,x,y,size,AIdata)
|
||||
P.keyPressing={}for i=1,12 do P.keyPressing[i]=false end
|
||||
P.moving,P.downing=0,0
|
||||
P.waiting,P.falling=-1,-1
|
||||
P.clearing={}
|
||||
P.clearing,P.cleared={},{}
|
||||
P.combo,P.b2b=0,0
|
||||
P.fieldBeneath=0
|
||||
|
||||
@@ -804,9 +794,7 @@ function player.update(P,dt)
|
||||
else
|
||||
local L=#P.clearing
|
||||
if P.human and P.gameEnv.fall>0 and #P.field+L>P.clearing[L]then SFX("fall")end
|
||||
for i=1,L do
|
||||
P.clearing[i]=nil
|
||||
end
|
||||
P.clearing,P.cleared={},{}
|
||||
end
|
||||
end
|
||||
if not P.control then goto stop end
|
||||
@@ -865,9 +853,7 @@ function player.update(P,dt)
|
||||
else
|
||||
local L=#P.clearing
|
||||
if P.human and P.gameEnv.fall>0 and #P.field+L>P.clearing[L]then SFX("fall")end
|
||||
for i=1,L do
|
||||
P.clearing[i]=nil
|
||||
end
|
||||
P.clearing,P.cleared={},{}
|
||||
end
|
||||
end::stop::
|
||||
if P.endCounter<40 then
|
||||
@@ -1139,15 +1125,13 @@ function player.draw(P)
|
||||
|
||||
if P.gameEnv.hold then
|
||||
mDraw(drawableText.hold,-82,-10)
|
||||
if P.holded then gc.setColor(.6,.6,.6)end
|
||||
for i=1,#P.hd.bk do
|
||||
local B=P.hd.bk
|
||||
for j=1,#B[1]do
|
||||
if B[i][j]then
|
||||
drawPixel(i+17.5-#B*.5,j-2.7-#B[1]*.5,P.hd.color)
|
||||
end
|
||||
if P.holded then gc.setColor(.6,.5,.5)end
|
||||
local B=P.hd.bk
|
||||
for i=1,#B do for j=1,#B[1]do
|
||||
if B[i][j]then
|
||||
drawPixel(i+17.5-#B*.5,j-2.7-#B[1]*.5,P.hd.color)
|
||||
end
|
||||
end
|
||||
end end
|
||||
end--Hold
|
||||
gc.setColor(1,1,1)
|
||||
mDraw(drawableText.next,381,-10)
|
||||
@@ -1264,7 +1248,20 @@ function player.demoDraw(P)
|
||||
end
|
||||
end end--Block
|
||||
end
|
||||
::E::
|
||||
gc.setColor(1,1,1,.3)
|
||||
local N=miniBlock[P.hd.id]
|
||||
if N then
|
||||
gc.draw(N,15,30,nil,16,nil,0,N:getHeight()*.5)
|
||||
end
|
||||
local N=1
|
||||
::L::
|
||||
if N<=P.gameEnv.next and P.next[N]then
|
||||
local p=miniBlock[P.next[N].id]
|
||||
gc.draw(p,285,40*N-10,nil,16,nil,p:getWidth(),p:getHeight()*.5)
|
||||
N=N+1
|
||||
goto L
|
||||
end
|
||||
--Next
|
||||
gc.setColor(1,1,1)
|
||||
gc.draw(PTC.dust[P.id])
|
||||
gc.translate(-P.fieldOffX,-P.fieldOffY)
|
||||
@@ -1372,13 +1369,14 @@ local function checkrow(P,start,height)--(cy,r)
|
||||
for i=1,height do
|
||||
if ckfull(P,h)then
|
||||
ins(P.clearing,h)
|
||||
ins(P.cleared,h+c)
|
||||
removeRow(P.field,h)
|
||||
removeRow(P.visTime,h)
|
||||
c=c+1
|
||||
if not P.small then
|
||||
local S=PTC.dust[P.id]
|
||||
for k=1,120 do
|
||||
S:setPosition(rnd(300),600-30*h+rnd(30))
|
||||
for _=1,100 do
|
||||
S:setPosition(rnd(300),630-30*(h+c)+rnd(30))
|
||||
S:emit(2)
|
||||
end
|
||||
end
|
||||
@@ -1399,15 +1397,22 @@ local function solid(P,x,y)
|
||||
if y>#P.field then return false end
|
||||
return P.field[y][x]>0
|
||||
end
|
||||
local function getBlockDirection(P)
|
||||
return(P.curX+P.sc[2]-6.5)*.15
|
||||
end
|
||||
|
||||
function player:fineError(rate)
|
||||
self.stat.extraPiece=self.stat.extraPiece+1
|
||||
self.stat.extraRate=self.stat.extraRate+rate
|
||||
if self.gameEnv.fineKill then
|
||||
SFX("error_long")
|
||||
if self.human then
|
||||
if self.gameEnv.fineKill then
|
||||
SFX("error_long")
|
||||
Event.lose(self)
|
||||
elseif setting.fine then
|
||||
SFX("error")
|
||||
end
|
||||
elseif self.gameEnv.fineKill then
|
||||
Event.lose(self)
|
||||
else
|
||||
SFX("error")
|
||||
end
|
||||
end
|
||||
function player:garbageSend(R,send,time,...)
|
||||
@@ -1482,9 +1487,9 @@ function player:freshTarget()
|
||||
self:changeAtk(randomTarget(self))
|
||||
end
|
||||
elseif self.atkMode==2 then
|
||||
self:changeAtk(P~=mostBadge and mostBadge or secBadge or randomTarget(self))
|
||||
self:changeAtk(self~=mostBadge and mostBadge or secBadge or randomTarget(self))
|
||||
elseif self.atkMode==3 then
|
||||
self:changeAtk(P~=mostDangerous and mostDangerous or secDangerous or randomTarget(self))
|
||||
self:changeAtk(self~=mostDangerous and mostDangerous or secDangerous or randomTarget(self))
|
||||
elseif self.atkMode==4 then
|
||||
for i=1,#self.atker do
|
||||
if not self.atker[i].alive then
|
||||
@@ -1682,7 +1687,7 @@ function player:spin(d,ifpre)
|
||||
self.spinLast=2
|
||||
self.stat.rotate=self.stat.rotate+1
|
||||
self:freshgho()
|
||||
SFX("rotatekick")
|
||||
SFX("rotatekick",nil,getBlockDirection(self))
|
||||
return
|
||||
end
|
||||
else
|
||||
@@ -1690,7 +1695,7 @@ function player:spin(d,ifpre)
|
||||
end
|
||||
end
|
||||
if self.human then
|
||||
SFX(ifpre and"prerotate"or"rotate")
|
||||
SFX(ifpre and"prerotate"or"rotate",nil,getBlockDirection(self))
|
||||
end
|
||||
return
|
||||
end
|
||||
@@ -1721,14 +1726,13 @@ function player:spin(d,ifpre)
|
||||
if not ifpre then self:freshgho()end
|
||||
if self.gameEnv.easyFresh or y0>self.curY then self:freshLockDelay()end
|
||||
if self.human then
|
||||
SFX(ifpre and"prerotate"or ifoverlap(self,self.cur.bk,self.curX,self.curY+1)and ifoverlap(self,self.cur.bk,self.curX-1,self.curY)and ifoverlap(self,self.cur.bk,self.curX+1,self.curY)and"rotatekick"or"rotate")
|
||||
SFX(ifpre and"prerotate"or ifoverlap(self,self.cur.bk,self.curX,self.curY+1)and ifoverlap(self,self.cur.bk,self.curX-1,self.curY)and ifoverlap(self,self.cur.bk,self.curX+1,self.curY)and"rotatekick"or"rotate",nil,getBlockDirection(self))
|
||||
end
|
||||
self.ctrlCount=self.ctrlCount+(d==2 and 2 or 1)
|
||||
self.stat.rotate=self.stat.rotate+1
|
||||
end
|
||||
function player:hold(ifpre)
|
||||
if not self.holded and self.waiting==-1 and self.gameEnv.hold then
|
||||
--Fineese check
|
||||
--Finesse check
|
||||
local H,B=self.hd,self.cur
|
||||
if H and H.id==B.id and H.name==B.name then
|
||||
self:fineError(1.5)
|
||||
@@ -1780,7 +1784,7 @@ function player:resetblock()
|
||||
if self.AI_mode=="CC"then BOT.addNext(self.AI_bot,CCblockID[self.next[self.AIdata.next].id])end
|
||||
self.sc,self.dir=scs[self.cur.id][0],0--spin center/direction
|
||||
self.r,self.c=#self.cur.bk,#self.cur.bk[1]--row/column
|
||||
self.curX,self.curY=blockPos[self.cur.id],21+ceil(self.fieldBeneath/30)-self.r+min(int(#self.field*.2),2)
|
||||
self.curX,self.curY=blockPos[self.cur.id],21+ceil(self.fieldBeneath/30)+min(int(#self.field*.15)-self.r,0)--初始高度:7格+1,14格+2(非I)
|
||||
self.dropDelay,self.lockDelay,self.freshTime=self.gameEnv.drop,self.gameEnv.lock,0
|
||||
|
||||
if self.keyPressing[8]then self:hold(true)end
|
||||
@@ -1795,7 +1799,7 @@ function player:resetblock()
|
||||
self:freshgho()
|
||||
if self.keyPressing[6]then self.act.hardDrop(self)self.keyPressing[6]=false end
|
||||
end
|
||||
function player:drop()--(Place piece)
|
||||
function player:drop()--Place piece
|
||||
self.dropTime[11]=ins(self.dropTime,1,frame)--update speed dial
|
||||
self.waiting=self.gameEnv.wait
|
||||
local dospin=0
|
||||
@@ -1840,8 +1844,9 @@ function player:drop()--(Place piece)
|
||||
dospin=false
|
||||
end
|
||||
|
||||
if self.gameEnv.fine then
|
||||
if self.curY>18 then goto 通过测试 end
|
||||
--极简检测
|
||||
if self.curY>18 then goto 通过测试 end--高处易误判
|
||||
do
|
||||
local y0=self.curY
|
||||
local x,c=self.curX,self.c
|
||||
local B=self.cur.bk
|
||||
@@ -1868,14 +1873,16 @@ function player:drop()--(Place piece)
|
||||
dir=dir-2
|
||||
end
|
||||
end--SZI的逆态视为顺态
|
||||
local R,I=self.ctrlCount,fineeseCtrlPar[id][dir][self.curX]--Real key/Ideal key
|
||||
local R,I=self.ctrlCount,finesseCtrlPar[id][dir][self.curX]--Real key/Ideal key
|
||||
local d=R-I
|
||||
if d<=0 then
|
||||
goto 通过测试
|
||||
end
|
||||
if I==0 then I=.67 end
|
||||
self:fineError(R/I)
|
||||
end--极简检测
|
||||
if I==0 then I=1 end
|
||||
local rate=R/I
|
||||
if rate>2.5 then rate=2.5 end
|
||||
self:fineError(rate)
|
||||
end
|
||||
::通过测试::
|
||||
|
||||
if cc>0 then
|
||||
@@ -2068,7 +2075,7 @@ function player:drop()--(Place piece)
|
||||
self:garbageSend(T,send,sendTime,1,self.cur.color,self.lastClear,dospin,mini,self.combo)
|
||||
end
|
||||
self.stat.send=self.stat.send+send
|
||||
if self.human and send>3 then SFX("emit",min(send,8)*.125)end
|
||||
if self.human and send>3 then SFX("emit",min(send,8)*.1)end
|
||||
end
|
||||
end
|
||||
else
|
||||
@@ -2093,7 +2100,7 @@ function player:drop()--(Place piece)
|
||||
self.stat.score=self.stat.score+cscore
|
||||
self.stat.piece,self.stat.row=self.stat.piece+1,self.stat.row+cc
|
||||
Event[self.gameEnv.dropPiece](self)
|
||||
if self.human then SFX("lock")end
|
||||
if self.human then SFX("lock",nil,getBlockDirection(self))end
|
||||
end
|
||||
function player:pressKey(i)
|
||||
self.keyPressing[i]=true
|
||||
@@ -2118,8 +2125,11 @@ end
|
||||
-------------------------<Controls>-------------------------
|
||||
player.act={}
|
||||
function player.act.moveLeft(P,auto)
|
||||
if not auto then
|
||||
P.ctrlCount=P.ctrlCount+1
|
||||
end
|
||||
if P.keyPressing[9]then
|
||||
if setting.swap then
|
||||
if P.gameEnv.swap then
|
||||
P:changeAtkMode(1)
|
||||
end
|
||||
elseif P.control and P.waiting==-1 then
|
||||
@@ -2132,7 +2142,6 @@ function player.act.moveLeft(P,auto)
|
||||
P.spinLast=false
|
||||
if not auto then
|
||||
P.moving=-1
|
||||
P.ctrlCount=P.ctrlCount+1
|
||||
end
|
||||
else
|
||||
P.moving=-P.gameEnv.das-1
|
||||
@@ -2142,8 +2151,11 @@ function player.act.moveLeft(P,auto)
|
||||
end
|
||||
end
|
||||
function player.act.moveRight(P,auto)
|
||||
if not auto then
|
||||
P.ctrlCount=P.ctrlCount+1
|
||||
end
|
||||
if P.keyPressing[9]then
|
||||
if setting.swap then
|
||||
if P.gameEnv.swap then
|
||||
P:changeAtkMode(2)
|
||||
end
|
||||
elseif P.control and P.waiting==-1 then
|
||||
@@ -2156,7 +2168,6 @@ function player.act.moveRight(P,auto)
|
||||
P.spinLast=false
|
||||
if not auto then
|
||||
P.moving=1
|
||||
P.ctrlCount=P.ctrlCount+1
|
||||
end
|
||||
else
|
||||
P.moving=P.gameEnv.das+1
|
||||
@@ -2167,25 +2178,28 @@ function player.act.moveRight(P,auto)
|
||||
end
|
||||
function player.act.rotRight(P)
|
||||
if P.control and P.waiting==-1 then
|
||||
P.ctrlCount=P.ctrlCount+1
|
||||
P:spin(1)
|
||||
P.keyPressing[3]=false
|
||||
end
|
||||
end
|
||||
function player.act.rotLeft(P)
|
||||
if P.control and P.waiting==-1 then
|
||||
P.ctrlCount=P.ctrlCount+1
|
||||
P:spin(3)
|
||||
P.keyPressing[4]=false
|
||||
end
|
||||
end
|
||||
function player.act.rotFlip(P)
|
||||
if P.control and P.waiting==-1 then
|
||||
P.ctrlCount=P.ctrlCount+2
|
||||
P:spin(2)
|
||||
P.keyPressing[5]=false
|
||||
end
|
||||
end
|
||||
function player.act.hardDrop(P)
|
||||
if P.keyPressing[9]then
|
||||
if setting.swap then
|
||||
if P.gameEnv.swap then
|
||||
P:changeAtkMode(3)
|
||||
end
|
||||
P.keyPressing[6]=false
|
||||
@@ -2202,7 +2216,7 @@ function player.act.hardDrop(P)
|
||||
P.curY=P.y_img
|
||||
P.spinLast=false
|
||||
if P.human then
|
||||
SFX("drop")
|
||||
SFX("drop",nil,getBlockDirection(P))
|
||||
VIB(1)
|
||||
end
|
||||
end
|
||||
@@ -2213,7 +2227,7 @@ function player.act.hardDrop(P)
|
||||
end
|
||||
function player.act.softDrop(P)
|
||||
if P.keyPressing[9]then
|
||||
if setting.swap then
|
||||
if P.gameEnv.swap then
|
||||
P:changeAtkMode(4)
|
||||
end
|
||||
else
|
||||
@@ -2235,24 +2249,11 @@ function player.act.func(P)
|
||||
P.gameEnv.Fkey(P)
|
||||
end
|
||||
function player.act.restart(P)
|
||||
if setting.quickR or frame<180 then
|
||||
if P.gameEnv.quickR or frame<180 then
|
||||
clearTask("play")
|
||||
resetPartGameData()
|
||||
end
|
||||
end
|
||||
function player.act.insDown(P)
|
||||
if P.curY~=P.y_img then
|
||||
if not P.small then
|
||||
if setting.dropFX>0 then
|
||||
P:createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
|
||||
end
|
||||
if setting.shakeFX>0 then
|
||||
P.fieldOffY=2*setting.shakeFX
|
||||
end
|
||||
end
|
||||
P.curY,P.lockDelay,P.spinLast=P.y_img,P.gameEnv.lock,false
|
||||
end
|
||||
end
|
||||
function player.act.insLeft(P,auto)
|
||||
local x0,y0=P.curX,P.curY
|
||||
while not ifoverlap(P,P.cur.bk,P.curX-1,P.curY)do
|
||||
@@ -2295,6 +2296,19 @@ function player.act.insRight(P,auto)
|
||||
P.ctrlCount=P.ctrlCount+1
|
||||
end
|
||||
end
|
||||
function player.act.insDown(P)
|
||||
if P.curY~=P.y_img then
|
||||
if not P.small then
|
||||
if setting.dropFX>0 then
|
||||
P:createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
|
||||
end
|
||||
if setting.shakeFX>0 then
|
||||
P.fieldOffY=2*setting.shakeFX
|
||||
end
|
||||
end
|
||||
P.curY,P.lockDelay,P.spinLast=P.y_img,P.gameEnv.lock,false
|
||||
end
|
||||
end
|
||||
function player.act.down1(P)
|
||||
if P.curY~=P.y_img then
|
||||
P.curY=P.curY-1
|
||||
@@ -2302,7 +2316,7 @@ function player.act.down1(P)
|
||||
end
|
||||
end
|
||||
function player.act.down4(P)
|
||||
for i=1,4 do
|
||||
for _=1,4 do
|
||||
if P.curY~=P.y_img then
|
||||
P.curY=P.curY-1
|
||||
P.spinLast=false
|
||||
@@ -2311,5 +2325,34 @@ function player.act.down4(P)
|
||||
end
|
||||
end
|
||||
end
|
||||
function player.act.quit(P)P:lose()end
|
||||
function player.act.down10(P)
|
||||
for _=1,10 do
|
||||
if P.curY~=P.y_img then
|
||||
P.curY=P.curY-1
|
||||
P.spinLast=false
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
function player.act.dropLeft(P)
|
||||
P.act.insLeft(P)
|
||||
P.act.hardDrop(P)
|
||||
end
|
||||
function player.act.dropRight(P)
|
||||
P.act.insRight(P)
|
||||
P.act.hardDrop(P)
|
||||
end
|
||||
function player.act.addLeft(P)
|
||||
P.act.insLeft(P)
|
||||
P.act.insDown(P)
|
||||
P.act.insRight(P)
|
||||
P.act.hardDrop(P)
|
||||
end
|
||||
function player.act.addRight(P)
|
||||
P.act.insRight(P)
|
||||
P.act.insDown(P)
|
||||
P.act.insLeft(P)
|
||||
P.act.hardDrop(P)
|
||||
end
|
||||
-------------------------</Controls>-------------------------
|
||||
212
scene.lua
Normal file
@@ -0,0 +1,212 @@
|
||||
local scene={
|
||||
cur="load",--Current scene
|
||||
swapping=false,--ifSwapping
|
||||
swap={
|
||||
tar=nil, --Swapping target
|
||||
style=nil, --Swapping target
|
||||
mid=nil, --Loading point
|
||||
time=nil, --Full swap time
|
||||
draw=nil, --Swap draw
|
||||
},
|
||||
seq={"quit","slowFade"},--Back sequence
|
||||
}
|
||||
local sceneInit={
|
||||
quit=love.event.quit,
|
||||
load=function()
|
||||
loading=1--Loading mode
|
||||
loadnum=1--Loading counter
|
||||
loadprogress=0--Loading bar(0~1)
|
||||
loadTip=text.tips[math.random(#text.tips)]
|
||||
end,
|
||||
intro=function()
|
||||
count=0
|
||||
BGM("blank")
|
||||
end,
|
||||
main=function()
|
||||
curBG="none"
|
||||
BGM("blank")
|
||||
destroyPlayers()
|
||||
modeEnv={}
|
||||
if not players[1]then
|
||||
newDemoPlayer(1,900,35,1.1)
|
||||
end--create demo player
|
||||
collectgarbage()
|
||||
end,
|
||||
music=function()
|
||||
if bgmPlaying then
|
||||
for i=1,#musicID do
|
||||
if musicID[i]==bgmPlaying then
|
||||
sel=i
|
||||
return
|
||||
end
|
||||
end
|
||||
else
|
||||
sel=1
|
||||
end
|
||||
end,
|
||||
mode=function()
|
||||
curBG="none"
|
||||
BGM("blank")
|
||||
destroyPlayers()
|
||||
end,
|
||||
custom=function()
|
||||
sel=sel or 1
|
||||
destroyPlayers()
|
||||
curBG=customRange.bg[customSel[12]]
|
||||
BGM(customRange.bgm[customSel[13]])
|
||||
end,
|
||||
draw=function()
|
||||
curBG="none"
|
||||
clearSureTime=0
|
||||
pen,sx,sy=1,1,1
|
||||
end,
|
||||
play=function()
|
||||
love.keyboard.setKeyRepeat(false)
|
||||
restartCount=0
|
||||
if needResetGameData then
|
||||
resetGameData()
|
||||
needResetGameData=nil
|
||||
else
|
||||
BGM(modeEnv.bgm)
|
||||
end
|
||||
curBG=modeEnv.bg
|
||||
end,
|
||||
pause=function()
|
||||
curBG=modeEnv.bg
|
||||
end,
|
||||
setting_game=function()
|
||||
curBG="none"
|
||||
end,
|
||||
setting_graphic=function()
|
||||
curBG="none"
|
||||
end,
|
||||
setting_sound=function()
|
||||
curBG="none"
|
||||
end,
|
||||
setting_key=function()
|
||||
curBoard=1
|
||||
keyboardSet=1
|
||||
joystickSet=1
|
||||
keyboardSetting=false
|
||||
joystickSetting=false
|
||||
end,
|
||||
setting_touch=function()
|
||||
curBG="game2"
|
||||
defaultSel=1
|
||||
sel=nil
|
||||
snapLevel=1
|
||||
end,
|
||||
setting_touchSwitch=function()
|
||||
curBG="matrix"
|
||||
end,
|
||||
help=function()
|
||||
curBG="none"
|
||||
end,
|
||||
history=function()
|
||||
updateLog=require"updateLog"
|
||||
curBG="lightGrey"
|
||||
sel=1
|
||||
end,
|
||||
quit=function()
|
||||
love.timer.sleep(.3)
|
||||
love.event.quit()
|
||||
end,
|
||||
}
|
||||
local swapDeck_data={
|
||||
{4,0,1,1},{6,0,15,1},{5,0,9,1},{6,0,6,1},
|
||||
{1,0,3,1},{3,0,12,1},{1,1,8,1},{2,1,4,2},
|
||||
{3,2,13,2},{4,1,12,2},{5,2,1,2},{7,1,11,2},
|
||||
{2,1,9,3},{3,0,6,3},{4,2,14,3},{1,0,4,4},
|
||||
{7,1,1,4},{6,0,2,4},{5,2,6,4},{6,0,14,5},
|
||||
{3,3,15,5},{4,0,7,6},{7,1,10,5},{5,0,2,6},
|
||||
{2,1,1,7},{1,0,4,6},{4,1,13,5},{1,1,6,7},
|
||||
{5,3,11,5},{3,2,11,7},{6,0,8,7},{4,2,12,8},
|
||||
{7,0,8,9},{1,0,2,8},{5,2,4,8},{6,0,15,8},
|
||||
}--Block id [ZSLJTOI] ,dir,x,y
|
||||
local gc=love.graphics
|
||||
local swap={
|
||||
none={1,0,NULL},
|
||||
flash={8,1,function()gc.clear(1,1,1)end},
|
||||
fade={30,15,function(t)
|
||||
local t=t>15 and 2-t/15 or t/15
|
||||
gc.setColor(0,0,0,t)
|
||||
gc.rectangle("fill",0,0,1280,720)
|
||||
end},
|
||||
slowFade={120,40,function(t)
|
||||
local t=t>40 and 1.5-t/80 or t/40
|
||||
gc.setColor(0,0,0,t)
|
||||
gc.rectangle("fill",0,0,1280,720)
|
||||
end},
|
||||
deck={50,8,function(t)
|
||||
gc.setColor(1,1,1)
|
||||
if t>8 then
|
||||
local t=t<15 and 15 or t
|
||||
for i=1,51-t do
|
||||
local bn=swapDeck_data[i][1]
|
||||
local b=blocks[bn][swapDeck_data[i][2]]
|
||||
local cx,cy=swapDeck_data[i][3],swapDeck_data[i][4]
|
||||
for y=1,#b do for x=1,#b[1]do
|
||||
if b[y][x]then
|
||||
gc.draw(blockSkin[bn],80*(cx+x-2),80*(10-cy-y),nil,8/3)
|
||||
end
|
||||
end end
|
||||
end
|
||||
end
|
||||
if t<17 then
|
||||
gc.setColor(1,1,1,1-(t>8 and t-8 or 8-t)*.125)
|
||||
gc.rectangle("fill",0,0,1280,720)
|
||||
end
|
||||
end},
|
||||
}--Scene swapping animations
|
||||
local backFunc={
|
||||
load=love.event.quit,
|
||||
pause=function()
|
||||
love.keyboard.setKeyRepeat(true)
|
||||
updateStat()
|
||||
saveData()
|
||||
clearTask("play")
|
||||
end,
|
||||
setting_game=function()
|
||||
saveSetting()
|
||||
end,
|
||||
}
|
||||
function scene.init(s)
|
||||
if sceneInit[s]then sceneInit[s]()end
|
||||
end
|
||||
function scene.push(tar,style)
|
||||
if not scene.swapping then
|
||||
local m=#scene.seq
|
||||
scene.seq[m+1]=tar or scene.cur
|
||||
scene.seq[m+2]=style or"fade"
|
||||
end
|
||||
end
|
||||
function scene.pop()
|
||||
scene.seq={}
|
||||
end
|
||||
function scene.swapTo(tar,style)
|
||||
local S=scene.swap
|
||||
if not scene.swapping and tar~=scene.cur then
|
||||
scene.swapping=true
|
||||
if not style then style="fade"end
|
||||
S.tar=tar
|
||||
S.style=style
|
||||
S.time=swap[style][1]
|
||||
S.mid=swap[style][2]
|
||||
S.draw=swap[style][3]
|
||||
widget_sel=nil
|
||||
if style~="none"then SFX("swipe")end
|
||||
end
|
||||
end
|
||||
function scene.back()
|
||||
if not scene.swapping then
|
||||
if backFunc[scene.cur] then backFunc[scene.cur]()end
|
||||
--func when scene end
|
||||
local m=#scene.seq
|
||||
if m>0 then
|
||||
scene.swapTo(scene.seq[m-1],scene.seq[m])
|
||||
scene.seq[m],scene.seq[m-1]=nil
|
||||
--Poll&Back to preScene
|
||||
end
|
||||
end
|
||||
end
|
||||
return scene
|
||||
33
texture.lua
@@ -1,5 +1,6 @@
|
||||
local gc=love.graphics
|
||||
local N,c=gc.newImage
|
||||
local int=math.floor
|
||||
local function T(s,t)return gc.newText(setFont(s),t)end
|
||||
local function C(x,y)
|
||||
c=gc.newCanvas(x,y)
|
||||
@@ -15,16 +16,18 @@ for i=1,13 do
|
||||
blockSkinmini[i]=C(6,6)
|
||||
end
|
||||
|
||||
virtualkeyIcon={}
|
||||
for i=1,10 do
|
||||
virtualkeyIcon[i]=N("/image/virtualkey/"..actName[i]..".png")
|
||||
local VKI=N("/image/virtualkey.png")
|
||||
VKIcon={}
|
||||
for i=1,#actName do
|
||||
VKIcon[i]=C(36,36)
|
||||
gc.draw(VKI,(i-1)%5*-36,int((i-1)*.2)*-36)
|
||||
end
|
||||
|
||||
gc.setColor(1,1,1)
|
||||
mouseBlock={}
|
||||
miniBlock={}
|
||||
for i=1,7 do
|
||||
local b=blocks[i][0]
|
||||
mouseBlock[i]=C(#b[1],#b)
|
||||
miniBlock[i]=C(#b[1],#b)
|
||||
gc.setColor(blockColor[i])
|
||||
for y=1,#b do for x=1,#b[1]do
|
||||
if b[y][x]then
|
||||
@@ -61,6 +64,19 @@ payCode=N("/image/mess/paycode.png")
|
||||
drawableText={
|
||||
question=T(100,"?"),
|
||||
bpm=T(15,"BPM"),kpm=T(15,"KPM"),
|
||||
speedLV=T(20,"speed level"),
|
||||
atk=T(20,"Attack"),
|
||||
eff=T(20,"Efficiency"),
|
||||
tsd=T(35,"TSD"),
|
||||
line=T(25,"Lines"),
|
||||
techrash=T(25,"Techrash"),
|
||||
grade=T(25,"Grade"),
|
||||
wave=T(30,"Wave"),
|
||||
rpm=T(35,"RPM"),
|
||||
combo=T(20,"Combo"),
|
||||
mxcmb=T(20,"Max Combo"),
|
||||
pc=T(22,"Perfect Clear"),
|
||||
ko=T(25,"KO"),
|
||||
|
||||
modeName=T(30),levelName=T(30),
|
||||
next=T(40),hold=T(40),
|
||||
@@ -68,9 +84,12 @@ drawableText={
|
||||
custom=T(80),
|
||||
setting_game=T(80),setting_graphic=T(80),setting_sound=T(80),
|
||||
keyboard=T(25),joystick=T(25),
|
||||
ctrlSetHelp=T(25),
|
||||
ctrlSetHelp=T(30),
|
||||
musicRoom=T(80),
|
||||
nowPlaying=T(50),
|
||||
warning=T(30),
|
||||
VKTchW=T(30),
|
||||
VKOrgW=T(30),
|
||||
VKCurW=T(30),
|
||||
}
|
||||
c=gc.setCanvas()
|
||||
gc.setCanvas()
|
||||
@@ -47,7 +47,7 @@ function Tmr.load()
|
||||
loadnum=loadnum+1
|
||||
if loadnum==48 then
|
||||
stat.run=stat.run+1
|
||||
gotoScene("intro","none")
|
||||
scene.swapTo("intro","none")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
211
toolfunc.lua
@@ -73,12 +73,15 @@ local drawableTextLoad={
|
||||
"next","hold",
|
||||
"pause","finish",
|
||||
"custom",
|
||||
"setting_game","setting_graphic","setting_sound",
|
||||
"setting_game",
|
||||
"setting_graphic",
|
||||
"setting_sound",
|
||||
"keyboard","joystick",
|
||||
"ctrlSetHelp",
|
||||
"musicRoom",
|
||||
"nowPlaying",
|
||||
"warning",
|
||||
"VKTchW","VKOrgW","VKCurW",
|
||||
}
|
||||
function swapLanguage(l)
|
||||
text=require("language/"..langID[l])
|
||||
@@ -126,19 +129,29 @@ function VIB(t)
|
||||
love.system.vibrate(vibrateLevel[setting.vib+t])
|
||||
end
|
||||
end
|
||||
function SFX(s,v)
|
||||
function SFX(s,v,pos)
|
||||
if setting.sfx>0 then
|
||||
local S=sfx[s]--AU_Queue
|
||||
local n=1
|
||||
while sfx[s][n]:isPlaying()do
|
||||
while S[n]:isPlaying()do
|
||||
n=n+1
|
||||
if not sfx[s][n]then
|
||||
sfx[s][n]=sfx[s][n-1]:clone()
|
||||
sfx[s][n]:seek(0)
|
||||
if not S[n]then
|
||||
S[n]=S[n-1]:clone()
|
||||
S[n]:seek(0)
|
||||
break
|
||||
end
|
||||
end
|
||||
sfx[s][n]:setVolume((v or 1)*setting.sfx*.125)
|
||||
sfx[s][n]:play()
|
||||
S=S[n]--AU_SRC
|
||||
if S:getChannelCount()==1 then
|
||||
if pos then
|
||||
pos=pos*setting.stereo*.1
|
||||
S:setPosition(pos,1-pos^2,0)
|
||||
else
|
||||
S:setPosition(0,0,0)
|
||||
end
|
||||
end
|
||||
S:setVolume((v or 1)*setting.sfx*.1)
|
||||
S:play()
|
||||
end
|
||||
end
|
||||
function getFreeVoiceChannel()
|
||||
@@ -179,7 +192,7 @@ function BGM(s)
|
||||
bgmPlaying=s
|
||||
else
|
||||
if bgmPlaying then
|
||||
local v=setting.bgm*.125
|
||||
local v=setting.bgm*.1
|
||||
bgm[bgmPlaying]:setVolume(v)
|
||||
if v>0 then
|
||||
bgm[bgmPlaying]:play()
|
||||
@@ -194,103 +207,12 @@ function BGM(s)
|
||||
end
|
||||
end
|
||||
|
||||
local swapDeck_data={
|
||||
{4,0,1,1},{6,0,15,1},{5,0,9,1},{6,0,6,1},
|
||||
{1,0,3,1},{3,0,12,1},{1,1,8,1},{2,1,4,2},
|
||||
{3,2,13,2},{4,1,12,2},{5,2,1,2},{7,1,11,2},
|
||||
{2,1,9,3},{3,0,6,3},{4,2,14,3},{1,0,4,4},
|
||||
{7,1,1,4},{6,0,2,4},{5,2,6,4},{6,0,14,5},
|
||||
{3,3,15,5},{4,0,7,6},{7,1,10,5},{5,0,2,6},
|
||||
{2,1,1,7},{1,0,4,6},{4,1,13,5},{1,1,6,7},
|
||||
{5,3,11,5},{3,2,11,7},{6,0,8,7},{4,2,12,8},
|
||||
{7,0,8,9},{1,0,2,8},{5,2,4,8},{6,0,15,8},
|
||||
}--Block id [ZSLJTOI] ,dir,x,y
|
||||
local swap={
|
||||
none={2,1,d=NULL},
|
||||
flash={8,1,d=function()gc.clear(1,1,1)end},
|
||||
fade={30,15,d=function()
|
||||
local t=1-abs(sceneSwaping.time*.06667-1)
|
||||
gc.setColor(0,0,0,t)
|
||||
gc.rectangle("fill",0,0,1280,720)
|
||||
end},
|
||||
deck={50,8,d=function()
|
||||
local t=sceneSwaping.time
|
||||
gc.setColor(1,1,1)
|
||||
if t>8 then
|
||||
local t=max(t,15)
|
||||
for i=1,51-t do
|
||||
local bn=swapDeck_data[i][1]
|
||||
local b=blocks[bn][swapDeck_data[i][2]]
|
||||
local cx,cy=swapDeck_data[i][3],swapDeck_data[i][4]
|
||||
for y=1,#b do for x=1,#b[1]do
|
||||
if b[y][x]then
|
||||
gc.draw(blockSkin[bn],80*(cx+x-2),80*(10-cy-y),nil,8/3)
|
||||
end
|
||||
end end
|
||||
end
|
||||
end
|
||||
if t<17 then
|
||||
gc.setColor(1,1,1,(8-abs(t-8))*.125)
|
||||
gc.rectangle("fill",0,0,1280,720)
|
||||
end
|
||||
end},
|
||||
}--Scene swapping animations
|
||||
function gotoScene(s,style)
|
||||
if not sceneSwaping and s~=scene then
|
||||
style=style or"fade"
|
||||
sceneSwaping={
|
||||
tar=s,style=style,
|
||||
time=swap[style][1],mid=swap[style][2],
|
||||
draw=swap[style].d
|
||||
}
|
||||
widget_sel=nil
|
||||
if style~="none"then
|
||||
SFX("swipe")
|
||||
end
|
||||
end
|
||||
end
|
||||
function updateStat()
|
||||
local S=players[1].stat
|
||||
for k,v in next,S do
|
||||
stat[k]=stat[k]+S[k]
|
||||
end
|
||||
end
|
||||
local prevMenu={
|
||||
load=love.event.quit,
|
||||
intro="quit",
|
||||
main="intro",
|
||||
music="main",
|
||||
mode="main",
|
||||
custom="mode",
|
||||
draw="custom",
|
||||
play=function()
|
||||
kb.setKeyRepeat(true)
|
||||
updateStat()
|
||||
saveData()
|
||||
clearTask("play")
|
||||
gotoScene(curMode.id~="custom"and"mode"or"custom","deck")
|
||||
end,
|
||||
setting_game=function()
|
||||
saveSetting()
|
||||
gotoScene("main")
|
||||
end,
|
||||
setting_control="setting_game",
|
||||
setting_touch= "setting_game",
|
||||
help="main",
|
||||
history="help",
|
||||
stat="main",
|
||||
}
|
||||
prevMenu.pause=prevMenu.play
|
||||
prevMenu.setting_graphic=prevMenu.setting_game
|
||||
prevMenu.setting_sound=prevMenu.setting_game
|
||||
function back()
|
||||
local t=prevMenu[scene]
|
||||
if type(t)=="string"then
|
||||
gotoScene(t)
|
||||
else
|
||||
t()
|
||||
end
|
||||
end
|
||||
|
||||
function randomTarget(P)
|
||||
if #players.alive>1 then
|
||||
@@ -380,10 +302,10 @@ function pauseGame()
|
||||
end
|
||||
end
|
||||
end
|
||||
gotoScene("pause","none")
|
||||
scene.swapTo("pause","none")
|
||||
end
|
||||
function resumeGame()
|
||||
gotoScene("play","fade")
|
||||
scene.swapTo("play","fade")
|
||||
end
|
||||
function loadGame(mode,level)
|
||||
--rec={}
|
||||
@@ -391,7 +313,7 @@ function loadGame(mode,level)
|
||||
drawableText.modeName:set(text.modeName[mode])
|
||||
drawableText.levelName:set(modeLevel[modeID[mode]][level])
|
||||
needResetGameData=true
|
||||
gotoScene("play","deck")
|
||||
scene.swapTo("play","deck")
|
||||
end
|
||||
function resetPartGameData()
|
||||
frame=30
|
||||
@@ -407,9 +329,7 @@ function resetPartGameData()
|
||||
players[i]:changeAtk(randomTarget(players[i]))
|
||||
end
|
||||
end
|
||||
for i=1,#virtualkey do
|
||||
virtualkey[i].press=false
|
||||
end
|
||||
restoreVirtualKey()
|
||||
collectgarbage()
|
||||
end
|
||||
function resetGameData()
|
||||
@@ -420,7 +340,7 @@ function resetGameData()
|
||||
pauseTime=0--Time paused
|
||||
pauseCount=0--Times paused
|
||||
destroyPlayers()
|
||||
local E=defaultModeEnv[curMode.id]
|
||||
local E=defModeEnv[curMode.id]
|
||||
modeEnv=E[curMode.lv]or E[1]
|
||||
loadmode[curMode.id]()--bg/bgm need redefine in custom,so up here
|
||||
if modeEnv.task then
|
||||
@@ -451,14 +371,16 @@ function resetGameData()
|
||||
garbageSpeed=.3
|
||||
pushSpeed=2
|
||||
end
|
||||
for i=1,#virtualkey do
|
||||
virtualkey[i].press=false
|
||||
end
|
||||
restoreVirtualKey()
|
||||
stat.game=stat.game+1
|
||||
local m,p=#freeRow,40*#players+1
|
||||
while freeRow[p]do
|
||||
m,freeRow[m]=m-1
|
||||
end
|
||||
for i=1,20 do
|
||||
virtualkeyDown[i]=X
|
||||
virtualkeyPressTime[i]=0
|
||||
end
|
||||
freeRow.L=#freeRow
|
||||
SFX("ready")
|
||||
collectgarbage()
|
||||
@@ -473,6 +395,8 @@ function gameStart()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
local dataOpt={
|
||||
"run","game","time",
|
||||
"extraPiece","extraRate",
|
||||
@@ -485,9 +409,6 @@ local dataOpt={
|
||||
function loadData()
|
||||
userData:open("r")
|
||||
local t=userData:read()
|
||||
if not find(t,"spin")then
|
||||
t=love.data.decompress("string","zlib",t)
|
||||
end
|
||||
t=splitS(t,"\r\n")
|
||||
userData:close()
|
||||
for i=1,#t do
|
||||
@@ -515,31 +436,37 @@ function saveData()
|
||||
userData:write(t)
|
||||
userData:close()
|
||||
end
|
||||
|
||||
function loadSetting()
|
||||
userSetting:open("r")
|
||||
local t=userSetting:read()
|
||||
if not find(t,"virtual")then
|
||||
t=love.data.decompress("string","zlib",t)
|
||||
end
|
||||
t=splitS(t,"\r\n")
|
||||
userSetting:close()
|
||||
for i=1,#t do
|
||||
local p=find(t[i],"=")
|
||||
if p then
|
||||
local t,v=sub(t[i],1,p-1),sub(t[i],p+1)
|
||||
if t=="sfx"or t=="bgm"or t=="voc"then
|
||||
setting[t]=toN(v:match("[012345678]"))or setting[t]
|
||||
if
|
||||
--声音
|
||||
t=="sfx"or t=="bgm"or t=="voc"or t=="stereo"or
|
||||
--三个触摸设置项
|
||||
t=="VKTchW"or t=="VKCurW"or t=="VKAlpha"
|
||||
then
|
||||
v=toN(v)
|
||||
if v==int(v)and v>=0 and v<=10 then
|
||||
setting[t]=v
|
||||
end
|
||||
elseif t=="vib"then
|
||||
setting.vib=toN(v:match("[012345]"))or 0
|
||||
elseif t=="fullscreen"then
|
||||
setting.fullscreen=v=="true"
|
||||
love.window.setFullscreen(setting.fullscreen)
|
||||
elseif t=="virtualkeyAlpha"then
|
||||
setting.virtualkeyAlpha=min(int(abs(toN(v))),10)
|
||||
elseif
|
||||
--开关设置们
|
||||
t=="bg"or
|
||||
t=="ghost"or t=="center"or t=="grid"or t=="swap"or
|
||||
t=="quickR"or t=="fine"or t=="bgblock"or t=="smo"or
|
||||
t=="virtualkeyIcon"or t=="virtualkeySwitch"
|
||||
t=="VKSwitch"or t=="VKTrack"or t=="VKDodge"or t=="VKIcon"
|
||||
then
|
||||
setting[t]=v=="true"
|
||||
elseif t=="frameMul"then
|
||||
@@ -561,14 +488,15 @@ function loadSetting()
|
||||
setting.keyMap[i][j]=v1[j]
|
||||
end
|
||||
end
|
||||
elseif t=="virtualkey"then
|
||||
elseif t=="VK"then
|
||||
v=splitS(v,"/")
|
||||
for i=1,10 do
|
||||
local SK
|
||||
for i=1,#v do
|
||||
if v[i]then
|
||||
virtualkey[i]=splitS(v[i],",")
|
||||
for j=1,4 do
|
||||
virtualkey[i][j]=toN(virtualkey[i][j])
|
||||
end
|
||||
SK=splitS(v[i],",")
|
||||
local K=VK_org[i]
|
||||
K.ava=SK[1]=="T"
|
||||
K.x,K.y,K.r=toN(SK[2]),toN(SK[3]),toN(SK[4])
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -597,18 +525,24 @@ local saveOpt={
|
||||
|
||||
"sfx","bgm",
|
||||
"vib","voc",
|
||||
"stereo",
|
||||
|
||||
"virtualkeyAlpha",
|
||||
"virtualkeyIcon",
|
||||
"virtualkeySwitch",
|
||||
"VKSwitch",
|
||||
"VKTrack",
|
||||
"VKDodge",
|
||||
"VKIcon",
|
||||
"VKAlpha",
|
||||
}
|
||||
function saveSetting()
|
||||
local vk={}
|
||||
for i=1,10 do
|
||||
for j=1,4 do
|
||||
virtualkey[i][j]=int(virtualkey[i][j]+.5)
|
||||
end--Saving a integer is better?
|
||||
vk[i]=concat(virtualkey[i],",")
|
||||
local vk={}--virtualkey table
|
||||
for i=1,#VK_org do
|
||||
local V=VK_org[i]
|
||||
vk[i]=concat({
|
||||
V.ava and"T"or"F",
|
||||
int(V.x+.5),
|
||||
int(V.y+.5),
|
||||
V.r,
|
||||
},",")
|
||||
end--pre-pack virtualkey setting
|
||||
local map={}
|
||||
for i=1,16 do
|
||||
@@ -616,11 +550,10 @@ function saveSetting()
|
||||
end
|
||||
local t={
|
||||
"keymap="..toS(concat(map,"/")),
|
||||
"virtualkey="..toS(concat(vk,"/")),
|
||||
"VK="..toS(concat(vk,"/")),
|
||||
}
|
||||
for i=1,#saveOpt do
|
||||
t[i+2]=saveOpt[i].."="..toS(setting[saveOpt[i]])
|
||||
--not always i+2!
|
||||
t[#t+1]=saveOpt[i].."="..toS(setting[saveOpt[i]])
|
||||
end
|
||||
t=concat(t,"\r\n")
|
||||
userSetting:open("w")
|
||||
|
||||
@@ -4,16 +4,15 @@ Patron(rmb10+):
|
||||
[D*a]?
|
||||
Future outlook:
|
||||
Normal Things:
|
||||
powerinfo switch
|
||||
splashing block
|
||||
ajustable next count
|
||||
bag line in all mode
|
||||
force fineese mode
|
||||
highscore of most modes
|
||||
custom block color/direction
|
||||
custom sequence
|
||||
virtual key switch(all keys)
|
||||
custom block sequence
|
||||
combo mode
|
||||
infinite c4w mode
|
||||
any screen size
|
||||
auto GUI in any screen size
|
||||
CC smarter(think of gaebage buffer)
|
||||
fineese/bigbang mode & easier CTWC
|
||||
new AI:task-Z
|
||||
@@ -24,8 +23,28 @@ Future outlook:
|
||||
infinite 1v1
|
||||
square mode
|
||||
more FXs & 3d features & animations
|
||||
0.7.32:
|
||||
Blind-GM now show section directly
|
||||
easier&more standard classic mode
|
||||
can switch Virtualkey's auto dodging
|
||||
in-game setting
|
||||
code optimized
|
||||
bug fixed
|
||||
0.7.31:
|
||||
stereo system
|
||||
fixed a problem in finesse calculating
|
||||
0.7.30:
|
||||
auto-tracking virtual key,adjustable parameters!
|
||||
can switch on/off virtuakeys
|
||||
add 7 more key
|
||||
better finesse rate calculating
|
||||
block generating position on Y-axis changed
|
||||
new icon for android
|
||||
can use preset in custom mode with keyboard
|
||||
adjusted GUI
|
||||
many bug fixed
|
||||
0.7.28:
|
||||
add fineese check
|
||||
add fineese check(almost useful)
|
||||
code optimized
|
||||
0.7.27:
|
||||
super O transform system
|
||||
|
||||