Compare commits

...

31 Commits

Author SHA1 Message Date
MrZ_26
f0a118e714 Alpha V0.7.19 2020-02-04 19:34:43 +08:00
MrZ_26
3019f83999 Alpha V0.7.18 2020-02-04 19:34:16 +08:00
MrZ_26
438046f77f Alpha V0.7.17 2020-02-04 19:34:07 +08:00
MrZ_26
830f0ffbed Alpha V0.7.16 2020-02-04 19:33:52 +08:00
MrZ_26
849e5b586e Alpha V0.7.15 2020-02-04 19:33:41 +08:00
MrZ_26
f82e979f9c Alpha V0.7.14 2020-02-04 19:33:20 +08:00
MrZ_26
c9a3e3ce1b Alpha V0.7.13+ 2020-02-04 19:33:03 +08:00
MrZ_26
72dcb84662 Alpha V0.7.12 2020-02-04 19:32:38 +08:00
MrZ_26
4af2126254 Alpha V0.7.11 2020-02-04 19:32:26 +08:00
MrZ_26
42d7b1be94 Alpha V0.7.10 2020-02-04 19:32:10 +08:00
MrZ_26
a31474c43a Alpha V0.7.9 2020-02-04 19:31:45 +08:00
MrZ_26
75c7955bb5 Alpha V0.7.8 2020-02-04 19:31:31 +08:00
MrZ_26
c35152cf6e Alpha V0.7.7 2020-02-04 19:31:17 +08:00
MrZ_26
1b0ad009b0 Alpha V0.7.6 2020-02-04 19:30:59 +08:00
MrZ_26
e7c797bf14 Alpha V0.7.5 2020-02-04 19:30:42 +08:00
MrZ_26
e281634f72 Alpha V0.7.4 2020-02-04 19:30:30 +08:00
MrZ_26
7eea017c72 Alpha V0.7.3 2020-02-04 19:30:03 +08:00
MrZ_26
f0cca3092a Alpha V0.7.2 2020-02-04 19:29:42 +08:00
MrZ_26
1447893378 Alpha V0.7.1 2020-02-04 19:29:24 +08:00
MrZ_26
bdee7fba03 Alpha V0.6.8 2020-02-04 19:28:44 +08:00
MrZ_26
d8cbfa72ac Alpha V0.6.5 2020-02-04 19:28:33 +08:00
MrZ_26
31fd2c0e72 Alpha V0.6 2020-02-04 19:28:01 +08:00
MrZ_26
383254bce2 Alpha V0.5 2020-02-04 19:27:40 +08:00
MrZ_26
4c4bae854f Alpha V0.4 2020-02-04 19:27:13 +08:00
MrZ_26
dd7beca9ce Alpha V0.3+ 2020-02-04 19:26:49 +08:00
MrZ_26
30bbf1b1db Alpha V0.2 2020-02-04 19:26:27 +08:00
MrZ_26
a85da670c8 Alpha V0.1+ 2020-02-04 19:26:04 +08:00
MrZ_26
2436a2d0bf 0.190727α 2020-02-04 19:25:11 +08:00
MrZ_26
17094b988b 0.190726α 2020-02-04 19:24:43 +08:00
MrZ_26
f62613638e 0.190721α 2020-02-04 19:24:00 +08:00
MrZ_26
a9cf691247 0.190719α 2020-02-04 19:23:19 +08:00
141 changed files with 6122 additions and 1829 deletions

BIN
BGM/8-bit happiness.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
BGM/cruelty.ogg Normal file

Binary file not shown.

BIN
BGM/end.ogg Normal file

Binary file not shown.

BIN
BGM/final.ogg Normal file

Binary file not shown.

BIN
BGM/infinite.ogg Normal file

Binary file not shown.

BIN
BGM/newera.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
BGM/rockblock.ogg Normal file

Binary file not shown.

BIN
BGM/secret7th.ogg Normal file

Binary file not shown.

BIN
BGM/secret8th.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
SFX/blip_1.ogg Normal file

Binary file not shown.

BIN
SFX/blip_2.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
SFX/collect.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
SFX/emit.ogg Normal file

Binary file not shown.

BIN
SFX/fail.ogg Normal file

Binary file not shown.

BIN
SFX/lock.ogg Normal file

Binary file not shown.

BIN
SFX/ren_mega.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
SFX/swipe.ogg Normal file

Binary file not shown.

BIN
SFX/win.ogg Normal file

Binary file not shown.

75
SRS.lua
View File

@@ -1,75 +0,0 @@
blocks={
{[0]={{0,1,1},{1,1,0}},{{1,0},{1,1},{0,1}},{{0,1,1},{1,1,0}},{{1,0},{1,1},{0,1}}},--Z
{[0]={{1,1,0},{0,1,1}},{{0,1},{1,1},{1,0}},{{1,1,0},{0,1,1}},{{0,1},{1,1},{1,0}}},--S
{[0]={{1,1,1},{0,0,1}},{{1,1},{1,0},{1,0}},{{1,0,0},{1,1,1}},{{0,1},{0,1},{1,1}}},--L
{[0]={{1,1,1},{1,0,0}},{{1,0},{1,0},{1,1}},{{0,0,1},{1,1,1}},{{1,1},{0,1},{0,1}}},--J
{[0]={{1,1,1},{0,1,0}},{{1,0},{1,1},{1,0}},{{0,1,0},{1,1,1}},{{0,1},{1,1},{0,1}}},--T
{[0]={{1,1},{1,1}},{{1,1},{1,1}},{{1,1},{1,1}},{{1,1},{1,1}}},--O
{[0]={{1,1,1,1}},{{1},{1},{1},{1}},{{1,1,1,1}},{{1},{1},{1},{1}}},--I
}
do--SRS data
local K={0,0}
local D,E,L,S,R,Q,J,C={0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}
local B,I,P,F,M,T={-2,1},{-2,0},{-2,-1},{2,1},{2,0},{2,-1}
local X,Y,Z={-1,-2},{0,-2},{1,-2}
local F,G,N={-1,2},{0,2},{1,2}
scs={N,N,N,N,N,{1.5,1.5},{.5,2.5}}
SRS={
[1]={
[01]={K,J,C,Y,X,D},
[10]={K,L,S,G,N,R},
[12]={K,L,S,G,N},
[21]={K,J,C,Y,X},
[23]={K,L,E,Y,Z},
[32]={K,J,Q,G,F},
[30]={K,J,Q,G,F},
[03]={K,L,E,Y,Z},
[02]={K,L,J,R,D},
[20]={K,J,L,D,R},
[13]={K,D,R,J,L,G},
[31]={K,R,D,L,J,G},
},
[2]={
[01]={K,J,C,Y,X},
[10]={K,L,S,G,N},
[12]={K,L,S,G,N},
[21]={K,J,C,Y,X},
[23]={K,L,E,Y,Z},
[32]={K,J,Q,G,F},
[30]={K,J,Q,G,F,R},
[03]={K,L,E,Y,Z,D},
[02]={K,J,L,R,D},
[20]={K,L,J,D,R},
[13]={K,R,D,L,J,G},
[31]={K,D,R,J,L,G},
},
[5]={
[01]={K,J,C,Y,X},
[10]={K,L,S,G,N},
[12]={K,L,S,G,N},
[21]={K,J,C,Y,X},
[23]={K,L,E,Y,Z},
[32]={K,J,Q,G,F},
[30]={K,J,Q,G,F,R},
[03]={K,L,E,Y,Z,D},
[02]={K,J,L,R,D},
[20]={K,L,J,D,R},
[13]={K,R,D,L,J,G},
[31]={K,R,D,J,L,G},
},
[7]={
[01]={K,I,L,P,N},
[10]={K,M,J,F,X},
[12]={K,J,M,F,T},
[21]={K,L,I,Z,B},
[23]={K,M,J,F,X},
[32]={K,I,L,P,N},
[30]={K,L,I,Z,B},
[03]={K,J,M,F,T},
[02]={K,J,L,D},
[20]={K,L,J,R},
[13]={K,L},
[31]={K,J},
}
}SRS[3],SRS[4],SRS[6]=SRS[2],SRS[1],SRS[1]
end

