This commit is contained in:
MrZ_26
2020-02-14 00:22:15 +08:00
parent f6835c2118
commit 5f62127f28
38 changed files with 164 additions and 139 deletions

BIN
SFX/enter.ogg Normal file

Binary file not shown.

View File

@@ -1,4 +1,4 @@
gameVersion="Alpha V0.8.5-" gameVersion="Alpha V0.8.6"
function love.conf(t) function love.conf(t)
t.identity="Techmino"--Save directory name t.identity="Techmino"--Save directory name
t.version="11.1" t.version="11.1"

View File

@@ -23,8 +23,22 @@ end
-------------------------<Events>------------------------- -------------------------<Events>-------------------------
local function gameOver() local function gameOver()
local M=curMode local M=curMode
if M.score then local R=M.getRank
if R then
local P=players[1] local P=players[1]
R=R(P)--new rank
if R then
local r=modeRanks[M.id]--old rank
if R>r then
modeRanks[M.id]=R
if r==0 then
for i=1,#M.unlock do
local m=M.unlock[i]
modeRanks[m]=modes[m].score and 0 or 6
end
end
end
end
local D=M.score(P) local D=M.score(P)
local L=M.records local L=M.records
local p=#L--排名数-1 local p=#L--排名数-1
@@ -45,22 +59,9 @@ local function gameOver()
if L[11]then L[11]=nil end if L[11]then L[11]=nil end
saveRecord(M.saveFileName,L) saveRecord(M.saveFileName,L)
end end
local R=M.getRank(P)--new rank
if R then
local r=modeRanks[M.id]--old rank
if R>r then
modeRanks[M.id]=R
if r==0 then
for i=1,#M.unlock do
local m=M.unlock[i]
modeRanks[m]=modes[m].score and 0 or 6
end
end
end
end
end end
end--Save record end--Save record
local function die(P) local function die(P)--Same thing when win/lose,not really die!
P.alive=false P.alive=false
P.control=false P.control=false
P.timing=false P.timing=false
@@ -76,7 +77,7 @@ local function die(P)
P.visTime[i][j]=min(P.visTime[i][j],20) P.visTime[i][j]=min(P.visTime[i][j],20)
end end
end end
end--Same thing when win/lose/finish end
Event={} Event={}
function Event.reach_winCheck(P) function Event.reach_winCheck(P)
if P.stat.row>=P.gameEnv.target then if P.stat.row>=P.gameEnv.target then

BIN
font.ttf

Binary file not shown.

View File

