1032 lines
26 KiB
Lua
1032 lines
26 KiB
Lua
--[["four name"
|
|
Techrash
|
|
Zestris
|
|
x Quadruple
|
|
x Tequeno
|
|
x Techzino
|
|
x Tectris
|
|
Techris
|
|
|
|
Techmino
|
|
Tequéno
|
|
]]
|
|
PCbase={
|
|
{3,3,3,0,0,0,0,0,2,2},
|
|
{3,6,6,0,0,0,0,2,2,5},
|
|
{4,6,6,0,0,0,1,1,5,5},
|
|
{4,4,4,0,0,0,0,1,1,5},
|
|
{1,1,0,0,0,0,0,3,3,3},
|
|
{5,1,1,0,0,0,0,6,6,3},
|
|
{5,5,2,2,0,0,0,6,6,4},
|
|
{5,2,2,0,0,0,0,4,4,4},
|
|
}
|
|
PClist={--ZSLJTOI
|
|
{7,7,4,5},{7,7,6,4},{7,7,2,4},{7,7,1,3},{7,7,5,6},{7,7,5,2},{7,7,5,4},{7,7,5,3},
|
|
{7,4,1,2},{7,3,5,7},{7,5,4,3},{7,5,1,2},{7,1,4,2},{7,4,2,5},{7,6,4,5},{7,5,4,2},
|
|
{7,5,6,4},{7,5,3,6},{7,2,5,6},{7,2,6,4},{7,2,1,3},{7,5,2,7},{7,5,7,2},{7,5,2,3},
|
|
{7,5,3,2},{7,6,5,4},{7,3,1,5},{7,3,2,5},{7,4,1,5},{7,4,5,2},{7,7,3,6},{7,3,7,6},
|
|
{7,3,6,2},{7,3,7,1},{7,6,4,2},{3,2,7,6},{3,2,6,7},{7,7,4,5},{7,5,3,4},{7,3,6,5},
|
|
{7,3,2,5},{7,4,6,5},{7,5,2,3},{7,3,5,7},{7,3,2,5},{7,3,5,1},{7,5,2,3},{3,6,2,5},
|
|
{3,1,2,5},{3,1,1,5},{3,1,5,2},{3,1,5,1},{3,5,1,2},{4,5,3,2},{4,2,6,5},{6,5,3,2},
|
|
{1,4,2,5},{1,5,3,6},{5,2,6,3},{5,2,1,3},{5,2,7,4},{2,4,1,5},{2,4,5,1},{2,1,4,5},
|
|
{2,5,4,3},{2,5,6,7},{7,5,4,2},{4,5,3,5},
|
|
}
|
|
color={
|
|
red={1,0,0},
|
|
green={0,1,0},
|
|
blue={.2,.2,1},
|
|
yellow={1,1,0},
|
|
purple={1,0,1},
|
|
cyan={0,1,1},
|
|
grey={.6,.6,.6},
|
|
|
|
lightRed={1,.5,.5},
|
|
lightGreen={.5,1,.5},
|
|
lightBlue={.6,.6,1},
|
|
lightYellow={1,1,.5},
|
|
lightPurple={1,.5,1},
|
|
lightCyan={.5,1,1},
|
|
lightGrey={.8,.8,.8},
|
|
|
|
darkRed={.6,0,0},
|
|
darkGreen={0,.6,0},
|
|
darkBlue={0,0,.6},
|
|
darkYellow={.6,.6,0},
|
|
darkPurple={.6,0,.6},
|
|
darkCyan={0,.6,.6},
|
|
darkGrey={.3,.3,.3},
|
|
|
|
white={1,1,1},
|
|
orange={1,.6,0},
|
|
}
|
|
attackColor={
|
|
{color.red,color.yellow},
|
|
{color.red,color.purple},
|
|
{color.blue,color.white},
|
|
animate={
|
|
function(t)
|
|
gc.setColor(1,t,0)
|
|
end,
|
|
function(t)
|
|
gc.setColor(1,.5+t*.5,.5+t*.5)
|
|
end,
|
|
function(t)
|
|
gc.setColor(.2+t*.8,.2+t*.8,1)
|
|
end,
|
|
}--3 animation-colorsets of attack buffer bar
|
|
}
|
|
frameColor={
|
|
[0]=color.white,
|
|
color.green,
|
|
color.blue,
|
|
color.purple,
|
|
color.orange,
|
|
}
|
|
blockName={"Z","S","L","J","T","O","I"}
|
|
blockColor={
|
|
color.red,
|
|
color.green,
|
|
color.orange,
|
|
color.blue,
|
|
color.purple,
|
|
color.yellow,
|
|
color.cyan,
|
|
}
|
|
clearName={"Single","Double","Triple"}
|
|
spinName={[0]={}}
|
|
for j=1,7 do
|
|
spinName[0][j]=blockName[j].." spin"
|
|
end
|
|
for i=1,3 do
|
|
spinName[i]={}
|
|
for j=1,7 do
|
|
spinName[i][j]=blockName[j].." spin "..clearName[i]
|
|
end
|
|
end
|
|
|
|
miniTitle_rect={
|
|
{2,0,5,1},{4,1,1,6},
|
|
{9,0,4,1},{9,3,4,1},{9,6,4,1},{8,0,1,7},
|
|
{15,0,3,1},{15,6,3,1},{14,0,1,7},
|
|
{19,0,1,7},{23,0,1,7},{20,3,3,1},
|
|
{0,8,1,6},{6,8,1,6},{1,9,1,1},{2,10,1,1},{3,11,1,1},{4,10,1,1},{5,9,1,1},
|
|
{8,8,5,1},{8,13,5,1},{10,9,1,4},
|
|
{14,8,1,6},{19,8,1,6},{15,9,1,1},{16,10,1,1},{17,11,1,1},{18,12,1,1},
|
|
{21,8,5,1},{21,13,5,1},{21,9,1,4},{25,9,1,4},
|
|
}
|
|
|
|
sfx={
|
|
"button",
|
|
"ready","start","win","fail",
|
|
"move","rotate","rotatekick","hold",
|
|
"prerotate","prehold",
|
|
"drop","fall",
|
|
"reach",
|
|
"ren_1","ren_2","ren_3","ren_4","ren_5","ren_6","ren_7","ren_8","ren_9","ren_10","ren_11",
|
|
"clear_1","clear_2","clear_3","clear_4",
|
|
"spin_0","spin_1","spin_2","spin_3",
|
|
"emit","blip_1","blip_2",
|
|
"perfectclear",
|
|
}
|
|
bgm={
|
|
"blank",
|
|
"way",
|
|
"race",
|
|
"newera",
|
|
"push",
|
|
"reason",
|
|
"infinite",
|
|
"cruelty",
|
|
"final",
|
|
}
|
|
|
|
prevMenu={
|
|
load=love.event.quit,
|
|
intro="quit",
|
|
main="intro",
|
|
mode="main",
|
|
custom="mode",
|
|
ready="mode",
|
|
play=function()
|
|
gotoScene(curMode.id~="custom"and"mode"or"custom")
|
|
end,
|
|
help="main",
|
|
stat="main",
|
|
setting=function()
|
|
saveSetting()
|
|
gotoScene("main")
|
|
end,
|
|
setting2="setting",
|
|
setting3="setting",
|
|
}
|
|
|
|
customID={
|
|
"drop",
|
|
"lock",
|
|
"wait",
|
|
"fall",
|
|
"next",
|
|
"hold",
|
|
"sequence",
|
|
"visible",
|
|
"target",
|
|
"freshLimit",
|
|
"opponent",
|
|
}--Order
|
|
customOption={
|
|
drop="Drop delay:",
|
|
lock="Lock delay:",
|
|
wait="Next piece delay:",
|
|
fall="Clear row delay:",
|
|
next="Next count:",
|
|
hold="Hold:",
|
|
sequence="Sequence:",
|
|
visible="Visible:",
|
|
target="Line limit:",
|
|
freshLimit="Lock fresh limit:",
|
|
opponent="Opponent speed:",
|
|
}--Key str
|
|
customVal={
|
|
drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞","[20G]"},
|
|
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"},
|
|
wait=nil,
|
|
fall=nil,
|
|
next=nil,
|
|
hold={"on","off"},
|
|
sequence={"bag7","his4","random"},
|
|
visible={"normal","time","invisible"},
|
|
target={10,20,40,100,200,500,1000,"∞"},
|
|
freshLimit={0,8,15,"∞"},
|
|
opponent={"No CPU",1,2,3,4,5,6,7,8,9,10,11},
|
|
}--number-Val str
|
|
customRange={
|
|
drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99,-1},
|
|
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
|
|
wait={1,3,5,7,10,15,20,30,60},
|
|
fall={1,3,5,7,10,15,20,30,60},
|
|
next={0,1,2,3,4,5,6},
|
|
hold={true,false},
|
|
sequence={"bag7","his4","rnd"},
|
|
visible={1,2,3},
|
|
target={10,20,40,100,200,500,1000,1e99},
|
|
freshLimit={0,8,15,1e99},
|
|
opponent={0,60,30,20,15,10,7,5,4,3,2,1},
|
|
}
|
|
|
|
actName={"moveLeft","moveRight","rotRight","rotLeft","rotFlip","hardDrop","softDrop","hold","swap","restart","insLeft","insRight","insDown"}
|
|
actName_show={"Move Left:","Move Right:","Rotate Right:","Rotate Left:","Rotate Flip","Hard Drop:","Soft Drop:","Hold:","Swap:","Restart:","Instant Left:","Instant Right:","Ins Down:"}
|
|
blockPos={4,4,4,4,4,5,4}
|
|
renATK={[0]=0,0,0,1,1,2,2,3,3,4,4}--3 else
|
|
renName={nil,nil,"3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB",}
|
|
b2bPoint={50,90,150}
|
|
b2bATK={3,5,8}
|
|
testScore={[0]=0,[-1]=1,[-2]=0,[-3]=1,2,2,2}
|
|
|
|
spin_n={"spin_1","spin_2","spin_3"}
|
|
clear_n={"clear_1","clear_2","clear_3","clear_4"}
|
|
ren_n={"ren_1","ren_2","ren_3","ren_4","ren_5","ren_6","ren_7","ren_8","ren_9","ren_10","ren_11"}
|
|
vibrateLevel={0,.02,.03,.04,.06,.08,.1}
|
|
atkModeName={"Random","Badges","K.O.s","Counters"}
|
|
up0to4={[0]="000%UP","025%UP","050%UP","075%UP","100%UP",}
|
|
percent0to5={[0]="0%","20%","40%","60%","80%","100%",}
|
|
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"}
|
|
snapLevelValue={1,10,20,40,60,80}
|
|
reAtk={0,0,1,1,1,2,2,3,3}
|
|
reDef={0,1,1,2,3,3,4,4,5}
|
|
|
|
marathon_drop={[0]=60,48,40,30,24,18,15,12,10,8,7,6,5,4,3,2,1,1,0,0}
|
|
rush_lock={20,18,16,14,12}
|
|
rush_wait={12,10,9,8,7}
|
|
rush_fall={12,11,10,9,8}
|
|
death_lock={12,11,10,9,8}
|
|
death_wait={9,8,7,6,5}
|
|
death_fall={10,9,8,7,6}
|
|
pc_drop={50,45,40,35,30,26,22,18,15,12}
|
|
pc_lock={55,50,45,40,36,32,30}
|
|
pc_fall={18,16,14,12,10,9,8,7,6}
|
|
|
|
defaultModeEnv={
|
|
sprint={
|
|
{
|
|
drop=60,
|
|
target=10,
|
|
reach=Event.gameover.win,
|
|
bgm="race",
|
|
},
|
|
{
|
|
drop=60,
|
|
target=20,
|
|
reach=Event.gameover.win,
|
|
bgm="race",
|
|
},
|
|
{
|
|
drop=60,
|
|
target=40,
|
|
reach=Event.gameover.win,
|
|
bgm="race",
|
|
},
|
|
{
|
|
drop=60,
|
|
target=100,
|
|
reach=Event.gameover.win,
|
|
bgm="race",
|
|
},
|
|
{
|
|
drop=60,
|
|
target=400,
|
|
reach=Event.gameover.win,
|
|
bgm="push",
|
|
},
|
|
{
|
|
drop=60,
|
|
target=1000,
|
|
reach=Event.gameover.win,
|
|
bgm="push",
|
|
},
|
|
},
|
|
marathon={
|
|
{
|
|
drop=1e99,
|
|
lock=1e99,
|
|
target=200,
|
|
reach=Event.marathon_reach,
|
|
bgm="way",
|
|
},
|
|
{
|
|
drop=60,
|
|
fall=20,
|
|
target=10,
|
|
reach=Event.marathon_reach,
|
|
bgm="way",
|
|
},
|
|
{
|
|
_20G=true,
|
|
fall=20,
|
|
target=200,
|
|
reach=Event.marathon_reach,
|
|
bgm="newera",
|
|
},
|
|
{
|
|
_20G=true,
|
|
drop=0,
|
|
lock=rush_lock[1],
|
|
wait=rush_wait[1],
|
|
fall=rush_fall[1],
|
|
target=50,
|
|
reach=Event.marathon_reach_lunatic,
|
|
arr=2,
|
|
bgm="race",
|
|
},
|
|
{
|
|
_20G=true,
|
|
drop=0,
|
|
lock=death_lock[1],
|
|
wait=death_wait[1],
|
|
fall=death_fall[1],
|
|
target=50,
|
|
reach=Event.marathon_reach_ultimete,
|
|
arr=1,
|
|
bgm="push",
|
|
},
|
|
},
|
|
zen={
|
|
{
|
|
drop=1e99,
|
|
lock=1e99,
|
|
target=200,
|
|
reach=Event.gameover.win,
|
|
bgm="infinite",
|
|
},
|
|
},
|
|
infinite={
|
|
{
|
|
drop=1e99,
|
|
lock=1e99,
|
|
oncehold=false,
|
|
bgm="infinite",
|
|
},
|
|
},
|
|
solo={
|
|
{
|
|
bgm="race",
|
|
},
|
|
},
|
|
tsd={
|
|
{
|
|
oncehold=false,
|
|
drop=1e99,
|
|
lock=1e99,
|
|
target=1,
|
|
reach=Event.tsd_reach,
|
|
bgm="reason",
|
|
},
|
|
{
|
|
drop=60,
|
|
lock=60,
|
|
target=1,
|
|
reach=Event.tsd_reach,
|
|
bgm="reason",
|
|
},
|
|
},
|
|
blind={
|
|
{
|
|
drop=30,
|
|
lock=60,
|
|
visible=2,
|
|
bgm="newera",
|
|
},
|
|
{
|
|
drop=15,
|
|
lock=60,
|
|
visible=0,
|
|
freshLimit=10,
|
|
bgm="reason",
|
|
},
|
|
{
|
|
_20G=true,
|
|
lock=60,
|
|
visible=0,
|
|
freshLimit=15,
|
|
bgm="reason",
|
|
},
|
|
{
|
|
_20G=true,
|
|
drop=0,
|
|
lock=15,
|
|
wait=10,
|
|
fall=15,
|
|
visible=0,
|
|
arr=1,
|
|
bgm="push",
|
|
},
|
|
},
|
|
dig={
|
|
{
|
|
drop=60,
|
|
lock=120,
|
|
fall=20,
|
|
bgm="push",
|
|
},
|
|
{
|
|
drop=10,
|
|
lock=30,
|
|
bgm="push",
|
|
},
|
|
},
|
|
survivor={
|
|
{
|
|
drop=60,
|
|
lock=120,
|
|
fall=30,
|
|
bgm="push",
|
|
},
|
|
{
|
|
drop=30,
|
|
lock=60,
|
|
fall=20,
|
|
bgm="newera",
|
|
},
|
|
{
|
|
drop=10,
|
|
lock=60,
|
|
fall=15,
|
|
bgm="race",
|
|
},
|
|
{
|
|
drop=5,
|
|
lock=60,
|
|
fall=10,
|
|
bgm="push",
|
|
},
|
|
},
|
|
sudden={
|
|
{
|
|
oncehold=false,
|
|
drop=1e99,
|
|
lock=1e99,
|
|
target=0,
|
|
reach=Event.sudden_reach,
|
|
bgm="way",
|
|
},
|
|
{
|
|
drop=30,
|
|
lock=60,
|
|
target=0,
|
|
reach=Event.sudden_reach,
|
|
bgm="way",
|
|
},
|
|
{
|
|
drop=15,
|
|
lock=60,
|
|
target=0,
|
|
reach=Event.sudden_reach_hard,
|
|
bgm="way",
|
|
},
|
|
{
|
|
drop=5,
|
|
lock=40,
|
|
target=0,
|
|
reach=Event.sudden_reach_hard,
|
|
bgm="way",
|
|
},
|
|
},
|
|
pctrain={
|
|
{
|
|
next=4,
|
|
hold=false,
|
|
drop=120,
|
|
lock=120,
|
|
fall=20,
|
|
sequence="pc",
|
|
target=0,
|
|
freshLimit=1e99,
|
|
reach=Event.newPC,
|
|
bgm="newera",
|
|
},
|
|
{
|
|
next=4,
|
|
hold=false,
|
|
drop=60,
|
|
lock=60,
|
|
fall=20,
|
|
sequence="pc",
|
|
target=0,
|
|
reach=Event.newPC,
|
|
bgm="newera",
|
|
},
|
|
},
|
|
pcchallenge={
|
|
{
|
|
oncehold=false,
|
|
drop=300,
|
|
lock=1e99,
|
|
target=100,
|
|
reach=Event.gameover.win,
|
|
freshLimit=1e99,
|
|
bgm="newera",
|
|
},
|
|
{
|
|
drop=60,
|
|
lock=120,
|
|
fall=10,
|
|
target=100,
|
|
reach=Event.gameover.win,
|
|
bgm="infinite",
|
|
},
|
|
{
|
|
drop=20,
|
|
lock=60,
|
|
fall=20,
|
|
target=100,
|
|
reach=Event.gameover.win,
|
|
bgm="infinite",
|
|
},
|
|
},
|
|
techmino41={
|
|
{
|
|
fall=20,
|
|
royaleMode=true,
|
|
royalePowerup={2,5,10,20},
|
|
royaleRemain={30,20,15,10,5},
|
|
pushSpeed=2,
|
|
bgm="race",
|
|
},
|
|
},
|
|
techmino99={
|
|
{
|
|
fall=20,
|
|
royaleMode=true,
|
|
royalePowerup={2,6,14,30},
|
|
royaleRemain={75,50,35,20,10},
|
|
pushSpeed=2,
|
|
bgm="race",
|
|
},
|
|
},
|
|
drought={
|
|
{
|
|
drop=20,
|
|
lock=60,
|
|
sequence=drought1,
|
|
target=100,
|
|
reach=Event.gameover.win,
|
|
bgm="reason",
|
|
},
|
|
{
|
|
drop=20,
|
|
lock=60,
|
|
sequence=drought2,
|
|
target=100,
|
|
reach=Event.gameover.win,
|
|
bgm="reason",
|
|
},
|
|
},
|
|
hotseat={
|
|
{
|
|
bgm="way",
|
|
},
|
|
},
|
|
custom={
|
|
{
|
|
bgm="reason",
|
|
reach=Event.gameover.win,
|
|
},
|
|
},
|
|
}
|
|
modeLevel={
|
|
sprint={"10L","20L","40L","100L","400L","1000L"},
|
|
marathon={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"},
|
|
zen={"NORMAL"},
|
|
infinite={"NORMAL"},
|
|
solo={"EASY","NORMAL","HARD","LUNATIC"},
|
|
tsd={"NORMAL","HARD"},
|
|
blind={"EASY","HARD","LUNATIC","GM"},
|
|
dig={"NORMAL","LUNATIC"},
|
|
survivor={"EASY","NORMAL","HARD","LUNATIC"},
|
|
sudden={"EASY","NORMAL","HARD","LUNATIC"},
|
|
pctrain={"NORMAL","LUNATIC"},
|
|
pcchallenge={"NORMAL","HARD","LUNATIC"},
|
|
techmino41={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"},
|
|
techmino99={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"},
|
|
drought={"NORMAL","MESS"},
|
|
hotseat={"2P","3P","4P",},
|
|
custom={""},
|
|
}
|
|
modeLevelColor={
|
|
EASY=color.cyan,
|
|
NORMAL=color.green,
|
|
HARD=color.purple,
|
|
LUNATIC=color.red,
|
|
EXTRA=color.lightPurple,
|
|
|
|
MESS=color.lightGrey,
|
|
GM=color.blue,
|
|
ULTIMATE=color.lightYellow,
|
|
DEATH=color.lightRed,
|
|
["10L"]=color.cyan,
|
|
["20L"]=color.lightBlue,
|
|
["40L"]=color.green,
|
|
["100L"]=color.orange,
|
|
["400L"]=color.red,
|
|
["1000L"]=color.darkRed,
|
|
}
|
|
modeID={
|
|
[0]="custom",
|
|
"sprint","marathon","zen","infinite","solo","tsd","blind","dig","survivor","sudden",
|
|
"pctrain","pcchallenge","techmino41","techmino99","drought","hotseat",
|
|
}
|
|
modeName={
|
|
[0]="Custom",
|
|
"Sprint","Marathon","Zen","Infinite","1v1","TSD-only","Blind","Dig","Survivor","Sudden",
|
|
"PC Train","PC Challenge","Techmino41","Techmino99","Drought","Hotseat",
|
|
}
|
|
modeInfo={
|
|
sprint="Speed run.",
|
|
marathon="Survive and reach target",
|
|
zen="Clear 200 Lines without gravity",
|
|
infinite="Infinite game,infinite happiness",
|
|
solo="Beat AI",
|
|
tsd="Make more T-spin-doubles",
|
|
blind="Invisible board",
|
|
dig="Downstack!",
|
|
survivor="Hand them!",
|
|
sudden="Techniques practice",
|
|
pctrain="Let's learn some PCs",
|
|
pcchallenge="Make PCs in 100 Lines",
|
|
techmino41="Melee fight with 40 AIs",
|
|
techmino99="Melee fight with 98 AIs",
|
|
drought="ERRSEQ flood attack",
|
|
hotseat="",
|
|
}
|
|
|
|
freshMethod={
|
|
bag7=function()
|
|
if #P.nxt<6 then
|
|
local bag={1,2,3,4,5,6,7}
|
|
for i=1,7 do
|
|
ins(P.nxt,rem(bag,rnd(8-i)))
|
|
ins(P.nb,blocks[P.nxt[#P.nxt]][0])
|
|
end
|
|
end
|
|
end,
|
|
his4=function()
|
|
if #P.nxt<6 then
|
|
local j,i=0
|
|
::L::
|
|
i,j=rnd(7),j+1
|
|
if(i==P.his[1]or i==P.his[2]or i==P.his[3]or i==P.his[4])then goto L end
|
|
P.nxt[6],P.nb[6]=i,blocks[i][0]
|
|
rem(P.his,1)ins(P.his,i)
|
|
end
|
|
end,
|
|
rnd=function()
|
|
local i
|
|
::L::
|
|
i=rnd(7)
|
|
if i==P.nxt[5]then goto L end
|
|
P.nxt[6],P.nb[6]=i,blocks[i][0]
|
|
end,--random
|
|
pc=function()
|
|
if P.cstat.piece%4==0 then
|
|
local r=rnd(#PClist)
|
|
local f=P.cstat.event==1
|
|
for i=1,4 do
|
|
local b=PClist[r][i]
|
|
if f then
|
|
if b<3 then b=3-b
|
|
elseif b<5 then b=7-b
|
|
end
|
|
end
|
|
ins(P.nxt,b)
|
|
ins(P.nb,blocks[b][0])
|
|
end
|
|
P.cstat.event=(P.cstat.event+1)%2
|
|
end
|
|
end,
|
|
drought1=function()
|
|
if #P.nxt<6 then
|
|
local bag={1,2,3,4,5,6}
|
|
for i=1,6 do
|
|
ins(P.nxt,rem(bag,rnd(7-i)))
|
|
ins(P.nb,blocks[P.nxt[#P.nxt]][0])
|
|
end
|
|
end
|
|
end,
|
|
drought2=function()
|
|
if #P.nxt<6 then
|
|
local bag={1,1,1,2,2,2,3,3,3,4,4,4,6,6,6,5,7}
|
|
::L::
|
|
ins(P.nxt,rem(bag,rnd(#bag)))
|
|
ins(P.nb,blocks[P.nxt[#P.nxt]][0])
|
|
if bag[1]then goto L end
|
|
end
|
|
end,
|
|
}
|
|
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}}},
|
|
{[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}}},
|
|
{[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}}},
|
|
{[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}}},
|
|
{[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}}},
|
|
{[0]={{1,1},{1,1}},{{1,1},{1,1}},{{1,1},{1,1}},{{1,1},{1,1}}},
|
|
{[0]={{1,1,1,1}},{{1},{1},{1},{1}},{{1,1,1,1}},{{1},{1},{1},{1}}},
|
|
}
|
|
scs={
|
|
{[0]={1,2},{2,1},{2,2},{2,2}},
|
|
{[0]={1,2},{2,1},{2,2},{2,2}},
|
|
{[0]={1,2},{2,1},{2,2},{2,2}},
|
|
{[0]={1,2},{2,1},{2,2},{2,2}},
|
|
{[0]={1,2},{2,1},{2,2},{2,2}},
|
|
{[0]={1.5,1.5},{1.5,1.5},{1.5,1.5},{1.5,1.5},},
|
|
{[0]={0.5,2.5},{2.5,0.5},{1.5,2.5},{2.5,1.5}},
|
|
}
|
|
TRS={
|
|
[1]={
|
|
[01]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2},{0,1}},
|
|
[10]={{0,0},{1,0},{1,-1},{0,2},{1,2},{0,-1}},
|
|
[12]={{0,0},{1,0},{1,-1},{-1,0},{0,2},{1,2}},
|
|
[21]={{0,0},{-1,0},{-1,1},{1,0},{0,-2},{-1,-2}},
|
|
[23]={{0,0},{1,0},{1,1},{1,-1},{0,-2},{1,-2}},
|
|
[32]={{0,0},{-1,0},{-1,-1},{-1,1},{0,2},{-1,2}},
|
|
[30]={{0,0},{-1,0},{-1,-1},{0,2},{-1,2},{0,-1}},
|
|
[03]={{0,0},{1,0},{1,1},{0,-2},{1,-2},{0,1}},
|
|
[02]={{0,0},{1,0},{-1,0},{0,-1},{0,1}},
|
|
[20]={{0,0},{-1,0},{1,0},{0,1},{0,-1}},
|
|
[13]={{0,0},{0,-1},{0,1},{-1,0}},
|
|
[31]={{0,0},{0,1},{0,-1},{1,0}},
|
|
},--Z/J
|
|
[2]={
|
|
[01]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2}},
|
|
[10]={{0,0},{1,0},{1,-1},{0,2},{1,2}},
|
|
[12]={{0,0},{1,0},{1,-1},{1,1},{0,2},{1,2}},
|
|
[21]={{0,0},{-1,0},{-1,1},{-1,-1},{0,-2},{-1,-2}},
|
|
[23]={{0,0},{1,0},{1,1},{-1,0},{0,-2},{1,-2}},
|
|
[32]={{0,0},{-1,0},{-1,-1},{1,0},{0,2},{-1,2}},
|
|
[30]={{0,0},{-1,0},{-1,-1},{0,2},{-1,2},{0,-1},{-1,1}},
|
|
[03]={{0,0},{1,0},{1,1},{0,-2},{1,-2},{1,-1},{0,1}},
|
|
[02]={{0,0},{-1,0},{1,0},{0,-1},{0,1}},
|
|
[20]={{0,0},{1,0},{-1,0},{0,1},{0,-1}},
|
|
[13]={{0,0},{0,1},{0,-1},{1,0}},
|
|
[31]={{0,0},{0,-1},{0,1},{-1,0}},
|
|
},--S/L
|
|
[5]={
|
|
[01]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2},{-1,-1},{0,1}},
|
|
[10]={{0,0},{1,0},{1,-1},{0,2},{1,2},{0,-1},{1,1}},
|
|
[12]={{0,0},{1,0},{1,-1},{0,-1},{0,2},{1,2},{-1,-1}},
|
|
[21]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2},{1,1}},
|
|
[23]={{0,0},{1,0},{1,1},{0,-2},{1,-2},{-1,1}},
|
|
[32]={{0,0},{-1,0},{-1,-1},{0,-1},{0,2},{-1,2},{1,-1}},
|
|
[30]={{0,0},{-1,0},{-1,-1},{0,2},{-1,2},{0,-1}},
|
|
[03]={{0,0},{1,0},{1,1},{0,-2},{1,-2},{0,1}},
|
|
[02]={{0,0},{-1,0},{1,0},{0,-1},{0,1}},
|
|
[20]={{0,0},{1,0},{-1,0},{0,1},{0,-1}},
|
|
[13]={{0,0},{0,-1},{0,1},{1,0},{-1,0},{0,2}},
|
|
[31]={{0,0},{0,-1},{0,1},{-1,0},{1,0},{0,2}},
|
|
},
|
|
[7]={
|
|
[01]={{0,0},{1,0},{-2,0},{-2,-1},{1,2}},
|
|
[03]={{0,0},{-1,0},{2,0},{2,-1},{-1,2}},
|
|
[10]={{0,0},{2,0},{-1,0},{-1,-2},{2,1},{0,2}},
|
|
[30]={{0,0},{-2,0},{1,0},{1,-2},{-2,1},{0,2}},
|
|
[12]={{0,0},{-1,0},{2,0},{-1,2},{2,-1}},
|
|
[32]={{0,0},{1,0},{-2,0},{1,-2},{-2,-1}},
|
|
[21]={{0,0},{-2,0},{1,0},{1,-2},{-2,1}},
|
|
[23]={{0,0},{2,0},{-1,0},{-1,-2},{2,1}},
|
|
[02]={{0,0},{-1,0},{1,0},{0,-1},{0,1}},
|
|
[20]={{0,0},{1,0},{-1,0},{0,1},{0,-1}},
|
|
[13]={{0,0},{0,-1},{-1,0},{1,0},{0,1}},
|
|
[31]={{0,0},{0,1},{1,0},{-1,0},{0,1}},
|
|
}
|
|
}TRS[3],TRS[4]=TRS[2],TRS[1]
|
|
|
|
Buttons={
|
|
load={},
|
|
intro={},
|
|
main={
|
|
{x=250,y=250,w=350,h=100,rgb=color.red,f=55,t="Play",code=function()gotoScene("mode")end,down=2},
|
|
{x=250,y=360,w=350,h=100,rgb=color.blue,f=50,t="Settings",code=function()gotoScene("setting")end,up=1,down=3},
|
|
{x=160,y=470,w=170,h=100,rgb=color.yellow,f=50,t="Help",code=function()gotoScene("help")end,up=2,down=5,right=4},
|
|
{x=340,y=470,w=170,h=100,rgb=color.cyan,f=40,t="Statistics",code=function()gotoScene("stat")end,up=2,down=5,left=3},
|
|
{x=250,y=580,w=350,h=100,rgb=color.grey,f=40,t="Quit",code=function()gotoScene("quit")end,up=3},
|
|
},
|
|
mode={
|
|
{x=1000,y=210,w=200,h=140,rgb=color.white,hide=function()return modeSel==1 end,t="Λ",f=64,code=function()keyDown.mode("up")end},
|
|
{x=1000,y=430,w=200,h=140,rgb=color.white,hide=function()return modeSel==#modeID end,t="v",f=80,code=function()keyDown.mode("down")end},
|
|
{x=190,y=160,w=100,h=80,rgb=color.white,hide=function()return levelSel==1 end,t="<",code=function()keyDown.mode("left")end},
|
|
{x=350,y=160,w=100,h=80,rgb=color.white,hide=function()return levelSel==#modeLevel[modeID[modeSel]] end,t=">",code=function()keyDown.mode("right")end},
|
|
{x=1000,y=600,w=250,h=100,rgb=color.green,f=50,t="Start",code=function()loadGame(modeSel,levelSel)end},
|
|
{x=270,y=540,w=190,h=85,rgb=color.yellow,t="Custom(c)",code=function()gotoScene("custom")end},
|
|
{x=640,y=630,w=230,h=90,rgb=color.white,f=45,t="Back",code=back},
|
|
},
|
|
custom={
|
|
{x=1000,y=200,w=100,h=100,rgb=color.white,t="Λ",f=40,code=function()optSel=(optSel-2)%#customID+1 end},
|
|
{x=1000,y=440,w=100,h=100,rgb=color.white,t="v",f=50,code=function()optSel=optSel%#customID+1 end},
|
|
{x=880,y=320,w=100,h=100,rgb=color.white,t="<",f=50,code=function()local k=customID[optSel]customSel[k]=(customSel[k]-2)%#customRange[k]+1 end},
|
|
{x=1120,y=320,w=100,h=100,rgb=color.white,t=">",f=50,code=function()local k=customID[optSel]customSel[k]=customSel[k]%#customRange[k]+1 end},
|
|
{x=1000,y=580,w=180,h=80,rgb=color.green,t="Start",code=function()loadGame(0,1)end},
|
|
{x=640,y=630,w=180,h=60,rgb=color.white,t="Back",code=back},
|
|
},
|
|
play={
|
|
},
|
|
setting={--Normal setting
|
|
{x=285,y=90,w=210,h=60,rgb=color.white,t=function()return setting.ghost and"Ghost ON"or"Ghost OFF"end,code=function()setting.ghost=not setting.ghost end,down=3,right=2},
|
|
{x=505,y=90,w=210,h=60,rgb=color.white,t=function()return setting.center and"Center ON"or"Center OFF"end,code=function()setting.center=not setting.center end,down=5,left=1,right=11},
|
|
--1,2
|
|
{x=205,y=180,w=50,h=50,rgb=color.white,t="-",code=function()setting.das=(setting.das-1)%31 end,up=1,down=7,right=4},
|
|
{x=370,y=180,w=50,h=50,rgb=color.white,t="+",code=function()setting.das=(setting.das+1)%31 end,up=1,down=8,left=3,right=5},
|
|
{x=420,y=180,w=50,h=50,rgb=color.white,t="-",code=function()setting.arr=(setting.arr-1)%16 end,up=2,down=9,left=4,right=6},
|
|
{x=585,y=180,w=50,h=50,rgb=color.white,t="+",code=function()setting.arr=(setting.arr+1)%16 end,up=2,down=10,left=5,right=13},
|
|
--3~6
|
|
{x=205,y=260,w=50,h=50,rgb=color.white,t="-",code=function()setting.sddas=(setting.sddas-1)%11 end,up=3,down=13,right=8},
|
|
{x=370,y=260,w=50,h=50,rgb=color.white,t="+",code=function()setting.sddas=(setting.sddas+1)%11 end,up=4,down=13,left=7,right=9},
|
|
{x=420,y=260,w=50,h=50,rgb=color.white,t="-",code=function()setting.sdarr=(setting.sdarr-1)%4 end,up=5,down=13,left=8,right=10},
|
|
{x=585,y=260,w=50,h=50,rgb=color.white,t="+",code=function()setting.sdarr=(setting.sdarr+1)%4 end,up=6,down=13,left=9,right=14},
|
|
--7~10
|
|
{x=760,y=90,w=160,h=60,rgb=color.white,t=function()return setting.sfx and"SFX:on"or"SFX:off"end,code=function()setting.sfx=not setting.sfx end,down=13,left=2,right=12},
|
|
{x=940,y=90,w=160,h=60,rgb=color.white,t=function()return setting.bgm and"BGM:on"or"BGM:off"end,code=function()
|
|
BGM()
|
|
setting.bgm=not setting.bgm
|
|
BGM("blank")
|
|
end,down=13,left=6},
|
|
{x=850,y=160,w=340,h=60,rgb=color.white,t=function()return "Vibrate level:"..setting.vib end,code=function()
|
|
setting.vib=(setting.vib+1)%5
|
|
VIB(2)
|
|
end,up=11,down=14,left=6},
|
|
{x=850,y=230,w=340,h=60,rgb=color.white,t=function()return setting.fullscreen and"Fullscreen:on"or"Fullscreen:off"end,
|
|
code=function()
|
|
setting.fullscreen=not setting.fullscreen
|
|
love.window.setFullscreen(setting.fullscreen)
|
|
if not setting.fullscreen then
|
|
love.resize(gc.getWidth(),gc.getHeight())
|
|
end
|
|
end,
|
|
up=13,down=15,left=6
|
|
},
|
|
{x=850,y=300,w=340,h=60,rgb=color.white,t=function()return setting.bgblock and"BG animation:on"or"BG animation:off"end,
|
|
code=function()
|
|
setting.bgblock=not setting.bgblock
|
|
if not setting.bgblock then
|
|
for i=1,16 do
|
|
BGblockList[i].v=3*BGblockList[i].v
|
|
end
|
|
end
|
|
end,
|
|
up=14,down=16,left=10
|
|
},
|
|
{x=850,y=370,w=340,h=60,rgb=color.white,t=function()return"frameDraw:"..setting.frameMul.."%"end,code=function()
|
|
setting.frameMul=setting.frameMul+(setting.frameMul<50 and 5 or 10)
|
|
if setting.frameMul>100 then setting.frameMul=25 end
|
|
end,up=15,down=17},
|
|
--11~16
|
|
{x=850,y=440,w=340,h=60,rgb=color.green,t="Control settings",code=function()gotoScene("setting2")end,up=16,down=18},
|
|
{x=850,y=510,w=340,h=60,rgb=color.yellow,t="Touch settings",code=function()gotoScene("setting3")end,up=17,down=19},
|
|
{x=640,y=620,w=300,h=70,rgb=color.white,t="Save&Back",code=back,up=18},
|
|
--17~19
|
|
},
|
|
setting2={--Control setting
|
|
{x=840,y=630,w=180,h=60,rgb=color.white,t="Back",code=back},
|
|
},
|
|
setting3={--Touch setting
|
|
{x=640,y=410,w=170,h=80,t="Back",code=back},
|
|
{x=640,y=210,w=500,h=80,t=function()return setting.virtualkeySwitch and"Hide Virtual Key"or"Show Virtual Key"end,code=function()
|
|
setting.virtualkeySwitch=not setting.virtualkeySwitch
|
|
end},
|
|
{x=450,y=310,w=170,h=80,t="Defaults",code=function()
|
|
for K=1,#virtualkey do
|
|
local b,b0=virtualkey[K],virtualkeySet[defaultSel][K]
|
|
b[1],b[2],b[3],b[4]=b0[1],b0[2],b0[3],b0[4]
|
|
end--Default virtualkey
|
|
defaultSel=defaultSel%5+1
|
|
end},
|
|
{x=640,y=310,w=170,h=80,t=function()return snapLevelName[snapLevel]end,code=function()
|
|
snapLevel=snapLevel%6+1
|
|
end},
|
|
{x=830,y=310,w=170,h=80,t=function()return percent0to5[setting.virtualkeyAlpha]end,code=function()
|
|
setting.virtualkeyAlpha=(setting.virtualkeyAlpha+1)%6
|
|
--Adjust virtualkey alpha
|
|
end},
|
|
{x=450,y=410,w=170,h=80,t="Icon",code=function()
|
|
setting.virtualkeyIcon=not setting.virtualkeyIcon
|
|
--Switch virtualkey icon
|
|
end},
|
|
{x=830,y=410,w=170,h=80,t="Size",code=function()
|
|
if sel then
|
|
local b=virtualkey[sel]
|
|
b[4]=b[4]+10
|
|
if b[4]==150 then b[4]=40 end
|
|
b[3]=b[4]^2
|
|
end
|
|
end},
|
|
},
|
|
help={
|
|
{x=640,y=590,w=180,h=60,rgb=color.white,t="Back",code=back,right=2},
|
|
{x=980,y=590,w=230,h=60,rgb=color.white,t="Author's qq",code=function()sys.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,left=1},
|
|
},
|
|
stat={
|
|
{x=640,y=590,w=180,h=60,rgb=color.white,t="Back",code=back},
|
|
},
|
|
sel=nil,--selected button id(integer)
|
|
}
|
|
for k,v in pairs(Buttons)do
|
|
for i=1,#v do
|
|
v[i].alpha=0
|
|
end
|
|
end
|
|
|
|
virtualkey={
|
|
{80,720-80,6400,80},--moveLeft
|
|
{240,720-80,6400,80},--moveRight
|
|
{1280-240,720-80,6400,80},--rotRight
|
|
{1280-400,720-80,6400,80},--rotLeft
|
|
{1280-240,720-240,6400,80},--rotFlip
|
|
{1280-80,720-80,6400,80},--hardDrop
|
|
{1280-80,720-240,6400,80},--softDrop
|
|
{1280-80,720-400,6400,80},--hold
|
|
{80,360,6400,80},--swap
|
|
{80,80,6400,80},--restart
|
|
--[[
|
|
{x=0,y=0,r=0},--toLeft
|
|
{x=0,y=0,r=0},--toRight
|
|
{x=0,y=0,r=0},--toDown
|
|
]]
|
|
|
|
}
|
|
virtualkeyDown={false,false,false,false,false,false,false,false,false,false,false,false,false}
|
|
virtualkeyPressTime={0,0,0,0,0,0,0,0,0,0,0,0,0}
|
|
virtualkeySet={
|
|
{
|
|
{80,720-200,6400,80},--moveLeft
|
|
{320,720-200,6400,80},--moveRight
|
|
{1280-80,720-200,6400,80},--rotRight
|
|
{1280-200,720-80,6400,80},--rotLeft
|
|
{1280-200,720-320,6400,80},--rotFlip
|
|
{200,720-320,6400,80},--hardDrop
|
|
{200,720-80,6400,80},--softDrop
|
|
{1280-320,720-200,6400,80},--hold
|
|
{1280-80,280,6400,80},--swap
|
|
{80,280,6400,80},--restart
|
|
},--Farter's set 3
|
|
{
|
|
{1280-320,720-200,6400,80},--moveLeft
|
|
{1280-80,720-200,6400,80},--moveRight
|
|
{200,720-80,6400,80},--rotRight
|
|
{80,720-200,6400,80},--rotLeft
|
|
{200,720-320,6400,80},--rotFlip
|
|
{1280-200,720-320,6400,80},--hardDrop
|
|
{1280-200,720-80,6400,80},--softDrop
|
|
{320,720-200,6400,80},--hold
|
|
{80,280,6400,80},--swap
|
|
{1280-80,280,6400,80},--restart
|
|
},--Mirrored farter's set 3
|
|
{
|
|
{80,720-80,6400,80},--moveLeft
|
|
{240,720-80,6400,80},--moveRight
|
|
{1280-240,720-80,6400,80},--rotRight
|
|
{1280-400,720-80,6400,80},--rotLeft
|
|
{1280-240,720-240,6400,80},--rotFlip
|
|
{1280-80,720-80,6400,80},--hardDrop
|
|
{1280-80,720-240,6400,80},--softDrop
|
|
{1280-80,720-400,6400,80},--hold
|
|
{80,360,6400,80},--swap
|
|
{80,80,6400,80},--restart
|
|
},--Author's set
|
|
{
|
|
{1280-400,720-80,6400,80},--moveLeft
|
|
{1280-80,720-80,6400,80},--moveRight
|
|
{240,720-80,6400,80},--rotRight
|
|
{80,720-80,6400,80},--rotLeft
|
|
{240,720-240,6400,80},--rotFlip
|
|
{1280-240,720-240,6400,80},--hardDrop
|
|
{1280-240,720-80,6400,80},--softDrop
|
|
{1280-80,720-240,6400,80},--hold
|
|
{80,720-240,6400,80},--swap
|
|
{80,320,6400,80},--restart
|
|
},--Keyboard set
|
|
{
|
|
{1280-360,40,0,40},--moveLeft
|
|
{1280-280,40,0,40},--moveRight
|
|
{1280-520,40,0,40},--rotRight
|
|
{1280-600,40,0,40},--rotLeft
|
|
{1280-440,40,0,40},--rotFlip
|
|
{1280-40,40,0,40},--hardDrop
|
|
{1280-120,40,0,40},--softDrop
|
|
{1280-200,40,0,40},--hold
|
|
{1280-680,40,0,40},--swap
|
|
{1280-760,40,0,40},--restart
|
|
},--PC key feedback
|
|
}
|
|
|
|
Text={
|
|
load={"Loading textures","Loading BGM","Loading SFX","Finished",},
|
|
tips={
|
|
"The whole game is made by MrZ!",
|
|
"Back to Back 8 combo Techrash PC!",
|
|
"Techmino has a Nspire-CX edition!",
|
|
"Is B2B2B2B possible?",
|
|
"MrZ spin Penta!",
|
|
},
|
|
stat={
|
|
"Games run:",
|
|
"Games played:",
|
|
"Game time:",
|
|
"Total block used:",
|
|
"Total rows cleared:",
|
|
"Total lines sent:",
|
|
"Total key pressed:",
|
|
"Total rotate:",
|
|
"Total hold:",
|
|
"Total spin:",
|
|
},
|
|
help={
|
|
"I think you don't need \"help\".",
|
|
"THIS IS ONLY A SMALL BLOCK GAME",
|
|
"But just play like playing TOP/C2/KOS/TGM3",
|
|
"Game is not public now,so DO NOT DISTIRBUTE",
|
|
"",
|
|
"Powered by LOVE2D",
|
|
"Author:MrZ E-mail:1046101471@qq.com",
|
|
"Programe:MrZ Art:MrZ Music:MrZ SFX:MrZ",
|
|
"Tool used:VScode,GFIE,Beepbox,Goldwave",
|
|
"Special thanks:Farter,Teatube,196,Flyz,T830,[all test staff] and YOU!",
|
|
"Any bugs/suggestions to my E-mail.",
|
|
},
|
|
} |