Merge branch 'master' into resolve-conflict-with-MrZ626/master
This commit is contained in:
38
parts/ai.lua
38
parts/ai.lua
@@ -16,7 +16,7 @@ local Timer=love.timer.getTime
|
||||
-- 6~10:hD,sD,H,A,R,
|
||||
-- 11~13:LL,RR,DD
|
||||
local blockPos={4,4,4,4,4,5,4}
|
||||
local scs={{1,2},{1,2},{1,2},{1,2},{1,2},{1.5,1.5},{0.5,2.5}}
|
||||
local scs={{0,1},{0,1},{0,1},{0,1},{0,1},{.5,.5},{-.5,1.5}}
|
||||
-------------------------------------------------Cold clear
|
||||
local CCblockID={6,5,4,3,2,1,0}
|
||||
if system=="Windows"then
|
||||
@@ -198,7 +198,8 @@ end
|
||||
return{
|
||||
["9S"]={
|
||||
function(P,ctrl)
|
||||
local Tfield={}--test field
|
||||
local Tfield={}--Test field
|
||||
local best={x=1,dir=0,hold=false,score=-1e99}--Best method
|
||||
local field_org=P.field
|
||||
for i=1,#field_org do
|
||||
Tfield[i]=freeRow.get(0)
|
||||
@@ -206,7 +207,7 @@ return{
|
||||
Tfield[i][j]=field_org[i][j]
|
||||
end
|
||||
end
|
||||
local best={x=1,dir=0,hold=false,score=-1e99}
|
||||
|
||||
for ifhold=0,P.gameEnv.hold and 1 or 0 do
|
||||
--Get block id
|
||||
local bn
|
||||
@@ -217,13 +218,17 @@ return{
|
||||
end
|
||||
if not bn then goto CTN end
|
||||
|
||||
for dir=0,dirCount[bn] do--each dir
|
||||
for dir=0,dirCount[bn] do--Each dir
|
||||
local cb=blocks[bn][dir]
|
||||
for cx=1,11-#cb[1]do--each pos
|
||||
for cx=1,11-#cb[1]do--Each pos
|
||||
local cy=#Tfield+1
|
||||
|
||||
--Move to bottom
|
||||
while not ifoverlapAI(Tfield,cb,cx,cy-1)do
|
||||
cy=cy-1
|
||||
end--move to bottom
|
||||
end
|
||||
|
||||
--Simulate lock
|
||||
for i=1,#cb do
|
||||
local y=cy+i-1
|
||||
if not Tfield[y]then Tfield[y]=freeRow.get(0)end
|
||||
@@ -232,7 +237,7 @@ return{
|
||||
Tfield[y][cx+j-1]=1
|
||||
end
|
||||
end
|
||||
end--simulate lock
|
||||
end
|
||||
local score=getScore(Tfield,cb,cy)
|
||||
if score>best.score then
|
||||
best={bn=bn,x=cx,dir=dir,hold=ifhold==1,score=score}
|
||||
@@ -243,9 +248,11 @@ return{
|
||||
::CTN::
|
||||
end
|
||||
if not best.bn then return 1 end
|
||||
|
||||
--Release cache
|
||||
while #Tfield>0 do
|
||||
freeRow.discard(rem(Tfield,1))
|
||||
end--Release cache
|
||||
end
|
||||
local p=#ctrl+1
|
||||
if best.hold then
|
||||
ctrl[p]=8
|
||||
@@ -270,11 +277,11 @@ return{
|
||||
end,
|
||||
},
|
||||
["CC"]={
|
||||
function(P)
|
||||
function(P)--Start thinking
|
||||
BOT.think(P.AI_bot)
|
||||
return 2
|
||||
end,--start thinking
|
||||
function(P,ctrl)
|
||||
end,
|
||||
function(P,ctrl)--Poll keys
|
||||
local success,dest,hold,move=BOT.getMove(P.AI_bot)
|
||||
if success == 2 then
|
||||
ins(ctrl,6)
|
||||
@@ -298,10 +305,11 @@ return{
|
||||
ins(ctrl,6)
|
||||
return 3
|
||||
else
|
||||
return 2--stay this stage
|
||||
--Stay this stage
|
||||
return 2
|
||||
end
|
||||
end,--poll keys
|
||||
function(P)
|
||||
end,
|
||||
function(P)--Check if time to change target
|
||||
P.AI_delay=P.AI_delay0
|
||||
if Timer()-P.modeData.point>P.modeData.event then
|
||||
P.modeData.point=Timer()
|
||||
@@ -309,6 +317,6 @@ return{
|
||||
P:changeAtkMode(rnd()<.85 and 1 or #P.atker>3 and 4 or rnd()<.3 and 2 or 3)
|
||||
end
|
||||
return 1
|
||||
end,--check if time to change target
|
||||
end,
|
||||
},
|
||||
}--AI think stage
|
||||
@@ -1,25 +1,28 @@
|
||||
setting={
|
||||
--game
|
||||
--Game
|
||||
das=10,arr=2,
|
||||
sddas=0,sdarr=2,
|
||||
ihs=true,irs=true,ims=true,
|
||||
reTime=4,
|
||||
maxNext=6,
|
||||
autoPause=true,
|
||||
quickR=true,
|
||||
swap=true,
|
||||
|
||||
--System
|
||||
reTime=4,
|
||||
autoPause=true,
|
||||
fine=false,
|
||||
appLock=false,
|
||||
lang=1,
|
||||
skinSet=1,
|
||||
skin={1,5,8,2,10,3,7,1,5,1,5,8,2,10,3,7,10,7,8,2,8,2,1,5,3},
|
||||
face={},
|
||||
|
||||
--graphic
|
||||
--Graphic
|
||||
ghost=true,center=true,
|
||||
smooth=true,grid=false,
|
||||
bagLine=false,
|
||||
lockFX=2,
|
||||
dropFX=3,
|
||||
dropFX=2,
|
||||
moveFX=2,
|
||||
clearFX=2,
|
||||
shakeFX=2,
|
||||
atkFX=3,
|
||||
@@ -31,7 +34,7 @@ setting={
|
||||
bg=true,
|
||||
powerInfo=false,
|
||||
|
||||
--sound
|
||||
--Sound
|
||||
sfx=10,
|
||||
spawn=0,
|
||||
bgm=7,
|
||||
@@ -39,15 +42,15 @@ setting={
|
||||
vib=0,
|
||||
voc=0,
|
||||
|
||||
--virtualkey
|
||||
--Virtualkey
|
||||
VKSFX=3,--SFX volume
|
||||
VKVIB=0,--VIB
|
||||
VKSwitch=false,--if disp
|
||||
VKTrack=false,--if tracked
|
||||
VKDodge=false,--if dodge
|
||||
VKSwitch=false,--If disp
|
||||
VKTrack=false,--If tracked
|
||||
VKDodge=false,--If dodge
|
||||
VKTchW=3,--Touch-Pos Weight
|
||||
VKCurW=4,--Cur-Pos Weight
|
||||
VKIcon=true,--if disp icon
|
||||
VKIcon=true,--If disp icon
|
||||
VKAlpha=3,
|
||||
}
|
||||
for i=1,25 do
|
||||
@@ -64,7 +67,7 @@ stat={
|
||||
send=0,recv=0,pend=0,off=0,
|
||||
clear={},spin={},
|
||||
pc=0,hpc=0,b2b=0,b3b=0,score=0,
|
||||
lastPlay="sprint_10",--last played mode ID
|
||||
lastPlay="sprint_10",--Last played mode ID
|
||||
}
|
||||
for i=1,25 do
|
||||
stat.clear[i]={0,0,0,0,0}
|
||||
@@ -73,9 +76,9 @@ end
|
||||
|
||||
keyMap={
|
||||
{"left","right","x","z","c","up","down","space","tab","r"},{},
|
||||
--keyboard
|
||||
--Keyboard
|
||||
{"dpleft","dpright","a","b","y","dpup","dpdown","rightshoulder","x","leftshoulder"},{},
|
||||
--joystick
|
||||
--Joystick
|
||||
}
|
||||
for i=1,#keyMap do for j=1,20 do
|
||||
if not keyMap[i][j]then keyMap[i][j]=""end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local freeRow={}
|
||||
local L={}--storage
|
||||
local _=0--lenth
|
||||
local L={}--Storage
|
||||
local _=0--Lenth
|
||||
function freeRow.reset(num)
|
||||
if num<_ then
|
||||
for i=_,num+1,-1 do
|
||||
|
||||
@@ -6,6 +6,25 @@ local sub,find=string.sub,string.find
|
||||
local char,byte=string.char,string.byte
|
||||
local ins,rem=table.insert,table.remove
|
||||
|
||||
local default_setting={
|
||||
"das","arr",
|
||||
"sddas","sdarr",
|
||||
"ihs","irs","ims",
|
||||
"maxNext",
|
||||
"swap",
|
||||
-- "face",
|
||||
}
|
||||
local function copyGameSetting()
|
||||
local S={face={}}
|
||||
for _,v in next,default_setting do
|
||||
S[v]=setting[v]
|
||||
end
|
||||
for i=1,25 do
|
||||
S.face[i]=setting.face[i]
|
||||
end
|
||||
return S
|
||||
end
|
||||
|
||||
function destroyPlayers()
|
||||
for i=#players,1,-1 do
|
||||
local P=players[i]
|
||||
@@ -25,7 +44,6 @@ function destroyPlayers()
|
||||
for i=#players.alive,1,-1 do
|
||||
players.alive[i]=nil
|
||||
end
|
||||
players.human=0
|
||||
collectgarbage()
|
||||
end
|
||||
|
||||
@@ -43,18 +61,22 @@ function restoreVirtualKey()
|
||||
virtualkey[9].ava=false
|
||||
end
|
||||
end
|
||||
|
||||
function copyBoard()
|
||||
local str=""
|
||||
local H=0
|
||||
|
||||
for y=20,1,-1 do
|
||||
for x=1,10 do
|
||||
if preField[y][x]~=0 then
|
||||
H=y
|
||||
goto L
|
||||
goto topFound
|
||||
end
|
||||
end
|
||||
end
|
||||
::L::
|
||||
::topFound::
|
||||
|
||||
--Encode field
|
||||
for y=1,H do
|
||||
local S=""
|
||||
local L=preField[y]
|
||||
@@ -63,38 +85,36 @@ function copyBoard()
|
||||
end
|
||||
str=str..S
|
||||
end
|
||||
love.system.setClipboardText("Techmino sketchpad:"..data.encode("string","base64",data.compress("string","deflate",str)))
|
||||
TEXT.show(text.copySuccess,350,360,40,"appear",.5)
|
||||
return data.encode("string","base64",data.compress("string","deflate",str))
|
||||
end
|
||||
function pasteBoard()
|
||||
function pasteBoard(str)
|
||||
local _
|
||||
local fX,fY=1,1--*ptr for Field(r*10+(c-1))
|
||||
|
||||
--Read data
|
||||
local str=love.system.getClipboardText()
|
||||
local p=find(str,":")--ptr*
|
||||
if p then str=sub(str,p+1)end
|
||||
--Decode
|
||||
_,str=pcall(data.decode,"string","base64",str)
|
||||
if not _ then goto ERROR end
|
||||
if not _ then return end
|
||||
_,str=pcall(data.decompress,"string","deflate",str)
|
||||
if not _ then goto ERROR end
|
||||
|
||||
p=1
|
||||
if not _ then return end
|
||||
|
||||
local fX,fY=1,1--*ptr for Field(r*10+(c-1))
|
||||
local p=1
|
||||
while true do
|
||||
_=byte(str,p)--1byte
|
||||
|
||||
--Str end
|
||||
if not _ then
|
||||
if fX~=1 then
|
||||
goto ERROR
|
||||
return
|
||||
else
|
||||
fY=fY+1
|
||||
break
|
||||
end
|
||||
end--str end
|
||||
end
|
||||
|
||||
__=_%32-1--Block id
|
||||
if __>17 then return end--Illegal blockid
|
||||
_=int(_/32)--Mode id
|
||||
|
||||
__=_%32-1--block id
|
||||
if __>17 then goto ERROR end--illegal blockid
|
||||
_=int(_/32)--mode id
|
||||
preField[fY][fX]=__
|
||||
if fX<10 then
|
||||
fX=fX+1
|
||||
@@ -111,8 +131,41 @@ function pasteBoard()
|
||||
preField[y][x]=0
|
||||
end
|
||||
end
|
||||
do return end
|
||||
::ERROR::TEXT.show(text.dataCorrupted,350,360,35,"flicker",.5)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function copySequence()
|
||||
local str=""
|
||||
|
||||
for i=1,#preBag do
|
||||
str=str..char(preBag[i]-1)
|
||||
end
|
||||
|
||||
return data.encode("string","base64",data.compress("string","deflate",str))
|
||||
end
|
||||
function pasteSequence(str)
|
||||
local _
|
||||
|
||||
--Decode
|
||||
_,str=pcall(data.decode,"string","base64",str)
|
||||
if not _ then return end
|
||||
_,str=pcall(data.decompress,"string","deflate",str)
|
||||
if not _ then return end
|
||||
|
||||
local bag={}
|
||||
for i=1,#str do
|
||||
_=byte(str,i)
|
||||
if _<25 then
|
||||
bag[i]=_+1
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
preBag=bag
|
||||
sceneTemp.cur=#preBag
|
||||
return true
|
||||
end
|
||||
|
||||
function mergeStat(stat,delta)
|
||||
@@ -128,7 +181,8 @@ function mergeStat(stat,delta)
|
||||
end
|
||||
end
|
||||
end
|
||||
function randomTarget(P)
|
||||
|
||||
function randomTarget(P)--Return a random opponent for P
|
||||
if #players.alive>1 then
|
||||
local R
|
||||
repeat
|
||||
@@ -136,7 +190,7 @@ function randomTarget(P)
|
||||
until R~=P
|
||||
return R
|
||||
end
|
||||
end--return a random opponent for P
|
||||
end
|
||||
function freshMostDangerous()
|
||||
game.mostDangerous,game.secDangerous=nil
|
||||
local m,m2=0,0
|
||||
@@ -196,24 +250,27 @@ function royaleLevelup()
|
||||
local P=players.alive[i]
|
||||
P.gameEnv.drop=int(P.gameEnv.drop*.3)
|
||||
if P.gameEnv.drop==0 then
|
||||
P.curY=P.y_img
|
||||
P.curY=P.imgY
|
||||
P.gameEnv._20G=true
|
||||
if P.AI_mode=="CC"then CC_switch20G(P)end--little cheating,never mind
|
||||
if P.AI_mode=="CC"then CC_switch20G(P)end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function pauseGame()
|
||||
if not SCN.swapping then
|
||||
restartCount=0--Avoid strange darkness
|
||||
if not game.result then
|
||||
game.pauseCount=game.pauseCount+1
|
||||
end
|
||||
for i=1,#players do
|
||||
local l=players[i].keyPressing
|
||||
for j=1,#l do
|
||||
if l[j]then
|
||||
players[i]:releaseKey(j)
|
||||
if not game.replaying then
|
||||
for i=1,#players do
|
||||
local l=players[i].keyPressing
|
||||
for j=1,#l do
|
||||
if l[j]then
|
||||
players[i]:releaseKey(j)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -223,65 +280,38 @@ end
|
||||
function resumeGame()
|
||||
SCN.swapTo("play","none")
|
||||
end
|
||||
function loadGame(M)
|
||||
--rec={}
|
||||
function loadGame(M,ifQuickPlay)
|
||||
stat.lastPlay=M
|
||||
curMode=Modes[M]
|
||||
local lang=setting.lang
|
||||
drawableText.modeName:set(text.modes[M][1])
|
||||
drawableText.levelName:set(text.modes[M][2])
|
||||
needResetGameData=true
|
||||
SCN.swapTo("play","fade_togame")
|
||||
SCN.swapTo("play",ifQuickPlay and"swipe"or"fade_togame")
|
||||
SFX.play("enter")
|
||||
end
|
||||
function resetPartGameData()
|
||||
game={
|
||||
frame=150-setting.reTime*15,
|
||||
result=false,
|
||||
pauseTime=0,
|
||||
pauseCount=0,
|
||||
garbageSpeed=1,
|
||||
warnLVL0=0,
|
||||
warnLVL=0,
|
||||
}
|
||||
destroyPlayers()
|
||||
curMode.load()
|
||||
TEXT.clear()
|
||||
if modeEnv.task then
|
||||
for i=1,#players do
|
||||
players[i]:newTask(modeEnv.task)
|
||||
end
|
||||
end
|
||||
if modeEnv.royaleMode then
|
||||
for i=1,#players do
|
||||
players[i]:changeAtk(randomTarget(players[i]))
|
||||
end
|
||||
end
|
||||
BG.set(modeEnv.bg)
|
||||
BGM.play(modeEnv.bgm)
|
||||
if modeEnv.royaleMode then
|
||||
for i=1,#players do
|
||||
players[i]:changeAtk(randomTarget(players[i]))
|
||||
end
|
||||
game.stage=1
|
||||
game.garbageSpeed=.3
|
||||
end
|
||||
restoreVirtualKey()
|
||||
collectgarbage()
|
||||
end
|
||||
function resetGameData()
|
||||
game={
|
||||
frame=150-setting.reTime*15,
|
||||
result=false,
|
||||
pauseTime=0,--Time paused
|
||||
pauseCount=0,--Pausing count
|
||||
garbageSpeed=1,--garbage timing speed
|
||||
warnLVL0=0,
|
||||
warnLVL=0,
|
||||
}
|
||||
if players[1]and not game.replaying then
|
||||
mergeStat(stat,players[1].stat)
|
||||
end
|
||||
|
||||
game.frame=150-setting.reTime*15
|
||||
game.result=false
|
||||
game.pauseTime=0
|
||||
game.pauseCount=0
|
||||
game.garbageSpeed=1
|
||||
game.warnLVL0=0
|
||||
game.warnLVL=0
|
||||
game.recording=true
|
||||
game.replaying=false
|
||||
game.setting=copyGameSetting()
|
||||
game.rec={}
|
||||
math.randomseed(tm.getTime())
|
||||
game.seed=rnd(261046101471026)
|
||||
|
||||
destroyPlayers()
|
||||
modeEnv=curMode.env
|
||||
curMode.load()--bg/bgm need redefine in custom,so up here
|
||||
curMode.load()--BG/BGM need redefine in custom,so up here
|
||||
if modeEnv.task then
|
||||
for i=1,#players do
|
||||
players[i]:newTask(modeEnv.task)
|
||||
@@ -306,12 +336,59 @@ function resetGameData()
|
||||
SFX.play("ready")
|
||||
collectgarbage()
|
||||
end
|
||||
function resetPartGameData(replaying)
|
||||
if players[1]and not game.replaying then
|
||||
mergeStat(stat,players[1].stat)
|
||||
end
|
||||
|
||||
game.result=false
|
||||
game.garbageSpeed=1
|
||||
game.warnLVL0=0
|
||||
game.warnLVL=0
|
||||
if replaying then
|
||||
game.frame=0
|
||||
game.recording=false
|
||||
game.replaying=1
|
||||
else
|
||||
game.frame=150-setting.reTime*15
|
||||
game.pauseTime=0
|
||||
game.pauseCount=0
|
||||
game.recording=true
|
||||
game.replaying=false
|
||||
game.setting=copyGameSetting()
|
||||
game.rec={}
|
||||
math.randomseed(tm.getTime())
|
||||
game.seed=rnd(1046101471,2662622626)
|
||||
end
|
||||
|
||||
destroyPlayers()
|
||||
modeEnv=curMode.env
|
||||
curMode.load()
|
||||
if modeEnv.task then
|
||||
for i=1,#players do
|
||||
players[i]:newTask(modeEnv.task)
|
||||
end
|
||||
end
|
||||
BG.set(modeEnv.bg)
|
||||
BGM.play(modeEnv.bgm)
|
||||
|
||||
TEXT.clear()
|
||||
if modeEnv.royaleMode then
|
||||
for i=1,#players do
|
||||
players[i]:changeAtk(randomTarget(players[i]))
|
||||
end
|
||||
game.stage=1
|
||||
game.garbageSpeed=.3
|
||||
end
|
||||
restoreVirtualKey()
|
||||
collectgarbage()
|
||||
end
|
||||
function gameStart()
|
||||
SFX.play("start")
|
||||
for P=1,#players do
|
||||
P=players[P]
|
||||
P:popNext()
|
||||
P.timing=true
|
||||
P.control=true
|
||||
P.timing=true
|
||||
P:popNext()
|
||||
end
|
||||
end
|
||||
111
parts/getTip.lua
111
parts/getTip.lua
@@ -4,6 +4,7 @@ if setting.lang==1 or setting.lang==2 then
|
||||
"ZS JL T O I",
|
||||
"VVVVVV好玩!",
|
||||
"uid:225238922",
|
||||
"tetralegends也很好玩!",
|
||||
"tetr.js也很好玩!",
|
||||
"tetr.io也很好玩!",
|
||||
"Techminohaowan",
|
||||
@@ -13,9 +14,9 @@ if setting.lang==1 or setting.lang==2 then
|
||||
"osu好玩!",
|
||||
"O spin Triple!",
|
||||
"nullpomino也很好玩!",
|
||||
"Naki 可爱",
|
||||
"Miya:喵!",
|
||||
"Naki 可爱!",
|
||||
"Miya 可爱!",
|
||||
"Lua天下第一",
|
||||
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
|
||||
"Let-The-Bass-Kick!",
|
||||
"l-=-1",
|
||||
@@ -27,7 +28,6 @@ if setting.lang==1 or setting.lang==2 then
|
||||
"DT炮=TSD+TST炮",
|
||||
"Cultris II也很好玩!",
|
||||
"COOL!!",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"BT炮=beta炮",
|
||||
"B2B2B2B存在吗?",
|
||||
"B2B2B???",
|
||||
@@ -36,9 +36,9 @@ if setting.lang==1 or setting.lang==2 then
|
||||
"注意到\"旋转\"到底对方块做了些什么吗?",
|
||||
"有疑问? 先看设置有没有你想要的",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"音乐都是瞎写的,觉得不好听就把BGM关了罢",
|
||||
"学会使用两个旋转键, 三个更好",
|
||||
"享受特色旋转系统!",
|
||||
"新人请千万记住,打好基础,不要太早学那些花里胡哨的",
|
||||
"享受Tech的特色旋转系统!",
|
||||
"无聊翻翻设置是好习惯",
|
||||
"我的世界好玩!",
|
||||
"提前旋转等设置可以用来救命",
|
||||
@@ -48,16 +48,21 @@ if setting.lang==1 or setting.lang==2 then
|
||||
"少女祈祷中",
|
||||
"扫雷好玩!",
|
||||
"哦,我的上帝",
|
||||
"你可以长按R键重新开始游戏(也不是很长)",
|
||||
"你可以从统计页面打开游戏存档目录",
|
||||
"你好 世界!",
|
||||
"魔方好玩!",
|
||||
"喵!",
|
||||
"免费吃鸡方块",
|
||||
"秘密数字:626",
|
||||
"每个虚拟按键都可以隐藏/显示",
|
||||
"每个块的出现方向可以自定义",
|
||||
"没专业美术,程序员审美警告",
|
||||
"没学过编曲,音乐都是自己凭感觉写的,觉得不好听就设置里关了吧",
|
||||
"联网还没做呢, 别急",
|
||||
"键位是可以自定义的",
|
||||
"健康小贴士:上厕所太用力容易脑出血(尤其是老年人!)",
|
||||
"健康小贴士:不要熬夜,真的容易猝死",
|
||||
"合群了就会消失, 但是消失不代表没有意义",
|
||||
"更小的DAS和ARR拥有更高的操作上限(如果你还能控制得了的话)",
|
||||
"俄罗斯方块环游记也不错!",
|
||||
@@ -65,8 +70,8 @@ if setting.lang==1 or setting.lang==2 then
|
||||
"低帧率会降低游戏体验",
|
||||
"戴上耳机以获得最佳体验",
|
||||
"大满贯10连击消四全清!",
|
||||
"车车人在此",
|
||||
"茶娘可爱",
|
||||
"打好块没有捷径,多练",
|
||||
"茶娘 可爱!",
|
||||
"草(日本语)",
|
||||
"不要在上课时玩游戏!",
|
||||
"不要盯着bug不放",
|
||||
@@ -75,6 +80,7 @@ if setting.lang==1 or setting.lang==2 then
|
||||
"别问游戏名怎么取的,问就是随便想的",
|
||||
"本游戏难度上限很高, 做好心理准备",
|
||||
"本游戏可不是休闲游戏",
|
||||
"报时机器人:新的一天开始了",
|
||||
"626r/s",
|
||||
"40行世界纪录:15.654s",
|
||||
"4+4+4+4+2+2+1=17",
|
||||
@@ -86,10 +92,12 @@ if setting.lang==1 or setting.lang==2 then
|
||||
"2.7182818284590452353",
|
||||
"15puzzle好玩!",
|
||||
"11renPC!",
|
||||
"100行内23PC来一个?",
|
||||
"1, 2, 9!!!!!",
|
||||
"<方块研究所>有一个Nspire-CX版本!",
|
||||
"↑↑↓↓←→←→BABA",
|
||||
"(RUR'U')R'FR2U'R'U'(RUR'F')",
|
||||
-- "Z酱 可爱!",
|
||||
}
|
||||
elseif setting.lang==3 then
|
||||
L={
|
||||
@@ -106,6 +114,7 @@ elseif setting.lang==3 then
|
||||
"This in not a casual game",
|
||||
"This game can be very hard,be mentally perpared",
|
||||
"Tetris journey has network battle!",
|
||||
"Tetralegends is fun!",
|
||||
"Terraria is fun!",
|
||||
"Techmino=Technique+Tetromino",
|
||||
"Techmino is so fun!",
|
||||
@@ -117,7 +126,7 @@ elseif setting.lang==3 then
|
||||
"REGRET!!",
|
||||
"Powered by love2d",
|
||||
"Playing too much = taking drugs",
|
||||
"osu is fun!",
|
||||
"OSU is fun!",
|
||||
"Only offline game now",
|
||||
"OHHHHHHHHHHHHHH",
|
||||
"O spin triple!",
|
||||
@@ -127,13 +136,14 @@ elseif setting.lang==3 then
|
||||
"Miya so cute!",
|
||||
"Minesweeper is fun!",
|
||||
"Minecraft is fun!",
|
||||
"Lua No.1",
|
||||
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
|
||||
"lower fps causes lower game experience",
|
||||
"Lower fps causes lower game experience",
|
||||
"Let-The-Bass-Kick!",
|
||||
"l-=-1",
|
||||
"Is B2B2B2B possible?",
|
||||
"Initial Rotation etc. can save your life",
|
||||
"iced so bully",
|
||||
"Hold R key to restart game",
|
||||
"Hello world!",
|
||||
"Headphones for better experience",
|
||||
"Have you noticed what does \"rotating\" do to block?",
|
||||
@@ -146,10 +156,9 @@ elseif setting.lang==3 then
|
||||
"DO NOT PRESS F10",
|
||||
"Do not play game in class!",
|
||||
"Disappearing doesn't mean useless",
|
||||
"diao so bully",
|
||||
"Diao so bully",
|
||||
"COOL!!",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"BT cannon=beta",
|
||||
"BT cannon=beta cannon",
|
||||
"Back to Back 10 combo Techrash PC!",
|
||||
"B2B2B???",
|
||||
"Any suggestions to author!",
|
||||
@@ -157,9 +166,9 @@ elseif setting.lang==3 then
|
||||
"Also try VVVVVV!",
|
||||
"Also try Tetr.js!",
|
||||
"Also try Tetr.io!",
|
||||
"Also try Nullpomino!",
|
||||
"Also try Jstris!",
|
||||
"Also try Cultris II!",
|
||||
"Also try Bullpomino!",
|
||||
"ALLSPIN!",
|
||||
"少女祈禱中",
|
||||
"40L WR: 15.654s",
|
||||
@@ -186,5 +195,79 @@ elseif setting.lang==4 then
|
||||
s=s..L[math.random(#L)]
|
||||
end
|
||||
return s
|
||||
elseif setting.lang==5 then
|
||||
local R=math.random()
|
||||
if R<.05 then
|
||||
local time={
|
||||
--[[00]]"大半夜的在这干啥呢?不睡觉是会猝死的",
|
||||
--[[01]]"大半夜的在这干啥呢?不睡觉是会猝死的",
|
||||
--[[02]]"现在打块你是认真的?",
|
||||
--[[03]]"现在打块你是认真的?",
|
||||
--[[04]]"早起是好的,但是你不应该打块",
|
||||
--[[05]]"早起是好的,但是你不应该打块",
|
||||
--[[06]]"早饭吃好了?",
|
||||
--[[07]]"早饭吃好了?",
|
||||
--[[08]]"九点多了,没自己的事情要做?",
|
||||
--[[09]]"十点多了,没自己的事情要做?",
|
||||
--[[10]]"十一点多了,午饭有的吃么",
|
||||
--[[11]]"十二点多了,午饭有的吃么",
|
||||
--[[12]]"累了累了,现在不想说你",
|
||||
--[[13]]"累了累了,现在不想说你",
|
||||
--[[14]]"累了累了,现在不想说你",
|
||||
--[[15]]"累了累了,现在不想说你",
|
||||
--[[16]]"累了累了,现在不想说你",
|
||||
--[[17]]"晚饭吃好了?",
|
||||
--[[18]]"晚饭吃好了?",
|
||||
--[[19]]"累了累了,现在不想说你",
|
||||
--[[20]]"累了累了,现在不想说你",
|
||||
--[[21]]"好睡了,作息健康活得久",
|
||||
--[[22]]"好睡了,作息健康活得久",
|
||||
--[[23]]"大半夜的在这干啥呢?不睡觉是会猝死的",
|
||||
}
|
||||
return time[tonumber(os.date("%H"))+1]
|
||||
elseif R<.1 then
|
||||
local int=math.floor
|
||||
L={
|
||||
"平均"..int(stat.row/stat.time*60).."LPM,那可真强呢",
|
||||
"平均"..int(stat.atk/stat.time*60).."APM,好厉害哦",
|
||||
"平均"..(int(stat.atk/stat.row*10)*.1).."效,你看这数据能看么",
|
||||
"平均"..(int(stat.atk/stat.row*10)*.1).."效,我就不说你多菜了",
|
||||
"才玩"..stat.game.."把,跟几十万局的没法比",
|
||||
"才玩"..stat.game.."把,玩了不下几万局的人可不在少数",
|
||||
"才玩了"..int(stat.time/3600).."小时,人家总时长是你不知道多少倍",
|
||||
"才玩了"..int(stat.time/3600).."小时,别人总时长跟你都不在一个数量级",
|
||||
}
|
||||
else
|
||||
L={
|
||||
"Diao?上次被我c4w秒了的那人?",
|
||||
"隐形难吗?那个节目上的谁,水平那么菜也打得还行,就是你菜",
|
||||
"一口一个wtcl还不赶紧去练,你是不思进取还是不想好好说话?",
|
||||
"我一个滑铲就挖了个11renPC",
|
||||
"我曾经在极度愤怒的时候15秒消了40行",
|
||||
"天天F3F3,怕别人不知道你菜?",
|
||||
"天天卖弱,你一定把把150apm吧?",
|
||||
"天天催更催更,你咋不来帮忙开发啊,真以为作者很强催催啥都有?",
|
||||
"设置都看过一遍了吗?明明都能调还嫌这嫌那,可牛逼了您",
|
||||
"少玩点,多眨眼,到时候瞎了别怪我没提醒你",
|
||||
"人只用一只手都能玩,你呢?",
|
||||
"没那水平别天天整什么花里胡哨的,人玩几年你想几天赶上?",
|
||||
"满口PCDT信天翁,还会点别的么?",
|
||||
"叫你多练消四不听,现在要速度没速度,spin打完地形一塌糊涂,开心了?",
|
||||
"叫你多练就多练,想着几天变神仙,当自己是谁?",
|
||||
"还搁这玩手机呢,作业做完了?",
|
||||
"除了雨宫太阳你还认识谁?Jonas知道吗?Ajanba听过吗?",
|
||||
"不会吧不会吧,真的还有人不能随手Tspin?",
|
||||
"别会个c4w就以为自己多强,这是基本功罢了",
|
||||
"60lpm?拍硬降刷的吧",
|
||||
"4pps不是人均水平?",
|
||||
"40行还要40多秒,就这?",
|
||||
"20G很难?是个人都能玩吧",
|
||||
"20连pc不是随手?",
|
||||
"100apm?定式刷的吧",
|
||||
"0202年了,还在玩这种小孩子玩的游戏?",
|
||||
"极限20G?那不是随手通",
|
||||
"全隐40行全消四很难吗??",
|
||||
}
|
||||
end
|
||||
end
|
||||
return L[math.random(#L)]
|
||||
@@ -4,7 +4,7 @@ local ZERO={[01]=Zero,[10]=Zero,[03]=Zero,[30]=Zero,[12]=Zero,[21]=Zero,[32]=Zer
|
||||
|
||||
local map={}
|
||||
for x=-3,3 do map[x]={}for y=-3,3 do map[x][y]={x,y}end end
|
||||
local function collect(T)--make all vec point to the same vec
|
||||
local function collect(T)--Make all vec point to the same vec
|
||||
if type(T)=="table"then
|
||||
for _,T in next,T do
|
||||
for k,vec in next,T do
|
||||
@@ -14,11 +14,11 @@ local function collect(T)--make all vec point to the same vec
|
||||
end
|
||||
end
|
||||
|
||||
local function C_sym(L)--use this if the block is centrosymmetry, *PTR!!!
|
||||
local function C_sym(L)--Use this if the block is centrosymmetry, *PTR!!!
|
||||
L[23]=L[01]L[32]=L[10]
|
||||
L[21]=L[03]L[12]=L[30]
|
||||
end
|
||||
local function flipList(O)--use this to copy a symmetry list
|
||||
local function flipList(O)--Use this to copy a symmetry list
|
||||
if not O then return end
|
||||
local L={}
|
||||
for i=1,#O do
|
||||
@@ -84,14 +84,14 @@ local TRS={
|
||||
},--Z
|
||||
{},--S
|
||||
{
|
||||
[01]={{-1, 0},{-1, 1},{ 0,-2},{ 1, 1}},
|
||||
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2}},
|
||||
[01]={{-1, 0},{-1, 1},{ 1, 0},{ 0,-2},{ 1, 1}},
|
||||
[10]={{ 1, 0},{ 1,-1},{-1, 0},{ 0, 2},{ 1, 2}},
|
||||
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 1,-1},{ 0, 1}},
|
||||
[30]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0,-1},{-1, 1}},
|
||||
[12]={{ 1, 0},{ 1,-1},{ 1, 1},{-1, 0},{ 0,-1},{ 0, 2},{ 1, 2}},
|
||||
[21]={{-1, 0},{-1, 1},{ 1, 0},{ 0,-2},{-1,-2}},
|
||||
[32]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{-1, 1}},
|
||||
[23]={{ 1, 0},{ 1,-1},{ 1, 1},{ 0,-2},{ 1,-2}},
|
||||
[21]={{-1, 0},{-1, 1},{-1,-1},{ 1, 0},{ 0, 1},{ 0,-2},{-1,-2}},
|
||||
[32]={{-1, 0},{-1,-1},{ 1, 0},{ 0, 2},{-1, 2},{-1, 1}},
|
||||
[23]={{ 1, 0},{ 1,-1},{-1, 0},{ 1, 1},{ 0,-2},{ 1,-2}},
|
||||
[02]={{-1, 0},{ 1, 0},{ 0,-1},{ 0, 1}},
|
||||
[20]={{ 1, 0},{-1, 0},{ 0, 1},{ 0,-1}},
|
||||
[13]={{ 0,-1},{ 0, 1},{ 1, 0}},
|
||||
@@ -99,14 +99,14 @@ local TRS={
|
||||
},--J
|
||||
{},--L
|
||||
{
|
||||
[01]={{-1, 0},{-1, 1},{ 0,-2},{-1,-2},{-1,-1}},
|
||||
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2},{ 0,-1},{ 1, 1}},
|
||||
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2}},
|
||||
[01]={{-1, 0},{-1, 1},{ 0,-2},{-1,-2},{ 0, 1}},
|
||||
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2},{ 0,-1}},
|
||||
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 0, 1}},
|
||||
[30]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0,-1}},
|
||||
[12]={{ 1, 0},{ 1,-1},{ 0,-1},{-1,-1},{ 0, 2},{ 1, 2}},
|
||||
[21]={{-1, 0},{ 0,-2},{-1,-2},{ 1, 1}},
|
||||
[21]={{-1, 0},{ 0,-2},{-1,-2},{ 1, 1},{ 1, 0}},
|
||||
[32]={{-1, 0},{-1,-1},{ 0,-1},{ 1,-1},{ 0, 2},{-1, 2}},
|
||||
[23]={{ 1, 0},{ 0,-2},{ 1,-2},{-1, 1}},
|
||||
[23]={{ 1, 0},{ 0,-2},{ 1,-2},{-1, 1},{-1, 0}},
|
||||
[02]={{-1, 0},{ 1, 0},{ 0, 1}},
|
||||
[20]={{ 1, 0},{-1, 0},{ 0,-1}},
|
||||
[13]={{ 0,-1},{ 0, 1},{ 1, 0},{ 0,-2},{ 0, 2}},
|
||||
@@ -114,10 +114,9 @@ local TRS={
|
||||
},--T
|
||||
function(P,d)
|
||||
if P.human then SFX.fieldPlay("rotate",nil,P)end
|
||||
if P.gameEnv.easyFresh then P:freshLockDelay()end
|
||||
if not P.gameEnv.ospin then return end
|
||||
local x,y=P.curX,P.curY
|
||||
if y==P.y_img and((P:solid(x-1,y)or P:solid(x-1,y+1)))and(P:solid(x+2,y)or P:solid(x+2,y+1))then
|
||||
if y==P.imgY and((P:solid(x-1,y)or P:solid(x-1,y+1)))and(P:solid(x+2,y)or P:solid(x+2,y+1))then
|
||||
local D=P.spinSeq%100*10+d
|
||||
P.spinSeq=D
|
||||
if D<100 then return end
|
||||
@@ -136,7 +135,7 @@ local TRS={
|
||||
P.dir,P.sc=dir,scs[id][dir]
|
||||
P.spinLast=2
|
||||
P.stat.rotate=P.stat.rotate+1
|
||||
P:freshgho()
|
||||
P:freshBlock(false,true)
|
||||
P.spinSeq=0
|
||||
SFX.fieldPlay("rotatekick",nil,P)
|
||||
return
|
||||
@@ -146,16 +145,17 @@ local TRS={
|
||||
else
|
||||
P.spinSeq=0
|
||||
end
|
||||
P:freshBlock(true,true)
|
||||
end,--O
|
||||
{
|
||||
[01]={{ 0, 1},{ 1, 0},{-2, 0},{-2,-1},{ 1, 2}},
|
||||
[10]={{ 2, 0},{-1, 0},{-1,-2},{ 2, 1},{ 0, 2}},
|
||||
[10]={{ 2, 0},{-1, 0},{-1,-2},{ 2, 1},{ 0, 1}},
|
||||
[03]={{ 0, 1},{-1, 0},{ 2, 0},{ 2,-1},{-1, 2}},
|
||||
[30]={{-2, 0},{ 1, 0},{ 1,-2},{-2, 1},{ 0, 2}},
|
||||
[12]={{-1, 0},{ 2, 0},{ 0,-1},{-1, 2},{ 2,-1}},
|
||||
[21]={{-2, 0},{ 1, 0},{ 0, 1},{ 1,-2},{-2, 1}},
|
||||
[32]={{ 1, 0},{-2, 0},{ 0,-1},{ 1, 2},{-2,-1}},
|
||||
[23]={{ 2, 0},{-1, 0},{ 0, 1},{-1,-2},{ 2, 1}},
|
||||
[30]={{-2, 0},{ 1, 0},{ 1,-2},{-2, 1},{ 0, 1}},
|
||||
[12]={{-1, 0},{ 2, 0},{ 2,-1},{ 0,-1},{-1, 2}},
|
||||
[21]={{-2, 0},{ 1, 0},{ 1,-2},{-2, 1},{ 0, 1}},
|
||||
[32]={{ 1, 0},{-2, 0},{-2,-1},{ 0,-1},{ 1, 2}},
|
||||
[23]={{ 2, 0},{-1, 0},{-1,-2},{ 2, 1},{ 0, 1}},
|
||||
[02]={{-1, 0},{ 1, 0},{ 0,-1},{ 0, 1}},
|
||||
[20]={{ 1, 0},{-1, 0},{ 0, 1},{ 0,-1}},
|
||||
[13]={{ 0,-1},{-1, 0},{ 1, 0},{ 0, 1}},
|
||||
@@ -186,23 +186,23 @@ local TRS={
|
||||
{
|
||||
[01]={{-1, 0},{ 1, 0},{-1, 1},{ 0,-2},{ 0,-3}},
|
||||
[10]={{ 1, 0},{ 1,-1},{-1, 0},{ 0, 2},{ 0, 3}},
|
||||
[03]={{ 1, 0},{ 1,-1}, { 0, 1},{ 0,-2},{ 0,-3}},
|
||||
[30]={{-1, 0},{-1, 1},{ 1, 0},{ 0,-1},{ 0, 2},{ 0, 3}},
|
||||
[03]={{ 1, 0},{ 1,-1},{ 0, 1},{ 0,-2},{ 0,-3}},
|
||||
[30]={{-1, 1},{ 1, 0},{ 0,-1},{ 0, 2},{ 0, 3}},
|
||||
[12]={{ 1, 0},{ 0,-1},{-1, 0},{ 0, 2}},
|
||||
[21]={{-1, 0},{ 0, 1},{ 1, 0},{ 0,-2}},
|
||||
[32]={{-1, 0},{-1, 1},{ 0, 1},{ 0,-1},{ 1, 0},{ 0, 2},{-2, 0}},
|
||||
[23]={{ 1, 0},{ 1,-1},{ 0,-1},{ 0, 1},{-1, 0},{ 0,-2},{ 2, 0}},
|
||||
[02]={{ 1, 0},{-1, 0},{ 0, 1}},
|
||||
[20]={{-1, 0},{ 1, 0},{ 0,-1}},
|
||||
[13]={{ 0,-1},{ 1, 0},{ 0, 1}},
|
||||
[31]={{ 0,-1},{-1, 0},{ 0, 1}},
|
||||
[32]={{-1, 0},{ 0, 1},{-1, 1},{ 1, 0},{ 0, 2},{-2, 0}},
|
||||
[23]={{ 1, 0},{ 1,-1},{ 0,-1},{-1, 0},{ 0,-2},{ 2, 0}},
|
||||
[02]={{ 1, 0},{-1, 0},{-1,-1}},
|
||||
[20]={{-1, 0},{ 1, 0},{ 1, 1}},
|
||||
[13]={{ 0,-1},{-1, 1},{ 0, 1}},
|
||||
[31]={{ 0,-1},{ 1,-1},{ 0, 1}},
|
||||
},--F
|
||||
{},--E
|
||||
{
|
||||
[01]={{ 0,-1},{-1,-1},{ 1,-1},{ 1, 0},{ 1,-3},{-1, 0},{ 0, 2},{-1, 2}},
|
||||
[10]={{ 1, 0},{ 0,-1},{-1,-1},{ 0,-2},{ 0,-3},{ 1,-2},{ 0, 1}},
|
||||
[01]={{ 0,-1},{-1,-1},{ 1, 1},{ 1, 0},{ 1,-3},{-1, 0},{ 0, 2},{-1, 2}},
|
||||
[10]={{ 1, 0},{ 0,-1},{-1,-1},{ 0,-2},{-1, 1},{ 0,-3},{ 1,-2},{ 0, 1}},
|
||||
[03]={{ 0,-1},{ 1,-1},{-1,-1},{-1, 0},{-1,-3},{ 1, 0},{ 0, 2},{ 1, 2}},
|
||||
[30]={{-1, 0},{ 0,-1},{ 1,-1},{ 0,-2},{ 0,-3},{-1,-2},{ 0, 1}},
|
||||
[30]={{-1, 0},{ 0,-1},{ 1,-1},{ 0,-2},{ 1, 1},{ 0,-3},{-1,-2},{ 0, 1}},
|
||||
[12]={{ 1, 0},{-1, 0},{ 0,-2},{ 0,-3},{ 0, 1},{-1, 1}},
|
||||
[21]={{ 1,-1},{-1, 0},{ 1, 0},{ 0,-1},{ 0, 2},{ 0, 3}},
|
||||
[32]={{-1, 0},{ 1, 0},{ 0,-2},{ 0,-3},{ 0, 1},{ 1, 1}},
|
||||
@@ -213,10 +213,10 @@ local TRS={
|
||||
[31]={{-1, 0},{ 1, 1},{ 2, 0}},
|
||||
},--T5
|
||||
{
|
||||
[01]={{-1, 0},{-1, 1},{ 0,-2},{-1,-1},{-1,-2}},
|
||||
[10]={{ 1, 0},{ 1,-1}},
|
||||
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-1},{ 1,-2}},
|
||||
[30]={{-1, 0},{-1,-1}},
|
||||
[01]={{-1, 0},{-1, 1},{ 0,-2},{-1,-2},{-1,-3}},
|
||||
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2},{ 1, 3}},
|
||||
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 1,-3}},
|
||||
[30]={{-1, 0},{-1,-1},{ 0,-2},{-1, 2},{-1, 3}},
|
||||
[12]={{ 1, 0},{ 1,-1},{ 1, 1}},
|
||||
[21]={{-1,-1},{-1, 1},{-1,-1}},
|
||||
[32]={{-1, 0},{-1,-1},{-1, 1}},
|
||||
@@ -256,18 +256,18 @@ local TRS={
|
||||
},--W
|
||||
function(P,d)
|
||||
if P.human then SFX.fieldPlay("rotate",nil,P)end
|
||||
if P.gameEnv.easyFresh then P:freshLockDelay()end
|
||||
local iki=XspinList[d]
|
||||
for test=1,#iki do
|
||||
local x,y=P.curX+iki[test][1],P.curY+iki[test][2]
|
||||
if not P:ifoverlap(P.cur.bk,x,y)then
|
||||
P.curX,P.curY=x,y
|
||||
P.spinLast=1
|
||||
P:freshgho()
|
||||
P:freshBlock(false,true)
|
||||
P.stat.rotate=P.stat.rotate+1
|
||||
return
|
||||
end
|
||||
end
|
||||
P:freshBlock(true,true)
|
||||
end,--X
|
||||
{
|
||||
[01]={{-1, 0},{-1, 1},{ 0,-3},{-1, 1},{-1, 2},{ 0, 1}},
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
local sin,cos=math.sin,math.cos
|
||||
snapLevelValue={1,10,20,40,60,80}
|
||||
title={
|
||||
{
|
||||
@@ -114,6 +115,12 @@ title={
|
||||
5878, 463,
|
||||
},
|
||||
}
|
||||
for _,C in next,title do
|
||||
for i=1,#C do
|
||||
C[i]=C[i]*.1626
|
||||
end
|
||||
end
|
||||
--[[
|
||||
title2={}
|
||||
for i=1,#title do title2[i]=title[i]end
|
||||
title2[5]={
|
||||
@@ -140,12 +147,22 @@ title2[5]={
|
||||
3001, 1280,
|
||||
2779, 1280,
|
||||
}
|
||||
|
||||
for _,C in next,title do
|
||||
for i=1,#C do
|
||||
C[i]=C[i]*.1626
|
||||
]]
|
||||
title_fan={}
|
||||
for i=1,8 do
|
||||
local L={}
|
||||
title_fan[i]=L
|
||||
for j=1,#title[i]do
|
||||
L[j]=title[i][j]
|
||||
end
|
||||
for j=1,#L,2 do
|
||||
local x,y=L[j],L[j+1]--0<x<3041, 290<y<1280
|
||||
x,y=-(x+240+y*.3)*.002,(y-580)*.9
|
||||
x,y=y*cos(x),-y*sin(x)--Rec-Pol-Rec
|
||||
L[j],L[j+1]=x,y+300
|
||||
end
|
||||
end
|
||||
|
||||
customID={
|
||||
"drop","lock",
|
||||
"wait","fall",
|
||||
@@ -168,7 +185,7 @@ customRange={
|
||||
target={10,20,40,100,200,500,1000,1e99},
|
||||
freshLimit={0,8,15,1e99},
|
||||
opponent={0,1,2,3,4,5,11,12,13,14,15,16},
|
||||
bg={"none","game1","game2","game3","aura","rgb","glow","matrix"},
|
||||
bg={"none","bg1","bg2","rainbow","aura","rgb","glow","matrix"},
|
||||
bgm={"blank","way","race","newera","push","reason","infinite","secret7th","secret8th","rockblock"},
|
||||
}
|
||||
local function T(s,t)return love.graphics.newText(setFont(s),t)end
|
||||
@@ -189,20 +206,17 @@ drawableText={
|
||||
mxcmb=T(20,"Max Combo"),
|
||||
pc=T(20,"Perfect Clear"),
|
||||
ko=T(25,"KO"),
|
||||
D=T(100,"D"),
|
||||
C=T(100,"C"),
|
||||
B=T(100,"B"),
|
||||
A=T(100,"A"),
|
||||
S=T(100,"S"),
|
||||
D=T(100,"D"),C=T(100,"C"),B=T(100,"B"),A=T(100,"A"),S=T(100,"S"),
|
||||
|
||||
|
||||
modeName=T(30),levelName=T(30),
|
||||
|
||||
|
||||
anykey=T(40),
|
||||
replaying=T(20),
|
||||
next=T(40),hold=T(40),
|
||||
win=T(120),finish=T(120),
|
||||
lose=T(120),pause=T(120),
|
||||
gameover=T(100),pause=T(120),
|
||||
|
||||
custom=T(80),sequence=T(80),
|
||||
setting_game=T(80),setting_video=T(80),setting_sound=T(80),
|
||||
@@ -210,9 +224,7 @@ drawableText={
|
||||
preview=T(40),
|
||||
keyboard=T(25),joystick=T(25),
|
||||
ctrlSetHelp=T(30),
|
||||
musicRoom=T(80),
|
||||
nowPlaying=T(50),
|
||||
musicRoom=T(80),nowPlaying=T(50),
|
||||
VKTchW=T(30),VKOrgW=T(30),VKCurW=T(30),
|
||||
noScore=T(45),
|
||||
highScore=T(30),
|
||||
noScore=T(45),highScore=T(30),
|
||||
}
|
||||
@@ -27,8 +27,8 @@ return{
|
||||
{name="round_4", x=-900, y=-800, size=35,shape=1,icon="round", unlock={"round_5"}},
|
||||
{name="round_5", x=-1100, y=-800, size=35,shape=1,icon="round", unlock={}},
|
||||
|
||||
{name="master_beginner", x=0, y=-1000, size=35,shape=1,icon="master", unlock={"master_adavnce"}},
|
||||
{name="master_adavnce", x=0, y=-1200, size=35,shape=1,icon="master", unlock={"master_final","GM"}},
|
||||
{name="master_beginner", x=0, y=-1000, size=35,shape=1,icon="master", unlock={"master_advance"}},
|
||||
{name="master_advance", x=0, y=-1200, size=35,shape=1,icon="master", unlock={"master_final","GM"}},
|
||||
{name="master_final", x=0, y=-1400, size=40,shape=2,icon="master", unlock={}},
|
||||
{name="GM", x=150, y=-1500, size=35,shape=1,icon="master", unlock={}},
|
||||
|
||||
@@ -82,5 +82,5 @@ return{
|
||||
{name="infinite_dig", x=-1000, y=-600, size=35,shape=1,icon="infinite_dig",unlock={}},
|
||||
{name="custom_clear", x=200, y=-350, size=45,shape=3,icon="custom", unlock={}},
|
||||
{name="custom_puzzle", x=200, y=-200, size=45,shape=3,icon="puzzle", unlock={}},
|
||||
{name="sprintPenta", x=-200, y=-200, size=45,shape=3,icon="sprint", unlock={}},
|
||||
{name="sprintPenta", x=-200, y=-200, size=50,shape=2,icon="sprint", unlock={}},
|
||||
}
|
||||
1001
parts/player.lua
1001
parts/player.lua
File diff suppressed because it is too large
Load Diff
@@ -18,6 +18,8 @@ local list={
|
||||
"paper(mrz)",
|
||||
"classic(_)",
|
||||
"brick(notypey)",
|
||||
"retro(notypey)",
|
||||
"retro_grey(notypey)",
|
||||
"text_bone(mrz)",
|
||||
"colored_bone(mrz)",
|
||||
"white_bone(mrz)",
|
||||
@@ -97,33 +99,33 @@ function SKIN.load()
|
||||
gc.pop()
|
||||
end
|
||||
local L=#list
|
||||
function SKIN.prevSet()--prev skin_set
|
||||
function SKIN.prevSet()--Prev skin_set
|
||||
local _=(setting.skinSet-2)%L+1
|
||||
setting.skinSet=_
|
||||
SKIN.change(_)
|
||||
_=list[_]
|
||||
TEXT.show(_,1100,100,int(300/#_)+5,"fly")
|
||||
end
|
||||
function SKIN.nextSet()--next skin_set
|
||||
function SKIN.nextSet()--Next skin_set
|
||||
local _=setting.skinSet%L+1
|
||||
setting.skinSet=_
|
||||
SKIN.change(_)
|
||||
_=list[_]
|
||||
TEXT.show(_,1100,100,int(300/#_)+5,"fly")
|
||||
end
|
||||
function SKIN.prev(i)--prev skin for [i]
|
||||
function SKIN.prev(i)--Prev skin for [i]
|
||||
local _=setting.skin
|
||||
_[i]=(_[i]-2)%11+1
|
||||
end
|
||||
function SKIN.next(i)--next skin for [i]
|
||||
function SKIN.next(i)--Next skin for [i]
|
||||
local _=setting.skin
|
||||
_[i]=_[i]%11+1
|
||||
end
|
||||
function SKIN.rotate(i)--change direction of [i]
|
||||
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]
|
||||
function SKIN.change(i)--Change to skin_set[i]
|
||||
blockSkin=SKIN.lib[i]
|
||||
blockSkinMini=SKIN.libMini[i]
|
||||
end
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
local N1,N2={1,2},{2,1}
|
||||
local N3,N4={2,2},{1.5,1.5}
|
||||
local I1,I2={0.5,2.5},{2.5,0.5}
|
||||
local I3,I4={1.5,2.5},{2.5,1.5}
|
||||
local V4={2.5,2.5}
|
||||
local L1,L2={1,3},{3,1}
|
||||
local N1,N2={0,1},{1,0}
|
||||
local N3,N4={1,1},{.5,.5}
|
||||
local I1,I2={-.5,1.5},{1.5,-.5}
|
||||
local I3,I4={.5,1.5},{1.5,.5}
|
||||
local V4={1.5,1.5}
|
||||
local L1,L2={0,2},{2,0}
|
||||
local scs={
|
||||
--Tetramino
|
||||
{[0]=N1,N2,N3,N3},--Z
|
||||
|
||||
@@ -3,9 +3,10 @@ local Tick={}
|
||||
function Tick.finish(P)
|
||||
P.endCounter=P.endCounter+1
|
||||
if P.endCounter<40 then
|
||||
--Make field visible
|
||||
for j=1,#P.field do for i=1,10 do
|
||||
if P.visTime[j][i]<20 then P.visTime[j][i]=P.visTime[j][i]+.5 end
|
||||
end end--Make field visible
|
||||
end end
|
||||
elseif P.endCounter==60 then
|
||||
return true
|
||||
end
|
||||
@@ -13,9 +14,10 @@ end
|
||||
function Tick.lose(P)
|
||||
P.endCounter=P.endCounter+1
|
||||
if P.endCounter<40 then
|
||||
--Make field visible
|
||||
for j=1,#P.field do for i=1,10 do
|
||||
if P.visTime[j][i]<20 then P.visTime[j][i]=P.visTime[j][i]+.5 end
|
||||
end end--Make field visible
|
||||
end end
|
||||
elseif P.endCounter>80 then
|
||||
for i=1,#P.field do
|
||||
for j=1,10 do
|
||||
@@ -35,6 +37,7 @@ function Tick.lose(P)
|
||||
end
|
||||
if not modeEnv.royaleMode and #players>1 then
|
||||
P.y=P.y+P.endCounter*.26
|
||||
P.absFieldY=P.absFieldY+P.endCounter*.26
|
||||
end
|
||||
end
|
||||
function Tick.throwBadge(data)--{ifAI,Sender,timer}
|
||||
@@ -52,8 +55,9 @@ function Tick.throwBadge(data)--{ifAI,Sender,timer}
|
||||
else
|
||||
x2,y2=R.x+66*R.size,R.y+344*R.size
|
||||
end
|
||||
|
||||
--Generate badge object
|
||||
FX_badge[#FX_badge+1]={x1,y1,x2,y2,t=0}
|
||||
--generate badge object
|
||||
|
||||
if not data[1]and data[3]%8==0 then
|
||||
SFX.play("collect")
|
||||
@@ -63,6 +67,7 @@ function Tick.throwBadge(data)--{ifAI,Sender,timer}
|
||||
end
|
||||
function Tick.autoPause(data)
|
||||
data[1]=data[1]+1
|
||||
if SCN.cur~="play"then return true end
|
||||
if data[1]==120 then
|
||||
if SCN.cur=="play"then
|
||||
pauseGame()
|
||||
@@ -70,14 +75,4 @@ function Tick.autoPause(data)
|
||||
return true
|
||||
end
|
||||
end
|
||||
function Tick.autoResize(data)
|
||||
data[1]=data[1]+1
|
||||
if data[1]==62 then
|
||||
local w,h=gc.getWidth(),gc.getHeight()
|
||||
if w<h then
|
||||
love.resize(w,h)
|
||||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
return Tick
|
||||
1396
parts/updateLog.lua
1396
parts/updateLog.lua
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user