BIN
VOICE/I_1.ogg Normal file

Binary file not shown.

BIN
VOICE/I_2.ogg Normal file

Binary file not shown.

BIN
VOICE/J_1.ogg Normal file

Binary file not shown.

BIN
VOICE/J_2.ogg Normal file

Binary file not shown.

BIN
VOICE/L_1.ogg Normal file

Binary file not shown.

BIN
VOICE/L_2.ogg Normal file

Binary file not shown.

BIN
VOICE/O_1.ogg Normal file

Binary file not shown.

BIN
VOICE/O_2.ogg Normal file

Binary file not shown.

BIN
VOICE/PC_1.ogg Normal file

Binary file not shown.

BIN
VOICE/S_1.ogg Normal file

Binary file not shown.

BIN
VOICE/S_2.ogg Normal file

Binary file not shown.

BIN
VOICE/T_1.ogg Normal file

Binary file not shown.

BIN
VOICE/T_2.ogg Normal file

Binary file not shown.

BIN
VOICE/Z_1.ogg Normal file

Binary file not shown.

BIN
VOICE/Z_2.ogg Normal file

Binary file not shown.

BIN
VOICE/b2b_1.ogg Normal file

Binary file not shown.

BIN
VOICE/b2b_2.ogg Normal file

Binary file not shown.

BIN
VOICE/b2b_3.ogg Normal file

Binary file not shown.

BIN
VOICE/b3b_1.ogg Normal file

Binary file not shown.

BIN
VOICE/double_1.ogg Normal file

Binary file not shown.

BIN
VOICE/double_2.ogg Normal file

Binary file not shown.

BIN
VOICE/double_3.ogg Normal file

Binary file not shown.

BIN
VOICE/lose_1.ogg Normal file

Binary file not shown.

BIN
VOICE/lose_2.ogg Normal file

Binary file not shown.

BIN
VOICE/lose_3.ogg Normal file

Binary file not shown.

BIN
VOICE/mini_1.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_1.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_11.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_12.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_13.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_2.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_21.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_22.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_3.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_31.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_4.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_o0.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_o1.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_o2.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_o3.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_o4.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_o5.ogg Normal file

Binary file not shown.

BIN
VOICE/single_1.ogg Normal file

Binary file not shown.

BIN
VOICE/single_2.ogg Normal file

Binary file not shown.

BIN
VOICE/single_3.ogg Normal file

Binary file not shown.

BIN
VOICE/spin-_1.ogg Normal file

Binary file not shown.

BIN
VOICE/spin-_2.ogg Normal file

Binary file not shown.

BIN
VOICE/spin_1.ogg Normal file

Binary file not shown.

BIN
VOICE/spin_2.ogg Normal file

Binary file not shown.

BIN
VOICE/spin_3.ogg Normal file

Binary file not shown.

BIN
VOICE/spin_4.ogg Normal file

Binary file not shown.

BIN
VOICE/spin_5.ogg Normal file

Binary file not shown.

BIN
VOICE/triple_1.ogg Normal file

Binary file not shown.

BIN
VOICE/triple_2.ogg Normal file

Binary file not shown.

BIN
VOICE/tts_1.ogg Normal file

Binary file not shown.

BIN
VOICE/win_1.ogg Normal file

Binary file not shown.

BIN
VOICE/win_2.ogg Normal file

Binary file not shown.

Binary file not shown.

177
ai.lua
View File

