Compare commits
39 Commits
pre0.17.0-
...
pre0.17.0-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bd90e051d4 | ||
|
|
26e66b313f | ||
|
|
c534bbd12a | ||
|
|
83b5e217e5 | ||
|
|
c0adf5bf0b | ||
|
|
4ff737a4ac | ||
|
|
5af0706c09 | ||
|
|
4ccee0f1de | ||
|
|
9b752d540e | ||
|
|
e860c7b7ec | ||
|
|
8a1fd9531f | ||
|
|
5fd6e0ee99 | ||
|
|
53b2b81fe0 | ||
|
|
6ccc811b46 | ||
|
|
962a61567a | ||
|
|
58f05e1cec | ||
|
|
6b426790c7 | ||
|
|
d4fc578673 | ||
|
|
51b567b8db | ||
|
|
07b47dee3f | ||
|
|
4431a906b9 | ||
|
|
2bb6852e3e | ||
|
|
1948ed3e16 | ||
|
|
81b5ccae30 | ||
|
|
5543ff0d29 | ||
|
|
cd567e9e98 | ||
|
|
5d86925a8a | ||
|
|
e3db564a4b | ||
|
|
a4293624ab | ||
|
|
367e2dc81a | ||
|
|
9ec33c6eef | ||
|
|
9c9b8d36f2 | ||
|
|
4fc6f335c7 | ||
|
|
d2f4123d08 | ||
|
|
b29d352a1b | ||
|
|
cd5a71cd12 | ||
|
|
cdd68e985d | ||
|
|
8cf4d4280c | ||
|
|
cd29bf8702 |
@@ -1,5 +1,5 @@
|
||||
local abs=math.abs
|
||||
local function hsv(h,s,v,a)
|
||||
local function hsv(h,s,v,a)--Color type, Color amount, Light
|
||||
if s<=0 then return v,v,v,a end
|
||||
h=h*6
|
||||
local c=v*s
|
||||
@@ -28,10 +28,10 @@ local COLOR={
|
||||
navy= {hsv(0.56, 1.00, 1.00)},
|
||||
sea= {hsv(0.61, 1.00, 1.00)},
|
||||
blue= {hsv(0.64, 1.00, 0.95)},
|
||||
violet= {hsv(0.73, 1.00, 0.91)},
|
||||
violet= {hsv(0.74, 1.00, 0.91)},
|
||||
purple= {hsv(0.80, 1.00, 0.81)},
|
||||
magenta= {hsv(0.86, 1.00, 0.78)},
|
||||
wine= {hsv(0.94, 0.96, 0.91)},
|
||||
wine= {hsv(0.92, 0.98, 0.91)},
|
||||
|
||||
lRed= {hsv(0.00, 0.38, 0.93)},
|
||||
lFire= {hsv(0.04, 0.45, 0.91)},
|
||||
@@ -45,7 +45,7 @@ local COLOR={
|
||||
lNavy= {hsv(0.54, 0.80, 0.95)},
|
||||
lSea= {hsv(0.56, 0.72, 0.97)},
|
||||
lBlue= {hsv(0.64, 0.44, 0.96)},
|
||||
lViolet= {hsv(0.73, 0.47, 0.95)},
|
||||
lViolet= {hsv(0.72, 0.47, 0.95)},
|
||||
lPurple= {hsv(0.80, 0.62, 0.89)},
|
||||
lMagenta= {hsv(0.86, 0.61, 0.89)},
|
||||
lWine= {hsv(0.93, 0.57, 0.92)},
|
||||
@@ -72,12 +72,17 @@ local COLOR={
|
||||
gray= {hsv(0.02, 0.05, 0.65)},
|
||||
lGray= {hsv(0.02, 0.06, 0.86)},
|
||||
white= {hsv(0.01, 0.02, 0.99)},
|
||||
|
||||
xGray= {hsv(0.00, 0.00, 0.35,.8)},
|
||||
lxGray= {hsv(0.00, 0.00, 0.62,.8)},
|
||||
dxGray= {hsv(0.00, 0.00, 0.16,.8)},
|
||||
}
|
||||
for k,v in next,{
|
||||
R='red', F='fire', O='orange', Y='yellow', L='lime', J='jade', G='green', A='aqua', C='cyan', N='navy', S='sea', B='blue', V='violet', P='purple', M='magenta', W='wine',
|
||||
lR='lRed',lF='lFire',lO='lOrange',lY='lYellow',lL='lLime',lJ='lJade',lG='lGreen',lA='lAqua',lC='lCyan',lN='lNavy',lS='lSea',lB='lBlue',lV='lViolet',lP='lPurple',lM='lMagenta',lW='lWine',
|
||||
dR='dRed',dF='dFire',dO='dOrange',dY='dYellow',dL='dLime',dJ='dJade',dG='dGreen',dA='dAqua',dC='dCyan',dN='dNavy',dS='dSea',dB='dBlue',dV='dViolet',dP='dPurple',dM='dMagenta',dW='dWine',
|
||||
D='black',dH='dGray',H='gray',lH='lGray',Z='white',
|
||||
X='xGray',lX='lxGray',dX='dxGray',
|
||||
--Remain letter: EIKQTUX
|
||||
}do
|
||||
COLOR[k]=COLOR[v]
|
||||
|
||||
@@ -733,7 +733,7 @@ function love.run()
|
||||
end
|
||||
gc_replaceTransform(SCR.xOy_d)
|
||||
--Draw Version string
|
||||
gc_setColor(.8,.8,.8,.4)
|
||||
gc_setColor(.9,.9,.9,.42)
|
||||
FONT.set(20)
|
||||
mStr(VERSION.string,0,-30)
|
||||
gc_replaceTransform(SCR.xOy_dl)
|
||||
|
||||
@@ -148,9 +148,9 @@ function button:isAbove(x,y)
|
||||
local ATV=self.ATV
|
||||
return
|
||||
x>self.x-ATV and
|
||||
y>self.y-ATV and
|
||||
y>self.y and
|
||||
x<self.x+self.w+2*ATV and
|
||||
y<self.y+self.h+2*ATV
|
||||
y<self.y+self.h
|
||||
end
|
||||
function button:getCenter()
|
||||
return self.x+self.w*.5,self.y+self.h*.5
|
||||
@@ -171,17 +171,19 @@ function button:draw()
|
||||
|
||||
--Button
|
||||
gc_setColor(.15+r*.7,.15+g*.7,.15+b*.7,.9)
|
||||
gc_rectangle('fill',x-ATV,y-ATV,w+2*ATV,h+2*ATV,3)
|
||||
gc_rectangle('fill',x-ATV,y,w+2*ATV,h,4)
|
||||
gc_setLineWidth(2)
|
||||
gc_setColor(.3+r*.7,.3+g*.7,.3+b*.7)
|
||||
gc_rectangle('line',x-ATV,y,w+2*ATV,h,5)
|
||||
if ATV>0 then
|
||||
gc_setLineWidth(2)
|
||||
gc_setColor(.97,.97,.97,ATV*.125)
|
||||
gc_rectangle('line',x-ATV+2,y-ATV+2,w+2*ATV-4,h+2*ATV-4,3)
|
||||
gc_rectangle('line',x-ATV,y,w+2*ATV,h,3)
|
||||
end
|
||||
|
||||
--Drawable
|
||||
local obj=self.obj
|
||||
local ox,oy=obj:getWidth()*.5,obj:getHeight()*.5
|
||||
local y0=y+h*.5-ATV*.5
|
||||
local y0=y+h*.5
|
||||
gc_setColor(1,1,1,.2+ATV*.05)
|
||||
if self.align=='M'then
|
||||
local x0=x+w*.5
|
||||
@@ -219,9 +221,9 @@ function button:press(_,_,k)
|
||||
SYSFX.newRectRipple(
|
||||
6,
|
||||
self.x-ATV,
|
||||
self.y-ATV-WIDGET.scrollPos,
|
||||
self.y-WIDGET.scrollPos,
|
||||
self.w+2*ATV,
|
||||
self.h+2*ATV
|
||||
self.h
|
||||
)
|
||||
if self.sound then
|
||||
SFX.play('button')
|
||||
@@ -301,6 +303,10 @@ function key:draw()
|
||||
local align=self.align
|
||||
local r,g,b=c[1],c[2],c[3]
|
||||
|
||||
--Background
|
||||
gc_setColor(0,0,0,.3)
|
||||
gc_rectangle('fill',x,y,w,h,4)
|
||||
|
||||
--Frame
|
||||
if not self.noFrame then
|
||||
gc_setColor(.2+r*.8,.2+g*.8,.2+b*.8,.7)
|
||||
@@ -415,6 +421,10 @@ function switch:draw()
|
||||
local x,y=self.x,self.y
|
||||
local ATV=self.ATV
|
||||
|
||||
--Background
|
||||
gc_setColor(0,0,0,.3)
|
||||
gc_rectangle('fill',x,y-25,50,50,4)
|
||||
|
||||
--Frame
|
||||
gc_setLineWidth(2)
|
||||
gc_setColor(1,1,1,.6+ATV*.1)
|
||||
@@ -700,6 +710,10 @@ function selector:draw()
|
||||
local w=self.w
|
||||
local ATV=self.ATV
|
||||
|
||||
--Background
|
||||
gc_setColor(0,0,0,.3)
|
||||
gc_rectangle('fill',x,y,w,60,4)
|
||||
|
||||
--Frame
|
||||
gc_setColor(1,1,1,.6+ATV*.1)
|
||||
gc_setLineWidth(2)
|
||||
@@ -863,9 +877,15 @@ function inputBox:draw()
|
||||
local x,y,w,h=self.x,self.y,self.w,self.h
|
||||
local ATV=self.ATV
|
||||
|
||||
gc_setColor(1,1,1,ATV*.08)
|
||||
gc_rectangle('fill',x,y,w,h,3)
|
||||
--Background
|
||||
gc_setColor(0,0,0,.4)
|
||||
gc_rectangle('fill',x,y,w,h,4)
|
||||
|
||||
--Highlight
|
||||
gc_setColor(1,1,1,ATV*.08*(math.sin(TIME()*4.2)*.2+.8))
|
||||
gc_rectangle('fill',x,y,w,h,4)
|
||||
|
||||
--Frame
|
||||
gc_setColor(1,1,1)
|
||||
gc_setLineWidth(3)
|
||||
gc_rectangle('line',x,y,w,h,3)
|
||||
@@ -1023,8 +1043,8 @@ function textBox:draw()
|
||||
local lineH=self.lineH
|
||||
|
||||
--Background
|
||||
gc_setColor(0,0,0,.4)
|
||||
gc_rectangle('fill',x,y,w,h,3)
|
||||
gc_setColor(0,0,0,.3)
|
||||
gc_rectangle('fill',x,y,w,h,4)
|
||||
|
||||
--Frame
|
||||
gc_setLineWidth(2)
|
||||
@@ -1197,6 +1217,10 @@ function listBox:draw()
|
||||
gc_push('transform')
|
||||
gc_translate(x,y)
|
||||
|
||||
--Background
|
||||
gc_setColor(0,0,0,.4)
|
||||
gc_rectangle('fill',0,0,w,h,4)
|
||||
|
||||
--Frame
|
||||
gc_setColor(WIDGET.sel==self and COLOR.lN or COLOR.Z)
|
||||
gc_setLineWidth(2)
|
||||
|
||||
7
main.lua
7
main.lua
@@ -24,6 +24,7 @@ VERSION=require"version"
|
||||
TIME=love.timer.getTime
|
||||
YIELD=coroutine.yield
|
||||
SYSTEM=love.system.getOS()
|
||||
if SYSTEM=='OS X'then SYSTEM='macOS'end
|
||||
FNSF=SYSTEM:find'\79\83'--What does FNSF stand for? IDK so don't ask me lol
|
||||
MOBILE=SYSTEM=='Android'or SYSTEM=='iOS'
|
||||
SAVEDIR=fs.getSaveDirectory()
|
||||
@@ -60,7 +61,7 @@ FONT.setFallback('norm')
|
||||
SCR.setSize(1280,720)--Initialize Screen size
|
||||
BGM.setMaxSources(5)
|
||||
BGM.setChange(function(name)MES.new('music',text.nowPlaying..name,5)end)
|
||||
VOC.setDiversion(1)
|
||||
VOC.setDiversion(.62)
|
||||
|
||||
table.insert(_LOADTIMELIST_,("Load Zframework: %.3fs"):format(TIME()-_LOADTIME_))
|
||||
|
||||
@@ -415,7 +416,6 @@ do
|
||||
local needSave
|
||||
|
||||
if not fs.getInfo('conf/data')then
|
||||
FIRSTLAUNCH=true
|
||||
needSave=true
|
||||
end
|
||||
if type(STAT.version)~='number'then
|
||||
@@ -559,7 +559,8 @@ do
|
||||
end
|
||||
end
|
||||
|
||||
--First start for phones
|
||||
--First start
|
||||
FIRSTLAUNCH=STAT.run==0
|
||||
if FIRSTLAUNCH and MOBILE then
|
||||
SETTING.VKSwitch=true
|
||||
SETTING.powerInfo=true
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 41 KiB |
@@ -97,12 +97,12 @@ do
|
||||
{131,2,2, 0, 0,0},{131,2,2,-1,-1,0},{131,2,2,-1, 0,0},--S
|
||||
{131,1,2,-1, 0,0},{131,1,2, 0,-1,0},{131,1,2, 0, 0,0},--Z(misOrder)
|
||||
{313,2,2, 0, 0,0},{313,2,2,-1,-1,0},{313,2,2,-1, 0,0},--S(misOrder)
|
||||
{331,3,2, 0,-1,0},--J(farDown)
|
||||
{113,4,2,-1,-1,0},--L(farDown)
|
||||
{331,3,2, 0,-1,1},--J(farDown)
|
||||
{113,4,2,-1,-1,1},--L(farDown)
|
||||
{113,3,2,-1,-1,0},{113,3,0, 0, 0,0},--J
|
||||
{331,4,2, 0,-1,0},{331,4,0,-1, 0,0},--L
|
||||
{222,7,2,-1, 0,2},{222,7,2,-2, 0,2},{222,7,2, 0, 0,2},--I
|
||||
{222,7,0,-1, 1,1},{222,7,0,-2, 1,1},{222,7,0, 0, 1,1},--I(high)
|
||||
{222,7,2,-1, 0,2},{222,7,2,-2, 0,2},{222,7,2, 0, 0,2},--I(low)
|
||||
{121,6,0, 1,-1,2},{112,6,0, 2,-1,2},{122,6,0, 1,-2,2},--O
|
||||
{323,6,0,-1,-1,2},{332,6,0,-2,-1,2},{322,6,0,-1,-2,2},--O
|
||||
}--{keys, ID, dir, dx, dy, freeLevel (0=immovable, 1=U/D-immovable, 2=free)}
|
||||
@@ -204,6 +204,7 @@ do
|
||||
P.spinLast=2
|
||||
P.stat.rotate=P.stat.rotate+1
|
||||
P:freshBlock('move')
|
||||
C.spinSeq=nil
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
18
parts/eventsets/bigWallGen.lua
Normal file
18
parts/eventsets/bigWallGen.lua
Normal file
@@ -0,0 +1,18 @@
|
||||
return{
|
||||
hook_drop=function(P)
|
||||
if P.lastPiece.row>0 then
|
||||
for _=1,#P.clearedRow do
|
||||
local h=#P.field
|
||||
P.field[h+1]=LINE.new(20)
|
||||
P.visTime[h+1]=LINE.new(20)
|
||||
for i=3,7 do P.field[h+1][i]=0 end
|
||||
end
|
||||
if P.combo>P.modeData.maxCombo then
|
||||
P.modeData.maxCombo=P.combo
|
||||
end
|
||||
if P.stat.row>=200 then
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
end
|
||||
}
|
||||
38
parts/eventsets/big_h.lua
Normal file
38
parts/eventsets/big_h.lua
Normal file
@@ -0,0 +1,38 @@
|
||||
return
|
||||
{
|
||||
drop=1,
|
||||
wait=8,
|
||||
fall=20,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
PLY.draw.drawTargetLine(P,200-P.stat.row)
|
||||
end,
|
||||
task=function(P)
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
F[i]=LINE.new(20)
|
||||
P.visTime[i]=LINE.new(20)
|
||||
for x=3,7 do F[i][x]=0 end
|
||||
end
|
||||
P.modeData.target=50
|
||||
end,
|
||||
hook_drop=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target==50 then
|
||||
P.gameEnv.drop=.5
|
||||
P.modeData.target=100
|
||||
SFX.play('reach')
|
||||
elseif P.modeData.target==100 then
|
||||
P.gameEnv.drop=.25
|
||||
P.modeData.target=150
|
||||
SFX.play('reach')
|
||||
elseif P.modeData.target==150 then
|
||||
P:set20G(true)
|
||||
P.modeData.target=200
|
||||
SFX.play('reach')
|
||||
else
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
end
|
||||
}
|
||||
32
parts/eventsets/big_n.lua
Normal file
32
parts/eventsets/big_n.lua
Normal file
@@ -0,0 +1,32 @@
|
||||
local dropSpeed={100,80,60,48,36,28,20,16,12,10,8,6,4,2,2,1,1,.5,.5}
|
||||
|
||||
return
|
||||
{
|
||||
drop=120,
|
||||
wait=8,
|
||||
fall=20,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
PLY.draw.drawTargetLine(P,200-P.stat.row)
|
||||
end,
|
||||
task=function(P)
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
F[i]=LINE.new(20)
|
||||
P.visTime[i]=LINE.new(20)
|
||||
for x=3,7 do F[i][x]=0 end
|
||||
end
|
||||
P.modeData.target=10
|
||||
end,
|
||||
hook_drop=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
P.gameEnv.drop=dropSpeed[P.modeData.target/10]
|
||||
P.modeData.target=P.modeData.target+10
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
end
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
local dropSpeed={50,40,30,24,18,14,10,8,6,5,4,3,2,1,1,.5,.5,.25,.25}
|
||||
local dropSpeed={50,40,30,24,18,13,9,6,4,3,2,2,1,1,.5,.5,.5,.25,.25}
|
||||
|
||||
return
|
||||
{
|
||||
|
||||
@@ -18,8 +18,15 @@ return
|
||||
if P.modeData.target==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
if P.modeData.target==100 then
|
||||
if P.modeData.target==40 then
|
||||
BG.set('rainbow')
|
||||
elseif P.modeData.target==80 then
|
||||
BG.set('rainbow2')
|
||||
elseif P.modeData.target==100 then
|
||||
BG.set('glow')
|
||||
P.modeData.lock=6
|
||||
elseif P.modeData.target==120 then
|
||||
BG.set('lightning')
|
||||
end
|
||||
P.gameEnv.wait=waitSpeed[P.modeData.target/10]
|
||||
P.modeData.target=P.modeData.target+10
|
||||
|
||||
@@ -18,8 +18,16 @@ return
|
||||
if P.modeData.target==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
if P.modeData.target==100 then
|
||||
if P.modeData.target==40 then
|
||||
BG.set('rainbow')
|
||||
elseif P.modeData.target==80 then
|
||||
BG.set('rainbow2')
|
||||
elseif P.modeData.target==100 then
|
||||
BG.set('glow')
|
||||
P.modeData.lock=5
|
||||
BGM.play('secret8th remix')
|
||||
elseif P.modeData.target==120 then
|
||||
BG.set('lightning')
|
||||
end
|
||||
P.gameEnv.wait=waitSpeed[P.modeData.target/10]
|
||||
P.modeData.target=P.modeData.target+10
|
||||
|
||||
@@ -18,8 +18,16 @@ return
|
||||
if P.modeData.target==200 then
|
||||
P:win('finish')
|
||||
else
|
||||
if P.modeData.target==100 then
|
||||
if P.modeData.target==40 then
|
||||
BG.set('rainbow')
|
||||
elseif P.modeData.target==80 then
|
||||
BG.set('rainbow2')
|
||||
elseif P.modeData.target==100 then
|
||||
BG.set('glow')
|
||||
P.modeData.lock=4
|
||||
BGM.play('secret7th remix')
|
||||
elseif P.modeData.target==120 then
|
||||
BG.set('lightning')
|
||||
end
|
||||
P.gameEnv.wait=waitSpeed[P.modeData.target/10]
|
||||
P.modeData.target=P.modeData.target+10
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -15,6 +15,42 @@ local playSFX=SFX.play
|
||||
|
||||
|
||||
--System
|
||||
do--function tryBack()
|
||||
local sureTime=-1e99
|
||||
function tryBack()
|
||||
if TIME()-sureTime<1 then
|
||||
sureTime=-1e99
|
||||
return true
|
||||
else
|
||||
sureTime=TIME()
|
||||
MES.new('warn',text.sureQuit)
|
||||
end
|
||||
end
|
||||
end
|
||||
do--function tryReset()
|
||||
local sureTime=-1e99
|
||||
function tryReset()
|
||||
if TIME()-sureTime<1 then
|
||||
sureTime=-1e99
|
||||
return true
|
||||
else
|
||||
sureTime=TIME()
|
||||
MES.new('warn',text.sureReset)
|
||||
end
|
||||
end
|
||||
end
|
||||
do--function tryDelete()
|
||||
local sureTime=-1e99
|
||||
function tryDelete()
|
||||
if TIME()-sureTime<1 then
|
||||
sureTime=-1e99
|
||||
return true
|
||||
else
|
||||
sureTime=TIME()
|
||||
MES.new('warn',text.sureDelete)
|
||||
end
|
||||
end
|
||||
end
|
||||
do--function loadFile(name,args), function saveFile(data,name,args)
|
||||
local t=setmetatable({},{__index=function()return"'$1' loading failed: $2"end})
|
||||
function loadFile(name,args)
|
||||
@@ -216,17 +252,17 @@ function royaleLevelup()
|
||||
BGM.play('cruelty')
|
||||
end
|
||||
elseif GAME.stage==4 then
|
||||
spd=10
|
||||
spd=8
|
||||
for _,P in next,PLY_ALIVE do
|
||||
P.gameEnv.pushSpeed=3
|
||||
end
|
||||
elseif GAME.stage==5 then
|
||||
spd=5
|
||||
spd=4
|
||||
for _,P in next,PLY_ALIVE do
|
||||
P.gameEnv.garbageSpeed=1
|
||||
end
|
||||
elseif GAME.stage==6 then
|
||||
spd=3
|
||||
spd=2
|
||||
if PLAYERS[1].alive then
|
||||
BGM.play('final')
|
||||
end
|
||||
@@ -237,7 +273,7 @@ function royaleLevelup()
|
||||
if GAME.curMode.name:find("_u")then
|
||||
for i=1,#PLY_ALIVE do
|
||||
local P=PLY_ALIVE[i]
|
||||
P.gameEnv.drop=int(P.gameEnv.drop*.3)
|
||||
P.gameEnv.drop=int(P.gameEnv.drop*.4)
|
||||
if P.gameEnv.drop==0 then
|
||||
P.curY=P.ghoY
|
||||
P:set20G(true)
|
||||
@@ -820,7 +856,7 @@ do--function drawSelfProfile()
|
||||
|
||||
--Draw avatar
|
||||
gc_setLineWidth(2)
|
||||
gc_setColor(.3,.3,.3,.8)gc_rectangle('fill',0,0,-300,80)
|
||||
gc_setColor(COLOR.X)gc_rectangle('fill',0,0,-300,80)
|
||||
gc_setColor(1,1,1)gc_rectangle('line',-300,0,300,80,5)
|
||||
gc_rectangle('line',-73,7,66,66,2)
|
||||
gc_draw(selfAvatar,-72,8,nil,.5)
|
||||
|
||||
@@ -675,7 +675,7 @@ do--Userdata tables
|
||||
r=0,
|
||||
},
|
||||
joystick={
|
||||
dpleft=1,dpright=2,a=3,b=4,y=5,
|
||||
dpleft=1,dpright=2,b=3,a=4,y=5,
|
||||
dpup=6,dpdown=7,rightshoulder=8,x=9,
|
||||
leftshoulder=0,
|
||||
},
|
||||
@@ -722,4 +722,4 @@ do--Userdata tables
|
||||
date=false,
|
||||
todayTime=0,
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -788,6 +788,11 @@ return{
|
||||
"term",
|
||||
"Vibrate your finger on the controller to achieve faster sideways movement speed than holding it.\nIt is most commonly used on classic Tetris where DAS is rather slow. In most cases, you do not need to hypertap in modern Tetris games, because their DAS is often fast enough.",
|
||||
},
|
||||
{"Passthrough",
|
||||
"passthrough pingthrough",
|
||||
"term",
|
||||
"",--TODO
|
||||
},
|
||||
{"Tetris OL attack",
|
||||
"top tetrisonlineattack",
|
||||
"term",
|
||||
|
||||
@@ -809,6 +809,11 @@ return{
|
||||
"term",
|
||||
"快速震动手指,实现比长按更快速+灵活的高速单点移动,主要在经典块的高难度下(因为das不可调而且特别慢,高速下很容易md导致失败,此时手动连点就比自动移动更快)或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人称为“Hypertapper”。",
|
||||
},
|
||||
{"穿透 Passthrough",
|
||||
"穿透 passthrough pingthrough",
|
||||
"term",
|
||||
"(攻击)穿透,指双方的攻击明明时间上很接近但没有抵消,互相都收到的现象。\nTETR.IO中自定义房间如果开启passthrough规则(曾经天梯默认开启),那么对手消行攻击的瞬间能看到自己的红条出现但其处于“无敌时间”内,不会触发也不能抵消,此时你的攻击会直接打给对手。(应该是给攻击的飞行动画预留时间,同时也让玩家能反应过来并主动选择要不要抵消,要的话就再等一会)\n另有pingthrough的说法,最终效果同passthrough,只是根本原因是不可避免的网络传输延迟。设计比较简单的联网对战块没有特殊考虑的话可能自然就会带有这个机制。",
|
||||
},
|
||||
{"TOP攻击表",
|
||||
"攻击表 top attack",
|
||||
"term",
|
||||
|
||||
@@ -12,6 +12,7 @@ return{
|
||||
},
|
||||
sureQuit="Press again to quit",
|
||||
sureReset="Press again to reset",
|
||||
sureDelete="Press again to delete",
|
||||
newDay="A new day, a new beginning!",
|
||||
playedLong="You have been playing for a long time. Time to a break!",
|
||||
playedTooMuch="You have been playing for far too long! Techmino is fun, but remember to take some rests!",
|
||||
@@ -506,7 +507,7 @@ return{
|
||||
play_clear="Start-Clear",
|
||||
play_puzzle="Start-Puzzle",
|
||||
|
||||
reset="Reset (Del)",
|
||||
reset="Reset (del)",
|
||||
advance="More (A)",
|
||||
mod="Mods (F1)",
|
||||
field="Edit Field (F)",
|
||||
@@ -578,7 +579,6 @@ return{
|
||||
staff="Staff",
|
||||
his="History",
|
||||
legals="Legals",
|
||||
qq="Author's QQ",
|
||||
},
|
||||
dict={
|
||||
title="TetroDictionary",
|
||||
@@ -625,7 +625,6 @@ return{
|
||||
title="Account",
|
||||
},
|
||||
app_15p={
|
||||
reset="Shuffle",
|
||||
color="Color",
|
||||
invis="Invis",
|
||||
slide="Slide",
|
||||
@@ -633,42 +632,33 @@ return{
|
||||
revKB="Reverse",
|
||||
},
|
||||
app_schulteG={
|
||||
reset="Reset",
|
||||
rank="Size",
|
||||
invis="Invis",
|
||||
disappear="Hide",
|
||||
tapFX="Tap FX",
|
||||
},
|
||||
app_pong={
|
||||
reset="Restart",
|
||||
},
|
||||
app_AtoZ={
|
||||
level="Level",
|
||||
keyboard="Keyboard",
|
||||
reset="Reset",
|
||||
},
|
||||
app_2048={
|
||||
reset="Reset",
|
||||
invis="Invis",
|
||||
tapControl="Tap controls",
|
||||
|
||||
skip="Skip Round",
|
||||
},
|
||||
app_ten={
|
||||
reset="Reset",
|
||||
next="Next",
|
||||
invis="Invis",
|
||||
fast="Fast",
|
||||
},
|
||||
app_dtw={
|
||||
reset="Reset",
|
||||
color="Color",
|
||||
mode="Mode",
|
||||
bgm="BGM",
|
||||
arcade="Arcade",
|
||||
},
|
||||
app_link={
|
||||
reset="Reset",
|
||||
invis="Invis",
|
||||
},
|
||||
savedata={
|
||||
|
||||
@@ -2,6 +2,7 @@ return{
|
||||
fallback='en',
|
||||
sureQuit="Pulsa de nuevo para salir",
|
||||
-- sureReset="Press again to reset",
|
||||
-- sureDelete="Press again to delete",
|
||||
newDay="[Anti-adicción] ¡Nuevo día, nuevo comienzo!",
|
||||
playedLong="[Anti-adicción] Estuviste jugando un buen rato hoy. Recuerda descansar de vez en cuando.",
|
||||
playedTooMuch="[Anti-adicción] ¡Has jugado mucho por hoy! No puedes jugar más.",
|
||||
@@ -535,7 +536,6 @@ return{
|
||||
staff="Staff",
|
||||
his="Hist. de Acts.",
|
||||
-- legals="Legals",
|
||||
qq="QQ del Autor",
|
||||
},
|
||||
dict={
|
||||
title="TetroDictionary",
|
||||
@@ -583,7 +583,6 @@ return{
|
||||
title="Cuenta",
|
||||
},
|
||||
app_15p={
|
||||
reset="Mezclar",
|
||||
color="Color",
|
||||
invis="A ciegas",
|
||||
slide="Mover",
|
||||
@@ -591,46 +590,34 @@ return{
|
||||
revKB="Deshacer",
|
||||
},
|
||||
app_schulteG={
|
||||
reset="Reiniciar",
|
||||
rank="Tamaño",
|
||||
invis="A ciegas",
|
||||
disappear="No mostrar",
|
||||
tapFX="Sonido al pulsar",
|
||||
},
|
||||
app_pong={
|
||||
reset="Reiniciar",
|
||||
},
|
||||
app_AtoZ={
|
||||
level="Nivel",
|
||||
keyboard="Teclado",
|
||||
reset="Reiniciar",
|
||||
},
|
||||
app_2048={
|
||||
reset="Reiniciar",
|
||||
invis="A ciegas",
|
||||
tapControl="Control táctil",
|
||||
skip="Saltar ronda",
|
||||
},
|
||||
app_ten={
|
||||
reset="Reiniciar",
|
||||
next="Siguiente",
|
||||
invis="A ciegas",
|
||||
fast="Rápido",
|
||||
},
|
||||
app_dtw={
|
||||
reset="Reiniciar",
|
||||
color="Color",
|
||||
mode="Modo",
|
||||
bgm="BGM",
|
||||
arcade="Arcade",
|
||||
},
|
||||
app_link={
|
||||
reset="Reiniciar",
|
||||
invis="A ciegas",
|
||||
},
|
||||
app_arithmetic={
|
||||
reset="Reiniciar",
|
||||
},
|
||||
savedata={
|
||||
export="Exportar al portapapeles",
|
||||
import="Importar de portapapeles",
|
||||
|
||||
@@ -2,6 +2,7 @@ return{
|
||||
fallback='en',
|
||||
sureQuit="Appuyez à nouveau pour sortir",
|
||||
-- sureReset="Press again to reset",
|
||||
-- sureDelete="Press again to delete",
|
||||
newDay="[Anti-addiction] Nouveau jour, nouveau commencement !",
|
||||
playedLong="[Anti-addiction] Vous avez joué pendant un bon bout de temps aujourd'hui. Faites des pauses.",
|
||||
playedTooMuch="[Anti-addiction] Vous avez joué trop longtemps ! Vous ne pouvez plus jouer.",
|
||||
@@ -472,7 +473,7 @@ return{
|
||||
play_clear="Démarrer Clear",
|
||||
play_puzzle="Démarrer Puzzle",
|
||||
|
||||
-- reset="Reset (Del)",
|
||||
-- reset="Reset (del)",
|
||||
advance="Plus (A)",
|
||||
mod="Mods (F1)",
|
||||
field="Modifier la matrice (F)",
|
||||
@@ -578,7 +579,6 @@ return{
|
||||
title="Compte",
|
||||
},
|
||||
app_15p={
|
||||
reset="Réinitialiser",
|
||||
color="Couleur",
|
||||
invis="Aveugler",
|
||||
slide="Glisser",
|
||||
@@ -586,34 +586,26 @@ return{
|
||||
revKB="Inverser",
|
||||
},
|
||||
app_schulteG={
|
||||
reset="Réinitialiser",
|
||||
rank="Taille",
|
||||
invis="Aveugler",
|
||||
disappear="Cacher",
|
||||
tapFX="Effet quand tapé",
|
||||
},
|
||||
app_pong={
|
||||
reset="Redémarrer",
|
||||
},
|
||||
app_AtoZ={
|
||||
level="niveau",
|
||||
keyboard="Clavier",
|
||||
reset="Redémarrer",
|
||||
},
|
||||
app_2048={
|
||||
reset="Réinitialiser",
|
||||
invis="Aveugler",
|
||||
tapControl="Contrôle par toucher",
|
||||
skip="Passer Round",
|
||||
},
|
||||
app_ten={
|
||||
reset="Réinitialiser",
|
||||
next="Prévisualisations",
|
||||
invis="Aveugler",
|
||||
-- fast="Fast",
|
||||
},
|
||||
app_dtw={
|
||||
reset="Réinitialiser",
|
||||
color="Couleur",
|
||||
mode="Mode",
|
||||
bgm="Musique",
|
||||
@@ -623,15 +615,10 @@ return{
|
||||
staff="Staff",
|
||||
his="History",
|
||||
-- legals="Legals",
|
||||
qq="QQ du créateur",
|
||||
},
|
||||
app_link={
|
||||
reset="Réinitialiser",
|
||||
invis="Aveugler",
|
||||
},
|
||||
app_arithmetic={
|
||||
reset="Réinitialiser",
|
||||
},
|
||||
savedata={
|
||||
-- export="Export to clipboard",
|
||||
-- import="Import from clipboard",
|
||||
|
||||
@@ -3,6 +3,7 @@ return{
|
||||
fallback='en',
|
||||
sureQuit="Aparte novamente para sair",
|
||||
-- sureReset="Press again to reset",
|
||||
-- sureDelete="Press again to delete",
|
||||
newDay="[Anti-vício] Novo dia, um começo novo!",
|
||||
playedLong="[Anti-vício] Você andou jogando bastante hoje. Certifique-se de fazer pausas.",
|
||||
playedTooMuch="[Anti-vício] Você esteve jogando demais hoje! Você não pode jogar mais.",
|
||||
@@ -494,7 +495,7 @@ return{
|
||||
play_clear="Iniciar-Limpar",
|
||||
play_puzzle="Iniciar-Puzzle",
|
||||
|
||||
-- reset="Reset (Del)",
|
||||
-- reset="Reset (del)",
|
||||
advance="Mais (A)",
|
||||
mod="Mods (F1)",
|
||||
field="Editar Tab. (F)",
|
||||
@@ -566,7 +567,6 @@ return{
|
||||
staff="Staff",
|
||||
his="History",
|
||||
-- legals="Legals",
|
||||
qq="Author's qq",
|
||||
},
|
||||
dict={
|
||||
title="TetroDictionary",
|
||||
@@ -614,7 +614,6 @@ return{
|
||||
title="Conta",
|
||||
},
|
||||
app_15p={
|
||||
reset="Embaralhar",
|
||||
C="Cor",
|
||||
invis="Cego",
|
||||
slide="Deslizar",
|
||||
@@ -622,46 +621,34 @@ return{
|
||||
revKB="Reverso",
|
||||
},
|
||||
app_schulteG={
|
||||
reset="Resetar",
|
||||
rank="Tamanho",
|
||||
invis="Cego",
|
||||
disappear="Escond.",
|
||||
tapFX="FX De Toque",
|
||||
},
|
||||
app_pong={
|
||||
reset="Reiniciar",
|
||||
},
|
||||
app_AtoZ={
|
||||
level="Nivel",
|
||||
keyboard="Teclado",
|
||||
reset="Reiniciar",
|
||||
},
|
||||
app_2048={
|
||||
reset="Resetar",
|
||||
invis="Cego",
|
||||
-- tapControl="Tap control",
|
||||
-- skip="Skip Round",
|
||||
},
|
||||
app_ten={
|
||||
reset="Resetar",
|
||||
next="Próxima",
|
||||
invis="Cego",
|
||||
-- fast="Fast",
|
||||
},
|
||||
app_dtw={
|
||||
reset="Resetar",
|
||||
-- color="Color",
|
||||
-- mode="Mode",
|
||||
bgm="BGM",
|
||||
-- arcade="Arcade",
|
||||
},
|
||||
app_link={
|
||||
reset="Resetar",
|
||||
invis="Cego",
|
||||
},
|
||||
app_arithmetic={
|
||||
reset="Resetar",
|
||||
},
|
||||
savedata={
|
||||
-- export="Export to clipboard",
|
||||
-- import="Import from clipboard",
|
||||
|
||||
@@ -14,6 +14,7 @@ return{
|
||||
|
||||
sureQuit="X?",
|
||||
sureReset="R?",
|
||||
sureDelete="D?",
|
||||
newDay="→→!→→",
|
||||
playedLong="→→→→!, XX□XX!",
|
||||
playedTooMuch="→→→→→→→→→→→!, XX□XX!!!!!!!",
|
||||
@@ -149,7 +150,7 @@ return{
|
||||
},
|
||||
mod={
|
||||
title="?!?!?!",
|
||||
reset="R",
|
||||
reset="R (tab)",
|
||||
unranked="X!!!",
|
||||
},
|
||||
pause={
|
||||
@@ -396,7 +397,7 @@ return{
|
||||
play_clear="Start-Clear",
|
||||
play_puzzle="Start-Puzzle",
|
||||
|
||||
reset="Reset (Del)",
|
||||
reset="Reset (del)",
|
||||
advance="More (A)",
|
||||
mod="?!?!?! (F1)",
|
||||
field="Edit Field (F)",
|
||||
@@ -461,7 +462,6 @@ return{
|
||||
staff="Orz",
|
||||
his="_&_",
|
||||
legals="™",
|
||||
qq="_@_",
|
||||
},
|
||||
dict={
|
||||
title="TetroDictionary",
|
||||
@@ -508,7 +508,6 @@ return{
|
||||
title="@_@",
|
||||
},
|
||||
app_15p={
|
||||
reset="!@#$%",
|
||||
color="~~~",
|
||||
invis="???",
|
||||
slide="~_~",
|
||||
@@ -516,34 +515,26 @@ return{
|
||||
revKB="Reverse",
|
||||
},
|
||||
app_schulteG={
|
||||
reset="!@#$%",
|
||||
rank="←?→",
|
||||
invis="???",
|
||||
disappear="=X=",
|
||||
tapFX="↓ !",
|
||||
},
|
||||
app_pong={
|
||||
reset="R",
|
||||
},
|
||||
app_AtoZ={
|
||||
level="_ _ _",
|
||||
keyboard="[##]",
|
||||
reset="R",
|
||||
},
|
||||
app_2048={
|
||||
reset="R",
|
||||
invis="???",
|
||||
tapControl="_↓",
|
||||
skip=">>",
|
||||
},
|
||||
app_ten={
|
||||
reset="R",
|
||||
next="→",
|
||||
invis="???",
|
||||
fast="~~→",
|
||||
},
|
||||
app_dtw={
|
||||
reset="R",
|
||||
color="~~~",
|
||||
mode="?",
|
||||
bgm="#~#",
|
||||
|
||||
@@ -140,7 +140,6 @@ return{fallback='zh',
|
||||
staff="游戏谁写的",
|
||||
his="黑历史",
|
||||
legals="正经人谁看啊",
|
||||
qq="QQ对线",
|
||||
},
|
||||
register={
|
||||
password2="你懂的",
|
||||
|
||||
@@ -12,6 +12,7 @@ return{
|
||||
},
|
||||
sureQuit="再按一次退出",
|
||||
sureReset="再按一次重置",
|
||||
sureDelete="再按一次删除",
|
||||
newDay="新的一天,新的开始~",
|
||||
playedLong="已经玩很久了!注意休息!",
|
||||
playedTooMuch="今天玩太久啦!打块好玩但也要适可而止哦~",
|
||||
@@ -505,7 +506,7 @@ return{
|
||||
play_clear="开始-消除",
|
||||
play_puzzle="开始-拼图",
|
||||
|
||||
reset="重置所有(Del)",
|
||||
reset="重置所有(del)",
|
||||
advance="更多设置(A)",
|
||||
mod="Mods (F1)",
|
||||
field="场地编辑(F)",
|
||||
@@ -593,7 +594,6 @@ return{
|
||||
staff="制作人员",
|
||||
his="更新历史",
|
||||
legals="法律信息",
|
||||
qq="作者QQ",
|
||||
},
|
||||
dict={
|
||||
title="小Z方块词典",
|
||||
@@ -624,7 +624,6 @@ return{
|
||||
title="帐户",
|
||||
},
|
||||
app_15p={
|
||||
reset="打乱",
|
||||
color="颜色",
|
||||
invis="盲打",
|
||||
slide="滑动操作",
|
||||
@@ -632,50 +631,35 @@ return{
|
||||
revKB="键盘反向",
|
||||
},
|
||||
app_schulteG={
|
||||
reset="重来",
|
||||
rank="尺寸",
|
||||
invis="盲打",
|
||||
disappear="消失",
|
||||
tapFX="点击动画",
|
||||
},
|
||||
app_pong={
|
||||
reset="重置",
|
||||
},
|
||||
app_AtoZ={
|
||||
level="关卡",
|
||||
keyboard="键盘",
|
||||
reset="重置",
|
||||
},
|
||||
app_UTTT={
|
||||
reset="重置",
|
||||
},
|
||||
app_2048={
|
||||
reset="重置",
|
||||
invis="盲打",
|
||||
tapControl="点击操作",
|
||||
|
||||
skip="跳过回合",
|
||||
},
|
||||
app_ten={
|
||||
reset="重置",
|
||||
next="预览",
|
||||
invis="盲打",
|
||||
fast="速打",
|
||||
},
|
||||
app_dtw={
|
||||
reset="重置",
|
||||
color="颜色",
|
||||
mode="模式",
|
||||
bgm="音乐",
|
||||
arcade="街机",
|
||||
},
|
||||
app_link={
|
||||
reset="重置",
|
||||
invis="盲打",
|
||||
},
|
||||
app_arithmetic={
|
||||
reset="重置",
|
||||
},
|
||||
savedata={
|
||||
export="导出到剪切板",
|
||||
import="从剪切板导入",
|
||||
@@ -792,7 +776,6 @@ return{
|
||||
"……,合群了就会消失,但消失不代表没有意义",
|
||||
"……,没有对比就没有伤害",
|
||||
"“Techmino.app”将对您的电脑造成伤害。您应该将它移到废纸篓。",
|
||||
"“TechminOS”",
|
||||
"(a+b)³=a³+3a²b+3ab²+b³",
|
||||
"(RUR'U')R'FR2U'R'U'(RUR'F')",
|
||||
"《按钮风格进化史》",
|
||||
@@ -854,6 +837,8 @@ return{
|
||||
"触摸板打osu也很好!",
|
||||
"凑数tip什么时候能站起来!",
|
||||
"打好块跟学习一样没有捷径,多练。",
|
||||
"打铁.png",
|
||||
"打铁",
|
||||
"打网络对战前请确认自己有一定的水平,不然会毫无游戏体验的",
|
||||
"大概还是有人会看tip的",
|
||||
"大量使用开局定式的数据是不准的",
|
||||
@@ -918,6 +903,7 @@ return{
|
||||
"绝大多数按钮上的图标是调用Unicode私用区里的自制字符实现的",
|
||||
"觉得移动速度太慢或太快,手感不好?快去设置调整DAS/ARR",
|
||||
"开启省流模式后将不会加载用户头像(应该能省不少流吧)",
|
||||
"科技骨牌 你的创新式块堆栈业务技术管理器",
|
||||
"块东V共荣",
|
||||
"快去打一把100%极简看看会怎样",
|
||||
"锟斤拷锟斤拷锟斤拷",
|
||||
@@ -944,6 +930,7 @@ return{
|
||||
"你们考虑过Z酱的感受吗?没有!你们只考虑你自己。",
|
||||
"你说彩蛋?嗯…算是有,可以找找",
|
||||
"你有一个好",
|
||||
"你这场地是金子堆的还是块是金子做的",
|
||||
"你知道吗[001]看主页机器人玩可能比较费电",
|
||||
"你知道吗[002]全程不使用任何旋转键完成40行模式是有可能的",
|
||||
"你知道吗[003]全程不使用左右移动键完成40行模式是有可能的",
|
||||
@@ -959,7 +946,7 @@ return{
|
||||
"请勿使用三只手游玩",
|
||||
"去玩别的方块的时候记得没有Ospin!",
|
||||
"全球目前应该没人能全X评价(大爆炸不算)",
|
||||
"群友翻译的中文方块百科全书! tetris.huijiwiki.com",
|
||||
"群友翻译的中文方块百科全书!tetris.huijiwiki.com",
|
||||
"让他三尺又何妨",
|
||||
"如何O-spin: 一秒转626圈(误",
|
||||
"三连块只有2种",
|
||||
@@ -1042,7 +1029,7 @@ return{
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"有两个模式是以东方Project里的角色为主题的",
|
||||
"有一些隐藏模式不能从地图进入,到处找找看吧",
|
||||
"有疑问? 先看设置有没有你想要的",
|
||||
"有疑问?先看设置有没有你想要的",
|
||||
"右下角那个问号按钮是游戏说明书 (开了简洁模式当我没说)",
|
||||
"长期睡眠不足会引起不可逆的脑损伤(变傻)",
|
||||
"这不是休闲游戏……别怪关卡要求太高,多练吧",
|
||||
@@ -1114,6 +1101,8 @@ return{
|
||||
"Techmino 濂界帺锛",
|
||||
"Techmino 英['tɛkmɪnəʊ] 美/'tekmɪnoʊ/ n.铁壳米诺(游戏名)",
|
||||
"Techmino console了解一下",
|
||||
"Techmino: App意外退出。",
|
||||
"Techmino.exe 已停止工作",
|
||||
"Techmino安卓下载",
|
||||
"Techmino不是工业产品也不是练手程序,是游戏作品(至少目前是,嗯……)",
|
||||
"Techmino好玩!",
|
||||
@@ -1125,10 +1114,12 @@ return{
|
||||
"Techmino怎么念啊",
|
||||
"techminohaowan",
|
||||
"techminoisfun",
|
||||
"TechminOS coming s∞n",
|
||||
"viod main[]",
|
||||
"while(false)",
|
||||
"Z酱竟是我自己",
|
||||
"Z酱累了,Z酱不想更新",
|
||||
"Z酱是谁",
|
||||
"Z酱只是个写代码的,懂什么方块",
|
||||
"Z块等身抱枕来一个(x",
|
||||
{C.C,"<PURE ",C.P,"MEMORY>"},
|
||||
@@ -1163,13 +1154,15 @@ return{
|
||||
{C.R,"不要向不感兴趣的路人推荐!!!!!!!!"},
|
||||
{C.R,"不要在上课时玩游戏!"},
|
||||
{C.R,"光敏性癫痫警告"},
|
||||
{C.R,"请在有一定游戏基础之后再学Tspin! 不然副作用非常大!"},
|
||||
{C.R,"请在有一定游戏基础之后再学Tspin!不然副作用非常大!"},
|
||||
{C.R,"新人请千万记住,打好基础,不要太早学那些花里胡哨的。"},
|
||||
{C.R,"长时间游戏状态会越来越差!玩久了记得放松一下~"},
|
||||
{C.R,"DD",C.Z,"炮=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"D",C.Z,"炮"},
|
||||
{C.R,"DT",C.Z,"炮=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"T",C.Z,"炮"},
|
||||
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR LLL ",C.C,"FFF ",C.Y,"RfR RRf rFF"},
|
||||
{C.W,"uid:225238922"},
|
||||
{C.Y,"<φ> 10000"},
|
||||
{C.Y,"10000 φ"},
|
||||
{C.Y,"暂定段位:GM"},
|
||||
{C.Y,"暂定段位:M"},
|
||||
{C.Y,"暂定段位:MK"},
|
||||
|
||||
@@ -12,6 +12,7 @@ return{
|
||||
},
|
||||
sureQuit="再次按退出",
|
||||
sureReset="再次按下可重置",
|
||||
sureDelete="再次按可删除",
|
||||
newDay="新的一天,新的开始!",
|
||||
playedLong="你已经玩了很长时间了。一定要好好休息!",
|
||||
playedTooMuch="你玩得太久了!玩方块游戏很有趣,但现在是休息的时候了。",
|
||||
@@ -503,7 +504,7 @@ return{
|
||||
play_clear="清场",
|
||||
play_puzzle="开始拼图",
|
||||
|
||||
reset="复位(Del)",
|
||||
reset="复位(del)",
|
||||
advance="更多(A)",
|
||||
mod="多重器官衰竭(F1)",
|
||||
field="编辑字段(F)",
|
||||
@@ -575,7 +576,6 @@ return{
|
||||
staff="工作人员",
|
||||
his="历史",
|
||||
legals="法律",
|
||||
qq="作者QQ",
|
||||
},
|
||||
dict={
|
||||
title="四联词典",
|
||||
@@ -622,7 +622,6 @@ return{
|
||||
title="帐户",
|
||||
},
|
||||
app_15p={
|
||||
reset="洗牌",
|
||||
color="颜色",
|
||||
invis="英维斯",
|
||||
slide="滑动",
|
||||
@@ -635,9 +634,6 @@ return{
|
||||
disappear="隐藏",
|
||||
tapFX="Tap外汇",
|
||||
},
|
||||
app_pong={
|
||||
reset="重新启动",
|
||||
},
|
||||
app_AtoZ={
|
||||
level="水平仪",
|
||||
keyboard="键盘",
|
||||
|
||||
@@ -12,6 +12,7 @@ return{
|
||||
},
|
||||
sureQuit="再按一次退出",
|
||||
sureReset="再按一次重設",
|
||||
sureDelete="再按一次删除",
|
||||
newDay="新的一天,新的開始~",
|
||||
playedLong="你玩太久了!注意休息!",
|
||||
playedTooMuch="今天玩得太久啦!Techmino好玩但也要注意休息哦~",
|
||||
@@ -504,7 +505,7 @@ return{
|
||||
play_clear="開始-清除",
|
||||
play_puzzle="開始-拼圖",
|
||||
|
||||
reset="重設所有(Del)",
|
||||
reset="重設所有(del)",
|
||||
advance="更多設置(A)",
|
||||
mod="Mods (F1)",
|
||||
field="場地編輯(F)",
|
||||
@@ -592,7 +593,6 @@ return{
|
||||
staff="製作人員",
|
||||
his="更新曆史",
|
||||
legals="法律信息",
|
||||
qq="作者QQ",
|
||||
},
|
||||
dict={
|
||||
title="小Z方塊詞典",
|
||||
@@ -623,7 +623,6 @@ return{
|
||||
title="賬戶",
|
||||
},
|
||||
app_15p={
|
||||
reset="打亂",
|
||||
color="顏色",
|
||||
invis="盲打",
|
||||
slide="滑動操作",
|
||||
@@ -631,50 +630,35 @@ return{
|
||||
revKB="鍵盤反向",
|
||||
},
|
||||
app_schulteG={
|
||||
reset="重新啟動",
|
||||
rank="尺寸",
|
||||
invis="盲打",
|
||||
disappear="消失",
|
||||
tapFX="點擊動畫",
|
||||
},
|
||||
app_pong={
|
||||
reset="重設",
|
||||
},
|
||||
app_AtoZ={
|
||||
level="等級",
|
||||
keyboard="鍵盤",
|
||||
reset="重設",
|
||||
},
|
||||
app_UTTT={
|
||||
reset="重設",
|
||||
},
|
||||
app_2048={
|
||||
reset="重設",
|
||||
invis="盲打",
|
||||
tapControl="點擊操作",
|
||||
|
||||
skip="跳過回合",
|
||||
},
|
||||
app_ten={
|
||||
reset="重設",
|
||||
next="預覽",
|
||||
invis="盲打",
|
||||
fast="速打",
|
||||
},
|
||||
app_dtw={
|
||||
reset="重設",
|
||||
color="顏色",
|
||||
mode="模式",
|
||||
bgm="音樂",
|
||||
arcade="街機",
|
||||
},
|
||||
app_link={
|
||||
reset="重設",
|
||||
invis="盲打",
|
||||
},
|
||||
app_arithmetic={
|
||||
reset="重設",
|
||||
},
|
||||
savedata={
|
||||
export="導出到剪貼板",
|
||||
import="從剪貼板導入",
|
||||
|
||||
28
parts/modes/big_h.lua
Normal file
28
parts/modes/big_h.lua
Normal file
@@ -0,0 +1,28 @@
|
||||
return{
|
||||
env={
|
||||
noTele=true,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
sequence="bagES",
|
||||
hook_drop=require'parts.eventsets.bigWallGen'.hook_drop,
|
||||
eventSet='big_h',
|
||||
bg='cubes',bgm='push',
|
||||
},
|
||||
score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Combo "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=160 and 5 or
|
||||
T<=280 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=100 and 2 or
|
||||
L>=50 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
28
parts/modes/big_n.lua
Normal file
28
parts/modes/big_n.lua
Normal file
@@ -0,0 +1,28 @@
|
||||
return{
|
||||
env={
|
||||
noTele=true,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
sequence="bagES",
|
||||
hook_drop=require'parts.eventsets.bigWallGen'.hook_drop,
|
||||
eventSet='big_n',
|
||||
bg='bg2',bgm='push',
|
||||
},
|
||||
score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Combo "..STRING.time(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=180 and 5 or
|
||||
T<=300 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 2 or
|
||||
L>=100 and 1 or
|
||||
L>=20 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -21,7 +21,7 @@ return{
|
||||
gc.push('transform')
|
||||
if repMode then
|
||||
gc.origin()
|
||||
gc.setColor(.3,.3,.3,.7)
|
||||
gc.setColor(COLOR.X)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
else
|
||||
gc.clear(.2,.2,.2)
|
||||
|
||||
@@ -267,7 +267,7 @@ function NETPLY.draw()
|
||||
end
|
||||
if selP then
|
||||
gc_translate(min(mouseX,880),min(mouseY,460))
|
||||
gc_setColor(.2,.2,.2,.7)
|
||||
gc_setColor(COLOR.X)
|
||||
gc_rectangle('fill',0,0,400,260)
|
||||
gc_setColor(1,1,1)
|
||||
gc_setLineWidth(2)
|
||||
|
||||
@@ -128,4 +128,5 @@ return{
|
||||
{font=25,name="Hathtiz"},
|
||||
{font=25,name="江江江江17"},
|
||||
{font=25,name="TetraCepra"},
|
||||
{font=25,name="爱抢姐姐布丁的芙兰酱(CHNO)"},
|
||||
}
|
||||
|
||||
@@ -1764,7 +1764,7 @@ do
|
||||
else
|
||||
piece.special=false
|
||||
end
|
||||
if self.sound then
|
||||
if self.sound and(cc~=1 or dospin)then
|
||||
VOC.play(clearVoice[cc],CHN)
|
||||
end
|
||||
|
||||
@@ -2415,11 +2415,7 @@ local function update_alive(P)
|
||||
P.downing=P.downing+1
|
||||
local d=P.downing-ENV.sddas
|
||||
if d>1 then
|
||||
if ENV.sdarr>0 then
|
||||
if d%ENV.sdarr==0 then
|
||||
P:act_down1()
|
||||
end
|
||||
else
|
||||
if ENV.sdarr==0 then
|
||||
P:act_insDown()
|
||||
end
|
||||
if ENV.shakeFX then
|
||||
@@ -2458,33 +2454,51 @@ local function update_alive(P)
|
||||
if P.cur then
|
||||
if P.curY>P.ghoY then
|
||||
local D=P.dropDelay
|
||||
local dist--Drop distance
|
||||
if D>1 then
|
||||
P.dropDelay=D-1
|
||||
goto THROW_stop
|
||||
end
|
||||
|
||||
if D==1 then
|
||||
if ENV.moveFX and ENV.block then
|
||||
P:createMoveFX('down')
|
||||
D=D-1
|
||||
if P.downing>ENV.sddas then
|
||||
D=D-ceil(ENV.drop/ENV.sdarr)
|
||||
end
|
||||
P.curY=P.curY-1
|
||||
else
|
||||
D=min(1/D,P.curY-P.ghoY)--1/D=Drop dist, lowest to ghost
|
||||
if ENV.moveFX and ENV.block then
|
||||
for _=1,D do
|
||||
P:createMoveFX('down')
|
||||
P.curY=P.curY-1
|
||||
end
|
||||
if D<=0 then
|
||||
dist=1
|
||||
P.dropDelay=(D-1)%ENV.drop+1
|
||||
else
|
||||
P.curY=P.curY-D
|
||||
P.dropDelay=D
|
||||
goto THROW_stop
|
||||
end
|
||||
elseif D==1 then--We don't know why dropDelay is 1, so checking ENV.drop>1 is neccessary
|
||||
if ENV.drop>1 and P.downing>ENV.sddas and(P.downing-ENV.sddas)%ENV.sdarr==0 then
|
||||
dist=2
|
||||
else
|
||||
dist=1
|
||||
end
|
||||
--Reset drop delay
|
||||
P.dropDelay=ENV.drop
|
||||
else--High gravity case (>1G)
|
||||
--Add extra 1 if time to auto softdrop
|
||||
if P.downing>ENV.sddas and(P.downing-ENV.sddas)%ENV.sdarr==0 then
|
||||
dist=1/D+1
|
||||
else
|
||||
dist=1/D
|
||||
end
|
||||
end
|
||||
P:freshBlock('fresh')
|
||||
P.spinLast=false
|
||||
|
||||
if P.ghoY~=P.curY then
|
||||
P.dropDelay=ENV.drop
|
||||
--Limit dropping to ghost at max
|
||||
dist=min(dist,P.curY-P.ghoY)
|
||||
|
||||
--Drop and create FXs
|
||||
if ENV.moveFX and ENV.block and dist>1 then
|
||||
for _=1,dist do
|
||||
P:createMoveFX('down')
|
||||
P.curY=P.curY-1
|
||||
end
|
||||
else
|
||||
P.curY=P.curY-dist
|
||||
end
|
||||
|
||||
P.spinLast=false
|
||||
P:freshBlock('fresh')
|
||||
P:checkTouchSound()
|
||||
else
|
||||
P.lockDelay=P.lockDelay-1
|
||||
|
||||
@@ -57,9 +57,8 @@ scene.widgetList={
|
||||
WIDGET.newImage{name='pay1', x=20, y=20,hide=SYSTEM=='iOS'},
|
||||
WIDGET.newImage{name='pay2', x=1014,y=20,hide=SYSTEM=='iOS'},
|
||||
WIDGET.newButton{name='staff', x=1140,y=380,w=220,h=80,font=35,code=goScene'staff'},
|
||||
WIDGET.newButton{name='his', x=1140,y=470,w=220,h=80,font=35,code=goScene'history'},
|
||||
WIDGET.newButton{name='legals', x=1140,y=560,w=220,h=80,font=35,code=goScene'legals'},
|
||||
WIDGET.newButton{name='qq', x=1140,y=650,w=220,h=80,font=35,code=function()love.system.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,hide=MOBILE},
|
||||
WIDGET.newButton{name='his', x=1140,y=480,w=220,h=80,font=35,code=goScene'history'},
|
||||
WIDGET.newButton{name='legals', x=1140,y=580,w=220,h=80,font=35,code=goScene'legals'},
|
||||
WIDGET.newButton{name='back', x=640, y=600,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
|
||||
@@ -303,13 +303,13 @@ function scene.draw()
|
||||
end
|
||||
end
|
||||
end
|
||||
gc.setColor(0,0,0,.3)
|
||||
gc.setColor(COLOR.dX)
|
||||
gc.setLineWidth(10)
|
||||
gc.rectangle('line',cx*160+173,cy*160-107,134,134,50)
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset', x=160, y=100,w=180,h=100,color='lG',font=40,code=pressKey'space'},
|
||||
WIDGET.newButton{name='reset', x=160, y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'space'},
|
||||
colorSelector,
|
||||
WIDGET.newSwitch{name='invis', x=240, y=330,lim=200,font=40,disp=function()return invis end, code=pressKey'w',hideF=ifGaming},
|
||||
WIDGET.newSwitch{name='slide', x=240, y=420,lim=200,font=40,disp=function()return slide end, code=pressKey'e',hideF=ifGaming},
|
||||
|
||||
@@ -331,7 +331,7 @@ function scene.keyDown(key,isRep)
|
||||
elseif key=='escape'then
|
||||
if repeater.focus then
|
||||
repeater.focus=false
|
||||
else
|
||||
elseif tryBack()then
|
||||
SCN.back()
|
||||
end
|
||||
end
|
||||
@@ -480,7 +480,7 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset', x=155, y=100,w=180,h=100,color='lG',font=40,code=pressKey'r'},
|
||||
WIDGET.newButton{name='reset', x=155, y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'r'},
|
||||
WIDGET.newSwitch{name='invis', x=240, y=300,lim=200,font=40,disp=function()return invis end,code=pressKey'q',hideF=function()return state==1 end},
|
||||
WIDGET.newSwitch{name='tapControl',x=240, y=370,lim=200,font=40,disp=function()return tapControl end,code=pressKey'w',hideF=function()return state==1 end},
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newSelector{name='level', x=640,y=640,w=200,list={'A_Z','Z_A','Tech1','Tech2','KeyTest1','KeyTest2','Hello','Roll1','Roll2','Roll3','ZZZ','ZXZX','ZMZM','Stair','Stair2','Stair3','BPW'},disp=function()return levelName end,code=function(i)levelName=i;targetString=levels[i]end,hideF=function()return state>0 end},
|
||||
WIDGET.newButton{name='reset', x=160,y=100,w=180,h=100,color='lG',font=40,code=pressKey'space'},
|
||||
WIDGET.newButton{name='reset', x=160,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'space'},
|
||||
WIDGET.newButton{name='keyboard',x=160,y=210,w=180,h=100,code=function()love.keyboard.setTextInput(true,0,select(2,SCR.xOy:transformPoint(0,500)),1,1)end,hide=not MOBILE},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
@@ -135,11 +135,11 @@ function scene.draw()
|
||||
gc.scale(8)
|
||||
|
||||
--Draw board
|
||||
gc.setColor(0,0,0,.4)
|
||||
gc.setColor(COLOR.dX)
|
||||
gc.rectangle('fill',0,0,90,90)
|
||||
|
||||
--Draw target area
|
||||
gc.setColor(1,1,1,math.sin((TIME()-placeTime)*5)/5+.2)
|
||||
gc.setColor(1,1,1,math.sin((TIME()-placeTime)*5)*.1+.15)
|
||||
if target then
|
||||
gc.rectangle('fill',(target-1)%3*30,int((target-1)/3)*30,30,30)
|
||||
elseif not gameover then
|
||||
@@ -212,7 +212,7 @@ function scene.draw()
|
||||
end
|
||||
else
|
||||
--Draw current round mark
|
||||
gc.setColor(.8,.8,.8,.8)
|
||||
gc.setColor(COLOR.X)
|
||||
gc.rectangle('fill',80,80,160,160)
|
||||
gc.setColor(COLOR.Z)
|
||||
gc.setLineWidth(6)
|
||||
@@ -231,7 +231,7 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset',x=1140,y=540,w=170,h=80,font=40,color='lG',code=restart},
|
||||
WIDGET.newButton{name='reset',x=1140,y=540,w=170,h=80,font=50,fText=CHAR.icon.retry_spin,color='lG',code=restart},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
|
||||
@@ -185,7 +185,9 @@ function scene.keyDown(key,isRep)
|
||||
elseif key=='r'then
|
||||
reset()
|
||||
elseif key=='escape'then
|
||||
SCN.back()
|
||||
if tryBack()then
|
||||
SCN.back()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -216,8 +218,8 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset',x=155,y=100,w=180,h=100,color='lG',font=40,code=pressKey'r'},
|
||||
WIDGET.newKey{name='X',x=540,y=620,w=90,font=60,fText="X",code=pressKey'backspace'},
|
||||
WIDGET.newButton{name='reset',x=155,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'r'},
|
||||
WIDGET.newKey{name='X',x=540,y=620,w=90,font=60,fText=CHAR.key.clear,code=pressKey'backspace'},
|
||||
WIDGET.newKey{name='0',x=640,y=620,w=90,font=60,fText="0",code=pressKey'0'},
|
||||
WIDGET.newKey{name='-',x=740,y=620,w=90,font=60,fText="-",code=pressKey'-'},
|
||||
WIDGET.newKey{name='1',x=540,y=520,w=90,font=60,fText="1",code=pressKey'1'},
|
||||
|
||||
@@ -135,6 +135,8 @@ function scene.keyDown(key)
|
||||
end
|
||||
|
||||
function scene.draw()
|
||||
gc.setColor(COLOR.dX)
|
||||
gc.rectangle('fill',100,80,650,150,5)
|
||||
gc.setColor(COLOR.Z)
|
||||
gc.setLineWidth(2)
|
||||
gc.rectangle('line',100,80,650,150,5)
|
||||
@@ -161,7 +163,7 @@ scene.widgetList={
|
||||
WIDGET.newKey{name='-',x=445,y=400,w=90,sound=false,fText="-",color='lB',font=50,code=pressKey'-'},
|
||||
WIDGET.newKey{name='*',x=445,y=500,w=90,sound=false,fText="*",color='lB',font=50,code=pressKey'*'},
|
||||
WIDGET.newKey{name='/',x=445,y=600,w=90,sound=false,fText="/",color='lB',font=50,code=pressKey'/'},
|
||||
WIDGET.newKey{name='<',x=545,y=300,w=90,sound=false,fText="<",color='lR',font=50,code=pressKey'backspace'},
|
||||
WIDGET.newKey{name='<',x=545,y=300,w=90,sound=false,fText=CHAR.key.backspace,color='lR',font=50,code=pressKey'backspace'},
|
||||
WIDGET.newKey{name='=',x=545,y=400,w=90,sound=false,fText="=",color='lY',font=50,code=pressKey'return'},
|
||||
WIDGET.newKey{name='back',x=1135,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
@@ -28,7 +28,9 @@ function scene.keyDown(key,isRep)
|
||||
vy=pow*sin(ang)/2.6
|
||||
end
|
||||
elseif key=='escape'then
|
||||
SCN.back()
|
||||
if tryBack()then
|
||||
SCN.back()
|
||||
end
|
||||
end
|
||||
end
|
||||
function scene.mouseDown(_,_,k)
|
||||
|
||||
@@ -4,7 +4,7 @@ local ins,rem=table.insert,table.remove
|
||||
local C=COLOR
|
||||
|
||||
local inputBox=WIDGET.newInputBox{name='input',x=40,y=650,w=1200,h=50,fType='mono'}
|
||||
local outputBox=WIDGET.newTextBox{name='output',x=40,y=30,w=1200,h=610,font=25,fType='mono',lineH=23,fix=true}
|
||||
local outputBox=WIDGET.newTextBox{name='output',x=40,y=30,w=1200,h=610,font=25,fType='mono',lineH=25,fix=true}
|
||||
|
||||
local function log(str)outputBox:push(str)end
|
||||
_SCLOG=log
|
||||
@@ -14,7 +14,7 @@ log{C.lC,"©2021 26F Studio some rights reserved"}
|
||||
log{C.dR,"WARNING: DO NOT RUN ANY CODE THAT YOU DON'T UNDERSTAND."}
|
||||
|
||||
local history,hisPtr={"?"}
|
||||
local sudomode=false
|
||||
local sumode=false
|
||||
local the_secret=(0xe^2*10)..(2*0xb)
|
||||
|
||||
local commands={}do
|
||||
@@ -566,7 +566,7 @@ local commands={}do
|
||||
{
|
||||
code="2048",
|
||||
scene='app_2048',
|
||||
description="2048 with some new features"
|
||||
description="2048 with some new features. Original by Asher Vollmer"
|
||||
},
|
||||
{
|
||||
code="ten",
|
||||
@@ -601,7 +601,7 @@ local commands={}do
|
||||
{
|
||||
code="poly",
|
||||
scene='app_polyforge',
|
||||
description="Polyforge, original by ImpactBlue Studios"
|
||||
description="Polyforge. Original by ImpactBlue Studios"
|
||||
},
|
||||
{
|
||||
code="link",
|
||||
@@ -618,17 +618,27 @@ local commands={}do
|
||||
scene='app_piano',
|
||||
description="A simple keyboard piano"
|
||||
},
|
||||
{
|
||||
code="mem",
|
||||
scene='app_memorize',
|
||||
description="Number memorize"
|
||||
},
|
||||
{
|
||||
code="trp",
|
||||
scene='app_triple',
|
||||
description="A Match-3 Game. Original idea from Sanlitun / Triple Town"
|
||||
},
|
||||
{
|
||||
code="spin",
|
||||
scene='app_spin',
|
||||
description="???"
|
||||
description="¿"
|
||||
},
|
||||
}
|
||||
commands.app={
|
||||
code=function(name)
|
||||
if name=="-list"then
|
||||
for i=1,#APPs do
|
||||
log(APPs[i].code..": "..APPs[i].description)
|
||||
log(("$1 $2 $3"):repD(APPs[i].code,("·"):rep(10-#APPs[i].code),APPs[i].description))
|
||||
end
|
||||
elseif name~=""then
|
||||
for i=1,#APPs do
|
||||
@@ -698,14 +708,14 @@ local commands={}do
|
||||
end,
|
||||
description="Reset everything and delete all saved data.",
|
||||
}
|
||||
commands.sudo={
|
||||
commands.su={
|
||||
code=function(code)
|
||||
if sudomode then
|
||||
log{C.Y,"You are already in sudo mode. Use # to run any lua code"}
|
||||
if sumode then
|
||||
log{C.Y,"You are already in su mode. Use # to run any lua code"}
|
||||
log{C.Y,"已经进入最高权限模式了, 请使用 # 执行任意lua代码"}
|
||||
elseif code=="7126"then
|
||||
sudomode=true
|
||||
log{C.Y,"* SUDO MODE ON - DO NOT RUN ANY CODES IF YOU DO NOT KNOW WHAT THEY DO *"}
|
||||
sumode=true
|
||||
log{C.Y,"* SU MODE ON - DO NOT RUN ANY CODES IF YOU DO NOT KNOW WHAT THEY DO *"}
|
||||
log{C.Y,"* Use function _SCLOG(message) to print message here *"}
|
||||
log{C.Y,"* 最高权限模式开启, 请不要执行任何自己不懂确切含义的代码 *"}
|
||||
log{C.Y,"* 使用_SCLOG(信息)函数在控制台打印信息 *"}
|
||||
@@ -713,7 +723,7 @@ local commands={}do
|
||||
log{C.Y,"Password incorrect"}
|
||||
end
|
||||
end,
|
||||
}commands.su="sudo"
|
||||
}
|
||||
|
||||
--Game
|
||||
commands.rmconf={
|
||||
@@ -1011,7 +1021,7 @@ function scene.keyDown(key)
|
||||
local code,err=loadstring(input:sub(2))
|
||||
if code then
|
||||
local resultColor
|
||||
if sudomode then
|
||||
if sumode then
|
||||
resultColor=C.lY
|
||||
else
|
||||
setfenv(code,userG)
|
||||
|
||||
@@ -216,6 +216,9 @@ function scene.update(dt)
|
||||
end
|
||||
end
|
||||
|
||||
local function _sunStencil()
|
||||
gc.rectangle('fill',-60,-440,120,120)
|
||||
end
|
||||
function scene.draw()
|
||||
--Health bar
|
||||
if life1>0 then
|
||||
@@ -235,12 +238,11 @@ function scene.draw()
|
||||
gc.rotate(rot)
|
||||
|
||||
--Draw sun
|
||||
gc.setStencilTest('notequal',1)
|
||||
gc.stencil(_sunStencil)
|
||||
gc.setColor(.7,.5,.3)
|
||||
gc.circle('fill',0,-380-sunH,60)
|
||||
|
||||
--Draw sun-board
|
||||
gc.setColor(.08,.08,.084)
|
||||
gc.rectangle('fill',-60,-440,120,120)
|
||||
gc.setStencilTest()
|
||||
|
||||
--Draw direction
|
||||
if play then
|
||||
|
||||
@@ -62,7 +62,9 @@ function scene.keyDown(key,isRep)
|
||||
state='move'
|
||||
end
|
||||
elseif key=='escape'then
|
||||
SCN.back()
|
||||
if tryBack()then
|
||||
SCN.back()
|
||||
end
|
||||
end
|
||||
end
|
||||
function scene.mouseDown(_,_,k)
|
||||
|
||||
@@ -380,7 +380,7 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset',x=155,y=100,w=180,h=100,color='lG',font=40,code=pressKey'r'},
|
||||
WIDGET.newButton{name='reset',x=155,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'r'},
|
||||
modeSelector,bgmSelector,colorSelector,
|
||||
arcadeSwitch,
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
|
||||
@@ -51,7 +51,6 @@ local iconList={
|
||||
}
|
||||
gc.setDefaultFilter('linear','linear')
|
||||
|
||||
local sure=0
|
||||
local invis
|
||||
local state
|
||||
local startTime,time
|
||||
@@ -253,20 +252,14 @@ end
|
||||
function scene.keyDown(key,isRep)
|
||||
if isRep then return end
|
||||
if key=='r'then
|
||||
if state~=1 or sure>.2 then
|
||||
if state~=1 or tryReset()then
|
||||
newGame()
|
||||
else
|
||||
sure=1
|
||||
MES.new('info',"Press again")
|
||||
end
|
||||
elseif key=='z'or key=='x'then
|
||||
love.mousepressed(ms.getPosition())
|
||||
elseif key=='escape'then
|
||||
if state~=1 or sure>.2 then
|
||||
if state~=1 or tryBack()then
|
||||
SCN.back()
|
||||
else
|
||||
sure=1
|
||||
MES.new('info',"Press again")
|
||||
end
|
||||
elseif state==0 then
|
||||
if key=='q'then
|
||||
@@ -291,8 +284,6 @@ function scene.update(dt)
|
||||
score1=score1+MATH.sign(score-score1)+int((score-score1)*.1+.5)
|
||||
end
|
||||
|
||||
if sure>0 then sure=sure-dt end
|
||||
|
||||
for i=#lines,1,-1 do
|
||||
local L=lines[i]
|
||||
L.time=L.time+dt
|
||||
@@ -308,6 +299,10 @@ function scene.draw()
|
||||
gc.translate(field.x,field.y)
|
||||
gc.scale(field.w/field.c,field.h/field.r)
|
||||
|
||||
--Background
|
||||
gc.setColor(COLOR.dX)
|
||||
gc.rectangle('fill',0,0,field.w,field.h)
|
||||
|
||||
--Matrix
|
||||
local mono=state==0 or invis and not field.full
|
||||
if mono then
|
||||
@@ -347,12 +342,9 @@ function scene.draw()
|
||||
gc.line(lines[i].line)
|
||||
end
|
||||
gc.pop()
|
||||
--Frame
|
||||
|
||||
if state==2 then
|
||||
--Draw no-setting area
|
||||
gc.setColor(1,0,0,.3)
|
||||
gc.rectangle('fill',0,100,155,80)
|
||||
|
||||
gc.setColor(.9,.9,0)--win
|
||||
elseif state==1 then
|
||||
gc.setColor(.9,.9,.9)--game
|
||||
@@ -362,6 +354,12 @@ function scene.draw()
|
||||
gc.setLineWidth(6)
|
||||
gc.rectangle('line',field.x-5,field.y-5,field.w+10,field.h+10)
|
||||
|
||||
--Draw no-setting area
|
||||
if state==2 then
|
||||
gc.setColor(1,0,0,.3)
|
||||
gc.rectangle('fill',0,100,155,80)
|
||||
end
|
||||
|
||||
--Maxcombo
|
||||
setFont(20)gc.setColor(COLOR.dF)
|
||||
gc.print(maxCombo,1142,1)
|
||||
@@ -399,7 +397,7 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset',x=80,y=60,w=110,h=60,color='lG',code=pressKey'r',hideF=function()return state==0 end},
|
||||
WIDGET.newButton{name='reset',x=80,y=60,w=110,h=60,color='lG',fText=CHAR.icon.retry_spin,code=pressKey'r',hideF=function()return state==0 end},
|
||||
WIDGET.newSwitch{name='invis',x=100,y=140,lim=80,disp=function()return invis end,code=pressKey'q',hideF=function()return state==1 end},
|
||||
WIDGET.newButton{name='back',x=1200,y=660,w=110,font=50,fText=CHAR.icon.back,code=pressKey'escape'},
|
||||
}
|
||||
|
||||
126
parts/scenes/app_memorize.lua
Normal file
126
parts/scenes/app_memorize.lua
Normal file
@@ -0,0 +1,126 @@
|
||||
local gc=love.graphics
|
||||
|
||||
local state--0=playing, 1=gameover
|
||||
local timeUsed
|
||||
local level
|
||||
local showNum
|
||||
local showTime
|
||||
local input
|
||||
local inputTime
|
||||
|
||||
local scene={}
|
||||
|
||||
local function newNum(lv)
|
||||
local num=""
|
||||
for _=1,4+lv^.66 do num=num..math.random(0,9)end
|
||||
return num
|
||||
end
|
||||
|
||||
local function freshLevel()
|
||||
showNum=newNum(level)
|
||||
showTime=math.max(4-level,0)+#showNum*math.max(.5-#showNum*.01,.3)
|
||||
inputTime=2+#showNum*math.max(1-#showNum*.01,.626)
|
||||
input=''
|
||||
end
|
||||
local function _reset()
|
||||
state=0
|
||||
timeUsed=0
|
||||
level=1
|
||||
freshLevel()
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
state=1
|
||||
timeUsed=0
|
||||
level=0
|
||||
input=''
|
||||
showNum='memoriZe'
|
||||
BGM.play('reason')
|
||||
end
|
||||
|
||||
function scene.keyDown(key,isRep)
|
||||
if isRep then return end
|
||||
if key=='escape'then
|
||||
if tryBack()then
|
||||
SCN.back()
|
||||
end
|
||||
elseif key=='r'then
|
||||
_reset()
|
||||
elseif state==0 then
|
||||
if key:sub(1,2)=="kp"then key=key:sub(3)end
|
||||
if #key==1 and("0123456789"):find(key,nil,true)then
|
||||
input=input..key
|
||||
showTime=math.min(showTime,0)
|
||||
if input==showNum then
|
||||
level=level+1
|
||||
freshLevel()
|
||||
SFX.play('reach')
|
||||
end
|
||||
elseif key=='space'or key=='backspace'then
|
||||
input=""
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function scene.update(dt)
|
||||
if state==0 then
|
||||
showTime=showTime-dt
|
||||
if showTime<=0 then
|
||||
timeUsed=timeUsed+dt
|
||||
inputTime=inputTime-dt
|
||||
if inputTime<=0 then
|
||||
inputTime=0
|
||||
state=1
|
||||
SFX.play('finesseError_long',.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function scene.draw()
|
||||
gc.setColor(COLOR.Z)
|
||||
FONT.set(45)
|
||||
gc.print(("%.3f"):format(timeUsed),1026,70)
|
||||
|
||||
FONT.set(35)
|
||||
GC.mStr("["..level.."]",640,30)
|
||||
|
||||
FONT.set(60)
|
||||
GC.mStr(input,640,160)
|
||||
|
||||
if state==0 then
|
||||
if showTime<=0 then
|
||||
FONT.set(30)
|
||||
gc.setColor(1,.7,.7,-3*showTime)
|
||||
GC.mStr(("%.1f"):format(inputTime),640,230)
|
||||
end
|
||||
gc.setColor(1,1,1,showTime/1.26)
|
||||
else
|
||||
gc.setColor(1,.4,.4)
|
||||
end
|
||||
if #showNum<=10 then
|
||||
FONT.set(100)
|
||||
GC.mStr(showNum,640,60)
|
||||
else
|
||||
FONT.set(60)
|
||||
GC.mStr(showNum,640,90)
|
||||
end
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset',x=155,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'r'},
|
||||
WIDGET.newKey{name='X',x=540,y=620,w=90,font=60,fText=CHAR.key.clear,code=pressKey'backspace'},
|
||||
WIDGET.newKey{name='0',x=640,y=620,w=90,font=60,fText="0",code=pressKey'0'},
|
||||
WIDGET.newKey{name='1',x=540,y=520,w=90,font=60,fText="1",code=pressKey'1'},
|
||||
WIDGET.newKey{name='2',x=640,y=520,w=90,font=60,fText="2",code=pressKey'2'},
|
||||
WIDGET.newKey{name='3',x=740,y=520,w=90,font=60,fText="3",code=pressKey'3'},
|
||||
WIDGET.newKey{name='4',x=540,y=420,w=90,font=60,fText="4",code=pressKey'4'},
|
||||
WIDGET.newKey{name='5',x=640,y=420,w=90,font=60,fText="5",code=pressKey'5'},
|
||||
WIDGET.newKey{name='6',x=740,y=420,w=90,font=60,fText="6",code=pressKey'6'},
|
||||
WIDGET.newKey{name='7',x=540,y=320,w=90,font=60,fText="7",code=pressKey'7'},
|
||||
WIDGET.newKey{name='8',x=640,y=320,w=90,font=60,fText="8",code=pressKey'8'},
|
||||
WIDGET.newKey{name='9',x=740,y=320,w=90,font=60,fText="9",code=pressKey'9'},
|
||||
WIDGET.newButton{name='back',x=1200,y=660,w=110,h=60,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
@@ -45,7 +45,9 @@ end
|
||||
function scene.keyDown(key,isRep)
|
||||
if isRep then return end
|
||||
if key=='escape'then
|
||||
SCN.back()
|
||||
if tryBack()then
|
||||
SCN.back()
|
||||
end
|
||||
elseif key=='space'then
|
||||
if state==0 then--main
|
||||
if timer==0 then
|
||||
@@ -157,8 +159,8 @@ function scene.draw()
|
||||
gc.setColor(0,0,0,timer/50)
|
||||
gc.print("POLYFORGE",20,620)
|
||||
setFont(30)
|
||||
gc.print("Idea by ImpactBlue Studios",860,630)
|
||||
gc.print("n-Spire ver. & ported & improved by MrZ",670,670)
|
||||
gc.printf("Idea by ImpactBlue Studios",0,630,1260,'right')
|
||||
gc.printf("n-Spire ver. & ported & improved by MrZ",0,670,1260,'right')
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -176,7 +176,7 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newKey{name='reset',x=640,y=45,w=150,h=50,font=35,code=pressKey'r'},
|
||||
WIDGET.newKey{name='reset',x=640,y=45,w=150,h=50,font=35,fText=CHAR.icon.retry_spin,code=pressKey'r'},
|
||||
WIDGET.newKey{name='back',x=640,y=675,w=150,h=50,font=40,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
|
||||
@@ -125,11 +125,9 @@ function scene.draw()
|
||||
setFont(70)
|
||||
mStr(state==1 and progress or state==0 and"Ready"or state==2 and"Win",1130,300)
|
||||
|
||||
gc.setColor(COLOR.dX)
|
||||
gc.rectangle('fill',310,30,660,660)
|
||||
if state==2 then
|
||||
--Draw no-setting area
|
||||
gc.setColor(1,0,0,.3)
|
||||
gc.rectangle('fill',15,295,285,250)
|
||||
|
||||
gc.setColor(.9,.9,0)--win
|
||||
elseif state==1 then
|
||||
gc.setColor(.9,.9,.9)--game
|
||||
@@ -139,6 +137,12 @@ function scene.draw()
|
||||
gc.setLineWidth(10)
|
||||
gc.rectangle('line',310,30,660,660)
|
||||
|
||||
--Draw no-setting area
|
||||
if state==2 then
|
||||
gc.setColor(1,0,0,.3)
|
||||
gc.rectangle('fill',15,295,285,250)
|
||||
end
|
||||
|
||||
local width=640/rank
|
||||
local mono=state==0 or invis and state==1 and progress>0
|
||||
gc.setLineWidth(4)
|
||||
@@ -166,7 +170,7 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset', x=160,y=100,w=180,h=100,color='lG',font=40,code=pressKey'space',hideF=function()return state==0 end},
|
||||
WIDGET.newButton{name='reset', x=160,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'space',hideF=function()return state==0 end},
|
||||
WIDGET.newSlider{name='rank', x=130,y=250,lim=105,w=150,unit=3,show=false,font=40,disp=function()return rank-3 end,code=function(v)rank=v+3 end,hideF=function()return state>0 end},
|
||||
WIDGET.newSwitch{name='invis', x=240,y=330,lim=200,font=40,disp=function()return invis end, code=pressKey'q',hideF=function()return state==1 end},
|
||||
WIDGET.newSwitch{name='disappear',x=240,y=420,lim=200,font=40,disp=function()return disappear end,code=pressKey'w',hideF=function()return state==1 end},
|
||||
|
||||
@@ -109,11 +109,11 @@ local function merge()
|
||||
end
|
||||
if chosen>=5 then
|
||||
SFX.play(
|
||||
chosen>=9 and"ren_mega"or
|
||||
chosen>=8 and"spin_3"or
|
||||
chosen>=7 and"spin_2"or
|
||||
chosen>=6 and"spin_1"or
|
||||
"spin_0"
|
||||
chosen>=9 and'ren_mega'or
|
||||
chosen>=8 and'spin_3'or
|
||||
chosen>=7 and'spin_2'or
|
||||
chosen>=6 and'spin_1'or
|
||||
'spin_0'
|
||||
)
|
||||
end
|
||||
fallingTimer=fast and 8 or 12
|
||||
@@ -157,7 +157,9 @@ function scene.keyDown(key,isRep)
|
||||
fast=not fast
|
||||
end
|
||||
elseif key=='escape'then
|
||||
SCN.back()
|
||||
if tryBack()then
|
||||
SCN.back()
|
||||
end
|
||||
end
|
||||
end
|
||||
function scene.mouseMove(x,y)
|
||||
@@ -239,7 +241,7 @@ function scene.draw()
|
||||
|
||||
--Previews
|
||||
if nexts then
|
||||
gc.setColor(0,0,0,.2)
|
||||
gc.setColor(COLOR.dX)
|
||||
rectangle('fill',20,450,280,75)
|
||||
gc.setLineWidth(6)
|
||||
setColor(1,1,1)
|
||||
@@ -302,7 +304,7 @@ function scene.draw()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset',x=160,y=100,w=180,h=100,color='lG',font=40,code=pressKey'r'},
|
||||
WIDGET.newButton{name='reset',x=160,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'r'},
|
||||
WIDGET.newSwitch{name='next', x=240,y=235,lim=200,font=40,disp=function()return nexts end,code=pressKey'q',hideF=function()return state==1 end},
|
||||
WIDGET.newSwitch{name='invis',x=240,y=305,lim=200,font=40,disp=function()return invis end,code=pressKey'w',hideF=function()return state==1 end},
|
||||
WIDGET.newSwitch{name='fast', x=240,y=375,lim=200,font=30,disp=function()return fast end,code=pressKey'e',hideF=function()return state==1 end},
|
||||
|
||||
350
parts/scenes/app_triple.lua
Normal file
350
parts/scenes/app_triple.lua
Normal file
@@ -0,0 +1,350 @@
|
||||
local gc=love.graphics
|
||||
local setColor,rectangle=gc.setColor,gc.rectangle
|
||||
|
||||
local int,rnd=math.floor,math.random
|
||||
local ins,rem=table.insert,table.remove
|
||||
|
||||
local setFont,mStr=FONT.set,GC.mStr
|
||||
|
||||
local tileColor={
|
||||
[-2]=COLOR.R, --Bomb
|
||||
[-1]=COLOR.H, --Stone
|
||||
{.39, 1.0, .39},--Tile 1
|
||||
{.39, .39, 1.0},--Tile 2
|
||||
{1.0, .70, .31},--Tile 3
|
||||
{.94, .31, .31},--Tile 4
|
||||
{.00, .71, .12},--Tile 5
|
||||
{.90, .20, .90},--Tile 6
|
||||
{.94, .47, .39},--Tile 7
|
||||
{.90, .00, .00},--Tile 8
|
||||
{.86, .86, .31},--Tile 9
|
||||
{.78, .31, .00},--Tile 10
|
||||
{.78, .55, .04},--Tile 11
|
||||
{.12, .12, .51},--Tile 12
|
||||
}
|
||||
local textColor={
|
||||
[-2]=COLOR.dR,
|
||||
[-1]=COLOR.dH,
|
||||
{.26, .66, .26},
|
||||
{.26, .26, .66},
|
||||
{.66, .46, .20},
|
||||
{.62, .20, .20},
|
||||
{.00, .48, .08},
|
||||
{.60, .14, .60},
|
||||
{.62, .32, .26},
|
||||
{.60, .00, .00},
|
||||
{.58, .58, .20},
|
||||
{.52, .20, .00},
|
||||
{.52, .36, .20},
|
||||
{.08, .80, .34},
|
||||
}
|
||||
local tileTexts=setmetatable({
|
||||
[-1]="×",
|
||||
},{__index=function(self,k)self[k]=k return k end})
|
||||
|
||||
local player={x=340,y=90}
|
||||
|
||||
function player:newTile()
|
||||
local r=rnd()
|
||||
if r<.006 then
|
||||
return self.maxTile
|
||||
elseif r<.026 then
|
||||
return -2
|
||||
else
|
||||
local t=1
|
||||
if rnd()<.3 then
|
||||
t=t+1
|
||||
if rnd()<.3 then t=t+1 end
|
||||
end
|
||||
if self.maxTile>=4 and rnd()<.3 then
|
||||
t=t+1
|
||||
if self.maxTile>=6 and rnd()<.3 then
|
||||
t=t+1
|
||||
if self.maxTile>=8 and rnd()<.3 then
|
||||
t=t+1
|
||||
end
|
||||
end
|
||||
end
|
||||
return t
|
||||
end
|
||||
end
|
||||
|
||||
function player:reset()
|
||||
self.progress={}
|
||||
self.state=0
|
||||
self.time=0
|
||||
self.startTime=false
|
||||
self.score=0
|
||||
self.maxTile=3
|
||||
|
||||
self.nexts,self.hold={self:newTile(),self:newTile(),self:newTile()},false
|
||||
self.selectX,self.selectY=false,false
|
||||
self.board={}
|
||||
for y=1,6 do
|
||||
self.board[y]={}
|
||||
for x=1,6 do
|
||||
self.board[y][x]=0
|
||||
end
|
||||
end
|
||||
self.board[1][1]=false
|
||||
for _,n in next,{-1,-1,1,1,2,2,3,3}do
|
||||
local x,y
|
||||
repeat
|
||||
x,y=rnd(6),rnd(6)
|
||||
until not(x==1 and y==1)and self.board[y][x]==0
|
||||
self.board[y][x]=n
|
||||
end
|
||||
end
|
||||
|
||||
function player:merge(b,v,y,x)
|
||||
if b[y]and v==b[y][x]then
|
||||
ins(self.mergedTiles,{y,x})
|
||||
b[y][x]=0
|
||||
return 1
|
||||
+self:merge(b,v,y,x-1)
|
||||
+self:merge(b,v,y,x+1)
|
||||
+self:merge(b,v,y-1,x)
|
||||
+self:merge(b,v,y+1,x)
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
local function availablePos(b,t)
|
||||
return
|
||||
t>0 and b==0 or
|
||||
t==-2 and b~=0
|
||||
end
|
||||
local function newMergeFX(y,x,tile)
|
||||
local r,g,b
|
||||
if tile==-2 then r,g,b=1,.6,.3 end
|
||||
SYSFX.newShade(3,player.x+100*x-100,player.y+100*y-100,100,100,r,g,b)
|
||||
end
|
||||
function player:click(y,x)
|
||||
if y==1 and x==1 then
|
||||
self.nexts[1],self.hold=self.hold,self.nexts[1]
|
||||
SFX.play('hold')
|
||||
if not self.nexts[1] then
|
||||
rem(self.nexts,1)
|
||||
ins(self.nexts,self:newTile())
|
||||
end
|
||||
elseif y~=self.selectY or x~=self.selectX then
|
||||
if availablePos(self.board[y][x],self.nexts[1])then
|
||||
self.selectX,self.selectY=x,y
|
||||
else
|
||||
self.selectX,self.selectY=false,false
|
||||
end
|
||||
elseif y==self.selectY and x==self.selectX then
|
||||
if not availablePos(self.board[y][x],self.nexts[1])then return end
|
||||
if self.state==0 then
|
||||
self.state=1
|
||||
self.startTime=TIME()
|
||||
end
|
||||
|
||||
if self.nexts[1]==-2 then
|
||||
self.board[y][x]=0
|
||||
SFX.play('clear_2')
|
||||
rem(self.nexts,1)
|
||||
ins(self.nexts,self:newTile())
|
||||
newMergeFX(y,x,-2)
|
||||
else
|
||||
self.board[y][x]=rem(self.nexts,1)
|
||||
SFX.play('touch')
|
||||
|
||||
local merged
|
||||
::REPEAT_merge::
|
||||
local cur=self.board[y][x]
|
||||
local b1=TABLE.shift(self.board)
|
||||
self.mergedTiles={}
|
||||
local count=self:merge(b1,cur,y,x)
|
||||
if count>2 then
|
||||
merged=true
|
||||
self.board=b1
|
||||
b1[y][x]=cur+1
|
||||
|
||||
if cur+1>self.maxTile then
|
||||
self.maxTile=cur+1
|
||||
if self.maxTile>=6 then
|
||||
ins(self.progress,("%s - %.3fs"):format(self.maxTile,TIME()-player.startTime))
|
||||
end
|
||||
SFX.play('reach')
|
||||
end
|
||||
|
||||
local getScore=4^cur*count
|
||||
self.score=self.score+getScore
|
||||
TEXT.show(getScore,player.x+self.selectX*100-50,player.y+self.selectY*100-50,40,'score')
|
||||
for i=1,#self.mergedTiles do
|
||||
newMergeFX(self.mergedTiles[i][1],self.mergedTiles[i][2],cur+1)
|
||||
end
|
||||
goto REPEAT_merge
|
||||
end
|
||||
|
||||
ins(self.nexts,self:newTile())
|
||||
|
||||
self.selectX,self.selectY=false,false
|
||||
|
||||
if merged then
|
||||
SFX.play('lock')
|
||||
if cur>=4 then
|
||||
SFX.play(
|
||||
cur>=8 and'ren_mega'or
|
||||
cur>=7 and'spin_3'or
|
||||
cur>=6 and'spin_2'or
|
||||
cur>=5 and'spin_1'or
|
||||
'spin_0'
|
||||
)
|
||||
end
|
||||
else
|
||||
for i=1,6 do
|
||||
if TABLE.find(self.board[i],0)then
|
||||
return
|
||||
end
|
||||
end
|
||||
self.state=2
|
||||
SFX.play('fail')
|
||||
end
|
||||
end
|
||||
else
|
||||
self.selectX,self.selectY=x,y
|
||||
end
|
||||
end
|
||||
|
||||
local function drawTile(x,y,v)
|
||||
if v and v~=0 then
|
||||
setColor(tileColor[v])
|
||||
rectangle('fill',x*100-100,y*100-100,100,100)
|
||||
setColor(textColor[v])
|
||||
mStr(tileTexts[v],x*100-50,y*100-92)
|
||||
end
|
||||
end
|
||||
function player:drawBoard()
|
||||
gc.push('transform')
|
||||
gc.translate(self.x,self.y)
|
||||
|
||||
--Board background
|
||||
setColor(COLOR.dX)
|
||||
rectangle("fill",0,0,600,600)
|
||||
|
||||
|
||||
--Hold slot
|
||||
setColor(0,1,1,.4)
|
||||
rectangle("fill",0,0,100,100)
|
||||
gc.setLineWidth(10)
|
||||
setColor(COLOR.lC)
|
||||
rectangle("line",5,5,90,90)
|
||||
|
||||
--Hold tile
|
||||
setFont(60)
|
||||
drawTile(1,1,self.hold)
|
||||
|
||||
--Board tiles
|
||||
local b=self.board
|
||||
for y=1,6 do for x=1,6 do
|
||||
drawTile(x,y,b[y][x])
|
||||
end end
|
||||
|
||||
--Board lines
|
||||
setColor(COLOR.Z)
|
||||
gc.setLineWidth(2)
|
||||
for x=1,5 do gc.line(x*100,0,x*100,600)end
|
||||
for y=1,5 do gc.line(0,y*100,600,y*100)end
|
||||
gc.setLineWidth(6)
|
||||
rectangle("line",0,0,600,600)
|
||||
|
||||
--Select box
|
||||
if self.selectX then
|
||||
local c=tileColor[self.nexts[1]]
|
||||
setColor(c[1],c[2],c[3],.6+.3*math.sin(TIME()*9.29))
|
||||
rectangle("line",self.selectX*100-95,self.selectY*100-95,90,90)
|
||||
end
|
||||
|
||||
gc.pop()
|
||||
end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
player:reset()
|
||||
BGM.play('truth')
|
||||
end
|
||||
|
||||
function scene.mouseDown(x,y)
|
||||
x,y=int((x-player.x)/100)+1,int((y-player.y)/100)+1
|
||||
if x>=1 and x<=6 and y>=1 and y<=6 then
|
||||
player:click(y,x)
|
||||
end
|
||||
end
|
||||
function scene.keyDown(key,isRep)
|
||||
if isRep then return end
|
||||
if key=='up'or key=='down'or key=='left'or key=='right'then
|
||||
if not player.selectX then
|
||||
player.selectX,player.selectY=3,3
|
||||
else
|
||||
if key=='up'then player.selectY=math.max(player.selectY-1,1)
|
||||
elseif key=='down'then player.selectY=math.min(player.selectY+1,6)
|
||||
elseif key=='left'then player.selectX=math.max(player.selectX-1,1)
|
||||
elseif key=='right'then player.selectX=math.min(player.selectX+1,6)
|
||||
end
|
||||
end
|
||||
elseif key=='z'or key=='space'then
|
||||
if not player.selectX then
|
||||
player.selectX,player.selectY=3,3
|
||||
else
|
||||
local y,x=player.selectY,player.selectX
|
||||
player:click(player.selectY,player.selectX)
|
||||
player.selectY,player.selectX=y,x
|
||||
end
|
||||
elseif key=='x'then
|
||||
player:click(1,1)
|
||||
elseif key=='r'then
|
||||
if player.state~=1 or tryReset()then
|
||||
player:reset()
|
||||
end
|
||||
elseif key=='escape'then
|
||||
if tryBack()then
|
||||
SCN.back()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function scene.update()
|
||||
if player.state==1 then
|
||||
player.time=TIME()-player.startTime
|
||||
end
|
||||
end
|
||||
|
||||
function scene.draw()
|
||||
setFont(40)
|
||||
setColor(1,1,1)
|
||||
gc.print(("%.3f"):format(player.time),1026,50)
|
||||
gc.print(player.score,1026,100)
|
||||
|
||||
--Progress time list
|
||||
setFont(25)
|
||||
setColor(.7,.7,.7)
|
||||
for i=1,#player.progress do
|
||||
gc.print(player.progress[i],1000,140+30*i)
|
||||
end
|
||||
|
||||
gc.push('transform')
|
||||
gc.translate(745,13)
|
||||
setColor(COLOR.Z)
|
||||
gc.setLineWidth(4)
|
||||
gc.rectangle("line",-5,-5,200,70)
|
||||
for i=1,3 do
|
||||
setColor(tileColor[player.nexts[i]])
|
||||
rectangle('fill',65*i-65,0,60,60)
|
||||
setFont(40)
|
||||
setColor(textColor[player.nexts[i]])
|
||||
mStr(player.nexts[i],65*i-35,0)
|
||||
end
|
||||
gc.pop()
|
||||
|
||||
player:drawBoard()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset',x=160,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'r'},
|
||||
WIDGET.newButton{name="back", x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
return scene
|
||||
@@ -24,9 +24,7 @@ local sList={
|
||||
|
||||
local scene={}
|
||||
|
||||
local sure
|
||||
function scene.sceneInit()
|
||||
sure=0
|
||||
destroyPlayers()
|
||||
BG.set(CUSTOMENV.bg)
|
||||
BGM.play(CUSTOMENV.bgm)
|
||||
@@ -80,7 +78,7 @@ function scene.keyDown(key,isRep)
|
||||
elseif key=='m'then
|
||||
SCN.go('custom_mission','swipeD')
|
||||
elseif key=='delete'then
|
||||
if sure>.3 then
|
||||
if tryReset()then
|
||||
TABLE.cut(FIELD)TABLE.cut(BAG)TABLE.cut(MISSION)
|
||||
FIELD[1]=DATA.newBoard()
|
||||
TABLE.clear(CUSTOMENV)
|
||||
@@ -90,13 +88,9 @@ function scene.keyDown(key,isRep)
|
||||
saveFile(DATA.copyBoards(),'conf/customBoards')
|
||||
saveFile(DATA.copySequence(),'conf/customSequence')
|
||||
saveFile(CUSTOMENV,'conf/customEnv')
|
||||
sure=0
|
||||
SFX.play('finesseError',.7)
|
||||
BG.set(CUSTOMENV.bg)
|
||||
BGM.play(CUSTOMENV.bgm)
|
||||
else
|
||||
sure=1
|
||||
MES.new('info',text.sureReset)
|
||||
end
|
||||
elseif key=='f1'then
|
||||
SCN.go('mod','swipeD')
|
||||
@@ -129,10 +123,6 @@ function scene.keyDown(key,isRep)
|
||||
end
|
||||
end
|
||||
|
||||
function scene.update(dt)
|
||||
if sure>0 then sure=sure-dt end
|
||||
end
|
||||
|
||||
function scene.draw()
|
||||
gc.translate(0,-WIDGET.scrollPos)
|
||||
setFont(30)
|
||||
|
||||
@@ -7,7 +7,6 @@ local ins,rem=table.insert,table.remove
|
||||
local FIELD=FIELD
|
||||
local scene={}
|
||||
|
||||
local sure
|
||||
local curPen
|
||||
local pens={-2,0,-1,[false]=false}--Color (air/smart)
|
||||
local penMode
|
||||
@@ -119,7 +118,6 @@ local function _pDraw()
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
sure=0
|
||||
curPen=false
|
||||
penMode=0
|
||||
penX,penY=1,1
|
||||
@@ -182,13 +180,9 @@ function scene.keyDown(key)
|
||||
_pTouch(penX,penY)
|
||||
end
|
||||
elseif key=='delete'then
|
||||
if sure>.3 then
|
||||
if tryReset()then
|
||||
FIELD[page]=DATA.newBoard()
|
||||
sure=0
|
||||
SFX.play('finesseError',.7)
|
||||
else
|
||||
sure=1
|
||||
MES.new('info',text.sureReset)
|
||||
end
|
||||
elseif key=='j'then
|
||||
demo=not demo
|
||||
@@ -265,12 +259,6 @@ function scene.keyUp(key)
|
||||
end
|
||||
end
|
||||
|
||||
function scene.update(dt)
|
||||
if sure>0 then
|
||||
sure=sure-dt
|
||||
end
|
||||
end
|
||||
|
||||
function scene.draw()
|
||||
gc.translate(200,60)
|
||||
|
||||
|
||||
@@ -8,12 +8,10 @@ local scene={}
|
||||
|
||||
local input--Input buffer
|
||||
local cur--Cursor position
|
||||
local sure
|
||||
|
||||
function scene.sceneInit()
|
||||
input=""
|
||||
cur=#MISSION
|
||||
sure=0
|
||||
end
|
||||
function scene.sceneBack()
|
||||
saveFile(DATA.copyMission(),'conf/customMissions')
|
||||
@@ -62,14 +60,10 @@ function scene.keyDown(key)
|
||||
end
|
||||
end
|
||||
elseif key=='delete'then
|
||||
if sure>.3 then
|
||||
if tryReset()then
|
||||
TABLE.cut(MISSION)
|
||||
cur=0
|
||||
sure=0
|
||||
SFX.play('finesseError',.7)
|
||||
else
|
||||
sure=1
|
||||
MES.new('info',text.sureReset)
|
||||
end
|
||||
elseif key=='c'and kb.isDown('lctrl','rctrl')or key=='cC'then
|
||||
if #MISSION>0 then
|
||||
@@ -117,12 +111,6 @@ function scene.keyDown(key)
|
||||
end
|
||||
end
|
||||
|
||||
function scene.update(dt)
|
||||
if sure>0 then
|
||||
sure=sure-dt
|
||||
end
|
||||
end
|
||||
|
||||
function scene.draw()
|
||||
--Draw frame
|
||||
gc.setLineWidth(2)
|
||||
|
||||
@@ -9,11 +9,9 @@ local gc_setColor,gc_print=gc.setColor,gc.print
|
||||
local scene={}
|
||||
|
||||
local cur--Cursor position
|
||||
local sure
|
||||
|
||||
function scene.sceneInit()
|
||||
cur=#BAG
|
||||
sure=0
|
||||
end
|
||||
function scene.sceneBack()
|
||||
saveFile(DATA.copySequence(),'conf/customSequence')
|
||||
@@ -66,14 +64,10 @@ function scene.keyDown(key)
|
||||
cur=cur-1
|
||||
end
|
||||
elseif key=='delete'then
|
||||
if sure>.3 then
|
||||
if tryReset()then
|
||||
TABLE.cut(BAG)
|
||||
cur=0
|
||||
sure=0
|
||||
SFX.play('finesseError',.7)
|
||||
else
|
||||
sure=1
|
||||
MES.new('info',text.sureReset)
|
||||
end
|
||||
elseif key=='='then
|
||||
local l={1,2,3,4,5,6,7}
|
||||
@@ -119,12 +113,6 @@ function scene.keyDown(key)
|
||||
end
|
||||
end
|
||||
|
||||
function scene.update(dt)
|
||||
if sure>0 then
|
||||
sure=sure-dt
|
||||
end
|
||||
end
|
||||
|
||||
local blockCharWidth={}for i=1,#BLOCK_CHARS do blockCharWidth[i]=gc.newText(FONT.get(60),BLOCK_CHARS[i]):getWidth()end
|
||||
function scene.draw()
|
||||
--Draw frame
|
||||
|
||||
@@ -166,6 +166,14 @@ function scene.update(dt)
|
||||
end
|
||||
|
||||
function scene.draw()
|
||||
gc.setColor(COLOR.dX)
|
||||
gc.rectangle('fill',300,180,958,526,5)
|
||||
gc.rectangle('fill',20,180,280,526,5)
|
||||
gc.setLineWidth(2)
|
||||
gc.setColor(COLOR.Z)
|
||||
gc.rectangle('line',300,180,958,526,5)
|
||||
gc.rectangle('line',20,180,280,526,5)
|
||||
|
||||
local list=_getList()
|
||||
gc.setColor(COLOR.Z)
|
||||
local t=list[selected].content
|
||||
@@ -178,7 +186,7 @@ function scene.draw()
|
||||
gc.printf(t,306,180,950)
|
||||
|
||||
setFont(30)
|
||||
gc.setColor(1,1,1,.4+.2*sin(TIME()*4))
|
||||
gc.setColor(1,1,1,.4+.05*sin(TIME()*12.6))
|
||||
gc.rectangle('fill',20,143+35*(selected-scrollPos),280,35)
|
||||
|
||||
setFont(30)
|
||||
@@ -195,11 +203,6 @@ function scene.draw()
|
||||
gc.print(item.title,30,y)
|
||||
end
|
||||
|
||||
gc.setLineWidth(2)
|
||||
gc.setColor(COLOR.Z)
|
||||
gc.rectangle('line',300,180,958,526,5)
|
||||
gc.rectangle('line',20,180,280,526,5)
|
||||
|
||||
if searchWait>0 then
|
||||
local r=TIME()*2
|
||||
local R=int(r)%7+1
|
||||
|
||||
@@ -4,7 +4,7 @@ local langList={
|
||||
zh_trad="繁體中文",
|
||||
en="English",
|
||||
fr="Français",
|
||||
es="Español",
|
||||
es="Español\nCastellano",
|
||||
pt="Português",
|
||||
|
||||
zh_grass="机翻",
|
||||
@@ -33,7 +33,7 @@ scene.widgetList={
|
||||
|
||||
WIDGET.newButton{x=225,y=331,w=255,h=120,font=40, fText=langList.en, color='L',code=function()_setLang('en')end},
|
||||
WIDGET.newButton{x=500,y=331,w=255,h=120,font=40, fText=langList.fr, color='J',code=function()_setLang('fr')end},
|
||||
WIDGET.newButton{x=775,y=331,w=255,h=120,font=40, fText=langList.es, color='G',code=function()_setLang('es')end},
|
||||
WIDGET.newButton{x=775,y=331,w=255,h=120,font=35, fText=langList.es, color='G',code=function()_setLang('es')end},
|
||||
WIDGET.newButton{x=1050,y=331,w=255,h=120,font=40, fText=langList.pt, color='dG',code=function()_setLang('pt')end},
|
||||
|
||||
WIDGET.newButton{x=271,y=472,w=346,h=120,font=45, fText=langList.zh_grass,color='N',code=function()_setLang('zh_grass')end},
|
||||
|
||||
@@ -235,11 +235,15 @@ function scene.draw()
|
||||
gc_setLineWidth(2)
|
||||
|
||||
--Pad frame
|
||||
gc_setColor(COLOR.dX)
|
||||
gc_rectangle('fill',-3,-3,726,646,2)
|
||||
gc_setColor(white)
|
||||
gc_rectangle('line',-3,-3,726,646,2)
|
||||
|
||||
--Buttons
|
||||
for y=1,8 do
|
||||
gc_setColor(COLOR.dX)
|
||||
gc_circle('fill',40,(y-1)*80+40,34)
|
||||
gc_setColor(white)
|
||||
gc_circle('line',40,(y-1)*80+40,34)
|
||||
if pad.funcAlpha[y]>0 then
|
||||
@@ -248,6 +252,10 @@ function scene.draw()
|
||||
end
|
||||
end
|
||||
setFont(10)
|
||||
gc_setColor(COLOR.dX)
|
||||
for y=1,8 do for x=1,8 do
|
||||
gc_rectangle('fill',x*80+2,(y-1)*80+2,76,76,5)
|
||||
end end
|
||||
gc_setColor(white)
|
||||
for y=1,8 do for x=1,8 do
|
||||
gc_rectangle('line',x*80+2,(y-1)*80+2,76,76,5)
|
||||
|
||||
@@ -2,7 +2,6 @@ local gc=love.graphics
|
||||
|
||||
local scene={}
|
||||
|
||||
local lastQuitTime
|
||||
local verName=("%s %s %s"):format(SYSTEM,VERSION.string,VERSION.name)
|
||||
local tipLength=760
|
||||
local tip=gc.newText(getFont(30),"")
|
||||
@@ -22,7 +21,6 @@ local enterConsole=coroutine.wrap(function()
|
||||
end)
|
||||
function scene.sceneInit()
|
||||
BG.set()
|
||||
lastQuitTime=-1e99
|
||||
|
||||
--Set tip
|
||||
tip:set(text.getTip())
|
||||
@@ -46,15 +44,79 @@ function scene.mouseDown(x,y)
|
||||
end
|
||||
end
|
||||
scene.touchDown=scene.mouseDown
|
||||
local function _testButton(n)
|
||||
if NET.getlock('access_and_login')then
|
||||
MES.new('warn',text.wsConnecting)
|
||||
else
|
||||
if WIDGET.isFocus(scene.widgetList[n])then
|
||||
return true
|
||||
else
|
||||
WIDGET.focus(scene.widgetList[n])
|
||||
end
|
||||
end
|
||||
end
|
||||
function scene.keyDown(key,isRep)
|
||||
if isRep then return true end
|
||||
if key=='escape'then
|
||||
if TIME()-lastQuitTime<1 then
|
||||
if key=='1'then
|
||||
if _testButton(1)then
|
||||
SCN.go('mode')
|
||||
end
|
||||
elseif key=='q'then
|
||||
if _testButton(2)then
|
||||
loadGame(STAT.lastPlay,true)
|
||||
end
|
||||
elseif key=='a'then
|
||||
if _testButton(3)then
|
||||
if WS.status('app')=='running'then
|
||||
NET.tryLogin(false)
|
||||
elseif WS.status('app')=='dead'then
|
||||
NET.wsconn_app()
|
||||
SFX.play('connect')
|
||||
MES.new('info',text.wsConnecting)
|
||||
end
|
||||
end
|
||||
elseif key=='z'then
|
||||
if _testButton(4)then
|
||||
SCN.go('customGame')
|
||||
end
|
||||
elseif key=='-'then
|
||||
if _testButton(5)then
|
||||
SCN.go('setting_game')
|
||||
end
|
||||
elseif key=='p'then
|
||||
if _testButton(6)then
|
||||
SCN.go('stat')
|
||||
end
|
||||
elseif key=='l'then
|
||||
if _testButton(7)then
|
||||
SCN.go('dict')
|
||||
end
|
||||
elseif key==','then
|
||||
if _testButton(8)then
|
||||
SCN.go('replays')
|
||||
end
|
||||
elseif key=='2'then
|
||||
if _testButton(9)then
|
||||
SCN.go('music')
|
||||
end
|
||||
elseif key=='3'then
|
||||
if _testButton(10)then
|
||||
SCN.go('lang')
|
||||
end
|
||||
elseif key=='x'then
|
||||
if _testButton(11)then
|
||||
SCN.go('about')
|
||||
end
|
||||
elseif key=='m'then
|
||||
if _testButton(12)then
|
||||
SCN.go('manual')
|
||||
end
|
||||
elseif key=='c'then
|
||||
enterConsole()
|
||||
elseif key=='escape'then
|
||||
if tryBack()then
|
||||
VOC.play('bye')
|
||||
SCN.swapTo('quit','slowFade')
|
||||
else
|
||||
lastQuitTime=TIME()
|
||||
MES.new('warn',text.sureQuit)
|
||||
end
|
||||
elseif key=='c'then
|
||||
enterConsole()
|
||||
@@ -120,36 +182,20 @@ function scene.draw()
|
||||
end
|
||||
end
|
||||
|
||||
local function notConn()
|
||||
if NET.getlock('access_and_login')then
|
||||
MES.new('warn',text.wsConnecting)
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='offline',x=-1200,y=210,w=800,h=100,color='lR',font=45,align='R',edge=30,code=function()if notConn()then SCN.go('mode')end end},
|
||||
WIDGET.newButton{name='qplay', x=-1200,y=330,w=800,h=100,color='lM',font=40,align='R',edge=30,code=function()loadGame(STAT.lastPlay,true)end},
|
||||
WIDGET.newButton{name='online', x=-1200,y=450,w=800,h=100,color='lV',font=45,align='R',edge=30,code=function()
|
||||
if WS.status('app')=='running'then
|
||||
NET.tryLogin(false)
|
||||
elseif WS.status('app')=='dead'then
|
||||
NET.wsconn_app()
|
||||
SFX.play('connect')
|
||||
MES.new('info',text.wsConnecting)
|
||||
end
|
||||
end},
|
||||
WIDGET.newButton{name='custom', x=-1200,y=570,w=800,h=100,color='lS',font=45,align='R',edge=30,code=function()if notConn()then SCN.go('customGame')end end},
|
||||
WIDGET.newButton{name='offline',x=-1200,y=210,w=800,h=100,color='lR',font=45,align='R',edge=30,code=pressKey'1'},
|
||||
WIDGET.newButton{name='qplay', x=-1200,y=330,w=800,h=100,color='lM',font=40,align='R',edge=30,code=pressKey'q'},
|
||||
WIDGET.newButton{name='online', x=-1200,y=450,w=800,h=100,color='lV',font=45,align='R',edge=30,code=pressKey'a'},
|
||||
WIDGET.newButton{name='custom', x=-1200,y=570,w=800,h=100,color='lS',font=45,align='R',edge=30,code=pressKey'z'},
|
||||
|
||||
WIDGET.newButton{name='setting',x=2480,y=210,w=800,h=100, color='lO',font=40,align='L',edge=30,code=function()if notConn()then SCN.go('setting_game')end end},
|
||||
WIDGET.newButton{name='stat', x=2480,y=330,w=800,h=100, color='lL',font=40,align='L',edge=30,code=function()if notConn()then SCN.go('stat')end end},
|
||||
WIDGET.newButton{name='dict', x=2480,y=450,w=800,h=100, color='lG',font=40,align='L',edge=30,code=function()if notConn()then SCN.go('dict')end end},
|
||||
WIDGET.newButton{name='replays',x=2480,y=570,w=800,h=100, color='lC',font=40,align='L',edge=30,code=function()if notConn()then SCN.go('replays')end end},
|
||||
WIDGET.newButton{name='setting',x=2480,y=210,w=800,h=100, color='lO',font=40,align='L',edge=30,code=pressKey'-'},
|
||||
WIDGET.newButton{name='stat', x=2480,y=330,w=800,h=100, color='lL',font=40,align='L',edge=30,code=pressKey'p'},
|
||||
WIDGET.newButton{name='dict', x=2480,y=450,w=800,h=100, color='lG',font=40,align='L',edge=30,code=pressKey'l'},
|
||||
WIDGET.newButton{name='replays',x=2480,y=570,w=800,h=100, color='lC',font=40,align='L',edge=30,code=pressKey','},
|
||||
|
||||
WIDGET.newButton{name='music', x=120,y=80,w=100, color='lO',code=function()if notConn()then SCN.go('music')end end,font=70,fText=CHAR.icon.music},
|
||||
WIDGET.newButton{name='lang', x=280,y=80,w=100, color='lN',code=function()if notConn()then SCN.go('lang')end end,font=70,fText=CHAR.icon.language},
|
||||
WIDGET.newButton{name='about', x=-110,y=670,w=600,h=70, color='lB',align='R',edge=20,code=function()if notConn()then SCN.go('about')end end,font=50,fText=CHAR.icon.info},
|
||||
WIDGET.newButton{name='manual', x=1390,y=670,w=600,h=70, color='lR',align='L',edge=20,code=function()if notConn()then SCN.go('manual')end end,font=50,fText=CHAR.icon.help},
|
||||
WIDGET.newButton{name='music', x=120,y=80,w=100, color='lO',code=pressKey'2',font=70,fText=CHAR.icon.music},
|
||||
WIDGET.newButton{name='lang', x=280,y=80,w=100, color='lN',code=pressKey'3',font=70,fText=CHAR.icon.language},
|
||||
WIDGET.newButton{name='about', x=-110,y=670,w=600,h=70, color='lB',align='R',edge=20,code=pressKey'x',font=50,fText=CHAR.icon.info},
|
||||
WIDGET.newButton{name='manual', x=1390,y=670,w=600,h=70, color='lR',align='L',edge=20,code=pressKey'm',font=50,fText=CHAR.icon.help},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -271,7 +271,7 @@ function scene.draw()
|
||||
if unlocked==1 then
|
||||
name=RANK_CHARS[rank]
|
||||
if name then
|
||||
gc_setColor(0,0,0,.8)
|
||||
gc_setColor(COLOR.dX)
|
||||
mStr(name,M.x+M.size*.7,M.y-50-M.size*.7)
|
||||
gc_setColor(RANK_COLORS[rank])
|
||||
mStr(name,M.x+M.size*.7+4,M.y-50-M.size*.7-4)
|
||||
@@ -284,7 +284,7 @@ function scene.draw()
|
||||
--Score board
|
||||
if sel then
|
||||
local M=MODES[sel]
|
||||
gc_setColor(.5,.5,.5,.8)
|
||||
gc_setColor(COLOR.lX)
|
||||
gc_rectangle('fill',920,0,360,720,5)--Info board
|
||||
gc_setColor(COLOR.Z)
|
||||
setFont(40)mStr(text.modes[sel][1],1100,5)
|
||||
@@ -295,7 +295,7 @@ function scene.draw()
|
||||
end
|
||||
if M.score then
|
||||
mText(TEXTOBJ.highScore,1100,240)
|
||||
gc_setColor(.3,.3,.3,.7)
|
||||
gc_setColor(COLOR.X)
|
||||
gc_rectangle('fill',940,290,320,280,5)--Highscore board
|
||||
local L=M.records
|
||||
gc_setColor(1,1,1)
|
||||
|
||||
@@ -17,12 +17,13 @@ local author={
|
||||
moonbeam="Beethoven & MrZ",
|
||||
empty="ERM",
|
||||
["how feeling"]="V.A.",
|
||||
["sugar fairy"]="Tchaikovsky & MrZ",
|
||||
["secret7th remix"]="柒栎流星",
|
||||
["jazz nihilism"]="Trebor",
|
||||
["race remix"]="柒栎流星",
|
||||
["sakura"]="ZUN & C₂₉H₂₅N₃O₅",
|
||||
sakura="ZUN & C₂₉H₂₅N₃O₅",
|
||||
["1980s"]="C₂₉H₂₅N₃O₅",
|
||||
["malate"]="ZUN & C₂₉H₂₅N₃O₅",
|
||||
malate="ZUN & C₂₉H₂₅N₃O₅",
|
||||
}
|
||||
|
||||
local scene={}
|
||||
|
||||
@@ -16,7 +16,6 @@ local inputBox=WIDGET.newInputBox{name='input',x=340,y=660,w=600,h=50,limit=256}
|
||||
local playing
|
||||
local lastUpstreamTime
|
||||
local upstreamProgress
|
||||
local lastBackTime=0
|
||||
local noTouch,noKey=false,false
|
||||
local touchMoveLastFrame=false
|
||||
local newMessageTimer
|
||||
@@ -36,15 +35,12 @@ local function _gotoSetting()
|
||||
SCN.go('setting_game')
|
||||
end
|
||||
local function _quit()
|
||||
if TIME()-lastBackTime<1 then
|
||||
if tryBack()then
|
||||
NET.signal_quit()
|
||||
if SCN.stack[#SCN.stack-1]=='net_newRoom'then
|
||||
SCN.pop()
|
||||
end
|
||||
SCN.back()
|
||||
else
|
||||
lastBackTime=TIME()
|
||||
MES.new('info',text.sureQuit)
|
||||
end
|
||||
end
|
||||
local function _switchChat()
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
local lastLogoutTime
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
lastLogoutTime=-1e99
|
||||
BG.set()
|
||||
end
|
||||
function scene.sceneBack()
|
||||
@@ -22,7 +19,7 @@ scene.widgetList={
|
||||
WIDGET.newButton{name='rooms', x=640, y=540,w=350,h=120,font=40,code=goScene'net_rooms'},
|
||||
WIDGET.newButton{name='logout',x=880, y=40,w=180, h=60,color='dR',
|
||||
code=function()
|
||||
if TIME()-lastLogoutTime<1 then
|
||||
if tryBack()then
|
||||
if USER.uid then
|
||||
NET.wsclose_play()
|
||||
NET.wsclose_user()
|
||||
@@ -31,9 +28,6 @@ scene.widgetList={
|
||||
saveFile(USER,'conf/user')
|
||||
SCN.back()
|
||||
end
|
||||
else
|
||||
MES.new('info',text.sureQuit)
|
||||
lastLogoutTime=TIME()
|
||||
end
|
||||
end},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
|
||||
@@ -39,8 +39,6 @@ end}
|
||||
|
||||
local scene={}
|
||||
|
||||
local sure
|
||||
|
||||
local function _playRep(fileName)
|
||||
local rep=DATA.parseReplay(fileName,true)
|
||||
if not rep.available then
|
||||
@@ -72,7 +70,6 @@ end
|
||||
|
||||
function scene.sceneInit()
|
||||
BG.set()
|
||||
sure=0
|
||||
listBox:setList(REPLAY)
|
||||
local hide=listBox:getLen()==0
|
||||
for i=3,5 do
|
||||
@@ -121,8 +118,7 @@ function scene.keyDown(key)
|
||||
elseif key=='delete'then
|
||||
local rep=listBox:getSel()
|
||||
if rep then
|
||||
if sure>.3 then
|
||||
sure=0
|
||||
if tryDelete()then
|
||||
listBox:remove()
|
||||
love.filesystem.remove(rep.fileName)
|
||||
for i=1,#REPLAY do
|
||||
@@ -132,9 +128,6 @@ function scene.keyDown(key)
|
||||
end
|
||||
end
|
||||
SFX.play('finesseError',.7)
|
||||
else
|
||||
sure=1
|
||||
MES.new('info',text.sureReset)
|
||||
end
|
||||
end
|
||||
else
|
||||
@@ -142,12 +135,6 @@ function scene.keyDown(key)
|
||||
end
|
||||
end
|
||||
|
||||
function scene.update(dt)
|
||||
if sure>0 then
|
||||
sure=sure-dt
|
||||
end
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
listBox,
|
||||
WIDGET.newButton{name='export',x=180,y=640,w=140,h=80,color='lG',code=pressKey'cC',font=50,fText=CHAR.icon.export},
|
||||
|
||||
@@ -54,7 +54,7 @@ local keyNames={
|
||||
lgui='L'..CHAR.key.macCmd,
|
||||
rgui='R'..CHAR.key.macCmd,
|
||||
space=CHAR.key.space,
|
||||
delete=CHAR.key.del,
|
||||
delete=CHAR.key.macFowardDel,
|
||||
pageup=CHAR.key.macPgup,
|
||||
pagedown=CHAR.key.macPgdn,
|
||||
home=CHAR.key.macHome,
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
return[=[
|
||||
未来小游戏:
|
||||
Tetro-1010(2C2N, 重力); Tetra-link(桌游)
|
||||
求合体; 坦克大战; 扫雷; 接水管; 记忆
|
||||
Tetro-1010(2C2N, 重力)
|
||||
Tetra-link(桌游)
|
||||
坦克大战; 扫雷; 接水管
|
||||
其他未来内容:
|
||||
模式包系统; 新模组系统; 加速下落; spike相关统计数据
|
||||
实时统计数据可视化; 教学关脚本语言; 从录像继续
|
||||
@@ -13,26 +14,32 @@ return[=[
|
||||
|
||||
0.17.0: 硬着陆 Hard Landing
|
||||
新增:
|
||||
新模式:清版竞速
|
||||
新模式:策略堆叠(原设计来自游戏Cambridge, by NOT_A_ROBOT)
|
||||
新旋转系统:DRS_weak,移除了滞后旋转(五连块朝向风格模仿) #441
|
||||
新BGM:malate(暂未使用)
|
||||
新旋转系统:DRS_weak,没有滞后旋转(五连块风格模仿) #441
|
||||
新机制:出块延迟打断(ARE打断)(默认关闭) #471
|
||||
新机制:锁定在外判负(lockout)(默认关闭)
|
||||
新机制:全局默认使用5帧窒息延迟
|
||||
新功能:自定义图片背景功能(可调透明度)(目前仅电脑可用)
|
||||
新功能:支持摇杆和扳机(参数暂时不能调整)
|
||||
新功能:没有键盘全支持的场景可以用方向键控制光标操作 #329
|
||||
新BGM:malate(暂未使用)
|
||||
新小程序:Memorize,Triple
|
||||
改动:
|
||||
关闭背景时亮度可调 #119
|
||||
关闭背景的灰底亮度可调 #119
|
||||
美化各种控件样式
|
||||
调整游戏大logo为正体字
|
||||
软降n格的键也可以触发深降
|
||||
普通消1不再有single语音
|
||||
优化键位设置菜单各种键的显示
|
||||
优化大量菜单的背景颜色细节
|
||||
修改默认和zday节日的主菜单BGM
|
||||
平滑马拉松-普通和混战模式的速度曲线
|
||||
三个高难隐形使用不同模式图标 #493
|
||||
修改按钮音效,给复选框和选择器添加新音效
|
||||
ultra模式计时器改为秒表,重开的时候会重播bgm
|
||||
出块/消行延迟逻辑修正,现在真的是0延迟,不再有一帧等待了(略微影响手感,更滑)
|
||||
大改重力和软降的结算逻辑,两个值接近的时候不会看起来不自然了 #438
|
||||
Ospin变O后操作序列清空,变远端朝下JL时允许水平可移动
|
||||
生成位置预览开启后hold的生成位置也可见 #453
|
||||
TRS的S/Z添加四个踢墙防止在一些地方卡死
|
||||
优化pc训练模式体验,添加胜利条件,不再无尽
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
return{
|
||||
["apkCode"]=413,
|
||||
["apkCode"]=415,
|
||||
["code"]=1700,
|
||||
["string"]="V0.17.0",
|
||||
["room"]="ver A-2",
|
||||
|
||||
Reference in New Issue
Block a user