Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e88553bc00 | ||
|
|
4652be7067 | ||
|
|
ed0f8031d0 |
25
ai.lua
25
ai.lua
@@ -80,14 +80,14 @@ end
|
||||
-------------------------------------------------⑨Stack setup
|
||||
local dirCount={1,1,3,3,3,0,1}
|
||||
local spinOffset={
|
||||
{1,0,0},--S
|
||||
{1,0,0},--Z
|
||||
{1,0,0},--L
|
||||
{1,0,0},--J
|
||||
{1,0,0},--T
|
||||
{0,0,0},--O
|
||||
{2,0,1},--I
|
||||
}for i=1,7 do spinOffset[i][0]=0 end
|
||||
{[0]=0,1,0,0},--Z
|
||||
{[0]=0,1,0,0},--L
|
||||
{[0]=0,1,0,0},--J
|
||||
{[0]=0,1,0,0},--T
|
||||
{[0]=0,1,0,0},--S
|
||||
{[0]=0,0,0,0},--O
|
||||
{[0]=0,2,0,1},--I
|
||||
}
|
||||
local FCL={
|
||||
[1]={
|
||||
{{11},{11,2},{1},{},{2},{2,2},{12,1},{12}},
|
||||
@@ -106,10 +106,7 @@ local FCL={
|
||||
{{11},{11,2},{1},{},{2},{12,1},{12},},
|
||||
{{4,11},{11,4},{11,3},{1,4},{4},{3},{2,3},{12,4},{12,3},{3,12},},
|
||||
},
|
||||
}
|
||||
FCL[2]=FCL[1]
|
||||
FCL[4]=FCL[3]
|
||||
FCL[5]=FCL[3]
|
||||
}FCL[2],FCL[4],FCL[5]=FCL[1],FCL[3],FCL[3]
|
||||
local LclearScore={[0]=0,-200,-120,-80,200}
|
||||
local HclearScore={[0]=0,100,140,200,500}
|
||||
local function ifoverlapAI(f,bk,x,y)
|
||||
@@ -256,7 +253,7 @@ AI_think={
|
||||
P.AI_delay=P.AI_delay0
|
||||
if Timer()-P.modeData.point>P.modeData.event then
|
||||
P.modeData.point=Timer()
|
||||
P.modeData.event=P.AI_delay0+rnd(2,10)
|
||||
P.modeData.event=P.AI_delay0+rnd(5,15)
|
||||
P:changeAtkMode(rnd()<.85 and 1 or #P.atker>3 and 4 or rnd()<.3 and 2 or 3)
|
||||
end
|
||||
return 1
|
||||
@@ -294,7 +291,7 @@ AI_think={
|
||||
P.AI_delay=P.AI_delay0
|
||||
if Timer()-P.modeData.point>P.modeData.event then
|
||||
P.modeData.point=Timer()
|
||||
P.modeData.event=P.AI_delay0+rnd(2,10)
|
||||
P.modeData.event=P.AI_delay0+rnd(5,15)
|
||||
P:changeAtkMode(rnd()<.85 and 1 or #P.atker>3 and 4 or rnd()<.3 and 2 or 3)
|
||||
end
|
||||
return 1
|
||||
|
||||
4
conf.lua
4
conf.lua
@@ -1,4 +1,4 @@
|
||||
gameVersion="Alpha V0.8.12"
|
||||
gameVersion="Alpha V0.8.15"
|
||||
function love.conf(t)
|
||||
t.identity="Techmino"--SaveDir name
|
||||
t.version="11.1"
|
||||
@@ -17,7 +17,7 @@ function love.conf(t)
|
||||
W.resizable=true
|
||||
W.fullscreentype="desktop"--"exclusive"
|
||||
W.fullscreen=false
|
||||
W.vsync=0--0:∞fps
|
||||
W.vsync=0--∞fps
|
||||
W.msaa=false--num of samples to use with multi-sampled antialiasing
|
||||
W.depth=0--bits/samp of depth buffer
|
||||
W.stencil=1--bits/samp of stencil buffer
|
||||
|
||||
@@ -7,22 +7,25 @@ setting={
|
||||
swap=true,
|
||||
fine=false,
|
||||
autoPause=true,
|
||||
|
||||
lang=1,
|
||||
skinSet=1,
|
||||
skin={1,5,2,8,10,3,7},
|
||||
face={0,0,0,0,0,0,0},
|
||||
--game
|
||||
|
||||
ghost=true,center=true,
|
||||
smo=true,grid=false,
|
||||
smooth=true,grid=false,
|
||||
lockFX=2,
|
||||
dropFX=3,
|
||||
shakeFX=2,
|
||||
atkFX=3,
|
||||
frameMul=100,
|
||||
|
||||
text=true,
|
||||
fullscreen=false,
|
||||
bg=true,
|
||||
bgspace=true,
|
||||
lang=1,
|
||||
skinSet=1,
|
||||
skin={1,5,2,8,10,3,7},
|
||||
--graphic
|
||||
|
||||
sfx=10,bgm=7,
|
||||
@@ -46,7 +49,7 @@ stat={
|
||||
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,
|
||||
pc=0,c=0,b2b=0,b3b=0,score=0,
|
||||
lastPlay=1,--last played mode ID
|
||||
}
|
||||
keyMap={
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
游戏方法:
|
||||
控制系统提供的一个个四联方块(左右移动和旋转90,180,270度),每填满场地的一行就会将其消除,根据消除方式会给对手攻击(如果有对手的话)
|
||||
系统会提供的一个个四联骨牌("方块",总共7种),玩家需要控制(左右移动和旋转90,180,270度),每填满场地的一行就会将其消除,根据消除方式会给对手攻击(如果有对手的话)
|
||||
活到最后或者完成目标即胜利.
|
||||
|
||||
旋转系统:
|
||||
@@ -16,10 +16,11 @@ spin判定:
|
||||
特殊消除:
|
||||
spin1/2/3攻击2/4/6,若mini则减半
|
||||
B2B:加1(techrash/spin1/spin2)或2(spin3)攻击
|
||||
B3B:在B2B效果之上再+1攻击和+1额外抵挡
|
||||
连击:0,0,1,1,2,2,3,3,4,4,3……
|
||||
B3B:在B2B效果之上消四再加1,spin再加0.5*消行数攻击,二者都+1额外抵挡
|
||||
连击:0,0,1,1,2,2,2,3,3,4,3,2…(后面都是2)
|
||||
特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文)
|
||||
PC:将上述伤害之和开根号,再+6~10(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)
|
||||
半全消("下方有剩余方块"的全消):伤害+2,额外抵挡+2
|
||||
全消:将上述伤害之和开根号,再+6~10(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)
|
||||
根据上述规则计算后,向下取整,攻击打出
|
||||
|
||||
分数系统:
|
||||
|
||||
16
file.lua
16
file.lua
@@ -89,7 +89,7 @@ function saveRecord(N,L)
|
||||
local _,mes=F:write(dumpTable(L))
|
||||
F:flush()F:close()
|
||||
if not _ then
|
||||
TEXT(text.recSavingError..mes,1140,650,20,"sudden",.5)
|
||||
TEXT(text.recSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
function delRecord(N)
|
||||
@@ -115,7 +115,7 @@ function saveUnlock()
|
||||
local _,mes=F:write(dumpTable(modeRanks))
|
||||
F:flush()F:close()
|
||||
if not _ then
|
||||
TEXT(text.unlockSavingError..mes,1140,650,20,"sudden",.5)
|
||||
TEXT(text.unlockSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -140,7 +140,7 @@ function saveData()
|
||||
local _,mes=F:write(dumpTable(stat))
|
||||
F:flush()F:close()
|
||||
if not _ then
|
||||
TEXT(text.statSavingError..mes,1140,650,20,"sudden",.5)
|
||||
TEXT(text.statSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -148,7 +148,9 @@ function loadSetting()
|
||||
local F=FILE.setting
|
||||
if F:open("r")then
|
||||
local s=F:read()
|
||||
if s:sub(1,6)~="return"then s="return{"..s.."}"end
|
||||
if s:sub(1,6)~="return"then
|
||||
s="return{"..s:gsub("\n",",").."}"
|
||||
end
|
||||
s=loadstring(s)
|
||||
F:close()
|
||||
if s then
|
||||
@@ -163,7 +165,7 @@ function saveSetting()
|
||||
local _,mes=F:write(dumpTable(setting))
|
||||
F:flush()F:close()
|
||||
if _ then TEXT(text.settingSaved,1140,650,40,"sudden",.5)
|
||||
else TEXT(text.settingSavingError..mes,1140,650,20,"sudden",.5)
|
||||
else TEXT(text.settingSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -184,7 +186,7 @@ function saveKeyMap()
|
||||
local _,mes=F:write(dumpTable(keyMap))
|
||||
F:flush()F:close()
|
||||
if _ then TEXT(text.keyMapSaved,1140,650,26,"sudden",.5)
|
||||
else TEXT(text.keyMapSavingError..mes,1140,650,20,"sudden",.5)
|
||||
else TEXT(text.keyMapSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -205,7 +207,7 @@ function saveVK()
|
||||
local _,mes=F:write(dumpTable(VK_org))
|
||||
F:flush()F:close()
|
||||
if _ then TEXT(text.VKSaved,1140,650,26,"sudden",.5)
|
||||
else TEXT(text.VKSavingError..mes,1140,650,20,"sudden",.5)
|
||||
else TEXT(text.VKSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ return{
|
||||
b2b="B2B ",b3b="B2B2B ",
|
||||
mini="Mini",
|
||||
PC="Perfect Clear",
|
||||
C="Clear",
|
||||
hold="暂存",next="下一个",
|
||||
|
||||
stage=function(n)return"关卡 "..n end,
|
||||
@@ -72,9 +73,11 @@ return{
|
||||
setting_game="游戏设置",
|
||||
setting_graphic="画面设置",
|
||||
setting_sound="声音设置",
|
||||
setting_control="控制设置",
|
||||
setting_skin="外观设置",
|
||||
preview="预览",
|
||||
keyboard="键盘",joystick="手柄",
|
||||
ctrlSetHelp="方向键选择/翻页,回车修改,esc返回",
|
||||
blockLayout="外观设置",
|
||||
musicRoom="音乐室",
|
||||
nowPlaying="正在播放:",
|
||||
|
||||
@@ -147,7 +150,7 @@ return{
|
||||
"特别感谢:Flyz,Farter,196,Teatube,T830,[所有内测人员]和 你!",
|
||||
"",
|
||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||
"游戏现在仅通过内测群1057456078进行免费下载/更新",
|
||||
"仅通过唯一内测群1057456078进行免费下载/更新",
|
||||
"其他渠道获得游戏皆有被修改/植入病毒的风险,程序只申请了震动&联网权限!",
|
||||
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
||||
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||
@@ -201,18 +204,6 @@ return{
|
||||
},
|
||||
draw={
|
||||
any="不定",
|
||||
block1="Z",
|
||||
block2="S",
|
||||
block3="L",
|
||||
block4="J",
|
||||
block5="T",
|
||||
block6="O",
|
||||
block7="I",
|
||||
gb1="■",
|
||||
gb2="■",
|
||||
gb3="■",
|
||||
gb4="■",
|
||||
gb5="■",
|
||||
space="×",
|
||||
clear="清除",
|
||||
demo="不显示×",
|
||||
@@ -232,16 +223,12 @@ return{
|
||||
setting_game={
|
||||
graphic="←画面设置",
|
||||
sound="声音设置→",
|
||||
reset="重置DAS/ARR",
|
||||
dasD="-",dasU="+",
|
||||
arrD="-",arrU="+",
|
||||
sddasD="-",sddasU="+",
|
||||
sdarrD="-",sdarrU="+",
|
||||
ctrl="控制设置",
|
||||
reTime="开局等待时间",
|
||||
maxNext="最大预览数量",
|
||||
autoPause="自动暂停",
|
||||
layout="外观",
|
||||
ctrl="键位设置",
|
||||
key="键位设置",
|
||||
touch="触屏设置",
|
||||
quickR="快速重新开始",
|
||||
autoPause="自动暂停",
|
||||
@@ -257,10 +244,12 @@ return{
|
||||
center="旋转中心",
|
||||
bg="背景",
|
||||
bgspace="星空背景",
|
||||
smo="平滑下落",
|
||||
smooth="平滑下落",
|
||||
lockFX="锁定特效等级",
|
||||
dropFX="下落特效等级",
|
||||
shakeFX="晃动特效等级",
|
||||
atkFX="攻击特效等级",
|
||||
text="消行文本",
|
||||
fullscreen="全屏",
|
||||
frame="绘制帧率",
|
||||
back=BK,
|
||||
@@ -275,6 +264,12 @@ return{
|
||||
stereo="立体声",
|
||||
back=BK,
|
||||
},
|
||||
setting_control={
|
||||
das="DAS",arr="ARR",
|
||||
sddas="软降DAS",sdarr="软降ARR",
|
||||
reset="重置",
|
||||
back=BK,
|
||||
},
|
||||
setting_key={
|
||||
back=BK,
|
||||
},
|
||||
@@ -287,7 +282,8 @@ return{
|
||||
prev5="↑",next5="↓",spin5="R",
|
||||
prev6="↑",next6="↓",spin6="R",
|
||||
prev7="↑",next7="↓",spin7="R",
|
||||
reset="重置方向",
|
||||
skinR="重置配色",
|
||||
faceR="重置方向",
|
||||
back=BK,
|
||||
},
|
||||
setting_touch={
|
||||
|
||||
@@ -22,6 +22,7 @@ return{
|
||||
b2b="满贯",b3b="大满贯",
|
||||
mini="迷你",
|
||||
PC="场地全清",
|
||||
C="场地半清",
|
||||
hold="暂存",next="下一个",
|
||||
|
||||
stage=function(n)return"关卡 "..n end,
|
||||
@@ -66,15 +67,15 @@ return{
|
||||
freshLimit={0,8,15,"∞"},
|
||||
opponent={"无电脑","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
|
||||
},
|
||||
softdropdas="软降DAS:",
|
||||
softdroparr="软降ARR:",
|
||||
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
|
||||
setting_game="游戏设置",
|
||||
setting_graphic="画面设置",
|
||||
setting_sound="声音设置",
|
||||
setting_control="控制设置",
|
||||
setting_skin="外观设置",
|
||||
preview="预览",
|
||||
keyboard="键盘",joystick="手柄",
|
||||
ctrlSetHelp="方向键选择/翻页,回车修改,esc返回",
|
||||
blockLayout="外观设置",
|
||||
musicRoom="音乐室",
|
||||
nowPlaying="正在播放:",
|
||||
|
||||
@@ -147,7 +148,7 @@ return{
|
||||
"特别感谢:Flyz,Farter,196,Teatube,T830,[所有内测人员]和 你!",
|
||||
"",
|
||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||
"游戏现在仅通过内测群1057456078进行免费下载/更新",
|
||||
"仅通过唯一内测群1057456078进行免费下载/更新",
|
||||
"其他渠道获得游戏皆有被修改/植入病毒的风险,程序只申请了震动&联网权限!",
|
||||
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
||||
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||
@@ -176,7 +177,7 @@ return{
|
||||
},
|
||||
mode={
|
||||
draw="画图(Q)",
|
||||
custon="参数(E)",
|
||||
custom="参数(E)",
|
||||
start="开始",
|
||||
back=BK,
|
||||
},
|
||||
@@ -201,18 +202,6 @@ return{
|
||||
},
|
||||
draw={
|
||||
any="不定",
|
||||
block1="Z",
|
||||
block2="S",
|
||||
block3="L",
|
||||
block4="J",
|
||||
block5="T",
|
||||
block6="O",
|
||||
block7="I",
|
||||
gb1="■",
|
||||
gb2="■",
|
||||
gb3="■",
|
||||
gb4="■",
|
||||
gb5="■",
|
||||
space="×",
|
||||
clear="清除",
|
||||
demo="不显示×",
|
||||
@@ -232,16 +221,12 @@ return{
|
||||
setting_game={
|
||||
graphic="←画面设置",
|
||||
sound="声音设置→",
|
||||
reset="重置DAS/ARR",
|
||||
dasD="-",dasU="+",
|
||||
arrD="-",arrU="+",
|
||||
sddasD="-",sddasU="+",
|
||||
sdarrD="-",sdarrU="+",
|
||||
ctrl="控制设置",
|
||||
reTime="开局等待时间",
|
||||
maxNext="最大预览数量",
|
||||
autoPause="自动暂停",
|
||||
layout="外观",
|
||||
ctrl="键位设置",
|
||||
key="键位设置",
|
||||
touch="触屏设置",
|
||||
quickR="快速重新开始",
|
||||
swap="组合键切换攻击模式",
|
||||
@@ -256,10 +241,12 @@ return{
|
||||
center="旋转中心",
|
||||
bg="背景",
|
||||
bgspace="星空背景",
|
||||
smo="平滑下落",
|
||||
smooth="平滑下落",
|
||||
lockFX="锁定特效等级",
|
||||
dropFX="下落特效等级",
|
||||
shakeFX="晃动特效等级",
|
||||
atkFX="攻击特效等级",
|
||||
text="消行文本",
|
||||
fullscreen="全屏",
|
||||
frame="绘制帧率",
|
||||
back=BK,
|
||||
@@ -274,6 +261,12 @@ return{
|
||||
stereo="立体声",
|
||||
back=BK,
|
||||
},
|
||||
setting_control={
|
||||
das="首次移动延迟",arr="移动重复延迟",
|
||||
sddas="首次软降延迟",sdarr="软降重复延迟",
|
||||
reset="重置",
|
||||
back=BK,
|
||||
},
|
||||
setting_key={
|
||||
back=BK,
|
||||
},
|
||||
@@ -286,7 +279,8 @@ return{
|
||||
prev5="↑",next5="↓",spin5="转",
|
||||
prev6="↑",next6="↓",spin6="转",
|
||||
prev7="↑",next7="↓",spin7="转",
|
||||
reset="重置方向",
|
||||
skinR="重置配色",
|
||||
faceR="重置方向",
|
||||
back=BK,
|
||||
},
|
||||
setting_touch={
|
||||
|
||||
@@ -20,6 +20,7 @@ return{
|
||||
b2b="B2B ",b3b="B2B2B ",
|
||||
mini="Mini",
|
||||
PC="Perfect Clear",
|
||||
C="Clear",
|
||||
hold="Hold",next="Next",
|
||||
|
||||
stage=function(n)return"STAGE "..n end,
|
||||
@@ -64,14 +65,14 @@ return{
|
||||
freshLimit={0,8,15,"∞"},
|
||||
opponent={"No CPU","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
|
||||
},
|
||||
softdropdas="Down DAS:",
|
||||
softdroparr="Down ARR:",
|
||||
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"},
|
||||
setting_game="Game setting",
|
||||
setting_graphic="Graphic setting",
|
||||
setting_sound="Sound setting",
|
||||
setting_control="Control Setting",
|
||||
setting_skin="Layout Setting",
|
||||
preview="Preview",
|
||||
keyboard="Keyboard",joystick="Joystick",
|
||||
blockLayout="Layout Setting",
|
||||
ctrlSetHelp="Arrowkey to select/change slot,Enter to change,Esc back",
|
||||
musicRoom="Music Room",
|
||||
nowPlaying="Now Playing:",
|
||||
@@ -145,7 +146,7 @@ return{
|
||||
"Special thanks:Flyz,Farter,196,Teatube,T830,[all test staff] and YOU!",
|
||||
"",
|
||||
"Any bugs/suggestions to my E-mail.(may with screenshot)",
|
||||
"Newest game only released in alpha-test group FREE",
|
||||
"Only released in test group for FREE",
|
||||
"Game downloaded from other way may implanted with virous",
|
||||
"Only network/vibrating permission applied",
|
||||
"Author is not responsible for any loss by eddited game",
|
||||
@@ -199,18 +200,6 @@ Lib used:
|
||||
},
|
||||
draw={
|
||||
any="Erase",
|
||||
block1="Z",
|
||||
block2="S",
|
||||
block3="L",
|
||||
block4="J",
|
||||
block5="T",
|
||||
block6="O",
|
||||
block7="I",
|
||||
gb1="■",
|
||||
gb2="■",
|
||||
gb3="■",
|
||||
gb4="■",
|
||||
gb5="■",
|
||||
space="×",
|
||||
clear="Clear",
|
||||
demo="Don't show ×",
|
||||
@@ -230,16 +219,12 @@ Lib used:
|
||||
setting_game={
|
||||
graphic="←Graphic",
|
||||
sound="Sound→",
|
||||
reset="Reset DAS/ARR",
|
||||
dasD="-",dasU="+",
|
||||
arrD="-",arrU="+",
|
||||
sddasD="-",sddasU="+",
|
||||
sdarrD="-",sdarrU="+",
|
||||
ctrl="Control setting",
|
||||
reTime="Delay before game",
|
||||
maxNext="Max next count",
|
||||
autoPause="Auto pause",
|
||||
layout="Layout",
|
||||
ctrl="Key Setting",
|
||||
key="Key Setting",
|
||||
touch="Touch Setting",
|
||||
quickR="Quick restart",
|
||||
autoPause="Auto pause",
|
||||
@@ -255,10 +240,12 @@ Lib used:
|
||||
center="Center",
|
||||
bg="Background",
|
||||
bgspace="BG space",
|
||||
smo="Smoooth drop",
|
||||
smooth="Smooth drop",
|
||||
lockFX="Lock FX level",
|
||||
dropFX="Drop FX level",
|
||||
shakeFX="Shake FX level",
|
||||
atkFX="ATK FX level",
|
||||
text="Line-clear text",
|
||||
fullscreen="Fullscreen",
|
||||
frame="draw FPS",
|
||||
back=BK,
|
||||
@@ -273,6 +260,12 @@ Lib used:
|
||||
stereo="Stereo",
|
||||
back=BK,
|
||||
},
|
||||
setting_control={
|
||||
das="DAS",arr="ARR",
|
||||
sddas="softdrop DAS",sdarr="softdrop ARR",
|
||||
reset="Reset",
|
||||
back=BK,
|
||||
},
|
||||
setting_key={
|
||||
back=BK,
|
||||
},
|
||||
@@ -285,7 +278,8 @@ Lib used:
|
||||
prev5="↑",next5="↓",spin5="R",
|
||||
prev6="↑",next6="↓",spin6="R",
|
||||
prev7="↑",next7="↓",spin7="R",
|
||||
reset="reset Dir",
|
||||
skinR="Reset Color",
|
||||
faceR="Reset Dir.",
|
||||
back=BK,
|
||||
},
|
||||
setting_touch={
|
||||
|
||||
116
main.lua
116
main.lua
@@ -37,16 +37,10 @@ mapCam={
|
||||
zoomK=nil,
|
||||
--for auto zooming when enter/leave scene
|
||||
}
|
||||
blockColor={}
|
||||
curBG="none"
|
||||
voiceQueue={free=0}
|
||||
texts={}
|
||||
widget_sel=nil--selected widget object
|
||||
virtualkeyDown,virtualkeyPressTime={},{}
|
||||
for i=1,20 do
|
||||
virtualkeyDown[i]=X
|
||||
virtualkeyPressTime[i]=0
|
||||
end
|
||||
|
||||
kb.setKeyRepeat(true)
|
||||
kb.setTextInput(false)
|
||||
@@ -56,7 +50,7 @@ ms.setVisible(false)
|
||||
customSel={1,22,1,1,7,3,1,1,8,4,1,1,1}
|
||||
preField={h=20}
|
||||
for i=1,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end
|
||||
blockSkin,blockSkinMini={},{}
|
||||
-- blockSkin,blockSkinMini={},{}--redefined in skin.change
|
||||
--Game system Vars
|
||||
-------------------------------------------------------------
|
||||
require("parts/list")
|
||||
@@ -184,6 +178,16 @@ local touchDown,touchUp,touchMove={},{},{}
|
||||
local keyDown,keyUp={},{}
|
||||
local gamepadDown,gamepadUp={},{}
|
||||
|
||||
function mouseDown.load()
|
||||
sceneTemp.skip=true
|
||||
end
|
||||
function keyDown.load()
|
||||
sceneTemp.skip=true
|
||||
end
|
||||
function touchDown.load()
|
||||
sceneTemp.skip=true
|
||||
end
|
||||
|
||||
function mouseDown.intro(x,y,k)
|
||||
if k==2 then
|
||||
VOICE("bye")
|
||||
@@ -406,23 +410,13 @@ function touchMove.draw(id,x,y,dx,dy)
|
||||
end
|
||||
end
|
||||
local penKey={
|
||||
["1"]=1,["2"]=2,["3"]=3,
|
||||
q=4, w=5, e=6,
|
||||
a=7, s=9, d=10,
|
||||
z=11, x=12, c=13,
|
||||
tab=0, backspace=0,
|
||||
lshift=-1, lalt=-1,
|
||||
q=1,w=2,e=3,r=4,t=5,y=6,u=7,i=8,o=9,p=10,["["]=11,
|
||||
a=12,s=13,d=14,f=15,g=16,h=17,
|
||||
z=0,x=-1,
|
||||
}
|
||||
function keyDown.draw(key)
|
||||
local sx,sy,pen=sceneTemp.x,sceneTemp.y,sceneTemp.pen
|
||||
if key=="delete"then
|
||||
if sceneTemp.sure>15 then
|
||||
for y=1,20 do for x=1,10 do preField[y][x]=0 end end
|
||||
sceneTemp.sure=0
|
||||
else
|
||||
sceneTemp.sure=50
|
||||
end
|
||||
elseif key=="up"or key=="down"or key=="left"or key=="right"then
|
||||
if key=="up"or key=="down"or key=="left"or key=="right"then
|
||||
if not sx then sx=1 end
|
||||
if not sy then sy=1 end
|
||||
if key=="up"and sy<20 then sy=sy+1
|
||||
@@ -433,6 +427,13 @@ function keyDown.draw(key)
|
||||
if kb.isDown("space")then
|
||||
preField[sy][sx]=pen
|
||||
end
|
||||
elseif key=="delete"then
|
||||
if sceneTemp.sure>20 then
|
||||
for y=1,20 do for x=1,10 do preField[y][x]=0 end end
|
||||
sceneTemp.sure=0
|
||||
else
|
||||
sceneTemp.sure=50
|
||||
end
|
||||
elseif key=="space"then
|
||||
if sx and sy then
|
||||
preField[sy][sx]=pen
|
||||
@@ -626,13 +627,12 @@ function touchDown.play(id,x,y)
|
||||
local t=onVirtualkey(x,y)
|
||||
if t then
|
||||
players[1]:pressKey(t)
|
||||
virtualkeyDown[t]=true
|
||||
virtualkeyPressTime[t]=10
|
||||
virtualkey[t].isDown=true
|
||||
virtualkey[t].pressTime=10
|
||||
if setting.VKTrack then
|
||||
local B=virtualkey[t]
|
||||
--按钮软碰撞(做不来hhh随便做一个,效果还行!)
|
||||
if setting.VKDodge then
|
||||
for i=1,#virtualkey do
|
||||
if setting.VKDodge then--按钮软碰撞(做不来hhh随便做一个,效果还行!)
|
||||
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
|
||||
@@ -644,8 +644,8 @@ function touchDown.play(id,x,y)
|
||||
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
|
||||
--按钮自动跟随:手指位置,当前位置,原始位置,权重取决于设置
|
||||
B.x,B.y=x*_FW+B.x*_CW+O.x*_OW,y*_FW+B.y*_CW+O.y*_OW
|
||||
end
|
||||
VIB(0)
|
||||
end
|
||||
@@ -677,7 +677,7 @@ function touchMove.play(id,x,y,dx,dy)
|
||||
end
|
||||
function keyDown.play(key)
|
||||
if key=="escape"then
|
||||
(frame<180 and back or pauseGame)()
|
||||
pauseGame()
|
||||
return
|
||||
end
|
||||
local m=keyMap
|
||||
@@ -686,8 +686,8 @@ function keyDown.play(key)
|
||||
if key==m[2*p-1][k]or key==m[2*p][k]then
|
||||
players[p]:pressKey(k)
|
||||
if p==1 then
|
||||
virtualkeyDown[k]=true
|
||||
virtualkeyPressTime[k]=10
|
||||
virtualkey[k].isDown=true
|
||||
virtualkey[k].pressTime=10
|
||||
end
|
||||
return
|
||||
end
|
||||
@@ -700,6 +700,7 @@ function keyUp.play(key)
|
||||
for k=1,20 do
|
||||
if key==m[2*p-1][k]or key==m[2*p][k]then
|
||||
players[p]:releaseKey(k)
|
||||
if p==1 then virtualkey[k].isDown=false end
|
||||
return
|
||||
end
|
||||
end
|
||||
@@ -713,8 +714,8 @@ function gamepadDown.play(key)
|
||||
if key==m[2*p+7][k]or key==m[2*p+8][k]then
|
||||
players[p]:pressKey(k)
|
||||
if p==1 then
|
||||
virtualkeyDown[k]=true
|
||||
virtualkeyPressTime[k]=10
|
||||
virtualkey[k].isDown=true
|
||||
virtualkey[k].pressTime=10
|
||||
end
|
||||
return
|
||||
end
|
||||
@@ -727,20 +728,20 @@ function gamepadUp.play(key)
|
||||
for k=1,20 do
|
||||
if key==m[2*p+7][k]or key==m[2*p+8][k]then
|
||||
players[p]:releaseKey(k)
|
||||
if p==1 then virtualkey[k].isDown=false end
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function wheelMoved.history(x,y)
|
||||
wheelScroll(y)
|
||||
end
|
||||
function keyDown.history(key)
|
||||
if key=="up"then
|
||||
sceneTemp[2]=max(sceneTemp[2]-10,1)
|
||||
sceneTemp[2]=max(sceneTemp[2]-3,1)
|
||||
elseif key=="down"then
|
||||
sceneTemp[2]=min(sceneTemp[2]+10,#sceneTemp[1]-22)
|
||||
sceneTemp[2]=min(sceneTemp[2]+3,#sceneTemp[1]-22)
|
||||
elseif key=="escape"then
|
||||
scene.back()
|
||||
end
|
||||
@@ -822,7 +823,7 @@ local function widgetControl_gamepad(i)
|
||||
end
|
||||
end
|
||||
end
|
||||
local lastX,lastY--last clickDown pos
|
||||
local lastX,lastY=0,0--last clickDown pos
|
||||
function love.mousepressed(x,y,k,t,num)
|
||||
if t then return end
|
||||
mouseShow=true
|
||||
@@ -839,8 +840,7 @@ function love.mousepressed(x,y,k,t,num)
|
||||
widgetPress(widget_sel,mx,my)
|
||||
end
|
||||
end
|
||||
lastX=mx
|
||||
lastY=my
|
||||
lastX,lastY=mx,my
|
||||
end
|
||||
function love.mousemoved(x,y,dx,dy,t)
|
||||
if t then return end
|
||||
@@ -851,8 +851,10 @@ function love.mousemoved(x,y,dx,dy,t)
|
||||
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)
|
||||
if ms.isDown(1) then
|
||||
if widget_sel then
|
||||
widgetDrag(widget_sel,mx,my,dx,dy)
|
||||
end
|
||||
else
|
||||
widget_sel=nil
|
||||
for _,W in next,Widget[scene.cur]do
|
||||
@@ -900,18 +902,19 @@ function love.touchmoved(id,x,y,dx,dy)
|
||||
touchMove[scene.cur](id,x,y,dx/scr.k,dy/scr.k)
|
||||
end
|
||||
if widget_sel then
|
||||
widgetDrag(widget_sel,x,y,dx,dy)
|
||||
if touching then
|
||||
widgetDrag(widget_sel,x,y,dx,dy)
|
||||
end
|
||||
else
|
||||
widget_sel=nil
|
||||
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
|
||||
end
|
||||
end
|
||||
end
|
||||
if not widget_sel then
|
||||
touching=nil
|
||||
if not widget_sel then
|
||||
touching=nil
|
||||
end
|
||||
end
|
||||
end
|
||||
function love.touchreleased(id,x,y)
|
||||
@@ -937,6 +940,7 @@ function love.keypressed(i)
|
||||
if i=="f8"then devMode=0
|
||||
elseif i=="f9"then devMode=1
|
||||
elseif i=="f10"then devMode=2
|
||||
elseif i=="f11"then devMode=3
|
||||
elseif devMode==2 then
|
||||
if i=="k"then
|
||||
for i=1,8 do
|
||||
@@ -1086,8 +1090,8 @@ local function love_update(dt)
|
||||
local S=scene.swap
|
||||
S.time=S.time-1
|
||||
if S.time==S.mid then
|
||||
scene.init(S.tar,scene.cur)
|
||||
scene.cur=S.tar
|
||||
scene.init(S.tar)
|
||||
for _,W in next,Widget[S.tar]do
|
||||
W:reset()
|
||||
end--重置控件
|
||||
@@ -1099,8 +1103,8 @@ local function love_update(dt)
|
||||
scene.swapping=false
|
||||
end
|
||||
end
|
||||
local i=Tmr[scene.cur]
|
||||
if i then i(dt)end
|
||||
local _=Tmr[scene.cur]
|
||||
if _ then _(dt)end
|
||||
for i=#Task,1,-1 do
|
||||
local T=Task[i]
|
||||
if T.code(T.P,T.data)then
|
||||
@@ -1144,9 +1148,10 @@ local function love_update(dt)
|
||||
end
|
||||
end
|
||||
end
|
||||
--更新控件
|
||||
for _,W in next,Widget[scene.cur]do
|
||||
W:update()
|
||||
end--更新控件
|
||||
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
|
||||
@@ -1167,7 +1172,7 @@ local function love_draw()
|
||||
if mouseShow then
|
||||
local r=Timer()*.5
|
||||
local R=int(r)%7+1
|
||||
local _=blockColor[R]
|
||||
local _=skin.libColor[setting.skin[R]]
|
||||
gc.setColor(_[1],_[2],_[3],min(1-abs(1-r%1*2),.3))
|
||||
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)
|
||||
@@ -1214,6 +1219,9 @@ local function love_draw()
|
||||
gc.print("Mouse:"..mx.." "..my,5,_-60)
|
||||
gc.print("Voices:"..#voiceQueue,5,_-80)
|
||||
gc.print("Tasks:"..#Task,5,_-100)
|
||||
if devMode==3 then
|
||||
love.timer.sleep(.5)
|
||||
end
|
||||
end--DEV info
|
||||
end
|
||||
love.draw,love.update=NULL,NULL
|
||||
@@ -1285,6 +1293,7 @@ function love.errorhandler(msg)
|
||||
local function _(_)CAP=gc.newImage(_)end
|
||||
gc.captureScreenshot(_)
|
||||
gc.present()
|
||||
setting.sfx=setting.voc--only for error "voice" played with voice volume,not saved
|
||||
if SFX.list.error then SFX.play("error",.8)end
|
||||
local BGcolor=rnd()>.026 and{.3,.5,.9},{.62,.3,.926}
|
||||
local needDraw=true
|
||||
@@ -1312,6 +1321,7 @@ function love.errorhandler(msg)
|
||||
setFont(38)gc.printf(text.errorMsg,100,200,1280-100)
|
||||
setFont(20)
|
||||
gc.print(system.."-"..gameVersion,100,660)
|
||||
gc.print("scene:"..scene.cur,400,660)
|
||||
gc.printf(err[1],626,360,1260-626)
|
||||
gc.print("TRACEBACK",626,426)
|
||||
for i=4,#err-2 do
|
||||
@@ -1325,10 +1335,4 @@ function love.errorhandler(msg)
|
||||
end
|
||||
end
|
||||
-------------------------------------------------------------Reset data relied on setting
|
||||
for _=1,7 do
|
||||
blockColor[_]=skin.libColor[setting.skin[_]]
|
||||
end
|
||||
for _=8,17 do
|
||||
blockColor[_]=skin.libColor[_]
|
||||
end
|
||||
changeLanguage(setting.lang)
|
||||
@@ -42,10 +42,10 @@ return{
|
||||
D.event=D.event+1
|
||||
D.point=int(72e4/t)*.1
|
||||
if D.event==20 then
|
||||
P:showText(text.great,0,-140,100,"appear",.6)
|
||||
P:showTextF(text.great,0,-140,100,"appear",.6)
|
||||
P.gameEnv.pushSpeed=3
|
||||
elseif D.event==50 then
|
||||
P:showText(text.maxspeed,0,-140,100,"appear",.6)
|
||||
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -48,13 +48,13 @@ return{
|
||||
D.event=D.event+1
|
||||
D.point=int(s*36e3/t)*.1
|
||||
if D.event==10 then
|
||||
P:showText(text.great,0,-140,100,"appear",.6)
|
||||
P:showTextF(text.great,0,-140,100,"appear",.6)
|
||||
P.gameEnv.pushSpeed=4
|
||||
elseif D.event==20 then
|
||||
P:showText(text.awesome,0,-140,100,"appear",.6)
|
||||
P:showTextF(text.awesome,0,-140,100,"appear",.6)
|
||||
P.gameEnv.pushSpeed=5
|
||||
elseif D.event==30 then
|
||||
P:showText(text.maxspeed,0,-140,100,"appear",.6)
|
||||
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local rnd,min=math.random,math.min
|
||||
local function check_c4w(P)
|
||||
for i=1,#P.clearedRow do
|
||||
P.field[#P.field+1]=freeRow.get(10)
|
||||
P.field[#P.field+1]=freeRow.get(13)
|
||||
P.visTime[#P.visTime+1]=freeRow.get(20)
|
||||
for i=4,7 do P.field[#P.field][i]=0 end
|
||||
end
|
||||
@@ -46,17 +46,17 @@ return{
|
||||
local P=players[1]
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
F[i]=freeRow.get(10)
|
||||
F[i]=freeRow.get(13)
|
||||
P.visTime[i]=freeRow.get(20)
|
||||
for x=4,7 do F[i][x]=0 end
|
||||
end
|
||||
local r=rnd(6)
|
||||
if r==1 then F[1][5],F[1][4],F[2][4]=10,10,10
|
||||
elseif r==2 then F[1][6],F[1][7],F[2][7]=10,10,10
|
||||
elseif r==3 then F[1][4],F[2][4],F[2][5]=10,10,10
|
||||
elseif r==4 then F[1][7],F[2][7],F[2][6]=10,10,10
|
||||
elseif r==5 then F[1][4],F[1][5],F[1][6]=10,10,10
|
||||
elseif r==6 then F[1][7],F[1][6],F[1][5]=10,10,10
|
||||
if r==1 then F[1][5],F[1][4],F[2][4]=13,13,13
|
||||
elseif r==2 then F[1][6],F[1][7],F[2][7]=13,13,13
|
||||
elseif r==3 then F[1][4],F[2][4],F[2][5]=13,13,13
|
||||
elseif r==4 then F[1][7],F[2][7],F[2][6]=13,13,13
|
||||
elseif r==5 then F[1][4],F[1][5],F[1][6]=13,13,13
|
||||
elseif r==6 then F[1][7],F[1][6],F[1][5]=13,13,13
|
||||
end
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local rnd,min=math.random,math.min
|
||||
local function check_c4w(P)
|
||||
for i=1,#P.clearedRow do
|
||||
P.field[#P.field+1]=freeRow.get(10)
|
||||
P.field[#P.field+1]=freeRow.get(13)
|
||||
P.visTime[#P.visTime+1]=freeRow.get(20)
|
||||
for i=4,7 do P.field[#P.field][i]=0 end
|
||||
end
|
||||
@@ -44,17 +44,17 @@ return{
|
||||
local P=players[1]
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
F[i]=freeRow.get(10)
|
||||
F[i]=freeRow.get(13)
|
||||
P.visTime[i]=freeRow.get(20)
|
||||
for x=4,7 do F[i][x]=0 end
|
||||
end
|
||||
local r=rnd(6)
|
||||
if r==1 then F[1][5],F[1][4],F[2][4]=10,10,10
|
||||
elseif r==2 then F[1][6],F[1][7],F[2][7]=10,10,10
|
||||
elseif r==3 then F[1][4],F[2][4],F[2][5]=10,10,10
|
||||
elseif r==4 then F[1][7],F[2][7],F[2][6]=10,10,10
|
||||
elseif r==5 then F[1][4],F[1][5],F[1][6]=10,10,10
|
||||
elseif r==6 then F[1][7],F[1][6],F[1][5]=10,10,10
|
||||
if r==1 then F[1][5],F[1][4],F[2][4]=13,13,13
|
||||
elseif r==2 then F[1][6],F[1][7],F[2][7]=13,13,13
|
||||
elseif r==3 then F[1][4],F[2][4],F[2][5]=13,13,13
|
||||
elseif r==4 then F[1][7],F[2][7],F[2][6]=13,13,13
|
||||
elseif r==5 then F[1][4],F[1][5],F[1][6]=13,13,13
|
||||
elseif r==6 then F[1][7],F[1][6],F[1][5]=13,13,13
|
||||
end
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
|
||||
@@ -38,6 +38,7 @@ return{
|
||||
next=1,hold=false,
|
||||
sequence="rnd",
|
||||
freshLimit=0,
|
||||
face={0,0,2,2,2,0,0},
|
||||
target=10,dropPiece=check_LVup,
|
||||
bg="rgb",bgm="rockblock",
|
||||
},
|
||||
|
||||
@@ -7,7 +7,7 @@ local function puzzleCheck(P)
|
||||
local a,b=preField[y][x],L and L[x]or 0
|
||||
if a~=0 then
|
||||
if a==-1 then if b>0 then return end
|
||||
elseif a<8 then if a~=b then return end
|
||||
elseif a<12 then if a~=b then return end
|
||||
elseif a>7 then if b==0 then return end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -37,21 +37,21 @@ return{
|
||||
D.event=D.event+1
|
||||
D.point=int(144e3/(240-2*D.event))*.1
|
||||
if D.event==25 then
|
||||
P:showText(text.great,0,-140,100,"appear",.6)
|
||||
P:showTextF(text.great,0,-140,100,"appear",.6)
|
||||
P.gameEnv.pushSpeed=3
|
||||
P.dropDelay,P.gameEnv.drop=4,4
|
||||
elseif D.event==50 then
|
||||
P:showText(text.awesome,0,-140,100,"appear",.6)
|
||||
P:showTextF(text.awesome,0,-140,100,"appear",.6)
|
||||
P.gameEnv.pushSpeed=4
|
||||
P.dropDelay,P.gameEnv.drop=3,3
|
||||
elseif D.event==75 then
|
||||
P:showText(text.maxspeed,0,-140,100,"appear",.6)
|
||||
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||
P.dropDelay,P.gameEnv.drop=2,2
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="game4",bgm="way",
|
||||
bg="game4",bgm="shining terminal",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
|
||||
@@ -37,16 +37,16 @@ return{
|
||||
D.event=D.event+1
|
||||
D.point=int(108e3/(360-D.event*2))*.1
|
||||
if D.event==25 then
|
||||
P:showText(text.great,0,-140,100,"appear",.6)
|
||||
P:showTextF(text.great,0,-140,100,"appear",.6)
|
||||
P.gameEnv.pushSpeed=2
|
||||
P.dropDelay,P.gameEnv.drop=20,20
|
||||
elseif D.event==50 then
|
||||
P:showText(text.awesome,0,-140,100,"appear",.6)
|
||||
P:showTextF(text.awesome,0,-140,100,"appear",.6)
|
||||
P.gameEnv.pushSpeed=3
|
||||
P.dropDelay,P.gameEnv.drop=10,10
|
||||
elseif D.event==90 then
|
||||
P.dropDelay,P.gameEnv.drop=5,5
|
||||
P:showText(text.maxspeed,0,-140,100,"appear",.6)
|
||||
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -52,6 +52,6 @@ return{
|
||||
W>=80 and 3 or
|
||||
W>=50 and 2 or
|
||||
W>=20 and 1 or
|
||||
L>=5 and 0
|
||||
P.stat.row>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -51,6 +51,6 @@ return{
|
||||
W>=80 and 3 or
|
||||
W>=50 and 2 or
|
||||
W>=20 and 1 or
|
||||
L>=5 and 0
|
||||
P.stat.row>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -2,7 +2,7 @@ return{
|
||||
name={
|
||||
"本地多人",
|
||||
"本地多人",
|
||||
"Hotseat",
|
||||
"Multiplayer",
|
||||
},
|
||||
level={
|
||||
"2P",
|
||||
@@ -10,8 +10,8 @@ return{
|
||||
"2P",
|
||||
},
|
||||
info={
|
||||
"友尽模式",
|
||||
"友尽模式",
|
||||
"友尽模式(非联网/局域网)",
|
||||
"友尽模式(非联网/局域网)",
|
||||
"End of friendship",
|
||||
},
|
||||
color=color.white,
|
||||
|
||||
@@ -2,7 +2,7 @@ return{
|
||||
name={
|
||||
"本地多人",
|
||||
"本地多人",
|
||||
"Hotseat",
|
||||
"Multiplayer",
|
||||
},
|
||||
level={
|
||||
"3P",
|
||||
@@ -10,8 +10,8 @@ return{
|
||||
"3P",
|
||||
},
|
||||
info={
|
||||
"友尽模式",
|
||||
"友尽模式",
|
||||
"友尽模式(非联网/局域网)",
|
||||
"友尽模式(非联网/局域网)",
|
||||
"End of friendship",
|
||||
},
|
||||
color=color.white,
|
||||
|
||||
@@ -2,7 +2,7 @@ return{
|
||||
name={
|
||||
"本地多人",
|
||||
"本地多人",
|
||||
"Hotseat",
|
||||
"Multiplayer",
|
||||
},
|
||||
level={
|
||||
"4P",
|
||||
@@ -10,8 +10,8 @@ return{
|
||||
"4P",
|
||||
},
|
||||
info={
|
||||
"友尽模式",
|
||||
"友尽模式",
|
||||
"友尽模式(非联网/局域网)",
|
||||
"友尽模式(非联网/局域网)",
|
||||
"End of friendship",
|
||||
},
|
||||
color=color.white,
|
||||
|
||||
@@ -26,7 +26,7 @@ local function score(P)
|
||||
P.modeData.point,P.modeData.event=500,4
|
||||
P:win("finish")
|
||||
else
|
||||
P:showText(text.stage(s),0,-120,80,"fly")
|
||||
P:showTextF(text.stage(s),0,-120,80,"fly")
|
||||
end
|
||||
SFX.play("reach")
|
||||
end
|
||||
|
||||
@@ -30,7 +30,7 @@ local function score(P)
|
||||
P.modeData.point,P.modeData.event=500,4
|
||||
P:win("finish")
|
||||
else
|
||||
P:showText(text.stage(s),0,-120,80,"fly")
|
||||
P:showTextF(text.stage(s),0,-120,80,"fly")
|
||||
end
|
||||
SFX.play("reach")
|
||||
end
|
||||
|
||||
@@ -12,7 +12,7 @@ local function score(P)
|
||||
if MD.point%100==99 then SFX.play("blip_1")end
|
||||
if int(MD.point*.01)>MD.event then
|
||||
local s=MD.event+1;MD.event=s--level up!
|
||||
P:showText(text.stage(s),0,-120,80,"fly")
|
||||
P:showTextF(text.stage(s),0,-120,80,"fly")
|
||||
local E=P.gameEnv
|
||||
if s<4 then--first 300
|
||||
if s~=1 then E.lock=E.lock-1 end
|
||||
|
||||
@@ -9,10 +9,12 @@ local function task_PC(P)
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter==21 then
|
||||
local t=P.stat.pc%2
|
||||
local S=P.gameEnv.skin
|
||||
for i=1,4 do
|
||||
local r=freeRow.get(0)
|
||||
for j=1,10 do
|
||||
r[j]=PCbase[4*t+i][j]
|
||||
local _=PCbase[4*t+i][j]
|
||||
r[j]=S[_]or 0
|
||||
end
|
||||
ins(P.field,1,r)
|
||||
ins(P.visTime,1,freeRow.get(20))
|
||||
@@ -44,7 +46,7 @@ local function newPC(P)
|
||||
elseif b<5 then b=7-b
|
||||
end
|
||||
end
|
||||
P.next[#P.next+1]={bk=blocks[b][0],id=b,color=b,name=b}--P:newNext(b)'s simple version!
|
||||
P:getNext(b)
|
||||
end
|
||||
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
||||
newTask(task_PC,P)
|
||||
@@ -54,9 +56,9 @@ local function newPC(P)
|
||||
P.gameEnv.lock=pc_lock[s]or 20
|
||||
P.gameEnv.fall=pc_fall[s]or 5
|
||||
if s==10 then
|
||||
P:showText(text.maxspeed,0,-140,100,"appear",.6)
|
||||
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||
else
|
||||
P:showText(text.speedup,0,-140,40,"appear",.8)
|
||||
P:showTextF(text.speedup,0,-140,40,"appear",.8)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -6,10 +6,12 @@ local function task_PC(P)
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter==21 then
|
||||
local t=P.stat.pc%2
|
||||
local S=P.gameEnv.skin
|
||||
for i=1,4 do
|
||||
local r=freeRow.get(0)
|
||||
for j=1,10 do
|
||||
r[j]=PCbase[4*t+i][j]
|
||||
local _=PCbase[4*t+i][j]
|
||||
r[j]=S[_]or 0
|
||||
end
|
||||
ins(P.field,1,r)
|
||||
ins(P.visTime,1,freeRow.get(20))
|
||||
@@ -40,7 +42,7 @@ local function newPC(P)
|
||||
elseif b<5 then b=7-b
|
||||
end
|
||||
end
|
||||
P.next[#P.next+1]={bk=blocks[b][0],id=b,color=b,name=b}--P:newNext(b)'s simple version!
|
||||
P:getNext(b)
|
||||
end
|
||||
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
||||
newTask(task_PC,P)
|
||||
|
||||
@@ -26,7 +26,7 @@ return{
|
||||
P.atkBuffer[#P.atkBuffer+1]={pos=rnd(10),amount=1,countdown=30,cd0=30,time=0,sent=false,lv=1}
|
||||
P.atkBuffer.sum=P.atkBuffer.sum+1
|
||||
P.stat.recv=P.stat.recv+1
|
||||
if P.modeData.event==45 then P:showText(text.maxspeed,0,-140,100,"appear",.6)end
|
||||
if P.modeData.event==45 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end
|
||||
P.modeData.counter=0
|
||||
P.modeData.event=P.modeData.event+1
|
||||
end
|
||||
|
||||
@@ -31,7 +31,7 @@ return{
|
||||
local R=(P.modeData.event%3<2 and 1 or 3)
|
||||
P.atkBuffer.sum=P.atkBuffer.sum+R
|
||||
P.stat.recv=P.stat.recv+R
|
||||
if P.modeData.event==60 then P:showText(text.maxspeed,0,-140,100,"appear",.6)end
|
||||
if P.modeData.event==60 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end
|
||||
P.modeData.counter=0
|
||||
P.modeData.event=P.modeData.event+1
|
||||
end
|
||||
|
||||
@@ -27,7 +27,7 @@ return{
|
||||
P.atkBuffer[#P.atkBuffer+1]={pos=rnd(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3}
|
||||
P.atkBuffer.sum=P.atkBuffer.sum+4
|
||||
P.stat.recv=P.stat.recv+4
|
||||
if P.modeData.event==60 then P:showText(text.maxspeed,0,-140,100,"appear",.6)end
|
||||
if P.modeData.event==60 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end
|
||||
P.modeData.counter=0
|
||||
P.modeData.event=P.modeData.event+1
|
||||
end
|
||||
|
||||
@@ -31,7 +31,7 @@ return{
|
||||
d%4==3 and{pos=rnd(10),amount=4,countdown=90,cd0=90,time=0,sent=false,lv=3}
|
||||
P.atkBuffer.sum=P.atkBuffer.sum+d%4+1
|
||||
P.stat.recv=P.stat.recv+d%4+1
|
||||
if P.modeData.event==45 then P:showText(text.maxspeed,0,-140,100,"appear",.6)end
|
||||
if P.modeData.event==45 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end
|
||||
P.modeData.counter=0
|
||||
P.modeData.event=d
|
||||
end
|
||||
|
||||
@@ -33,7 +33,7 @@ return{
|
||||
P.atkBuffer[p+3]={pos=rnd(10),amount=6,countdown=1.5*t,cd0=1.5*t,time=0,sent=false,lv=5}
|
||||
P.atkBuffer.sum=P.atkBuffer.sum+20
|
||||
P.stat.recv=P.stat.recv+20
|
||||
if P.modeData.event==31 then P:showText(text.maxspeed,0,-140,100,"appear",.6)end
|
||||
if P.modeData.event==31 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end
|
||||
P.modeData.counter=0
|
||||
P.modeData.event=P.modeData.event+1
|
||||
end
|
||||
|
||||
146
paint.lua
146
paint.lua
@@ -1,9 +1,11 @@
|
||||
local gc=love.graphics
|
||||
local setFont=setFont
|
||||
local int,ceil,rnd,max,min,sin=math.floor,math.ceil,math.random,math.max,math.min,math.sin
|
||||
local int,ceil,rnd,abs=math.floor,math.ceil,math.random,math.abs
|
||||
local max,min,sin=math.max,math.min,math.sin
|
||||
local format=string.format
|
||||
|
||||
local Timer=love.timer.getTime
|
||||
local mStr=mStr
|
||||
local scr=scr
|
||||
local scs=require("parts/spinCenters")
|
||||
local modeRankColor={
|
||||
@@ -57,21 +59,38 @@ local function VirtualkeyPreview()
|
||||
end
|
||||
end
|
||||
local function drawVirtualkey()
|
||||
local V=virtualkey
|
||||
local a=setting.VKAlpha*.1
|
||||
for i=1,#virtualkey do
|
||||
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
|
||||
if setting.VKIcon then
|
||||
for i=1,#V do
|
||||
if V[i].ava then
|
||||
local B=V[i]
|
||||
gc.setColor(1,1,1,a)
|
||||
gc.setLineWidth(B.r*.07)
|
||||
gc.circle("line",B.x,B.y,B.r)--Button outline
|
||||
local _=V[i].pressTime
|
||||
gc.draw(VKIcon[i],B.x,B.y,nil,B.r*.026+_*.08,nil,18,18)--icon
|
||||
if _>0 then
|
||||
gc.setColor(1,1,1,a*_*.08)
|
||||
gc.circle("fill",B.x,B.y,B.r*.94)--Glow
|
||||
gc.circle("line",B.x,B.y,B.r*(1.4-_*.04))--Ripple
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
for i=1,#V do
|
||||
if V[i].ava then
|
||||
local B=V[i]
|
||||
gc.setColor(1,1,1,a)
|
||||
gc.setLineWidth(B.r*.07)
|
||||
gc.circle("line",B.x,B.y,B.r)
|
||||
local _=V[i].pressTime
|
||||
if _>0 then
|
||||
gc.setColor(1,1,1,a*_*.08)
|
||||
gc.circle("fill",B.x,B.y,B.r*.94)
|
||||
gc.circle("line",B.x,B.y,B.r*(1.4-_*.04))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -140,11 +159,11 @@ function Pnt.BG.game6()
|
||||
else gc.clear(0,0,0)
|
||||
end
|
||||
local R=7-int(Timer()*.5)%7
|
||||
local _=blockColor[R]
|
||||
local _=skin.libColor[setting.skin[R]]
|
||||
gc.setColor(_[1],_[2],_[3],.1)
|
||||
gc.draw(miniBlock[R],640,360,Timer()%3.1416*6,400,400,scs[R][0][2]-.5,#blocks[R][0]-scs[R][0][1]+.5)
|
||||
end--Fast lightning&spining tetromino
|
||||
local matrixT={}for i=1,20 do matrixT[i]={}for j=1,20 do matrixT[i][j]=love.math.noise(i,j)+2 end end
|
||||
local matrixT={}for i=1,50 do matrixT[i]={}for j=1,50 do matrixT[i][j]=love.math.noise(i,j)+2 end end
|
||||
function Pnt.BG.matrix()
|
||||
gc.scale(scr.k)
|
||||
gc.clear(.15,.15,.15)
|
||||
@@ -227,8 +246,8 @@ function Pnt.mode()
|
||||
if c then
|
||||
gc.setColor(c)
|
||||
else
|
||||
c=.5+sin(Timer()*6+_)*.2
|
||||
S=S*(.8+c*.5)
|
||||
c=.5+sin(Timer()*6.26-_)*.2
|
||||
S=S*(.9+c*.4)
|
||||
gc.setColor(c,c,c)
|
||||
end
|
||||
if M.shape==1 then--Rectangle
|
||||
@@ -353,7 +372,6 @@ function Pnt.custom()
|
||||
end
|
||||
end
|
||||
end
|
||||
local blockSkin=blockSkin
|
||||
function Pnt.draw()
|
||||
local sx,sy=sceneTemp.x,sceneTemp.y
|
||||
gc.translate(200,60)
|
||||
@@ -382,17 +400,23 @@ function Pnt.draw()
|
||||
local pen=sceneTemp.pen
|
||||
if pen>0 then
|
||||
gc.setLineWidth(13)
|
||||
gc.setColor(blockColor[pen])
|
||||
gc.rectangle("line",745,460,70,70)
|
||||
gc.setColor(skin.libColor[pen])
|
||||
gc.rectangle("line",565,460,70,70)
|
||||
elseif pen==-1 then
|
||||
gc.setLineWidth(5)
|
||||
gc.setColor(.9,.9,.9)
|
||||
gc.line(755,470,805,520)
|
||||
gc.line(755,520,805,470)
|
||||
gc.line(575,470,625,520)
|
||||
gc.line(575,520,625,470)
|
||||
end
|
||||
if sceneTemp.sure>0 then
|
||||
gc.setColor(1,1,1,sceneTemp.sure*.02)
|
||||
gc.draw(drawableText.question,660,11)
|
||||
gc.draw(drawableText.question,1040,430)
|
||||
end
|
||||
setFont(40)
|
||||
for i=1,7 do
|
||||
local _=setting.skin[i]
|
||||
gc.setColor(skin.libColor[_])
|
||||
mStr(text.block[i],500+65*_,65)
|
||||
end
|
||||
end
|
||||
function Pnt.play()
|
||||
@@ -463,21 +487,20 @@ function Pnt.play()
|
||||
end
|
||||
function Pnt.pause()
|
||||
Pnt.play()
|
||||
local _=pauseTimer*.02
|
||||
if gameResult then _=_*.6 end
|
||||
gc.setColor(.15,.15,.15,_)
|
||||
local T=sceneTemp.timer*.02
|
||||
local t=T
|
||||
if gameResult then t=t*.6 end
|
||||
gc.setColor(.15,.15,.15,t)
|
||||
gc.push("transform")
|
||||
gc.origin()
|
||||
gc.rectangle("fill",0,0,scr.w,scr.h)
|
||||
gc.pop()
|
||||
setFont(25)
|
||||
gc.setColor(1,1,1,pauseTimer*.02)
|
||||
if pauseCount>0 then
|
||||
_=curMode.pauseLimit and pauseTime>30
|
||||
if _ then gc.setColor(1,.4,.4,pauseTimer*.02)end
|
||||
gc.setColor(1,.4,.4,T)
|
||||
gc.print(text.pauseCount..":["..pauseCount.."] "..format("%.2f",pauseTime).."s",110,150)
|
||||
if _ then gc.setColor(1,1,1,pauseTimer*.02)end
|
||||
end
|
||||
gc.setColor(1,1,1,T)
|
||||
for i=1,7 do
|
||||
gc.print(text.pauseStat[i],95,30*i+310)
|
||||
gc.print(sceneTemp[i],305,30*i+310)
|
||||
@@ -487,21 +510,15 @@ function Pnt.pause()
|
||||
gc.print(sceneTemp[i],1050,30*i+100)
|
||||
end
|
||||
_=drawableText.modeName
|
||||
gc.draw(_,120,230)
|
||||
gc.draw(_,100,230)
|
||||
gc.draw(drawableText.levelName,135+_:getWidth(),230)
|
||||
setFont(35)
|
||||
mDraw(gameResult and drawableText[gameResult]or drawableText.pause,640,50-10*(5-pauseTimer*.1)^1.5)
|
||||
mDraw(gameResult and drawableText[gameResult]or drawableText.pause,640,50-10*(5-sceneTemp.timer*.1)^1.5)
|
||||
end
|
||||
function Pnt.setting_game()
|
||||
gc.setColor(1,1,1)
|
||||
mDraw(drawableText.setting_game,640,15)
|
||||
setFont(33)
|
||||
mStr("DAS:"..setting.das.."F",340,205)
|
||||
mStr("ARR:"..setting.arr.."F",660,205)
|
||||
setFont(22)
|
||||
mStr(text.softdropdas..setting.sddas.."F",340,323)
|
||||
mStr(text.softdroparr..setting.sdarr.."F",660,323)
|
||||
gc.draw(blockSkin[7-int(Timer()*2)%7],720,570,Timer()%6.28319,2,nil,15,15)
|
||||
gc.draw(blockSkin[int(Timer()*2)%11+1],720,540,Timer()%6.28319,2,nil,15,15)
|
||||
end
|
||||
function Pnt.setting_graphic()
|
||||
gc.setColor(1,1,1)
|
||||
@@ -522,6 +539,41 @@ function Pnt.setting_sound()
|
||||
gc.draw(miya.f4,129,98+3*sin(t*.7))
|
||||
gc.translate(-x,-y)
|
||||
end
|
||||
function Pnt.setting_control()
|
||||
--Testing grid line
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,1,1,.4)
|
||||
gc.line(550,540,950,540)
|
||||
gc.line(550,580,950,580)
|
||||
gc.line(550,620,950,620)
|
||||
for x=590,910,40 do
|
||||
gc.line(x,530,x,630)
|
||||
end
|
||||
gc.setColor(1,1,1)
|
||||
gc.line(550,530,550,630)
|
||||
gc.line(950,530,950,630)
|
||||
|
||||
--Texts
|
||||
gc.draw(drawableText.setting_control,80,50)
|
||||
setFont(50)
|
||||
gc.printf(text.preview,320,540,200,"right")
|
||||
|
||||
--Floating number
|
||||
setFont(30)
|
||||
local _=setting
|
||||
mStr(_.das,226+35*_.das,145)
|
||||
mStr(_.arr,226+35*_.arr,235)
|
||||
mStr(_.sddas,226+35*_.sddas,325)
|
||||
mStr(_.sdarr,226+35*_.sdarr,415)
|
||||
|
||||
--Testing O mino
|
||||
_=blockSkin[setting.skin[6]]
|
||||
local x=550+40*sceneTemp.pos
|
||||
gc.draw(_,x,540,nil,40/30)
|
||||
gc.draw(_,x,580,nil,40/30)
|
||||
gc.draw(_,x+40,540,nil,40/30)
|
||||
gc.draw(_,x+40,580,nil,40/30)
|
||||
end
|
||||
function Pnt.setting_key()
|
||||
local s=sceneTemp
|
||||
local a=.3+sin(Timer()*15)*.1
|
||||
@@ -578,19 +630,19 @@ function Pnt.setting_skin()
|
||||
for N=1,7 do
|
||||
local face=setting.face[N]
|
||||
local B=blocks[N][face]
|
||||
local x,y=-30+140*N-scs[N][face][2]*30,335+scs[N][face][1]*30
|
||||
local x,y=-25+140*N-scs[N][face][2]*30,325+scs[N][face][1]*30
|
||||
local col=#B[1]
|
||||
for i=1,#B do for j=1,col do
|
||||
if B[i][j]then
|
||||
gc.draw(blockSkin[N],x+30*j,y-30*i)
|
||||
gc.draw(blockSkin[setting.skin[N]],x+30*j,y-30*i)
|
||||
end
|
||||
end end
|
||||
gc.circle("fill",-15+140*N,350,sin(Timer()*10)+5)
|
||||
gc.circle("fill",-10+140*N,340,sin(Timer()*10)+5)
|
||||
end
|
||||
for i=1,5 do
|
||||
gc.draw(blockSkin[8+i],1110,140+60*i,nil,2)
|
||||
for i=1,6 do
|
||||
gc.draw(blockSkin[11+i],1110,100+60*i,nil,2)
|
||||
end
|
||||
gc.draw(drawableText.blockLayout,80,50)
|
||||
gc.draw(drawableText.setting_skin,80,50)
|
||||
end
|
||||
function Pnt.setting_touch()
|
||||
gc.setColor(1,1,1)
|
||||
|
||||
@@ -28,13 +28,15 @@ if setting.lang==1 then
|
||||
"使用love2d引擎制作",
|
||||
"有疑问?先看设置有没有你想要的",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"不要按F8",
|
||||
"不要按F10",
|
||||
"秘密数字:626",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"戴上耳机以获得最佳体验",
|
||||
"少女祈祷中",
|
||||
"按键/点击以全力加载,跳过动画",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
|
||||
"(第一次才准)今日幸运数字:"..math.random(100,626),
|
||||
"RUR'U'R'FR2U'R'U'RUR'F'",
|
||||
"Am G F G",
|
||||
}
|
||||
elseif setting.lang==2 then
|
||||
L={
|
||||
@@ -65,13 +67,15 @@ elseif setting.lang==2 then
|
||||
"使用love2d引擎制作",
|
||||
"有疑问?先看设置有没有你想要的",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"不要按F8",
|
||||
"不要按F10",
|
||||
"秘密数字:626",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"戴上耳机以获得最佳体验",
|
||||
"少女祈祷中",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
|
||||
"(第一次才准)今日幸运数字:"..math.random(100,626),
|
||||
"按键/点击以全力加载,跳过动画",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",
|
||||
"RUR'U'R'FR2U'R'U'RUR'F'",
|
||||
"Am G F G",
|
||||
}
|
||||
elseif setting.lang==3 then
|
||||
L={
|
||||
@@ -102,13 +106,16 @@ elseif setting.lang==3 then
|
||||
"Powered by love2d",
|
||||
"Find out what's in the setting!",
|
||||
"Any suggestions to author!",
|
||||
"DO NOT PRESS F8",
|
||||
"DO NOT PRESS F10",
|
||||
"Secret num:626",
|
||||
"Techmino=Technique+Tetromino",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"Headphones for better experience",
|
||||
"少女祈禱中",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
|
||||
"any-key/click to skip loading animation",
|
||||
"RUR'U'R'FR2U'R'U'RUR'F'",
|
||||
"Am G F G",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",
|
||||
}
|
||||
end
|
||||
return L[math.random(#L)]
|
||||
@@ -91,8 +91,8 @@ local TRS={
|
||||
[02]={{0,0},{-1,0}, {1,0}, {0,-1}, {0,1} },
|
||||
[20]={{0,0},{1,0}, {-1,0}, {0,1}, {0,-1} },
|
||||
[13]={{0,0},{0,-1}, {-1,0}, {1,0}, {0,1} },
|
||||
[31]={{0,0},{1,0}, {-1,0}},
|
||||
}
|
||||
[31]={{0,0},{0,-1}, {1,0}, {-1,0}, {0,1} },
|
||||
}--I
|
||||
}for i=1,7 do collect(TRS[i])end
|
||||
local AIRS={
|
||||
[1]={
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
--LIGHT MODULE(Optimized by MrZ,Original on github/love2d community/simple-love-lights)
|
||||
--Heavily based on mattdesl's libGDX implementation:
|
||||
--https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows
|
||||
--Private--
|
||||
local gc=love.graphics
|
||||
local C=gc.clear
|
||||
local shadowMapShader=gc.newShader("parts/shader/shadowMap.cs")--Shader for caculating the 1D shadow map.
|
||||
local lightRenderShader=gc.newShader("parts/shader/lightRender.cs")--Shader for rendering blurred lights and shadows.
|
||||
Lights={}--Lightsource objects
|
||||
local Lights=Lights
|
||||
--Private--
|
||||
local shadowMapShader=gc.newShader("shader/shadowMap.cs")--Shader for caculating the 1D shadow map.
|
||||
local lightRenderShader=gc.newShader("shader/lightRender.cs")--Shader for rendering blurred lights and shadows.
|
||||
local Lights={}--Lightsource objects
|
||||
local function move(L,x,y)
|
||||
L.x,L.y=x,y
|
||||
end
|
||||
@@ -51,18 +50,18 @@ local function draw(L)
|
||||
--复位
|
||||
end
|
||||
--Public--
|
||||
function drawLight()
|
||||
function Lights.draw()
|
||||
for i=1,#Lights do
|
||||
Lights[i]:draw()
|
||||
end
|
||||
end
|
||||
function clearLight(L)
|
||||
for i=1,#Lights do
|
||||
function Lights.clear(L)
|
||||
for i=#Lights,1,-1 do
|
||||
Lights[i]:destroy()
|
||||
Lights[i]=nil
|
||||
end
|
||||
end
|
||||
function addLight(x,y,R,F)
|
||||
function Lights.add(x,y,R,F)
|
||||
local id=#Lights+1
|
||||
Lights[id]={
|
||||
id=id,
|
||||
@@ -77,4 +76,5 @@ function addLight(x,y,R,F)
|
||||
draw=draw,
|
||||
destroy=destroy,
|
||||
}
|
||||
end
|
||||
end
|
||||
return Lights
|
||||
@@ -32,6 +32,7 @@ color={
|
||||
darkCyan={0,.6,.6},
|
||||
darkGrey={.3,.3,.3},
|
||||
|
||||
black={0,0,0},
|
||||
orange={1,.6,0},
|
||||
pink={1,0,.6},
|
||||
grass={.6,1,0},
|
||||
@@ -74,7 +75,7 @@ voiceList={
|
||||
mini={"mini_1","mini_2","mini_3"},
|
||||
b2b={"b2b_1","b2b_2","b2b_3"},
|
||||
b3b={"b3b_1","b3b_2"},
|
||||
pc={"perfectclear_1","perfectclear_2"},
|
||||
pc={"clear_1","clear_2"},
|
||||
win={"win_1","win_2","win_3","win_4","win_5","win_6","win_6","win_7"},
|
||||
lose={"lose_1","lose_2","lose_3"},
|
||||
bye={"bye_1","bye_2"},
|
||||
|
||||
@@ -1,13 +1,3 @@
|
||||
local O,_=true,false
|
||||
local L={
|
||||
{{_,O,O},{O,O,_}}, --Z
|
||||
{{O,O,_},{_,O,O}}, --S
|
||||
{{O,O,O},{_,_,O}}, --L
|
||||
{{O,O,O},{O,_,_}}, --J
|
||||
{{O,O,O},{_,O,_}}, --T
|
||||
{{O,O},{O,O}}, --O
|
||||
{{O,O,O,O}}, --I
|
||||
}
|
||||
local function RotCW(B)
|
||||
local N={}
|
||||
local r,c=#B,#B[1]--row,col
|
||||
@@ -19,14 +9,16 @@ local function RotCW(B)
|
||||
end
|
||||
return N
|
||||
end
|
||||
|
||||
-- [1,1,1]
|
||||
-- [0,0,1]--r=2,c=3
|
||||
-- ↓ (Y inv)
|
||||
-- [1,1]
|
||||
-- [1,0]
|
||||
-- [1,0]
|
||||
|
||||
local O,_=true,false
|
||||
local L={
|
||||
{{_,O,O},{O,O,_}}, --Z
|
||||
{{O,O,_},{_,O,O}}, --S
|
||||
{{O,O,O},{_,_,O}}, --L
|
||||
{{O,O,O},{O,_,_}}, --J
|
||||
{{O,O,O},{_,O,_}}, --T
|
||||
{{O,O},{O,O}}, --O
|
||||
{{O,O,O,O}}, --I
|
||||
}
|
||||
for i=1,#L do
|
||||
local B=L[i]
|
||||
L[i]={[0]=B}
|
||||
|
||||
@@ -17,7 +17,7 @@ SFX.list={
|
||||
"clear_1","clear_2","clear_3","clear_4",
|
||||
"spin_0","spin_1","spin_2","spin_3",
|
||||
"emit","blip_1","blip_2",
|
||||
"perfectclear",
|
||||
"clear",
|
||||
|
||||
"error",
|
||||
--Mono sfxs
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
gc=love.graphics
|
||||
shader_glow=gc.newShader("parts/shader/glow.cs")
|
||||
shader_glow=gc.newShader("shader/glow.cs")
|
||||
@@ -34,7 +34,7 @@ skin.libColor={
|
||||
color.purple,
|
||||
color.magenta,
|
||||
color.pink,
|
||||
color.darkGreen,
|
||||
color.darkGrey,
|
||||
color.grey,
|
||||
color.lightGrey,
|
||||
color.darkPurple,
|
||||
@@ -70,14 +70,14 @@ function skin.load()
|
||||
gc.setLineWidth(3)
|
||||
for i=1,11 do
|
||||
puzzleMark[i]=C(30,30)
|
||||
local _=blockColor[i]
|
||||
local _=skin.libColor[i]
|
||||
gc.setColor(_[1],_[2],_[3],.6)
|
||||
gc.rectangle("line",5,5,20,20)
|
||||
gc.rectangle("line",10,10,10,10)
|
||||
end
|
||||
for i=12,17 do
|
||||
puzzleMark[i]=C(30,30)
|
||||
gc.setColor(blockColor[i])
|
||||
gc.setColor(skin.libColor[i])
|
||||
gc.rectangle("line",7,7,16,16)
|
||||
end
|
||||
local _=C(30,30)
|
||||
@@ -109,30 +109,17 @@ end
|
||||
function skin.prev(i)--prev skin for [i]
|
||||
local _=setting.skin
|
||||
_[i]=(_[i]-2)%11+1
|
||||
skin.adjust(i,_[i])
|
||||
end
|
||||
function skin.next(i)--next skin for [i]
|
||||
local _=setting.skin
|
||||
_[i]=_[i]%11+1
|
||||
skin.adjust(i,_[i])
|
||||
end
|
||||
function skin.rotate(i)--change direction of [i]
|
||||
setting.face[i]=(setting.face[i]+1)%4
|
||||
SFX.play("rotate")
|
||||
end
|
||||
function skin.change(i)--change to skin_set[i]
|
||||
for _=1,7 do
|
||||
skin.adjust(_,setting.skin[_])
|
||||
end
|
||||
for _=8,13 do
|
||||
blockSkin[_]=skin.lib[i][_+4]
|
||||
blockSkinMini[_]=skin.libMini[i][_+4]
|
||||
end
|
||||
end
|
||||
function skin.adjust(i,id)--load color/image/image_mini of [i] from lib
|
||||
local S=setting.skinSet
|
||||
blockSkin[i]=skin.lib[S][id]
|
||||
blockSkinMini[i]=skin.libMini[S][id]
|
||||
blockColor[i]=skin.libColor[id]
|
||||
blockSkin=skin.lib[i]
|
||||
blockSkinMini=skin.libMini[i]
|
||||
end
|
||||
return skin
|
||||
@@ -13,8 +13,9 @@ local function newPlanet()
|
||||
planet.y=H*.5+sin(a)*(R+r)
|
||||
planet.vx=-cos(a+rnd()-.5)*.0626
|
||||
planet.vy=-sin(a+rnd()-.5)*.0626
|
||||
planet.R=.7+rnd()*.2
|
||||
planet.G=.7+rnd()*.1
|
||||
planet.R=.7+rnd()*.22
|
||||
planet.G=planet.R+rnd()*.16-.1
|
||||
planet.B=.7+rnd()*.2
|
||||
end
|
||||
|
||||
local space={}--LIB
|
||||
@@ -50,9 +51,9 @@ function space.draw()
|
||||
if not stars[1]then return end
|
||||
gc.translate(-50,-50)
|
||||
gc.setLineWidth(7)
|
||||
gc.setColor(planet.R,planet.G,.6,.1626)
|
||||
gc.setColor(planet.R,planet.G,planet.B,.026)
|
||||
gc.circle("line",planet.x,planet.y,planet.r+1)
|
||||
gc.setColor(planet.R,planet.G,.6,.26)
|
||||
gc.setColor(planet.R,.6,planet.B,.0626)
|
||||
gc.circle("fill",planet.x,planet.y,planet.r)
|
||||
gc.setColor(.9,.9,.9)
|
||||
for i=1,2600,5 do
|
||||
|
||||
@@ -1,19 +1,6 @@
|
||||
local min=math.min
|
||||
local mini=love.window.isMinimized
|
||||
local task={}
|
||||
function task.pauseGame()
|
||||
if not mini()then
|
||||
pauseTimer=pauseTimer+1
|
||||
end
|
||||
return pauseTimer==50
|
||||
end
|
||||
function task.resumeGame()
|
||||
pauseTimer=pauseTimer-1
|
||||
if pauseTimer==0 then
|
||||
scene.swapTo("play","none")
|
||||
return true
|
||||
end
|
||||
end
|
||||
function task.finish(P)
|
||||
if scene.cur~="play"then return true end
|
||||
P.endCounter=P.endCounter+1
|
||||
@@ -81,15 +68,4 @@ function task.bgmFadeIn(_,id)
|
||||
src:setVolume(v)
|
||||
if v>=setting.bgm*.1 then return true end
|
||||
end
|
||||
function task.settingSaved(_,T)
|
||||
T[1]=T[1]-1
|
||||
if T[1]==0 then
|
||||
if scene.cur=="main"then
|
||||
TEXT(text.settingSaved,370,330,28,"appear")
|
||||
else
|
||||
TEXT(text.needRestart,1130,130,28,"appear")
|
||||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
return task
|
||||
698
player.lua
698
player.lua
File diff suppressed because it is too large
Load Diff
28
scene.lua
28
scene.lua
@@ -19,6 +19,7 @@ local sceneInit={
|
||||
1,--Loading counter
|
||||
#voiceName,--Loading bar lenth(current)
|
||||
require("parts/getTip"),--tip
|
||||
skip=false,--if skipping
|
||||
}
|
||||
end,
|
||||
intro=function()
|
||||
@@ -46,12 +47,12 @@ local sceneInit={
|
||||
sceneTemp=1
|
||||
end
|
||||
end,
|
||||
mode=function()
|
||||
mode=function(org)
|
||||
curBG="none"
|
||||
BGM.play("blank")
|
||||
destroyPlayers()
|
||||
local cam=mapCam
|
||||
cam.zoomK=scene.swap.tar=="mode"and 5 or 1
|
||||
cam.zoomK=org=="main"and 5 or 1
|
||||
if cam.sel then
|
||||
local M=modes[cam.sel]
|
||||
cam.x,cam.y=M.x*cam.k+180,M.y*cam.k
|
||||
@@ -82,9 +83,10 @@ local sceneInit={
|
||||
end
|
||||
curBG=modeEnv.bg
|
||||
end,
|
||||
pause=function()
|
||||
pause=function(org)
|
||||
local S=players[1].stat
|
||||
sceneTemp={
|
||||
timer=org=="play"and 0 or 50,
|
||||
toTime(S.time),
|
||||
S.key.."/"..S.rotate.."/"..S.hold,
|
||||
S.piece.." "..(int(S.piece/S.time*100)*.01).."PPS",
|
||||
@@ -95,10 +97,10 @@ local sceneInit={
|
||||
S.clear_1.."/"..S.clear_2.."/"..S.clear_3.."/"..S.clear_4,
|
||||
"["..S.spin_0.."]/"..S.spin_1.."/"..S.spin_2.."/"..S.spin_3,
|
||||
S.b2b.."[+"..S.b3b.."]",
|
||||
S.pc,
|
||||
S.pc.."["..S.c.."]",
|
||||
format("%.3f",S.atk/S.row),
|
||||
S.extraPiece,
|
||||
format("%.2f",100*max(1-S.extraRate/S.piece,0)),
|
||||
format("%.2f%%",100*max(1-S.extraRate/S.piece,0)),
|
||||
}
|
||||
end,
|
||||
setting_game=function()
|
||||
@@ -111,6 +113,16 @@ local sceneInit={
|
||||
sceneTemp={last=0,jump=0}--last sound time,animation count(10→0)
|
||||
curBG="none"
|
||||
end,
|
||||
setting_control=function()
|
||||
sceneTemp={
|
||||
das=setting.das,
|
||||
arr=setting.arr,
|
||||
pos=0,
|
||||
dir=1,
|
||||
wait=30,
|
||||
}
|
||||
curBG="strap"
|
||||
end,
|
||||
setting_key=function()
|
||||
sceneTemp={
|
||||
board=1,
|
||||
@@ -148,7 +160,7 @@ local sceneInit={
|
||||
format("%d/%d/%d/%d",S.clear_1,S.clear_2,S.clear_3,S.clear_4),
|
||||
format("[%d]/%d/%d/%d",S.spin_0,S.spin_1,S.spin_2,S.spin_3),
|
||||
S.b2b.."[+"..S.b3b.."]",
|
||||
S.pc,
|
||||
S.pc.."["..S.c.."]",
|
||||
format("%.2f",S.atk/S.row),
|
||||
format("%d[%.3f%%]",S.extraPiece,100*max(1-S.extraRate/S.piece,0)),
|
||||
}
|
||||
@@ -195,8 +207,8 @@ local backFunc={
|
||||
setting_graphic=function()saveSetting()end,
|
||||
setting_sound= function()saveSetting()end,
|
||||
}
|
||||
function scene.init(s)
|
||||
if sceneInit[s]then sceneInit[s]()end
|
||||
function scene.init(s,org)
|
||||
if sceneInit[s]then sceneInit[s](org)end
|
||||
end
|
||||
function scene.push(tar,style)
|
||||
if not scene.swapping then
|
||||
|
||||
@@ -10,6 +10,7 @@ end
|
||||
local c
|
||||
|
||||
gc.setDefaultFilter("nearest","nearest")
|
||||
gc.setColor(1,1,1)
|
||||
local VKI=N("/image/virtualkey.png")
|
||||
VKIcon={}
|
||||
for i=1,#actName do
|
||||
@@ -18,7 +19,6 @@ for i=1,#actName do
|
||||
end
|
||||
|
||||
miniBlock={}
|
||||
gc.setColor(1,1,1)
|
||||
for i=1,7 do
|
||||
local b=blocks[i][0]
|
||||
miniBlock[i]=C(#b[1],#b)
|
||||
@@ -74,9 +74,10 @@ drawableText={
|
||||
|
||||
custom=T(80),
|
||||
setting_game=T(80),setting_graphic=T(80),setting_sound=T(80),
|
||||
setting_control=T(70),setting_skin=T(70),
|
||||
preview=T(40),
|
||||
keyboard=T(25),joystick=T(25),
|
||||
ctrlSetHelp=T(30),
|
||||
blockLayout=T(70),
|
||||
musicRoom=T(80),
|
||||
nowPlaying=T(50),
|
||||
VKTchW=T(30),VKOrgW=T(30),VKCurW=T(30),
|
||||
|
||||
45
timer.lua
45
timer.lua
@@ -82,6 +82,7 @@ function Tmr.load()
|
||||
scene.swapTo("intro","none")
|
||||
end
|
||||
end
|
||||
if L.skip and not scene.swapping then goto R end
|
||||
end
|
||||
function Tmr.intro()
|
||||
sceneTemp=sceneTemp+1
|
||||
@@ -220,8 +221,9 @@ function Tmr.play(dt)
|
||||
end
|
||||
end
|
||||
for i=1,#virtualkey do
|
||||
if virtualkeyPressTime[i]>0 then
|
||||
virtualkeyPressTime[i]=virtualkeyPressTime[i]-1
|
||||
local _=virtualkey[i]
|
||||
if _.pressTime>0 then
|
||||
_.pressTime=_.pressTime-1
|
||||
end
|
||||
end
|
||||
|
||||
@@ -235,10 +237,14 @@ function Tmr.play(dt)
|
||||
local P=players[p]
|
||||
if P.keyPressing[1]then
|
||||
if P.moving>0 then P.moving=0 end
|
||||
P.moving=P.moving-1
|
||||
if -P.moving<=P.gameEnv.das then
|
||||
P.moving=P.moving-1
|
||||
end
|
||||
elseif P.keyPressing[2]then
|
||||
if P.moving<0 then P.moving=0 end
|
||||
P.moving=P.moving+1
|
||||
if P.moving<=P.gameEnv.das then
|
||||
P.moving=P.moving+1
|
||||
end
|
||||
else
|
||||
P.moving=0
|
||||
end
|
||||
@@ -266,6 +272,9 @@ function Tmr.pause(dt)
|
||||
if not gameResult then
|
||||
pauseTime=pauseTime+dt
|
||||
end
|
||||
if sceneTemp.timer<50 then
|
||||
sceneTemp.timer=sceneTemp.timer+1
|
||||
end
|
||||
end
|
||||
function Tmr.setting_sound()
|
||||
local t=sceneTemp.jump
|
||||
@@ -273,4 +282,32 @@ function Tmr.setting_sound()
|
||||
sceneTemp.jump=t-1
|
||||
end
|
||||
end
|
||||
function Tmr.setting_control()
|
||||
local T=sceneTemp
|
||||
if T.wait>0 then
|
||||
T.wait=T.wait-1
|
||||
if T.wait==0 then
|
||||
T.pos=T.pos+T.dir
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
if T.das>0 then
|
||||
T.das=T.das-1
|
||||
else
|
||||
T.arr=T.arr-1
|
||||
if T.arr==0 then
|
||||
T.pos=T.pos+T.dir
|
||||
T.arr=setting.arr
|
||||
elseif T.arr==-1 then
|
||||
T.pos=T.dir>0 and 8 or 0
|
||||
T.arr=setting.arr
|
||||
end
|
||||
if T.pos%8==0 then
|
||||
T.dir=-T.dir
|
||||
T.wait=20
|
||||
T.das=setting.das
|
||||
end
|
||||
end
|
||||
end
|
||||
return Tmr
|
||||
44
toolfunc.lua
44
toolfunc.lua
@@ -55,9 +55,10 @@ local drawableTextLoad={
|
||||
"setting_graphic",
|
||||
"setting_sound",
|
||||
"setting_sound",
|
||||
"setting_control",
|
||||
"setting_skin",
|
||||
"keyboard","joystick",
|
||||
"ctrlSetHelp",
|
||||
"blockLayout",
|
||||
"musicRoom",
|
||||
"nowPlaying",
|
||||
"VKTchW","VKOrgW","VKCurW",
|
||||
@@ -97,6 +98,8 @@ function restoreVirtualKey()
|
||||
B.x=O.x
|
||||
B.y=O.y
|
||||
B.r=O.r
|
||||
B.isDown=false
|
||||
B.pressTime=0
|
||||
end
|
||||
if not modeEnv.Fkey then
|
||||
virtualkey[9].ava=false
|
||||
@@ -117,12 +120,9 @@ function copyBoard()
|
||||
for y=1,H do
|
||||
local S=""
|
||||
local L=preField[y]
|
||||
for x=1,10,2 do
|
||||
local H=L[x]
|
||||
local L=L[x+1]
|
||||
if H<8 then H=H+1 end
|
||||
if L<8 then L=L+1 end
|
||||
S=S..char(H*16+L)
|
||||
for x=1,10 do
|
||||
local _=L[x]+1
|
||||
S=S..char(_)
|
||||
end
|
||||
str=str..S
|
||||
end
|
||||
@@ -132,7 +132,7 @@ end
|
||||
function pasteBoard()
|
||||
local str=love.system.getClipboardText()
|
||||
local fX,fY=1,1--*ptr for Field(r*10+(c-1))
|
||||
local _,__
|
||||
local _,Bid
|
||||
local p=find(str,":")--ptr*
|
||||
if p then str=sub(str,p+1)end
|
||||
_,str=pcall(data.decode,"string","base64",str)
|
||||
@@ -147,13 +147,12 @@ function pasteBoard()
|
||||
else goto FINISH
|
||||
end
|
||||
end--str end
|
||||
__=_%16--low4b
|
||||
_=(_-__)/16--high4b
|
||||
if _>13 or __>13 then goto ERROR end--illegal blockid
|
||||
if _<9 then _=_-1 end if __<9 then __=__-1 end
|
||||
preField[fY][fX]=_;preField[fY][fX+1]=__
|
||||
if fX<9 then
|
||||
fX=fX+2
|
||||
__=_%32-1--block id
|
||||
if __>16 then goto ERROR end--illegal blockid
|
||||
_=int(_/32)--mode id
|
||||
preField[fY][fX]=__
|
||||
if fX<10 then
|
||||
fX=fX+1
|
||||
else
|
||||
if fY==20 then goto FINISH end
|
||||
fX=1;fY=fY+1
|
||||
@@ -255,9 +254,8 @@ function royaleLevelup()
|
||||
end
|
||||
end
|
||||
function pauseGame()
|
||||
if pauseTimer==0 then
|
||||
if not scene.swapping then
|
||||
restartCount=0--Avoid strange darkness
|
||||
newTask(Event_task.pauseGame)
|
||||
if not gameResult then
|
||||
pauseCount=pauseCount+1
|
||||
end
|
||||
@@ -273,9 +271,7 @@ function pauseGame()
|
||||
end
|
||||
end
|
||||
function resumeGame()
|
||||
if pauseTimer==50 then
|
||||
newTask(Event_task.resumeGame)
|
||||
end
|
||||
scene.swapTo("play","none")
|
||||
end
|
||||
function loadGame(M)
|
||||
--rec={}
|
||||
@@ -291,7 +287,6 @@ function loadGame(M)
|
||||
end
|
||||
function resetPartGameData()
|
||||
gameResult=false
|
||||
pauseTimer=0
|
||||
frame=150-setting.reTime*15
|
||||
destroyPlayers()
|
||||
curMode.load()
|
||||
@@ -326,7 +321,6 @@ function resetPartGameData()
|
||||
end
|
||||
function resetGameData()
|
||||
gameResult=false
|
||||
pauseTimer=0--Pause timer for animation
|
||||
frame=150-setting.reTime*15
|
||||
garbageSpeed=1
|
||||
pauseTime=0--Time paused
|
||||
@@ -356,10 +350,6 @@ function resetGameData()
|
||||
restoreVirtualKey()
|
||||
stat.game=stat.game+1
|
||||
freeRow.reset(30*#players)
|
||||
for i=1,20 do
|
||||
virtualkeyDown[i]=X
|
||||
virtualkeyPressTime[i]=0
|
||||
end
|
||||
SFX.play("ready")
|
||||
collectgarbage()
|
||||
end
|
||||
@@ -367,7 +357,7 @@ function gameStart()
|
||||
SFX.play("start")
|
||||
for P=1,#players do
|
||||
P=players[P]
|
||||
P:freshNext()
|
||||
P:popNext()
|
||||
P.timing=true
|
||||
P.control=true
|
||||
end
|
||||
|
||||
244
updateLog.lua
244
updateLog.lua
@@ -1,46 +1,100 @@
|
||||
local S=[=[
|
||||
"Patron"(rmb10+)(ordered by first char):
|
||||
10元
|
||||
八零哥
|
||||
dtg
|
||||
Fireboos
|
||||
gggf127
|
||||
加油啊,钉钉动了的大哥哥(T3228)
|
||||
金巧
|
||||
乐↗乐↘
|
||||
立斐
|
||||
仁参
|
||||
Sasoric"
|
||||
Sasoric
|
||||
sfqr
|
||||
时雪
|
||||
T080
|
||||
ThTsOd"
|
||||
ThTsOd
|
||||
夏小亚
|
||||
xin心痕
|
||||
心痕
|
||||
蕴空之灵
|
||||
yyangdid
|
||||
10元
|
||||
?[D*a]
|
||||
|
||||
Thanks!
|
||||
|
||||
Future outlook:
|
||||
New mode:
|
||||
useful game Abbr. test
|
||||
finesse exam(3next,1pt/mino,drop to score)
|
||||
round-based dig
|
||||
Infinite battle
|
||||
Bigbang
|
||||
Rhythm
|
||||
Combo
|
||||
Square
|
||||
Shifting field
|
||||
Shifting field(left/right)
|
||||
Other:
|
||||
bag sep-line switch
|
||||
more drop fx,like light on locked block
|
||||
game recording
|
||||
(powerinfo switch)
|
||||
new virtualWidgets like joysticks
|
||||
splashing block
|
||||
custom sequence
|
||||
splashing block
|
||||
more FXs & 3d features & animations
|
||||
Encrypt source code(compile to byte code)
|
||||
new AI:task-Z
|
||||
CC smarter(think of garbage buffer)
|
||||
0.8.12:
|
||||
|
||||
|
||||
0.8.15:Bug Fixed
|
||||
new:
|
||||
can switch line-clear text now
|
||||
new attack way "Clear"(half-clear)
|
||||
give every update a name!
|
||||
changed:
|
||||
animation time of lock effect little changed
|
||||
AI change target more slowly
|
||||
Author.dignity-=1
|
||||
fixed:
|
||||
180° I spin kicklist error
|
||||
AI will kill itself when spawn dir. of mino changed
|
||||
error when reach 400 in 20G(Lunatic)
|
||||
error block color in modes with starting field
|
||||
cannot play pctrain mode
|
||||
|
||||
0.8.14:Cool FX
|
||||
new:
|
||||
click/tap/any-key to skip loading animation
|
||||
lock animation
|
||||
changed:
|
||||
display scene info when error
|
||||
code:
|
||||
many optimization
|
||||
fixed:
|
||||
error when attack
|
||||
error garbage line color
|
||||
error in finesse checking
|
||||
some times error when touch screen
|
||||
touch/press release with no press,then error
|
||||
|
||||
0.8.13:O-spin Update++
|
||||
new:
|
||||
a independent page to set DAS/ARR,with an animation for preview
|
||||
changed:
|
||||
new virtualkey animation
|
||||
freer drawing mode(Incompatible with old ver.)
|
||||
combo&b3b attack changed
|
||||
score of spins little changed
|
||||
fixed:
|
||||
wrong behavior in pause scene
|
||||
ospin error in 0.8.12
|
||||
memory leakage in t49/t99
|
||||
new behavior of widgets
|
||||
|
||||
0.8.12:Bountful Update
|
||||
new:
|
||||
layout setting:skin system with customizable block color/direction
|
||||
more information in pause page
|
||||
more information when pause
|
||||
block has more color(7→11)
|
||||
skin:smooth(MrZ),contrast(MrZ),steel(kulumi),ball(shaw)
|
||||
changed:
|
||||
@@ -51,12 +105,13 @@ Future outlook:
|
||||
canceled invalid game
|
||||
easier to unlock custom mode
|
||||
some text changed
|
||||
//better line-clear process
|
||||
//merge event.lua to player.lua
|
||||
//new skin image format
|
||||
//same format for all file
|
||||
//better virtualkey-scanning opportunity,bit faster when many AI
|
||||
//some player-method name changed
|
||||
code:
|
||||
better line-clear process
|
||||
merge event.lua to player.lua
|
||||
new skin image format
|
||||
same format for all file
|
||||
better virtualkey-scanning opportunity,bit faster when many AI
|
||||
some player-method name changed
|
||||
fixed:
|
||||
an error of pause button
|
||||
score may be float number
|
||||
@@ -64,7 +119,8 @@ Future outlook:
|
||||
crash when paste illegal data to drawing mode
|
||||
stage reset problem in t49/t99 mode
|
||||
wrong info in tech-L/U/U+ mode
|
||||
0.8.11:
|
||||
|
||||
0.8.11:Total Update
|
||||
changed:
|
||||
better rule of checking invalid game
|
||||
can setting when pause
|
||||
@@ -76,7 +132,8 @@ Future outlook:
|
||||
must hold R to restart when finished the game
|
||||
sth about screen size
|
||||
some O-spin error
|
||||
line counting when pc(full b2b)
|
||||
error line counting when pc(full b2b)
|
||||
|
||||
0.8.10:
|
||||
new BGM:Distortion(master-final)
|
||||
all background darker
|
||||
@@ -84,16 +141,17 @@ Future outlook:
|
||||
fixed:
|
||||
error when finish master/ultra mode
|
||||
shakeFX no effect when below 3
|
||||
0.8.9:
|
||||
|
||||
0.8.9:System Detail Update
|
||||
invalid game when pause too much
|
||||
quick play re-added
|
||||
new BGM:Oxygen(c4w&pc training)
|
||||
space background little changed
|
||||
fixed:
|
||||
touch/press release with no press(don't know why)
|
||||
0.8.8+:
|
||||
|
||||
0.8.8+:Bug-Fix Update
|
||||
fixed many fatal bugs
|
||||
0.8.8:
|
||||
|
||||
0.8.8:Space BG Update
|
||||
background now is cool space with "planets" and "stars",not boring falling tetrominos!
|
||||
records with date
|
||||
adjustable waiting time before start
|
||||
@@ -107,20 +165,23 @@ Future outlook:
|
||||
cannot press invisible func key
|
||||
fixed:some mode error
|
||||
add many fatal bugs
|
||||
0.8.7:
|
||||
|
||||
0.8.7:Game Detail Update
|
||||
better user experience in mode selecting
|
||||
support 2^n G falling speed
|
||||
speed of marathon mode changed
|
||||
shorter clipboard string(when air above)
|
||||
attack system/score system little changed
|
||||
fixed:rank system,some mode error when enter(again!)
|
||||
0.8.6:
|
||||
|
||||
0.8.6:System Detail Update
|
||||
gamepad can adjust key
|
||||
add SFX when enter game
|
||||
map GUI little adjusted
|
||||
event system little changed(no ctrl when scene swapping)
|
||||
fixed:rank system,some mode error when enter
|
||||
0.8.5-:
|
||||
|
||||
0.8.5-:Exploration Update
|
||||
mode map!Brandly new GUI for mode selecting
|
||||
mode unlock system,not that scary for noob
|
||||
every mode has rank calculating method(may some mistakes/inappropriate number)
|
||||
@@ -131,49 +192,59 @@ Future outlook:
|
||||
better widget performence
|
||||
remove Qplay
|
||||
many bug fixed
|
||||
0.8.4:
|
||||
|
||||
0.8.4:Miya Update+
|
||||
vocal more natural(important,may cause new bug)
|
||||
a bit better performence on mobile devices
|
||||
fatal bug fixed
|
||||
0.8.3:
|
||||
|
||||
0.8.3:Miya Update
|
||||
new widget appearence
|
||||
cuter miya
|
||||
0.8.2+:
|
||||
GUI adjusted
|
||||
|
||||
0.8.2:Graphics Update
|
||||
miya figure added
|
||||
0.8.2:
|
||||
new widget appearence
|
||||
GUI adjusted
|
||||
bug fixed
|
||||
0.8.1:
|
||||
|
||||
0.8.1:Power Info Update
|
||||
more FX level
|
||||
better battery info displaying
|
||||
3 next in GMroll
|
||||
bug fixed
|
||||
0.8.0:
|
||||
|
||||
0.8.0:Small Update
|
||||
remake text system
|
||||
more details
|
||||
bug fixed
|
||||
0.7.35:
|
||||
|
||||
0.7.35:Bug Fixed
|
||||
bug fixed
|
||||
0.7.34:
|
||||
|
||||
0.7.34:Voice Update+
|
||||
replace most voice
|
||||
shaking FX more natural
|
||||
0.7.33+:
|
||||
|
||||
0.7.33+:Bot Update
|
||||
MORE POWERFUL 9-stack AI
|
||||
add stereo-setting slider
|
||||
code optimized
|
||||
bug fixed
|
||||
0.7.32:
|
||||
|
||||
0.7.32:Virtualkey Update+
|
||||
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:
|
||||
|
||||
0.7.31:Stereo Update
|
||||
stereo system
|
||||
fixed a problem in finesse calculating
|
||||
0.7.30:
|
||||
|
||||
0.7.30:Virtualkey Update
|
||||
auto-tracking virtual key,adjustable parameters!
|
||||
can switch on/off virtuakeys
|
||||
add 7 more key
|
||||
@@ -183,22 +254,27 @@ Future outlook:
|
||||
can use preset in custom mode with keyboard
|
||||
adjusted GUI
|
||||
many bug fixed
|
||||
0.7.28:
|
||||
|
||||
0.7.28:Finesse Update
|
||||
add fineese check(almost useful)
|
||||
code optimized
|
||||
0.7.27:
|
||||
|
||||
0.7.27:O-spin Update+
|
||||
super O transform system
|
||||
optimized light system(no used)
|
||||
bug fixed
|
||||
0.7.26:
|
||||
|
||||
0.7.26:Bug Fixed
|
||||
new skin
|
||||
import light lib
|
||||
many bug fixed
|
||||
0.7.25:
|
||||
|
||||
0.7.25:Demo Update
|
||||
demo play at main menu
|
||||
ALMOST reconstructed WHOLE PLAYER SYSTEM,NEED TEST
|
||||
many bug fixed
|
||||
0.7.24(0.7.23):
|
||||
|
||||
0.7.23/24:Feast of Hearing
|
||||
REMAKE ALL BGM!
|
||||
more settings with brand new GUI!
|
||||
new mode:Master-Final
|
||||
@@ -210,7 +286,8 @@ Future outlook:
|
||||
louder sound
|
||||
code optimized
|
||||
many bugs fixed
|
||||
0.7.22:
|
||||
|
||||
0.7.22:Graphics Update
|
||||
scoring system
|
||||
smooth dropping
|
||||
can change FX level
|
||||
@@ -225,20 +302,23 @@ Future outlook:
|
||||
compressed setting/data
|
||||
support 10% step alpha of virtual key
|
||||
many code optimized&bugs fixed
|
||||
0.7.21:
|
||||
|
||||
0.7.21:Title Update
|
||||
new title image
|
||||
more GUI details
|
||||
many bugs fixed
|
||||
0.7.20:
|
||||
|
||||
0.7.20:Music Room Update
|
||||
add music room
|
||||
change block/space apperance in draw mode
|
||||
field shake animation
|
||||
default sets of custom options
|
||||
can set BG/BGM in custom mode
|
||||
bug fixed
|
||||
0.7.19:
|
||||
secret option!
|
||||
macOS version!
|
||||
|
||||
0.7.19:Voice Update
|
||||
voice system added(voice by Miya)
|
||||
support macOS!
|
||||
new mode:C4W training
|
||||
rendering of royale mode optimized again
|
||||
add "free cell" in draw mode
|
||||
@@ -246,14 +326,16 @@ Future outlook:
|
||||
new difficulty in infinite mode
|
||||
new background/sound effect in master mode
|
||||
bug fixed
|
||||
0.7.18:
|
||||
|
||||
0.7.18:Skin Update
|
||||
3 new block skins!(one skin origional by Miya(nya~))
|
||||
better restarting(to prevent mistakenly touching)
|
||||
switch display of puzzle mode
|
||||
adjust UI
|
||||
code optimized
|
||||
default custom options changed to as infinite mode
|
||||
0.7.17:
|
||||
|
||||
0.7.17:Pause Update
|
||||
display game stats when pause
|
||||
more options in statistics
|
||||
better pausing
|
||||
@@ -262,28 +344,33 @@ Future outlook:
|
||||
adjust vibrate level for mobile devices
|
||||
little optimized
|
||||
bugs fixed
|
||||
0.7.16:
|
||||
bugs fixed
|
||||
|
||||
0.7.16:Game Detail Update
|
||||
change rules of custom puzzle mode
|
||||
change rules of TSD mode
|
||||
better pausing
|
||||
speed optimized
|
||||
adjust difficulty of dig mode
|
||||
0.7.15:
|
||||
bugs fixed
|
||||
|
||||
0.7.15:Puzzle Update
|
||||
can make puzzle by drawing mode
|
||||
can pause game with animation
|
||||
change icon of "Functional key"
|
||||
speed optimized
|
||||
bugs fixed
|
||||
0.7.14:
|
||||
|
||||
0.7.14:Creativity Update
|
||||
drawing mode in custom game
|
||||
adjustable virtual keys with mouse
|
||||
speed optimized
|
||||
rotate also create shade
|
||||
0.7.13+:
|
||||
|
||||
0.7.13+:Small Update
|
||||
change difficulty of survivor mode
|
||||
little game rule change
|
||||
bugs fixed(AI control error)
|
||||
|
||||
0.7.13:
|
||||
Chinese game name:方块研究所
|
||||
SUPER COOL instant moving effect
|
||||
@@ -294,7 +381,8 @@ Future outlook:
|
||||
code reconstructed
|
||||
bugs fixed(error when seq=his,size of custom oppo)
|
||||
debug key change to F8
|
||||
0.7.12:
|
||||
|
||||
0.7.12:Total Update
|
||||
AI learned to switch attack mode
|
||||
seperate master mode from marathon mode
|
||||
master mode more interesting
|
||||
@@ -307,7 +395,8 @@ Future outlook:
|
||||
swap target by combo key/press
|
||||
some Chinese translaton edited
|
||||
[reconstruct event system]
|
||||
0.7.11:
|
||||
|
||||
0.7.11:Total Update
|
||||
some Chinese translaton edited
|
||||
add bone block in 2 hardest marathon(new block-fresh system)
|
||||
play sound when get badges in royale mode
|
||||
@@ -318,35 +407,40 @@ Future outlook:
|
||||
fix 6 next in classic mode
|
||||
add QR code in help page
|
||||
change some detials
|
||||
0.7.10:
|
||||
更完全的中文翻译
|
||||
|
||||
0.7.10:Small Update
|
||||
full Chinese translation
|
||||
add Classic mode
|
||||
change O spin's behaviour
|
||||
fix bugs
|
||||
0.7.9:
|
||||
bugs fixed
|
||||
|
||||
0.7.9:O-spin Update
|
||||
O spin is a lie
|
||||
better attacking pointer
|
||||
language system
|
||||
change rotate system
|
||||
change BGM&BG set
|
||||
code optimized
|
||||
fix bugs
|
||||
0.7.8:
|
||||
bugs fixed
|
||||
|
||||
0.7.8:Performance Update
|
||||
GPU usage decreased much more than before
|
||||
add virtual key animation
|
||||
display player's rank after death in royale mode
|
||||
fix sequence error of PC training mode
|
||||
adjust difficulty of suvivor mode
|
||||
code optimized
|
||||
fix bugs
|
||||
0.7.7:
|
||||
bugs fixed
|
||||
|
||||
0.7.7:Mode Update
|
||||
add dig mode
|
||||
add survivor mode
|
||||
combine some modes
|
||||
change some GUI
|
||||
more SFXs
|
||||
fix bugs
|
||||
0.7.6:
|
||||
bugs fixed
|
||||
|
||||
0.7.6:Mode Update
|
||||
new font
|
||||
add DIFFICULTY selection
|
||||
virtual keys give visual feedback(PC/phone)
|
||||
@@ -358,7 +452,8 @@ Future outlook:
|
||||
more FXs in royale mode
|
||||
fix all attacking bug of royale mode
|
||||
change sequence of TSD-only mode to bag7
|
||||
0.7.5:
|
||||
|
||||
0.7.5:Total Update
|
||||
reduce difficuly of PC training mode,and add more patterns
|
||||
reduce difficuly of death mode
|
||||
add PC challenge mode
|
||||
@@ -372,16 +467,19 @@ Future outlook:
|
||||
adjust GUI of royale mode
|
||||
change sequence of TSD-only mode
|
||||
royale mode use LESS GPU
|
||||
0.7.4:
|
||||
|
||||
0.7.4:Bug Update
|
||||
add a lot of bugs
|
||||
0.7.3:
|
||||
|
||||
0.7.3:Game Detail Update
|
||||
add infinite target in custom
|
||||
fix TSD-only mode result+1 when finishing with a wrong clear
|
||||
change sequence generator of TSD-only mode
|
||||
GUI position edited
|
||||
Fix Screen flow
|
||||
smarter AI
|
||||
0.7.2:
|
||||
|
||||
0.7.2:Mode Update
|
||||
add PC training mode
|
||||
add TSD-only mode
|
||||
remove non-sense s/z spin double
|
||||
|
||||
185
widgetList.lua
185
widgetList.lua
@@ -190,21 +190,28 @@ local Widget={
|
||||
back= newButton(640, 630,180,60, C.white, 35,scene.back),
|
||||
},
|
||||
draw={
|
||||
block1= newButton(920, 80, 120,120,C.red, 60,setPen(1)),
|
||||
block2= newButton(1060, 80, 120,120,C.green, 60,setPen(2)),
|
||||
block3= newButton(1200, 80, 120,120,C.orange, 60,setPen(3)),
|
||||
block4= newButton(920, 220,120,120,C.blue, 60,setPen(4)),
|
||||
block5= newButton(1060, 220,120,120,C.magenta, 60,setPen(5)),
|
||||
block6= newButton(1200, 220,120,120,C.yellow, 60,setPen(6)),
|
||||
block7= newButton(920, 360,120,120,C.cyan, 60,setPen(7)),
|
||||
gb1= newButton(1060, 360,120,120,C.darkGrey, 60,setPen(9)),
|
||||
gb2= newButton(1200, 360,120,120,C.grey, 60,setPen(10)),
|
||||
gb3= newButton(920, 500,120,120,C.darkPurple, 60,setPen(11)),
|
||||
gb4= newButton(1060, 500,120,120,C.darkRed, 60,setPen(12)),
|
||||
gb5= newButton(1200, 500,120,120,C.darkGreen, 60,setPen(13)),
|
||||
clear= newButton(780, 80, 120,120,C.white, 40,pressKey("delete")),
|
||||
any= newButton(780, 220,120,120,C.lightGrey, 40,setPen(0)),
|
||||
space= newButton(780, 360,120,120,C.grey, 65,setPen(-1)),
|
||||
b1= newButton(500+65*1, 150,58,58,C.red, 30,setPen(1)),--B1
|
||||
b2= newButton(500+65*2, 150,58,58,C.orange, 30,setPen(2)),--B2
|
||||
b3= newButton(500+65*3, 150,58,58,C.yellow, 30,setPen(3)),--B3
|
||||
b4= newButton(500+65*4, 150,58,58,C.grass, 30,setPen(4)),--B4
|
||||
b5= newButton(500+65*5, 150,58,58,C.green, 30,setPen(5)),--B5
|
||||
b6= newButton(500+65*6, 150,58,58,C.water, 30,setPen(6)),--B6
|
||||
b7= newButton(500+65*7, 150,58,58,C.cyan, 30,setPen(7)),--B7
|
||||
b8= newButton(500+65*8, 150,58,58,C.blue, 30,setPen(8)),--B8
|
||||
b9= newButton(500+65*9, 150,58,58,C.purple, 30,setPen(9)),--B9
|
||||
b10= newButton(500+65*10,150,58,58,C.magenta, 30,setPen(10)),--B10
|
||||
b11= newButton(500+65*11,150,58,58,C.pink, 30,setPen(11)),--B11
|
||||
|
||||
b12= newButton(500+65*1, 230,58,58,C.darkGrey, 30,setPen(12)),--Bone
|
||||
b13= newButton(500+65*2, 230,58,58,C.grey, 30,setPen(13)),--GB1
|
||||
b14= newButton(500+65*3, 230,58,58,C.lightGrey, 30,setPen(14)),--GB2
|
||||
b15= newButton(500+65*4, 230,58,58,C.darkPurple, 30,setPen(15)),--GB3
|
||||
b16= newButton(500+65*5, 230,58,58,C.darkRed, 30,setPen(16)),--GB4
|
||||
b17= newButton(500+65*6, 230,58,58,C.darkGreen, 30,setPen(17)),--GB5
|
||||
|
||||
any= newButton(600, 360,120,120,C.lightGrey, 40,setPen(0)),
|
||||
space= newButton(730, 360,120,120,C.grey, 65,setPen(-1)),
|
||||
clear= newButton(1200, 500,120,120,C.white, 40,pressKey("delete")),
|
||||
demo= newSwitch(755, 640,30,function()return sceneTemp.demo end,function()sceneTemp.demo=not sceneTemp.demo end),
|
||||
copy= newButton(920, 640,120,120,C.lightRed, 35,copyBoard),
|
||||
paste= newButton(1060, 640,120,120,C.lightBlue, 35,pasteBoard),
|
||||
@@ -216,70 +223,54 @@ local Widget={
|
||||
pause={
|
||||
resume= newButton(640,290,240,100,C.white,30,resumeGame),
|
||||
restart=newButton(640,445,240,100,C.white,33,function()
|
||||
if pauseTimer==50 then
|
||||
clearTask("play")
|
||||
updateStat()
|
||||
resetGameData()
|
||||
scene.swapTo("play","none")
|
||||
end
|
||||
clearTask("play")
|
||||
updateStat()
|
||||
resetGameData()
|
||||
scene.swapTo("play","none")
|
||||
end),
|
||||
setting=newButton(1130,70,180,90,C.lightBlue,35,function()
|
||||
scene.push()scene.swapTo("setting_sound")
|
||||
end),
|
||||
setting=newButton(1130,70,180,90,C.lightBlue,35,function()scene.push()scene.swapTo("setting_sound")end),
|
||||
quit= newButton(640,600,240,100,C.white,35,scene.back),
|
||||
},
|
||||
setting_game={
|
||||
graphic=newButton(200,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_graphic")end,nil,"sound"),
|
||||
sound= newButton(1080,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_sound")end, nil,"reset"),
|
||||
reset= newButton(100,285,150,80,C.lightRed,18,function()
|
||||
setting.das,setting.arr=10,2
|
||||
setting.sddas,setting.sdarr=0,2
|
||||
local _=Widget.setting_game
|
||||
_.dasU:FX()_.dasD:FX()
|
||||
_.arrU:FX()_.arrD:FX()
|
||||
_.sddasU:FX()_.sddasD:FX()
|
||||
_.sdarrU:FX()_.sdarrD:FX()
|
||||
end,nil,"dasD"),
|
||||
dasD= newButton(230,230,50,50,C.white,40,function()setting.das=setting.das-1 ARRcheck()end,function()return setting.das==0 end, "dasU"),
|
||||
dasU= newButton(450,230,50,50,C.white,40,function()setting.das=setting.das+1 ARRcheck()end,function()return setting.das==30 end, "arrD"),
|
||||
arrD= newButton(550,230,50,50,C.white,40,function()setting.arr=setting.arr-1 DAScheck()end,function()return setting.arr==0 end, "arrU"),
|
||||
arrU= newButton(770,230,50,50,C.white,40,function()setting.arr=setting.arr+1 DAScheck()end,function()return setting.arr==15 end, "sddasD"),
|
||||
sddasD= newButton(230,340,50,50,C.white,40, function()setting.sddas=(setting.sddas-1)%11 end, nil,"sddasU"),
|
||||
sddasU= newButton(450,340,50,50,C.white,40, function()setting.sddas=(setting.sddas+1)%11 end, nil,"sdarrD"),
|
||||
sdarrD= newButton(550,340,50,50,C.white,40, function()setting.sdarr=(setting.sdarr-1)%4 end, nil,"sdarrU"),
|
||||
sdarrU= newButton(770,340,50,50,C.white,40, function()setting.sdarr=(setting.sdarr+1)%4 end, nil,"reTime"),
|
||||
reTime= newSlider(350,430,300,10,30,nil, SETval("reTime"), SETsto("reTime"), nil,"maxNext"),
|
||||
maxNext=newSlider(350,500,300,6,30,nil, SETval("maxNext"), SETsto("maxNext"), nil,"autoPause"),
|
||||
autoPause=newSwitch(350,570,20, SETval("autoPause"), SETrev("autoPause"), nil,"layout"),
|
||||
layout= newButton(590,570,140,70,C.white,35,function()
|
||||
graphic=newButton(200,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_graphic")end, nil,"sound"),
|
||||
sound= newButton(1080,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_sound")end, nil,"ctrl"),
|
||||
ctrl= newButton(290,220,320,80,C.lightYellow,35,function()scene.push()scene.swapTo("setting_control")end, nil,"key"),
|
||||
key= newButton(640,220,320,80,C.lightGreen,35,function()scene.push()scene.swapTo("setting_key")end, nil,"touch"),
|
||||
touch= newButton(990,220,320,80,C.lightBlue,35,function()scene.push()scene.swapTo("setting_touch")end, nil,"reTime"),
|
||||
reTime= newSlider(350,340,300,10,30,nil, SETval("reTime"), SETsto("reTime"), nil,"maxNext"),
|
||||
maxNext=newSlider(350,440,300,6,30,nil, SETval("maxNext"), SETsto("maxNext"), nil,"autoPause"),
|
||||
autoPause=newSwitch(350,540,20, SETval("autoPause"), SETrev("autoPause"), nil,"layout"),
|
||||
layout= newButton(590,540,140,70,C.white,35,function()
|
||||
scene.push()
|
||||
scene.swapTo("setting_skin")
|
||||
end,nil,"ctrl"),
|
||||
ctrl= newButton(1020,230,320,80,C.white,35,function()scene.push()scene.swapTo("setting_key")end, nil,"touch"),
|
||||
touch= newButton(1020,340,320,80,C.white,35,function()scene.push()scene.swapTo("setting_touch")end,nil,"quickR"),
|
||||
quickR= newSwitch(1000,430,35, SETval("quickR"), SETrev("quickR"), nil,"swap"),
|
||||
swap= newSwitch(1000,500,19, SETval("swap"), SETrev("swap"), nil,"fine"),
|
||||
fine= newSwitch(1000,570,20, SETval("fine"), SETrev("fine"), nil,"back"),
|
||||
end,nil,"quickR"),
|
||||
quickR= newSwitch(1050,340,35, SETval("quickR"), SETrev("quickR"), nil,"swap"),
|
||||
swap= newSwitch(1050,440,19, SETval("swap"), SETrev("swap"), nil,"fine"),
|
||||
fine= newSwitch(1050,540,20, SETval("fine"), SETrev("fine"), nil,"back"),
|
||||
back= newButton(1140,650,200,80,C.white,40,scene.back, nil,"graphic"),
|
||||
},
|
||||
setting_graphic={
|
||||
sound= newButton(200,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_sound")end, nil,"game"),
|
||||
game= newButton(1080,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_game")end, nil,"ghost"),
|
||||
ghost= newSwitch(310,180,35,SETval("ghost"), SETrev("ghost"), nil,"center"),
|
||||
center= newSwitch(580,180,35,SETval("center"), SETrev("center"), nil,"smo"),
|
||||
smo= newSwitch(310,260,25,SETval("smo"), SETrev("smo"), nil,"grid"),
|
||||
grid= newSwitch(580,260,30,SETval("grid"), SETrev("grid"), nil,"dropFX"),
|
||||
dropFX= newSlider(310,350,373,5,35,nil,SETval("dropFX"), SETsto("dropFX"), nil,"shakeFX"),
|
||||
shakeFX=newSlider(310,430,373,5,35,nil,SETval("shakeFX"), SETsto("shakeFX"), nil,"atkFX"),
|
||||
atkFX= newSlider(310,510,373,5,35,nil,SETval("atkFX"), SETsto("atkFX"), nil,"frame"),
|
||||
frame= newSlider(310,590,373,10,35,nil,function()return setting.frameMul>35 and setting.frameMul/10 or setting.frameMul/5-4 end,function(i)setting.frameMul=i<5 and 5*i+20 or 10*i end,nil,"fullscreen"),
|
||||
fullscreen=newSwitch(990,180,40,SETval("fullscreen"),function()
|
||||
ghost= newSwitch(310,180,35, SETval("ghost"), SETrev("ghost"), nil,"center"),
|
||||
center= newSwitch(580,180,35, SETval("center"), SETrev("center"), nil,"smooth"),
|
||||
smooth= newSwitch(310,260,25, SETval("smooth"), SETrev("smooth"), nil,"grid"),
|
||||
grid= newSwitch(580,260,30, SETval("grid"), SETrev("grid"), nil,"lockFX"),
|
||||
lockFX= newSlider(310,340,373,3,35,nil, SETval("lockFX"), SETsto("lockFX"), nil,"dropFX"),
|
||||
dropFX= newSlider(310,410,373,5,35,nil, SETval("dropFX"), SETsto("dropFX"), nil,"shakeFX"),
|
||||
shakeFX=newSlider(310,480,373,5,35,nil, SETval("shakeFX"), SETsto("shakeFX"), nil,"atkFX"),
|
||||
atkFX= newSlider(310,550,373,5,35,nil, SETval("atkFX"), SETsto("atkFX"), nil,"frame"),
|
||||
frame= newSlider(310,620,373,10,35,nil,function()return setting.frameMul>35 and setting.frameMul/10 or setting.frameMul/5-4 end,function(i)setting.frameMul=i<5 and 5*i+20 or 10*i end,nil,"text"),
|
||||
text= newSwitch(990,180,35,SETval("text"),SETrev("text"),nil,"fullscreen"),
|
||||
fullscreen=newSwitch(990,260,35,SETval("fullscreen"),function()
|
||||
setting.fullscreen=not setting.fullscreen
|
||||
love.window.setFullscreen(setting.fullscreen)
|
||||
if not setting.fullscreen then
|
||||
love.resize(love.graphics.getWidth(),love.graphics.getHeight())
|
||||
end
|
||||
end,nil,"bg"),
|
||||
bg= newSwitch(990,250,35,SETval("bg"),SETrev("bg"),nil,"bgspace"),
|
||||
bgspace=newSwitch(990,330,35,SETval("bgspace"),function()
|
||||
bg= newSwitch(990,330,35,SETval("bg"),SETrev("bg"),nil,"bgspace"),
|
||||
bgspace=newSwitch(990,410,35,SETval("bgspace"),function()
|
||||
setting.bgspace=not setting.bgspace
|
||||
if setting.bgspace then
|
||||
space.new()
|
||||
@@ -288,48 +279,60 @@ local Widget={
|
||||
end
|
||||
end,nil,"back"),
|
||||
back= newButton(1140,650,200,80,C.white,40,scene.back,nil,"sound"),
|
||||
},
|
||||
},
|
||||
setting_sound={
|
||||
game= newButton(200,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_game")end, nil,"graphic"),
|
||||
graphic=newButton(1080,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_graphic")end, nil,"sfx"),
|
||||
sfx= newSlider(180,250,400,10,35,function()SFX.play("blip_1")end, SETval("sfx"), SETsto("sfx"), nil,"bgm"),
|
||||
bgm= newSlider(750,250,400,10,35,function()BGM.freshVolume()end, SETval("bgm"), SETsto("bgm"), nil,"vib"),
|
||||
vib= newSlider(180,440,400,5 ,28,function()VIB(1)end, SETval("vib"), SETsto("vib"), nil,"voc"),
|
||||
voc= newSlider(750,440,400,10,32,function()VOICE("nya")end, SETval("voc"), SETsto("voc"), nil,"stereo"),
|
||||
sfx= newSlider(180,250,400,10,35,function()SFX.play("blip_1")end, SETval("sfx"), SETsto("sfx"), nil,"bgm"),
|
||||
bgm= newSlider(750,250,400,10,35,function()BGM.freshVolume()end, SETval("bgm"), SETsto("bgm"), nil,"vib"),
|
||||
vib= newSlider(180,440,400,5 ,28,function()VIB(1)end, SETval("vib"), SETsto("vib"), nil,"voc"),
|
||||
voc= newSlider(750,440,400,10,32,function()VOICE("nya")end, SETval("voc"), SETsto("voc"), nil,"stereo"),
|
||||
stereo= newSlider(180,630,400,10,35,function()SFX.play("move",1,-1)SFX.play("lock",1,1)end, SETval("stereo"), SETsto("stereo"),function()return setting.sfx==0 end,"back"),
|
||||
back= newButton(1140,650,200,80,C.white,40,scene.back,nil,"game"),
|
||||
},
|
||||
setting_control={
|
||||
das= newSlider(226,200,910, 26, 30,nil,SETval("das"), SETsto("das"), nil,"arr"),
|
||||
arr= newSlider(226,290,525, 15, 30,nil,SETval("arr"), SETsto("arr"), nil,"sddas"),
|
||||
sddas= newSlider(226,380,350, 10, 30,nil,SETval("sddas"), SETsto("sddas"),nil,"sdarr"),
|
||||
sdarr= newSlider(226,470,140, 4, 30,nil,SETval("sdarr"), SETsto("sdarr"),nil,"reset"),
|
||||
reset= newButton(160,580,200, 100,C.lightRed,40,function()
|
||||
setting.das,setting.arr=10,2
|
||||
setting.sddas,setting.sdarr=0,2
|
||||
end,nil,"back"),
|
||||
back= newButton(1140,650,200,80,C.white,40,scene.back,nil,"das"),
|
||||
},
|
||||
setting_key={
|
||||
back=newButton(1140,650,200,80,C.white,45,scene.back),
|
||||
},
|
||||
setting_skin={
|
||||
prev= newButton(700,100,140,100,C.white,50,function()skin.prevSet()end),
|
||||
next= newButton(860,100,140,100,C.white,50,function()skin.nextSet()end),
|
||||
prev1= newButton(125,240,90,65,C.white,30,prevSkin(1)),
|
||||
prev2= newButton(265,240,90,65,C.white,30,prevSkin(2)),
|
||||
prev3= newButton(405,240,90,65,C.white,30,prevSkin(3)),
|
||||
prev4= newButton(545,240,90,65,C.white,30,prevSkin(4)),
|
||||
prev5= newButton(685,240,90,65,C.white,30,prevSkin(5)),
|
||||
prev6= newButton(825,240,90,65,C.white,30,prevSkin(6)),
|
||||
prev7= newButton(965,240,90,65,C.white,30,prevSkin(7)),
|
||||
prev1= newButton(130,230,90,65,C.white,30,prevSkin(1)),
|
||||
prev2= newButton(270,230,90,65,C.white,30,prevSkin(2)),
|
||||
prev3= newButton(410,230,90,65,C.white,30,prevSkin(3)),
|
||||
prev4= newButton(550,230,90,65,C.white,30,prevSkin(4)),
|
||||
prev5= newButton(690,230,90,65,C.white,30,prevSkin(5)),
|
||||
prev6= newButton(830,230,90,65,C.white,30,prevSkin(6)),
|
||||
prev7= newButton(970,230,90,65,C.white,30,prevSkin(7)),
|
||||
|
||||
next1= newButton(125,460,90,65,C.white,30,nextSkin(1)),
|
||||
next2= newButton(265,460,90,65,C.white,30,nextSkin(2)),
|
||||
next3= newButton(405,460,90,65,C.white,30,nextSkin(3)),
|
||||
next4= newButton(545,460,90,65,C.white,30,nextSkin(4)),
|
||||
next5= newButton(685,460,90,65,C.white,30,nextSkin(5)),
|
||||
next6= newButton(825,460,90,65,C.white,30,nextSkin(6)),
|
||||
next7= newButton(965,460,90,65,C.white,30,nextSkin(7)),
|
||||
next1= newButton(130,450,90,65,C.white,30,nextSkin(1)),
|
||||
next2= newButton(270,450,90,65,C.white,30,nextSkin(2)),
|
||||
next3= newButton(410,450,90,65,C.white,30,nextSkin(3)),
|
||||
next4= newButton(550,450,90,65,C.white,30,nextSkin(4)),
|
||||
next5= newButton(690,450,90,65,C.white,30,nextSkin(5)),
|
||||
next6= newButton(830,450,90,65,C.white,30,nextSkin(6)),
|
||||
next7= newButton(970,450,90,65,C.white,30,nextSkin(7)),
|
||||
|
||||
spin1= newButton(125,550,90,65,C.white,30,nextDir(1)),
|
||||
spin2= newButton(265,550,90,65,C.white,30,nextDir(2)),
|
||||
spin3= newButton(405,550,90,65,C.white,30,nextDir(3)),
|
||||
spin4= newButton(545,550,90,65,C.white,30,nextDir(4)),
|
||||
spin5= newButton(685,550,90,65,C.white,30,nextDir(5)),
|
||||
--spin6=newButton(825,550,90,65,C.white,30,nextDir(6)),--O cannot rotate
|
||||
spin7= newButton(965,550,90,65,C.white,30,nextDir(7)),
|
||||
spin1= newButton(130,540,90,65,C.white,30,nextDir(1)),
|
||||
spin2= newButton(270,540,90,65,C.white,30,nextDir(2)),
|
||||
spin3= newButton(410,540,90,65,C.white,30,nextDir(3)),
|
||||
spin4= newButton(550,540,90,65,C.white,30,nextDir(4)),
|
||||
spin5= newButton(690,540,90,65,C.white,30,nextDir(5)),
|
||||
--spin6=newButton(825,540,90,65,C.white,30,nextDir(6)),--cannot rotate O
|
||||
spin7= newButton(970,540,90,65,C.white,30,nextDir(7)),
|
||||
|
||||
reset= newButton(200,650,180,80,C.lightRed,35,function()for i=1,7 do setting.face[i]=0 end SFX.play("rotate")end),
|
||||
skinR= newButton(200,640,220,80,C.lightPurple,35,function()setting.skin={1,5,2,8,10,3,7}SFX.play("rotate")end),
|
||||
faceR= newButton(480,640,220,80,C.lightRed,35,function()setting.face={0,0,0,0,0,0,0}SFX.play("hold")end),
|
||||
back= newButton(1140,650,200,80,C.white,40,scene.back),
|
||||
},
|
||||
setting_touch={
|
||||
|
||||
Reference in New Issue
Block a user