@@ -1,14 +1,14 @@
--[[
HighestBlock
HorizontalTransitions
VerticalTransitions
BlockedCells
Wells
FilledLines
TetrisShape
BlockedWells;
HighestBlock
HorizontalTransitions
VerticalTransitions
BlockedCells
Wells
FilledLines
4deepShape
BlockedWells;
]]
spinNeed={2,2,4,4,4,1,2}
dirCount={1,1,3,3,3,0,1}
spinOffset={
{1,0,0},--S
{1,0,0},--Z
@@ -18,120 +18,157 @@ spinOffset={
{0,0,0},--O
{2,0,1},--I
}for i=1,7 do spinOffset[i][0]=0 end
function ifoverlapAI(field,bk,x,y)
if x<1 or x+#bk[1]>11 or y<1 then return true end
if y>#field then return nil end
--[[
controlname:
1~5:mL,mR,rR,rL,rF,
6~10:hD,sD,H,A,R,
11~13:LL,RR,DD
]]
FCL={
[1]={
{{11},{11,2},{1},{},{2},{2,2},{12,1},{12}},
{{11,4},{11,3},{11,2,3},{4},{3},{2,3},{2,2,3},{12,4},{12,3}},
},
[3]={
{{11},{11,2},{1},{},{2},{2,2},{12,1},{12},},
{{3,11},{11,3},{11,2,3},{1,3},{3},{2,3},{2,2,3},{12,1,3},{12,3},},
{{11,5},{11,2,5},{1,5},{5},{2,5},{2,2,5},{12,1,5},{12,5},},
{{11,4},{11,2,4},{1,4},{4},{2,4},{2,2,4},{12,1,4},{12,4},{4,12},},
},
[6]={
{{11},{11,2},{1,1},{1},{},{2},{2,2},{12,1},{12},},
},
[7]={
{{11},{11,2},{1},{},{2},{12,1},{12},},
{{4,11},{11,4},{11,3},{1,4},{4},{3},{2,3},{12,4},{12,3},{3,12},},
},
}
FCL[2]=FCL[1]
FCL[4]=FCL[3]
FCL[5]=FCL[3]
clearScore={[0]=0,0,2,4,12}
function ifoverlapAI(f,bk,x,y)
if y<1 then return true end
if y>#f then return end
for i=1,#bk do for j=1,#bk[1]do
if field[y+i-1]and bk[i][j]>0 and field[y+i-1][x+j-1]>0 then return true end
if f[y+i-1]and bk[i][j]and f[y+i-1][x+j-1]>0 then return true end
end end
end
function resetField(f0,start)
while field[start]do
rem(field,start)
function resetField(f0,f,start)
::L::if f[start]then
removeRow(f,start)
goto L
end
for i=start,#f0 do
field[i]={}
f[i]=getNewRow(0)
for j=1,10 do
field[i][j]=f0[i][j]
f[i][j]=f0[i][j]
end
end
end
function getScore(field,cb,cx,cy)
function getScore(field,bn,cb,cx,cy)
local score=0
local highest=0
local height={}
local rough=0
local height=getNewRow(0)
local clear=0
local hole=0
for i=cy+#cb-1,cy,-1 do
local f=true
for j=1,10 do
if field[i][j]==0 then f=false;break end
end
if f then
rem(field,i)
clear=clear+1
if field[i][j]==0 then goto L end
end
removeRow(field,i)
clear=clear+1
::L::
end
if #field==0 then return 9e99 end--PC best
for x=1,10 do
local h=#field
while field[h][x]==0 and h>1 do
::L::if field[h][x]==0 and h>1 then
h=h-1
goto L
end
height[x]=h
if x>3 and x<8 and h>highest then highest=h end
if h>1 then
for h=h-1,1,-1 do
if field[h][x]==0 then hole=hole+1 end
if field[h][x]==0 then
hole=hole+1
if hole==5 then break end
end
end
end
end
local h1,mh1=0,0
for x=1,9 do
local dh=abs(height[x]-height[x])
if dh>1 then
rough=rough+dh^1.5
local dh=abs(height[x]-height[x+1])
if dh==1 then
h1=h1+1
if h1>mh1 then mh1=h1 end
else
h1=0
end
end
return
-highest*10
-rough*10
-cy*15
+clear^1.5*15
-hole*20
ins(freeRow,height)
score=
#field*20
-cy*35
-#cb*25
+clearScore[clear]*(8+#field)
-hole*50
if #field>6 then score=score-highest*5 end
if mh1>3 then score=score-40-mh1*30 end
return score
end
--controlname:mL,mR,rR,rL,rF,hD,sD,H,LL,RR
function AI_getControls(ctrl)
local field_org,cb,cx,cy={}
for i=1,#field do
field_org[i]={}
local Tfield={}--test field
local field_org=P.field
for i=1,#field_org do
Tfield[i]=getNewRow(0)
for j=1,10 do
field_org[i][j]=field[i][j]
Tfield[i][j]=field_org[i][j]
end
end
local best={x=1,dir=0,hold=false,score=-9e99}
for ifhold=0,1 do
local bn=ifhold==0 and bn or hn>0 and hn or nxt[1]
for dir=0,spinNeed[bn]-1 do--for each direction
cb=blocks[bn][dir]
for cx=1,11-#cb[1]do--for each positioon
cy=#field+1
while not ifoverlapAI(field,cb,cx,cy-1)do
for ifhold=0,P.gameEnv.hold and 1 or 0 do
local bn=ifhold==0 and P.cur.id or P.hold.id>0 and P.hold.id or P.next[1].id
for dir=0,dirCount[bn] do--each dir
local cb=blocks[bn][dir]
for cx=1,11-#cb[1]do--each pos
local cy=#Tfield+1
::L::if not ifoverlapAI(Tfield,cb,cx,cy-1)then
cy=cy-1
goto L
end--move to bottom
for i=1,#cb do
local y=cy+i-1
if not field[y]then field[y]={0,0,0,0,0,0,0,0,0,0}end
if not Tfield[y]then Tfield[y]=getNewRow(0)end
for j=1,#cb[1]do
if cb[i][j]~=0 then
field[y][cx+j-1]=1
if cb[i][j]then
Tfield[y][cx+j-1]=1
end
end
end--simulate lock
local score=getScore(field,cb,cx,cy)
local score=getScore(Tfield,bn,cb,cx,cy)
if score>best.score then
best={bn=bn,x=cx,dir=dir,hold=ifhold==1,score=score}
end
resetField(field_org,cy)
resetField(field_org,Tfield,cy)
end
end
end--ifHold
end
cb,cx,cy=cb_org,cx_org,cy_org
::L::
if #Tfield>0 then
removeRow(Tfield,1)
goto L
end--Release cache
if best.hold then
ins(ctrl,8)
end
if best.dir==1 then
ins(ctrl,3)
elseif best.dir==2 then
ins(ctrl,5)
elseif best.dir==3 then
ins(ctrl,4)
end--rotate
best.x=best.x-spinOffset[best.bn][best.dir]
local n=blockPos[best.bn]<best.x and 2 or 1
for i=1,abs(blockPos[best.bn]-best.x)do
ins(ctrl,n)
end--move
ins(ctrl,6)--harddrop
local l=FCL[best.bn][best.dir+1][best.x]
for i=1,#l do
ins(ctrl,l[i])
end
ins(ctrl,6)
end

View File

@@ -1,67 +0,0 @@
Buttons={
load={},
intro={},
main={
{x=500,y=300,w=320,h=60,rgb={1,0,0},alpha=0,t="Play",code=function()gotoScene("mode")end},
{x=500,y=380,w=320,h=60,rgb={0,0,1},alpha=0,t="Settings",code=function()gotoScene("setting")end},
{x=415,y=460,w=150,h=60,rgb={1,1,0},alpha=0,t="Help",code=function()gotoScene("help")end},
{x=585,y=460,w=150,h=60,rgb={0,1,1},alpha=0,t="Statistics",code=function()gotoScene("stat")end},
{x=500,y=540,w=320,h=60,rgb={.5,.5,.5},alpha=0,t="Quit",code=function()gotoScene("quit")end},
},
mode={
{x=350,y=200,w=220,h=70,rgb={1,1,1},alpha=0,t="Marathon",code=function()startGame("marathon")end},
{x=350,y=300,w=220,h=70,rgb={1,1,1},alpha=0,t="40 Lines",code=function()startGame("sprint")end},
{x=650,y=200,w=220,h=70,rgb={1,1,1},alpha=0,t="Zen",code=function()startGame("zen")end},
{x=650,y=300,w=220,h=70,rgb={1,1,1},alpha=0,t="Battle",code=function()startGame("battle")end},
{x=500,y=520,w=350,h=80,rgb={1,1,1},alpha=0,t="Back",code=function()gotoScene("main")end},
},
play={
{x=950,y=30,w=80,h=40,rgb={1,1,1},alpha=0,t="Back",code=function()gotoScene("mode")end},
},
setting={
{x=120,y=80,w=30,h=30,rgb={1,1,1},alpha=0,t="-",code=function()setting.das=(setting.das-1)%41 end,hold=true},
{x=280,y=80,w=30,h=30,rgb={1,1,1},alpha=0,t="+",code=function()setting.das=(setting.das+1)%41 end,hold=true},
{x=320,y=80,w=30,h=30,rgb={1,1,1},alpha=0,t="-",code=function()setting.arr=(setting.arr-1)%21 end,hold=true},
{x=480,y=80,w=30,h=30,rgb={1,1,1},alpha=0,t="+",code=function()setting.arr=(setting.arr+1)%21 end,hold=true},
{x=200,y=200,w=190,h=40,rgb={1,1,1},alpha=0,t=function()return setting.ghost and"Ghost ON"or"Ghost OFF"end,code=function()setting.ghost=not setting.ghost end},
{x=400,y=200,w=190,h=40,rgb={1,1,1},alpha=0,t=function()return setting.center and"Center ON"or"Center OFF"end,code=function()setting.center=not setting.center end},
{x=700,y=80,w=280,h=50,rgb={1,1,1},alpha=0,t=function()return setting.sfx and"Disable SFX"or"Enable SFX"end,code=function()setting.sfx=not setting.sfx end},
{x=700,y=150,w=280,h=50,rgb={1,1,1},alpha=0,t=function()return setting.bgm and"Disable BGM"or"Enable BGM"end,
code=function()
setting.bgm=not setting.bgm
if setting.bgm then BGM("blank")else BGM()end
end
},
{x=700,y=220,w=280,h=50,rgb={1,1,1},alpha=0,t=function()return setting.fullscreen and"Disable fullscreen"or"Enable fullscreen"end,
code=function()
setting.fullscreen=not setting.fullscreen
love.window.setFullscreen(setting.fullscreen)
end
},
{x=300,y=400,w=230,h=50,rgb={1,1,1},alpha=0,t="More settings",code=function()gotoScene("setting2")end},
{x=500,y=500,w=100,h=50,rgb={1,1,1},alpha=0,t="Back",code=function()back()end},
},
setting2={
{x=350,y=70,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[1]end,code=function()keysetting=1 end},
{x=350,y=120,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[2]end,code=function()keysetting=2 end},
{x=350,y=170,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[3]end,code=function()keysetting=3 end},
{x=350,y=220,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[4]end,code=function()keysetting=4 end},
{x=350,y=270,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[5]end,code=function()keysetting=5 end},
{x=350,y=320,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[6]end,code=function()keysetting=6 end},
{x=350,y=370,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[7]end,code=function()keysetting=7 end},
{x=350,y=420,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[8]end,code=function()keysetting=8 end},
{x=320,y=500,w=130,h=43,rgb={1,1,1},alpha=0,t="Reset",code=function()setting.key={"left","right","x","z","c","up","down","space","LEFT","RIGHT"}end},
{x=500,y=500,w=100,h=50,rgb={1,1,1},alpha=0,t="Back",code=function()back()end},
},
help={
{x=500,y=500,w=200,h=60,rgb={1,1,1},alpha=0,t="Back",code=function()back()end},
},
stat={
{x=500,y=500,w=200,h=60,rgb={1,1,1},alpha=0,t="Back",code=function()back()end},
},
sel=nil,--selected button Obj
pressing=0,--pressing time
}

794
call&sys.lua Normal file
View File

@@ -0,0 +1,794 @@
local gc,tm=love.graphics,love.timer
local ms,kb,tc=love.mouse,love.keyboard,love.touch
local wd=love.window
local setFont=setFont
local Timer=tm.getTime
local scr=scr
local xOy=love.math.newTransform()
local focus=true
local mx,my,mouseShow=-20,-20,false
local touching=nil--1st touching ID
local sceneInit={
load=function()
loading=1--Loading mode
loadnum=1--Loading counter
loadprogress=0--Loading bar(0~1)
loadTip=text.tips[rnd(#text.tips)]
end,
intro=function()
count=0
BGM("blank")
end,
main=function()
collectgarbage()
end,
mode=function()
curBG="none"
saveData()
modeSel=modeSel or 1
levelSel=levelSel or 3
BGM("blank")
end,
custom=function()
optSel=optSel or 1
curBG="matrix"
BGM("blank")
end,
draw=function()
curBG="none"
kb.setKeyRepeat(true)
clearSureTime=0
pen,sx,sy=1,1,1
end,
play=function()
restartCount=0
if needResetGameData then
resetGameData()
needResetGameData=nil
end
end,
pause=function()
end,
setting=function()
curBG="none"
end,
setting2=function()
curBoard=1
keyboardSet=1
joystickSet=1
keyboardSetting=false
joystickSetting=false
end,--Control settings
setting3=function()
curBG="game1"
defaultSel=1
sel=nil
snapLevel=1
end,--Touch setting
help=function()
end,
stat=function()
end,
quit=function()
love.event.quit()
end,
}
BGblockList={}for i=1,16 do BGblockList[i]={v=0}end
local BGblock={tm=150,next=7,ct=0}
local function getNewBlock()
BGblock.ct=BGblock.ct+1
if BGblock.ct==17 then BGblock.ct=1 end
local t=BGblockList[BGblock.ct]
t.bn,t.size=BGblock.next,2+3*rnd()
t.b=blocks[t.bn][rnd(0,3)]
t.x=rnd(-#t.b[1]*t.size*30+100,1180)
t.y=-#t.b*30*t.size
t.v=t.size*(1+rnd())
BGblock.next=BGblock.next%7+1
return t
end
function onVirtualkey(x,y)
local d2,nearest,distance
for K=1,#virtualkey do
local b=virtualkey[K]
d2=(x-b[1])^2+(y-b[2])^2
if d2<b[3]then
if not nearest or d2<distance then
nearest,distance=K,d2
end
end
end
return nearest
end
function buttonControl_key(i)
if i=="up"or i=="down"or i=="left"or i=="right"then
if Buttons.sel then
Buttons.sel=Buttons[scene][Buttons.sel[i]]or Buttons.sel
else
Buttons.sel=select(2,next(Buttons[scene]))
end
elseif i=="space"or i=="return"then
if not sceneSwaping and Buttons.sel then
Buttons.sel.alpha=1
Buttons.sel.code()
SFX("button")
VOICE("nya")
end
end
end
function buttonControl_gamepad(i)
if i=="dpup"or i=="dpdown"or i=="dpleft"or i=="dpright"then
if Buttons.sel then
Buttons.sel=Buttons[scene][Buttons.sel[i=="dpup"and"up"or i=="dpdown"and"down"or i=="dpleft"and"left"or"right"]]or Buttons.sel
else
Buttons.sel=select(2,next(Buttons[scene]))
end
elseif i=="start"then
if not sceneSwaping and Buttons.sel then
Buttons.sel.alpha=1
Buttons.sel.code()
SFX("button")
VOICE("nya")
end
end
end
mouseDown={}
function mouseDown.intro(x,y,k)
if k==2 then
back()
else
gotoScene("main")
end
end
function mouseDown.draw(x,y,k)
mouseMove.draw(x,y)
end
function mouseDown.setting3(x,y,k)
if k==2 then back()end
for K=1,#virtualkey do
local b=virtualkey[K]
if (x-b[1])^2+(y-b[2])^2<b[3]then
sel=K
end
end
end
mouseMove={}
function mouseMove.draw(x,y,dx,dy)
sx,sy=int((x-200)/30)+1,20-int((y-60)/30)
if sx<1 or sx>10 then sx=nil end
if sy<1 or sy>20 then sy=nil end
if sx and sy and ms.isDown(1,2,3)then
preField[sy][sx]=ms.isDown(1)and pen or ms.isDown(2)and 0 or -1
end
end
function mouseMove.setting3(x,y,dx,dy)
if sel and ms.isDown(1)then
local b=virtualkey[sel]
b[1],b[2]=b[1]+dx,b[2]+dy
end
end
mouseUp={}
function mouseUp.setting3(x,y,k)
if sel then
local b=virtualkey[sel]
local k=snapLevelValue[snapLevel]
b[1],b[2]=int(b[1]/k+.5)*k,int(b[2]/k+.5)*k
end
end
wheelmoved={}
function wheelmoved.draw(x,y)
if y<0 then
pen=pen+1
if pen==8 then pen=9 elseif pen==14 then pen=0 end
else
pen=pen-1
if pen==8 then pen=7 elseif pen==-1 then pen=13 end
end
end
function wheelmoved.mode(x,y)
modeSel=min(max(modeSel+(y>0 and -1 or 1),1),#modeID)
levelSel=ceil(#modeLevel[modeID[modeSel]]*.5)
end
touchDown={}
function touchDown.intro(id,x,y)
gotoScene("main")
end
function touchDown.draw(id,x,y)
end
function touchDown.setting3(id,x,y)
for K=1,#virtualkey do
local b=virtualkey[K]
if (x-b[1])^2+(y-b[2])^2<b[3]then
sel=K
end
end
end
function touchDown.play(id,x,y)
if setting.virtualkeySwitch then
local t=onVirtualkey(x,y)
if t then
pressKey(t,players[1])
end
end
end
touchUp={}
function touchUp.setting3(id,x,y)
if sel then
x,y=xOy:inverseTransformPoint(x,y)
if sel then
local b=virtualkey[sel]
local k=snapLevelValue[snapLevel]
b[1],b[2]=int(b[1]/k+.5)*k,int(b[2]/k+.5)*k
end
end
end
function touchUp.play(id,x,y)
if setting.virtualkeySwitch then
local t=onVirtualkey(x,y)
if t then
releaseKey(t,players[1])
end
end
end
touchMove={}
function touchMove.setting3(id,x,y,dx,dy)
if sel then
local b=virtualkey[sel]
b[1],b[2]=b[1]+dx,b[2]+dy
end
end
function touchMove.draw(id,x,y,dx,dy)
sx,sy=int((x-200)/30)+1,20-int((y-60)/30)
if sx<1 or sx>10 then sx=nil end
if sy<1 or sy>20 then sy=nil end
if sx and sy then
preField[sy][sx]=pen
end
end
function touchMove.play(id,x,y,dx,dy)
if setting.virtualkeySwitch then
local l=tc.getTouches()
for n=1,#virtualkey do
local b=virtualkey[n]
for i=1,#l do
local x,y=xOy:inverseTransformPoint(tc.getPosition(l[i]))
if(x-b[1])^2+(y-b[2])^2<=b[3]then goto L end
end
releaseKey(n,players[1])
::L::
end
end
end
keyDown={}
function keyDown.intro(key)
if key=="escape"then
back()
else
gotoScene("main")
end
end
function keyDown.mode(key)
if key=="down"then
if modeSel<#modeID then
modeSel=modeSel+1
levelSel=ceil(#modeLevel[modeID[modeSel]]*.5)
end
elseif key=="up"then
if modeSel>1 then
modeSel=modeSel-1
levelSel=ceil(#modeLevel[modeID[modeSel]]*.5)
end
elseif key=="left"then
if levelSel>1 then
levelSel=levelSel-1
end
elseif key=="right"then
if levelSel<#modeLevel[modeID[modeSel]]then
levelSel=levelSel+1
end
elseif key=="return"then
loadGame(modeSel,levelSel)
elseif key=="c"then
gotoScene("custom")
elseif key=="escape"then
back()
end
end
function keyDown.custom(key)
if key=="left"then
local k=customID[optSel]
customSel[k]=(customSel[k]-2)%#customRange[k]+1
elseif key=="right"then
local k=customID[optSel]
customSel[k]=customSel[k]%#customRange[k]+1
elseif key=="down"then
optSel=optSel%#customID+1
elseif key=="up"then
optSel=(optSel-2)%#customID+1
elseif key=="d"then
gotoScene("draw")
elseif key=="return"then
loadGame(0,1)
elseif key=="space"then
loadGame(0,2)
elseif key=="escape"then
back()
end
end
function keyDown.draw(key)
if key=="delete"then
Buttons.draw.clear.code()
elseif key=="up"or key=="down"or key=="left"or key=="right"then
if not sx then sx=1 end
if not sy then sy=1 end
if key=="up"and sy<20 then sy=sy+1
elseif key=="down"and sy>1 then sy=sy-1
elseif key=="left"and sx>1 then sx=sx-1
elseif key=="right"and sx<10 then sx=sx+1
end
if kb.isDown("space")then
preField[sy][sx]=pen
end
elseif key=="space"then
if sx and sy then
preField[sy][sx]=pen
end
elseif key=="tab"then
pen=-1
elseif key=="backspace"then
pen=0
elseif key=="escape"then
back()
else
pen=find("123qwea#sdzxc",key)or pen
end
end
function keyDown.setting2(key)
if key=="escape"then
if keyboardSetting then
keyboardSetting=false
else
back()
end
elseif keyboardSetting then
for l=1,8 do
for y=1,13 do
if setting.keyMap[l][y]==key then
setting.keyMap[l][y]=""
end
end
end
setting.keyMap[curBoard][keyboardSet]=key
keyboardSetting=false
elseif key=="return"then
keyboardSetting=true
elseif key=="up"then
keyboardSet=max(keyboardSet-1,1)
elseif key=="down"then
keyboardSet=min(keyboardSet+1,13)
elseif key=="left"then
curBoard=max(curBoard-1,1)
elseif key=="right"then
curBoard=min(curBoard+1,8)
end
end
function keyDown.play(key)
if key=="escape"and not sceneSwaping then
return(frame<180 and back or pauseGame)()
end
local m=setting.keyMap
for p=1,human do
for k=1,12 do
if key==m[2*p-1][k]or key==m[2*p][k]then
pressKey(k,players[p])
return
end
end
end
end
function keyDown.pause(key)
if key=="escape"then
back()
elseif key=="return"or key=="space"then
resumeGame()
end
end
keyUp={}
function keyUp.play(key)
local m=setting.keyMap
for p=1,human do
for k=1,12 do
if key==m[2*p-1][k]or key==m[2*p][k]then
releaseKey(k,players[p])
return
end
end
end
end
gamepadDown={}
function gamepadDown.intro(key)
if key=="back"then
back()
else
gotoScene("main")
end
end
function gamepadDown.mode(key)
if key=="dpdown"then
if modeSel<#modeID then modeSel=modeSel+1 end
elseif key=="dpup"then
if modeSel>1 then modeSel=modeSel-1 end
elseif key=="start"then
loadGame(modeSel,levelSel)
elseif key=="back"then
back()
end
end
function gamepadDown.setting2(key)
if key=="back"then
if joystickSetting then
joystickSetting=false
else
back()
end
elseif joystickSetting then
for l=9,16 do
for y=1,12 do
if setting.keyMap[l][y]==key then
setting.keyMap[l][y]=""
end
end
end
setting.keyMap[8+curBoard][joystickSet]=key
joystickSetting=false
elseif key=="start"then
joystickSetting=true
elseif key=="up"then
joystickSet=max(joystickSet-1,1)
elseif key=="down"then
joystickSet=min(joystickSet+1,12)
elseif key=="left"then
curBoard=max(curBoard-1,1)
elseif key=="right"then
curBoard=min(curBoard+1,8)
end
end
function gamepadDown.play(key)
if key=="back"then back()return end
local m=setting.keyMap
for p=1,human do
for k=1,12 do
if key==m[2*p+7][k]or key==m[2*p+8][k]then
pressKey(k,players[p])
return
end
end
end
end
gamepadUp={}
function gamepadUp.play(key)
local m=setting.keyMap
for p=1,human do
for k=1,12 do
if key==m[2*p+7][k]or key==m[2*p+8][k]then
releaseKey(k,players[p])
return
end
end
end
end
function love.mousepressed(x,y,k,t,num)
if t then return end
mouseShow=true
mx,my=xOy:inverseTransformPoint(x,y)
if mouseDown[scene]then
mouseDown[scene](mx,my,k)
elseif k==2 then
back()
end
if k==1 then
if not sceneSwaping and Buttons.sel then
local B=Buttons.sel
B.code()
B.alpha=1
Buttons.sel=nil
love.mousemoved(x,y,0,0)
SFX("button")
VOICE("nya")
VIB(1)
end
end
end
function love.mousemoved(x,y,dx,dy,t)
if t then return end
mouseShow=true
mx,my=xOy:inverseTransformPoint(x,y)
Buttons.sel=nil
if mouseMove[scene]then
mouseMove[scene](mx,my,dx/scr.k,dy/scr.k)
end
for _,B in next,Buttons[scene]do
if not(B.hide and B.hide())then
if abs(mx-B.x)<B.w*.5 and abs(my-B.y)<B.h*.5 then
Buttons.sel=B
return
end
end
end
end
function love.mousereleased(x,y,k,t,num)
if t then return end
mx,my=xOy:inverseTransformPoint(x,y)
if mouseUp[scene]then
mouseUp[scene](mx,my,k)
end
end
function love.wheelmoved(x,y)
if wheelmoved[scene]then wheelmoved[scene](x,y)end
end
function love.touchpressed(id,x,y)
mouseShow=false
if not touching then
touching=id
love.touchmoved(id,x,y,0,0)
end
if touchDown[scene]then
touchDown[scene](id,xOy:inverseTransformPoint(x,y))
end
end
function love.touchreleased(id,x,y)
if id==touching then
touching=nil
if Buttons.sel then
local B=Buttons.sel
B.code()
B.alpha=1
Buttons.sel=nil
SFX("button")
VOICE("nya")
VIB(1)
end
Buttons.sel=nil
end
if touchUp[scene]then
touchUp[scene](id,xOy:inverseTransformPoint(x,y))
end
end
function love.touchmoved(id,x,y,dx,dy)
x,y=xOy:inverseTransformPoint(x,y)
if touchMove[scene]then
touchMove[scene](id,x,y,dx/scr.k,dy/scr.k)
end
Buttons.sel=nil
for _,B in next,Buttons[scene]do
if not(B.hide and B.hide())then
if abs(x-B.x)<B.w*.5 and abs(y-B.y)<B.h*.5 then
Buttons.sel=B
return
end
end
end
if not Buttons.sel then
touching=nil
end
end
function love.keypressed(i)
mouseShow=false
if i=="f8"then devMode=not devMode end
if devMode then
if i=="k"then
P=players.alive[rnd(#players.alive)]
P.lastRecv=players[1]
Event.lose()
--Test code here
elseif i=="q"then
local B=Buttons.sel if B then print(format("x=%d,y=%d,w=%d,h=%d",B.x,B.y,B.w,B.h))end
elseif Buttons.sel then
local B=Buttons.sel
if i=="left"then B.x=B.x-10
elseif i=="right"then B.x=B.x+10
elseif i=="up"then B.y=B.y-10
elseif i=="down"then B.y=B.y+10
elseif i==","then B.w=B.w-10
elseif i=="."then B.w=B.w+10
elseif i=="/"then B.h=B.h-10
elseif i=="'"then B.h=B.h+10
end
end
else
if keyDown[scene]then keyDown[scene](i)
elseif i=="escape"or i=="back"then back()
else buttonControl_key(i)
end
end
end
function love.keyreleased(i)
if keyUp[scene]then keyUp[scene](i)
end
end
function love.gamepadpressed(joystick,i)
mouseShow=false
if gamepadDown[scene]then return gamepadDown[scene](i)
elseif i=="back"then back()
else buttonControl_gamepad(i)
end
end
function love.gamepadreleased(joystick,i)
if gamepadUp[scene]then gamepadUp[scene](i)
end
end
--[[
function love.joystickpressed(js,k)end
function love.joystickaxis(js,axis,valend
function love.joystickhat(js,hat,dirend
function love.sendData(data)end
function love.receiveData(id,data)end
]]
function love.lowmemory()
collectgarbage()
end
function love.resize(w,h)
scr.w,scr.h,scr.r=w,h,h/w
if scr.r>=.5625 then
scr.k=w/1280
scr.x,scr.y=0,(h-w*9/16)*.5
else
scr.k=h/720
scr.x,scr.y=(w-h*16/9)*.5,0
end
gc.origin()
xOy=xOy:setTransformation(w*.5,h*.5,nil,scr.k,nil,640,360)
gc.replaceTransform(xOy)
collectgarbage()
end
function love.focus(f)
if not f and wd.isMinimized()and scene=="play"then pauseGame()end
end
function love.update(dt)
-- if players then for k,v in pairs(players[1])do
-- if rawget(_G,k)and k~="next"and k~="hold"and k~="stat"then print(k,_G[v])end
-- end end--check player data flew(debugging)
for i=#BGblock,1,-1 do
BGblock[i].y=BGblock[i].y+BGblock[i].v
if BGblock[i].y>720 then rem(BGblock,i)end
end
if setting.bgblock then
BGblock.tm=BGblock.tm-1
if BGblock.tm==0 then
ins(BGblock,getNewBlock())
BGblock.tm=rnd(20,30)
end
end
if sceneSwaping then
sceneSwaping.time=sceneSwaping.time-1
if sceneSwaping.time==sceneSwaping.mid then
for k,B in next,Buttons[scene]do
B.alpha=0
end--Reset buttons' alpha
Buttons.sel=nil
scene=sceneSwaping.tar
sceneInit[scene]()
elseif sceneSwaping.time==0 then
sceneSwaping=nil
end
end
if Tmr[scene]then
Tmr[scene](dt)
end
for i=#Task,1,-1 do
Task[i]:update()
end
if voicePlaying[1]then
if not voicePlaying[1]:isPlaying()then
rem(voicePlaying,1)
end
if voicePlaying[1] and not voicePlaying[1]:isPlaying()then voicePlaying[1]:play()end
end
for k,B in next,Buttons[scene]do
local t=B==Buttons.sel and .4 or 0
B.alpha=abs(B.alpha-t)>.02 and(B.alpha+(B.alpha<t and .02 or -.02))or t
if B.alpha>t then B.alpha=B.alpha-.02 elseif B.alpha<t then B.alpha=B.alpha+.02 end
end--update Buttons
end
local scs={1,2,1,2,1,2,1,2,1,2,1.5,1.5,.5,2.5}
function love.draw()
gc.discard()--SPEED UPUPUP!
Pnt.BG[setting.bg and curBG or"grey"]()
gc.setColor(1,1,1,.2)
for n=1,#BGblock do
local b,img=BGblock[n].b,blockSkin[BGblock[n].bn]
local size=BGblock[n].size
for i=1,#b do for j=1,#b[1]do
if b[i][j]then
gc.draw(img,BGblock[n].x+(j-1)*30*size,BGblock[n].y+(i-1)*30*size,nil,size)
end
end end
end
if Pnt[scene]then Pnt[scene]()end
for k,B in next,Buttons[scene]do
if not(B.hide and B.hide())then
local C=B.rgb or color.white
gc.setColor(C[1],C[2],C[3],B.alpha)
gc.rectangle("fill",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h)
gc.setColor(C)
gc.setLineWidth(3)gc.rectangle("line",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h,4)
gc.setColor(C[1],C[2],C[3],.3)
gc.setLineWidth(5)gc.rectangle("line",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h,4)
local t=B.t
local y0
if t then
if type(t)=="function"then t=t()end
setFont(B.f or 40)
y0=B.y-currentFont*.64
gc.printf(t,B.x-201,y0+2,400,"center")
gc.printf(t,B.x-199,y0+2,400,"center")
gc.printf(t,B.x-201,y0,400,"center")
gc.printf(t,B.x-199,y0,400,"center")
gc.setColor(C)
mStr(t,B.x,y0+1)
end
end
end--Draw buttons
if mouseShow and not touching then
local r=Timer()*.5
gc.setColor(1,1,1,min(1-abs(1-r%1*2),.3))
r=int(r)%7+1
gc.draw(mouseBlock[r],mx,my,Timer()%pi*4,20,20,scs[2*r]-.5,#blocks[r][0]-scs[2*r-1]+.5)
gc.setColor(1,1,1,.5)gc.circle("fill",mx,my,5)
gc.setColor(1,1,1)gc.circle("fill",mx,my,3)
end--Awesome mouse!
if sceneSwaping then sceneSwaping.draw()end--Swaping animation
if scr.r~=.5625 then
gc.setColor(0,0,0)
if scr.r>.5625 then
local d=(scr.h-scr.w*9/16)*.5/scr.k
gc.rectangle("fill",0,0,1280,-d)
gc.rectangle("fill",0,720,1280,d)
else--high
local d=(scr.w-scr.h*16/9)*.5/scr.k
gc.rectangle("fill",0,0,-d,720)
gc.rectangle("fill",1280,0,d,720)
end--wide
end--Black side
setFont(20)gc.setColor(1,1,1)
gc.print(tm.getFPS(),5,700)
if devMode then
gc.print(mx.." "..my,5,640)
gc.print(#freeRow or 0,5,660)
gc.print(gcinfo(),5,680)
end
end
function love.run()
local frameT=Timer()
local readyDrawFrame=0
local PUMP,POLL=love.event.pump,love.event.poll
love.resize(gc.getWidth(),gc.getHeight())
scene="load"sceneInit.load()--System Launch
return function()
PUMP()
for N,a,b,c,d,e in POLL()do
if N=="quit"then return 0
elseif love[N]then love[N](a,b,c,d,e)end
end
tm.step()
love.update(tm.getDelta())
readyDrawFrame=readyDrawFrame+setting.frameMul
if readyDrawFrame>=100 then
readyDrawFrame=readyDrawFrame-100
love.draw()
gc.present()
end
::L::if Timer()-frameT<1/60 then goto L end
frameT=Timer()
tm.sleep(.001)
end
end

BIN
cb.ttf

Binary file not shown.

37
class.lua Normal file
View File

@@ -0,0 +1,37 @@
Task={}
metatable_task={__index=Task}
function newTask(code,P,data)
local obj={
code=code,
P=P,
data=data,
}
setmetatable(obj,metatable_task)
ins(Task,obj)
end
function clearTask(opt)
if opt=="all"then
while Task[1]do
rem(Task,i)
end
elseif opt=="play"then
for i=#Task,1,-1 do
if Task[i].P then
rem(Task,i)
end
end
else--Player table
for i=#Task,1,-1 do
if Task[i].P==P then
rem(Task,i)
end
end
end
end
function Task:update()
if(not self.P or self.P and scene=="play")and self:code(self.P,self.data)then
for i=#Task,1,-1 do
if Task[i]==self then rem(Task,i)return end
end--Destroy
end
end

View File

@@ -1,49 +1,48 @@
function love.conf(t)
local X=nil
t.identity="Techmino"--The name of the save directory (string)
t.appendidentity=X--Search files in source directory before save directory (boolean)
t.version="11.2"
t.console=X
t.accelerometerjoystick=X--Enable the accelerometer on iOS and Android by exposing it as a Joystick (boolean)
t.externalstorage=X
t.gammacorrect=true
-- t.audio.mixwithsystem=true--Keep background music playing when opening LOVE (boolean, iOS and Android only)
local X=nil
t.identity="Techmino"--Save directory name
t.appendidentity=X--If search files in source before save directory
t.version="11.1"
t.console=X
t.accelerometerjoystick=X--If exposing accelerometer on iOS and Android as a Joystick
t.gammacorrect=X
t.audio.mixwithsystem=true--Switch on to keep sysBGM
t.window.title="Techmino"
t.window.icon="/image/icon.png"
t.window.width=1000
t.window.height=600
t.window.borderless=X
t.window.resizable=true
t.window.minwidth=500
t.window.minheight=300
t.window.fullscreen=X
t.window.fullscreentype="desktop"--Choose between "desktop" fullscreen or "exclusive" fullscreen mode (string)
t.window.vsync=1
t.window.msaa=0--The number of samples to use with multi-sampled antialiasing (number)
t.window.depth=nil--The number of bits per sample in the depth buffer
t.window.stencil=nil--The number of bits per sample in the stencil buffer
t.window.display=1--Index of the monitor to show the window in (number)
t.window.highdpi=X--Enable high-dpi mode for the window on a Retina display (boolean)
t.window.x=nil
t.window.y=nil
t.modules.audio=true
t.modules.data=true
t.modules.event=true
t.modules.font=true
t.modules.graphics=true
t.modules.image=true
t.modules.joystick=X
t.modules.keyboard=true
t.modules.math=true
t.modules.mouse=true
t.modules.physics=X
t.modules.sound=true
t.modules.system=true
t.modules.thread=X
t.modules.timer=true
t.modules.touch=X
t.modules.video=X
t.modules.window=true
local W=t.window
W.title="Techmino V0.7.19"
W.icon="/image/icon.png"
W.width,W.height=1280,720
W.minwidth,W.minheight=640,360
W.borderless=X
W.resizable=true
W.fullscreentype="desktop"--Choose between "desktop" fullscreen or "exclusive" fullscreen mode (string)
W.fullscreen=X
W.vsync=0--0→∞fps
W.msaa=X--The number of samples to use with multi-sampled antialiasing (number)
W.depth=X--Bits per sample in the depth buffer
W.stencil=1--The number of bits per sample in the stencil buffer
W.display=1--Monitor ID
W.highdpi=X--Enable high-dpi mode for the window on a Retina display (boolean)
W.x,W.y=nil
local M=t.modules
M.window=true
M.system=true
M.audio=true
M.data=true
M.event=true
M.font=true
M.graphics=true
M.image=true
M.joystick=true
M.keyboard=true
M.math=true
M.mouse=true
M.sound=true
M.timer=true
M.touch=true
M.physics=X
M.thread=X
M.video=X
end

View File

@@ -1,57 +0,0 @@
function love.mousemoved(x,y)
x,y=mouseConvert(x,y)
mx,my=x,y
Buttons.sel=nil
for i=1,#Buttons[scene]do
local B=Buttons[scene][i]
if not(B.hide and B.hide())then
if abs(x-B.x)<B.w*.5 and abs(y-B.y)<B.h*.5 then
Buttons.sel=B
return nil
end
end
end
if not Buttons.sel then Buttons.pressing=0 end
end
function love.mousepressed(x,y,k)
x,y=mouseConvert(x,y)
if mouseDown[scene]then mouseDown[scene](x,y,k)end
if k==1 then
if not sceneSwaping and Buttons.sel then
local B=Buttons.sel
if B.hold then Buttons.pressing=max(Buttons.pressing,1)end
B.code()
B.alpha=1
Buttons.sel=nil
love.mousemoved(mx,my)
SFX("button")
end
elseif k==3 then
back()
end
end
function love.mousereleased(x,y,k)
Buttons.pressing=0
end
--[[
function love.touchpressed(id,x,y)
local i=love.touch.getTouches
if #i==1 then
love.mousemoved(x,y)
end
end
function love.touchrealeased(id,x,y)
love.mousepressed(x,y,1)
end]]
function love.keypressed(i)
if keyDown[scene]then keyDown[scene](i)
elseif i=="escape"then back()
end
end
function love.keyreleased(i)
if keyUp[scene]then keyUp[scene](i)
end
end
function love.wheelmoved(x,y)
if wheelmoved[scene]then wheelmoved[scene](x,y)end
end

1163
dataList.lua Normal file

File diff suppressed because it is too large Load Diff

BIN
font.ttf Normal file

Binary file not shown.

View File

@@ -1,55 +0,0 @@
game={}
function game.load()
scene="load"
curBG="none"
mouseShow=true
loading=1--Loading mode
loadnum=1--Loading counter
loadprogress=0--Loading bar
end
function game.intro()
scene="intro"
curBG="none"
mouseShow=true
end
function game.main()
scene="main"
curBG="none"
mouseShow=true
BGM("blank")
end
function game.mode()
scene="mode"
curBG="none"
mouseShow=true
BGM("blank")
end
function game.play()
scene="play"
--curBG="game1"
SFX("ready")
end
function game.setting()
scene="setting"
curBG="none"
BGM("blank")
end
function game.setting2()
scene="setting2"
curBG="none"
keyssetting=nil
BGM("blank")
end
function game.help()
scene="help"
curBG="none"
BGM("blank")
end
function game.stat()
scene="stat"
curBG="none"
BGM("blank")
end
function game.quit()
love.event.quit()
end

1199
gamefunc.lua Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

BIN
image/BG/bg1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Some files were not shown because too many files have changed in this diff Show More