@@ -58,7 +58,7 @@ blockColor={
} }
sfx={ sfx={
"welcome", "welcome",
"click", "click","enter",
"error","error_long", "error","error_long",
--Stereo sfxs(cannot set position) --Stereo sfxs(cannot set position)
"button","swipe", "button","swipe",

View File

@@ -253,13 +253,19 @@ function mouseClick.mode(x,y,k)
local _=cam.sel local _=cam.sel
if not cam.sel or x<920 then if not cam.sel or x<920 then
local __=onMode(x,y) local __=onMode(x,y)
if __ and _~=__ then if _~=__ then
SFX("click") if __ then
cam.moving=true SFX("click")
_=modes[__] cam.moving=true
cam.x,cam.y=_.x*cam.k+180,_.y*cam.k _=modes[__]
cam.x=_.x*cam.k+180
cam.y=_.y*cam.k
cam.sel=__
else
cam.sel=nil
cam.x=cam.x-180
end
end end
cam.sel=__
end end
cam.keyCtrl=false cam.keyCtrl=false
end end
@@ -470,9 +476,11 @@ function keyDown.setting_key(key)
for y=1,20 do for y=1,20 do
if setting.keyMap[l][y]==key then if setting.keyMap[l][y]==key then
setting.keyMap[l][y]="" setting.keyMap[l][y]=""
goto L
end end
end end
end end
::L::
setting.keyMap[s.board][s.kb]=key setting.keyMap[s.board][s.kb]=key
SFX("reach",.5) SFX("reach",.5)
s.kS=false s.kS=false
@@ -515,31 +523,33 @@ function gamepadDown.setting_key(key)
for y=1,20 do for y=1,20 do
if setting.keyMap[l][y]==key then if setting.keyMap[l][y]==key then
setting.keyMap[l][y]="" setting.keyMap[l][y]=""
goto L
end end
end end
end end
::L::
setting.keyMap[8+s.board][s.js]=key setting.keyMap[8+s.board][s.js]=key
SFX("reach",.5) SFX("reach",.5)
s.jS=false s.jS=false
elseif key=="start"then elseif key=="start"then
s.jS=true s.jS=true
SFX("lock",.5) SFX("lock",.5)
elseif key=="up"then elseif key=="dpup"then
if s.js>1 then if s.js>1 then
s.js=s.js-1 s.js=s.js-1
SFX("move",.5) SFX("move",.5)
end end
elseif key=="down"then elseif key=="dpdown"then
if s.js<20 then if s.js<20 then
s.js=s.js+1 s.js=s.js+1
SFX("move",.5) SFX("move",.5)
end end
elseif key=="left"then elseif key=="dpleft"then
if s.board>1 then if s.board>1 then
s.board=s.board-1 s.board=s.board-1
SFX("rotate",.5) SFX("rotate",.5)
end end
elseif key=="right"then elseif key=="dpright"then
if s.board<8 then if s.board<8 then
s.board=s.board+1 s.board=s.board+1
SFX("rotate",.5) SFX("rotate",.5)
@@ -647,7 +657,7 @@ function touchMove.play(id,x,y,dx,dy)
end end
end end
function keyDown.play(key) function keyDown.play(key)
if key=="escape"and not scene.swapping then if key=="escape"then
(frame<180 and back or pauseGame)() (frame<180 and back or pauseGame)()
return return
end end
@@ -745,7 +755,7 @@ local function widgetControl_key(i)
widget_sel=select(2,next(Widget[scene.cur])) widget_sel=select(2,next(Widget[scene.cur]))
end end
elseif i=="space"or i=="return"then elseif i=="space"or i=="return"then
if not scene.swapping and widget_sel then if widget_sel then
widgetPress(widget_sel) widgetPress(widget_sel)
end end
elseif i=="left"or i=="right"then elseif i=="left"or i=="right"then
@@ -769,10 +779,8 @@ local function widgetControl_gamepad(i)
widget_sel=select(2,next(Widget[scene.cur])) widget_sel=select(2,next(Widget[scene.cur]))
end end
elseif i=="start"then elseif i=="start"then
if not scene.swapping and widget_sel then if widget_sel then
if not scene.swapping and widget_sel then widgetPress(widget_sel)
widgetPress(widget_sel)
end
end end
elseif i=="dpleft"or i=="dpright"then elseif i=="dpleft"or i=="dpright"then
if widget_sel then if widget_sel then
@@ -789,8 +797,9 @@ local function widgetControl_gamepad(i)
end end
local lastX,lastY--last clickDown pos local lastX,lastY--last clickDown pos
function love.mousepressed(x,y,k,t,num) function love.mousepressed(x,y,k,t,num)
mouseShow=true
if devMode>0 then print(x,y)end if devMode>0 then print(x,y)end
if t then return end if t or scene.swapping then return end
mx,my=xOy:inverseTransformPoint(x,y) mx,my=xOy:inverseTransformPoint(x,y)
if mouseDown[scene.cur]then if mouseDown[scene.cur]then
mouseDown[scene.cur](mx,my,k) mouseDown[scene.cur](mx,my,k)
@@ -798,16 +807,16 @@ function love.mousepressed(x,y,k,t,num)
scene.back() scene.back()
end end
if k==1 then if k==1 then
if widget_sel and not scene.swapping then if widget_sel then
widgetPress(widget_sel,mx,my) widgetPress(widget_sel,mx,my)
end end
end end
lastX=mx lastX=mx
lastY=my lastY=my
mouseShow=true
end end
function love.mousemoved(x,y,dx,dy,t) function love.mousemoved(x,y,dx,dy,t)
if t then return end mouseShow=true
if t or scene.swapping then return end
mx,my=xOy:inverseTransformPoint(x,y) mx,my=xOy:inverseTransformPoint(x,y)
dx,dy=dx/scr.k,dy/scr.k dx,dy=dx/scr.k,dy/scr.k
if mouseMove[scene.cur]then if mouseMove[scene.cur]then
@@ -824,10 +833,9 @@ function love.mousemoved(x,y,dx,dy,t)
end end
end end
end end
mouseShow=true
end end
function love.mousereleased(x,y,k,t,num) function love.mousereleased(x,y,k,t,num)
if t then return end if t or scene.swapping then return end
mx,my=xOy:inverseTransformPoint(x,y) mx,my=xOy:inverseTransformPoint(x,y)
if mouseUp[scene.cur]then if mouseUp[scene.cur]then
mouseUp[scene.cur](mx,my,k) mouseUp[scene.cur](mx,my,k)
@@ -837,11 +845,13 @@ function love.mousereleased(x,y,k,t,num)
end end
end end
function love.wheelmoved(x,y) function love.wheelmoved(x,y)
if scene.swapping then return end
if wheelMoved[scene.cur]then wheelMoved[scene.cur](x,y)end if wheelMoved[scene.cur]then wheelMoved[scene.cur](x,y)end
end end
function love.touchpressed(id,x,y) function love.touchpressed(id,x,y)
mouseShow=false mouseShow=false
if scene.swapping then return end
if not touching then if not touching then
touching=id touching=id
love.touchmoved(id,x,y,0,0) love.touchmoved(id,x,y,0,0)
@@ -853,6 +863,7 @@ function love.touchpressed(id,x,y)
end end
end end
function love.touchmoved(id,x,y,dx,dy) function love.touchmoved(id,x,y,dx,dy)
if scene.swapping then return end
x,y=xOy:inverseTransformPoint(x,y) x,y=xOy:inverseTransformPoint(x,y)
if touchMove[scene.cur]then if touchMove[scene.cur]then
touchMove[scene.cur](id,x,y,dx/scr.k,dy/scr.k) touchMove[scene.cur](id,x,y,dx/scr.k,dy/scr.k)
@@ -873,10 +884,11 @@ function love.touchmoved(id,x,y,dx,dy)
end end
end end
function love.touchreleased(id,x,y) function love.touchreleased(id,x,y)
if scene.swapping then return end
x,y=xOy:inverseTransformPoint(x,y) x,y=xOy:inverseTransformPoint(x,y)
if id==touching then if id==touching then
touching=nil touching=nil
if widget_sel and not scene.swapping then if widget_sel then
widgetPress(widget_sel,x,y) widgetPress(widget_sel,x,y)
end end
widget_sel=nil widget_sel=nil
@@ -890,6 +902,7 @@ function love.touchreleased(id,x,y)
end end
function love.keypressed(i) function love.keypressed(i)
mouseShow=false mouseShow=false
if scene.swapping then return end
if i=="f8"then devMode=0 if i=="f8"then devMode=0
elseif i=="f9"then devMode=1 elseif i=="f9"then devMode=1
elseif i=="f10"then devMode=2 elseif i=="f10"then devMode=2
@@ -926,6 +939,7 @@ function love.keypressed(i)
end end
end end
function love.keyreleased(i) function love.keyreleased(i)
if scene.swapping then return end
if keyUp[scene.cur]then keyUp[scene.cur](i)end if keyUp[scene.cur]then keyUp[scene.cur](i)end
end end
@@ -939,6 +953,7 @@ local keyMirror={
} }
function love.gamepadpressed(joystick,i) function love.gamepadpressed(joystick,i)
mouseShow=false mouseShow=false
if scene.swapping then return end
if gamepadDown[scene.cur]then gamepadDown[scene.cur](i) if gamepadDown[scene.cur]then gamepadDown[scene.cur](i)
elseif keyDown[scene.cur]then keyDown[scene.cur](keyMirror[i]or i) elseif keyDown[scene.cur]then keyDown[scene.cur](keyMirror[i]or i)
elseif i=="back"then scene.back() elseif i=="back"then scene.back()
@@ -946,6 +961,7 @@ function love.gamepadpressed(joystick,i)
end end
end end
function love.gamepadreleased(joystick,i) function love.gamepadreleased(joystick,i)
if scene.swapping then return end
if gamepadUp[scene.cur]then gamepadUp[scene.cur](i) if gamepadUp[scene.cur]then gamepadUp[scene.cur](i)
end end
end end
@@ -1170,8 +1186,6 @@ function love.run()
for N,a,b,c,d,e in POLL()do for N,a,b,c,d,e in POLL()do
if N=="quit"then if N=="quit"then
destroyPlayers() destroyPlayers()
saveStat()
saveSetting()
goto END goto END
elseif love[N]then elseif love[N]then
love[N](a,b,c,d,e) love[N](a,b,c,d,e)
@@ -1206,7 +1220,7 @@ local F=love.filesystem
if F.getInfo("data")then if F.getInfo("data")then
F.write("data.dat",F.read("data")) F.write("data.dat",F.read("data"))
F.remove("data") F.remove("data")
end end
if F.getInfo("userdata")then if F.getInfo("userdata")then
F.write("data.dat",F.read("userdata")) F.write("data.dat",F.read("userdata"))
F.remove("userdata") F.remove("userdata")
@@ -1223,7 +1237,6 @@ end
FILE={ FILE={
data=F.newFile("data.dat"), data=F.newFile("data.dat"),
setting=F.newFile("setting.dat"), setting=F.newFile("setting.dat"),
vk=F.newFile("vk"),
} }
if F.getInfo("data.dat")then loadStat()end if F.getInfo("data.dat")then loadStat()end
if F.getInfo("setting.dat")then if F.getInfo("setting.dat")then
@@ -1234,5 +1247,5 @@ else
setting.VKSwitch=false setting.VKSwitch=false
end end
math.randomseed(os.time()*626) math.randomseed(os.time()*626)
swapLanguage(setting.lang) changeLanguage(setting.lang)
changeBlockSkin(setting.skin) changeBlockSkin(setting.skin)

View File

@@ -34,11 +34,11 @@ return{
mStr(P.stat.clear_4,-82,340) mStr(P.stat.clear_4,-82,340)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
if L==200 then if L>=200 then
local T=P.stat.time local T=P.stat.time
return return
T<=140 and 5 or T<=140 and 5 or

View File

@@ -36,11 +36,11 @@ return{
mStr(P.stat.clear_4,-82,340) mStr(P.stat.clear_4,-82,340)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
if L==200 then if L>=200 then
local T=P.stat.time local T=P.stat.time
return return
T<=150 and 5 or T<=150 and 5 or

View File

@@ -36,11 +36,11 @@ return{
mStr(P.stat.clear_4,-82,340) mStr(P.stat.clear_4,-82,340)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
if L==200 then if L>=200 then
local T=P.stat.time local T=P.stat.time
return return
T<=180 and 5 or T<=180 and 5 or

View File

@@ -35,11 +35,11 @@ return{
mStr(P.stat.clear_4,-82,340) mStr(P.stat.clear_4,-82,340)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
if L==200 then if L>=200 then
local T=P.stat.time local T=P.stat.time
return return
T<=150 and 5 or T<=150 and 5 or

View File

@@ -37,12 +37,12 @@ return{
mStr(P.stat.clear_4,-82,340) mStr(P.stat.clear_4,-82,340)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
L>=100 and 4 or L>=100 and 4 or
L>=50 and 3 or L>=50 and 3 or
L>=26 and 2 or L>=26 and 2 or

View File

@@ -54,7 +54,7 @@ return{
gc.rectangle("fill",-125,375,90,4) gc.rectangle("fill",-125,375,90,4)
end, end,
score=function(P)return{P.stat.row,P.stat.score}end, score=function(P)return{P.stat.row,P.stat.score}end,
scoreDisp=function(D)return D[1].." Rows "..D[2]end, scoreDisp=function(D)return D[1].." Lines "..D[2]end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]>b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row

View File

@@ -40,7 +40,7 @@ return{
mDraw(drawableText.wave,-82,375) mDraw(drawableText.wave,-82,375)
end, end,
score=function(P)return{P.modeData.event,P.stat.row}end, score=function(P)return{P.modeData.event,P.stat.row}end,
scoreDisp=function(D)return D[1].." Waves "..D[2].." Rows"end, scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local W=P.modeData.event local W=P.modeData.event

View File

@@ -39,7 +39,7 @@ return{
mDraw(drawableText.wave,-82,375) mDraw(drawableText.wave,-82,375)
end, end,
score=function(P)return{P.modeData.event,P.stat.row}end, score=function(P)return{P.modeData.event,P.stat.row}end,
scoreDisp=function(D)return D[1].." Waves "..D[2].." Rows"end, scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local W=P.modeData.event local W=P.modeData.event

View File

@@ -32,7 +32,7 @@ return{
mStr(R>=0 and R or 0,-82,280) mStr(R>=0 and R or 0,-82,280)
end, end,
score=function(P)return{P.stat.row<=100 and P.stat.row or 100,P.stat.time}end, score=function(P)return{P.stat.row<=100 and P.stat.row or 100,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
if P.stat.row<100 then return end if P.stat.row<100 then return end

View File

@@ -32,7 +32,7 @@ return{
mStr(R>=0 and R or 0,-82,280) mStr(R>=0 and R or 0,-82,280)
end, end,
score=function(P)return{P.stat.row<=100 and P.stat.row or 100,P.stat.time}end, score=function(P)return{P.stat.row<=100 and P.stat.row or 100,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
if P.stat.row<100 then return end if P.stat.row<100 then return end

View File

@@ -49,7 +49,7 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
end, end,
score=function(P)return{P.modeData.point}end, score=function(P)return{P.modeData.point}end,
scoreDisp=function(D)return D[1].." Rows"end, scoreDisp=function(D)return D[1].." Lines"end,
comp=function(a,b)return a[1]>b[1]end, comp=function(a,b)return a[1]>b[1]end,
getRank=function(P) getRank=function(P)
local L=P.modeData.point local L=P.modeData.point

View File

@@ -37,11 +37,11 @@ return{
gc.rectangle("fill",-125,375,90,4) gc.rectangle("fill",-125,375,90,4)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
if L==200 then if L>=200 then
local T=P.stat.time local T=P.stat.time
return return
T<=200 and 5 or T<=200 and 5 or

View File

@@ -46,11 +46,11 @@ return{
gc.rectangle("fill",-125,375,90,4) gc.rectangle("fill",-125,375,90,4)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
if L==200 then if L>=200 then
local T=P.stat.time local T=P.stat.time
return return
T<=180 and 5 or T<=180 and 5 or

View File

@@ -50,4 +50,4 @@ return{
T<=2200 and 2 or T<=2200 and 2 or
T<=3000 and 1 T<=3000 and 1
end, end,
} }

View File

@@ -48,6 +48,6 @@ return{
T<=32 and 4 or T<=32 and 4 or
T<=40 and 3 or T<=40 and 3 or
T<=60 and 2 or T<=60 and 2 or
T<=100 and 1 T<=120 and 1
end, end,
} }

View File

@@ -19,7 +19,6 @@ return{
env={ env={
drop=30,lock=45, drop=30,lock=45,
freshLimit=10, freshLimit=10,
visible="time",
task=function(P) task=function(P)
if not P.control then return end if not P.control then return end
P.modeData.counter=P.modeData.counter+1 P.modeData.counter=P.modeData.counter+1

View File

@@ -19,7 +19,6 @@ return{
env={ env={
drop=30,lock=45, drop=30,lock=45,
freshLimit=10, freshLimit=10,
visible="time",
task=function(P) task=function(P)
if not P.control then return end if not P.control then return end
P.modeData.counter=P.modeData.counter+1 P.modeData.counter=P.modeData.counter+1

View File

@@ -19,7 +19,6 @@ return{
env={ env={
drop=30,lock=45, drop=30,lock=45,
freshLimit=10, freshLimit=10,
visible="time",
task=function(P) task=function(P)
if not P.control then return end if not P.control then return end
P.modeData.counter=P.modeData.counter+1 P.modeData.counter=P.modeData.counter+1

View File

@@ -19,7 +19,6 @@ return{
env={ env={
drop=30,lock=45, drop=30,lock=45,
freshLimit=10, freshLimit=10,
visible="time",
task=function(P) task=function(P)
if not P.control then return end if not P.control then return end
P.modeData.counter=P.modeData.counter+1 P.modeData.counter=P.modeData.counter+1

View File

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_ultimate(P) local function tech_check_ultimate(P)
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
Event.lose(P) Event.lose(P)
@@ -39,15 +40,15 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
L==126 and 4 or L>=126 and 4 or
L==90 and 3 or L>=90 and 3 or
L==60 and 2 or L>=60 and 2 or
L==30 and 1 L>=30 and 1
end, end,
} }

View File

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_easy(P) local function tech_check_easy(P)
if #P.cleared>0 and P.b2b<40 then if #P.cleared>0 and P.b2b<40 then
Event.lose(P) Event.lose(P)
@@ -39,15 +40,15 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
L==126 and 4 or L>=126 and 4 or
L==90 and 3 or L>=90 and 3 or
L==60 and 2 or L>=60 and 2 or
L==30 and 1 L>=30 and 1
end, end,
} }

View File

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_ultimate(P) local function tech_check_ultimate(P)
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
Event.lose(P) Event.lose(P)
@@ -39,15 +40,15 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
L==140 and 4 or L>=140 and 4 or
L==90 and 3 or L>=90 and 3 or
L==60 and 2 or L>=60 and 2 or
L==30 and 1 L>=30 and 1
end, end,
} }

View File

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_hard(P) local function tech_check_hard(P)
if #P.cleared>0 and P.lastClear<10 then if #P.cleared>0 and P.lastClear<10 then
Event.lose(P) Event.lose(P)
@@ -39,15 +40,15 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
L==140 and 4 or L>=140 and 4 or
L==90 and 3 or L>=90 and 3 or
L==60 and 2 or L>=60 and 2 or
L==30 and 1 L>=30 and 1
end, end,
} }

View File

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_ultimate(P) local function tech_check_ultimate(P)
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
Event.lose(P) Event.lose(P)
@@ -39,15 +40,15 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
L==126 and 4 or L>=126 and 4 or
L==80 and 3 or L>=80 and 3 or
L==50 and 2 or L>=50 and 2 or
L==20 and 1 L>=20 and 1
end, end,
} }

View File

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_easy(P) local function tech_check_easy(P)
if #P.cleared>0 and P.b2b<40 then if #P.cleared>0 and P.b2b<40 then
Event.lose(P) Event.lose(P)
@@ -39,15 +40,15 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
L==126 and 4 or L>=126 and 4 or
L==80 and 3 or L>=80 and 3 or
L==50 and 2 or L>=50 and 2 or
L==20 and 1 L>=20 and 1
end, end,
} }

View File

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_ultimate(P) local function tech_check_ultimate(P)
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
Event.lose(P) Event.lose(P)
@@ -40,15 +41,15 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
L==150 and 4 or L>=150 and 4 or
L==100 and 3 or L>=100 and 3 or
L==70 and 2 or L>=70 and 2 or
L==40 and 1 L>=40 and 1
end, end,
} }

View File

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_hard(P) local function tech_check_hard(P)
if #P.cleared>0 and P.lastClear<10 then if #P.cleared>0 and P.lastClear<10 then
Event.lose(P) Event.lose(P)
@@ -40,15 +41,15 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
L==150 and 4 or L>=150 and 4 or
L==100 and 3 or L>=100 and 3 or
L==70 and 2 or L>=70 and 2 or
L==40 and 1 L>=40 and 1
end, end,
} }

View File

@@ -213,7 +213,7 @@ function Pnt.mode()
local M=MM[_] local M=MM[_]
if R[_]then if R[_]then
gc.setLineWidth(8) gc.setLineWidth(8)
gc.setColor(1,1,1,.15) gc.setColor(1,1,1,.2)
for _=1,#M.unlock do for _=1,#M.unlock do
local m=M.unlock[_] local m=M.unlock[_]
if R[m]then if R[m]then
@@ -223,8 +223,8 @@ function Pnt.mode()
end end
local S=M.size local S=M.size
local d=((M.x-(cam.x1-180)/cam.k1)^2+(M.y-cam.y1/cam.k1)^2)^.5 local d=((M.x-(cam.x1+(cam.sel and -180 or 0))/cam.k1)^2+(M.y-cam.y1/cam.k1)^2)^.55
if d<600 then S=S*(1.3-d*0.0005) end if d<500 then S=S*(1.25-d*0.0005) end
gc.setColor(modeRankColor[modeRanks[M.id]]) gc.setColor(modeRankColor[modeRanks[M.id]])
if M.shape==1 then--Rectangle if M.shape==1 then--Rectangle
gc.rectangle("fill",M.x-S,M.y-S,2*S,2*S) gc.rectangle("fill",M.x-S,M.y-S,2*S,2*S)

View File

@@ -47,7 +47,7 @@ local sceneInit={
end end
end, end,
mode=function() mode=function()
curBG="none" curBG="glow"
BGM("blank") BGM("blank")
destroyPlayers() destroyPlayers()
mapCam.zoomK=scene.swap.tar=="mode"and 5 or 1 mapCam.zoomK=scene.swap.tar=="mode"and 5 or 1
@@ -236,7 +236,8 @@ function scene.push(tar,style)
end end
end end
function scene.pop() function scene.pop()
scene.seq={} local _=scene.seq
_[#_-1]=nil
end end
function scene.swapTo(tar,style) function scene.swapTo(tar,style)
local S=scene.swap local S=scene.swap
@@ -253,15 +254,13 @@ function scene.swapTo(tar,style)
end end
end end
function scene.back() function scene.back()
if not scene.swapping then if backFunc[scene.cur] then backFunc[scene.cur]()end
if backFunc[scene.cur] then backFunc[scene.cur]()end --func when scene end
--func when scene end local m=#scene.seq
local m=#scene.seq if m>0 then
if m>0 then scene.swapTo(scene.seq[m-1],scene.seq[m])
scene.swapTo(scene.seq[m-1],scene.seq[m]) scene.seq[m],scene.seq[m-1]=nil
scene.seq[m],scene.seq[m-1]=nil --Poll&Back to preScene
--Poll&Back to preScene
end
end end
end end
return scene return scene

View File

@@ -20,7 +20,7 @@ end
function toTime(s) function toTime(s)
if s<60 then if s<60 then
return format("%.2fs",s) return format("%.3fs",s)
elseif s<3600 then elseif s<3600 then
return format("%dm%.2fs",int(s/60),s%60) return format("%dm%.2fs",int(s/60),s%60)
else else
@@ -95,7 +95,7 @@ local drawableTextLoad={
"noScore", "noScore",
"highScore", "highScore",
} }
function swapLanguage(l) function changeLanguage(l)
text=require("language/"..langID[l]) text=require("language/"..langID[l])
for S,L in next,Widget do for S,L in next,Widget do
for N,W in next,L do for N,W in next,L do
@@ -305,6 +305,7 @@ function loadGame(M)
drawableText.levelName:set(M.level[lang]) drawableText.levelName:set(M.level[lang])
needResetGameData=true needResetGameData=true
scene.swapTo("play","fade_togame") scene.swapTo("play","fade_togame")
SFX("enter")
end end
function resetPartGameData() function resetPartGameData()
gameResult=false gameResult=false
@@ -614,8 +615,8 @@ function saveSetting()
F:flush() F:flush()
F:close() F:close()
if _ then if _ then
TEXT(text.settingSaved,640,360,80,"appear") TEXT(text.settingSaved,370,330,30,"appear")
else else
TEXT(text.settingSavingError..mes,640,360,40,"appear",.4) TEXT(text.settingSavingError.."123",370,350,20,"appear",.3)
end end
end end

View File

@@ -35,12 +35,19 @@ Future outlook:
more FXs & 3d features & animations more FXs & 3d features & animations
Encrypt source code(compile to byte code) Encrypt source code(compile to byte code)
0.8.6: 0.8.6:
gamepad can adjust key
add SFX when enter game
map GUI little adjusted
event system little changed(no ctrl when scene swapping)
bug fixed(rank system,some mode error when enter)
0.8.5-:
mode map!Brandly new GUI for mode selecting mode map!Brandly new GUI for mode selecting
mode unlock system,not that scary for noob mode unlock system,not that scary for noob
every mode has rank calculating method(may some mistakes/inappropriate number) every mode has rank calculating method(may some mistakes/inappropriate number)
save 10 best recoreds for each mode save 10 best recoreds for each mode
can save/share custom map now can save/share custom map now
new mode:Big Bang new mode:Big Bang
button appearance changed
better widget performence better widget performence
many bug fixed many bug fixed
0.8.4: 0.8.4:

View File

@@ -142,7 +142,7 @@ local Widget={
stat= newButton(370,460,200,160,C.lightCyan, 43,function()scene.push()scene.swapTo("stat")end, nil,"lang"), stat= newButton(370,460,200,160,C.lightCyan, 43,function()scene.push()scene.swapTo("stat")end, nil,"lang"),
lang= newButton(150,610,160,100,C.lightGreen, 45,function() lang= newButton(150,610,160,100,C.lightGreen, 45,function()
setting.lang=setting.lang%#langName+1 setting.lang=setting.lang%#langName+1
swapLanguage(setting.lang) changeLanguage(setting.lang)
TEXT(text.lang,370,610,50,"appear",1.6) TEXT(text.lang,370,610,50,"appear",1.6)
end,nil,"quit"), end,nil,"quit"),
quit= newButton(590,460,200,160,C.lightGrey, 55,function()VOICE("bye")scene.swapTo("quit","slowFade")end,nil,"play"), quit= newButton(590,460,200,160,C.lightGrey, 55,function()VOICE("bye")scene.swapTo("quit","slowFade")end,nil,"play"),