--[[ Techmino is my first "huge project" optimization is welcomed if you also love tetromino game ]] --Global Setting & Vars package.path="./?.lua;./parts/?.lua;./modules/?.lua" math.randomseed(os.time()*626) love.keyboard.setKeyRepeat(true) love.keyboard.setTextInput(false) love.mouse.setVisible(false) function NULL()end system=love.system.getOS() game={} mapCam={ sel=nil,--selected mode ID x=0,y=0,k=1,--camera pos/k x1=0,y1=0,k1=1,--camera pos/k shown --basic paras keyCtrl=false,--if controlling with key zoomMethod=nil, zoomK=nil, --for auto zooming when enter/leave scene } scr={x=0,y=0,w=0,h=0,rad=0,k=1}--wid,hei,radius,scale K customSel={1,22,1,1,7,3,1,1,8,4,1,1,1} preField={h=20}for i=1,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end players={alive={},human=0} --blockSkin,blockSkinMini={},{}--redefined in SKIN.change --Load modules color= require("color") blocks= require("mino") AITemplate= require("AITemplate") freeRow= require("freeRow") require("toolfunc") require("list") require("gametoolfunc") require("texture") require("default_data") SKIN= require("skin") PLY= require("player") AIfunc= require("ai") Modes= require("modes") --load Z's Framework SHADER= require("shader") VIB= require("vib") SFX= require("sfx") sysFX= require("sysFX") BG= require("bg") BGM= require("bgm") VOC= require("voice") LANG= require("languages") FILE= require("file") TEXT= require("text") TASK= require("task") IMG= require("img") WIDGET= require("widget") Widgets=require("widgetList") LIGHT= require("light") SCN= require("scene") require("callback") --load files & settings modeRanks={}for i=1,#Modes do modeRanks[i]=false assert(i==Modes[i].id,"ModeID error:"..i)end modeRanks[1]=0 local fs=love.filesystem if fs.getInfo("keymap.dat")then fs.remove("keymap.dat")end if fs.getInfo("setting.dat")then fs.remove("setting.dat")end if fs.getInfo("settings.dat")then FILE.loadSetting() else -- firstRun=true if system=="Android"or system=="iOS" then setting.VKSwitch=true setting.swap=false setting.vib=2 setting.powerInfo=true end end LANG.set(setting.lang) if setting.fullscreen then love.window.setFullscreen(true)end if fs.getInfo("unlock.dat")then FILE.loadUnlock()end if fs.getInfo("data.dat")then FILE.loadData()end if fs.getInfo("key.dat")then FILE.loadKeyMap()end if fs.getInfo("virtualkey.dat")then FILE.loadVK()end --update data file S=stat if not S.version or S.version=="Alpha V0.8.15"then S.clear_S={S.clear_1,S.clear_2,S.clear_3,S.clear_4} S.clear={{},{},{},{},{},{},{}} local A,B,C,D=int(S.clear_1/7),int(S.clear_2/7),int(S.clear_3/7),S.clear_4 for i=1,7 do S.clear[i][1]=A S.clear[i][2]=B S.clear[i][3]=C S.clear[i][4]=0 end S.clear[7][4]=D for i=1,S.clear_1%7 do S.clear[i][1]=S.clear[i][1]+1 end for i=1,S.clear_2%7 do S.clear[i][2]=S.clear[i][2]+1 end for i=1,S.clear_3%7 do S.clear[i][3]=S.clear[i][3]+1 end S.clear_B={} for i=1,7 do S.clear_B[i]=S.clear[i][1]+S.clear[i][2]+S.clear[i][3]+S.clear[i][4] end S.spin_S={S.spin_0,S.spin_1,S.spin_2,S.spin_3} S.spin={{},{},{},{},{},{},{}} A,B,C,D=int(S.spin_0/7),int(S.spin_1/7),int(S.spin_2/7),int(S.spin_3/7) for i=1,7 do S.spin[i][1]=A S.spin[i][2]=B S.spin[i][3]=C S.spin[i][4]=D end for i=1,S.spin_0%7 do S.spin[i][1]=S.spin[i][1]+1 end for i=1,S.spin_1%7 do S.spin[i][2]=S.spin[i][2]+1 end for i=1,S.spin_2%7 do S.spin[i][3]=S.spin[i][3]+1 end for i=1,S.spin_3%7 do S.spin[i][4]=S.spin[i][4]+1 end S.spin_B={} for i=1,7 do S.spin_B[i]=S.spin[i][1]+S.spin[i][2]+S.spin[i][3]+S.spin[i][4] end S.hpc=S.c elseif S.version=="Alpha V0.8.16"then for i=1,6 do S.clear[7][4]=S.clear[7][4]+S.clear[i][4] S.clear[i][4]=0 end end if not S.clear_B[8]then for i=1,7 do S.clear[i][5]=0 S.spin[i][5]=0 end for i=8,25 do S.clear[i]={0,0,0,0,0} S.spin[i]={0,0,0,0,0} S.spin_B[i]=0 S.clear_B[i]=0 end S.spin_S[5]=0 S.clear_S[5]=0 end if S.version=="Alpha V0.8.18"or S.version=="Alpha V0.8.19"then S.clear[3],S.clear[4]=S.clear[4],S.clear[3] S.spin[3],S.spin[4]=S.spin[4],S.spin[3] S.clear_B[3],S.clear_B[4]=S.clear_B[4],S.clear_B[3] S.spin_B[3],S.spin_B[4]=S.spin_B[4],S.spin_B[3] end if S.version=="Alpha V0.8.22"then S.off=S.recv-S.pend end while #modeRanks>73 do table.remove(modeRanks) end if modeRanks[73]==6 then modeRanks[73]=0 end if setting.skin[10]==5 then setting.skin[10],setting.skin[11]=1,5 end if S.version~=gameVersion then S.version=gameVersion TEXT.show(text.newVersion,640,200,30,"fly",.3) end S=nil