diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e3e39829..40c2836e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,6 +9,14 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v2 + - name: GetCommitID + run: | + $CommitID=git rev-parse --short "${{ GITHUB.SHA }}" + echo "CommitID=${CommitID}" >> $env:GITHUB_ENV + - name: GetVersion + run: | + $Version=python .github/workflows/getVersion.py + echo "Version=${Version}" >> $env:GITHUB_ENV - name: Download love run: | curl -OL https://github.com/love2d/love/releases/download/11.3/love-11.3-win64.zip @@ -26,16 +34,24 @@ jobs: copy /b love-11.3-win64\love.exe + game.love love-11.3-win64\Techmino.exe del love-11.3-win64\love.exe del love-11.3-win64\lovec.exe - - name: Artifact - uses: actions/upload-artifact@v1.0.0 + - name: Upload + uses: actions/upload-artifact@v2 with: - name: Windows + name: Techmino_${{ env.Version }}_${{ env.CommitID }}_Windows path: love-11.3-win64 build-linux: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 + - name: GetCommitID + run: | + CommitID=$(git rev-parse --short "${{ GITHUB.SHA }}") + echo "CommitID=${CommitID}" >> $GITHUB_ENV + - name: GetVersion + run: | + Version=$(python3 .github/workflows/getVersion.py) + echo "Version=${Version}" >> $GITHUB_ENV - name: Download AppImageKit run: curl -OL https://github.com/AppImage/AppImageKit/releases/download/12/appimagetool-x86_64.AppImage - name: Unpack and Repack @@ -49,16 +65,24 @@ jobs: cd ../../../.. cp -r document media parts Zframework conf.lua font.ttf main.lua squashfs-root/usr/share/Techmino ./appimagetool-x86_64.AppImage squashfs-root Techmino.AppImage - - name: Artifact + - name: Upload uses: actions/upload-artifact@v2 with: - name: Linux + name: Techmino_${{ env.Version }}_${{ env.CommitID }}_Linux path: Techmino.AppImage build-android: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 + - name: GetCommitID + run: | + CommitID=$(git rev-parse --short "${{ GITHUB.SHA }}") + echo "CommitID=${CommitID}" >> $GITHUB_ENV + - name: GetVersion + run: | + Version=$(python3 .github/workflows/getVersion.py) + echo "Version=${Version}" >> $GITHUB_ENV - name: Download Apktool run: curl -OL https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.5.0.jar - name: Unpack and Repack @@ -68,7 +92,7 @@ jobs: 7z x -o. apk/assets/game.love libAndroid rm apk/assets/game.love Techmino.apk 7z a -tzip apk/assets/game.love document libAndroid media parts Zframework conf.lua font.ttf main.lua - python3 .github/workflows/updateVersion.py + python3 .github/workflows/updateAndroidVersion.py java -jar apktool_2.5.0.jar b -o Techmino.apk apk - uses: 26F-Studio/sign-android-release@master name: Sign app APK @@ -81,18 +105,27 @@ jobs: keyPassword: ${{ secrets.KEY_PASSWORD }} env: BUILD_TOOLS_VERSION: "30.0.2" - - name: Artifact + - name: Upload uses: actions/upload-artifact@v2 with: - name: Android + name: Techmino_${{ env.Version }}_${{ env.CommitID }}_Android path: ${{steps.sign_app.outputs.signedReleaseFile}} build-macOS: runs-on: macos-10.15 steps: - uses: actions/checkout@v2 + - name: GetCommitID + run: | + CommitID=$(git rev-parse --short "${{ GITHUB.SHA }}") + echo "CommitID=${CommitID}" >> $GITHUB_ENV + - name: GetVersion + run: | + Version=$(python3 .github/workflows/getVersion.py) + echo "Version=${Version}" >> $GITHUB_ENV - name: Pack love - run : zip -r Techmino.love document media parts Zframework conf.lua font.ttf main.lua + run: | + zip -r Techmino.love document media parts Zframework conf.lua font.ttf main.lua - name: Download template run: | curl -OL https://github.com/26F-Studio/Techmino/releases/download/v0.15.1/Techmino.app.zip @@ -116,11 +149,8 @@ jobs: security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k Techminohaowan build.keychain /usr/bin/codesign --force --deep -s 79B81FC5EA155243C973B5417B0996501F00EF55 ./Techmino.app -v - - name: Pack Techmino - run: | - zip -r -y Techmino-Packed.app.zip Techmino.app - - name: Artifact - uses: actions/upload-artifact@v1.0.0 + - name: Upload + uses: actions/upload-artifact@v2 with: - name: macOS - path: Techmino-Packed.app.zip + name: Techmino_${{ env.Version }}_${{ env.CommitID }}_macOS + path: Techmino-Packed.app \ No newline at end of file diff --git a/.github/workflows/getVersion.py b/.github/workflows/getVersion.py new file mode 100644 index 00000000..772c2b3a --- /dev/null +++ b/.github/workflows/getVersion.py @@ -0,0 +1,11 @@ +import re +def getVersion(): + with open("conf.lua", "r", encoding="utf-8") as file: + data = file.read() + versionCode = re.search("build=(\\d+)", data).group() + versionName = re.search('(?<=string=").*(?=@)', data).group() + return versionCode, versionName + +if __name__ == "__main__": + versionCode, versionName = getVersion() + print (versionName) \ No newline at end of file diff --git a/.github/workflows/updateVersion.py b/.github/workflows/updateAndroidVersion.py similarity index 57% rename from .github/workflows/updateVersion.py rename to .github/workflows/updateAndroidVersion.py index 6d34ddbe..e785d166 100644 --- a/.github/workflows/updateVersion.py +++ b/.github/workflows/updateAndroidVersion.py @@ -1,12 +1,12 @@ import re -with open("conf.lua", "r") as file: - data = file.read() -versionCode = re.search("build=(\\d+)", data).group(1) -versionName = re.search('short="([^"]+)', data).group(1) +import getVersion + +versionCode, versionName = getVersion.getVersion() + with open("apk/apktool.yml", "r+") as file: data = file.read() data = re.sub("versionCode:.+", f"versionCode: '{versionCode}'", data) data = re.sub("versionName:.+", f"versionName: {versionName}", data) file.seek(0) file.truncate() - file.write(data) + file.write(data) \ No newline at end of file diff --git a/.github/workflows/updateOSXVersion.py b/.github/workflows/updateOSXVersion.py index c550e324..667b7751 100644 --- a/.github/workflows/updateOSXVersion.py +++ b/.github/workflows/updateOSXVersion.py @@ -1,4 +1,5 @@ import re, datetime +import getVersion info = r""" @@ -57,9 +58,8 @@ info = r""" """ -with open("conf.lua", "r") as file: - data = file.read() -versionName = re.search('short="([^"]+)', data).group(1) +versionCode, versionName = getVersion.getVersion() + print("Updating to", versionName) with open("Techmino.app/Contents/info.plist", "w") as file: file.write(info % (versionName, datetime.datetime.today().year)) diff --git a/README.md b/README.md index 25823f3f..cf448641 100644 --- a/README.md +++ b/README.md @@ -5,4 +5,4 @@ 集合各种现代方块规则,更多玩法,全新体验。 -官网(建设中) https://home.techmino.org +官网(建设中) http://home.techmino.org diff --git a/Zframework/background.lua b/Zframework/background.lua index d9011323..f3f5674e 100644 --- a/Zframework/background.lua +++ b/Zframework/background.lua @@ -1,6 +1,6 @@ local gc_clear=love.graphics.clear local BGs={ - none={draw=function()gc_clear(.15,.15,.15)end} + none={draw=function()gc_clear(.08,.08,.084)end} } local BGlist={'none'} local BG={ diff --git a/Zframework/color.lua b/Zframework/color.lua index 6c1069fb..c236ea7e 100644 --- a/Zframework/color.lua +++ b/Zframework/color.lua @@ -1,60 +1,60 @@ local COLOR={ - red= {1.0, 0.0, 0.0}, - fire= {1.0, 0.4, 0.0}, - orange= {1.0, 0.6, 0.0}, - yellow= {1.0, 1.0, 0.0}, - lime= {0.7, 1.0, 0.0}, - jade= {0.5, 1.0, 0.0}, - green= {0.0, 1.0, 0.0}, - aqua= {0.0, 1.0, 0.6}, - cyan= {0.0, 1.0, 1.0}, - navy= {0.0, 0.7, 1.0}, - sea= {0.0, 0.4, 1.0}, - blue= {0.2, 0.2, 1.0}, - violet= {0.4, 0.0, 1.0}, - purple= {0.7, 0.0, 1.0}, - magenta= {1.0, 0.0, 1.0}, - wine= {1.0, 0.0, 0.5}, + red= {.92, .12, .12}, + fire= {.92, 0.4, .12}, + orange= {.92, 0.6, .12}, + yellow= {.92, .92, .12}, + lime= {0.7, .92, .12}, + jade= {0.5, .92, .12}, + green= {.12, .92, .12}, + aqua= {.12, .92, 0.6}, + cyan= {.12, .92, .92}, + navy= {.12, 0.7, .92}, + sea= {.12, 0.4, .92}, + blue= {0.2, 0.2, .92}, + violet= {0.4, .12, .92}, + purple= {0.7, .12, .92}, + magenta= {.92, .12, .92}, + wine= {.92, .12, 0.5}, - lRed= {1.0, 0.5, 0.5}, - lFire= {1.0, 0.7, 0.5}, - lOrange= {1.0, 0.8, 0.3}, - lYellow= {1.0, 1.0, 0.5}, - lLime= {0.8, 1.0, 0.4}, - lJade= {0.6, 1.0, 0.4}, - lGreen= {0.5, 1.0, 0.5}, - lAqua= {0.4, 1.0, 0.7}, - lCyan= {0.5, 1.0, 1.0}, - lNavy= {0.5, 0.8, 1.0}, - lSea= {0.4, 0.7, 1.0}, - lBlue= {0.7, 0.7, 1.0}, - lViolet= {0.7, 0.4, 1.0}, - lPurple= {0.8, 0.4, 1.0}, - lMagenta= {1.0, 0.5, 1.0}, - lWine= {1.0, 0.4, 0.7}, + lRed= {.95, 0.5, 0.5}, + lFire= {.95, 0.7, 0.5}, + lOrange= {.95, 0.8, 0.3}, + lYellow= {.95, .95, 0.5}, + lLime= {0.8, .95, 0.4}, + lJade= {0.6, .95, 0.4}, + lGreen= {0.5, .95, 0.5}, + lAqua= {0.4, .95, 0.7}, + lCyan= {0.5, .95, .95}, + lNavy= {0.4, .85, .95}, + lSea= {0.5, 0.7, .95}, + lBlue= {0.7, 0.7, .95}, + lViolet= {0.7, 0.4, .95}, + lPurple= {0.8, 0.4, .95}, + lMagenta= {.95, 0.5, .95}, + lWine= {.95, 0.4, 0.7}, - dRed= {0.6, 0.0, 0.0}, - dFire= {0.6, 0.3, 0.0}, - dOrange= {0.6, 0.4, 0.0}, - dYellow= {0.6, 0.6, 0.0}, - dLime= {0.5, 0.6, 0.0}, - dJade= {0.3, 0.6, 0.0}, - dGreen= {0.0, 0.6, 0.0}, - dAqua= {0.0, 0.6, 0.4}, - dCyan= {0.0, 0.6, 0.6}, - dNavy= {0.0, 0.4, 0.6}, - dSea= {0.0, 0.2, 0.6}, + dRed= {0.6, .08, .08}, + dFire= {0.6, 0.3, .08}, + dOrange= {0.6, 0.4, .08}, + dYellow= {0.6, 0.6, .08}, + dLime= {0.5, 0.6, .08}, + dJade= {0.3, 0.6, .08}, + dGreen= {.08, 0.6, .08}, + dAqua= {.08, 0.6, 0.4}, + dCyan= {.08, 0.6, 0.6}, + dNavy= {.08, 0.4, 0.6}, + dSea= {.08, 0.2, 0.6}, dBlue= {0.1, 0.1, 0.6}, - dViolet= {0.2, 0.0, 0.6}, - dPurple= {0.4, 0.0, 0.6}, - dMagenta= {0.6, 0.0, 0.6}, - dWine= {0.6, 0.0, 0.3}, + dViolet= {0.2, .08, 0.6}, + dPurple= {0.4, .08, 0.6}, + dMagenta= {0.6, .08, 0.6}, + dWine= {0.6, .08, 0.3}, - black= {0.0, 0.0, 0.0}, + black= {.05, .05, .05}, dGray= {0.3, 0.3, 0.3}, gray= {0.6, 0.6, 0.6}, lGray= {0.8, 0.8, 0.8}, - white= {1.0, 1.0, 1.0}, + white= {.97, .97, .97}, } for k,v in next,{ R='red',F='fire',O='orange',Y='yellow',L='lime',J='jade',G='green',A='aqua',C='cyan',N='navy',S='sea',B='blue',V='violet',P='purple',M='magenta',W='wine', diff --git a/Zframework/gcExtend.lua b/Zframework/gcExtend.lua index be81626e..c1679335 100644 --- a/Zframework/gcExtend.lua +++ b/Zframework/gcExtend.lua @@ -1,6 +1,7 @@ -local setColor=love.graphics.setColor -local printf=love.graphics.printf -local draw=love.graphics.draw +local gc=love.graphics +local setColor=gc.setColor +local printf=gc.printf +local draw=gc.draw local GC={} function GC.str(obj,x,y)printf(obj,x-626,y,1252,'center')end function GC.simpX(obj,x,y)draw(obj,x-obj:getWidth()*.5,y)end @@ -31,4 +32,129 @@ function GC.shadedPrint(str,x,y,mode,d,clr1,clr2) setColor(clr2 or COLOR.Z) printf(str,x,y,w,mode) end +function GC.regularPolygon(mode,x,y,R,segments,r,phase) + local X,Y={},{} + local ang=phase or 0 + local angStep=6.283185307179586/segments + for i=1,segments do + X[i]=x+R*math.cos(ang) + Y[i]=y+R*math.sin(ang) + ang=ang+angStep + end + X[segments+1]=x+R*math.cos(ang) + Y[segments+1]=y+R*math.sin(ang) + local halfAng=6.283185307179586/segments/2 + local erasedLen=r*math.tan(halfAng) + if mode=='line'then + erasedLen=erasedLen+1--Fix 1px cover + for i=1,segments do + --Line + local x1,y1,x2,y2=X[i],Y[i],X[i+1],Y[i+1] + local dir=math.atan2(y2-y1,x2-x1) + gc.line(x1+erasedLen*math.cos(dir),y1+erasedLen*math.sin(dir),x2-erasedLen*math.cos(dir),y2-erasedLen*math.sin(dir)) + + --Arc + ang=ang+angStep + local R2=R-r/math.cos(halfAng) + local arcCX,arcCY=x+R2*math.cos(ang),y+R2*math.sin(ang) + gc.arc('line','open',arcCX,arcCY,r,ang-halfAng,ang+halfAng) + end + elseif mode=='fill'then + local L={} + for i=1,segments do + --Line + local x1,y1,x2,y2=X[i],Y[i],X[i+1],Y[i+1] + local dir=math.atan2(y2-y1,x2-x1) + table.insert(L,x1+erasedLen*math.cos(dir)) + table.insert(L,y1+erasedLen*math.sin(dir)) + table.insert(L,x2-erasedLen*math.cos(dir)) + table.insert(L,y2-erasedLen*math.sin(dir)) + + --Arc + ang=ang+angStep + local R2=R-r/math.cos(halfAng) + local arcCX,arcCY=x+R2*math.cos(ang),y+R2*math.sin(ang) + gc.arc('fill','open',arcCX,arcCY,r,ang-halfAng,ang+halfAng) + end + gc.polygon('fill',L) + else + error("Draw mode should be 'line' or 'fill'") + end +end +do--function GC.DO(L) + local cmds={ + origin="origin", + move="translate", + scale="scale", + rotate="rotate", + shear="shear", + clear="clear", + + setCL="setColor", + setCM="setColorMask", + setLW="setLineWidth", + setLS="setLineStyle", + setLJ="setLineJoin", + + print="print", + setFT=setFont, + mText=GC.str, + mDraw=GC.draw, + mOutDraw=GC.outDraw, + + draw="draw", + line="line", + fRect=function(...)gc.rectangle('fill',...)end, + dRect=function(...)gc.rectangle('line',...)end, + fCirc=function(...)gc.circle('fill',...)end, + dCirc=function(...)gc.circle('line',...)end, + fElps=function(...)gc.ellipse('fill',...)end, + dElps=function(...)gc.ellipse('line',...)end, + fPoly=function(...)gc.polygon('fill',...)end, + dPoly=function(...)gc.polygon('line',...)end, + + dPie=function(...)gc.arc('line',...)end, + dArc=function(...)gc.arc('line','open',...)end, + dBow=function(...)gc.arc('line','closed',...)end, + fPie=function(...)gc.arc('fill',...)end, + fArc=function(...)gc.arc('fill','open',...)end, + fBow=function(...)gc.arc('fill','closed',...)end, + + fRPol=function(...)GC.regularPolygon('fill',...)end, + dRPol=function(...)GC.regularPolygon('line',...)end, + } + local sizeLimit=gc.getSystemLimits().texturesize + function GC.DO(L) + gc.push() + ::REPEAT_tryAgain:: + local success,canvas=pcall(gc.newCanvas,math.min(L[1],sizeLimit),math.min(L[2],sizeLimit)) + if not success then + sizeLimit=math.floor(sizeLimit*.8) + goto REPEAT_tryAgain + end + gc.setCanvas(canvas) + gc.origin() + gc.setColor(1,1,1) + gc.setLineWidth(1) + for i=3,#L do + local cmd=L[i][1] + if type(cmd)=='boolean'and cmd then + table.remove(L[i],1) + cmd=L[i][1] + end + if type(cmd)=='string'then + local func=cmds[cmd] + if type(func)=='string'then func=gc[func]end + if func then + func(unpack(L[i],2)) + else + error("No gc command: "..cmd) + end + end + end + gc.setCanvas() + gc.pop() + return canvas + end +end return GC \ No newline at end of file diff --git a/Zframework/init.lua b/Zframework/init.lua index fb83f771..bffc26a1 100644 --- a/Zframework/init.lua +++ b/Zframework/init.lua @@ -25,7 +25,6 @@ VIB= require'Zframework.vibrate' SFX= require'Zframework.sfx' LIGHT= require'Zframework.light' -DOGC= require'Zframework.doGC' BG= require'Zframework.background' WIDGET= require'Zframework.widget' TEXT= require'Zframework.text' @@ -66,7 +65,7 @@ joysticks={} local devMode -local batteryImg=DOGC{31,20, +local batteryImg=GC.DO{31,20, {'fRect',1,0,26,2}, {'fRect',1,18,26,2}, {'fRect',0,1,2,18}, @@ -97,12 +96,12 @@ local function updatePowerInfo() gc.rectangle('fill',76,6,pow*.22,14) if pow<100 then setFont(15) - gc_setColor(0,0,0) + gc.setColor(COLOR.D) gc_print(pow,77,1) gc_print(pow,77,3) gc_print(pow,79,1) gc_print(pow,79,3) - gc_setColor(1,1,1) + gc_setColor(COLOR.Z) gc_print(pow,78,2) end end @@ -149,10 +148,10 @@ end function love.mousereleased(x,y,k,touch) if touch or SCN.swapping then return end mx,my=ITP(xOy,x,y) + if SCN.mouseUp then SCN.mouseUp(mx,my,k)end if WIDGET.sel then WIDGET.release(mx,my) else - if SCN.mouseUp then SCN.mouseUp(mx,my,k)end if lastX and SCN.mouseClick and(mx-lastX)^2+(my-lastY)^2<62 then SCN.mouseClick(mx,my,k) end @@ -496,28 +495,28 @@ local wsBottomImage do ins(L,{'setCL',1,1,1,i*.005}) ins(L,{'fRect',i,0,1,18}) end - wsBottomImage=DOGC(L) + wsBottomImage=GC.DO(L) end -local ws_deadImg=DOGC{20,20, +local ws_deadImg=GC.DO{20,20, {'setFT',20}, {'setCL',1,.3,.3}, {'print',"X",3,-4}, } -local ws_connectingImg=DOGC{20,20, +local ws_connectingImg=GC.DO{20,20, {'setLW',3}, {'dArc',11.5,10,6.26,1,5.28}, } -local ws_runningImg=DOGC{20,20, +local ws_runningImg=GC.DO{20,20, {'setFT',20}, {'setCL',.5,1,0}, {'print',"R",3,-4}, } -local cursorImg=DOGC{16,16, +local cursorImg=GC.DO{16,16, {'fCirc',8,8,4}, {'setCL',1,1,1,.7}, {'fCirc',8,8,6}, } -local cursor_holdImg=DOGC{16,16, +local cursor_holdImg=GC.DO{16,16, {'setLW',2}, {'dCirc',8,8,7}, {'fCirc',8,8,3}, @@ -603,7 +602,7 @@ function love.run() local R=int((time+1)/2)%7+1 _=minoColor[SETTING.skin[R]] gc_setColor(_[1],_[2],_[3],min(abs(1-time%2),.3)) - _=SCS[R][0] + _=DSCP[R][0] gc_draw(TEXTURE.miniBlock[R],mx,my,time%3.14159265359*4,16,16,_[2]+.5,#BLOCKS[R][0]-_[1]-.5) gc_setColor(1,1,1) gc_draw(ms.isDown(1)and cursor_holdImg or cursorImg,mx,my,nil,nil,nil,8,8) @@ -657,11 +656,11 @@ function love.run() gc_line(x,0,x,SCR.h) gc_line(0,y,SCR.w,y) local t=int(mx+.5)..","..int(my+.5) - gc_setColor(0,0,0) + gc.setColor(COLOR.D) gc_print(t,x+1,y) gc_print(t,x+1,y-1) gc_print(t,x+2,y-1) - gc_setColor(1,1,1) + gc_setColor(COLOR.Z) gc_print(t,x+2,y) gc_replaceTransform(SCR.xOy_dr) diff --git a/Zframework/message.lua b/Zframework/message.lua index 38894805..37c3375c 100644 --- a/Zframework/message.lua +++ b/Zframework/message.lua @@ -6,7 +6,7 @@ local ins,rem=table.insert,table.remove local mesList={} local mesIcon={ - check=DOGC{40,40, + check=GC.DO{40,40, {'setLW',10}, {'setCL',0,0,0}, {'line',4,19,15,30,36,9}, @@ -14,7 +14,7 @@ local mesIcon={ {'setCL',.7,1,.6}, {'line',5,20,15,30,35,10}, }, - info=DOGC{40,40, + info=GC.DO{40,40, {'setCL',.2,.25,.85}, {'fCirc',20,20,15}, {'setCL',1,1,1}, @@ -23,7 +23,7 @@ local mesIcon={ {'fRect',18,11,4,4}, {'fRect',18,17,4,12}, }, - broadcast=DOGC{40,40, + broadcast=GC.DO{40,40, {'setCL',1,1,1}, {'fRect',2,4,36,26,3}, {'fPoly',2,27,2,37,14,25}, @@ -31,7 +31,7 @@ local mesIcon={ {'fRect',6,11,4,4},{'fRect',14,11,19,4}, {'fRect',6,19,4,4},{'fRect',14,19,19,4}, }, - warn=DOGC{40,40, + warn=GC.DO{40,40, {'setCL',.95,.83,.4}, {'fPoly',20.5,1,0,38,40,38}, {'setCL',0,0,0}, @@ -42,7 +42,7 @@ local mesIcon={ {'fRect',18,11,5,16}, {'fRect',18,30,5,5}, }, - error=DOGC{40,40, + error=GC.DO{40,40, {'setCL',.95,.3,.3}, {'fCirc',20,20,19}, {'setCL',0,0,0}, @@ -92,7 +92,7 @@ function MES.new(icon,str,time) startTime=.5, endTime=.5, time=time or 3, - canvas=DOGC(L), + canvas=GC.DO(L), width=w,height=h, scale=h>400 and 1/math.min(h/400,2.6)or 1 }) diff --git a/Zframework/scene.lua b/Zframework/scene.lua index accaa620..bc8cb4ef 100644 --- a/Zframework/scene.lua +++ b/Zframework/scene.lua @@ -10,7 +10,7 @@ local SCN={ stat={ tar=false, --Swapping target style=false,--Swapping style - mid=false, --Loading point + changeTime=false, --Loading point time=false, --Full swap time draw=false, --Swap draw func }, @@ -50,7 +50,7 @@ end function SCN.swapUpdate() local S=SCN.stat S.time=S.time-1 - if S.time==S.mid then + if S.time==S.changeTime then SCN.init(S.tar,SCN.cur) collectgarbage() --Scene swapped this moment @@ -103,36 +103,36 @@ function SCN.pop() end local swap={ - none={1,0,function()end},--swapTime, changeTime, drawFunction - flash={8,1,function()gc.clear(1,1,1)end}, - fade={30,15,function(t) + none={duration=1,changeTime=0,draw=function()end},--swapTime, changeTime, drawFunction + flash={duration=8,changeTime=1,draw=function()gc.clear(1,1,1)end}, + fade={duration=30,changeTime=15,draw=function(t) t=t>15 and 2-t/15 or t/15 gc.setColor(0,0,0,t) gc.rectangle('fill',0,0,SCR.w,SCR.h) end}, - fade_togame={120,20,function(t) + fade_togame={duration=120,changeTime=20,draw=function(t) t=t>20 and(120-t)/100 or t/20 gc.setColor(0,0,0,t) gc.rectangle('fill',0,0,SCR.w,SCR.h) end}, - slowFade={180,90,function(t) + slowFade={duration=180,changeTime=90,draw=function(t) t=t>90 and 2-t/90 or t/90 gc.setColor(0,0,0,t) gc.rectangle('fill',0,0,SCR.w,SCR.h) end}, - swipeL={30,15,function(t) + swipeL={duration=30,changeTime=15,draw=function(t) t=t/30 gc.setColor(.1,.1,.1,1-abs(t-.5)) t=t*t*(3-2*t)*2-1 gc.rectangle('fill',t*SCR.w,0,SCR.w,SCR.h) end}, - swipeR={30,15,function(t) + swipeR={duration=30,changeTime=15,draw=function(t) t=t/30 gc.setColor(.1,.1,.1,1-abs(t-.5)) t=t*t*(2*t-3)*2+1 gc.rectangle('fill',t*SCR.w,0,SCR.w,SCR.h) end}, - swipeD={30,15,function(t) + swipeD={duration=30,changeTime=15,draw=function(t) t=t/30 gc.setColor(.1,.1,.1,1-abs(t-.5)) t=t*t*(2*t-3)*2+1 @@ -146,8 +146,9 @@ function SCN.swapTo(tar,style)--Parallel scene swapping, cannot back SCN.swapping=true local S=SCN.stat S.tar,S.style=tar,style - local s=swap[style] - S.time,S.mid,S.draw=s[1],s[2],s[3] + S.time=swap[style].duration + S.changeTime=swap[style].changeTime + S.draw=swap[style].draw end else MES.new('warn',"No Scene: "..tar) diff --git a/Zframework/tableExtend.lua b/Zframework/tableExtend.lua index be11fbe7..abbcd2a0 100644 --- a/Zframework/tableExtend.lua +++ b/Zframework/tableExtend.lua @@ -12,26 +12,28 @@ function TABLE.new(val,count) end --Get a copy of [1~#] elements -function TABLE.shift(org) +function TABLE.shift(org,depth) + if not depth then depth=1e99 end local L={} for i=1,#org do - if type(org[i])~='table'then + if type(org[i])~='table'or depth==0 then L[i]=org[i] else - L[i]=TABLE.shift(org[i]) + L[i]=TABLE.shift(org[i],depth-1) end end return L end ---Get a full copy of a table -function TABLE.copy(org) +--Get a full copy of a table, depth = how many layers will be recreate, default to inf +function TABLE.copy(org,depth) + if not depth then depth=1e99 end local L={} for k,v in next,org do - if type(v)~='table'then + if type(v)~='table'or depth==0 then L[k]=v else - L[k]=TABLE.copy(v) + L[k]=TABLE.copy(v,depth-1) end end return L diff --git a/Zframework/widget.lua b/Zframework/widget.lua index 92e89d2b..8094c9d1 100644 --- a/Zframework/widget.lua +++ b/Zframework/widget.lua @@ -19,22 +19,22 @@ local getFont,setFont,mStr=getFont,setFont,mStr local mDraw,mDraw_X,mDraw_Y=GC.draw,GC.simpX,GC.simpY local xOy=SCR.xOy -local downArrowIcon=DOGC{40,25,{'fPoly',0,0,20,25,40,0}} -local upArrowIcon=DOGC{40,25,{'fPoly',0,25,20,0,40,25}} -local clearIcon=DOGC{40,40, +local downArrowIcon=GC.DO{40,25,{'fPoly',0,0,20,25,40,0}} +local upArrowIcon=GC.DO{40,25,{'fPoly',0,25,20,0,40,25}} +local clearIcon=GC.DO{40,40, {'fRect',16,5,8,3}, {'fRect',8,8,24,3}, {'fRect',11,14,18,21}, } -local sureIcon=DOGC{40,40, +local sureIcon=GC.DO{40,40, {'setFT',35}, {'mText',"?",20,-6}, } -local smallerThen=DOGC{20,20, +local smallerThen=GC.DO{20,20, {'setLW',5}, {'line',18,2,1,10,18,18}, } -local largerThen=DOGC{20,20, +local largerThen=GC.DO{20,20, {'setLW',5}, {'line',2,2,19,10,2,18}, } @@ -166,39 +166,43 @@ function button:draw() local ATV=self.ATV local c=self.color local r,g,b=c[1],c[2],c[3] - gc_setColor(.2+r*.8,.2+g*.8,.2+b*.8,.7) - gc_rectangle('fill',x-ATV,y-ATV,w+2*ATV,h+2*ATV) + + --Button + gc_setColor(.15+r*.7,.15+g*.7,.15+b*.7,.9) + gc_rectangle('fill',x-ATV,y-ATV,w+2*ATV,h+2*ATV,3) if ATV>0 then - gc_setLineWidth(4) - gc_setColor(1,1,1,ATV*.125) - gc_rectangle('line',x-ATV+2,y-ATV+2,w+2*ATV-4,h+2*ATV-4) + gc_setLineWidth(2) + gc_setColor(.97,.97,.975,ATV*.125) + gc_rectangle('line',x-ATV+2,y-ATV+2,w+2*ATV-4,h+2*ATV-4,3) end + + --Object local obj=self.obj local y0=y+h*.5-ATV*.5 gc_setColor(1,1,1,.2+ATV*.05) if self.align=='M'then local x0=x+w*.5 - mDraw(obj,x0-1.5,y0-1.5) - mDraw(obj,x0-1.5,y0+1.5) - mDraw(obj,x0+1.5,y0-1.5) - mDraw(obj,x0+1.5,y0+1.5) - gc_setColor(r*.5,g*.5,b*.5) + mDraw(obj,x0-1,y0-1) + mDraw(obj,x0-1,y0+1) + mDraw(obj,x0+1,y0-1) + mDraw(obj,x0+1,y0+1) + gc_setColor(r*.55,g*.55,b*.55) mDraw(obj,x0,y0) elseif self.align=='L'then local edge=self.edge - mDraw_Y(obj,x+edge-1.5,y0-1.5) - mDraw_Y(obj,x+edge-1.5,y0+1.5) - mDraw_Y(obj,x+edge+1.5,y0-1.5) - mDraw_Y(obj,x+edge+1.5,y0+1.5) - gc_setColor(r*.5,g*.5,b*.5) + mDraw_Y(obj,x+edge-1,y0-1) + mDraw_Y(obj,x+edge-1,y0+1) + mDraw_Y(obj,x+edge+1,y0-1) + mDraw_Y(obj,x+edge+1,y0+1) + gc_setColor(r*.55,g*.55,b*.55) mDraw_Y(obj,x+edge,y0) elseif self.align=='R'then local x0=x+w-self.edge-obj:getWidth() - mDraw_Y(obj,x0-1.5,y0-1.5) - mDraw_Y(obj,x0-1.5,y0+1.5) - mDraw_Y(obj,x0+1.5,y0-1.5) - mDraw_Y(obj,x0+1.5,y0+1.5) - gc_setColor(r*.5,g*.5,b*.5) + mDraw_Y(obj,x0-1,y0-1) + mDraw_Y(obj,x0-1,y0+1) + mDraw_Y(obj,x0+1,y0-1) + mDraw_Y(obj,x0+1,y0+1) + gc_setColor(r*.55,g*.55,b*.55) mDraw_Y(obj,x0,y0) end end @@ -287,21 +291,38 @@ function key:draw() local x,y,w,h=self.x,self.y,self.w,self.h local ATV=self.ATV local c=self.color + local align=self.align local r,g,b=c[1],c[2],c[3] - gc_setColor(1,1,1,ATV*.1) - gc_rectangle('fill',x,y,w,h) + --Frame + if not self.noFrame then + gc_setColor(.2+r*.8,.2+g*.8,.2+b*.8,.7) + gc_setLineWidth(2) + gc_rectangle('line',x,y,w,h,3) + end - gc_setColor(.2+r*.8,.2+g*.8,.2+b*.8,.7) - gc_setLineWidth(4) - gc_rectangle('line',x,y,w,h) + --Fill + if self.fShade then + gc_setColor(r,g,b,ATV*.25) + if align=='M'then + mDraw(self.fShade,x+w*.5,y+h*.5) + elseif align=='L'then + mDraw_Y(self.fShade,x+self.edge,y+h*.5) + elseif align=='R'then + mDraw_Y(self.fShade,x+w-self.edge-self.fShade:getWidth(),y+h*.5) + end + else + gc_setColor(1,1,1,ATV*.05) + gc_rectangle('fill',x,y,w,h,3) + end - gc_setColor(r,g,b,1.2) - if self.align=='M'then + --Object + gc_setColor(r,g,b) + if align=='M'then mDraw(self.obj,x+w*.5,y+h*.5) - elseif self.align=='L'then + elseif align=='L'then mDraw_Y(self.obj,x+self.edge,y+h*.5) - elseif self.align=='R'then + elseif align=='R'then mDraw_Y(self.obj,x+w-self.edge-self.obj:getWidth(),y+h*.5) end end @@ -312,7 +333,7 @@ function key:press(_,_,k) self.code(k) if self.sound then SFX.play('key')end end -function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,color][,font=30][,sound=true][,align='M'][,edge=0],code[,hideF][,hide] +function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,fShade][,noFrame][,color][,font=30][,sound=true][,align='M'][,edge=0],code[,hideF][,hide] if not D.h then D.h=D.w end local _={ name= D.name or"_", @@ -331,6 +352,8 @@ function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,color][,font=30][,sound=true] }, fText= D.fText, + fShade= D.fShade, + noFrame=D.noFrame, color= D.color and(COLOR[D.color]or D.color)or COLOR.Z, font= D.font or 30, sound= D.sound~=false, @@ -375,22 +398,22 @@ function switch:draw() local x,y=self.x,self.y-25 local ATV=self.ATV + --Frame + gc_setLineWidth(2) + gc_setColor(1,1,1,.6+ATV*.1) + gc_rectangle('line',x,y,50,50,3) + --Checked if ATV>0 then - gc_setColor(1,1,1,ATV*.08) - gc_rectangle('fill',x,y,50,50) + gc_setColor(1,1,1,ATV*.06) + gc_rectangle('fill',x,y,50,50,3) end if self.CHK>0 then gc_setColor(.9,1,.9,self.CHK/6) - gc_setLineWidth(6) + gc_setLineWidth(5) gc_line(x+5,y+25,x+18,y+38,x+45,y+11) end - --Frame - gc_setLineWidth(4) - gc_setColor(1,1,1,.6+ATV*.05) - gc_rectangle('line',x,y,50,50) - --Drawable gc_setColor(self.color) mDraw_Y(self.obj,x-12-ATV-self.obj:getWidth(),y+25) @@ -501,16 +524,19 @@ function slider:draw() local cx=x+(x2-x)*self.pos/self.unit local bx,by,bw,bh=cx-10-ATV*.5,y-16-ATV,20+ATV,32+2*ATV gc_setColor(.8,.8,.8) - gc_rectangle('fill',bx,by,bw,bh) + gc_rectangle('fill',bx,by,bw,bh,3) + --Glow if ATV>0 then gc_setLineWidth(2) - gc_setColor(1,1,1,ATV*.16) - gc_rectangle('line',bx+1,by+1,bw-2,bh-2) + gc_setColor(.97,.97,.975,ATV*.16) + gc_rectangle('line',bx+1,by+1,bw-2,bh-2,3) end + + --Float text if self.TAT>0 and self.show then setFont(25) - gc_setColor(1,1,1,self.TAT/180) + gc_setColor(.97,.97,.975,self.TAT/180) mStr(self:show(),cx,by-30) end @@ -657,10 +683,12 @@ function selector:draw() local w=self.w local ATV=self.ATV + --Frame gc_setColor(1,1,1,.6+ATV*.1) - gc_setLineWidth(3) - gc_rectangle('line',x,y,w,60) + gc_setLineWidth(2) + gc_rectangle('line',x,y,w,60,3) + --Arrow gc_setColor(1,1,1,.2+ATV*.1) local t=(TIME()%.5)^.5 if self.select>1 then @@ -815,11 +843,11 @@ function inputBox:draw() local ATV=self.ATV gc_setColor(1,1,1,ATV*.08) - gc_rectangle('fill',x,y,w,h) + gc_rectangle('fill',x,y,w,h,3) gc_setColor(1,1,1) gc_setLineWidth(3) - gc_rectangle('line',x,y,w,h) + gc_rectangle('line',x,y,w,h,3) --Drawable setFont(self.font) @@ -971,12 +999,12 @@ function textBox:draw() --Background gc_setColor(0,0,0,.4) - gc_rectangle('fill',x,y,w,h) + gc_rectangle('fill',x,y,w,h,3) --Frame - gc_setLineWidth(3) + gc_setLineWidth(2) gc_setColor(WIDGET.sel==self and COLOR.lN or COLOR.Z) - gc_rectangle('line',x,y,w,h) + gc_rectangle('line',x,y,w,h,3) --Texts setFont(self.font) @@ -987,12 +1015,12 @@ function textBox:draw() gc_setColor(1,1,1) if #texts>cap then local len=h*h/(#texts*lineH) - gc_rectangle('fill',-15,(h-len)*scrollPos/((#texts-cap)*lineH),12,len) + gc_rectangle('fill',-15,(h-len)*scrollPos/((#texts-cap)*lineH),12,len,3) end --Clear button if not self.fix then - gc_rectangle('line',w-40,0,40,40) + gc_rectangle('line',w-40,0,40,40,3) gc_draw(self.sure==0 and clearIcon or sureIcon,w-40,0) end @@ -1144,14 +1172,14 @@ function listBox:draw() --Frame gc_setColor(WIDGET.sel==self and COLOR.lN or COLOR.Z) - gc_setLineWidth(3) - gc_rectangle('line',0,0,w,h) + gc_setLineWidth(2) + gc_rectangle('line',0,0,w,h,3) --Slider if #list>cap then gc_setColor(1,1,1) local len=h*h/(#list*lineH) - gc_rectangle('fill',-15,(h-len)*scrollPos/((#list-cap)*lineH),12,len) + gc_rectangle('fill',-15,(h-len)*scrollPos/((#list-cap)*lineH),12,len,3) end --List @@ -1443,7 +1471,7 @@ local widgetCover do ins(L,{'fRect',0,i,1,2}) ins(L,{'fRect',0,360-i,1,2}) end - widgetCover=DOGC(L) + widgetCover=GC.DO(L) end local scr_w,scr_h function WIDGET.resize(w,h) diff --git a/conf.lua b/conf.lua index 7b908fbf..310b0717 100644 --- a/conf.lua +++ b/conf.lua @@ -1,8 +1,7 @@ VERSION={ - build=353, + build=356, code=1600, - short="V0.16.0", - string="Alpha V0.16.0", + string="V0.16.0@DEV", room="V1.1", name="空间站 Space station", } diff --git a/document/mode.txt b/document/mode.txt index 0488c86c..e0f52a1e 100644 --- a/document/mode.txt +++ b/document/mode.txt @@ -138,7 +138,7 @@ return{--返回一个table,你也可以在之前定义一些常量或者函数 setFont(55) local r=40-P.stat.row if r<0 then r=0 end - mStr(r,69,265)--把计算出来的剩余行数r显示出来 + mStr(r,63,265)--把计算出来的剩余行数r显示出来 PLY.draw.drawTargetLine(P,r)--使用自带的境界高度线绘制函数 end, score=function(P)return{P.stat.time,P.stat.piece}end,--游戏结束时需要保存的本局关键信息 diff --git a/main.lua b/main.lua index 6ca7aaf3..263f2c3a 100644 --- a/main.lua +++ b/main.lua @@ -78,6 +78,7 @@ NET= require'parts.net' VK= require'parts.virtualKey' AIFUNC= require'parts.ai' AIBUILDER= require'parts.AITemplate' +RSlist= require'parts.RSlist'DSCP=RSlist.TRS.centerPos PLY= require'parts.player' netPLY= require'parts.netPlayer' MODES= require'parts.modes' @@ -300,7 +301,11 @@ do SETTING.dataSaving=nil if not SETTING.VKSkin then SETTING.VKSkin=1 end for _,v in next,SETTING.skin do if v<1 or v>17 then v=17 end end - if SETTING.RS=='ZRS'or SETTING.RS=='BRS'then SETTING.RS='BiRS'end + if + SETTING.RS=='ZRS'or SETTING.RS=='BRS'or + SETTING.RS=='ASCplus'or SETTING.RS=='C2sym'or + SETTING.RS=='Classic' + then SETTING.RS='TRS'end if SETTING.ghostType=='greyCell'then SETTING.ghostType='grayCell'end if type(SETTING.skinSet)=='number'then SETTING.skinSet='crystal_scf'end if not TABLE.find({8,10,13,17,22,29,37,47,62,80,100},SETTING.frameMul)then SETTING.frameMul=100 end diff --git a/parts/RSlist.lua b/parts/RSlist.lua new file mode 100644 index 00000000..dd84c079 --- /dev/null +++ b/parts/RSlist.lua @@ -0,0 +1,802 @@ +local defaultCenterTex=GC.DO{1,1}--No texture +local defaultCenterPos={--For SRS-like RSs + --Tetromino + {[0]={0,1},{1,0},{1,1},{1,1}},--Z + {[0]={0,1},{1,0},{1,1},{1,1}},--S + {[0]={0,1},{1,0},{1,1},{1,1}},--L + {[0]={0,1},{1,0},{1,1},{1,1}},--J + {[0]={0,1},{1,0},{1,1},{1,1}},--T + {[0]={.5,.5},{.5,.5},{.5,.5},{.5,.5}},--O + {[0]={-.5,1.5},{1.5,-.5},{.5,1.5},{1.5,.5}},--I + + --Pentomino + {[0]={1,1},{1,1},{1,1},{1,1}},--Z5 + {[0]={1,1},{1,1},{1,1},{1,1}},--S5 + {[0]={0,1},{1,0},{1,1},{1,1}},--P + {[0]={0,1},{1,0},{1,1},{1,1}},--Q + {[0]={1,1},{1,1},{1,1},{1,1}},--F + {[0]={1,1},{1,1},{1,1},{1,1}},--E + {[0]={1,1},{1,1},{1,1},{1,1}},--T5 + {[0]={0,1},{1,0},{1,1},{1,1}},--U + {[0]={.5,1.5},{.5,.5},{1.5,.5},{1.5,1.5}},--V + {[0]={1,1},{1,1},{1,1},{1,1}},--W + {[0]={1,1},{1,1},{1,1},{1,1}},--X + {[0]={.5,1.5},{1.5,.5},{.5,1.5},{1.5,.5}},--J5 + {[0]={.5,1.5},{1.5,.5},{.5,1.5},{1.5,.5}},--L5 + {[0]={.5,1.5},{1.5,.5},{.5,1.5},{1.5,.5}},--R + {[0]={.5,1.5},{1.5,.5},{.5,1.5},{1.5,.5}},--Y + {[0]={.5,1.5},{1.5,.5},{.5,1.5},{1.5,.5}},--N + {[0]={.5,1.5},{1.5,.5},{.5,1.5},{1.5,.5}},--H + {[0]={0,2},{2,0},{0,2},{2,0}},--I5 + + --Trimino + {[0]={0,1},{1,0},{0,1},{1,0}},--I3 + {[0]={.5,.5},{.5,.5},{.5,.5},{.5,.5}},--C + + --Domino + {[0]={-.5,.5},{.5,-.5},{.5,.5},{.5,.5}},--I2 + + --Dot + {[0]={0,0},{0,0},{0,0},{0,0}},--O1 +} + +local map={}for x=-4,4 do map[x]={}for y=-4,4 do map[x][y]={x,y}end end + +local noKickSet,noKickSet_180 do + local Zero={map[0][0]} + noKickSet={[01]=Zero,[10]=Zero,[03]=Zero,[30]=Zero,[12]=Zero,[21]=Zero,[32]=Zero,[23]=Zero} + noKickSet_180={[01]=Zero,[10]=Zero,[03]=Zero,[30]=Zero,[12]=Zero,[21]=Zero,[32]=Zero,[23]=Zero,[02]=Zero,[20]=Zero,[13]=Zero,[31]=Zero} +end +local function strToVec(list) + for i,vecStr in next,list do + list[i]=map[tonumber(vecStr:sub(1,2))][tonumber(vecStr:sub(3,4))] + end + return list +end + +--Use this if the block is centrosymmetry, *PTR!!! +local function centroSymSet(L) + L[23]=L[01]L[32]=L[10] + L[21]=L[03]L[12]=L[30] + L[20]=L[02]L[31]=L[13] +end + +--Use this to copy a symmetry set +local function flipList(O) + if not O then return end + local L={} + for i,s in next,O do + L[i]=string.char(88-s:byte())..s:sub(2) + end + return L +end + +local function reflect(a) + return{ + [03]=flipList(a[01]), + [01]=flipList(a[03]), + [30]=flipList(a[10]), + [32]=flipList(a[12]), + [23]=flipList(a[21]), + [21]=flipList(a[23]), + [10]=flipList(a[30]), + [12]=flipList(a[32]), + [02]=flipList(a[02]), + [20]=flipList(a[20]), + [31]=flipList(a[13]), + [13]=flipList(a[31]), + } +end + +local TRS +do + local OspinList={ + {111,5,2, 0,-1,0},{111,5,2,-1,-1,0},{111,5,0,-1, 0,0},--T + {333,5,2,-1,-1,0},{333,5,2, 0,-1,0},{333,5,0, 0, 0,0},--T + {313,1,2,-1, 0,0},{313,1,2, 0,-1,0},{313,1,2, 0, 0,0},--Z + {131,2,2, 0, 0,0},{131,2,2,-1,-1,0},{131,2,2,-1, 0,0},--S + {131,1,2,-1, 0,0},{131,1,2, 0,-1,0},{131,1,2, 0, 0,0},--Z(misOrder) + {313,2,2, 0, 0,0},{313,2,2,-1,-1,0},{313,2,2,-1, 0,0},--S(misOrder) + {331,3,2, 0,-1,0},--J(farDown) + {113,4,2,-1,-1,0},--L(farDown) + {113,3,2,-1,-1,0},{113,3,0, 0, 0,0},--J + {331,4,2, 0,-1,0},{331,4,0,-1, 0,0},--L + {222,7,2,-1, 0,2},{222,7,2,-2, 0,2},{222,7,2, 0, 0,2},--I + {222,7,0,-1, 1,1},{222,7,0,-2, 1,1},{222,7,0, 0, 1,1},--I(high) + {121,6,0, 1,-1,2},{112,6,0, 2,-1,2},{122,6,0, 1,-2,2},--O + {323,6,0,-1,-1,2},{332,6,0,-2,-1,2},{322,6,0,-1,-2,2},--O + }--{keys, ID, dir, dx, dy, freeLevel (0=immovable, 1=U/D-immovable, 2=free)} + local XspinList={ + {{ 1,-1},{ 1, 0},{ 1, 1},{ 1,-2},{ 1, 2}}, + {{ 0,-1},{ 0,-2},{ 0, 1},{ 0,-2},{ 0, 2}}, + {{-1,-1},{-1, 0},{-1, 1},{-1,-2},{-1, 2}}, + } + TRS={ + centerTex=GC.DO{10,10, + {'clear',1,1,1,.2}, + {'setCL',1,1,1,.4}, + {'fRect',1,1,8,8}, + {'setCL',1,1,1,.6}, + {'fRect',2,2,6,6}, + {'setCL',1,1,1,.8}, + {'fRect',3,3,4,4}, + {'setCL',1,1,1}, + {'fRect',4,4,2,2}, + }, + centerDisp=TABLE.new(true,29), + kickTable={ + { + [01]={'+0+0','-1+0','-1+1','+0-2','-1+2','+0+1'}, + [10]={'+0+0','+1+0','+1-1','+0+2','+1-2','+1-2'}, + [03]={'+0+0','+1+0','+1+1','+0-2','+1-1','+1-2'}, + [30]={'+0+0','-1+0','-1-1','+0+2','-1+2','+0-1'}, + [12]={'+0+0','+1+0','+1-1','+0+2','+1+2'}, + [21]={'+0+0','-1+0','-1+1','+0-2','-1-2'}, + [32]={'+0+0','-1+0','-1-1','+0+2','-1+2'}, + [23]={'+0+0','+1+0','+1+1','+0-2','+1-2'}, + [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','+0-2'}, + [31]={'+0+0','+0+1','+0-1','+0+2'}, + },--Z + false,--S + { + [01]={'+0+0','-1+0','-1+1','+1+0','+0-2','+1+1'}, + [10]={'+0+0','+1+0','+1-1','-1+0','+0+2','+1+2'}, + [03]={'+0+0','+1+0','+1+1','+0-2','+1-2','+1-1','+0+1'}, + [30]={'+0+0','-1+0','-1-1','+0+2','-1+2','+0-1','-1+1'}, + [12]={'+0+0','+1+0','+1-1','+1+1','-1+0','+0-1','+0+2','+1+2'}, + [21]={'+0+0','-1+0','-1+1','-1-1','+1+0','+0+1','+0-2','-1-2'}, + [32]={'+0+0','-1+0','-1-1','+1+0','+0+2','-1+2','-1+1'}, + [23]={'+0+0','+1+0','+1-1','-1+0','+1+1','+0-2','+1-2'}, + [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'}, + },--J + false,--L + { + [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'}, + [03]={'+0+0','+1+0','+1+1','+0-2','+1-2','+0+1'}, + [30]={'+0+0','-1+0','-1-1','+0+2','-1+2','+0-1'}, + [12]={'+0+0','+1+0','+1-1','+0-1','-1-1','+0+2','+1+2','+1+1'}, + [21]={'+0+0','-1+0','+0-2','-1-2','-1-1','+1+1'}, + [32]={'+0+0','-1+0','-1-1','+0-1','+1-1','+0+2','-1+2','-1+1'}, + [23]={'+0+0','+1+0','+0-2','+1-2','+1-1','-1+1'}, + [02]={'+0+0','-1+0','+1+0','+0+1'}, + [20]={'+0+0','+1+0','-1+0','+0-1'}, + [13]={'+0+0','+0-1','+0+1','+1+0','+0-2','+0+2'}, + [31]={'+0+0','+0-1','+0+1','-1+0','+0-2','+0+2'}, + },--T + function(P,d) + if P.gameEnv.easyFresh then + P:freshBlock('fresh') + end + if P.gameEnv.ospin then + local x,y=P.curX,P.curY + if y==P.ghoY and((P:solid(x-1,y)or P:solid(x-1,y+1)))and(P:solid(x+2,y)or P:solid(x+2,y+1))then + if P.sound then SFX.play('rotatekick',nil,P:getCenterX()*.15)end + P.spinSeq=P.spinSeq%100*10+d + if P.spinSeq<100 then return end + for i=1,#OspinList do + local L=OspinList[i] + if P.spinSeq==L[1]then + local id,dir=L[2],L[3] + local bk=BLOCKS[id][dir] + x,y=P.curX+L[4],P.curY+L[5] + if + not P:ifoverlap(bk,x,y)and( + L[6]>0 or(P:ifoverlap(bk,x-1,y)and P:ifoverlap(bk,x+1,y)) + )and( + L[6]==2 or(P:ifoverlap(bk,x,y-1)and P:ifoverlap(bk,x,y+1)) + ) + then + local C=P.cur + C.id=id + C.bk=bk + P.curX,P.curY=x,y + P.cur.dir,P.cur.sc=dir,defaultCenterPos[id][dir] + P.spinLast=2 + P.stat.rotate=P.stat.rotate+1 + P:freshBlock('move') + P.spinSeq=0 + return + end + end + end + else + if P.sound then SFX.play('rotate',nil,P:getCenterX()*.15)end + P.spinSeq=0 + end + else + if P.sound then SFX.play('rotate',nil,P:getCenterX()*.15)end + end + end,--O + { + [01]={'+0+0','+0+1','+1+0','-2+0','-2-1','+1+2'}, + [10]={'+0+0','+2+0','-1+0','-1-2','+2+1','+0+1'}, + [03]={'+0+0','+0+1','-1+0','+2+0','+2-1','-1+2'}, + [30]={'+0+0','-2+0','+1+0','+1-2','-2+1','+0+1'}, + [12]={'+0+0','-1+0','+2+0','+2-1','+0-1','-1+2'}, + [21]={'+0+0','-2+0','+1+0','+1-2','-2+1','+0+1'}, + [32]={'+0+0','+1+0','-2+0','-2-1','+0-1','+1+2'}, + [23]={'+0+0','+2+0','-1+0','-1-2','+2+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','-1+0','+1+0','+0+1'}, + [31]={'+0+0','+0-1','+1+0','-1+0','+0+1'}, + },--I + { + [01]={'+0+0','+0+1','+1+1','-1+0','+0-3','+0+2','+0-2','+0+3','-1+2'}, + [10]={'+0+0','+0-1','-1-1','+1+0','+0-3','+0+2','+0-2','+0+3','+1-2'}, + [03]={'+0+0','+1+0','+0-3','+0+1','+0+2','+0+3','+1+2'}, + [30]={'+0+0','-1+0','+0+1','+0-2','+0-3','+0+3','-1-2'}, + },--Z5 + false,--S5 + { + [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'}, + [03]={'+0+0','+1+0','+1+1','+0-2','+1-2'}, + [30]={'+0+0','-1+0','-1-1','+0+2','-1+2'}, + [12]={'+0+0','+1+0','+1-1','+0+2','+1+2','+1+1'}, + [21]={'+0+0','-1+0','-1-1','-1+1','+0-2','-1-2','-1-1'}, + [32]={'+0+0','-1+0','-1-1','-1+1','+0-1','+0+2','-1+2'}, + [23]={'+0+0','+1+0','+1+1','-1+0','+0-2','+1-2'}, + [02]={'+0+0','-1+0','+0-1','+0+1'}, + [20]={'+0+0','+1+0','+0+1','+0-1'}, + [13]={'+0+0','+1+0','+0+1','-1+0'}, + [31]={'+0+0','-1+0','+0-1','+1+0'}, + },--P + false,--Q + { + [01]={'+0+0','-1+0','+1+0','-1+1','+0-2','+0-3'}, + [10]={'+0+0','+1+0','+1-1','-1+0','+0+2','+0+3'}, + [03]={'+0+0','+1+0','+1-1','+0+1','+0-2','+0-3'}, + [30]={'+0+0','-1+1','+1+0','+0-1','+0+2','+0+3'}, + [12]={'+0+0','+1+0','+0-1','-1+0','+0+2'}, + [21]={'+0+0','-1+0','+0+1','+1+0','+0-2'}, + [32]={'+0+0','-1+0','+0+1','-1+1','+1+0','+0+2','-2+0'}, + [23]={'+0+0','+1+0','+1-1','+0-1','-1+0','+0-2','+2+0'}, + [02]={'+0+0','+1+0','-1+0','-1-1'}, + [20]={'+0+0','-1+0','+1+0','+1+1'}, + [13]={'+0+0','+0-1','-1+1','+0+1'}, + [31]={'+0+0','+0-1','+1-1','+0+1'}, + },--F + false,--E + { + [01]={'+0+0','+0-1','-1-1','+1+0','+1+1','+0-3','-1+0','+0+2','-1+2'}, + [10]={'+0+0','+1+0','+0-1','-1-1','+0-2','-1+1','+0-3','+1-2','+0+1'}, + [03]={'+0+0','+0-1','+1-1','-1+0','-1+1','+0-3','+1+0','+0+2','+1+2'}, + [30]={'+0+0','-1+0','+0-1','+1-1','+0-2','+1+1','+0-3','-1-2','+0+1'}, + [12]={'+0+0','+1+0','-1+0','+0-2','+0-3','+0+1','-1+1'}, + [21]={'+0+0','+1-1','-1+0','+1+0','+0-1','+0+2','+0+3'}, + [32]={'+0+0','-1+0','+1+0','+0-2','+0-3','+0+1','+1+1'}, + [23]={'+0+0','-1-1','+1+0','-1+0','+0-1','+0+2','+0+3'}, + [02]={'+0+0','+0-1','+0+1','+0+2'}, + [20]={'+0+0','+0-1','+0+1','+0-2'}, + [13]={'+0+0','+1+0','-1+1','-2+0'}, + [31]={'+0+0','-1+0','+1+1','+2+0'}, + },--T5 + { + [01]={'+0+0','-1+0','-1+1','+0-2','-1-2'}, + [10]={'+0+0','+1+0','+1-1','+0+2','+1+2'}, + [03]={'+0+0','+1+0','+1+1','+0-2','+1-2'}, + [30]={'+0+0','-1+0','-1-1','+0-2','-1+2'}, + [12]={'+0+0','+1+0','+1-1','+1+1'}, + [21]={'+0+0','-1-1','-1+1','-1-1'}, + [32]={'+0+0','-1+0','-1-1','-1+1'}, + [23]={'+0+0','+1-1','+1+1','+1-1'}, + [02]={'+0+0','+0+1'}, + [20]={'+0+0','+0-1'}, + [13]={'+0+0','+0-1','+0+1','+1+0'}, + [31]={'+0+0','+0-1','+0+1','-1+0'}, + },--U + { + [01]={'+0+0','+0+1','-1+0','+0-2','-1-2'}, + [10]={'+0+0','+0+1','+1+0','+0-2','+1-2'}, + [03]={'+0+0','+0-1','+0+1','+0+2'}, + [30]={'+0+0','+0-1','+0+1','+0-2'}, + [12]={'+0+0','+0-1','+0+1'}, + [21]={'+0+0','+0-1','+0-2'}, + [32]={'+0+0','+1+0','-1+0'}, + [23]={'+0+0','-1+0','+1+0'}, + [02]={'+0+0','-1+1','+1-1'}, + [20]={'+0+0','+1-1','-1+1'}, + [13]={'+0+0','+1+1','-1-1'}, + [31]={'+0+0','-1-1','+1+1'}, + },--V + { + [01]={'+0+0','+0-1','-1+0','+1+0','+1-1','+0+2'}, + [10]={'+0+0','+0-1','-1-1','+0+1','+0-2','+1-2','+0+2'}, + [03]={'+0+0','+1+0','+1+1','+0-1','+0-2','+0-3','+1-1','+0+1','+0+2','+0+3'}, + [30]={'+0+0','-1+0','-1+1','+0-1','+0-2','+0-3','-1-1','+0+1','+0+2','+0+3'}, + [12]={'+0+0','+1+0','+0-1','-2+0','+1+1','-1+0','+0+1','-1-1'}, + [21]={'+0+0','-1+0','+0-1','+2+0','-1+1','+1+0','+0+1','+1-1'}, + [32]={'+0+0','+0-1','+1+0','+0+1','-1+0','-1-1','+0+2'}, + [23]={'+0+0','+0-1','+1-1','+0+1','+0-2','-1-2','+0+2'}, + [02]={'+0+0','+0-1','-1+0'}, + [20]={'+0+0','+0+1','+1+0'}, + [13]={'+0+0','+0+1','-1+0'}, + [31]={'+0+0','+0-1','+1+0'}, + },--W + function(P,d) + if P.type=='human'then SFX.play('rotate',nil,P:getCenterX()*.15)end + local kickData=XspinList[d] + for test=1,#kickData do + local x,y=P.curX+kickData[test][1],P.curY+kickData[test][2] + if not P:ifoverlap(P.cur.bk,x,y)then + P.curX,P.curY=x,y + P.spinLast=1 + P:freshBlock('move') + P.stat.rotate=P.stat.rotate+1 + return + end + end + P:freshBlock('fresh') + end,--X + { + [01]={'+0+0','-1+0','-1+1','+0-3','-1+1','-1+2','+0+1'}, + [10]={'+0+0','-1+0','+1-1','+0+3','+1-1','+1-2','+0+1'}, + [03]={'+0+0','+0-1','+1-1','-1+0','+1+1','+0-2','+1-2','+0-3','+1-3','-1+1'}, + [30]={'+0+0','+0+1','-1+1','+1+0','-1-1','+0+2','-1+2','+0+3','-1+3','+1-1'}, + [12]={'+0+0','+1+0','+1-1','+0-1','+1-2','+0-2','+1+1','-1+0','+0+2','+1+2'}, + [21]={'+0+0','-1+0','-1+1','+0+1','-1+2','+0+2','-1-1','+1+0','+0-2','-1-2'}, + [32]={'+0+0','-1+0','-1+1','-1-1','+1+0','+0+2','-1+2','+0-2'}, + [23]={'+0+0','+1+0','+1-1','+1+1','-1+0','+0-2','+1-2','+0+2'}, + [02]={'+0+0','+0-1','+1-1','-1+0','+2-1'}, + [20]={'+0+0','+0+1','-1+1','+1+0','-2+1'}, + [13]={'+0+0','-1+0','-1-1','+0+1','-1-2'}, + [31]={'+0+0','+1+0','+1+1','+0-1','+1+2'}, + },--J5 + false,--L5 + { + [01]={'+0+0','-1+0','-1+0','-1+1','+1+0','-1+2','-1-1','+0-3','+0+1'}, + [10]={'+0+0','-1+0','+1+0','+1-1','+1+0','+1-2','+1+1','+0+3','+0+1'}, + [03]={'+0+0','+0-1','+0+1','+1+0','+1-1','-1+0','+1+1','+0-2','+1-2','+0-3','+1-3','-1+1'}, + [30]={'+0+0','+0-1','+0+1','-1+0','-1+1','+1+0','-1-1','+0+2','-1+2','+0+3','-1+3','+1-1'}, + [12]={'+0+0','+1+0','+1-1','+0-1','+1-2','+0-2','+1+1','-1+0','+0+2','+1+2'}, + [21]={'+0+0','-1+0','-1+1','+0+1','-1+2','+0+2','-1-1','+1+0','+0-2','-1-2'}, + [32]={'+0+0','+0-1','-1+0','-1+1','-1-1','+1+0','+0+2','-1+2','+0-2'}, + [23]={'+0+0','+0+1','+1+0','+1-1','+1+1','-1+0','+0-2','+1-2','+0+2'}, + [02]={'+0+0','+0-1','+1-1','-1+0','+2-1','+0+1'}, + [20]={'+0+0','+0+1','-1+1','+1+0','-2+1','+0-1'}, + [13]={'+0+0','-1+0','-1-1','+0+1','-1-2'}, + [31]={'+0+0','+1+0','+1+1','+0-1','+1+2'}, + },--R + false,--Y + { + [01]={'+0+0','-1+0','-1+1','+0+1','+1+0','-1+2','-2+0','+0-2'}, + [10]={'+0+0','+1+0','-1+0','+0-1','+1-1','+1-2','+2+0','+0+2'}, + [03]={'+0+0','-1+0','+1-1','+0-2','+0-3','+1+0','+1-2','+1-3','+0+1','-1+1'}, + [30]={'+0+0','-1+0','+1-1','+1-2','+1+0','+0-2','+1-3','-1+2','+0+3','-1+3'}, + [12]={'+0+0','-1+0','+1-1','-1-1','+1-2','+1+0','+0-2','+1-3','-1+2','+0+3','-1+3'}, + [21]={'+0+0','-1+0','+1-1','+1+1','+0-2','+0-3','+1+0','+1-2','+1-3','+0+1','-1+1'}, + [32]={'+0+0','-1+0','+0-1','-1-2','+1-1','+1+0','+1+1','+0+2','+0+3'}, + [23]={'+0+0','+0-2','+0-3','+1+2','+1+0','+0+1','-1+1','+0-1','+0+2'}, + [02]={'+0+0','-1+0','+0+2','+0-1'}, + [20]={'+0+0','+1+0','+0-2','+0+1'}, + [13]={'+0+0','-1+0','-1-1','+0+1','+1+2'}, + [31]={'+0+0','+1+0','+1+1','+0-1','-1-2'}, + },--N + false,--H + { + [01]={'+0+0','+1-1','+1+0','+1+1','+0+1','-1+1','-1+0','-1-1','+0-1','+0-2','-2-1','-2-2','+2+0','+2-1','+2-2','+1+2','+2+2','-1+2','-2+2'}, + [10]={'+0+0','-1+0','-1-1','+0-1','+1-1','-2-2','-2-1','-2+0','-1-2','+0-2','+1-2','+2-2','-1+1','-2+1','-2+2','+1+0','+2+0','+2-1','+0+1','+1-1','+2-2'}, + [03]={'+0+0','-1-1','-1+0','-1+1','-0+1','+1+1','+1+0','+1-1','-0-1','-0-2','+2-1','+2-2','-2+0','-2-1','-2-2','-1+2','-2+2','+1+2','+2+2'}, + [30]={'+0+0','+1+0','+1-1','-0-1','-1-1','+2-2','+2-1','+2+0','+1-2','-0-2','-1-2','-2-2','+1+1','+2+1','+2+2','-1+0','-2+0','-2-1','+0+1','-1-1','-2-2'}, + },--I5 + { + [01]={'+0+0','-1+0','-1-1','+1+1','-1+1'}, + [10]={'+0+0','-1+0','+1+0','-1-1','+1+1'}, + [03]={'+0+0','+1+0','+1-1','-1+1','+1+1'}, + [30]={'+0+0','+1+0','-1+0','+1-1','-1+1'}, + },--I3 + { + [01]={'+0+0','-1+0','+1+0'}, + [10]={'+0+0','+1+0','-1+0'}, + [03]={'+0+0','+0+1','+0-1'}, + [30]={'+0+0','+0-1','+0+1'}, + [12]={'+0+0','+0+1','+0-1'}, + [21]={'+0+0','+0-1','+0+1'}, + [32]={'+0+0','-1+0','+1+0'}, + [23]={'+0+0','+1+0','-1+0'}, + [02]={'+0+0','+0-1','+1-1','-1-1'}, + [20]={'+0+0','+0+1','-1+1','+1+1'}, + [13]={'+0+0','+0-1','-1-1','+1-1'}, + [31]={'+0+0','+0+1','+1+1','-1+1'}, + },--C + { + [01]={'+0+0','-1+0','+0+1'}, + [10]={'+0+0','+1+0','+0+1'}, + [03]={'+0+0','+1+0','+0+1'}, + [30]={'+0+0','-1+0','+0+1'}, + [12]={'+0+0','+1+0','+0+2'}, + [21]={'+0+0','+0-1','-1+0'}, + [32]={'+0+0','-1+0','+0+2'}, + [23]={'+0+0','+0-1','-1+0'}, + [02]={'+0+0','+0-1','+0+1'}, + [20]={'+0+0','+0+1','+0-1'}, + [13]={'+0+0','-1+0','+1+0'}, + [31]={'+0+0','+1+0','-1+0'}, + },--I2 + nil,--O1 + } + } + TRS.centerDisp[6]=false + TRS.centerDisp[18]=false + TRS.kickTable[2]= reflect(TRS.kickTable[1])--SZ + TRS.kickTable[4]= reflect(TRS.kickTable[3])--LJ + TRS.kickTable[9]= reflect(TRS.kickTable[8])--S5Z5 + TRS.kickTable[11]=reflect(TRS.kickTable[10])--PQ + TRS.kickTable[13]=reflect(TRS.kickTable[12])--FE + TRS.kickTable[20]=reflect(TRS.kickTable[19])--L5J5 + TRS.kickTable[22]=reflect(TRS.kickTable[21])--RY + TRS.kickTable[24]=reflect(TRS.kickTable[23])--NH + centroSymSet(TRS.kickTable[8])centroSymSet(TRS.kickTable[9])--S5Z5 + centroSymSet(TRS.kickTable[25])centroSymSet(TRS.kickTable[26])--I5I3 +end + +local SRS +do + SRS={ + centerTex=GC.DO{10,10, + {'setCL',1,1,1,.2}, + {'fCirc',5,5,5}, + {'setCL',1,1,1,.6}, + {'fCirc',5,5,4}, + {'setCL',1,1,1,.8}, + {'fCirc',5,5,3}, + {'setCL',1,1,1}, + {'fCirc',5,5,2}, + }, + kickTable={ + { + [01]={'+0+0','-1+0','-1+1','+0-2','-1-2'}, + [10]={'+0+0','+1+0','+1-1','+0+2','+1+2'}, + [03]={'+0+0','+1+0','+1+1','+0-2','+1-2'}, + [30]={'+0+0','-1+0','-1-1','+0+2','-1+2'}, + [12]={'+0+0','+1+0','+1-1','+0+2','+1+2'}, + [21]={'+0+0','-1+0','-1+1','+0-2','-1-2'}, + [32]={'+0+0','-1+0','-1-1','+0+2','-1+2'}, + [23]={'+0+0','+1+0','+1+1','+0-2','+1-2'}, + [02]={},[20]={},[13]={},[31]={}, + },--Z + false,--S + false,--J + false,--L + false,--T + noKickSet,--O + { + [01]={'+0+0','-2+0','+1+0','-2-1','+1+2'}, + [10]={'+0+0','+2+0','-1+0','+2+1','-1-2'}, + [12]={'+0+0','-1+0','+2+0','-1+2','+2-1'}, + [21]={'+0+0','+1+0','-2+0','+1-2','-2+1'}, + [23]={'+0+0','+2+0','-1+0','+2+1','-1-2'}, + [32]={'+0+0','-2+0','+1+0','-2-1','+1+2'}, + [30]={'+0+0','+1+0','-2+0','+1-2','-2+1'}, + [03]={'+0+0','-1+0','+2+0','-1+2','+2-1'}, + [02]={},[20]={},[13]={},[31]={}, + }--I + } + } + for i=2,5 do SRS.kickTable[i]=SRS.kickTable[1]end + for i=8,29 do SRS.kickTable[i]=SRS.kickTable[1]end +end + +local BiRS +do + local R=strToVec{'+0+0','-1+0','-1-1','+0-1','-1+1','+1-1','+1+0','+0+1','+1+1','+0+2','-1+2','+1+2','-2+0','+2+0'} + local L=strToVec{'+0+0','+1+0','+1-1','+0-1','+1+1','-1-1','-1+0','+0+1','-1+1','+0+2','+1+2','-1+2','+2+0','-2+0'} + local F=strToVec{'+0+0','+0-1','+0+1','+0+2'} + local list={ + {[02]=L,[20]=R,[13]=R,[31]=L},--Z + {[02]=R,[20]=L,[13]=L,[31]=R},--S + {[02]=L,[20]=R,[13]=L,[31]=R},--J + {[02]=R,[20]=L,[13]=L,[31]=R},--L + {[02]=F,[20]=F,[13]=L,[31]=R},--T + {[02]=F,[20]=F,[13]=F,[31]=F},--O + {[02]=F,[20]=F,[13]=R,[31]=L},--I + + {[02]=L,[20]=L,[13]=R,[31]=R},--Z5 + {[02]=R,[20]=R,[13]=L,[31]=L},--S5 + {[02]=L,[20]=R,[13]=L,[31]=R},--P + {[02]=R,[20]=L,[13]=R,[31]=L},--Q + {[02]=R,[20]=L,[13]=L,[31]=R},--F + {[02]=L,[20]=R,[13]=R,[31]=L},--E + {[02]=F,[20]=F,[13]=L,[31]=R},--T5 + {[02]=F,[20]=F,[13]=L,[31]=R},--U + {[02]=R,[20]=L,[13]=L,[31]=R},--V + {[02]=R,[20]=L,[13]=L,[31]=R},--W + {[02]=F,[20]=F,[13]=F,[31]=F},--X + {[02]=L,[20]=R,[13]=R,[31]=L},--J5 + {[02]=R,[20]=L,[13]=L,[31]=R},--L5 + {[02]=L,[20]=R,[13]=R,[31]=L},--R + {[02]=R,[20]=L,[13]=L,[31]=R},--Y + {[02]=L,[20]=R,[13]=R,[31]=L},--N + {[02]=R,[20]=L,[13]=L,[31]=R},--H + {[02]=F,[20]=F,[13]=F,[31]=F},--I5 + + {[02]=F,[20]=F,[13]=F,[31]=F},--I3 + {[02]=R,[20]=L,[13]=L,[31]=R},--C + {[02]=F,[20]=F,[13]=R,[31]=L},--I2 + {[02]=F,[20]=F,[13]=F,[31]=F},--O1 + } + for i=1,29 do + local a,b=R,L + if i==6 or i==18 then a,b=b,a end + list[i][01]=a;list[i][10]=b;list[i][03]=b;list[i][30]=a + list[i][12]=a;list[i][21]=b;list[i][32]=b;list[i][23]=a + end + BiRS={ + centerTex=GC.DO{10,10, + {'setCL',1,1,1,.6}, + {'fRect',0,3,10,4}, + {'fRect',3,0,4,10}, + {'setCL',1,1,1}, + {'fRect',1,4,8,2}, + {'fRect',4,1,2,8}, + {'fRect',3,3,4,4}, + }, + kickTable=TABLE.new(function(P,d,ifpre) + local C=P.cur + local idir=(C.dir+d)%4 + local kickList=list[C.id][C.dir*10+idir] + local icb=BLOCKS[C.id][idir] + local isc=defaultCenterPos[C.id][idir] + local ix,iy=P.curX+C.sc[2]-isc[2],P.curY+C.sc[1]-isc[1] + local dx,dy=0,0 do + local pressing=P.keyPressing + if pressing[1]and P:ifoverlap(C.bk,P.curX-1,P.curY)then dx=dx-1 end + if pressing[2]and P:ifoverlap(C.bk,P.curX+1,P.curY)then dx=dx+1 end + if pressing[7]and P:ifoverlap(C.bk,P.curX,P.curY-1)then dy= -1 end + end + while true do + for test=1,#kickList do + local fdx,fdy=kickList[test][1]+dx,kickList[test][2]+dy + if + dx*fdx>=0 and + fdx^2+fdy^2<=5 and + (P.freshTime>0 or fdy<=0) + then + local x,y=ix+fdx,iy+fdy + if not P:ifoverlap(icb,x,y)then + if P.gameEnv.moveFX and P.gameEnv.block then + P:createMoveFX() + end + P.curX,P.curY,C.dir=x,y,idir + C.sc,C.bk=isc,icb + P.spinLast=test==2 and 0 or 1 + + local t=P.freshTime + if not ifpre then + P:freshBlock('move') + end + if fdy>0 and P.freshTime==t and P.curY~=P.imgY then + P.freshTime=P.freshTime-1 + end + + if P.sound then + local sfx + if ifpre then + sfx='prerotate' + elseif P:ifoverlap(icb,x,y+1)and P:ifoverlap(icb,x-1,y)and P:ifoverlap(icb,x+1,y)then + sfx='rotatekick' + if P.gameEnv.shakeFX then + if d==1 or d==3 then + P.fieldOff.va=P.fieldOff.va+(2-d)*P.gameEnv.shakeFX*6e-3 + else + P.fieldOff.va=P.fieldOff.va+P:getCenterX()*P.gameEnv.shakeFX*3e-3 + end + end + else + sfx='rotate' + end + SFX.play(sfx,nil,P:getCenterX()*.15) + end + P.stat.rotate=P.stat.rotate+1 + return + end + end + end + + --Try release left/right, then softdrop, failed to rotate otherwise + if dx~=0 then + dx=0 + elseif dy~=0 then + dy=0 + else + return + end + end + end,29) + } +end + +local ASC +do + local L={'+0+0','+1+0','+0-1','+1-1','+0-2','+1-2','+2+0','+2-1','+2-2','-1+0','-1-1','+0+1','+1+1','+2+1','-1-2','-2+0','+0+2','+1+2','+2+2','-2-1','-2-2'} + local R=flipList(L) + local F={'+0+0'} + local centerPos=TABLE.shift(defaultCenterPos,0) + centerPos[6]={[0]={0,0},{1,0},{1,1},{0,1}} + centerPos[7]={[0]={0,1},{2,0},{0,2},{1,0}} + ASC={ + centerTex=GC.DO{10,10, + {'setLW',2}, + {'setCL',1,1,1,.7}, + {'line',1,1,9,9}, + {'line',1,9,9,1}, + {'setLW',1}, + {'setCL',1,1,1}, + {'line',1,1,9,9}, + {'line',1,9,9,1}, + }, + centerPos=centerPos, + kickTable=TABLE.new({ + [01]=R,[10]=L,[03]=L,[30]=R, + [12]=R,[21]=L,[32]=L,[23]=R, + [02]=F,[20]=F,[13]=F,[31]=F, + },29) + } +end + +local ASC_plus +do + local L={'+0+0','+1+0','+0-1','+1-1','+0-2','+1-2','+2+0','+2-1','+2-2','-1+0','-1-1','+0+1','+1+1','+2+1','-1-2','-2+0','+0+2','+1+2','+2+2','-2-1','-2-2'} + local R=flipList(L) + local F={'+0+0','-1+0','+1+0','+0-1','-1-1','+1-1','+0-2','-1-2','+1-2','-2+0','+2+0','-2-1','+2-1','-2+1','+2+1','+0+2','-1+2','+1+2'} + local centerPos=TABLE.shift(defaultCenterPos,0) + centerPos[6]={[0]={0,0},{1,0},{1,1},{0,1}} + centerPos[7]={[0]={0,1},{2,0},{0,2},{1,0}} + ASC_plus={ + centerTex=GC.DO{10,10, + {'setLW',2}, + {'setCL',1,1,1,.7}, + {'line',1,1,9,9}, + {'line',1,9,9,1}, + {'setLW',1}, + {'setCL',1,1,1}, + {'line',1,1,9,9}, + {'line',1,9,9,1}, + {'fCirc',5,5,3}, + }, + centerPos=centerPos, + kickTable=TABLE.new({ + [01]=R,[12]=R,[23]=R,[30]=R, + [10]=L,[21]=L,[32]=L,[03]=L, + [02]=F,[20]=F,[13]=F,[31]=F, + },29) + } +end + +local C2 +do + local L={'+0+0','-1+0','+1+0','+0-1','-1-1','+1-1','-2+0','+2+0'} + C2={ + centerTex=GC.DO{10,10, + {'setLW',2}, + {'dRect',2,2,6,6}, + }, + kickTable=TABLE.new({ + [01]=L,[10]=L,[12]=L,[21]=L, + [23]=L,[32]=L,[30]=L,[03]=L, + [02]=L,[20]=L,[13]=L,[31]=L, + },29) + } +end + +local C2_sym +do + local L={'+0+0','-1+0','+1+0','+0-1','-1-1','+1-1','-2+0','+2+0'} + local R={'+0+0','+1+0','-1+0','+0-1','+1-1','-1-1','+2+0','-2+0'} + + local Z={ + [01]=R,[10]=L,[03]=L,[30]=R, + [12]=R,[21]=L,[32]=L,[23]=R, + [02]=R,[20]=L,[13]=L,[31]=R, + } + local S=reflect(Z) + + C2_sym={ + centerTex=GC.DO{10,10, + {'setLW',2}, + {'dRect',1,1,8,8}, + {'fRect',3,3,4,4}, + }, + kickTable={ + Z,S,--Z,S + Z,S,--J,L + Z,--T + noKickSet,--O + Z,--I + + Z,S,--Z5,S5 + Z,S,--P,Q + Z,S,--F,E + Z,Z,Z,Z,--T5,U,V,W + noKickSet,--X + Z,S,--J5,L5 + Z,S,--R,Y + Z,S,--N,H + Z,--I5 + + Z,Z,--I3,C + Z,Z,--I2,O1 + } + } +end + +local Classic do + local centerPos=TABLE.shift(defaultCenterPos,0) + centerPos[1]={[0]={1,1},{1,0},{1,1},{1,0}} + centerPos[2]={[0]={1,1},{1,0},{1,1},{1,0}} + centerPos[7]={[0]={0,2},{1,0},{0,2},{1,0}} + Classic={ + centerDisp=TABLE.new(false,29), + centerPos=centerPos, + kickTable=TABLE.new(noKickSet,29) + } +end + +local Classic_plus do + local centerPos=TABLE.shift(defaultCenterPos,0) + centerPos[1]={[0]={1,1},{1,0},{1,1},{1,0}} + centerPos[2]={[0]={1,1},{1,0},{1,1},{1,0}} + centerPos[7]={[0]={0,2},{1,0},{0,2},{1,0}} + Classic_plus={ + centerDisp=TABLE.new(false,29), + centerPos=centerPos, + kickTable=TABLE.new(noKickSet_180,29) + } +end + +local None={ + centerTex=GC.DO{10,10, + {'setLW',2}, + {'line',2,2,6,6}, + }, + kickTable=TABLE.new(noKickSet_180,29) +} + +local None_plus={ + centerTex=GC.DO{10,10, + {'setLW',2}, + {'line',1,1,7,7}, + {'fRect',2,2,4,4}, + }, + kickTable=TABLE.new(noKickSet,29) +} + +local RSlist={ + TRS=TRS, + SRS=SRS, + BiRS=BiRS, + ASC=ASC, + ASC_plus=ASC_plus, + C2=C2, + C2_sym=C2_sym, + Classic=Classic, + Classic_plus=Classic_plus, + None=None, + None_plus=None_plus, +} + +for _,rs in next,RSlist do + if not rs.centerDisp then rs.centerDisp=TABLE.new(true,29)end + if not rs.centerPos then rs.centerPos=defaultCenterPos end + if not rs.centerTex then rs.centerTex=defaultCenterTex end + + --Make all string vec to the same table vec + for _,set in next,rs.kickTable do + if type(set)=='table'then + for _,list in next,set do + if type(list[1])=='string'then + strToVec(list) + end + end + end + end +end + +return RSlist \ No newline at end of file diff --git a/parts/backgrounds/aura.lua b/parts/backgrounds/aura.lua index f9c36d9a..3ee69ac0 100644 --- a/parts/backgrounds/aura.lua +++ b/parts/backgrounds/aura.lua @@ -16,7 +16,7 @@ function back.update(dt) t=t+dt end function back.draw() - gc.clear(.1,.1,.1) + gc.clear(.08,.08,.084) shader:send('t',t) gc.setShader(shader) gc.rectangle('fill',0,0,SCR.w,SCR.h) diff --git a/parts/backgrounds/bg1.lua b/parts/backgrounds/bg1.lua index c320b50b..a20da4c4 100644 --- a/parts/backgrounds/bg1.lua +++ b/parts/backgrounds/bg1.lua @@ -15,7 +15,7 @@ function back.update(dt) t=t+dt end function back.draw() - gc.clear(.1,.1,.1) + gc.clear(.08,.08,.084) shader:send('t',t) gc.setShader(shader) gc.rectangle('fill',0,0,SCR.w,SCR.h) diff --git a/parts/backgrounds/bg2.lua b/parts/backgrounds/bg2.lua index 1d674635..32905e58 100644 --- a/parts/backgrounds/bg2.lua +++ b/parts/backgrounds/bg2.lua @@ -15,7 +15,7 @@ function back.update(dt) t=t+dt end function back.draw() - gc.clear(.1,.1,.1) + gc.clear(.08,.08,.084) shader:send('t',t) gc.setShader(shader) gc.rectangle('fill',0,0,SCR.w,SCR.h) diff --git a/parts/backgrounds/blockrain.lua b/parts/backgrounds/blockrain.lua index e08ab18b..c0318012 100644 --- a/parts/backgrounds/blockrain.lua +++ b/parts/backgrounds/blockrain.lua @@ -40,7 +40,7 @@ function back.update() end end function back.draw() - gc.clear(.1,.1,.1) + gc.clear(.08,.08,.084) for i=1,#mino do local C=mino[i] local c=C.color diff --git a/parts/backgrounds/lanterns.lua b/parts/backgrounds/lanterns.lua index 7e526718..deb362ec 100644 --- a/parts/backgrounds/lanterns.lua +++ b/parts/backgrounds/lanterns.lua @@ -37,7 +37,7 @@ function back.update(dt) end end function back.draw() - gc.clear(.1,.1,.1) + gc.clear(.08,.08,.084) gc.setColor(1,1,1,.2) local img=IMG.lanterns for i=1,#lanterns do diff --git a/parts/backgrounds/league.lua b/parts/backgrounds/league.lua index afc4b541..7f85cc0e 100644 --- a/parts/backgrounds/league.lua +++ b/parts/backgrounds/league.lua @@ -8,7 +8,7 @@ local upCover do table.insert(L,{'setCL',.6,1,1,i*.01}) table.insert(L,{'fRect',0,63-i,1,1}) end - upCover=DOGC(L) + upCover=GC.DO(L) end local downCover do local L={1,64} @@ -16,7 +16,7 @@ local downCover do table.insert(L,{'setCL',1,.5,.8,i*.01}) table.insert(L,{'fRect',0,i,1,1}) end - downCover=DOGC(L) + downCover=GC.DO(L) end local W,H @@ -29,7 +29,7 @@ end function back.update() end function back.draw() - gc.clear(.1,.1,.1) + gc.clear(.08,.08,.084) gc.draw(upCover,0,0,0,W,H*.3/64) gc.draw(downCover,0,H*.7,0,W,H*.3/64) end diff --git a/parts/backgrounds/lightning2.lua b/parts/backgrounds/lightning2.lua index 1b275922..aec006ff 100644 --- a/parts/backgrounds/lightning2.lua +++ b/parts/backgrounds/lightning2.lua @@ -10,7 +10,7 @@ local scs function back.init() colorLib=minoColor blocks=BLOCKS - scs=SCS + scs=DSCP t=rnd()*2600 end function back.update(dt) diff --git a/parts/backgrounds/rainbow.lua b/parts/backgrounds/rainbow.lua index 87a845bb..37bef15d 100644 --- a/parts/backgrounds/rainbow.lua +++ b/parts/backgrounds/rainbow.lua @@ -16,7 +16,7 @@ function back.update(dt) t=t+dt end function back.draw() - gc.clear(.1,.1,.1) + gc.clear(.08,.08,.084) shader:send('t',t) gc.setShader(shader) gc.rectangle('fill',0,0,SCR.w,SCR.h) diff --git a/parts/backgrounds/rainbow2.lua b/parts/backgrounds/rainbow2.lua index 3bef1d07..7c3d9605 100644 --- a/parts/backgrounds/rainbow2.lua +++ b/parts/backgrounds/rainbow2.lua @@ -16,7 +16,7 @@ function back.update(dt) t=t+dt end function back.draw() - gc.clear(.1,.1,.1) + gc.clear(.08,.08,.084) shader:send('t',t) gc.setShader(shader) gc.rectangle('fill',0,0,SCR.w,SCR.h) diff --git a/parts/backgrounds/snow.lua b/parts/backgrounds/snow.lua index 3b7fa750..dbee262c 100644 --- a/parts/backgrounds/snow.lua +++ b/parts/backgrounds/snow.lua @@ -38,7 +38,7 @@ function back.update() end end function back.draw() - gc.clear(.1,.1,.1) + gc.clear(.08,.08,.084) gc.setColor(.7,.7,.7) for i=1,#snow do local P=snow[i] diff --git a/parts/backgrounds/space.lua b/parts/backgrounds/space.lua index 21c301a4..1a755f16 100644 --- a/parts/backgrounds/space.lua +++ b/parts/backgrounds/space.lua @@ -31,7 +31,7 @@ function back.update() end end function back.draw() - gc.clear(.1,.1,.1) + gc.clear(.08,.08,.084) if not stars[1]then return end gc.translate(-10,-10) gc.setColor(1,1,1,.6) diff --git a/parts/backgrounds/tunnel.lua b/parts/backgrounds/tunnel.lua index d632c918..f3449fe5 100644 --- a/parts/backgrounds/tunnel.lua +++ b/parts/backgrounds/tunnel.lua @@ -29,7 +29,7 @@ function back.update(dt) end end function back.draw() - gc.clear(.1,.1,.1) + gc.clear(.08,.08,.084) gc.setColor(1,1,1,.1) for i=1,#ring do local r=ring[i]^2/12 diff --git a/parts/backgrounds/welcome.lua b/parts/backgrounds/welcome.lua index be12b871..3604077b 100644 --- a/parts/backgrounds/welcome.lua +++ b/parts/backgrounds/welcome.lua @@ -16,7 +16,7 @@ function back.draw() if -t%13.55<.1283 then gc.clear(.2+.1*sin(t),.2+.1*sin(1.26*t),.2+.1*sin(1.626*t)) else - gc.clear(.1,.1,.1) + gc.clear(.08,.08,.084) end gc.push('transform') gc.translate(SCR.cx,SCR.cy+20*sin(t*.02)) diff --git a/parts/gametoolfunc.lua b/parts/gametoolfunc.lua index 8e253330..d6300422 100644 --- a/parts/gametoolfunc.lua +++ b/parts/gametoolfunc.lua @@ -595,10 +595,10 @@ do--function drawSelfProfile() ins(img,{"clear",0,0,0}) ins(img,{"setLW",4}) ins(img,{"setCL",.5,.8,1}) - ins(img,{"dRect",2,2,21,21}) + ins(img,{"dRect",2,2,21,21,2}) --TODO: draw with lv - img=DOGC(img) + img=GC.DO(img) rawset(self,lv,img) return img end}) @@ -612,7 +612,7 @@ do--function drawSelfProfile() --Draw avatar gc_setLineWidth(2) gc_setColor(.3,.3,.3,.8)gc_rectangle('fill',0,0,-300,80) - gc_setColor(1,1,1)gc_rectangle('line',0,0,-300,80) + gc_setColor(1,1,1)gc_rectangle('line',-300,0,300,80,5) gc_rectangle('line',-73,7,66,66,2) gc_draw(selfAvatar,-72,8,nil,.5) @@ -656,10 +656,6 @@ do--function drawWarning() end end end -do--function drawSystemInfo( - --你竟然找到了这里!说明你是真的闲( - --感谢支持Techmino!!! -end diff --git a/parts/globalTables.lua b/parts/globalTables.lua index ed11ec7f..0a22c185 100644 --- a/parts/globalTables.lua +++ b/parts/globalTables.lua @@ -4,94 +4,94 @@ local function disableKey(P,key) end MODOPT={--Mod options {no=0,id="NX",name="next", - key="q",x=80,y=230,color='O', + key="q",x=80,y=230,color='lO', list={0,1,2,3,4,5,6}, func=function(P,O)P.gameEnv.nextCount=O end, unranked=true, }, {no=1,id="HL",name="hold", - key="w",x=200,y=230,color='O', + key="w",x=200,y=230,color='lO', list={0,1,2,3,4,5,6}, func=function(P,O)P.gameEnv.holdCount=O end, unranked=true, }, {no=2,id="FL",name="hideNext", - key="e",x=320,y=230,color='A', + key="e",x=320,y=230,color='lA', list={1,2,3,4,5}, func=function(P,O)P.gameEnv.nextStartPos=O+1 end, unranked=true, }, {no=3,id="IH",name="infHold", - key="r",x=440,y=230,color='A', + key="r",x=440,y=230,color='lA', func=function(P)P.gameEnv.infHold=true end, unranked=true, }, {no=4,id="HB",name="hideBlock", - key="y",x=680,y=230,color='V', + key="y",x=680,y=230,color='lV', func=function(P)P.gameEnv.block=false end, unranked=true, }, {no=5,id="HG",name="hideGhost", - key="u",x=800,y=230,color='V', + key="u",x=800,y=230,color='lV', func=function(P)P.gameEnv.ghost=false end, unranked=true, }, {no=6,id="HD",name="hidden", - key="i",x=920,y=230,color='P', + key="i",x=920,y=230,color='lP', list={'easy','slow','medium','fast','none'}, func=function(P,O)P.gameEnv.visible=O end, unranked=true, }, {no=7,id="HB",name="hideBoard", - key="o",x=1040,y=230,color='P', + key="o",x=1040,y=230,color='lP', list={'down','up','all'}, func=function(P,O)P.gameEnv.hideBoard=O end, unranked=true, }, {no=8,id="FB",name="flipBoard", - key="p",x=1160,y=230,color='J', + key="p",x=1160,y=230,color='lJ', list={'U-D','L-R','180'}, func=function(P,O)P.gameEnv.flipBoard=O end, unranked=true, }, {no=9,id="DT",name="dropDelay", - key="a",x=140,y=350,color='R', + key="a",x=140,y=350,color='lR', list={0,.125,.25,.5,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99}, func=function(P,O)P.gameEnv.drop=O end, unranked=true, }, {no=10,id="LT",name="lockDelay", - key="s",x=260,y=350,color='R', + key="s",x=260,y=350,color='lR', list={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99}, func=function(P,O)P.gameEnv.lock=O end, unranked=true, }, {no=11,id="ST",name="waitDelay", - key="d",x=380,y=350,color='R', + key="d",x=380,y=350,color='lR', list={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, func=function(P,O)P.gameEnv.wait=O end, unranked=true, }, {no=12,id="CT",name="fallDelay", - key="f",x=500,y=350,color='R', + key="f",x=500,y=350,color='lR', list={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, func=function(P,O)P.gameEnv.fall=O end, unranked=true, }, {no=13,id="LF",name="life", - key="j",x=860,y=350,color='Y', + key="j",x=860,y=350,color='lY', list={0,1,2,3,5,10,15,26,42,87,500}, func=function(P,O)P.gameEnv.life=O end, unranked=true, }, {no=14,id="FB",name="forceB2B", - key="k",x=980,y=350,color='Y', + key="k",x=980,y=350,color='lY', func=function(P)P.gameEnv.b2bKill=true end, unranked=true, }, {no=15,id="PF",name="forceFinesse", - key="l",x=1100,y=350,color='Y', + key="l",x=1100,y=350,color='lY', func=function(P)P.gameEnv.fineKill=true end, unranked=true, }, @@ -124,19 +124,19 @@ MODOPT={--Mod options unranked=true, }, {no=19,id="CS",name="customSeq", - key="b",x=680,y=470,color='B', + key="b",x=680,y=470,color='lB', list={'bag','his','hisPool','c2','rnd','mess','reverb'}, func=function(P,O)P.gameEnv.sequence=O end, unranked=true, }, {no=20,id="PS",name="pushSpeed", - key="n",x=800,y=470,color='B', + key="n",x=800,y=470,color='lB', list={.5,1,2,3,5,15,1e99}, func=function(P,O)P.gameEnv.pushSpeed=O end, unranked=true, }, {no=21,id="BN",name="boneBlock", - key="m",x=920,y=470,color='B', + key="m",x=920,y=470,color='lB', list={'on','off'}, func=function(P,O)P.gameEnv.bone=O=='on'end, unranked=true, @@ -250,6 +250,7 @@ SETTING={--Settings --System reTime=4, autoPause=true, + menuPos='right', fine=false, simpMode=false, lang=1, diff --git a/parts/kickList.lua b/parts/kickList.lua deleted file mode 100644 index b06b767c..00000000 --- a/parts/kickList.lua +++ /dev/null @@ -1,670 +0,0 @@ -local map={}for x=-4,4 do map[x]={}for y=-4,4 do map[x][y]={x,y}end end - -local noKickSet,noKickSet_180,pushZero do - local Zero={map[0][0]} - noKickSet={[01]=Zero,[10]=Zero,[03]=Zero,[30]=Zero,[12]=Zero,[21]=Zero,[32]=Zero,[23]=Zero} - noKickSet_180={[01]=Zero,[10]=Zero,[03]=Zero,[30]=Zero,[12]=Zero,[21]=Zero,[32]=Zero,[23]=Zero,[02]=Zero,[20]=Zero,[13]=Zero,[31]=Zero} - function pushZero(t) - for id,set in next,t do - if type(id)=='number'and type(set)=='table'then - for _,R in next,set do - if not R[1]or R[1][1]~=0 or R[1][2]~=0 then - table.insert(R,1,map[0][0]) - end - end - end - end - end -end - ---Convert vector string to table -local function vecStrConv(list) - for k,vecStr in next,list do - list[k]=map[tonumber(vecStr:sub(1,2))][tonumber(vecStr:sub(3,4))] - end - return list -end - ---Make all vec point to the same vec -local function collectSet(set) - if type(set)~='table'then return end - for _,list in next,set do - if type(list[1])=='string'then - vecStrConv(list) - end - end -end - ---Use this if the block is centrosymmetry, *PTR!!! -local function centroSymSet(L) - L[23]=L[01]L[32]=L[10] - L[21]=L[03]L[12]=L[30] - L[20]=L[02]L[31]=L[13] -end - ---Use this to copy a symmetry set -local function flipList(O) - if not O then return end - local L={} - for i,s in next,O do - L[i]=string.char(88-s:byte())..s:sub(2) - end - return L -end - -local function reflect(a) - return{ - [03]=flipList(a[01]), - [01]=flipList(a[03]), - [30]=flipList(a[10]), - [32]=flipList(a[12]), - [23]=flipList(a[21]), - [21]=flipList(a[23]), - [10]=flipList(a[30]), - [12]=flipList(a[32]), - [02]=flipList(a[02]), - [20]=flipList(a[20]), - [31]=flipList(a[13]), - [13]=flipList(a[31]), - } -end - -local TRS -do - local OspinList={ - {111,5,2, 0,-1,0},{111,5,2,-1,-1,0},{111,5,0,-1, 0,0},--T - {333,5,2,-1,-1,0},{333,5,2, 0,-1,0},{333,5,0, 0, 0,0},--T - {313,1,2,-1, 0,0},{313,1,2, 0,-1,0},{313,1,2, 0, 0,0},--Z - {131,2,2, 0, 0,0},{131,2,2,-1,-1,0},{131,2,2,-1, 0,0},--S - {131,1,2,-1, 0,0},{131,1,2, 0,-1,0},{131,1,2, 0, 0,0},--Z(misOrder) - {313,2,2, 0, 0,0},{313,2,2,-1,-1,0},{313,2,2,-1, 0,0},--S(misOrder) - {331,3,2, 0,-1,0},--J(farDown) - {113,4,2,-1,-1,0},--L(farDown) - {113,3,2,-1,-1,0},{113,3,0, 0, 0,0},--J - {331,4,2, 0,-1,0},{331,4,0,-1, 0,0},--L - {222,7,2,-1, 0,2},{222,7,2,-2, 0,2},{222,7,2, 0, 0,2},--I - {222,7,0,-1, 1,1},{222,7,0,-2, 1,1},{222,7,0, 0, 1,1},--I(high) - {121,6,0, 1,-1,2},{112,6,0, 2,-1,2},{122,6,0, 1,-2,2},--O - {323,6,0,-1,-1,2},{332,6,0,-2,-1,2},{322,6,0,-1,-2,2},--O - }--{keys, ID, dir, dx, dy, freeLevel (0=immovable, 1=U/D-immovable, 2=free)} - local XspinList={ - {{ 1,-1},{ 1, 0},{ 1, 1},{ 1,-2},{ 1, 2}}, - {{ 0,-1},{ 0,-2},{ 0, 1},{ 0,-2},{ 0, 2}}, - {{-1,-1},{-1, 0},{-1, 1},{-1,-2},{-1, 2}}, - } - TRS={ - centerDisp=TABLE.new(true,29), - { - [01]={'-1+0','-1+1','+0-2','-1+2','+0+1'}, - [10]={'+1+0','+1-1','+0+2','+1-2','+1-2'}, - [03]={'+1+0','+1+1','+0-2','+1-1','+1-2'}, - [30]={'-1+0','-1-1','+0+2','-1+2','+0-1'}, - [12]={'+1+0','+1-1','+0+2','+1+2'}, - [21]={'-1+0','-1+1','+0-2','-1-2'}, - [32]={'-1+0','-1-1','+0+2','-1+2'}, - [23]={'+1+0','+1+1','+0-2','+1-2'}, - [02]={'+1+0','-1+0','+0-1','+0+1'}, - [20]={'-1+0','+1+0','+0+1','+0-1'}, - [13]={'+0-1','+0+1','+0-2'}, - [31]={'+0+1','+0-1','+0+2'}, - },--Z - false,--S - { - [01]={'-1+0','-1+1','+1+0','+0-2','+1+1'}, - [10]={'+1+0','+1-1','-1+0','+0+2','+1+2'}, - [03]={'+1+0','+1+1','+0-2','+1-2','+1-1','+0+1'}, - [30]={'-1+0','-1-1','+0+2','-1+2','+0-1','-1+1'}, - [12]={'+1+0','+1-1','+1+1','-1+0','+0-1','+0+2','+1+2'}, - [21]={'-1+0','-1+1','-1-1','+1+0','+0+1','+0-2','-1-2'}, - [32]={'-1+0','-1-1','+1+0','+0+2','-1+2','-1+1'}, - [23]={'+1+0','+1-1','-1+0','+1+1','+0-2','+1-2'}, - [02]={'-1+0','+1+0','+0-1','+0+1'}, - [20]={'+1+0','-1+0','+0+1','+0-1'}, - [13]={'+0-1','+0+1','+1+0'}, - [31]={'+0+1','+0-1','-1+0'}, - },--J - false,--L - { - [01]={'-1+0','-1+1','+0-2','-1-2','+0+1'}, - [10]={'+1+0','+1-1','+0+2','+1+2','+0-1'}, - [03]={'+1+0','+1+1','+0-2','+1-2','+0+1'}, - [30]={'-1+0','-1-1','+0+2','-1+2','+0-1'}, - [12]={'+1+0','+1-1','+0-1','-1-1','+0+2','+1+2','+1+1'}, - [21]={'-1+0','+0-2','-1-2','-1-1','+1+1'}, - [32]={'-1+0','-1-1','+0-1','+1-1','+0+2','-1+2','-1+1'}, - [23]={'+1+0','+0-2','+1-2','+1-1','-1+1'}, - [02]={'-1+0','+1+0','+0+1'}, - [20]={'+1+0','-1+0','+0-1'}, - [13]={'+0-1','+0+1','+1+0','+0-2','+0+2'}, - [31]={'+0-1','+0+1','-1+0','+0-2','+0+2'}, - },--T - function(P,d) - if P.gameEnv.easyFresh then - P:freshBlock('fresh') - end - if P.gameEnv.ospin then - local x,y=P.curX,P.curY - if y==P.ghoY and((P:solid(x-1,y)or P:solid(x-1,y+1)))and(P:solid(x+2,y)or P:solid(x+2,y+1))then - if P.sound then SFX.play('rotatekick',nil,P:getCenterX()*.15)end - P.spinSeq=P.spinSeq%100*10+d - if P.spinSeq<100 then return end - for i=1,#OspinList do - local L=OspinList[i] - if P.spinSeq==L[1]then - local id,dir=L[2],L[3] - local bk=BLOCKS[id][dir] - x,y=P.curX+L[4],P.curY+L[5] - if - not P:ifoverlap(bk,x,y)and( - L[6]>0 or(P:ifoverlap(bk,x-1,y)and P:ifoverlap(bk,x+1,y)) - )and( - L[6]==2 or(P:ifoverlap(bk,x,y-1)and P:ifoverlap(bk,x,y+1)) - ) - then - local C=P.cur - C.id=id - C.bk=bk - P.curX,P.curY=x,y - P.cur.dir,P.cur.sc=dir,SCS[id][dir] - P.spinLast=2 - P.stat.rotate=P.stat.rotate+1 - P:freshBlock('move') - P.spinSeq=0 - return - end - end - end - else - if P.sound then SFX.play('rotate',nil,P:getCenterX()*.15)end - P.spinSeq=0 - end - else - if P.sound then SFX.play('rotate',nil,P:getCenterX()*.15)end - end - end,--O - { - [01]={'+0+1','+1+0','-2+0','-2-1','+1+2'}, - [10]={'+2+0','-1+0','-1-2','+2+1','+0+1'}, - [03]={'+0+1','-1+0','+2+0','+2-1','-1+2'}, - [30]={'-2+0','+1+0','+1-2','-2+1','+0+1'}, - [12]={'-1+0','+2+0','+2-1','+0-1','-1+2'}, - [21]={'-2+0','+1+0','+1-2','-2+1','+0+1'}, - [32]={'+1+0','-2+0','-2-1','+0-1','+1+2'}, - [23]={'+2+0','-1+0','-1-2','+2+1','+0+1'}, - [02]={'-1+0','+1+0','+0-1','+0+1'}, - [20]={'+1+0','-1+0','+0+1','+0-1'}, - [13]={'+0-1','-1+0','+1+0','+0+1'}, - [31]={'+0-1','+1+0','-1+0','+0+1'}, - },--I - { - [01]={'+0+1','+1+1','-1+0','+0-3','+0+2','+0-2','+0+3','-1+2'}, - [10]={'+0-1','-1-1','+1+0','+0-3','+0+2','+0-2','+0+3','+1-2'}, - [03]={'+1+0','+0-3','+0+1','+0+2','+0+3','+1+2'}, - [30]={'-1+0','+0+1','+0-2','+0-3','+0+3','-1-2'}, - },--Z5 - false,--S5 - { - [01]={'-1+0','-1+1','+0-2','-1-2','-1-1','+0+1'}, - [10]={'+1+0','+1-1','+0+2','+1+2','+0-1','+1+1'}, - [03]={'+1+0','+1+1','+0-2','+1-2'}, - [30]={'-1+0','-1-1','+0+2','-1+2'}, - [12]={'+1+0','+1-1','+0+2','+1+2','+1+1'}, - [21]={'-1+0','-1-1','-1+1','+0-2','-1-2','-1-1'}, - [32]={'-1+0','-1-1','-1+1','+0-1','+0+2','-1+2'}, - [23]={'+1+0','+1+1','-1+0','+0-2','+1-2'}, - [02]={'-1+0','+0-1','+0+1'}, - [20]={'+1+0','+0+1','+0-1'}, - [13]={'+1+0','+0+1','-1+0'}, - [31]={'-1+0','+0-1','+1+0'}, - },--P - false,--Q - { - [01]={'-1+0','+1+0','-1+1','+0-2','+0-3'}, - [10]={'+1+0','+1-1','-1+0','+0+2','+0+3'}, - [03]={'+1+0','+1-1','+0+1','+0-2','+0-3'}, - [30]={'-1+1','+1+0','+0-1','+0+2','+0+3'}, - [12]={'+1+0','+0-1','-1+0','+0+2'}, - [21]={'-1+0','+0+1','+1+0','+0-2'}, - [32]={'-1+0','+0+1','-1+1','+1+0','+0+2','-2+0'}, - [23]={'+1+0','+1-1','+0-1','-1+0','+0-2','+2+0'}, - [02]={'+1+0','-1+0','-1-1'}, - [20]={'-1+0','+1+0','+1+1'}, - [13]={'+0-1','-1+1','+0+1'}, - [31]={'+0-1','+1-1','+0+1'}, - },--F - false,--E - { - [01]={'+0-1','-1-1','+1+0','+1+1','+0-3','-1+0','+0+2','-1+2'}, - [10]={'+1+0','+0-1','-1-1','+0-2','-1+1','+0-3','+1-2','+0+1'}, - [03]={'+0-1','+1-1','-1+0','-1+1','+0-3','+1+0','+0+2','+1+2'}, - [30]={'-1+0','+0-1','+1-1','+0-2','+1+1','+0-3','-1-2','+0+1'}, - [12]={'+1+0','-1+0','+0-2','+0-3','+0+1','-1+1'}, - [21]={'+1-1','-1+0','+1+0','+0-1','+0+2','+0+3'}, - [32]={'-1+0','+1+0','+0-2','+0-3','+0+1','+1+1'}, - [23]={'-1-1','+1+0','-1+0','+0-1','+0+2','+0+3'}, - [02]={'+0-1','+0+1','+0+2'}, - [20]={'+0-1','+0+1','+0-2'}, - [13]={'+1+0','-1+1','-2+0'}, - [31]={'-1+0','+1+1','+2+0'}, - },--T5 - { - [01]={'-1+0','-1+1','+0-2','-1-2'}, - [10]={'+1+0','+1-1','+0+2','+1+2'}, - [03]={'+1+0','+1+1','+0-2','+1-2'}, - [30]={'-1+0','-1-1','+0-2','-1+2'}, - [12]={'+1+0','+1-1','+1+1'}, - [21]={'-1-1','-1+1','-1-1'}, - [32]={'-1+0','-1-1','-1+1'}, - [23]={'+1-1','+1+1','+1-1'}, - [02]={'+0+1'}, - [20]={'+0-1'}, - [13]={'+0-1','+0+1','+1+0'}, - [31]={'+0-1','+0+1','-1+0'}, - },--U - { - [01]={'+0+1','-1+0','+0-2','-1-2'}, - [10]={'+0+1','+1+0','+0-2','+1-2'}, - [03]={'+0-1','+0+1','+0+2'}, - [30]={'+0-1','+0+1','+0-2'}, - [12]={'+0-1','+0+1'}, - [21]={'+0-1','+0-2'}, - [32]={'+1+0','-1+0'}, - [23]={'-1+0','+1+0'}, - [02]={'-1+1','+1-1'}, - [20]={'+1-1','-1+1'}, - [13]={'+1+1','-1-1'}, - [31]={'-1-1','+1+1'}, - },--V - { - [01]={'+0-1','-1+0','+1+0','+1-1','+0+2'}, - [10]={'+0-1','-1-1','+0+1','+0-2','+1-2','+0+2'}, - [03]={'+1+0','+1+1','+0-1','+0-2','+0-3','+1-1','+0+1','+0+2','+0+3'}, - [30]={'-1+0','-1+1','+0-1','+0-2','+0-3','-1-1','+0+1','+0+2','+0+3'}, - [12]={'+1+0','+0-1','-2+0','+1+1','-1+0','+0+1','-1-1'}, - [21]={'-1+0','+0-1','+2+0','-1+1','+1+0','+0+1','+1-1'}, - [32]={'+0-1','+1+0','+0+1','-1+0','-1-1','+0+2'}, - [23]={'+0-1','+1-1','+0+1','+0-2','-1-2','+0+2'}, - [02]={'+0-1','-1+0'}, - [20]={'+0+1','+1+0'}, - [13]={'+0+1','-1+0'}, - [31]={'+0-1','+1+0'}, - },--W - function(P,d) - if P.type=='human'then SFX.play('rotate',nil,P:getCenterX()*.15)end - local kickData=XspinList[d] - for test=1,#kickData do - local x,y=P.curX+kickData[test][1],P.curY+kickData[test][2] - if not P:ifoverlap(P.cur.bk,x,y)then - P.curX,P.curY=x,y - P.spinLast=1 - P:freshBlock('move') - P.stat.rotate=P.stat.rotate+1 - return - end - end - P:freshBlock('fresh') - end,--X - { - [01]={'-1+0','-1+1','+0-3','-1+1','-1+2','+0+1'}, - [10]={'-1+0','+1-1','+0+3','+1-1','+1-2','+0+1'}, - [03]={'+0-1','+1-1','-1+0','+1+1','+0-2','+1-2','+0-3','+1-3','-1+1'}, - [30]={'+0+1','-1+1','+1+0','-1-1','+0+2','-1+2','+0+3','-1+3','+1-1'}, - [12]={'+1+0','+1-1','+0-1','+1-2','+0-2','+1+1','-1+0','+0+2','+1+2'}, - [21]={'-1+0','-1+1','+0+1','-1+2','+0+2','-1-1','+1+0','+0-2','-1-2'}, - [32]={'-1+0','-1+1','-1-1','+1+0','+0+2','-1+2','+0-2'}, - [23]={'+1+0','+1-1','+1+1','-1+0','+0-2','+1-2','+0+2'}, - [02]={'+0-1','+1-1','-1+0','+2-1'}, - [20]={'+0+1','-1+1','+1+0','-2+1'}, - [13]={'-1+0','-1-1','+0+1','-1-2'}, - [31]={'+1+0','+1+1','+0-1','+1+2'}, - },--J5 - false,--L5 - { - [01]={'-1+0','-1+0','-1+1','+1+0','-1+2','-1-1','+0-3','+0+1'}, - [10]={'-1+0','+1+0','+1-1','+1+0','+1-2','+1+1','+0+3','+0+1'}, - [03]={'+0-1','+1+0','+1-1','-1+0','+1+1','+0-2','+1-2','+0-3','+1-3','-1+1'}, - [30]={'+0+1','-1+0','-1+1','+1+0','-1-1','+0+2','-1+2','+0+3','-1+3','+1-1'}, - [12]={'+1+0','+1-1','+0-1','+1-2','+0-2','+1+1','-1+0','+0+2','+1+2'}, - [21]={'-1+0','-1+1','+0+1','-1+2','+0+2','-1-1','+1+0','+0-2','-1-2'}, - [32]={'+0-1','-1+0','-1+1','-1-1','+1+0','+0+2','-1+2','+0-2'}, - [23]={'+0+1','+1+0','+1-1','+1+1','-1+0','+0-2','+1-2','+0+2'}, - [02]={'+0-1','+1-1','-1+0','+2-1','+0+1'}, - [20]={'+0+1','-1+1','+1+0','-2+1','+0-1'}, - [13]={'-1+0','-1-1','+0+1','-1-2'}, - [31]={'+1+0','+1+1','+0-1','+1+2'}, - },--R - false,--Y - { - [01]={'-1+0','-1+1','+0+1','+1+0','-1+2','-2+0','+0-2'}, - [10]={'+1+0','-1+0','+0-1','+1-1','+1-2','+2+0','+0+2'}, - [03]={'-1+0','+1-1','+0-2','+0-3','+1+0','+1-2','+1-3','+0+1','-1+1'}, - [30]={'-1+0','+1-1','+1-2','+1+0','+0-2','+1-3','-1+2','+0+3','-1+3'}, - [12]={'-1+0','+1-1','-1-1','+1-2','+1+0','+0-2','+1-3','-1+2','+0+3','-1+3'}, - [21]={'-1+0','+1-1','+1+1','+0-2','+0-3','+1+0','+1-2','+1-3','+0+1','-1+1'}, - [32]={'-1+0','+0-1','-1-2','+1-1','+1+0','+1+1','+0+2','+0+3'}, - [23]={'+0-2','+0-3','+1+2','+1+0','+0+1','-1+1','+0-1','+0+2'}, - [02]={'-1+0','+0+2','+0-1'}, - [20]={'+1+0','+0-2','+0+1'}, - [13]={'-1+0','-1-1','+0+1','+1+2'}, - [31]={'+1+0','+1+1','+0-1','-1-2'}, - },--N - false,--H - { - [01]={'+1-1','+1+0','+1+1','+0+1','-1+1','-1+0','-1-1','+0-1','+0-2','-2-1','-2-2','+2+0','+2-1','+2-2','+1+2','+2+2','-1+2','-2+2'}, - [10]={'-1+0','-1-1','+0-1','+1-1','-2-2','-2-1','-2+0','-1-2','+0-2','+1-2','+2-2','-1+1','-2+1','-2+2','+1+0','+2+0','+2-1','+0+1','+1-1','+2-2'}, - [03]={'-1-1','-1+0','-1+1','-0+1','+1+1','+1+0','+1-1','-0-1','-0-2','+2-1','+2-2','-2+0','-2-1','-2-2','-1+2','-2+2','+1+2','+2+2'}, - [30]={'+1+0','+1-1','-0-1','-1-1','+2-2','+2-1','+2+0','+1-2','-0-2','-1-2','-2-2','+1+1','+2+1','+2+2','-1+0','-2+0','-2-1','+0+1','-1-1','-2-2'}, - },--I5 - { - [01]={'-1+0','-1-1','+1+1','-1+1'}, - [10]={'-1+0','+1+0','-1-1','+1+1'}, - [03]={'+1+0','+1-1','-1+1','+1+1'}, - [30]={'+1+0','-1+0','+1-1','-1+1'}, - },--I3 - { - [01]={'-1+0','+1+0'}, - [10]={'+1+0','-1+0'}, - [03]={'+0+1','+0-1'}, - [30]={'+0-1','+0+1'}, - [12]={'+0+1','+0-1'}, - [21]={'+0-1','+0+1'}, - [32]={'-1+0','+1+0'}, - [23]={'+1+0','-1+0'}, - [02]={'+0-1','+1-1','-1-1'}, - [20]={'+0+1','-1+1','+1+1'}, - [13]={'+0-1','-1-1','+1-1'}, - [31]={'+0+1','+1+1','-1+1'}, - },--C - { - [01]={'-1+0','+0+1'}, - [10]={'+1+0','+0+1'}, - [03]={'+1+0','+0+1'}, - [30]={'-1+0','+0+1'}, - [12]={'+1+0','+0+2'}, - [21]={'+0-1','-1+0'}, - [32]={'-1+0','+0+2'}, - [23]={'+0-1','-1+0'}, - [02]={'+0-1','+0+1'}, - [20]={'+0+1','+0-1'}, - [13]={'-1+0','+1+0'}, - [31]={'+1+0','-1+0'}, - },--I2 - nil,--O1 - } - TRS.centerDisp[6]=false - TRS.centerDisp[18]=false - TRS[2]= reflect(TRS[1])--SZ - TRS[4]= reflect(TRS[3])--LJ - TRS[9]= reflect(TRS[8])--S5Z5 - TRS[11]=reflect(TRS[10])--PQ - TRS[13]=reflect(TRS[12])--FE - TRS[20]=reflect(TRS[19])--L5J5 - TRS[22]=reflect(TRS[21])--RY - TRS[24]=reflect(TRS[23])--NH - centroSymSet(TRS[8])centroSymSet(TRS[9])--S5Z5 - centroSymSet(TRS[25])centroSymSet(TRS[26])--I5I3 - for i=1,29 do collectSet(TRS[i])end - pushZero(TRS) -end - -local SRS -do - SRS={ - { - [01]={'-1+0','-1+1','+0-2','-1-2'}, - [10]={'+1+0','+1-1','+0+2','+1+2'}, - [03]={'+1+0','+1+1','+0-2','+1-2'}, - [30]={'-1+0','-1-1','+0+2','-1+2'}, - [12]={'+1+0','+1-1','+0+2','+1+2'}, - [21]={'-1+0','-1+1','+0-2','-1-2'}, - [32]={'-1+0','-1-1','+0+2','-1+2'}, - [23]={'+1+0','+1+1','+0-2','+1-2'}, - [02]={},[20]={},[13]={},[31]={}, - },--Z - false,--S - false,--J - false,--L - false,--T - noKickSet,--O - { - [01]={'-2+0','+1+0','-2-1','+1+2'}, - [10]={'+2+0','-1+0','+2+1','-1-2'}, - [12]={'-1+0','+2+0','-1+2','+2-1'}, - [21]={'+1+0','-2+0','+1-2','-2+1'}, - [23]={'+2+0','-1+0','+2+1','-1-2'}, - [32]={'-2+0','+1+0','-2-1','+1+2'}, - [30]={'+1+0','-2+0','+1-2','-2+1'}, - [03]={'-1+0','+2+0','-1+2','+2-1'}, - [02]={},[20]={},[13]={},[31]={}, - }--I - } - collectSet(SRS[1]) - collectSet(SRS[7]) - pushZero(SRS) - for i=2,5 do SRS[i]=SRS[1]end - for i=8,29 do SRS[i]=SRS[1]end -end - -local BiRS -do - local R=vecStrConv{'+0+0','-1+0','-1-1','+0-1','-1+1','+1-1','+1+0','+0+1','+1+1','+0+2','-1+2','+1+2','-2+0','+2+0'} - local L=vecStrConv{'+0+0','+1+0','+1-1','+0-1','+1+1','-1-1','-1+0','+0+1','-1+1','+0+2','+1+2','-1+2','+2+0','-2+0'} - local F=vecStrConv{'+0+0','+0-1','+0+1','+0+2'} - local list={ - {[02]=L,[20]=R,[13]=R,[31]=L},--Z - {[02]=R,[20]=L,[13]=L,[31]=R},--S - {[02]=L,[20]=R,[13]=L,[31]=R},--J - {[02]=R,[20]=L,[13]=L,[31]=R},--L - {[02]=F,[20]=F,[13]=L,[31]=R},--T - {[02]=F,[20]=F,[13]=F,[31]=F},--O - {[02]=F,[20]=F,[13]=R,[31]=L},--I - - {[02]=L,[20]=L,[13]=R,[31]=R},--Z5 - {[02]=R,[20]=R,[13]=L,[31]=L},--S5 - {[02]=L,[20]=R,[13]=L,[31]=R},--P - {[02]=R,[20]=L,[13]=R,[31]=L},--Q - {[02]=R,[20]=L,[13]=L,[31]=R},--F - {[02]=L,[20]=R,[13]=R,[31]=L},--E - {[02]=F,[20]=F,[13]=L,[31]=R},--T5 - {[02]=F,[20]=F,[13]=L,[31]=R},--U - {[02]=R,[20]=L,[13]=L,[31]=R},--V - {[02]=R,[20]=L,[13]=L,[31]=R},--W - {[02]=F,[20]=F,[13]=F,[31]=F},--X - {[02]=L,[20]=R,[13]=R,[31]=L},--J5 - {[02]=R,[20]=L,[13]=L,[31]=R},--L5 - {[02]=L,[20]=R,[13]=R,[31]=L},--R - {[02]=R,[20]=L,[13]=L,[31]=R},--Y - {[02]=L,[20]=R,[13]=R,[31]=L},--N - {[02]=R,[20]=L,[13]=L,[31]=R},--H - {[02]=F,[20]=F,[13]=F,[31]=F},--I5 - - {[02]=F,[20]=F,[13]=F,[31]=F},--I3 - {[02]=R,[20]=L,[13]=L,[31]=R},--C - {[02]=F,[20]=F,[13]=R,[31]=L},--I2 - {[02]=F,[20]=F,[13]=F,[31]=F},--O1 - } - for i=1,29 do - local a,b=R,L - if i==6 or i==18 then a,b=b,a end - list[i][01]=a;list[i][10]=b;list[i][03]=b;list[i][30]=a - list[i][12]=a;list[i][21]=b;list[i][32]=b;list[i][23]=a - end - BiRS=TABLE.new(function(P,d,ifpre) - local C=P.cur - local idir=(C.dir+d)%4 - local kickList=list[C.id][C.dir*10+idir] - local icb=BLOCKS[C.id][idir] - local isc=SCS[C.id][idir] - local ix,iy=P.curX+C.sc[2]-isc[2],P.curY+C.sc[1]-isc[1] - local dx,dy=0,0 do - local pressing=P.keyPressing - if pressing[1]and P:ifoverlap(C.bk,P.curX-1,P.curY)then dx=dx-1 end - if pressing[2]and P:ifoverlap(C.bk,P.curX+1,P.curY)then dx=dx+1 end - if pressing[7]and P:ifoverlap(C.bk,P.curX,P.curY-1)then dy= -1 end - end - while true do - for test=1,#kickList do - local fdx,fdy=kickList[test][1]+dx,kickList[test][2]+dy - if - dx*fdx>=0 and - fdx^2+fdy^2<=5 and - (P.freshTime>0 or fdy<=0) - then - local x,y=ix+fdx,iy+fdy - if not P:ifoverlap(icb,x,y)then - if P.gameEnv.moveFX and P.gameEnv.block then - P:createMoveFX() - end - P.curX,P.curY,C.dir=x,y,idir - C.sc,C.bk=isc,icb - P.spinLast=test==2 and 0 or 1 - - local t=P.freshTime - if not ifpre then - P:freshBlock('move') - end - if fdy>0 and P.freshTime==t and P.curY~=P.imgY then - P.freshTime=P.freshTime-1 - end - - if P.sound then - local sfx - if ifpre then - sfx='prerotate' - elseif P:ifoverlap(icb,x,y+1)and P:ifoverlap(icb,x-1,y)and P:ifoverlap(icb,x+1,y)then - sfx='rotatekick' - if P.gameEnv.shakeFX then - if d==1 or d==3 then - P.fieldOff.va=P.fieldOff.va+(2-d)*P.gameEnv.shakeFX*6e-3 - else - P.fieldOff.va=P.fieldOff.va+P:getCenterX()*P.gameEnv.shakeFX*3e-3 - end - end - else - sfx='rotate' - end - SFX.play(sfx,nil,P:getCenterX()*.15) - end - P.stat.rotate=P.stat.rotate+1 - return - end - end - end - - --Try release left/right, then softdrop, failed to rotate otherwise - if dx~=0 then - dx=0 - elseif dy~=0 then - dy=0 - else - return - end - end - end,29) -end - -local ASC -do - local L={"+1+0","+0-1","+1-1","+0-2","+1-2","+2+0","+2-1","+2-2","-1+0","-1-1","+0+1","+1+1","+2+1","-1-2","-2+0","+0+2","+1+2","+2+2","-2-1","-2-2"} - local R=flipList(L) - vecStrConv(L)vecStrConv(R) - ASC={ - { - [01]=R,[10]=L,[03]=L,[30]=R, - [12]=R,[21]=L,[32]=L,[23]=R, - [02]=noKickSet_180,[20]=noKickSet_180,[13]=noKickSet_180,[31]=noKickSet_180, - } - } - for i=2,29 do ASC[i]=ASC[1]end -end - -local ASCplus -do - local L={"+1+0","+0-1","+1-1","+0-2","+1-2","+2+0","+2-1","+2-2","-1+0","-1-1","+0+1","+1+1","+2+1","-1-2","-2+0","+0+2","+1+2","+2+2","-2-1","-2-2"} - local R=flipList(L) - local F={"-1+0","+1+0","+0-1","-1-1","+1-1","+0-2","-1-2","+1-2","-2+0","+2+0","-2-1","+2-1","-2+1","+2+1","+0+2","-1+2","+1+2"} - vecStrConv(L)vecStrConv(R)vecStrConv(F) - ASCplus={ - { - [01]=R,[12]=R,[23]=R,[30]=R, - [10]=L,[21]=L,[32]=L,[03]=L, - [02]=F,[20]=F,[13]=F,[31]=F, - } - } - for i=2,29 do ASCplus[i]=ASCplus[1]end -end - -local C2 -do - local L=vecStrConv{'+0+0','-1+0','+1+0','+0-1','-1-1','+1-1','-2+0','+2+0'} - C2={ - { - [01]=L,[10]=L,[12]=L,[21]=L, - [23]=L,[32]=L,[30]=L,[03]=L, - [02]=L,[20]=L,[13]=L,[31]=L, - } - } - for i=2,29 do C2[i]=C2[1]end -end - -local C2sym -do - local L={'+0+0','-1+0','+1+0','+0-1','-1-1','+1-1','-2+0','+2+0'} - local R={'+0+0','+1+0','-1+0','+0-1','+1-1','-1-1','+2+0','-2+0'} - - local Z={ - [01]=R,[10]=L,[03]=L,[30]=R, - [12]=R,[21]=L,[32]=L,[23]=R, - [02]=R,[20]=L,[13]=L,[31]=R, - } - local S=reflect(Z) - collectSet(Z) - collectSet(S) - - C2sym={ - Z,S,--Z,S - Z,S,--J,L - Z,--T - noKickSet,--O - Z,--I - - Z,S,--Z5,S5 - Z,S,--P,Q - Z,S,--F,E - Z,Z,Z,Z,--T5,U,V,W - noKickSet,--X - Z,S,--J5,L5 - Z,S,--R,Y - Z,S,--N,H - Z,--I5 - - Z,Z,--I3,C - Z,Z,--I2,O1 - } -end - -local Classic={} -for i=1,29 do Classic[i]=noKickSet end - -local None={} -for i=1,29 do None[i]=noKickSet_180 end - -local RS={ - TRS=TRS, - SRS=SRS, - BiRS=BiRS, - ASC=ASC, - ASCplus=ASCplus, - C2=C2, - C2sym=C2sym, - Classic=Classic, - None=None, -} - -for _,v in next,RS do - if not v.centerDisp then - v.centerDisp=TABLE.new(true,29) - end -end - -return RS \ No newline at end of file diff --git a/parts/language/dict_en.lua b/parts/language/dict_en.lua index c5868f43..bf64136c 100644 --- a/parts/language/dict_en.lua +++ b/parts/language/dict_en.lua @@ -340,7 +340,7 @@ return{ {"O-Spin", "ospin", "term", - "In most cases, it's a meme.\nThe O Tetrimino (a.k.a. the Square) does not change upon rotation, thus making it lack interesting spins/kicks that other Tetriminoes have, or be stuck in a place unable to get out.\nAs a joke, some people have made heavily edited videos or even programmed games where the O piece can change shape and \"spin\" into different positions.\nTechmino also supports O-Spin in most modes.", + "In most cases, it's a meme.\nThe O Tetromino (a.k.a. the Square) does not change upon rotation, thus making it lack interesting spins/kicks that other Tetrominoes have, or be stuck in a place unable to get out.\nAs a joke, some people have made heavily edited videos or even programmed games where the O piece can change shape and \"spin\" into different positions.\nTechmino also supports O-Spin in most modes.", }, {"Rotation Systems", "wallkick rotationsystem", @@ -385,7 +385,7 @@ return{ {"SRS", "srs superrotationsystem", "term", - "Super Rotation System\nThe rotation system used in modern, official Tetris games.\nEach Tetrimino has a rotation center for the piece to rotate around. Should a Tetrimino overlap with the wall, floor or another mino on the field after rotation, a few offset positions will be checked, allowing pieces to kick off walls and floors. This also allows pieces to rotate into openings that are otherwise unreachable.\n\nMany unofficial games implement some modification of this rotation system that adds a kick for 180 spins. In Techmino, such a modification is called SRS+.", + "Super Rotation System\nThe rotation system used in modern, official Tetris games.\nEach Tetromino has a rotation center for the piece to rotate around. Should a Tetromino overlap with the wall, floor or another mino on the field after rotation, a few offset positions will be checked, allowing pieces to kick off walls and floors. This also allows pieces to rotate into openings that are otherwise unreachable.\n\nMany unofficial games implement some modification of this rotation system that adds a kick for 180 spins. In Techmino, such a modification is called SRS+.", }, {"TRS", "trs techminorotationsystem", @@ -590,12 +590,12 @@ return{ {"Bag7 generator", "bag7bag randomgenerator", "term", - "Also known as \"7-Bag Generator\". Officially known as \"Random Generator\".\nThis is the algorithm used by modern, official Tetris games to generate pieces. Starting from the beginning of a game, every 7 pieces there are guaranteed to be one of each of the 7 Tetriminoes.", + "Also known as \"7-Bag Generator\". Officially known as \"Random Generator\".\nThis is the algorithm used by modern, official Tetris games to generate pieces. Starting from the beginning of a game, every 7 pieces there are guaranteed to be one of each of the 7 Tetrominoes.", }, {"His generator", "history hisgenerator", "term", - "A way to generate pieces, notably used in Tetris: The Grand Master games. Every time a random Tetrimino is selected, but if this Tetrimino is the same as one of the few previous pieces, then reroll until a different piece is rolled or until a reroll limit is reached.\nFor example, a \"his 4 roll 6\" (h4r6) generator rerolls when the piece is the same as one of the 4 previous pieces, and rerolls up to 6 times.\nThere are other variations as well, such as \"his4 roll6 pool35\", which further reduces the randomness of the piece sequence.\n\nIn Techmino, the max. reroll count is half of the sequence length, rounded up.", + "A way to generate pieces, notably used in Tetris: The Grand Master games. Every time a random Tetromino is selected, but if this Tetromino is the same as one of the few previous pieces, then reroll until a different piece is rolled or until a reroll limit is reached.\nFor example, a \"his 4 roll 6\" (h4r6) generator rerolls when the piece is the same as one of the 4 previous pieces, and rerolls up to 6 times.\nThere are other variations as well, such as \"his4 roll6 pool35\", which further reduces the randomness of the piece sequence.\n\nIn Techmino, the max. reroll count is half of the sequence length, rounded up.", }, {"Hypertapping", "hypertapping", @@ -615,17 +615,17 @@ return{ {"C2 Generator", "cultris2generator cultrisiigenerator c2generator", "term", - "All Tetriminoes have a initial weight of 0.\nEvery time, divide all weights by 2, add a random number between 0 and 1, pick the piece with the highest weight, and divide this piece's weight by 3.5.", + "All Tetrominoes have a initial weight of 0.\nEvery time, divide all weights by 2, add a random number between 0 and 1, pick the piece with the highest weight, and divide this piece's weight by 3.5.", }, {"C2 wall kicks", "cultris2wallkicks cultrisiiwallkicks c2wallkicks cultris2kicks cultrisiikicks c2kicks", "term", - "Left, right, down, bottom-left, bottom-right, left 2, right 2. (This applies to *any* rotation of *any* Tetrimino.)", + "Left, right, down, bottom-left, bottom-right, left 2, right 2. (This applies to *any* rotation of *any* Tetromino.)", }, {"Stacking", "stacking", "term", - "Often refers to stacking Tetriminoes without leaving holes in the stack.", + "Often refers to stacking Tetrominoes without leaving holes in the stack.", }, {"Rotation buttons (1)", "doublerotation", @@ -640,7 +640,7 @@ return{ {"Drought", "drought", "term", - "A situation where a piece you want, often the I Tetrimino (a.k.a. the Long Bar), does not spawn for a long time. This often happens, and can be deadly, for classic Tetris, but it is almost impossible for modern Tetris thanks to the Random Generator.\nWith the Random Generator, there can be at most 12 other pieces between two I Tetriminoes.", + "A situation where a piece you want, often the I Tetromino (a.k.a. the Long Bar), does not spawn for a long time. This often happens, and can be deadly, for classic Tetris, but it is almost impossible for modern Tetris thanks to the Random Generator.\nWith the Random Generator, there can be at most 12 other pieces between two I Tetrominoes.", }, {"MPH mode", "mph", diff --git a/parts/language/dict_zh.lua b/parts/language/dict_zh.lua index 6c360633..3358b5ea 100644 --- a/parts/language/dict_zh.lua +++ b/parts/language/dict_zh.lua @@ -145,7 +145,7 @@ return{ {"Puyopuyo Tetris", "噗哟方块 ppt puyopuyotetris", "game", - "简称PPT,多平台方块(steamPC版手感,网络等都不太好,不建议购买),将tetris和puyopuyo两个下落消除游戏放到一个游戏里,二者可以对战,联机单机模式都很多,很有趣", + "简称PPT,多平台方块(steamPC版相对NS版手感和网络等都不太好),将tetris和puyopuyo两个下落消除游戏放到一个游戏里,二者可以对战,联机单机模式都很多,很有趣", }, {"Tetris Online", "top tetris online study", diff --git a/parts/language/lang_en.lua b/parts/language/lang_en.lua index 4a1e3306..bc9af1f8 100644 --- a/parts/language/lang_en.lua +++ b/parts/language/lang_en.lua @@ -34,7 +34,7 @@ return{ missionFailed="Wrong Clear", speedLV="Speed Level", - line="Lines",atk="Attack",eff="Efficiency", + piece="Piece",line="Lines",atk="Attack",eff="Efficiency", rpm="RPM",tsd="TSD", grade="Grade",techrash="Techrash", wave="Wave",nextWave="Next", @@ -54,7 +54,7 @@ return{ page="Page:", ai_fixed="The AI is incompatible with fixed sequences.", - ai_prebag="The AI is incompatible with custom sequences which have nontetramino.", + ai_prebag="The AI is incompatible with custom sequences which have nontetromino.", ai_mission="The AI is incompatible with custom missions.", switchSpawnSFX="Please turn on the spawn SFX .", ranks={"D","C","B","A","S"}, @@ -185,7 +185,7 @@ return{ "Powered by LÖVE", "", "Program: MrZ, Particle_G, [FinnTenzor]", - "Art: MrZ, ScF, [Gnyar, 旋律星萤, T0722]", + "Art: MrZ, Gnyar, ScF, [旋律星萤, T0722]", "Music: MrZ, ERM, [T0722, Aether]", "Voice & Sound: Miya, Xiaoya, Naki, MrZ", "Performance: 模电, HBM", @@ -312,6 +312,7 @@ return{ RS="Rotation System", layout="Layout", autoPause="Pause while unfocused", + menuPos="Menu button pos.", swap="Key Combination (Change Atk. Mode)", simpMode="Simplistic Style", }, @@ -892,7 +893,7 @@ return{ "Techmino is so fun!", "TetroDictionary is now available in English.", "The stacker future is yours in Techmino!", - "There are three hidden modes in the game.", + "There are four hidden modes in the game.", "There is a total of 18 different pentominoes.", "There is a total of 7 different tetrominoes.", "Try using multiple Hold Queues!", @@ -931,4 +932,4 @@ return{ {C.Y,"O-Spin Triple!"}, {C.Z,"What? ",C.lC,"Xspin?"}, } -} +} \ No newline at end of file diff --git a/parts/language/lang_es.lua b/parts/language/lang_es.lua index 645c0199..8b0ed306 100644 --- a/parts/language/lang_es.lua +++ b/parts/language/lang_es.lua @@ -24,7 +24,7 @@ return{ missionFailed="Misión Fallida", speedLV="Vel. de juego", - line="Líneas",atk="Ataque",eff="Eficiencia", + piece="Piezas",line="Líneas",atk="Ataque",eff="Eficiencia", rpm="RPM",tsd="TSD", grade="Grado",techrash="Techrash", wave="Ronda",nextWave="Sig. ronda", @@ -44,7 +44,7 @@ return{ page="Página:", ai_fixed="La IA no es compatible con secuencias de piezas prefijadas.", - --ai_prebag="The AI is incompatible with custom sequences which have nontetramino.",a IA no es compatible con secuencias de piezas personalizadas.", + --ai_prebag="The AI is incompatible with custom sequences which have nontetromino.",a IA no es compatible con secuencias de piezas personalizadas.", ai_mission="La IA no es compatible con misiones personalizadas.", switchSpawnSFX="Habilita los sonidos de aparición de las piezas ;)", needRestart="Reinicia Techmino para que los cambios tengan efecto.", @@ -151,7 +151,7 @@ return{ "Creado con LÖVE", "", "Programación: MrZ, Particle_G, [FinnTenzor]", - "Artistas: MrZ, ScF, [Gnyar, 旋律星萤, T0722]", + "Artistas: MrZ, Gnyar, ScF, [旋律星萤, T0722]", "Música: MrZ, ERM, [T0722, Aether]", "Voces/Sonidos: Miya, Xiaoya, Naki, MrZ Performance: 模电, HBM", "Performance: 模电, HBM", @@ -278,6 +278,7 @@ return{ RS="Sistema de Rotación", layout="Diseño", autoPause="Pausar cuando la ventana no está enfocada", + -- menuPos="Menu button pos.", swap="Combinación de Teclas (Cambiar Modo de Ataque)", simpMode="Modo Sencillo", }, @@ -721,4 +722,4 @@ return{ ['custom_clear']= {"Personalizado", "Normal"}, ['custom_puzzle']= {"Personalizado", "Puzzle"}, }, -} +} \ No newline at end of file diff --git a/parts/language/lang_fr.lua b/parts/language/lang_fr.lua index 129b2f1c..84334940 100644 --- a/parts/language/lang_fr.lua +++ b/parts/language/lang_fr.lua @@ -24,7 +24,7 @@ return{ missionFailed="Mission échouée", speedLV="niveau de vitesse", - line="Lignes",atk="Attaque",eff="Efficacité", + piece="Pièce",line="Lignes",atk="Attaque",eff="Efficacité", rpm="RPM",tsd="TSD", grade="Grade",techrash="Techrash", wave="Vague",nextWave="Prochain", @@ -45,7 +45,7 @@ return{ page="Page:", ai_fixed="L'IA est incompatible avec les séquences fixes.", - --ai_prebag="The AI is incompatible with custom sequences which have nontetramino.",'IA est incompatible avec les séquences personnalisées.", + --ai_prebag="The AI is incompatible with custom sequences which have nontetromino.",'IA est incompatible avec les séquences personnalisées.", ai_mission="L'IA est incompatible avec les missions personnalisées.", switchSpawnSFX="Activez les effets sonores d'apparition des pièces pour jouer", needRestart="Fonctionnera dès la prochaine partie", @@ -151,7 +151,7 @@ return{ "Powered by LÖVE", "", "Programme : MrZ, Particle_G, [FinnTenzor]", - "Art : MrZ, ScF, [Gnyar, 旋律星萤, T0722]", + "Art : MrZ, Gnyar, ScF, [旋律星萤, T0722]", "Musique : MrZ, ERM, [T0722, Aether]", "Voix & Sons: Miya, Xiaoya, Naki, MrZ Performance: 模电, HBM", "Performance: 模电, HBM", @@ -275,6 +275,7 @@ return{ RS="Système de rotation", layout="Disposition", autoPause="Mettre en pause en cas de perte de focus", + -- menuPos="Menu button pos.", swap="Combinaison de touches (changer le mode d'attaque)", -- simpMode="Simple mode", }, @@ -724,4 +725,4 @@ return{ ['custom_clear']= {"Perso.", "NORMAL"}, ['custom_puzzle']= {"Perso.", "PUZZLE"}, }, -} +} \ No newline at end of file diff --git a/parts/language/lang_pt.lua b/parts/language/lang_pt.lua index cb9fd1ab..88f182a3 100644 --- a/parts/language/lang_pt.lua +++ b/parts/language/lang_pt.lua @@ -25,7 +25,7 @@ return{ missionFailed="Missão falha", speedLV="Nível de velocidade", - line="Linhas",atk="Ataque",eff="Eficiência", + piece="Peça",line="Linhas",atk="Ataque",eff="Eficiência", rpm="RPM",tsd="TSD", grade="Grade",techrash="Techrash", wave="Onda",nextWave="Próxima", @@ -45,7 +45,7 @@ return{ page="Página:", ai_fixed="A inteligência é incompatível com sequências fixas.", - --ai_prebag="The AI is incompatible with custom sequences which have nontetramino.", inteligência é incompatível com sequências fixas.", + --ai_prebag="The AI is incompatible with custom sequences which have nontetromino.", inteligência é incompatível com sequências fixas.", ai_mission="A inteligência é incompatível com missões costumizadas.", switchSpawnSFX="Switch on spawn SFX to play", needRestart="Funciona após reiniciar", @@ -175,7 +175,7 @@ return{ "Powered by LÖVE", "", "Programa: MrZ, Particle_G, [FinnTenzor]", - "Art: MrZ, ScF, [Gnyar, 旋律星萤, T0722]", + "Art: MrZ, Gnyar, ScF, [旋律星萤, T0722]", "Music: MrZ, ERM, [T0722, Aether]", "Voice & Sound: Miya, Xiaoya, Naki, MrZ", "Performance: 模电, HBM", @@ -302,6 +302,7 @@ return{ RS="Sistema de rotação", layout="Layout", autoPause="Pausar quando foco for perco", + -- menuPos="Menu button pos.", swap="Combinação de tecla(Mudar modo de atk)", -- simpMode="Simple mode", }, @@ -875,7 +876,7 @@ return{ "Techmino tem uma edição Nspire-CX!", "Techmino é legal!", "TetroDictionary está disponível em Inglês.", - "Tem 3 modos escondidos no jogo.", + "Tem 4 modos escondidos no jogo.", "Tem um total de 18 pentominoes diferentes.", "Tem um total de 7 diferentes tetrominoes.", "Tente usar dois botões de rotação. Todos três é melhor.", @@ -923,4 +924,4 @@ return{ {C.Y,"暫定段位:MV"}, {C.Y,"O-spin Triple!"}, } -} +} \ No newline at end of file diff --git a/parts/language/lang_symbol.lua b/parts/language/lang_symbol.lua index 7ee3a585..8c427a79 100644 --- a/parts/language/lang_symbol.lua +++ b/parts/language/lang_symbol.lua @@ -135,6 +135,7 @@ return{ RS="''?", layout="=-=-=", autoPause="A||", + menuPos="←M→?", swap="=+=+=", simpMode=".", }, diff --git a/parts/language/lang_yygq.lua b/parts/language/lang_yygq.lua index e360e3b8..020a420a 100644 --- a/parts/language/lang_yygq.lua +++ b/parts/language/lang_yygq.lua @@ -25,7 +25,7 @@ return{ maxspeed="速度封顶", speedLV="速度等级", - line="行数",atk="攻",eff="效", + piece="块数",line="行数",atk="攻",eff="效", rpm="收每分",tsd="T2", grade="段位",techrash="消四", wave="波数",nextWave="下一波", diff --git a/parts/language/lang_zh.lua b/parts/language/lang_zh.lua index 3a2ca64b..8d06beb9 100644 --- a/parts/language/lang_zh.lua +++ b/parts/language/lang_zh.lua @@ -34,7 +34,7 @@ return{ missionFailed="非任务消除", speedLV="速度等级", - line="行数",atk="攻击",eff="效率", + piece="块数",line="行数",atk="攻击",eff="效率", rpm="RPM",tsd="T2", grade="段位",techrash="Techrash", wave="波数",nextWave="下一波", @@ -185,7 +185,7 @@ return{ "使用LÖVE引擎", "", "程序: MrZ, Particle_G, [FinnTenzor]", - "美术: MrZ, ScF, [Gnyar, 旋律星萤, T0722]", + "美术: MrZ, Gnyar, ScF, [旋律星萤, T0722]", "音乐: MrZ, ERM, [T0722, Aether]", "音效/语音: Miya, Xiaoya, Naki, MrZ", "演出: 模电, HBM", @@ -312,6 +312,7 @@ return{ RS="旋转系统", layout="外观", autoPause="失去焦点自动暂停", + menuPos="菜单按钮位置", swap="组合键切换攻击模式", simpMode="简洁模式", }, @@ -1032,7 +1033,7 @@ return{ "游戏也是一种艺术形式", "游戏中左下角三个信息分别是分数/时间/极简连击数", "有建议的话可以把信息反馈给作者~", - "有三个隐藏模式不能从地图进入,到处找找看吧", + "有四个隐藏模式不能从地图进入,到处找找看吧", "有疑问? 先看设置有没有你想要的", "右下角那个问号按钮是游戏说明书", "长期睡眠不足会引起不可逆的脑损伤(变傻)", diff --git a/parts/language/lang_zh2.lua b/parts/language/lang_zh2.lua index 23b256a8..8a7e3d03 100644 --- a/parts/language/lang_zh2.lua +++ b/parts/language/lang_zh2.lua @@ -11,7 +11,7 @@ return{ continue="继续。", speedLV="速度等级", - line="行数",atk="攻击",eff="效率", + piece="块数",line="行数",atk="攻击",eff="效率", rpm="收每分",tsd="T2", grade="段位",techrash="消四", wave="波数",nextWave="下一波", @@ -62,13 +62,7 @@ return{ ihs="提前暂存", }, setting_skin={ - spin1="转", - spin2="转", - spin3="转", - spin4="转", - spin5="转", - spin6="转", - spin7="转", + spin1="转",spin2="转",spin3="转",spin4="转",spin5="转",spin6="转",spin7="转", }, customGame={ mod="模组(F1)", diff --git a/parts/list.lua b/parts/list.lua index 3612b4c8..f049eb96 100644 --- a/parts/list.lua +++ b/parts/list.lua @@ -164,7 +164,7 @@ do--drawableText gamewin=T(100),gameover=T(100),pause=T(120), speedLV=T(20), - line=T(25),atk=T(20),eff=T(20), + piece=T(25),line=T(25),atk=T(20),eff=T(20), rpm=T(35),tsd=T(35), grade=T(25),techrash=T(25), wave=T(30),nextWave=T(30), @@ -177,7 +177,7 @@ end do--BLOCKS local O,_=true,false BLOCKS={ - --Tetramino + --Tetromino {{_,O,O},{O,O,_}}, --Z {{O,O,_},{_,O,O}}, --S {{O,O,O},{O,_,_}}, --J @@ -236,54 +236,6 @@ do--BLOCKS end end end -do--SCS(spinCenters) - local N1,N2,N3,N4={0,1},{1,0},{1,1},{.5,.5} - local I1,I2,I3,I4={-.5,1.5},{1.5,-.5},{.5,1.5},{1.5,.5} - local V4={1.5,1.5} - local L1,L2={0,2},{2,0} - local S1,S2={-.5,.5},{.5,-.5} - local D={0,0} - SCS={ - --Tetramino - {[0]=N1,N2,N3,N3},--Z - {[0]=N1,N2,N3,N3},--S - {[0]=N1,N2,N3,N3},--L - {[0]=N1,N2,N3,N3},--J - {[0]=N1,N2,N3,N3},--T - {[0]=N4,N4,N4,N4},--O - {[0]=I1,I2,I3,I4},--I - - --Pentomino - {[0]=N3,N3,N3,N3},--Z5 - {[0]=N3,N3,N3,N3},--S5 - {[0]=N1,N2,N3,N3},--P - {[0]=N1,N2,N3,N3},--Q - {[0]=N3,N3,N3,N3},--F - {[0]=N3,N3,N3,N3},--E - {[0]=N3,N3,N3,N3},--T5 - {[0]=N1,N2,N3,N3},--U - {[0]=I3,N4,I4,V4},--V - {[0]=N3,N3,N3,N3},--W - {[0]=N3,N3,N3,N3},--X - {[0]=I3,I4,I3,I4},--J5 - {[0]=I3,I4,I3,I4},--L5 - {[0]=I3,I4,I3,I4},--R - {[0]=I3,I4,I3,I4},--Y - {[0]=I3,I4,I3,I4},--N - {[0]=I3,I4,I3,I4},--H - {[0]=L1,L2,L1,L2},--I5 - - --Trimino - {[0]=N1,N2,N1,N2},--I3 - {[0]=N4,N4,N4,N4},--C - - --Domino - {[0]=S1,S2,N4,N4},--I2 - - --Dot - {[0]=D,D,D,D},--O1 - } -end oldModeNameTable={ attacker_hard="attacker_h", attacker_ultimate="attacker_u", diff --git a/parts/modes/attacker_h.lua b/parts/modes/attacker_h.lua index b0ac1bdd..86dfc81a 100644 --- a/parts/modes/attacker_h.lua +++ b/parts/modes/attacker_h.lua @@ -37,10 +37,10 @@ return{ }, mesDisp=function(P) setFont(55) - mStr(P.modeData.wave,69,200) - mStr("22",69,320) - mText(drawableText.wave,69,260) - mText(drawableText.nextWave,69,380) + mStr(P.modeData.wave,63,200) + mStr("22",63,320) + mText(drawableText.wave,63,260) + mText(drawableText.nextWave,63,380) end, score=function(P)return{P.modeData.wave,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end, diff --git a/parts/modes/attacker_u.lua b/parts/modes/attacker_u.lua index be816881..eddc0e1c 100644 --- a/parts/modes/attacker_u.lua +++ b/parts/modes/attacker_u.lua @@ -45,10 +45,10 @@ return{ }, mesDisp=function(P) setFont(55) - mStr(P.modeData.wave,69,200) - mStr(20+4*math.min(math.floor(P.modeData.wave/10),2),69,320) - mText(drawableText.wave,69,260) - mText(drawableText.nextWave,69,380) + mStr(P.modeData.wave,63,200) + mStr(20+4*math.min(math.floor(P.modeData.wave/10),2),63,320) + mText(drawableText.wave,63,260) + mText(drawableText.nextWave,63,380) end, score=function(P)return{P.modeData.wave,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end, diff --git a/parts/modes/backfire_h.lua b/parts/modes/backfire_h.lua index 15413353..633d3100 100644 --- a/parts/modes/backfire_h.lua +++ b/parts/modes/backfire_h.lua @@ -14,9 +14,9 @@ return{ bg='tunnel',bgm='echo', }, mesDisp=function(P) - setFont(65) - mStr(P.stat.atk,69,310) - mText(drawableText.atk,69,380) + setFont(60) + mStr(P.stat.atk,63,280) + mText(drawableText.atk,63,350) end, score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end, diff --git a/parts/modes/backfire_l.lua b/parts/modes/backfire_l.lua index 9c1ccd4d..7bda39c2 100644 --- a/parts/modes/backfire_l.lua +++ b/parts/modes/backfire_l.lua @@ -14,9 +14,9 @@ return{ bg='blackhole',bgm='echo', }, mesDisp=function(P) - setFont(65) - mStr(P.stat.atk,69,310) - mText(drawableText.atk,69,380) + setFont(60) + mStr(P.stat.atk,63,280) + mText(drawableText.atk,63,350) end, score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end, diff --git a/parts/modes/backfire_n.lua b/parts/modes/backfire_n.lua index f984e392..6f6aaddc 100644 --- a/parts/modes/backfire_n.lua +++ b/parts/modes/backfire_n.lua @@ -13,9 +13,9 @@ return{ bg='tunnel',bgm='echo', }, mesDisp=function(P) - setFont(65) - mStr(P.stat.atk,69,310) - mText(drawableText.atk,69,380) + setFont(60) + mStr(P.stat.atk,63,280) + mText(drawableText.atk,63,350) end, score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end, diff --git a/parts/modes/backfire_u.lua b/parts/modes/backfire_u.lua index 364d383c..fd00889c 100644 --- a/parts/modes/backfire_u.lua +++ b/parts/modes/backfire_u.lua @@ -14,9 +14,9 @@ return{ bg='blackhole',bgm='echo', }, mesDisp=function(P) - setFont(65) - mStr(P.stat.atk,69,310) - mText(drawableText.atk,69,380) + setFont(60) + mStr(P.stat.atk,63,280) + mText(drawableText.atk,63,350) end, score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end, diff --git a/parts/modes/blind_e.lua b/parts/modes/blind_e.lua index 1b3ca9f4..3a73486c 100644 --- a/parts/modes/blind_e.lua +++ b/parts/modes/blind_e.lua @@ -9,11 +9,11 @@ return{ bg='glow',bgm='push', }, mesDisp=function(P) - mText(drawableText.line,69,300) - mText(drawableText.techrash,69,420) + mText(drawableText.line,63,300) + mText(drawableText.techrash,63,420) setFont(75) - mStr(P.stat.row,69,220) - mStr(P.stat.clears[4],69,340) + mStr(P.stat.row,63,220) + mStr(P.stat.clears[4],63,340) end, score=function(P)return{min(P.stat.row,200),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end, diff --git a/parts/modes/blind_h.lua b/parts/modes/blind_h.lua index 24bba924..3a0a7e07 100644 --- a/parts/modes/blind_h.lua +++ b/parts/modes/blind_h.lua @@ -13,11 +13,11 @@ return{ bg='rgb',bgm='push', }, mesDisp=function(P) - mText(drawableText.line,69,300) - mText(drawableText.techrash,69,420) + mText(drawableText.line,63,300) + mText(drawableText.techrash,63,420) setFont(75) - mStr(P.stat.row,69,220) - mStr(P.stat.clears[4],69,340) + mStr(P.stat.row,63,220) + mStr(P.stat.clears[4],63,340) gc.push('transform') PLY.draw.applyFieldOffset(P) gc.setColor(1,1,1,.1) diff --git a/parts/modes/blind_l.lua b/parts/modes/blind_l.lua index 1ba350bc..c013d299 100644 --- a/parts/modes/blind_l.lua +++ b/parts/modes/blind_l.lua @@ -14,11 +14,11 @@ return{ bg='rgb',bgm='push', }, mesDisp=function(P) - mText(drawableText.line,69,300) - mText(drawableText.techrash,69,420) + mText(drawableText.line,63,300) + mText(drawableText.techrash,63,420) setFont(75) - mStr(P.stat.row,69,220) - mStr(P.stat.clears[4],69,340) + mStr(P.stat.row,63,220) + mStr(P.stat.clears[4],63,340) gc.push('transform') PLY.draw.applyFieldOffset(P) gc.setColor(1,1,1,.1) diff --git a/parts/modes/blind_n.lua b/parts/modes/blind_n.lua index 63758eb2..1cea28a1 100644 --- a/parts/modes/blind_n.lua +++ b/parts/modes/blind_n.lua @@ -10,11 +10,11 @@ return{ bg='glow',bgm='push', }, mesDisp=function(P) - mText(drawableText.line,69,300) - mText(drawableText.techrash,69,420) + mText(drawableText.line,63,300) + mText(drawableText.techrash,63,420) setFont(75) - mStr(P.stat.row,69,220) - mStr(P.stat.clears[4],69,340) + mStr(P.stat.row,63,220) + mStr(P.stat.clears[4],63,340) gc.push('transform') PLY.draw.applyFieldOffset(P) gc.setColor(1,1,1,.1) diff --git a/parts/modes/blind_u.lua b/parts/modes/blind_u.lua index 60cbd15d..020b954c 100644 --- a/parts/modes/blind_u.lua +++ b/parts/modes/blind_u.lua @@ -13,11 +13,11 @@ return{ bg='rgb',bgm='far', }, mesDisp=function(P) - mText(drawableText.line,69,300) - mText(drawableText.techrash,69,420) + mText(drawableText.line,63,300) + mText(drawableText.techrash,63,420) setFont(75) - mStr(P.stat.row,69,220) - mStr(P.stat.clears[4],69,340) + mStr(P.stat.row,63,220) + mStr(P.stat.clears[4],63,340) gc.push('transform') PLY.draw.applyFieldOffset(P) gc.setColor(1,1,1,.1) diff --git a/parts/modes/blind_wtf.lua b/parts/modes/blind_wtf.lua index 674f37f5..dc9f74e9 100644 --- a/parts/modes/blind_wtf.lua +++ b/parts/modes/blind_wtf.lua @@ -1,3 +1,11 @@ +local boarder=GC.DO{334,620, +{'setLW',2}, +{'setCL',.97,.97,.975}, +{'dRect',16,1,302,618,5}, +{'fRect',17,612,300,2}, +{'dRect',318,9,15,596,3}, +{'dRect',1,9,15,596,3}, +} local gc=love.graphics local sin,min=math.sin,math.min return{ @@ -30,9 +38,7 @@ return{ gc.translate(150,0) gc.setColor(.5,.5,.5) --Frame - gc.rectangle('line',-1,-11,302,612)--Boarder - gc.rectangle('line',301,-3,15,604)--AtkBuffer boarder - gc.rectangle('line',-16,-3,15,604)--B2b bar boarder + gc.draw(boarder,-17,-12) end gc.pop() end @@ -45,11 +51,11 @@ return{ --Texts gc.setColor(.8,.8,.8) - mText(drawableText.line,69,300) - mText(drawableText.techrash,69,420) + mText(drawableText.line,63,300) + mText(drawableText.techrash,63,420) setFont(75) - mStr(P.stat.row,69,220) - mStr(P.stat.clears[4],69,340) + mStr(P.stat.row,63,220) + mStr(P.stat.clears[4],63,340) end, score=function(P)return{min(P.stat.row,40),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end, diff --git a/parts/modes/c4wtrain_l.lua b/parts/modes/c4wtrain_l.lua index 0543de6e..7381c557 100644 --- a/parts/modes/c4wtrain_l.lua +++ b/parts/modes/c4wtrain_l.lua @@ -54,10 +54,10 @@ return{ end, mesDisp=function(P) setFont(45) - mStr(P.combo,69,310) - mStr(P.modeData.maxCombo,69,400) - mText(drawableText.combo,69,358) - mText(drawableText.maxcmb,69,450) + mStr(P.combo,63,310) + mStr(P.modeData.maxCombo,63,400) + mText(drawableText.combo,63,358) + mText(drawableText.maxcmb,63,450) end, score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}end, scoreDisp=function(D)return D[1].." Combo "..STRING.time(D[2])end, diff --git a/parts/modes/c4wtrain_n.lua b/parts/modes/c4wtrain_n.lua index 9b956b79..fc814f03 100644 --- a/parts/modes/c4wtrain_n.lua +++ b/parts/modes/c4wtrain_n.lua @@ -52,10 +52,10 @@ return{ end, mesDisp=function(P) setFont(45) - mStr(P.combo,69,310) - mStr(P.modeData.maxCombo,69,400) - mText(drawableText.combo,69,358) - mText(drawableText.maxcmb,69,450) + mStr(P.combo,63,310) + mStr(P.modeData.maxCombo,63,400) + mText(drawableText.combo,63,358) + mText(drawableText.maxcmb,63,450) end, score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}end, scoreDisp=function(D)return D[1].." Combo "..STRING.time(D[2])end, diff --git a/parts/modes/classic_fast.lua b/parts/modes/classic_fast.lua index e162e70c..caa780eb 100644 --- a/parts/modes/classic_fast.lua +++ b/parts/modes/classic_fast.lua @@ -1,19 +1,18 @@ -local gc=love.graphics - return{ color=COLOR.lBlue, env={ - smooth=false, - noTele=true,keyCancel={5,6}, das=16,arr=6,sddas=2,sdarr=2, irs=false,ims=false, center=0,ghost=0, + smooth=false, drop=3,lock=3,wait=10,fall=25, + fieldH=19, nextCount=1,holdCount=false, - sequence='rnd', RS='Classic', + sequence='rnd', freshLimit=0, face={0,0,2,2,2,0,0}, + noTele=true,keyCancel={5,6}, task=function(P)P.modeData.target=10 end, dropPiece=function(P) local D=P.modeData @@ -36,12 +35,9 @@ return{ mesDisp=function(P) setFont(75) local r=P.modeData.target*.1 - mStr(r<11 and 18 or r<22 and r+8 or("%02x"):format(r*10-220),69,210) - mText(drawableText.speedLV,69,290) - setFont(45) - mStr(P.stat.row,69,320) - mStr(P.modeData.target,69,370) - gc.rectangle('fill',25,375,90,4) + mStr(r<11 and 18 or r<22 and r+8 or("%02x"):format(r*10-220),63,210) + mText(drawableText.speedLV,63,290) + PLY.draw.drawProgress(P.stat.row,P.modeData.target) end, score=function(P)return{P.stat.score,P.stat.row}end, scoreDisp=function(D)return D[1].." "..D[2].." Lines"end, diff --git a/parts/modes/custom_clear.lua b/parts/modes/custom_clear.lua index ca1d3e26..0baff7bd 100644 --- a/parts/modes/custom_clear.lua +++ b/parts/modes/custom_clear.lua @@ -74,7 +74,7 @@ return{ end, mesDisp=function(P) setFont(55) - mStr(P.stat.row,69,225) - mText(drawableText.line,69,290) + mStr(P.stat.row,63,225) + mText(drawableText.line,63,290) end, } \ No newline at end of file diff --git a/parts/modes/custom_puzzle.lua b/parts/modes/custom_puzzle.lua index 3b1e3b64..c80d232e 100644 --- a/parts/modes/custom_puzzle.lua +++ b/parts/modes/custom_puzzle.lua @@ -50,8 +50,8 @@ return{ end, mesDisp=function(P) setFont(55) - mStr(P.stat.row,69,225) - mText(drawableText.line,69,290) + mStr(P.stat.row,63,225) + mText(drawableText.line,63,290) gc.push('transform') PLY.draw.applyFieldOffset(P) if P.modeData.showMark==0 then diff --git a/parts/modes/defender_l.lua b/parts/modes/defender_l.lua index d9359056..72873cbb 100644 --- a/parts/modes/defender_l.lua +++ b/parts/modes/defender_l.lua @@ -44,10 +44,10 @@ return{ }, mesDisp=function(P) setFont(55) - mStr(P.modeData.wave,69,200) - mStr(P.modeData.rpm,69,320) - mText(drawableText.wave,69,260) - mText(drawableText.rpm,69,380) + mStr(P.modeData.wave,63,200) + mStr(P.modeData.rpm,63,320) + mText(drawableText.wave,63,260) + mText(drawableText.rpm,63,380) end, score=function(P)return{P.modeData.wave,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end, diff --git a/parts/modes/defender_n.lua b/parts/modes/defender_n.lua index be0a3912..1537075d 100644 --- a/parts/modes/defender_n.lua +++ b/parts/modes/defender_n.lua @@ -44,10 +44,10 @@ return{ }, mesDisp=function(P) setFont(55) - mStr(P.modeData.wave,69,200) - mStr(P.modeData.rpm,69,320) - mText(drawableText.wave,69,260) - mText(drawableText.rpm,69,380) + mStr(P.modeData.wave,63,200) + mStr(P.modeData.rpm,63,320) + mText(drawableText.wave,63,260) + mText(drawableText.rpm,63,380) end, score=function(P)return{P.modeData.wave,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end, diff --git a/parts/modes/dig_100l.lua b/parts/modes/dig_100l.lua index a12979a3..3947c1ac 100644 --- a/parts/modes/dig_100l.lua +++ b/parts/modes/dig_100l.lua @@ -24,7 +24,7 @@ return{ end, mesDisp=function(P) setFont(55) - mStr(100-P.stat.dig,69,265) + mStr(100-P.stat.dig,63,265) end, score=function(P)return{P.stat.time,P.stat.piece}end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end, diff --git a/parts/modes/dig_10l.lua b/parts/modes/dig_10l.lua index 813715ec..94b5182f 100644 --- a/parts/modes/dig_10l.lua +++ b/parts/modes/dig_10l.lua @@ -21,7 +21,7 @@ return{ end, mesDisp=function(P) setFont(55) - mStr(10-P.stat.dig,69,265) + mStr(10-P.stat.dig,63,265) end, score=function(P)return{P.stat.time,P.stat.piece}end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end, diff --git a/parts/modes/dig_400l.lua b/parts/modes/dig_400l.lua index 1e15f49c..e1cc86b1 100644 --- a/parts/modes/dig_400l.lua +++ b/parts/modes/dig_400l.lua @@ -24,7 +24,7 @@ return{ end, mesDisp=function(P) setFont(55) - mStr(400-P.stat.dig,69,265) + mStr(400-P.stat.dig,63,265) end, score=function(P)return{P.stat.time,P.stat.piece}end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end, diff --git a/parts/modes/dig_40l.lua b/parts/modes/dig_40l.lua index 40afde95..8e153e48 100644 --- a/parts/modes/dig_40l.lua +++ b/parts/modes/dig_40l.lua @@ -24,7 +24,7 @@ return{ end, mesDisp=function(P) setFont(55) - mStr(40-P.stat.dig,69,265) + mStr(40-P.stat.dig,63,265) end, score=function(P)return{P.stat.time,P.stat.piece}end, scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end, diff --git a/parts/modes/dig_h.lua b/parts/modes/dig_h.lua index cd14aac6..32950406 100644 --- a/parts/modes/dig_h.lua +++ b/parts/modes/dig_h.lua @@ -22,9 +22,9 @@ return{ bg='bg2',bgm='shift', }, mesDisp=function(P) - setFont(65) - mStr(P.modeData.wave,69,310) - mText(drawableText.wave,69,375) + setFont(60) + mStr(P.modeData.wave,63,310) + mText(drawableText.wave,63,375) end, score=function(P)return{P.modeData.wave,P.stat.row}end, scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end, diff --git a/parts/modes/dig_u.lua b/parts/modes/dig_u.lua index 911a08c5..255da6c0 100644 --- a/parts/modes/dig_u.lua +++ b/parts/modes/dig_u.lua @@ -21,9 +21,9 @@ return{ bg='bg2',bgm='shift', }, mesDisp=function(P) - setFont(65) - mStr(P.modeData.wave,69,310) - mText(drawableText.wave,69,375) + setFont(60) + mStr(P.modeData.wave,63,310) + mText(drawableText.wave,63,375) end, score=function(P)return{P.modeData.wave,P.stat.row}end, scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end, diff --git a/parts/modes/drought_l.lua b/parts/modes/drought_l.lua index 3322002b..7f5d4790 100644 --- a/parts/modes/drought_l.lua +++ b/parts/modes/drought_l.lua @@ -82,9 +82,11 @@ return{ bg='blockfall',bgm='reason', }, mesDisp=function(P) - setFont(70) - local R=100-P.stat.row - mStr(R>=0 and R or 0,69,265) + setFont(55) + local r=100-P.stat.row + if r<0 then r=0 end + mStr(r,63,265) + PLY.draw.drawTargetLine(P,r) end, score=function(P)return{math.min(P.stat.row,100),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end, diff --git a/parts/modes/drought_n.lua b/parts/modes/drought_n.lua index 5f092a27..242d5c7c 100644 --- a/parts/modes/drought_n.lua +++ b/parts/modes/drought_n.lua @@ -12,9 +12,11 @@ return{ bg='blockfall',bgm='reason', }, mesDisp=function(P) - setFont(70) - local R=100-P.stat.row - mStr(R>=0 and R or 0,69,265) + setFont(55) + local r=100-P.stat.row + if r<0 then r=0 end + mStr(r,63,265) + PLY.draw.drawTargetLine(P,r) end, score=function(P)return{min(P.stat.row,100),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end, diff --git a/parts/modes/infinite.lua b/parts/modes/infinite.lua index 2bb2a07a..2fecb62d 100644 --- a/parts/modes/infinite.lua +++ b/parts/modes/infinite.lua @@ -7,9 +7,9 @@ return{ }, mesDisp=function(P) setFont(45) - mStr(("%.1f"):format(P.stat.atk),69,190) - mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,310) - mText(drawableText.atk,69,243) - mText(drawableText.eff,69,363) + mStr(("%.1f"):format(P.stat.atk),63,190) + mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310) + mText(drawableText.atk,63,243) + mText(drawableText.eff,63,363) end, } \ No newline at end of file diff --git a/parts/modes/infinite_dig.lua b/parts/modes/infinite_dig.lua index fa6d043c..be1d59e5 100644 --- a/parts/modes/infinite_dig.lua +++ b/parts/modes/infinite_dig.lua @@ -44,11 +44,11 @@ return{ end, mesDisp=function(P) setFont(45) - mStr(P.stat.dig,69,190) - mStr(P.stat.atk,69,310) - mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,420) - mText(drawableText.line,69,243) - mText(drawableText.atk,69,363) - mText(drawableText.eff,69,475) + mStr(P.stat.dig,63,190) + mStr(P.stat.atk,63,310) + mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,420) + mText(drawableText.line,63,243) + mText(drawableText.atk,63,363) + mText(drawableText.eff,63,475) end, } \ No newline at end of file diff --git a/parts/modes/marathon_bfmax.lua b/parts/modes/marathon_bfmax.lua index 42290ac6..2362983a 100644 --- a/parts/modes/marathon_bfmax.lua +++ b/parts/modes/marathon_bfmax.lua @@ -1,4 +1,3 @@ -local gc=love.graphics local dropSpeed={50,40,30,25,20,15,12,9,7,5,4,3,2,1,1,.5,.5,.25,.25} return{ @@ -36,10 +35,7 @@ return{ }, slowMark=true, mesDisp=function(P) - setFont(45) - mStr(P.stat.row,69,320) - mStr(P.modeData.target,69,370) - gc.rectangle('fill',25,375,90,4) + PLY.draw.drawProgress(P.stat.row,P.modeData.target) PLY.draw.drawTargetLine(P,200-P.stat.row) end, getRank=function(P) diff --git a/parts/modes/marathon_h.lua b/parts/modes/marathon_h.lua index f85b8570..6c23fb86 100644 --- a/parts/modes/marathon_h.lua +++ b/parts/modes/marathon_h.lua @@ -1,5 +1,3 @@ -local gc=love.graphics - return{ color=COLOR.magenta, env={ @@ -27,10 +25,7 @@ return{ }, slowMark=true, mesDisp=function(P) - setFont(45) - mStr(P.stat.row,69,320) - mStr(P.modeData.target,69,370) - gc.rectangle('fill',25,375,90,4) + PLY.draw.drawProgress(P.stat.row,P.modeData.target) PLY.draw.drawTargetLine(P,200-P.stat.row) end, score=function(P)return{math.min(P.stat.row,200),P.stat.time}end, diff --git a/parts/modes/marathon_n.lua b/parts/modes/marathon_n.lua index e6d465a1..4cce1bb3 100644 --- a/parts/modes/marathon_n.lua +++ b/parts/modes/marathon_n.lua @@ -1,4 +1,3 @@ -local gc=love.graphics local dropSpeed={50,40,30,24,18,14,10,8,6,5,4,3,2,1,1,.5,.5,.25,.25} return{ @@ -24,10 +23,7 @@ return{ }, slowMark=true, mesDisp=function(P) - setFont(45) - mStr(P.stat.row,69,320) - mStr(P.modeData.target,69,370) - gc.rectangle('fill',25,375,90,4) + PLY.draw.drawProgress(P.stat.row,P.modeData.target) PLY.draw.drawTargetLine(P,200-P.stat.row) end, score=function(P)return{math.min(P.stat.row,200),P.stat.time}end, diff --git a/parts/modes/master_ex.lua b/parts/modes/master_ex.lua index 263d93c9..e7bd328e 100644 --- a/parts/modes/master_ex.lua +++ b/parts/modes/master_ex.lua @@ -41,16 +41,16 @@ return{ }, slowMark=true, mesDisp=function(P) - mText(drawableText.line,69,300) - mText(drawableText.techrash,69,420) - mText(drawableText.grade,69,170) + mText(drawableText.line,63,300) + mText(drawableText.techrash,63,420) + mText(drawableText.grade,63,170) setFont(55) - mStr(P.modeData.rankName,69,110) + mStr(P.modeData.rankName,63,110) setFont(20) - mStr(("%.1f"):format(P.modeData.rankPoint/10),69,198) + mStr(("%.1f"):format(P.modeData.rankPoint/10),63,198) setFont(75) - mStr(P.stat.row,69,220) - mStr(P.stat.clears[4],69,340) + mStr(P.stat.row,63,220) + mStr(P.stat.clears[4],63,340) end, score=function(P)return{P.modeData.rankPoint,P.stat.score}end, scoreDisp=function(D)return sectionName[math.floor(D[1]/10)+1].." "..D[2]end, diff --git a/parts/modes/master_final.lua b/parts/modes/master_final.lua index f707fa70..27422231 100644 --- a/parts/modes/master_final.lua +++ b/parts/modes/master_final.lua @@ -1,4 +1,3 @@ -local gc=love.graphics local function score(P) local D=P.modeData @@ -58,10 +57,7 @@ return{ }, slowMark=true, mesDisp=function(P) - setFont(45) - mStr(P.modeData.pt,69,320) - mStr(P.modeData.target,69,370) - gc.rectangle('fill',25,375,90,4) + PLY.draw.drawProgress(P.modeData.pt,P.modeData.target) end, score=function(P)return{P.modeData.pt,P.stat.time}end, scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end, diff --git a/parts/modes/master_h.lua b/parts/modes/master_h.lua index daef8b85..4b40ee12 100644 --- a/parts/modes/master_h.lua +++ b/parts/modes/master_h.lua @@ -1,4 +1,3 @@ -local gc=love.graphics local death_lock={12,11,10,9,8, 7,7,7,7,6} local death_wait={10,9, 8, 7,6, 6,6,5,5,4} local death_fall={10,9, 8, 7,6, 6,5,5,4,4} @@ -74,10 +73,7 @@ return{ }, slowMark=true, mesDisp=function(P) - setFont(45) - mStr(P.modeData.pt,69,320) - mStr(P.modeData.target,69,370) - gc.rectangle('fill',25,375,90,4) + PLY.draw.drawProgress(P.modeData.pt,P.modeData.target) end, score=function(P)return{P.modeData.pt,P.stat.time}end, scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end, diff --git a/parts/modes/master_l.lua b/parts/modes/master_l.lua index 48258859..0895b134 100644 --- a/parts/modes/master_l.lua +++ b/parts/modes/master_l.lua @@ -1,4 +1,3 @@ -local gc=love.graphics local rush_lock={20,18,16,15,14} local rush_wait={12,10, 9, 8, 7} local rush_fall={18,16,14,13,12} @@ -60,10 +59,7 @@ return{ }, slowMark=true, mesDisp=function(P) - setFont(45) - mStr(P.modeData.pt,69,320) - mStr(P.modeData.target,69,370) - gc.rectangle('fill',25,375,90,4) + PLY.draw.drawProgress(P.modeData.pt,P.modeData.target) end, score=function(P)return{P.modeData.pt,P.stat.time}end, scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end, diff --git a/parts/modes/master_n.lua b/parts/modes/master_n.lua index 62c695bb..0c27a229 100644 --- a/parts/modes/master_n.lua +++ b/parts/modes/master_n.lua @@ -1,4 +1,3 @@ -local gc=love.graphics local rush_lock={20,18,16,15,14, 14,13,12,11,11} local rush_wait={12,11,11,10,10, 10,10, 9, 9, 9} local rush_fall={18,16,14,13,12, 12,11,11,10,10} @@ -74,10 +73,7 @@ return{ }, slowMark=true, mesDisp=function(P) - setFont(45) - mStr(P.modeData.pt,69,320) - mStr(P.modeData.target,69,370) - gc.rectangle('fill',25,375,90,4) + PLY.draw.drawProgress(P.modeData.pt,P.modeData.target) end, score=function(P)return{P.modeData.pt,P.stat.time}end, scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end, diff --git a/parts/modes/master_ph.lua b/parts/modes/master_ph.lua index 33465418..477b3407 100644 --- a/parts/modes/master_ph.lua +++ b/parts/modes/master_ph.lua @@ -1,5 +1,3 @@ -local gc=love.graphics - return{ color=COLOR.black, env={ @@ -147,10 +145,7 @@ return{ }, slowMark=true, mesDisp=function(P) - setFont(45) - mStr(P.modeData.pt,69,320) - mStr(P.modeData.target,69,370) - gc.rectangle('fill',25,375,90,4) + PLY.draw.drawProgress(P.modeData.pt,P.modeData.target) end, score=function(P)return{P.result=='win'and 260 or P.modeData.pt,P.stat.time}end, scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end, diff --git a/parts/modes/master_u.lua b/parts/modes/master_u.lua index c536d35b..89a8b013 100644 --- a/parts/modes/master_u.lua +++ b/parts/modes/master_u.lua @@ -1,4 +1,3 @@ -local gc=love.graphics local death_lock={12,11,10,9,8, 7,7,7,6,6} local death_wait={10, 9, 8,7,6, 6,5,4,4,3} local death_fall={10, 9, 8,7,6, 5,5,4,3,3} @@ -69,10 +68,7 @@ return{ }, slowMark=true, mesDisp=function(P) - setFont(45) - mStr(P.modeData.pt,69,320) - mStr(P.modeData.target,69,370) - gc.rectangle('fill',25,375,90,4) + PLY.draw.drawProgress(P.modeData.pt,P.modeData.target) end, score=function(P)return{P.modeData.pt,P.stat.time}end, scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end, diff --git a/parts/modes/netBattle.lua b/parts/modes/netBattle.lua index b7506877..e38883de 100644 --- a/parts/modes/netBattle.lua +++ b/parts/modes/netBattle.lua @@ -10,7 +10,7 @@ return{ color=COLOR.white, env={ bg={'bg1','bg2','blackhole','blockfall','blockrain','blockspace','cubes','fan','flink','glow','lightning','matrix','rainbow','rainbow2','rgb','tunnel','welcome'}, - bgm={'battle','beat5th','cruelty','distortion','echo','far','final','here','hope','memory','moonbeam','push','rectification','secret7th remix','secret7th','secret8th remix','secret8th','shift','shining terminal','storm','super7th','there','truth','vapor','warped','waterfall'}, + bgm={'battle','beat5th','cruelty','distortion','echo','far','final','here','hope','memory','moonbeam','push','rectification','secret7th remix','secret7th','secret8th remix','secret8th','shift','shining terminal','storm','super7th','there','truth','vapor','waterfall'}, }, load=function() for k,v in next,NET.roomState.roomData do diff --git a/parts/modes/pc_h.lua b/parts/modes/pc_h.lua index 2b57960d..01156184 100644 --- a/parts/modes/pc_h.lua +++ b/parts/modes/pc_h.lua @@ -9,13 +9,15 @@ return{ bg='rgb',bgm='truth', }, mesDisp=function(P) - setFont(45) - local R=100-P.stat.row - mStr(R>=0 and R or 0,69,220) + setFont(55) + local r=100-P.stat.row + if r<0 then r=0 end + mStr(r,63,220) + PLY.draw.drawTargetLine(P,r) setFont(70) - mStr(P.stat.pc,69,300) - mText(drawableText.pc,69,380) + mStr(P.stat.pc,63,300) + mText(drawableText.pc,63,350) end, score=function(P)return{P.stat.pc,P.stat.time}end, scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end, diff --git a/parts/modes/pc_inf.lua b/parts/modes/pc_inf.lua index 14a1afcb..46ee7754 100644 --- a/parts/modes/pc_inf.lua +++ b/parts/modes/pc_inf.lua @@ -23,8 +23,8 @@ return{ }, mesDisp=function(P) setFont(70) - mStr(P.stat.pc,69,300) - mText(drawableText.pc,69,380) + mStr(P.stat.pc,63,300) + mText(drawableText.pc,63,350) end, score=function(P)return{P.stat.pc,P.stat.time}end, scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end, diff --git a/parts/modes/pc_l.lua b/parts/modes/pc_l.lua index 4ecb20ef..14b9f11b 100644 --- a/parts/modes/pc_l.lua +++ b/parts/modes/pc_l.lua @@ -9,13 +9,15 @@ return{ bg='rgb',bgm='moonbeam', }, mesDisp=function(P) - setFont(45) - local R=100-P.stat.row - mStr(R>=0 and R or 0,69,220) + setFont(55) + local r=100-P.stat.row + if r<0 then r=0 end + mStr(r,63,220) + PLY.draw.drawTargetLine(P,r) setFont(70) - mStr(P.stat.pc,69,300) - mText(drawableText.pc,69,380) + mStr(P.stat.pc,63,300) + mText(drawableText.pc,63,350) end, score=function(P)return{P.stat.pc,P.stat.time}end, scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end, diff --git a/parts/modes/pc_n.lua b/parts/modes/pc_n.lua index 6c0b0b74..a6c81cbd 100644 --- a/parts/modes/pc_n.lua +++ b/parts/modes/pc_n.lua @@ -7,13 +7,15 @@ return{ bg='rgb',bgm='truth', }, mesDisp=function(P) - setFont(45) - local R=100-P.stat.row - mStr(R>=0 and R or 0,69,220) + setFont(55) + local r=100-P.stat.row + if r<0 then r=0 end + mStr(r,63,220) + PLY.draw.drawTargetLine(P,r) setFont(70) - mStr(P.stat.pc,69,300) - mText(drawableText.pc,69,380) + mStr(P.stat.pc,63,300) + mText(drawableText.pc,63,350) end, score=function(P)return{P.stat.pc,P.stat.time}end, scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end, diff --git a/parts/modes/pctrain_l.lua b/parts/modes/pctrain_l.lua index 95f476f8..be30fb96 100644 --- a/parts/modes/pctrain_l.lua +++ b/parts/modes/pctrain_l.lua @@ -58,8 +58,8 @@ return{ end, mesDisp=function(P) setFont(70) - mStr(P.stat.pc,69,300) - mText(drawableText.pc,69,380) + mStr(P.stat.pc,63,300) + mText(drawableText.pc,63,350) end, score=function(P)return{P.stat.pc,P.stat.time}end, scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end, diff --git a/parts/modes/pctrain_n.lua b/parts/modes/pctrain_n.lua index 199de097..8f57f3de 100644 --- a/parts/modes/pctrain_n.lua +++ b/parts/modes/pctrain_n.lua @@ -49,8 +49,8 @@ return{ end, mesDisp=function(P) setFont(70) - mStr(P.stat.pc,69,300) - mText(drawableText.pc,69,380) + mStr(P.stat.pc,63,300) + mText(drawableText.pc,63,350) end, score=function(P)return{P.stat.pc,P.stat.time}end, scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end, diff --git a/parts/modes/rhythm_e.lua b/parts/modes/rhythm_e.lua index dbc44c26..bd766a9e 100644 --- a/parts/modes/rhythm_e.lua +++ b/parts/modes/rhythm_e.lua @@ -45,21 +45,18 @@ return{ }, slowMark=true, mesDisp=function(P) - setFont(45) - mStr(P.stat.row,69,320) - mStr(P.modeData.target,69,370) - gc.rectangle('fill',25,375,90,4) + PLY.draw.drawProgress(P.stat.row,P.modeData.target) setFont(30) - mStr(P.modeData.bpm,69,178) + mStr(P.modeData.bpm,63,178) gc.setLineWidth(4) - gc.circle('line',69,200,30) + gc.circle('line',63,200,30) local beat=P.modeData.counter/P.modeData.beatFrame gc.setColor(1,1,1,1-beat) gc.setLineWidth(3) - gc.circle('line',69,200,30+45*beat) + gc.circle('line',63,200,30+45*beat) end, score=function(P)return{math.min(P.stat.row,200),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end, diff --git a/parts/modes/rhythm_h.lua b/parts/modes/rhythm_h.lua index 190b84e3..078001b0 100644 --- a/parts/modes/rhythm_h.lua +++ b/parts/modes/rhythm_h.lua @@ -45,21 +45,18 @@ return{ }, slowMark=true, mesDisp=function(P) - setFont(45) - mStr(P.stat.row,69,320) - mStr(P.modeData.target,69,370) - gc.rectangle('fill',25,375,90,4) + PLY.draw.drawProgress(P.stat.row,P.modeData.target) setFont(30) - mStr(P.modeData.bpm,69,178) + mStr(P.modeData.bpm,63,178) gc.setLineWidth(4) - gc.circle('line',69,200,30) + gc.circle('line',63,200,30) local beat=P.modeData.counter/P.modeData.beatFrame gc.setColor(1,1,1,1-beat) gc.setLineWidth(3) - gc.circle('line',69,200,30+45*beat) + gc.circle('line',63,200,30+45*beat) end, score=function(P)return{math.min(P.stat.row,200),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end, diff --git a/parts/modes/rhythm_u.lua b/parts/modes/rhythm_u.lua index 158e23bd..eae0ae3d 100644 --- a/parts/modes/rhythm_u.lua +++ b/parts/modes/rhythm_u.lua @@ -51,21 +51,18 @@ return{ }, slowMark=true, mesDisp=function(P) - setFont(45) - mStr(P.stat.row,69,320) - mStr(P.modeData.target,69,370) - gc.rectangle('fill',25,375,90,4) + PLY.draw.drawProgress(P.stat.row,P.modeData.target) setFont(30) - mStr(P.modeData.bpm,69,178) + mStr(P.modeData.bpm,63,178) gc.setLineWidth(4) - gc.circle('line',69,200,30) + gc.circle('line',63,200,30) local beat=P.modeData.counter/P.modeData.beatFrame gc.setColor(1,1,1,1-beat) gc.setLineWidth(3) - gc.circle('line',69,200,30+45*beat) + gc.circle('line',63,200,30+45*beat) end, score=function(P)return{math.min(P.stat.row,200),P.stat.time}end, scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end, diff --git a/parts/modes/sprintAtk.lua b/parts/modes/sprintAtk.lua index bb07eaa1..b43354a1 100644 --- a/parts/modes/sprintAtk.lua +++ b/parts/modes/sprintAtk.lua @@ -8,10 +8,10 @@ return{ }, mesDisp=function(P) setFont(45) - mStr(("%.1f"):format(P.stat.atk),69,190) - mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,310) - mText(drawableText.atk,69,243) - mText(drawableText.eff,69,363) + mStr(("%.1f"):format(P.stat.atk),63,190) + mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310) + mText(drawableText.atk,63,243) + mText(drawableText.eff,63,363) end, score=function(P)return{P.stat.atk<=100 and math.floor(P.stat.atk)or 100,P.stat.time}end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end, diff --git a/parts/modes/sprintFix.lua b/parts/modes/sprintFix.lua index 276d1af0..140c85f2 100644 --- a/parts/modes/sprintFix.lua +++ b/parts/modes/sprintFix.lua @@ -11,7 +11,7 @@ return{ setFont(55) local r=40-P.stat.row if r<0 then r=0 end - mStr(r,69,265) + mStr(r,63,265) PLY.draw.drawTargetLine(P,r) end, getRank=function(P) diff --git a/parts/modes/sprintLock.lua b/parts/modes/sprintLock.lua index 37c319c9..f9142fb8 100644 --- a/parts/modes/sprintLock.lua +++ b/parts/modes/sprintLock.lua @@ -10,7 +10,7 @@ return{ setFont(55) local r=40-P.stat.row if r<0 then r=0 end - mStr(r,69,265) + mStr(r,63,265) PLY.draw.drawTargetLine(P,r) end, getRank=function(P) diff --git a/parts/modes/sprintMPH.lua b/parts/modes/sprintMPH.lua index 791e4f85..1c1ee4aa 100644 --- a/parts/modes/sprintMPH.lua +++ b/parts/modes/sprintMPH.lua @@ -11,7 +11,7 @@ return{ setFont(55) local r=40-P.stat.row if r<0 then r=0 end - mStr(r,69,265) + mStr(r,63,265) PLY.draw.drawTargetLine(P,r) end, score=function(P)return{P.stat.time,P.stat.piece}end, diff --git a/parts/modes/sprintPenta.lua b/parts/modes/sprintPenta.lua index ce0ae362..5213a8f7 100644 --- a/parts/modes/sprintPenta.lua +++ b/parts/modes/sprintPenta.lua @@ -10,7 +10,7 @@ return{ setFont(55) local r=40-P.stat.row if r<0 then r=0 end - mStr(r,69,265) + mStr(r,63,265) PLY.draw.drawTargetLine(P,r) end, score=function(P)return{P.stat.time,P.stat.piece}end, diff --git a/parts/modes/sprintSmooth.lua b/parts/modes/sprintSmooth.lua index 7f302a29..8824789b 100644 --- a/parts/modes/sprintSmooth.lua +++ b/parts/modes/sprintSmooth.lua @@ -11,7 +11,7 @@ return{ setFont(55) local r=40-P.stat.row if r<0 then r=0 end - mStr(r,69,265) + mStr(r,63,265) PLY.draw.drawTargetLine(P,r) end, getRank=function(P) diff --git a/parts/modes/sprint_1000l.lua b/parts/modes/sprint_1000l.lua index eade5306..b75d3df3 100644 --- a/parts/modes/sprint_1000l.lua +++ b/parts/modes/sprint_1000l.lua @@ -9,7 +9,7 @@ return{ setFont(55) local r=1000-P.stat.row if r<0 then r=0 end - mStr(r,69,265) + mStr(r,63,265) PLY.draw.drawTargetLine(P,r) end, score=function(P)return{P.stat.time,P.stat.piece}end, diff --git a/parts/modes/sprint_100l.lua b/parts/modes/sprint_100l.lua index f5aeb342..b8347e6e 100644 --- a/parts/modes/sprint_100l.lua +++ b/parts/modes/sprint_100l.lua @@ -9,7 +9,7 @@ return{ setFont(55) local r=100-P.stat.row if r<0 then r=0 end - mStr(r,69,265) + mStr(r,63,265) PLY.draw.drawTargetLine(P,r) end, score=function(P)return{P.stat.time,P.stat.piece}end, diff --git a/parts/modes/sprint_10l.lua b/parts/modes/sprint_10l.lua index c704abf7..9731553d 100644 --- a/parts/modes/sprint_10l.lua +++ b/parts/modes/sprint_10l.lua @@ -9,7 +9,7 @@ return{ setFont(55) local r=10-P.stat.row if r<0 then r=0 end - mStr(r,69,265) + mStr(r,63,265) PLY.draw.drawTargetLine(P,r) end, score=function(P)return{P.stat.time,P.stat.piece}end, diff --git a/parts/modes/sprint_20l.lua b/parts/modes/sprint_20l.lua index d3dc2d78..e41fa588 100644 --- a/parts/modes/sprint_20l.lua +++ b/parts/modes/sprint_20l.lua @@ -9,7 +9,7 @@ return{ setFont(55) local r=20-P.stat.row if r<0 then r=0 end - mStr(r,69,265) + mStr(r,63,265) PLY.draw.drawTargetLine(P,r) end, score=function(P)return{P.stat.time,P.stat.piece}end, diff --git a/parts/modes/sprint_400l.lua b/parts/modes/sprint_400l.lua index 1dff7de2..df3ec0c3 100644 --- a/parts/modes/sprint_400l.lua +++ b/parts/modes/sprint_400l.lua @@ -9,7 +9,7 @@ return{ setFont(55) local r=400-P.stat.row if r<0 then r=0 end - mStr(r,69,265) + mStr(r,63,265) PLY.draw.drawTargetLine(P,r) end, score=function(P)return{P.stat.time,P.stat.piece}end, diff --git a/parts/modes/sprint_40l.lua b/parts/modes/sprint_40l.lua index 9c7ece23..358595c1 100644 --- a/parts/modes/sprint_40l.lua +++ b/parts/modes/sprint_40l.lua @@ -9,7 +9,7 @@ return{ setFont(55) local r=40-P.stat.row if r<0 then r=0 end - mStr(r,69,265) + mStr(r,63,265) PLY.draw.drawTargetLine(P,r) end, score=function(P)return{P.stat.time,P.stat.piece}end, diff --git a/parts/modes/stack_100l.lua b/parts/modes/stack_100l.lua index e4008211..f15c60f4 100644 --- a/parts/modes/stack_100l.lua +++ b/parts/modes/stack_100l.lua @@ -11,8 +11,9 @@ return{ bg='none',bgm='there', }, mesDisp=function(P) - setFont(55) - mStr(P.stat.piece,69,265) + setFont(60) + mStr(P.stat.piece,63,280) + mText(drawableText.piece,63,350) end, score=function(P)return{P.stat.piece,P.stat.time}end, scoreDisp=function(D)return D[1].." Pieces".." "..STRING.time(D[2])end, diff --git a/parts/modes/stack_20l.lua b/parts/modes/stack_20l.lua index 1a4e3d39..f4066d58 100644 --- a/parts/modes/stack_20l.lua +++ b/parts/modes/stack_20l.lua @@ -8,8 +8,9 @@ return{ bg='none',bgm='there', }, mesDisp=function(P) - setFont(55) - mStr(P.stat.piece,69,265) + setFont(60) + mStr(P.stat.piece,63,280) + mText(drawableText.piece,63,350) end, score=function(P)return{P.stat.piece,P.stat.time}end, scoreDisp=function(D)return D[1].." Pieces".." "..STRING.time(D[2])end, diff --git a/parts/modes/stack_40l.lua b/parts/modes/stack_40l.lua index 02229a66..02893d8e 100644 --- a/parts/modes/stack_40l.lua +++ b/parts/modes/stack_40l.lua @@ -10,8 +10,9 @@ return{ bg='none',bgm='there', }, mesDisp=function(P) - setFont(55) - mStr(P.stat.piece,69,265) + setFont(60) + mStr(P.stat.piece,63,280) + mText(drawableText.piece,63,350) end, score=function(P)return{P.stat.piece,P.stat.time}end, scoreDisp=function(D)return D[1].." Pieces".." "..STRING.time(D[2])end, diff --git a/parts/modes/survivor_e.lua b/parts/modes/survivor_e.lua index c31681ee..9ebb206a 100644 --- a/parts/modes/survivor_e.lua +++ b/parts/modes/survivor_e.lua @@ -23,9 +23,9 @@ return{ bg='glow',bgm='new era', }, mesDisp=function(P) - setFont(65) - mStr(P.modeData.wave,69,310) - mText(drawableText.wave,69,375) + setFont(60) + mStr(P.modeData.wave,63,280) + mText(drawableText.wave,63,375) end, score=function(P)return{P.modeData.wave,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end, diff --git a/parts/modes/survivor_h.lua b/parts/modes/survivor_h.lua index 0a57bc47..93a692f3 100644 --- a/parts/modes/survivor_h.lua +++ b/parts/modes/survivor_h.lua @@ -30,9 +30,9 @@ return{ bg='glow',bgm='new era', }, mesDisp=function(P) - setFont(65) - mStr(P.modeData.wave,69,310) - mText(drawableText.wave,69,375) + setFont(60) + mStr(P.modeData.wave,63,280) + mText(drawableText.wave,63,375) end, score=function(P)return{P.modeData.wave,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end, diff --git a/parts/modes/survivor_l.lua b/parts/modes/survivor_l.lua index 6fee0efa..8257e80c 100644 --- a/parts/modes/survivor_l.lua +++ b/parts/modes/survivor_l.lua @@ -24,9 +24,9 @@ return{ bg='glow',bgm='here', }, mesDisp=function(P) - setFont(65) - mStr(P.modeData.wave,69,310) - mText(drawableText.wave,69,375) + setFont(60) + mStr(P.modeData.wave,63,280) + mText(drawableText.wave,63,375) end, score=function(P)return{P.modeData.wave,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end, diff --git a/parts/modes/survivor_n.lua b/parts/modes/survivor_n.lua index 692c643e..32e4330c 100644 --- a/parts/modes/survivor_n.lua +++ b/parts/modes/survivor_n.lua @@ -29,9 +29,9 @@ return{ bg='glow',bgm='new era', }, mesDisp=function(P) - setFont(65) - mStr(P.modeData.wave,69,310) - mText(drawableText.wave,69,375) + setFont(60) + mStr(P.modeData.wave,63,280) + mText(drawableText.wave,63,375) end, score=function(P)return{P.modeData.wave,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end, diff --git a/parts/modes/survivor_u.lua b/parts/modes/survivor_u.lua index f39f03a5..d15e89d3 100644 --- a/parts/modes/survivor_u.lua +++ b/parts/modes/survivor_u.lua @@ -29,9 +29,9 @@ return{ bg='welcome',bgm='here', }, mesDisp=function(P) - setFont(65) - mStr(P.modeData.wave,69,310) - mText(drawableText.wave,69,375) + setFont(60) + mStr(P.modeData.wave,63,280) + mText(drawableText.wave,63,375) end, score=function(P)return{P.modeData.wave,P.stat.time}end, scoreDisp=function(D)return D[1].." Waves "..STRING.time(D[2])end, diff --git a/parts/modes/tech_finesse.lua b/parts/modes/tech_finesse.lua index 9e604b63..57f918af 100644 --- a/parts/modes/tech_finesse.lua +++ b/parts/modes/tech_finesse.lua @@ -11,10 +11,10 @@ return{ slowMark=true, mesDisp=function(P) setFont(45) - mStr(("%.1f"):format(P.stat.atk),69,190) - mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,310) - mText(drawableText.atk,69,243) - mText(drawableText.eff,69,363) + mStr(("%.1f"):format(P.stat.atk),63,190) + mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310) + mText(drawableText.atk,63,243) + mText(drawableText.eff,63,363) end, score=function(P)return{P.stat.atk<=100 and math.floor(P.stat.atk)or 100,P.stat.time}end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end, diff --git a/parts/modes/tech_finesse_f.lua b/parts/modes/tech_finesse_f.lua index 03aafaf7..9c3cc051 100644 --- a/parts/modes/tech_finesse_f.lua +++ b/parts/modes/tech_finesse_f.lua @@ -24,10 +24,10 @@ return{ slowMark=true, mesDisp=function(P) setFont(45) - mStr(("%.1f"):format(P.stat.atk),69,190) - mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,310) - mText(drawableText.atk,69,243) - mText(drawableText.eff,69,363) + mStr(("%.1f"):format(P.stat.atk),63,190) + mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310) + mText(drawableText.atk,63,243) + mText(drawableText.eff,63,363) end, score=function(P)return{P.stat.atk<=100 and math.floor(P.stat.atk)or 100,P.stat.time}end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end, diff --git a/parts/modes/tech_h.lua b/parts/modes/tech_h.lua index 2d92df01..ceaefb21 100644 --- a/parts/modes/tech_h.lua +++ b/parts/modes/tech_h.lua @@ -9,10 +9,10 @@ return{ }, mesDisp=function(P) setFont(45) - mStr(("%.1f"):format(P.stat.atk),69,190) - mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,310) - mText(drawableText.atk,69,243) - mText(drawableText.eff,69,363) + mStr(("%.1f"):format(P.stat.atk),63,190) + mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310) + mText(drawableText.atk,63,243) + mText(drawableText.eff,63,363) end, score=function(P)return{P.stat.atk<=100 and math.floor(P.stat.atk)or 100,P.stat.time}end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end, diff --git a/parts/modes/tech_h_plus.lua b/parts/modes/tech_h_plus.lua index 171733e4..3936f171 100644 --- a/parts/modes/tech_h_plus.lua +++ b/parts/modes/tech_h_plus.lua @@ -21,10 +21,10 @@ return{ }, mesDisp=function(P) setFont(45) - mStr(("%.1f"):format(P.stat.atk),69,190) - mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,310) - mText(drawableText.atk,69,243) - mText(drawableText.eff,69,363) + mStr(("%.1f"):format(P.stat.atk),63,190) + mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310) + mText(drawableText.atk,63,243) + mText(drawableText.eff,63,363) end, score=function(P)return{P.stat.atk<=100 and math.floor(P.stat.atk)or 100,P.stat.time}end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end, diff --git a/parts/modes/tech_l.lua b/parts/modes/tech_l.lua index 2cfe4332..ded89a66 100644 --- a/parts/modes/tech_l.lua +++ b/parts/modes/tech_l.lua @@ -9,10 +9,10 @@ return{ }, mesDisp=function(P) setFont(45) - mStr(("%.1f"):format(P.stat.atk),69,190) - mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,310) - mText(drawableText.atk,69,243) - mText(drawableText.eff,69,363) + mStr(("%.1f"):format(P.stat.atk),63,190) + mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310) + mText(drawableText.atk,63,243) + mText(drawableText.eff,63,363) end, score=function(P)return{P.stat.atk<=100 and math.floor(P.stat.atk)or 100,P.stat.time}end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end, diff --git a/parts/modes/tech_l_plus.lua b/parts/modes/tech_l_plus.lua index eb7081a7..72af918d 100644 --- a/parts/modes/tech_l_plus.lua +++ b/parts/modes/tech_l_plus.lua @@ -21,10 +21,10 @@ return{ }, mesDisp=function(P) setFont(45) - mStr(("%.1f"):format(P.stat.atk),69,190) - mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,310) - mText(drawableText.atk,69,243) - mText(drawableText.eff,69,363) + mStr(("%.1f"):format(P.stat.atk),63,190) + mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310) + mText(drawableText.atk,63,243) + mText(drawableText.eff,63,363) end, score=function(P)return{P.stat.atk<=100 and math.floor(P.stat.atk)or 100,P.stat.time}end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end, diff --git a/parts/modes/tech_n.lua b/parts/modes/tech_n.lua index 773c5784..6b803579 100644 --- a/parts/modes/tech_n.lua +++ b/parts/modes/tech_n.lua @@ -9,10 +9,10 @@ return{ }, mesDisp=function(P) setFont(45) - mStr(("%.1f"):format(P.stat.atk),69,190) - mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,310) - mText(drawableText.atk,69,243) - mText(drawableText.eff,69,363) + mStr(("%.1f"):format(P.stat.atk),63,190) + mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310) + mText(drawableText.atk,63,243) + mText(drawableText.eff,63,363) end, score=function(P)return{P.stat.atk<=100 and math.floor(P.stat.atk)or 100,P.stat.time}end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end, diff --git a/parts/modes/tech_n_plus.lua b/parts/modes/tech_n_plus.lua index 432ebe81..c7894020 100644 --- a/parts/modes/tech_n_plus.lua +++ b/parts/modes/tech_n_plus.lua @@ -21,10 +21,10 @@ return{ }, mesDisp=function(P) setFont(45) - mStr(("%.1f"):format(P.stat.atk),69,190) - mStr(("%.2f"):format(P.stat.atk/P.stat.row),69,310) - mText(drawableText.atk,69,243) - mText(drawableText.eff,69,363) + mStr(("%.1f"):format(P.stat.atk),63,190) + mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310) + mText(drawableText.atk,63,243) + mText(drawableText.eff,63,363) end, score=function(P)return{P.stat.atk<=100 and math.floor(P.stat.atk)or 100,P.stat.time}end, scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end, diff --git a/parts/modes/techmino49_e.lua b/parts/modes/techmino49_e.lua index 22d9f059..78fbab3e 100644 --- a/parts/modes/techmino49_e.lua +++ b/parts/modes/techmino49_e.lua @@ -54,19 +54,7 @@ return{ end end end, mesDisp=function(P) - setFont(35) - mStr(#PLY_ALIVE.."/49",69,175) - mStr(P.modeData.ko,80,215) - gc.draw(drawableText.ko,60-drawableText.ko:getWidth(),222) - setFont(20) - gc.setColor(1,.5,0,.6) - gc.print(P.badge,103,227) - gc.setColor(1,1,1) - setFont(25) - gc.print(text.powerUp[P.strength],18,290) - for i=1,P.strength do - gc.draw(IMG.badgeIcon,16*i+12,260) - end + PLY.draw.drawRoyaleInfo(P) end, score=function(P)return{P.modeData.place,P.modeData.ko}end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end, diff --git a/parts/modes/techmino49_h.lua b/parts/modes/techmino49_h.lua index e7bb4954..b4197c1e 100644 --- a/parts/modes/techmino49_h.lua +++ b/parts/modes/techmino49_h.lua @@ -54,19 +54,7 @@ return{ end end end, mesDisp=function(P) - setFont(35) - mStr(#PLY_ALIVE.."/49",69,175) - mStr(P.modeData.ko,80,215) - gc.draw(drawableText.ko,60-drawableText.ko:getWidth(),222) - setFont(20) - gc.setColor(1,.5,0,.6) - gc.print(P.badge,103,227) - gc.setColor(1,1,1) - setFont(25) - gc.print(text.powerUp[P.strength],18,290) - for i=1,P.strength do - gc.draw(IMG.badgeIcon,16*i+12,260) - end + PLY.draw.drawRoyaleInfo(P) end, score=function(P)return{P.modeData.place,P.modeData.ko}end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end, diff --git a/parts/modes/techmino49_u.lua b/parts/modes/techmino49_u.lua index e147f838..0264f5ef 100644 --- a/parts/modes/techmino49_u.lua +++ b/parts/modes/techmino49_u.lua @@ -54,19 +54,7 @@ return{ end end end, mesDisp=function(P) - setFont(35) - mStr(#PLY_ALIVE.."/49",69,175) - mStr(P.modeData.ko,80,215) - gc.draw(drawableText.ko,60-drawableText.ko:getWidth(),222) - setFont(20) - gc.setColor(1,.5,0,.6) - gc.print(P.badge,103,227) - gc.setColor(1,1,1) - setFont(25) - gc.print(text.powerUp[P.strength],18,290) - for i=1,P.strength do - gc.draw(IMG.badgeIcon,16*i+12,260) - end + PLY.draw.drawRoyaleInfo(P) end, score=function(P)return{P.modeData.place,P.modeData.ko}end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end, diff --git a/parts/modes/techmino99_e.lua b/parts/modes/techmino99_e.lua index bdd80d11..c0018b79 100644 --- a/parts/modes/techmino99_e.lua +++ b/parts/modes/techmino99_e.lua @@ -54,19 +54,7 @@ return{ end end end, mesDisp=function(P) - setFont(35) - mStr(#PLY_ALIVE.."/99",69,175) - mStr(P.modeData.ko,80,215) - gc.draw(drawableText.ko,60-drawableText.ko:getWidth(),222) - setFont(20) - gc.setColor(1,.5,0,.6) - gc.print(P.badge,103,227) - gc.setColor(1,1,1) - setFont(25) - gc.print(text.powerUp[P.strength],18,290) - for i=1,P.strength do - gc.draw(IMG.badgeIcon,16*i+12,260) - end + PLY.draw.drawRoyaleInfo(P) end, score=function(P)return{P.modeData.place,P.modeData.ko}end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end, diff --git a/parts/modes/techmino99_h.lua b/parts/modes/techmino99_h.lua index 9e6a3080..feecfaea 100644 --- a/parts/modes/techmino99_h.lua +++ b/parts/modes/techmino99_h.lua @@ -54,19 +54,7 @@ return{ end end end, mesDisp=function(P) - setFont(35) - mStr(#PLY_ALIVE.."/99",69,175) - mStr(P.modeData.ko,80,215) - gc.draw(drawableText.ko,60-drawableText.ko:getWidth(),222) - setFont(20) - gc.setColor(1,.5,0,.6) - gc.print(P.badge,103,227) - gc.setColor(1,1,1) - setFont(25) - gc.print(text.powerUp[P.strength],18,290) - for i=1,P.strength do - gc.draw(IMG.badgeIcon,16*i+12,260) - end + PLY.draw.drawRoyaleInfo(P) end, score=function(P)return{P.modeData.place,P.modeData.ko}end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end, diff --git a/parts/modes/techmino99_u.lua b/parts/modes/techmino99_u.lua index 6ed61432..edee6ecc 100644 --- a/parts/modes/techmino99_u.lua +++ b/parts/modes/techmino99_u.lua @@ -54,19 +54,7 @@ return{ end end end, mesDisp=function(P) - setFont(35) - mStr(#PLY_ALIVE.."/99",69,175) - mStr(P.modeData.ko,80,215) - gc.draw(drawableText.ko,60-drawableText.ko:getWidth(),222) - setFont(20) - gc.setColor(1,.5,0,.6) - gc.print(P.badge,103,227) - gc.setColor(1,1,1) - setFont(25) - gc.print(text.powerUp[P.strength],18,290) - for i=1,P.strength do - gc.draw(IMG.badgeIcon,16*i+12,260) - end + PLY.draw.drawRoyaleInfo(P) end, score=function(P)return{P.modeData.place,P.modeData.ko}end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end, diff --git a/parts/modes/tsd_e.lua b/parts/modes/tsd_e.lua index b8ee45cd..4855c132 100644 --- a/parts/modes/tsd_e.lua +++ b/parts/modes/tsd_e.lua @@ -19,9 +19,9 @@ return{ bg='matrix',bgm='vapor', }, mesDisp=function(P) - setFont(65) - mStr(P.modeData.tsd,69,250) - mText(drawableText.tsd,69,315) + setFont(60) + mStr(P.modeData.tsd,63,250) + mText(drawableText.tsd,63,315) end, score=function(P)return{P.modeData.tsd,P.stat.time}end, scoreDisp=function(D)return D[1].."TSD "..STRING.time(D[2])end, diff --git a/parts/modes/tsd_h.lua b/parts/modes/tsd_h.lua index 3f2570f8..92fa6989 100644 --- a/parts/modes/tsd_h.lua +++ b/parts/modes/tsd_h.lua @@ -19,9 +19,9 @@ return{ bg='matrix',bgm='vapor', }, mesDisp=function(P) - setFont(65) - mStr(P.modeData.tsd,69,250) - mText(drawableText.tsd,69,315) + setFont(60) + mStr(P.modeData.tsd,63,250) + mText(drawableText.tsd,63,315) end, score=function(P)return{P.modeData.tsd,P.stat.time}end, scoreDisp=function(D)return D[1].."TSD "..STRING.time(D[2])end, diff --git a/parts/modes/tsd_u.lua b/parts/modes/tsd_u.lua index 6dd46e5c..16f7cbdc 100644 --- a/parts/modes/tsd_u.lua +++ b/parts/modes/tsd_u.lua @@ -28,9 +28,9 @@ return{ bg='matrix',bgm='vapor', }, mesDisp=function(P) - setFont(65) - mStr(P.modeData.tsd,69,250) - mText(drawableText.tsd,69,315) + setFont(60) + mStr(P.modeData.tsd,63,250) + mText(drawableText.tsd,63,315) gc.push('transform') PLY.draw.applyFieldOffset(P) gc.translate(0,P.fieldBeneath+P.fieldUp) diff --git a/parts/modes/zen.lua b/parts/modes/zen.lua index 454ac5b9..87664cbd 100644 --- a/parts/modes/zen.lua +++ b/parts/modes/zen.lua @@ -9,7 +9,7 @@ return{ mesDisp=function(P) setFont(70) local R=200-P.stat.row - mStr(R>=0 and R or 0,69,265) + mStr(R>=0 and R or 0,63,265) end, score=function(P)return{P.stat.score}end, scoreDisp=function(D)return tostring(D[1])end, diff --git a/parts/patron.lua b/parts/patron.lua index 16aa6b62..8e898b0e 100644 --- a/parts/patron.lua +++ b/parts/patron.lua @@ -23,6 +23,7 @@ return{ {font=65,name="猫宫"}, {font=65,name="Notypey"}, {font=65,name="亮君"}, + {font=65,name="柴影"}, {font=25,name="八零哥"}, {font=25,name="蕴空之灵"}, @@ -112,4 +113,5 @@ return{ {font=25,name="[*梅]"}, {font=25,name="晦风羽幕"}, {font=25,name="T9753"}, + {font=25,name="Trebor"}, } \ No newline at end of file diff --git a/parts/player/draw.lua b/parts/player/draw.lua index d31f1dde..75201f2f 100644 --- a/parts/player/draw.lua +++ b/parts/player/draw.lua @@ -29,47 +29,41 @@ local hideBoardStencil={ down=function()gc_rectangle('fill',0,300,300,300)end, all=function()gc_rectangle('fill',0,0,300,600)end, } -local dialFrame=DOGC{70,70, +local dialFrame=GC.DO{97,32, {'setLW',2}, - {'dCirc',35,35,30,6}, - {'setCL',1,1,1,.6}, - {'setLW',4}, - {'dCirc',35,35,30,6}, + {'dRect',1,1,30,30,3}, + {'dRect',36,1,60,30,3}, } -local multiple=DOGC{15,15, +local dialNeedle=GC.DO{22,4, + {'fRect',0,1,20,2}, + {'fCirc',20,2,2}, +} +local multiple=GC.DO{15,15, {'setLW',3}, {'line',2,2,12,12}, {'line',2,12,12,2}, } -local spinCenterImg=DOGC{9,9, - {'setCL',1,1,1,.2}, - {'fRect',0,0,9,9}, - {'setCL',1,1,1,.6}, - {'fRect',1,1,7,7}, - {'setCL',1,1,1,.8}, - {'fRect',2,2,5,5}, - {'setCL',1,1,1}, - {'fRect',3,3,3,3}, -} -local playerBoarders=DOGC{334,614, +local playerBoarder=GC.DO{334,620, {'setLW',2}, - {'dRect',16,1,302,612}, - {'dRect',318,9,15,604}, - {'dRect',1,9,15,604}, + {'setCL',.97,.97,.975}, + {'dRect',16,1,302,618,5}, + {'fRect',17,612,300,2}, + {'dRect',318,9,15,596,3}, + {'dRect',1,9,15,596,3}, } local gridLines do local L={300,640,{'setLW',2}} for x=1,9 do table.insert(L,{'line',30*x,0,30*x,640})end for y=0,20 do table.insert(L,{'line',0,10+30*y,300,10+30*y})end - gridLines=DOGC(L) + gridLines=GC.DO(L) end -local LDmarks=gc.newSpriteBatch(DOGC{14,5,{'clear',1,1,1}},15,'static') +local LDmarks=gc.newSpriteBatch(GC.DO{14,5,{'fRect',0,0,14,5,3}},15,'static') for i=0,14 do LDmarks:add(3+20*i,615)end -local bpmImage=DOGC{31,12, +local bpmImage=GC.DO{31,12, {'setFT',15}, {'print',"BPM",0,-5} } -local kpmImage=DOGC{31,12, +local kpmImage=GC.DO{31,12, {'setFT',15}, {'print',"KPM",0,-5} } @@ -322,7 +316,7 @@ local function drawBuffer(P) for i=1,#P.atkBuffer do local A=P.atkBuffer[i] local bar=A.amount*30 - if h+bar>600 then bar=600-h end + if h+bar>600-8 then bar=600-8-h end if not A.sent then --Appear if A.time<20 then @@ -331,24 +325,24 @@ local function drawBuffer(P) if A.countdown>0 then --Timing gc_setColor(attackColor[A.lv][1]) - gc_rectangle('fill',303,599-h,11,-bar) + gc_rectangle('fill',303,591-h-bar,11,bar,2) gc_setColor(1,1,1) for j=30,A.cd0-30,30 do - gc_rectangle('fill',303,599-h-bar*(j/A.cd0),6,2) + gc_rectangle('fill',303,591-h-bar*(j/A.cd0),6,2) end gc_setColor(attackColor[A.lv][2]) - gc_rectangle('fill',303,599-h-bar,11,bar*(1-A.countdown/A.cd0)) + gc_rectangle('fill',303,591-h-bar,11,bar*(1-A.countdown/A.cd0),2) else --Warning local a=math.sin((TIME()-i)*30)*.5+.5 local c1,c2=attackColor[A.lv][1],attackColor[A.lv][2] gc_setColor(c1[1]*a+c2[1]*(1-a),c1[2]*a+c2[2]*(1-a),c1[3]*a+c2[3]*(1-a)) - gc_rectangle('fill',303,599-h,11,-bar) + gc_rectangle('fill',303,591-h-bar,11,bar,2) end else gc_setColor(attackColor[A.lv][1]) bar=bar*(20-A.time)*.05 - gc_rectangle('fill',303,599-h,11,-bar) + gc_rectangle('fill',303,591-h-bar,11,bar,2) --Disappear end h=h+bar @@ -375,22 +369,22 @@ end local function drawB2Bbar(P) local a,b=P.b2b,P.b2b1 if a>b then a,b=b,a end gc_setColor(.8,1,.2) - gc_rectangle('fill',-14,599,11,-b*.6) - gc_setColor(P.b2b<40 and COLOR.Z or P.b2b<=800 and COLOR.lR or COLOR.lB) - gc_rectangle('fill',-14,599,11,-a*.6) + gc_rectangle('fill',-14,591,11,-b*.592) + gc_setColor(P.b2b<50 and COLOR.Z or P.b2b<=800 and COLOR.lR or COLOR.lB) + gc_rectangle('fill',-14,591,11,-a*.592) if TIME()%.5<.3 then gc_setColor(1,1,1) - gc_rectangle('fill',-15,b<40 and 568.5 or 118.5,13,3) + gc_rectangle('fill',-15,b<50 and 560 or 116,13,3,2) end end local function drawLDI(P,ENV)--Lock Delay Indicator if ENV.easyFresh then - gc_setColor(1,1,1) + gc_setColor(.97,.97,.975) else - gc_setColor(1,.26,.26) + gc_setColor(1,.5,.5) end if P.lockDelay>=0 then - gc_rectangle('fill',0,602,300*P.lockDelay/ENV.lock,6)--Lock delay indicator + gc_rectangle('fill',0,602,300*P.lockDelay/ENV.lock,4) end if P.freshTime>0 then LDmarks:setDrawRange(1,min(P.freshTime,15)) @@ -404,22 +398,19 @@ local function drawHold(P) local holdQueue=P.holdQueue local N=ENV.holdCount*72 gc_push('transform') - gc_translate(-140,20) - gc_setColor(0,0,0,.4)gc_rectangle('fill',0,0,124,N+8) - gc_setColor(1,1,1)gc_rectangle('line',0,0,124,N+8) - if #holdQueue2 and 2.2/#bk or 1 + local k=min(2.3/#bk,3/#bk[1],.85) gc_scale(k) for i=1,#bk do for j=1,#bk[1]do if bk[i][j]then @@ -434,10 +425,10 @@ local function drawHold(P) gc_pop() end local function drawDial(x,y,speed) - gc_setColor(1,1,1) - setFont(25)mStr(int(speed),x,y-18) - gc_draw(dialFrame,x,y,nil,nil,nil,35,35) - gc_draw(IMG.dialNeedle,x,y,2.094+(speed<=175 and .02094*speed or 4.712-52.36/(speed-125)),nil,nil,5,4) + gc_setColor(.97,.97,.975) + gc_draw(dialFrame,x,y) + gc_draw(dialNeedle,x+26,y+26,speed<=175 and .00698*speed or 1.571-17.453/(speed-125),nil,nil,20,2) + setFont(25)mStr(int(speed),x+66,y-2) end local function drawFinesseCombo_norm(P) if P.finesseCombo>2 then @@ -468,13 +459,13 @@ local function drawFinesseCombo_remote(P) elseif S.maxFinesseCombo==S.piece then gc_setColor(.7,.7,1) else - gc_setColor(1,1,1) + gc_setColor(.97,.97,.975) end gc_print(P.finesseCombo.."x",20,570) end end local function drawLife(life) - gc_setColor(1,1,1) + gc_setColor(.97,.97,.975) gc_draw(IMG.lifeIcon,475,595,nil,.8) if life>3 then gc_draw(multiple,502,602) @@ -494,7 +485,7 @@ local function drawMission(P) if P.gameEnv.missionkill then gc_setColor(1,.7+.2*sin(TIME()*6.26),.4) else - gc_setColor(1,1,1) + gc_setColor(.97,.97,.975) end gc_print(missionEnum[L[cur]],85,110) @@ -538,18 +529,19 @@ draw.drawGhost=drawGhost function draw.drawNext_norm(P) local ENV=P.gameEnv local texture=P.skinLib - gc_translate(316,20) + gc_translate(488,20) + gc_setLineWidth(2) local N=ENV.nextCount*72 - gc_setColor(0,0,0,.4)gc_rectangle('fill',0,0,124,N+8) - gc_setColor(1,1,1)gc_rectangle('line',0,0,124,N+8) + gc_setColor(0,0,0,.4)gc_rectangle('fill',0,0,100,N+8,5) + gc_setColor(.97,.97,.975)gc_rectangle('line',0,0,100,N+8,5) N=1 gc_push('transform') - gc_translate(62,40) + gc_translate(50,40) gc_setShader(shader_blockSatur) local queue=P.nextQueue while N<=ENV.nextCount and queue[N]do local bk,sprite=queue[N].bk,texture[queue[N].color] - local k=#bk>2 and 2.2/#bk or 1 + local k=min(2.3/#bk,3/#bk[1],.85) gc_scale(k) for i=1,#bk do for j=1,#bk[1]do if bk[i][j]then @@ -566,18 +558,19 @@ function draw.drawNext_norm(P) if ENV.bagLine then gc_setColor(.8,.5,.5) for i=-P.pieceCount%ENV.bagLine,N-1,ENV.bagLine do--i=phase - gc_rectangle('fill',2,72*i+3,120,2) + gc_rectangle('fill',2,72*i+3,96,2) end end - gc_translate(-316,-20) + gc_translate(-488,-20) end function draw.drawNext_hidden(P) local ENV=P.gameEnv local texture=P.skinLib - gc_translate(316,20) + gc_translate(476,20) + gc_setLineWidth(2) local N=ENV.nextCount*72 gc_setColor(.5,0,0,.4)gc_rectangle('fill',0,0,124,N+8) - gc_setColor(1,1,1)gc_rectangle('line',0,0,124,N+8) + gc_setColor(.97,.97,.975)gc_rectangle('line',0,0,124,N+8) N=min(ENV.nextStartPos,P.pieceCount+1) gc_push('transform') gc_translate(62,40) @@ -585,7 +578,7 @@ function draw.drawNext_hidden(P) local queue=P.nextQueue while N<=ENV.nextCount and queue[N]do local bk,sprite=queue[N].bk,texture[queue[N].color] - local k=#bk>2 and 2.2/#bk or 1 + local k=min(2.3/#bk,3/#bk[1],.85) gc_scale(k) for i=1,#bk do for j=1,#bk[1]do if bk[i][j]then @@ -602,10 +595,10 @@ function draw.drawNext_hidden(P) if ENV.bagLine then gc_setColor(.8,.5,.5) for i=-P.pieceCount%ENV.bagLine,N-1,ENV.bagLine do--i=phase - gc_rectangle('fill',2,72*i+3,120,2) + gc_rectangle('fill',2,72*i+3,96,2) end end - gc_translate(-316,-20) + gc_translate(-476,-20) end function draw.drawTargetLine(P,r) local d=P.fieldBeneath+P.fieldUp @@ -619,6 +612,28 @@ function draw.drawTargetLine(P,r) gc_pop() end end +function draw.drawProgress(s1,s2) + setFont(40) + mStr(s1,62,322) + mStr(s2,62,376) + gc.rectangle('fill',24,375,76,4,2) +end +function draw.drawRoyaleInfo(P) + setFont(35) + mStr(#PLY_ALIVE.."/"..#PLAYERS,63,175) + mStr(P.modeData.ko,80,215) + gc.draw(drawableText.ko,60-drawableText.ko:getWidth(),222) + setFont(20) + gc.setColor(1,.5,0,.6) + gc.print(P.badge,103,227) + gc.setColor(.97,.97,.97) + setFont(25) + mStr(text.powerUp[P.strength],63,290) + gc.setColor(1,1,1) + for i=1,P.strength do + gc.draw(IMG.badgeIcon,16*i+6,260) + end +end function draw.norm(P) local ENV=P.gameEnv @@ -635,7 +650,7 @@ function draw.norm(P) --Draw username setFont(30) - gc_setColor(1,1,1) + gc_setColor(.97,.97,.975) mStr(P.username,150,-60) --Fill field @@ -683,7 +698,7 @@ function draw.norm(P) local curColor=C.color local trans=P.lockDelay/ENV.lock - local centerX=30*(P.curX+C.sc[2])-15 + local centerX=30*(P.curX+C.sc[2])-20 --Draw ghost & rotation center local centerDisp=ENV.center and P.RS.centerDisp[C.id] @@ -691,7 +706,7 @@ function draw.norm(P) drawGhost[ENV.ghostType](P,curColor,ENV.ghost) if centerDisp then gc_setColor(1,1,1,ENV.center) - gc_draw(spinCenterImg,centerX,-30*(P.ghoY+C.sc[1])+15,nil,nil,nil,4,4) + gc_draw(P.RS.centerTex,centerX,-30*(P.ghoY+C.sc[1])+10) end elseif replaying then drawGhost.gray(P,nil,.15) @@ -705,7 +720,7 @@ function draw.norm(P) drawBlock(P,curColor) if centerDisp then gc_setColor(1,1,1,ENV.center) - gc_draw(spinCenterImg,centerX,-30*(P.curY+C.sc[1])+15,nil,nil,nil,4,4) + gc_draw(P.RS.centerTex,centerX,-30*(P.curY+C.sc[1])+10) end elseif replaying then drawBlockShade(P,trans*.3) @@ -729,16 +744,13 @@ function draw.norm(P) gc_pop() gc_setStencilTest() - gc_setLineWidth(2) - P:drawNext() - drawHold(P) drawBuffer(P) drawB2Bbar(P) drawLDI(P,ENV) --Draw boarders gc_setColor(P.frameColor) - gc_draw(playerBoarders,-17,-12) + gc_draw(playerBoarder,-17,-12) --Draw target selecting pad if GAME.modeEnv.royaleMode then @@ -748,6 +760,7 @@ function draw.norm(P) end gc_setColor(1,1,1,P.swappingAtkMode*.025) setFont(35) + gc_setLineWidth(1) for i=1,4 do gc_rectangle('line',RCPB[2*i-1],RCPB[2*i],90,35,8,4) gc_printf(text.atkModeName[i],RCPB[2*i-1]-4,RCPB[2*i]+4,200,"center",nil,.5) @@ -797,32 +810,35 @@ function draw.norm(P) -- gc_line(0,600-P.garbageBeneath*30,300,600-P.garbageBeneath*30) gc_pop() - --Mode informations - if GAME.curMode.mesDisp then - gc_setColor(1,1,1) - GAME.curMode.mesDisp(P) - end + P:drawNext() + drawHold(P) --Speed dials & FinesseCombo if P.type=='remote'then - drawDial(535,545,P.dropSpeed) + drawDial(490,520,P.dropSpeed) drawFinesseCombo_remote(P) else - drawDial(510,515,P.dropSpeed) - drawDial(555,570,P.keySpeed) - gc_draw(bpmImage,540,490) - gc_draw(kpmImage,494,583) + drawDial(490,490,P.dropSpeed) + drawDial(490,550,P.keySpeed) + gc_draw(bpmImage,550,525) + gc_draw(kpmImage,550,585) drawFinesseCombo_norm(P) end + --Mode informations + if GAME.curMode.mesDisp then + gc_setColor(.97,.97,.97) + GAME.curMode.mesDisp(P) + end + --Score & Time setFont(25) local tm=int(P.stat.time*100)*.01 gc_setColor(0,0,0,.3) gc_print(P.score1,18,509) gc_print(tm,18,539) - gc_setColor(COLOR.lY)gc_print(P.score1,20,510) - gc_setColor(COLOR.N)gc_print(tm,20,540) + gc_setColor(.97,.97,.92)gc_print(P.score1,20,510) + gc_setColor(.85,.9,1)gc_print(tm,20,540) if P.life>0 then drawLife(P.life)end drawMission(P) @@ -897,10 +913,10 @@ function draw.demo(P) --Frame gc_setColor(0,0,0,.6) - gc_rectangle('fill',0,0,300,600) + gc_rectangle('fill',0,0,300,600,3) gc_setLineWidth(2) - gc_setColor(1,1,1) - gc_rectangle('line',-1,-1,302,602) + gc_setColor(.97,.97,.975) + gc_rectangle('line',-1,-1,302,602,3) gc_push('transform') gc_translate(0,600) diff --git a/parts/player/player.lua b/parts/player/player.lua index 0d2d1f4f..a0a3fb3f 100644 --- a/parts/player/player.lua +++ b/parts/player/player.lua @@ -12,7 +12,6 @@ local SFX,BGM,VOC,VIB,SYSFX=SFX,BGM,VOC,VIB,SYSFX local FREEROW,TABLE,TEXT,NET,TASK=FREEROW,TABLE,TEXT,NET,TASK local PLAYERS,PLY_ALIVE,GAME=PLAYERS,PLY_ALIVE,GAME -local kickList=require"parts.kickList" local ply_draw=require"parts.player.draw" local ply_update=require"parts.player.update" @@ -25,6 +24,13 @@ end function Player:showTextF(text,dx,dy,font,style,spd,stop) ins(self.bonus,TEXT.getText(text,150+dx,300+dy,font,style,spd,stop)) end +function Player:popScore(score,x,y) + self:showText( + score,x,y, + 40-600/(score+20), + 'score',2 + ) +end function Player:createLockFX() local CB=self.cur.bk local t=12-self.gameEnv.lockFX*2 @@ -222,7 +228,7 @@ function Player:setInvisible(time)--Time in frames end end function Player:setRS(RSname) - self.RS=kickList[RSname]or kickList.TRS + self.RS=RSlist[RSname]or RSlist.TRS end function Player:getHolePos()--Get a good garbage-line hole position @@ -316,6 +322,9 @@ end function Player:getCenterX() return self.curX+self.cur.sc[2]-5.5 end +function Player:getCenterY() + return self.curY-self.cur.sc[1] +end function Player:solid(x,y) if x<1 or x>10 or y<1 then return true end if y>#self.field then return false end @@ -538,6 +547,80 @@ function Player:lock() end end +function Player:checkClear(field,start,height,CB,CX) + local cc=0 + if self.gameEnv.fillClear then + for i=1,height do + local h=start+i-2 + + --Bomb trigger (optional, must with CB) + if CB and h>0 and field[h]and self.clearedRow[cc]~=h then + for x=1,#CB[1]do + if CB[i][x]and field[h][CX+x-1]==19 then + cc=cc+1 + self.clearingRow[cc]=h-cc+1 + self.clearedRow[cc]=h + break + end + end + end + + h=h+1 + --Row filled + for x=1,10 do + if field[h][x]<=0 then + goto CONTINUE_notFull + end + end + cc=cc+1 + ins(self.clearingRow,h-cc+1) + ins(self.clearedRow,h) + ::CONTINUE_notFull:: + end + end + return cc +end +function Player:roofCheck() + local CB=self.cur.bk + for x=1,#CB[1]do + local y=#CB + + --Find the highest y of blocks' x-th column + while not CB[y][x]do y=y-1 end + + local testX=self.curX+x-1--Optimize + + --Test the whole column of field to find roof + for testY=self.curY+y,#self.field do + if self:solid(testX,testY)then + return true + end + end + end + return false +end +function Player:removeTopClearingFX() + for i=#self.clearingRow,1,-1 do + if self.clearingRow[i]>#self.field then + rem(self.clearingRow) + else + return + end + end +end +function Player:checkMission(piece,mission) + if mission<5 then + return piece.row==mission and not piece.spin + elseif mission<9 then + return piece.row==mission-4 and piece.spin + elseif mission==9 then + return piece.pc + elseif mission<90 then + return piece.row==mission%10 and piece.name==int(mission/10)and piece.spin + end + return false +end + local spawnSFX_name={}for i=1,7 do spawnSFX_name[i]='spawn_'..i end function Player:resetBlock()--Reset Block's position and execute I*S local B=self.cur.bk @@ -584,7 +667,7 @@ end function Player:spin(d,ifpre) local cur=self.cur - local kickData=self.RS[cur.id] + local kickData=self.RS.kickTable[cur.id] if type(kickData)=='table'then local idir=(cur.dir+d)%4 kickData=kickData[cur.dir*10+idir] @@ -594,7 +677,7 @@ function Player:spin(d,ifpre) return end local icb=BLOCKS[cur.id][idir] - local isc=SCS[cur.id][idir] + local isc=self.RS.centerPos[cur.id][idir] local ix,iy=self.curX+cur.sc[2]-isc[2],self.curY+cur.sc[1]-isc[1] for test=1,#kickData do local x,y=ix+kickData[test][1],iy+kickData[test][2] @@ -747,7 +830,7 @@ function Player:getBlock(id,name,color)--Get a block(id=n) object id=id, dir=dir, bk=BLOCKS[id][dir], - sc=SCS[id][dir], + sc=self.RS.centerPos[id][dir], name=name or id, color=E.bone and 17 or color or E.skin[id], } @@ -758,7 +841,7 @@ function Player:getNext(n)--Push a block(id=n) to nextQueue ins(self.nextQueue,{ id=n, bk=BLOCKS[n][dir], - sc=SCS[n][dir], + sc=self.RS.centerPos[n][dir], dir=dir, name=n, color=E.bone and 17 or E.skin[n], @@ -1006,46 +1089,16 @@ do--Player.drop(self)--Place piece self:lock() --Clear list of cleared-rows - if self.clearedRow[1]then self.clearedRow={}end + if self.clearedRow[1]then TABLE.cut(self.clearedRow)end --Check line clear - if ENV.fillClear then - for i=1,#CB do - local h=CY+i-2 - - --Bomb trigger - if h>0 and self.field[h]and self.clearedRow[cc]~=h then - for x=1,#CB[1]do - if CB[i][x]and self.field[h][CX+x-1]==19 then - cc=cc+1 - self.clearingRow[cc]=h-cc+1 - self.clearedRow[cc]=h - break - end - end - end - - h=h+1 - --Row filled - for x=1,10 do - if self.field[h][x]<=0 then - goto CONTINUE_notFull - end - end - cc=cc+1 - self.clearingRow[cc]=h-cc+1 - self.clearedRow[cc]=h - ::CONTINUE_notFull:: - end - end + cc=cc+self:checkClear(self.field,CY,#CB,CB,CX) --Create clearing FX - if cc>0 then - for i=1,cc do - local y=self.clearedRow[i] - if ENV.clearFX then self:createClearingFX(y,7-ENV.clearFX)end - if ENV.splashFX then self:createSplashFX(y)end - end + for i=1,cc do + local y=self.clearedRow[i] + if ENV.clearFX then self:createClearingFX(y,7-ENV.clearFX)end + if ENV.splashFX then self:createSplashFX(y)end end --Create locking FX @@ -1075,28 +1128,7 @@ do--Player.drop(self)--Place piece end --Finesse: roof check - local finesse - if CY>ENV.fieldH-2 then - finesse=true - else - for x=1,#CB[1]do - local y=#CB - - --Find the highest y of blocks' x-th column - while not CB[y][x]do y=y-1 end - - local testX=CX+x-1--Optimize - - --Test the whole column of field to find roof - for testY=CY+y,#self.field do - if self:solid(testX,testY)then - finesse=true - goto BERAK_roofFound - end - end - end - ::BERAK_roofFound:: - end + local finesse=CY>ENV.fieldH-2 or self:roofCheck() --Remove rows need to be cleared if cc>0 then @@ -1112,13 +1144,7 @@ do--Player.drop(self)--Place piece end --Cancel top clearing FX - for i=#self.clearingRow,1,-1 do - if self.clearingRow[i]>#self.field then - rem(self.clearingRow) - else - break - end - end + self:removeTopClearingFX() if self.clearingRow[1]then self.falling=ENV.fall else @@ -1408,13 +1434,10 @@ do--Player.drop(self)--Place piece cscore=int(cscore) if ENV.score then - self:showText( + self:popScore( cscore, - (self.curX+C.sc[2]-5.5)*30, - (10-self.curY-C.sc[1])*30+self.fieldBeneath+self.fieldUp, - 40-600/(cscore+20), - 'score', - 2 + self:getCenterX()*30, + (10-self:getCenterY())*30+self.fieldBeneath+self.fieldUp ) end @@ -1425,26 +1448,7 @@ do--Player.drop(self)--Place piece --Check clearing task if cc>0 and self.curMission then - local t=ENV.mission[self.curMission] - local success - if t<5 then - if piece.row==t and not piece.spin then - success=true - end - elseif t<9 then - if piece.row==t-4 and piece.spin then - success=true - end - elseif t==9 then - if piece.pc then - success=true - end - elseif t<90 then - if piece.row==t%10 and piece.name==int(t/10)and piece.spin then - success=true - end - end - if success then + if self:checkMission(piece,ENV.mission[self.curMission])then self.curMission=self.curMission+1 SFX.play('reach') if self.curMission>#ENV.mission then @@ -1462,11 +1466,11 @@ do--Player.drop(self)--Place piece if cc==0 and #self.field>ENV.heightLimit then self:lose()end --Update stat - Stat.score=Stat.score+cscore Stat.piece=Stat.piece+1 Stat.row=Stat.row+cc Stat.maxFinesseCombo=max(Stat.maxFinesseCombo,self.finesseCombo) Stat.maxCombo=max(Stat.maxCombo,self.combo) + Stat.score=Stat.score+cscore if atk>0 then Stat.atk=Stat.atk+atk if send>0 then diff --git a/parts/player/update.lua b/parts/player/update.lua index 8a26fa9b..7562bd2a 100644 --- a/parts/player/update.lua +++ b/parts/player/update.lua @@ -167,7 +167,7 @@ function update.alive(P,dt) --Calculate key speed do local v=0 - for i=2,10 do v=v+i*(i-1)*72/(P.frameRun-P.keyTime[i]+1)end + for i=2,10 do v=v+i*(i-1)*72/(P.frameRun-P.keyTime[i])end P.keySpeed=P.keySpeed*.99+v*.01 v=0 for i=2,10 do v=v+i*(i-1)*72/(P.frameRun-P.dropTime[i])end @@ -206,9 +206,13 @@ function update.alive(P,dt) --Fresh visible time if not P.keepVisible then - for j=1,#P.field do for i=1,10 do - if P.visTime[j][i]>0 then P.visTime[j][i]=P.visTime[j][i]-1 end - end end + local V=P.visTime + for j=1,#P.field do + local L=V[j] + for i=1,10 do + if L[i]>0 then L[i]=L[i]-1 end + end + end end --Moving pressed diff --git a/parts/scenes/about.lua b/parts/scenes/about.lua index b9b76261..a7d3df65 100644 --- a/parts/scenes/about.lua +++ b/parts/scenes/about.lua @@ -11,7 +11,7 @@ end function scene.draw() --Texts setFont(20) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) for i=1,#text.aboutTexts do gc.printf(text.aboutTexts[i],150,35*i+50,1000,'center') end diff --git a/parts/scenes/app_15p.lua b/parts/scenes/app_15p.lua index 899fb4c7..a69a41fa 100644 --- a/parts/scenes/app_15p.lua +++ b/parts/scenes/app_15p.lua @@ -265,7 +265,7 @@ local backColor={ } function scene.draw() setFont(40) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.print(("%.3f"):format(time),1026,80) gc.setColor(1,.8,.8) gc.print(move,1026,130) @@ -303,7 +303,7 @@ function scene.draw() gc.setColor(.1,.1,.1) mStr(N,j*160+240,i*160-96) mStr(N,j*160+242,i*160-98) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) mStr(N,j*160+243,i*160-95) end end diff --git a/parts/scenes/app_AtoZ.lua b/parts/scenes/app_AtoZ.lua index 104fa53e..64976e8b 100644 --- a/parts/scenes/app_AtoZ.lua +++ b/parts/scenes/app_AtoZ.lua @@ -84,7 +84,7 @@ end function scene.draw() setFont(40) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.print(("%.3f"):format(time),1026,80) gc.print(mistake,1026,150) @@ -103,7 +103,7 @@ function scene.draw() setFont(100) mStr(state==1 and #targetString-progress+1 or state==0 and"Ready"or state==2 and"Win",640,200) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.print(targetString:sub(progress,progress),120,280,0,2) gc.print(targetString:sub(progress+1),310,380) diff --git a/parts/scenes/app_UTTT.lua b/parts/scenes/app_UTTT.lua index 9aaa125e..2e29037f 100644 --- a/parts/scenes/app_UTTT.lua +++ b/parts/scenes/app_UTTT.lua @@ -132,7 +132,7 @@ function scene.draw() elseif score[X]==1 then gc.setColor(0,0,.5) else - gc.setColor(0,0,0) + gc.setColor(COLOR.D) end gc.rectangle('fill',(X-1)%3*30,int((X-1)/3)*30,30,30) end @@ -186,7 +186,7 @@ function scene.draw() --Draw current round mark gc.setColor(.8,.8,.8,.8) gc.rectangle('fill',80,80,160,160) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.setLineWidth(6) gc.rectangle('line',80,80,160,160) diff --git a/parts/scenes/app_calc.lua b/parts/scenes/app_calc.lua index 4f351226..5bb98806 100644 --- a/parts/scenes/app_calc.lua +++ b/parts/scenes/app_calc.lua @@ -9,9 +9,11 @@ local sym--symbol function scene.sceneInit() BG.set('none') - reg=false - val="0" - sym=false + BGM.stop() + reg,val,sym=false,"0",false +end +function scene.sceneBack() + BGM.play() end scene.mouseDown=NULL @@ -32,15 +34,22 @@ function scene.keyDown(key) elseif key:sub(1,2)=="kp"then scene.keyDown(key:sub(3)) elseif key=="."then - if not(val:find(".",nil,true)or val:find("e"))then + if sym=="="then + sym,reg=false,false + val="0." + elseif not(val:find(".",nil,true)or val:find("e"))then if sym and not reg then reg=val val="0." + else + val=val.."." end - val=val.."." end elseif key=="e"then - if not val:find("e")then + if sym=="="then + sym,reg=false + val="0e" + elseif not val:find("e")then val=val.."e" end elseif key=="backspace"then @@ -52,26 +61,31 @@ function scene.keyDown(key) val=val:sub(1,-2) end if val==""then val="0"end - elseif key=="+"or key=="="and kb.isDown("lshift","rshift")then sym="+" reg=false - elseif key=="*"or key=="8"and kb.isDown("lshift","rshift")then sym="*" reg=false - elseif key=="-"then sym="-" reg=false - elseif key=="/"then sym="/" reg=false + elseif key=="+"or key=="="and kb.isDown("lshift","rshift")then + if reg and sym then scene.keyDown("return")else reg=false end sym="+" + elseif key=="*"or key=="8"and kb.isDown("lshift","rshift")then + if reg and sym then scene.keyDown("return")else reg=false end sym="*" + elseif key=="-"then + if reg and sym then scene.keyDown("return")else reg=false end sym="-" + elseif key=="/"then + if reg and sym then scene.keyDown("return")else reg=false end sym="/" elseif key=="return"then - if val:byte(-1)==101 then val=val:sub(1,-2)end + if val:sub(-1)=="e"then val=val:sub(1,-2)end if sym and reg then - if reg:byte(-1)==101 then reg=reg:sub(1,-2)end + if reg:sub(-1)=="e"then reg=reg:sub(1,-2)end val= - sym=="+"and (tonumber(reg)or 0)+tonumber(val)or - sym=="-"and (tonumber(reg)or 0)-tonumber(val)or - sym=="*"and (tonumber(reg)or 0)*tonumber(val)or - sym=="/"and (tonumber(reg)or 0)/tonumber(val)or - -1 + sym=="+"and tostring((tonumber(reg)or 0)+tonumber(val))or + sym=="-"and tostring((tonumber(reg)or 0)-tonumber(val))or + sym=="*"and tostring((tonumber(reg)or 0)*tonumber(val))or + sym=="/"and tostring((tonumber(reg)or 0)/tonumber(val))or + "-1" end sym="=" reg=false elseif key=="escape"then if val~="0"then - val,reg,sym="0" + reg,sym=false,false + val="0" else SCN.back() end @@ -81,9 +95,9 @@ function scene.keyDown(key) end function scene.draw() - gc.setColor(1,1,1) - gc.setLineWidth(4) - gc.rectangle('line',100,80,650,150) + gc.setColor(COLOR.Z) + gc.setLineWidth(2) + gc.rectangle('line',100,80,650,150,5) setFont(45) if reg then gc.printf(reg,0,100,720,'right')end if val then gc.printf(val,0,150,720,'right')end @@ -91,25 +105,25 @@ function scene.draw() end scene.widgetList={ - WIDGET.newKey{name="_1",x=150,y=300,w=90,fText="1",font=50,code=pressKey"1"}, - WIDGET.newKey{name="_2",x=250,y=300,w=90,fText="2",font=50,code=pressKey"2"}, - WIDGET.newKey{name="_3",x=350,y=300,w=90,fText="3",font=50,code=pressKey"3"}, - WIDGET.newKey{name="_4",x=150,y=400,w=90,fText="4",font=50,code=pressKey"4"}, - WIDGET.newKey{name="_5",x=250,y=400,w=90,fText="5",font=50,code=pressKey"5"}, - WIDGET.newKey{name="_6",x=350,y=400,w=90,fText="6",font=50,code=pressKey"6"}, - WIDGET.newKey{name="_7",x=150,y=500,w=90,fText="7",font=50,code=pressKey"7"}, - WIDGET.newKey{name="_8",x=250,y=500,w=90,fText="8",font=50,code=pressKey"8"}, - WIDGET.newKey{name="_9",x=350,y=500,w=90,fText="9",font=50,code=pressKey"9"}, - WIDGET.newKey{name="_0",x=150,y=600,w=90,fText="0",font=50,code=pressKey"0"}, - WIDGET.newKey{name=".",x=250,y=600,w=90,fText=".",color='lM',font=50,code=pressKey"."}, - WIDGET.newKey{name="e",x=350,y=600,w=90,fText="e",color='lM',font=50,code=pressKey"e"}, - WIDGET.newKey{name="+",x=450,y=300,w=90,fText="+",color='lB',font=50,code=pressKey"+"}, - WIDGET.newKey{name="-",x=450,y=400,w=90,fText="-",color='lB',font=50,code=pressKey"-"}, - WIDGET.newKey{name="*",x=450,y=500,w=90,fText="*",color='lB',font=50,code=pressKey"*"}, - WIDGET.newKey{name="/",x=450,y=600,w=90,fText="/",color='lB',font=50,code=pressKey"/"}, - WIDGET.newKey{name="<",x=550,y=300,w=90,fText="<",color='lR',font=50,code=pressKey"backspace"}, - WIDGET.newKey{name="=",x=550,y=400,w=90,fText="=",color='lY',font=50,code=pressKey"return"}, - WIDGET.newKey{name="back",x=1140,y=640,w=170,h=80,fText=TEXTURE.back,code=backScene}, + WIDGET.newKey{name="_1",x=145,y=300,w=90,fText="1",font=50,code=pressKey"1"}, + WIDGET.newKey{name="_2",x=245,y=300,w=90,fText="2",font=50,code=pressKey"2"}, + WIDGET.newKey{name="_3",x=345,y=300,w=90,fText="3",font=50,code=pressKey"3"}, + WIDGET.newKey{name="_4",x=145,y=400,w=90,fText="4",font=50,code=pressKey"4"}, + WIDGET.newKey{name="_5",x=245,y=400,w=90,fText="5",font=50,code=pressKey"5"}, + WIDGET.newKey{name="_6",x=345,y=400,w=90,fText="6",font=50,code=pressKey"6"}, + WIDGET.newKey{name="_7",x=145,y=500,w=90,fText="7",font=50,code=pressKey"7"}, + WIDGET.newKey{name="_8",x=245,y=500,w=90,fText="8",font=50,code=pressKey"8"}, + WIDGET.newKey{name="_9",x=345,y=500,w=90,fText="9",font=50,code=pressKey"9"}, + WIDGET.newKey{name="_0",x=145,y=600,w=90,fText="0",font=50,code=pressKey"0"}, + WIDGET.newKey{name=".",x=245,y=600,w=90,fText=".",color='lM',font=50,code=pressKey"."}, + WIDGET.newKey{name="e",x=345,y=600,w=90,fText="e",color='lM',font=50,code=pressKey"e"}, + WIDGET.newKey{name="+",x=445,y=300,w=90,fText="+",color='lB',font=50,code=pressKey"+"}, + WIDGET.newKey{name="-",x=445,y=400,w=90,fText="-",color='lB',font=50,code=pressKey"-"}, + WIDGET.newKey{name="*",x=445,y=500,w=90,fText="*",color='lB',font=50,code=pressKey"*"}, + WIDGET.newKey{name="/",x=445,y=600,w=90,fText="/",color='lB',font=50,code=pressKey"/"}, + WIDGET.newKey{name="<",x=545,y=300,w=90,fText="<",color='lR',font=50,code=pressKey"backspace"}, + WIDGET.newKey{name="=",x=545,y=400,w=90,fText="=",color='lY',font=50,code=pressKey"return"}, + WIDGET.newKey{name="back",x=1135,y=640,w=170,h=80,fText=TEXTURE.back,code=backScene}, } return scene \ No newline at end of file diff --git a/parts/scenes/app_cannon.lua b/parts/scenes/app_cannon.lua index 7dc17bdd..383a5249 100644 --- a/parts/scenes/app_cannon.lua +++ b/parts/scenes/app_cannon.lua @@ -91,7 +91,7 @@ function scene.draw() gc.rectangle('fill',85,0,190,720) --Power & Angle - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) if state~=2 then gc.setLineWidth(2) gc.rectangle('fill',x-80,y+20,pow*1.6,16) diff --git a/parts/scenes/app_console.lua b/parts/scenes/app_console.lua index 14b2fbbe..4470d1f6 100644 --- a/parts/scenes/app_console.lua +++ b/parts/scenes/app_console.lua @@ -638,7 +638,15 @@ local commands={}do commands.sudo={ code=function(code) if sudomode then - local success,result=pcall(loadstring(code)) + --Filter "" + if #code==0 then log{C.R,"Usage: sudo [Lua code]"}return end + + --Check Syntax error + local func,errmsg=loadstring(code) + if errmsg then log{C.R,errmsg}return end + + --Run code + local success,result=pcall(func) if success then if result~=nil then log{C.lG,">> "..tostring(result)} @@ -739,7 +747,7 @@ local commands={}do log{C.A,"Example: switchhost 127.0.0.1 26000 /sock"} end end, - description="Switch to appother host", + description="Switch to another host", details={ "Disconnect all connections and switch to another host", "", @@ -813,10 +821,6 @@ local combKey={ } --Environment for user's function -local noLog=false -local function log_user(str) - log(noLog and"CHEATER."or tostring(str)) -end local userG={ timer=TIME, @@ -825,7 +829,7 @@ local userG={ tonumber=tonumber,tostring=tostring, select=select,next=next, ipairs=ipairs,pairs=pairs, - print=log_user,type=type, + print=log,type=type, pcall=pcall,xpcall=xpcall, rawget=rawget,rawset=rawset,rawlen=rawlen,rawequal=rawequal, setfenv=setfenv,setmetatable=setmetatable, @@ -851,14 +855,10 @@ local fleg={ supw=7126, second_box="Coming soon", }setmetatable(fleg,{__tostring=function()return"The fl\97g."end}) -function userG.the_box(k,f) - if k~=first_key then log"Usage:"log"?"return end - if not f or type(f)~='function'then log"Second arg is a function"return end - noLog=true - if f()~=f then noLog=false log"Return itself"return end - if f(26)~=math.huge then noLog=false log"Lucky number → Infinity"return end - noLog=false - log"*You Lose*" +function userG.the_box(k) + if k~=first_key then log"Usage:"log"*The box is locked*"return end + log"*Breaking sound*" + userG.the_box,userG.the_key=nil,nil return fleg end userG.the_key=first_key diff --git a/parts/scenes/app_cubefield.lua b/parts/scenes/app_cubefield.lua index eba75a83..49da841e 100644 --- a/parts/scenes/app_cubefield.lua +++ b/parts/scenes/app_cubefield.lua @@ -214,7 +214,7 @@ function scene.draw() --Draw player if play and inv%8<4 then - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.rectangle('fill',620,670,40,40) end @@ -239,7 +239,7 @@ function scene.draw() end --Draw Horizon/Direction - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.line(-942,-440,942,-440) --Draw cubes @@ -254,7 +254,7 @@ function scene.draw() gc.setColor(color) gc.rectangle('fill',x,y-485,size,size) gc.setLineWidth(size*.05) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.rectangle('line',x,y-485,size,size) end end @@ -278,7 +278,7 @@ function scene.draw() end end else - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.rectangle('fill',-20,-20+ct,40,40) gc.setColor(1,1,1,(1-ct/60)*.1) diff --git a/parts/scenes/app_dropper.lua b/parts/scenes/app_dropper.lua index bb71b088..90fe6dfe 100644 --- a/parts/scenes/app_dropper.lua +++ b/parts/scenes/app_dropper.lua @@ -194,7 +194,7 @@ function scene.draw() mStr("High Score - "..highScore,640,370) mStr("High Floor - "..highFloor,640,450) - gc.setColor(0,0,0) + gc.setColor(COLOR.D) setFont(35) mStr(MOBILE and"Touch to Start"or"Press space to Start",640,570) setFont(20) @@ -203,7 +203,7 @@ function scene.draw() end if state~='menu'then --High floor - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.setLineWidth(2) local y=690+camY-30*highFloor gc.line(0,y,1280,y) @@ -216,15 +216,15 @@ function scene.draw() gc.print(floor+1,move.x+move.l+15,move.y-18) gc.print(floor,base.x+base.l+15,base.y-18) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) mStr(message,640,0) - gc.setColor(0,0,0) + gc.setColor(COLOR.D) mStr(message,643,2) setFont(70) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.print(score,60,40) - gc.setColor(0,0,0) + gc.setColor(COLOR.D) gc.print(score,64,43) gc.setColor(color1)gc.rectangle('fill',move.x,move.y,move.l,30) diff --git a/parts/scenes/app_dtw.lua b/parts/scenes/app_dtw.lua index cf1fad6a..2a5173fd 100644 --- a/parts/scenes/app_dtw.lua +++ b/parts/scenes/app_dtw.lua @@ -201,7 +201,7 @@ end function scene.draw() --Draw mode - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) setFont(50) mStr(modeName[mode],155,380) @@ -213,7 +213,7 @@ function scene.draw() setFont(45) gc.setColor(1,.6,.6) mStr(("%.2f"):format(maxSpeed/60),155,460) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) mStr(("%.2f"):format(speed/60),155,520) --Progress time list @@ -224,7 +224,7 @@ function scene.draw() end --Draw time - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) setFont(45) gc.print(("%.3f"):format(time),1030,70) end @@ -245,7 +245,7 @@ function scene.draw() gc.pop() --Draw track line - gc.setColor(0,0,0) + gc.setColor(COLOR.D) gc.setLineWidth(2) for x=1,5 do x=130+170*x diff --git a/parts/scenes/app_pong.lua b/parts/scenes/app_pong.lua index 4bd83fc9..64ad00da 100644 --- a/parts/scenes/app_pong.lua +++ b/parts/scenes/app_pong.lua @@ -78,10 +78,10 @@ function scene.update() if P.y0 then if P.y>P.y0 then P.y=max(P.y-8,P.y0,70) - P.vy=-8 + P.vy=-10 elseif P.y0 then gc.setColor(minoColor[pens[1]]) - gc.rectangle('fill',5,5,23,30) + gc.rectangle('fill',5,5,23,30,3) elseif pens[1]==-1 then - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.line(5,5,28,35) gc.line(28,5,5,35) elseif pens[1]==-2 then if penMode==0 then gc.setLineWidth(13) gc.setColor(COLOR.rainbow(TIME()*12.6)) - gc.rectangle('fill',5,5,23,30) + gc.rectangle('fill',5,5,23,30,3) else gc.setLineWidth(3) gc.setColor(1,0,0) @@ -383,9 +383,9 @@ function scene.draw() --Right button if pens[2]>0 then gc.setColor(minoColor[pens[2]]) - gc.rectangle('fill',52,5,23,30) + gc.rectangle('fill',52,5,23,30,3) elseif pens[2]==-1 then - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.setLineWidth(3) gc.line(52,5,75,35) gc.line(75,5,52,35) @@ -393,7 +393,7 @@ function scene.draw() if penMode==0 then gc.setLineWidth(13) gc.setColor(COLOR.rainbow(TIME()*12.6)) - gc.rectangle('fill',52,5,23,30) + gc.rectangle('fill',52,5,23,30,3) else gc.setLineWidth(3) gc.setColor(1,0,0) @@ -405,9 +405,9 @@ function scene.draw() --Middle button if pens[3]>0 then gc.setColor(minoColor[pens[3]]) - gc.rectangle('fill',35,2,10,21) + gc.rectangle('fill',35,2,10,21,3) elseif pens[3]==-1 then - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.setLineWidth(2) gc.line(35,2,45,23) gc.line(45,2,35,23) @@ -415,7 +415,7 @@ function scene.draw() if penMode==0 then gc.setLineWidth(13) gc.setColor(COLOR.rainbow(TIME()*12.6)) - gc.rectangle('fill',35,2,10,21) + gc.rectangle('fill',35,2,10,21,3) else gc.setLineWidth(3) gc.setColor(1,0,0) diff --git a/parts/scenes/custom_mission.lua b/parts/scenes/custom_mission.lua index bfc0aad2..071d3c01 100644 --- a/parts/scenes/custom_mission.lua +++ b/parts/scenes/custom_mission.lua @@ -122,9 +122,9 @@ end function scene.draw() --Draw frame - gc.setLineWidth(4) - gc.setColor(1,1,1) - gc.rectangle('line',60,110,1160,170) + gc.setLineWidth(2) + gc.setColor(COLOR.Z) + gc.rectangle('line',58,108,1164,174,5) --Draw inputing target setFont(30) @@ -145,7 +145,7 @@ function scene.draw() else if count>1 then setFont(25) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.print("×",x-10,y-14) gc.print(count,x+5,y-13) x=x+(count<10 and 33 or 45) @@ -237,7 +237,7 @@ scene.widgetList={ WIDGET.newKey{name="reset", x=1000, y=640,w=90, color='lY',font=50,code=pressKey"delete"}, WIDGET.newButton{name="copy", x=1140, y=440,w=170,h=80, color='lR',font=40,code=pressKey"cC",hideF=function()return #MISSION==0 end}, WIDGET.newButton{name="paste", x=1140, y=540,w=170,h=80, color='lB',font=40,code=pressKey"cV"}, - WIDGET.newSwitch{name="mission",x=1150, y=350,disp=CUSval("missionKill"),code=CUSrev("missionKill")}, + WIDGET.newSwitch{name="mission",x=1150, y=340,disp=CUSval("missionKill"),code=CUSrev("missionKill")}, WIDGET.newButton{name="back", x=1140, y=640, w=170,h=80,fText=TEXTURE.back,code=backScene}, } diff --git a/parts/scenes/custom_sequence.lua b/parts/scenes/custom_sequence.lua index c9c72afd..50e4403c 100644 --- a/parts/scenes/custom_sequence.lua +++ b/parts/scenes/custom_sequence.lua @@ -130,9 +130,9 @@ end function scene.draw() --Draw frame - gc.setColor(1,1,1) - gc.setLineWidth(4) - gc.rectangle('line',100,110,1080,260) + gc.setColor(COLOR.Z) + gc.setLineWidth(2) + gc.rectangle('line',100,110,1080,260,5) --Draw sequence local miniBlock=TEXTURE.miniBlock @@ -149,7 +149,7 @@ function scene.draw() count=count+1 else if count>1 then - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.print("×",x-5,y-14) gc.print(count,x+10,y-13) x=x+(count<10 and 33 or 45) @@ -178,7 +178,7 @@ function scene.draw() --Draw lenth setFont(40) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.print(#L,120,310) --Draw cursor diff --git a/parts/scenes/depause.lua b/parts/scenes/depause.lua index 26b1189f..5d417b8b 100644 --- a/parts/scenes/depause.lua +++ b/parts/scenes/depause.lua @@ -20,19 +20,20 @@ end function scene.draw() --Game scene - if timer*1.26<1 then - SCN.scenes.game.draw() - end + SCN.scenes.game.draw() --Gray screen cover - gc.setColor(.15,.15,.15,timer*1.26) + gc.setColor(.12,.12,.12,timer*8-7) gc.replaceTransform(SCR.origin) gc.rectangle('fill',0,0,SCR.w,SCR.h) gc.replaceTransform(SCR.xOy) - --Pie counter - gc.setColor(1,1,1,4*(1-timer)) - gc.arc('fill','pie',640,360,160,-1.5708,timer*6.2832-1.5708) + --Counter bar + gc.setLineWidth(2) + gc.setColor(.9,.9,.9,math.min(1,12*timer,8*(1-timer))*.6) + gc.rectangle('line',494,336,292,48,14) + gc.setColor(.9,.9,.9,math.min(1,12*timer,8*(1-timer))*.75) + gc.rectangle('fill',500,342,280*timer,36,10) end return scene \ No newline at end of file diff --git a/parts/scenes/dict.lua b/parts/scenes/dict.lua index fa6862c7..0de88c01 100644 --- a/parts/scenes/dict.lua +++ b/parts/scenes/dict.lua @@ -138,17 +138,14 @@ end function scene.draw() local list=getList() - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) local t=list[selected][4] - if #t>900 then - setFont(15) - elseif #t>600 then - setFont(20) - elseif #t>400 then - setFont(25) - else - setFont(30) - end + setFont( + #t>900 and 15 or + #t>600 and 20 or + #t>400 and 25 or + 30 + ) gc.printf(t,306,180,950) setFont(30) @@ -160,7 +157,7 @@ function scene.draw() local y=142+35*i i=i+scrollPos local item=list[i] - gc.setColor(0,0,0) + gc.setColor(COLOR.D) gc.print(item[1],29,y-1) gc.print(item[1],29,y+1) gc.print(item[1],31,y-1) @@ -169,16 +166,16 @@ function scene.draw() gc.print(item[1],30,y) end - gc.setLineWidth(4) - gc.setColor(1,1,1) - gc.rectangle('line',300,180,958,526) - gc.rectangle('line',20,180,280,526) + gc.setLineWidth(2) + gc.setColor(COLOR.Z) + gc.rectangle('line',300,180,958,526,5) + gc.rectangle('line',20,180,280,526,5) if waiting>0 then local r=TIME()*2 local R=int(r)%7+1 gc.setColor(1,1,1,1-abs(r%1*2-1)) - gc.draw(TEXTURE.miniBlock[R],785,140,TIME()*10%6.2832,15,15,SCS[R][0][2]+.5,#BLOCKS[R][0]-SCS[R][0][1]-.5) + gc.draw(TEXTURE.miniBlock[R],785,140,TIME()*10%6.2832,15,15,DSCP[R][0][2]+.5,#BLOCKS[R][0]-DSCP[R][0][1]-.5) end end diff --git a/parts/scenes/error.lua b/parts/scenes/error.lua index acb65594..8984929f 100644 --- a/parts/scenes/error.lua +++ b/parts/scenes/error.lua @@ -23,11 +23,12 @@ function scene.draw() gc.clear(BGcolor) gc.setColor(1,1,1) gc.draw(errorShot,100,345,nil,512/errorShot:getWidth(),288/errorShot:getHeight()) + gc.setColor(COLOR.Z) setFont(100)gc.print(":(",100,0,0,1.2) setFont(40)gc.printf(errorText,100,160,SCR.w0-100) setFont(20) - gc.print(stateInfo,100,640) + gc.print(stateInfo,100,640) gc.printf(errorInfo[1],626,326,1260-626) gc.print("TRACEBACK",626,390) for i=4,#errorInfo do @@ -36,8 +37,8 @@ function scene.draw() end scene.widgetList={ - WIDGET.newKey{name="console",x=940,y=640,w=170,h=80,font=40,code=goScene'app_console'}, - WIDGET.newKey{name="quit",x=1140,y=640,w=170,h=80,font=40,code=backScene}, + WIDGET.newKey{name="console",x=940,y=640,w=170,h=80,font=35,code=goScene'app_console'}, + WIDGET.newKey{name="quit",x=1140,y=640,w=170,h=80,font=35,code=backScene}, } return scene \ No newline at end of file diff --git a/parts/scenes/game.lua b/parts/scenes/game.lua index 7c35345e..3a7ceaf1 100644 --- a/parts/scenes/game.lua +++ b/parts/scenes/game.lua @@ -6,6 +6,7 @@ local GAME=GAME local noTouch,noKey=false,false local touchMoveLastFrame=false local floatRepRate,replayRate +local modeTextPos local replaying local repRateStrings={[0]="pause",[.125]="0.125x",[.5]="0.5x",[1]="1x",[2]="2x",[5]="5x"} @@ -69,20 +70,33 @@ local function _step()floatRepRate=floatRepRate+1 end function scene.sceneInit(org) + replaying=GAME.replaying + noKey=replaying + noTouch=not SETTING.VKSwitch or noKey + if org~='depause'and org~='pause'then + floatRepRate,replayRate=0,1 + end + if GAME.init then resetGameData() GAME.init=false end - replaying=GAME.replaying - if org~='depause'and org~='pause'then - floatRepRate,replayRate=0,1 - end updateRepButtons() - - noKey=replaying - noTouch=not SETTING.VKSwitch or noKey WIDGET.active.restart.hide=replaying + if SETTING.menuPos=='right'then + WIDGET.active.restart.x=1125 + WIDGET.active.pause.x=1195 + modeTextPos=1100-drawableText.modeName:getWidth() + elseif SETTING.menuPos=='middle'then + WIDGET.active.restart.x=360 + WIDGET.active.pause.x=860 + modeTextPos=940 + elseif SETTING.menuPos=='left'then + WIDGET.active.restart.x=120 + WIDGET.active.pause.x=190 + modeTextPos=1200-drawableText.modeName:getWidth() + end end function scene.sceneBack() destroyPlayers() @@ -153,6 +167,7 @@ function scene.keyDown(key,isRep) else if key=="space"then if not isRep then replayRate=replayRate==0 and 1 or 0 end + updateRepButtons() elseif key=="right"then if replayRate==0 then _step() @@ -302,7 +317,7 @@ function scene.draw() --Mode info gc.setColor(1,1,1,.8) - gc.draw(drawableText.modeName,940,0) + gc.draw(drawableText.modeName,modeTextPos,10) --Replaying if replaying then @@ -318,15 +333,15 @@ function scene.draw() end scene.widgetList={ - WIDGET.newKey{name="rep0", fText=TEXTURE.rep.rep0,x=40,y=50,w=60,code=_rep0}, - WIDGET.newKey{name="repP8", fText=TEXTURE.rep.repP8,x=105,y=50,w=60,code=_repP8}, - WIDGET.newKey{name="repP2", fText=TEXTURE.rep.repP2,x=170,y=50,w=60,code=_repP2}, - WIDGET.newKey{name="rep1", fText=TEXTURE.rep.rep1,x=235,y=50,w=60,code=_rep1}, - WIDGET.newKey{name="rep2", fText=TEXTURE.rep.rep2,x=300,y=50,w=60,code=_rep2}, - WIDGET.newKey{name="rep5", fText=TEXTURE.rep.rep5,x=365,y=50,w=60,code=_rep5}, - WIDGET.newKey{name="step", fText=TEXTURE.rep.step,x=430,y=50,w=60,code=_step}, - WIDGET.newKey{name="restart", fText="R",x=380,y=35,w=60,font=40,code=restart}, - WIDGET.newKey{name="pause", fText="II",x=900,y=35,w=60,font=40,code=pauseGame}, + WIDGET.newKey{name="rep0", x=40,y=50,w=60,code=_rep0,fText=TEXTURE.rep.rep0}, + WIDGET.newKey{name="repP8", x=105,y=50,w=60,code=_repP8,fText=TEXTURE.rep.repP8}, + WIDGET.newKey{name="repP2", x=170,y=50,w=60,code=_repP2,fText=TEXTURE.rep.repP2}, + WIDGET.newKey{name="rep1", x=235,y=50,w=60,code=_rep1,fText=TEXTURE.rep.rep1}, + WIDGET.newKey{name="rep2", x=300,y=50,w=60,code=_rep2,fText=TEXTURE.rep.rep2}, + WIDGET.newKey{name="rep5", x=365,y=50,w=60,code=_rep5,fText=TEXTURE.rep.rep5}, + WIDGET.newKey{name="step", x=430,y=50,w=60,code=_step,fText=TEXTURE.rep.step}, + WIDGET.newKey{name="restart", x=0,y=45,w=60,code=restart,fText=TEXTURE.game.restart}, + WIDGET.newKey{name="pause", x=0,y=45,w=60,code=pauseGame,fText=TEXTURE.game.pause}, } return scene \ No newline at end of file diff --git a/parts/scenes/load.lua b/parts/scenes/load.lua index 1a73b3a8..342b1832 100644 --- a/parts/scenes/load.lua +++ b/parts/scenes/load.lua @@ -26,13 +26,13 @@ local loadingThread=coroutine.wrap(function() YIELD('loadModeIcon') local modeIcons={} - modeIcons.marathon=DOGC{32,32, + modeIcons.marathon=GC.DO{32,32, {'move',3,1}, {'fRect',10,4,-2,23}, {'fPoly',10,4,24,10,10,16.5}, {'fRect',4,24,10,3}, } - modeIcons.infinite=DOGC{64,64, + modeIcons.infinite=GC.DO{64,64, {'setLW',4}, {'dCirc',32,32,28}, {'line',32,32,32,14}, @@ -43,14 +43,14 @@ local loadingThread=coroutine.wrap(function() {'fRect',52,30,4,4}, {'fRect',30,52,4,4}, } - modeIcons.classic=DOGC{64,64, + modeIcons.classic=GC.DO{64,64, {'setLW',6}, {'dRect',10,24,12,12}, {'dRect',26,24,12,12}, {'dRect',42,24,12,12}, {'dRect',26,40,12,12}, } - modeIcons.tsd=DOGC{64,64, + modeIcons.tsd=GC.DO{64,64, {'fRect',7,7,16,16}, {'fRect',7,41,16,16}, {'fRect',41,41,16,16}, @@ -58,7 +58,7 @@ local loadingThread=coroutine.wrap(function() {'setLW',1}, {'dPoly',7,24,56,24,56,39,39,39,39,56,24,56,24,39,7,39}, } - modeIcons.t49=DOGC{64,64, + modeIcons.t49=GC.DO{64,64, {'setLW',2}, {'dRect',05,05,10,20},{'dRect',49,05,10,20}, {'dRect',05,39,10,20},{'dRect',49,39,10,20}, @@ -66,7 +66,7 @@ local loadingThread=coroutine.wrap(function() {'setCL',1,1,1,.7}, {'fRect',20,10,23,43}, } - modeIcons.t99=DOGC{64,64, + modeIcons.t99=GC.DO{64,64, {'setLW',2}, {'dRect',02,02,6,12},{'dRect',11,02,6,12}, {'dRect',02,18,6,12},{'dRect',11,18,6,12}, @@ -179,7 +179,7 @@ local titleTransform={ } local titleColor={COLOR.lP,COLOR.lC,COLOR.lB,COLOR.lO,COLOR.lF,COLOR.lM,COLOR.lG,COLOR.lY} function scene.draw() - gc.clear(.1,.1,.1) + gc.clear(.08,.08,.084) local T=(t1+110)%300 if T<30 then @@ -199,7 +199,7 @@ function scene.draw() if dt<20 then gc.translate(0,math.abs(10-dt)-10) end - gc.setColor(titleColor[i][1],titleColor[i][2],titleColor[i][3],min(t*.025,1)*.26) + gc.setColor(titleColor[i][1],titleColor[i][2],titleColor[i][3],min(t*.025,1)*.16) gc.polygon('fill',L[i]) gc.setColor(1,1,1,min(t*.025,1)) gc.polygon('line',L[i]) @@ -212,7 +212,7 @@ function scene.draw() gc.setColor(logoColor2[1],logoColor2[2],logoColor2[3],progress/maxProgress)for dx=-2,2,2 do for dy=-2,2,2 do mDraw(studioLogo,640+dx,400+dy)end end gc.setColor(.2,.2,.2,progress/maxProgress)mDraw(studioLogo,640,400) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) setFont(30) mStr(text.loadText[loading],640,530) end diff --git a/parts/scenes/main.lua b/parts/scenes/main.lua index 99080b25..44fe8bfb 100644 --- a/parts/scenes/main.lua +++ b/parts/scenes/main.lua @@ -154,10 +154,11 @@ function scene.draw() mDraw(TEXTURE.title_color,640,60,nil,.43) --Tip + gc.setColor(COLOR.Z) gc.push('transform') gc.translate(260,650) gc.setLineWidth(2) - gc.rectangle('line',0,0,tipLength,42) + gc.rectangle('line',0,0,tipLength,42,3) gc.stencil(tipStencil) gc.setStencilTest('equal',1) gc.draw(tip,0+scrollX,0) @@ -176,7 +177,7 @@ function scene.draw() --Connecting mark if NET.getlock('access_and_login')then - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.setLineWidth(10) local t=TIME()*6.26%6.2832 gc.arc('line','open',scene.widgetList[3].x+865,450,40,t,t+4.26) diff --git a/parts/scenes/mod.lua b/parts/scenes/mod.lua index ce70fef0..bda31998 100644 --- a/parts/scenes/mod.lua +++ b/parts/scenes/mod.lua @@ -123,7 +123,7 @@ function scene.draw() gc.setColor(color) gc.circle('line',0,0,rad,side) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) mStr(M.id,0,-28) if M.sel>0 and M.list then setFont(25) @@ -139,7 +139,7 @@ function scene.draw() gc.pop() end - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) if selected then setFont(30) gc.printf(text.modInfo[selected.name],70,540,950) diff --git a/parts/scenes/mode.lua b/parts/scenes/mode.lua index e52a7b76..7e6ddf01 100644 --- a/parts/scenes/mode.lua +++ b/parts/scenes/mode.lua @@ -241,7 +241,7 @@ function scene.draw() --Modes setFont(80) - gc_setLineWidth(6) + gc_setLineWidth(4) for name,M in next,MODES do if R[name]then local rank=R[name] @@ -277,7 +277,7 @@ function scene.draw() if sel then local M=MODES[sel] gc_setColor(.5,.5,.5,.8) - gc_rectangle('fill',920,0,360,720)--Info board + gc_rectangle('fill',920,0,360,720,5)--Info board gc_setColor(M.color) setFont(40)mStr(text.modes[sel][1],1100,5) setFont(30)mStr(text.modes[sel][2],1100,50) @@ -289,7 +289,7 @@ function scene.draw() if M.score then mText(drawableText.highScore,1100,240) gc_setColor(.3,.3,.3,.7) - gc_rectangle('fill',940,290,320,280)--Highscore board + gc_rectangle('fill',940,290,320,280,5)--Highscore board local L=M.records gc_setColor(1,1,1) if L[1]then diff --git a/parts/scenes/music.lua b/parts/scenes/music.lua index d36e63b9..9b176c59 100644 --- a/parts/scenes/music.lua +++ b/parts/scenes/music.lua @@ -60,7 +60,7 @@ function scene.keyDown(key,isRep) end function scene.draw() - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) setFont(50) gc.print(bgmList[selected],320,355) @@ -90,7 +90,7 @@ function scene.draw() gc.setColor(1,1,1,.4) gc.setLineWidth(4) gc.line(500,600,900,600) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.circle('fill',500+400*BGM.playing:tell()/BGM.playing:getDuration(),600,6) end end @@ -100,9 +100,9 @@ scene.widgetList={ WIDGET.newText{name="arrow", x=270, y=360,font=45,align='L'}, WIDGET.newText{name="now", x=700, y=500,font=50,align='R',hideF=function()return not BGM.nowPlay end}, WIDGET.newSlider{name="bgm", x=760, y=80,w=400,disp=SETval("bgm"),code=function(v)SETTING.bgm=v BGM.freshVolume()end}, - WIDGET.newButton{name="up", x=200, y=250,w=120,code=pressKey"up",hideF=function()return selected==1 end,fText=DOGC{32,32,{'setLW',4},{'line',2,28,16,4,30,28}}}, - WIDGET.newButton{name="play", x=200, y=390,w=120,code=pressKey"space",fText=DOGC{64,64,{'fPoly',14+3,10,14+3,54,55+3,32}}}, - WIDGET.newButton{name="down", x=200, y=530,w=120,code=pressKey"down",hideF=function()return selected==#bgmList end,fText=DOGC{32,32,{'setLW',4},{'line',2,4,16,28,30,4}}}, + WIDGET.newButton{name="up", x=200, y=250,w=120,code=pressKey"up",hideF=function()return selected==1 end,fText=GC.DO{32,32,{'setLW',4},{'line',2,28,16,4,30,28}}}, + WIDGET.newButton{name="play", x=200, y=390,w=120,code=pressKey"space",fText=GC.DO{64,64,{'fPoly',14+3,10,14+3,54,55+3,32}}}, + WIDGET.newButton{name="down", x=200, y=530,w=120,code=pressKey"down",hideF=function()return selected==#bgmList end,fText=GC.DO{32,32,{'setLW',4},{'line',2,4,16,28,30,4}}}, WIDGET.newButton{name="sound", x=1140, y=540,w=170,h=80,font=40,code=pressKey"tab"}, WIDGET.newButton{name="back", x=1140, y=640,w=170,h=80,fText=TEXTURE.back,code=backScene}, } diff --git a/parts/scenes/net_game.lua b/parts/scenes/net_game.lua index 8789a9ff..7bfac3cd 100644 --- a/parts/scenes/net_game.lua +++ b/parts/scenes/net_game.lua @@ -324,16 +324,17 @@ function scene.draw() gc_print("M",430,10) end end - +local function hideF_ingame()return hideReadyUI()or netPLY.getSelfReady()end +local function hideF_ingame2()return hideReadyUI()or not netPLY.getSelfReady()end scene.widgetList={ textBox, inputBox, - WIDGET.newKey{name="setting",fText=TEXTURE.setting,x=1200,y=160,w=90,h=90, code=_gotoSetting,hideF=function()return hideReadyUI()or netPLY.getSelfReady()end}, - WIDGET.newKey{name="ready",x=1060,y=510,w=360,h=90,color='lG',font=35, code=_setReady,hideF=function()return hideReadyUI()or netPLY.getSelfReady()end}, - WIDGET.newKey{name="spectate",x=1060,y=610,w=360,h=90,color='lO',font=35, code=_setSpectate,hideF=function()return hideReadyUI()or netPLY.getSelfReady()end}, - WIDGET.newKey{name="cancel",x=1060,y=560,w=360,h=120,color='lH',font=40, code=_setCancel,hideF=function()return hideReadyUI()or not netPLY.getSelfReady()end}, - WIDGET.newKey{name="hideChat",fText="...",x=380,y=35,w=60,font=35, code=_switchChat}, - WIDGET.newKey{name="quit",fText=TEXTURE.quit_small,x=900,y=35,w=60,code=_quit}, + WIDGET.newKey{name="setting", x=1200,y=160,w=90,h=90, fText=TEXTURE.setting, code=_gotoSetting,hideF=hideF_ingame}, + WIDGET.newKey{name="ready", x=1060,y=510,w=360,h=90,color='lG',font=35, code=_setReady,hideF=hideF_ingame}, + WIDGET.newKey{name="spectate", x=1060,y=610,w=360,h=90,color='lO',font=35, code=_setSpectate,hideF=hideF_ingame}, + WIDGET.newKey{name="cancel", x=1060,y=560,w=360,h=120,color='lH',font=40, code=_setCancel,hideF=hideF_ingame2}, + WIDGET.newKey{name="chat", x=1165,y=45,w=60,fText="...",font=35, code=_switchChat,}, + WIDGET.newKey{name="quit", x=1235,y=45,w=60,fText=TEXTURE.quit_small, code=_quit}, } return scene \ No newline at end of file diff --git a/parts/scenes/net_league.lua b/parts/scenes/net_league.lua index 5c2ef79d..dc4f0f15 100644 --- a/parts/scenes/net_league.lua +++ b/parts/scenes/net_league.lua @@ -8,7 +8,7 @@ function scene.sceneInit() end function scene.draw() - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) setFont(100) mStr("Tech League",640,120) drawSelfProfile() diff --git a/parts/scenes/net_rooms.lua b/parts/scenes/net_rooms.lua index a96d018e..1474aba8 100644 --- a/parts/scenes/net_rooms.lua +++ b/parts/scenes/net_rooms.lua @@ -77,7 +77,7 @@ function scene.keyDown(key) if R.roomInfo.version==VERSION.room then NET.enterRoom(R,passwordBox.value) else - MES.new('error',"Version doesn't compatible 版本不兼容") + MES.new('error',text.versionNotMatch) end else WIDGET.keyPressed(key) @@ -103,7 +103,7 @@ function scene.draw() --Joining mark if NET.getlock('enterRoom')then - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.setLineWidth(15) local t=TIME()*6.26%6.2832 gc.arc('line','open',640,360,80,t,t+4.26) diff --git a/parts/scenes/pause.lua b/parts/scenes/pause.lua index da8fbb85..8b3b6751 100644 --- a/parts/scenes/pause.lua +++ b/parts/scenes/pause.lua @@ -17,7 +17,8 @@ local fnsRankColor={ local scene={} -local timer--Animation timer +local page +local timer1,timer2--Animation timer local form--Form of clear & spins local radar--Radar chart local val--Radar chart normalizer @@ -28,13 +29,15 @@ local trophy--Current trophy local trophyColor--Current trophy color function scene.sceneInit(org) + page=0 if org:find("setting")then - TEXT.show(text.needRestart,640,440,50,'fly',.6) + TEXT.show(text.needRestart,640,410,50,'fly',.6) end local P=PLAYERS[1] local S=P.stat - timer=org=='game'and 0 or 50 + timer1=org=='game'and 0 or 50 + timer2=timer1 local frameLostRate=(S.frame/S.time/60-1)*100 form={ @@ -150,6 +153,13 @@ function scene.keyDown(key,isRep) SFX.play('connected') end end + elseif key=="tab"or key=="Stab"then + if love.keyboard.isDown("lshift","rshift")or key=="Stab"then + page=(page-1)%2 + else + page=(page+1)%2 + end + timer2=0 else WIDGET.keyPressed(key) end @@ -159,9 +169,8 @@ function scene.update(dt) if not(GAME.result or GAME.replaying)then GAME.pauseTime=GAME.pauseTime+dt end - if timer<50 then - timer=timer+1 - end + if timer1<50 then timer1=timer1+1 end + if timer2<25 then timer2=timer2+1 end end local hexList={1,0,.5,1.732*.5,-.5,1.732*.5} @@ -169,156 +178,180 @@ for i=1,6 do hexList[i]=hexList[i]*150 end local textPos={90,131,-90,131,-200,-25,-90,-181,90,-181,200,-25} local dataPos={90,143,-90,143,-200,-13,-90,-169,90,-169,200,-13} function scene.draw() - local T=timer*.02 + local T=timer1*.02 + local T2=timer2*.04 if T<1 or GAME.result then SCN.scenes.game.draw()end --Dark BG local _=T - if GAME.result then _=_*.7 end - gc.setColor(.15,.15,.15,_) + if GAME.result then _=_*.76 end + gc.setColor(.12,.12,.12,_) gc.replaceTransform(SCR.origin) gc.rectangle('fill',0,0,SCR.w,SCR.h) gc.replaceTransform(SCR.xOy) - --Pause Info - setFont(25) - if GAME.pauseCount>0 then - gc.setColor(1,.4,.4,T) - gc.print(("%s:[%d] %.2fs"):format(text.pauseCount,GAME.pauseCount,GAME.pauseTime),40,180) - end - - gc.setColor(1,1,1,T) + gc.setColor(.97,.97,.97,T) --Result Text - setFont(35) - mDraw(GAME.result and drawableText[GAME.result]or drawableText.pause,640,100-10*(5-timer*.1)^1.5) + mDraw(GAME.result and drawableText[GAME.result]or drawableText.pause,640,80-10*(5-timer1*.1)^1.5) - --Mode Info - gc.draw(drawableText.modeName,40,240) - - --Infos - if PLAYERS[1].frameRun>180 then - gc.setLineWidth(2) - --Finesse rank & trophy - if rank then - gc.setColor(1,1,1,T*.2) - gc.rectangle('fill',35,305,465,405) - - setFont(60) - local c=fnsRankColor[rank] - gc.setColor(c[1],c[2],c[3],T) - gc.print(rank,420,635) - if trophy then - setFont(40) - gc.setColor(trophyColor[1],trophyColor[2],trophyColor[3],T*2-1) - gc.printf(trophy,100-120*(1-T^.5),650,300,'right') - end - - gc.setColor(1,1,1,T) - gc.rectangle('line',35,305,465,405) - gc.line(35,620,500,620) - else - gc.setColor(1,1,1,T*.2) - gc.rectangle('fill',35,305,465,350) - gc.setColor(1,1,1,T) - gc.rectangle('line',35,305,465,350) - end - - _=form - setFont(25) - for i=1,10 do - gc.print(text.pauseStat[i],40,270+35*i) - gc.printf(_[i],195,270+35*i,300,'right') - end - end - - --Mods - if #GAME.mod>0 then - if scoreValid()then - gc.setColor(.7,.7,.7,T) - gc.rectangle('line',775,560,490,140) - gc.setColor(.7,.7,.7,T*.26) - gc.rectangle('fill',775,560,490,140) - else - gc.setColor(1,0,0,T) - gc.rectangle('line',775,560,490,140) - gc.setColor(1,0,0,T*.26) - gc.rectangle('fill',775,560,490,140) - end - setFont(35) - for _,M in next,MODOPT do - if M.sel>0 then - _=M.color - gc.setColor(_[1],_[2],_[3],T) - mStr(M.id,810+M.no%8*60,560+math.floor(M.no/8)*45) - end - end - end + --Mode Info (outside) + gc.draw(drawableText.modeName,745-drawableText.modeName:getWidth(),143) --Level rank if GAME.rank>0 then - local str=text.ranks[GAME.rank] - setFont(80) - gc.setColor(0,0,0,T*.7) - gc.print(str,100*T^.5-5,-14,nil,1.8) - local L=rankColor[GAME.rank] - gc.setColor(L[1],L[2],L[3],T) - gc.print(str,100*T^.5,-10,nil,1.8) + gc.push('transform') + gc.translate(1050,5) + local str=text.ranks[GAME.rank] + setFont(80) + gc.setColor(0,0,0,T*.7) + gc.print(str,-5,-4,nil,1.5) + local L=rankColor[GAME.rank] + gc.setColor(L[1],L[2],L[3],T) + gc.print(str,0,0,nil,1.5) + gc.pop() end - --Radar Chart - if T>.5 and PLAYERS[1].frameRun>180 then - T=T*2-1 - gc.setLineWidth(2) + --Big info frame + if PLAYERS[1].frameRun>180 then gc.push('transform') - gc.translate(1026,370) - gc.scale(.9) + gc.translate(560,205) + gc.setLineWidth(2) + + --Pause Info (outside) + setFont(25) + if GAME.pauseCount>0 then + gc.setColor(.97,.97,.97,T*.06) + gc.rectangle('fill',-5,390,620,36,8) + gc.setColor(.97,.97,.97,T) + gc.rectangle('line',-5,390,620,36,8) + mStr(("%s:[%d] %.2fs"):format(text.pauseCount,GAME.pauseCount,GAME.pauseTime),305,389) + end + + --Pages + if page==0 then + --Frame + gc.setColor(.97,.97,.97,T2*.06) + gc.rectangle('fill',-5,-5,620,380,8) + gc.setColor(.97,.97,.97,T2) + gc.rectangle('line',-5,-5,620,380,8) + + --Game statistics + gc.push('transform') + gc.scale(.85) + gc.setLineWidth(2) + + --Stats + _=form + setFont(30) + gc.setColor(.97,.97,.97,T2) + for i=1,10 do + gc.print(text.pauseStat[i],5,43*(i-1)+2) + gc.printf(_[i],410,43*(i-1)+2,300,'right') + end + + --Finesse rank & trophy + if rank then + setFont(40) + local c=fnsRankColor[rank] + gc.setColor(c[1],c[2],c[3],T2) + gc.print(rank,405,383) + if trophy then + setFont(20) + gc.setColor(trophyColor[1],trophyColor[2],trophyColor[3],T2*2-1) + gc.printf(trophy,95-120*(1-T2^.5),398,300,'right') + end + end + gc.pop() + elseif page==1 then + --Radar Chart + gc.setLineWidth(1) + gc.push('transform') + gc.translate(310,185) --Polygon gc.push('transform') - gc.scale((3-2*T)*T) - gc.setColor(1,1,1,T*(.5+.3*sin(TIME()*6.26)))gc.polygon('line',standard) - gc.setColor(chartColor[1],chartColor[2],chartColor[3],T*.626) + gc.scale((3-2*T2)*T2) + gc.setColor(.97,.97,.97,T2*(.5+.3*sin(TIME()*6.26))) + GC.regularPolygon('line',0,0,120,6,8) + gc.setColor(chartColor[1],chartColor[2],chartColor[3],T2*.626) for i=1,9,2 do gc.polygon('fill',0,0,val[i],val[i+1],val[i+2],val[i+3]) end gc.polygon('fill',0,0,val[11],val[12],val[1],val[2]) - gc.setColor(1,1,1,T)gc.polygon('line',val) + gc.setColor(.97,.97,.97,T2) + for i=1,9,2 do + gc.line(val[i],val[i+1],val[i+2],val[i+3]) + end + gc.line(val[11],val[12],val[1],val[2]) gc.pop() - --Axes - gc.setColor(1,1,1,T) - for i=1,3 do - local x,y=hexList[2*i-1],hexList[2*i] - gc.line(-x,-y,x,y) - end - --Texts local C _=TIME()%6.2832 - if _>3.1416 then - gc.setColor(1,1,1,-T*sin(_)) + if _>3.142 then + gc.setColor(.97,.97,.97,-T2*sin(_)) setFont(35) C,_=text.radar,textPos else - gc.setColor(1,1,1,T*sin(_)) + gc.setColor(.97,.97,.97,T2*sin(_)) setFont(20) C,_=radar,dataPos end for i=1,6 do mStr(C[i],_[2*i-1],_[2*i]) end + gc.pop() + end gc.pop() end + + --Mods + gc.push('transform') + gc.translate(131,600) + gc.scale(.65) + if #GAME.mod>0 then + gc.setLineWidth(2) + if scoreValid()then + gc.setColor(.7,.7,.7,T) + gc.rectangle('line',-5,-5,500,150,8) + gc.setColor(.7,.7,.7,T*.05) + gc.rectangle('fill',-5,-5,500,150,8) + else + gc.setColor(.8,0,0,T) + gc.rectangle('line',-5,-5,500,150,8) + gc.setColor(1,0,0,T*.05) + gc.rectangle('fill',-5,-5,500,150,8) + end + setFont(35) + for _,M in next,MODOPT do + if M.sel>0 then + _=M.color + gc.setColor(_[1],_[2],_[3],T) + mStr(M.id,35+M.no%8*60,math.floor(M.no/8)*45) + end + end + end + gc.pop() end scene.widgetList={ - WIDGET.newButton{name="setting", x=1120,y=70,w=240,h=90, color='lB',code=pressKey"s",hideF=function()return GAME.fromRepMenu end}, - WIDGET.newButton{name="replay", x=535,y=240,w=200,h=100,color='lY',code=pressKey"p",hideF=function()return not(GAME.result or GAME.replaying)or #PLAYERS>1 end}, - WIDGET.newButton{name="save", x=745,y=240,w=200,h=100,color='lP',code=pressKey"o",hideF=function()return not(GAME.result or GAME.replaying)or #PLAYERS>1 or GAME.saved end}, - WIDGET.newButton{name="resume", x=640,y=357,w=240,h=100,color='lG',code=pressKey"escape"}, - WIDGET.newButton{name="restart", x=640,y=473,w=240,h=100,color='lR',code=pressKey"r",hideF=function()return GAME.fromRepMenu end}, - WIDGET.newButton{name="quit", x=640,y=590,w=240,h=100,font=35,code=backScene}, + WIDGET.newKey{name="resume", x=290,y=240,w=300,h=70,code=pressKey"escape"}, + WIDGET.newKey{name="restart", x=290,y=340,w=300,h=70,code=pressKey"r",hideF=function()return GAME.fromRepMenu end}, + WIDGET.newKey{name="setting", x=290,y=440,w=300,h=70,code=pressKey"s",hideF=function()return GAME.fromRepMenu end}, + WIDGET.newKey{name="quit", x=290,y=540,w=300,h=70,code=backScene}, + WIDGET.newKey{name="page_prev", x=500,y=390,w=70,code=pressKey"tab",noFrame=true, + fText=GC.DO{70,70,{'setLW',2}, {'dRPol',33,35,32,3,6,3.142},{'dRPol',45,35,32,3,6,3.142}}, + fShade=GC.DO{70,70,{'setCL',1,1,1,.6},{'draw',GC.DO{70,70,{'setCL',1,1,1,1},{'fRPol',33,35,32,3,6,3.142},{'fRPol',45,35,32,3,6,3.142}}}}, + hideF=function()return PLAYERS[1].frameRun<=180 end, + }, + WIDGET.newKey{name="page_next", x=1230,y=390,w=70,code=pressKey"Stab",noFrame=true, + fText=GC.DO{70,70,{'setLW',2}, {'dRPol',37,35,32,3,6},{'dRPol',25,35,32,3,6}}, + fShade=GC.DO{70,70,{'setCL',1,1,1,.6},{'draw',GC.DO{70,70,{'setCL',1,1,1,1},{'fRPol',37,35,32,3,6},{'fRPol',25,35,32,3,6}}}}, + hideF=function()return PLAYERS[1].frameRun<=180 end, + }, + WIDGET.newKey{name="replay", x=865,y=165,w=200,h=40,font=25,code=pressKey"p",hideF=function()return not(GAME.result or GAME.replaying)or #PLAYERS>1 end}, + WIDGET.newKey{name="save", x=1075,y=165,w=200,h=40,font=25,code=pressKey"o",hideF=function()return not(GAME.result or GAME.replaying)or #PLAYERS>1 or GAME.saved end}, } return scene \ No newline at end of file diff --git a/parts/scenes/replays.lua b/parts/scenes/replays.lua index ac8da485..34734ee4 100644 --- a/parts/scenes/replays.lua +++ b/parts/scenes/replays.lua @@ -150,10 +150,10 @@ end scene.widgetList={ listBox, - WIDGET.newButton{name="export",x=200,y=640,w=70,color='lG',code=pressKey"cC",fText=DOGC{50,50,{'fRect',8,44,34,4},{'fRect',22,17,6,23},{'fPoly',25,5,10,20,40,20}}}, - WIDGET.newButton{name="import",x=300,y=640,w=70,color='lN',code=pressKey"cV",fText=DOGC{50,50,{'fRect',8,44,34,4},{'fRect',22,5,6,23},{'fPoly',25,40,10,25,40,25}}}, - WIDGET.newButton{name="play",x=700,y=640,w=170,h=80,color='lY',code=pressKey"return",fText=DOGC{50,50,{'fPoly',10,0,49,24,10,49}}}, - WIDGET.newButton{name="delete",x=850,y=640,w=80,h=80,color='lR',code=pressKey"delete",fText=DOGC{50,50,{'setLW',8},{'line',5,5,45,45},{'line',5,45,45,5}}}, + WIDGET.newButton{name="export",x=200,y=640,w=70,color='lG',code=pressKey"cC",fText=GC.DO{50,50,{'fRect',8,44,34,4},{'fRect',22,17,6,23},{'fPoly',25,5,10,20,40,20}}}, + WIDGET.newButton{name="import",x=300,y=640,w=70,color='lN',code=pressKey"cV",fText=GC.DO{50,50,{'fRect',8,44,34,4},{'fRect',22,5,6,23},{'fPoly',25,40,10,25,40,25}}}, + WIDGET.newButton{name="play",x=700,y=640,w=170,h=80,color='lY',code=pressKey"return",fText=GC.DO{50,50,{'fPoly',10,0,49,24,10,49}}}, + WIDGET.newButton{name="delete",x=850,y=640,w=80,h=80,color='lR',code=pressKey"delete",fText=GC.DO{50,50,{'setLW',8},{'line',5,5,45,45},{'line',5,45,45,5}}}, WIDGET.newButton{name="back",x=1140,y=640,w=170,h=80,fText=TEXTURE.back,code=backScene}, } diff --git a/parts/scenes/setting_control.lua b/parts/scenes/setting_control.lua index 88337113..c0d9a831 100644 --- a/parts/scenes/setting_control.lua +++ b/parts/scenes/setting_control.lua @@ -62,11 +62,12 @@ function scene.draw() for x=40,360,40 do gc.line(x,-10,x,90) end - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.line(0,-10,0,90) gc.line(400,-10,400,90) --O mino animation + gc.setColor(1,1,1) local O=SKIN.lib[SETTING.skinSet][SETTING.skin[6]] gc.draw(O,40*pos,0,nil,40/30) gc.draw(O,40*pos,40,nil,40/30) diff --git a/parts/scenes/setting_game.lua b/parts/scenes/setting_game.lua index e31d166c..61691f81 100644 --- a/parts/scenes/setting_game.lua +++ b/parts/scenes/setting_game.lua @@ -29,10 +29,11 @@ scene.widgetList={ WIDGET.newButton{name="key", x=640, y=220, w=320,h=80, color='lG',font=35,code=goScene'setting_key'}, WIDGET.newButton{name="touch", x=990, y=220, w=320,h=80, color='lB',font=35,code=goScene'setting_touch'}, WIDGET.newSlider{name="reTime", x=330, y=320, w=300,unit=10,disp=SETval("reTime"),code=SETsto("reTime"),show=function(S)return(.5+S.disp()*.25).."s"end}, - WIDGET.newSelector{name="RS", x=300, y=420, w=300,color='S',list={'TRS','SRS','BiRS','ASC','ASCplus','C2','C2sym','Classic','None'},disp=SETval("RS"),code=SETsto("RS")}, + WIDGET.newSelector{name="RS", x=300, y=420, w=300,color='S',list={'TRS','SRS','BiRS','ASC','ASC_plus','C2','C2_sym','Classic','Classic_plus','None','None_plus'},disp=SETval("RS"),code=SETsto("RS")}, WIDGET.newButton{name="layout", x=250, y=540, w=200,h=70,font=35, code=goScene'setting_skin'}, - WIDGET.newSwitch{name="autoPause", x=1060, y=350, disp=SETval("autoPause"), code=SETrev("autoPause")}, - WIDGET.newSwitch{name="swap", x=1060, y=460, disp=SETval("swap"), code=SETrev("swap")}, + WIDGET.newSwitch{name="autoPause", x=1060, y=320, disp=SETval("autoPause"), code=SETrev("autoPause")}, + WIDGET.newSelector{name="menuPos", x=980, y=420, w=300,color='O',list={'left','middle','right'},disp=SETval("menuPos"),code=SETsto("menuPos")}, + WIDGET.newSwitch{name="swap", x=1060, y=520, disp=SETval("swap"), code=SETrev("swap")}, WIDGET.newSwitch{name="simpMode", x=1060, y=800, disp=SETval("simpMode"), code=function() SETTING.simpMode=not SETTING.simpMode diff --git a/parts/scenes/setting_key.lua b/parts/scenes/setting_key.lua index 9ced9b75..268eb63f 100644 --- a/parts/scenes/setting_key.lua +++ b/parts/scenes/setting_key.lua @@ -82,7 +82,7 @@ end function scene.draw() setFont(15) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) for i=0,20 do for j=1,#keyList[i]do diff --git a/parts/scenes/setting_skin.lua b/parts/scenes/setting_skin.lua index 81562993..720cc5a4 100644 --- a/parts/scenes/setting_skin.lua +++ b/parts/scenes/setting_skin.lua @@ -2,14 +2,17 @@ local gc=love.graphics local int=math.floor local sin=math.sin +local selRS local minoRot={0,0,0,0,0,0,0} local minoRot0={} local scene={} function scene.sceneInit() + selRS=RSlist[SETTING.RS] for i=1,7 do minoRot0[i]=SETTING.face[i]*1.57 + minoRot[i]=minoRot0[i] end end @@ -28,14 +31,16 @@ function scene.draw() gc.rotate(minoRot[n]+sin(t*3-n*.5)*.08) local color=SETTING.skin[n] local B=BLOCKS[n][0] - local x,y=-45-SCS[n][0][2]*30,15+SCS[n][0][1]*30 + local x,y=-45-selRS.centerPos[n][0][2]*30,15+selRS.centerPos[n][0][1]*30 local col=#B[1] for i=1,#B do for j=1,col do if B[i][j]then gc.draw(texture[color],x+30*j,y-30*i) end end end - gc.circle('fill',0,0,sin(t*10)+5) + if selRS.centerDisp[n]then + mDraw(selRS.centerTex) + end gc.pop() end for i=1,5 do @@ -53,6 +58,9 @@ end local function nextDir(i) SETTING.face[i]=(SETTING.face[i]+1)%4 minoRot0[i]=minoRot0[i]+1.5707963 + if minoRot0[5]>62 then + loadGame('marathon_bfmax',true) + end SFX.play('rotate') end @@ -81,7 +89,7 @@ scene.widgetList={ WIDGET.newButton{name="spin3", x=410,y=540,w=90,h=65,code=function()nextDir(3)end}, WIDGET.newButton{name="spin4", x=550,y=540,w=90,h=65,code=function()nextDir(4)end}, WIDGET.newButton{name="spin5", x=690,y=540,w=90,h=65,code=function()nextDir(5)end}, - --WIDGET.newButton{name="spin6",x=825,y=540,w=90,h=65,code=function()nextDir(6)end},--Cannot rotate O + WIDGET.newButton{name="spin6", x=825,y=540,w=90,h=65,code=function()nextDir(6)end}, WIDGET.newButton{name="spin7", x=970,y=540,w=90,h=65,code=function()nextDir(7)end}, WIDGET.newButton{name="skinR", x=200,y=640,w=220,h=80,color='lV',font=35, diff --git a/parts/scenes/setting_sound.lua b/parts/scenes/setting_sound.lua index 67fc9b27..7488da74 100644 --- a/parts/scenes/setting_sound.lua +++ b/parts/scenes/setting_sound.lua @@ -92,8 +92,7 @@ scene.widgetList={ SETTING.sfx,SETTING.sfx_spawn,SETTING.sfx_warn,SETTING.bgm,SETTING.vib,SETTING.voc=0,0,0,0,0,0 end BGM.freshVolume() - end - }, + end}, WIDGET.newSwitch{name="fine", x=1150, y=270,disp=SETval("fine"),code=function()SETTING.fine=not SETTING.fine if SETTING.fine then SFX.play('finesseError',.6)end end}, WIDGET.newSelector{name="cv", x=1100, y=380,w=200,list={'miya','naki','xiaoya'},disp=function()return cv end,code=function(i)cv=i end}, diff --git a/parts/scenes/setting_touch.lua b/parts/scenes/setting_touch.lua index 666475fa..8ef2370a 100644 --- a/parts/scenes/setting_touch.lua +++ b/parts/scenes/setting_touch.lua @@ -83,7 +83,7 @@ function scene.touchMove(_,_,dx,dy) end function scene.draw() - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.setLineWidth(3) gc.rectangle('line',490,65,300,610) VK.preview(selected) diff --git a/parts/scenes/setting_video.lua b/parts/scenes/setting_video.lua index 3c625f5b..b6d562e9 100644 --- a/parts/scenes/setting_video.lua +++ b/parts/scenes/setting_video.lua @@ -80,12 +80,12 @@ scene.widgetList={ list={'normal','soft','gray','light','color'}, disp=SETval("blockSatur"), code=function(v)SETTING.blockSatur=v;applyBlockSatur(SETTING.blockSatur)end - }, + }, WIDGET.newSelector{name="fieldSatur",x=800,y=1540,w=300,color='lN', list={'normal','soft','gray','light','color'}, disp=SETval("fieldSatur"), code=function(v)SETTING.fieldSatur=v;applyFieldSatur(SETTING.fieldSatur)end - }, + }, WIDGET.newButton{name="back", x=1140,y=640,w=170,h=80,fText=TEXTURE.back,code=backScene}, } diff --git a/parts/scenes/staff.lua b/parts/scenes/staff.lua index c04aad5b..97adb349 100644 --- a/parts/scenes/staff.lua +++ b/parts/scenes/staff.lua @@ -85,7 +85,7 @@ function scene.draw() end gc.replaceTransform(SCR.xOy) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) local T=40*math.min(time,45) local L=text.staff setFont(40) diff --git a/parts/scenes/stat.lua b/parts/scenes/stat.lua index a2ebe4c3..25ef86aa 100644 --- a/parts/scenes/stat.lua +++ b/parts/scenes/stat.lua @@ -78,15 +78,17 @@ function scene.draw() gc_print(item[i],740,40*i+10) end - gc_setLineWidth(4) - for x=1,8 do - x=80*x-40 + gc_setLineWidth(2) + gc.rectangle('line',40,80,560,160,5) + gc.rectangle('line',40,320,560,160,5) + for x=1,6 do + x=80*x+40 gc_line(x,80,x,240) gc_line(x,320,x,480) end - for y=2,6 do - gc_line(40,40*y,600,40*y) - gc_line(40,240+40*y,600,240+40*y) + for y=1,3 do + gc_line(40,80+40*y,600,80+40*y) + gc_line(40,320+40*y,600,320+40*y) end local t=TIME() @@ -95,13 +97,13 @@ function scene.draw() local r=t*2 local R=int(r)%7+1 gc_setColor(1,1,1,1-abs(r%1*2-1)) - gc_draw(TEXTURE.miniBlock[R],680,50,t*10%6.2832,15,15,SCS[R][0][2]+.5,#BLOCKS[R][0]-SCS[R][0][1]-.5) - gc_draw(TEXTURE.miniBlock[R],680,300,0,15,15,SCS[R][0][2]+.5,#BLOCKS[R][0]-SCS[R][0][1]-.5) + gc_draw(TEXTURE.miniBlock[R],680,50,t*10%6.2832,15,15,DSCP[R][0][2]+.5,#BLOCKS[R][0]-DSCP[R][0][1]-.5) + gc_draw(TEXTURE.miniBlock[R],680,300,0,15,15,DSCP[R][0][2]+.5,#BLOCKS[R][0]-DSCP[R][0][1]-.5) end scene.widgetList={ - WIDGET.newButton{name="path", x=800,y=540,w=250,h=80,font=25,code=function()love.system.openURL(SAVEDIR)end,hide=MOBILE}, - WIDGET.newButton{name="save", x=800,y=640,w=250,h=80,font=25,code=goScene'savedata'}, + WIDGET.newButton{name="path", x=820,y=540,w=250,h=80,font=25,code=function()love.system.openURL(SAVEDIR)end,hide=MOBILE}, + WIDGET.newButton{name="save", x=820,y=640,w=250,h=80,font=25,code=goScene'savedata'}, WIDGET.newButton{name="back", x=1140,y=640,w=170,h=80,fText=TEXTURE.back,code=backScene}, } diff --git a/parts/texture.lua b/parts/texture.lua index 878e7716..35ba33d9 100644 --- a/parts/texture.lua +++ b/parts/texture.lua @@ -27,21 +27,21 @@ end gc.setLineWidth(2) TEXTURE.puzzleMark={} for i=1,17 do - TEXTURE.puzzleMark[i]=DOGC{30,30, + TEXTURE.puzzleMark[i]=GC.DO{30,30, {'setCL',minoColor[i][1],minoColor[i][2],minoColor[i][3],.6}, {'dRect',5,5,20,20}, {'dRect',10,10,10,10}, } end for i=18,24 do - TEXTURE.puzzleMark[i]=DOGC{30,30, + TEXTURE.puzzleMark[i]=GC.DO{30,30, {'setCL',minoColor[i]}, {'dRect',7,7,16,16}, } end -TEXTURE.puzzleMark[-1]=DOGC{30,30, +TEXTURE.puzzleMark[-1]=GC.DO{30,30, {'setCL',1,1,1,.8}, - {'draw',DOGC{30,30, + {'draw',GC.DO{30,30, {'setLW',3}, {'line',5,5,25,25}, {'line',5,25,25,5}, @@ -51,7 +51,7 @@ TEXTURE.puzzleMark[-1]=DOGC{30,30, --A simple pixel font TEXTURE.pixelNum={} for i=0,9 do - TEXTURE.pixelNum[i]=DOGC{5,9, + TEXTURE.pixelNum[i]=GC.DO{5,9, {('1011011111'):byte(i+1)>48,'fRect',1,0,3,1},--up {('0011111011'):byte(i+1)>48,'fRect',1,4,3,1},--middle {('1011011011'):byte(i+1)>48,'fRect',1,8,3,1},--down @@ -72,10 +72,10 @@ for i=1,8 do gc.translate(12*i,i==1 and 8 or 14) gc.setLineWidth(16) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.polygon('line',title[i]) - gc.setColor(0,0,0) + gc.setColor(.2,.2,.2) for j=1,#titleTriangles[i]do gc.polygon('fill',titleTriangles[i][j]) end @@ -88,16 +88,16 @@ for i=1,8 do gc.translate(12*i,i==1 and 8 or 14) gc.setLineWidth(16) - gc.setColor(1,1,1) + gc.setColor(COLOR.Z) gc.polygon('line',title[i]) gc.setLineWidth(4) - gc.setColor(0,0,0) + gc.setColor(COLOR.D) for j=1,#titleTriangles[i]do gc.polygon('fill',titleTriangles[i][j]) end - gc.setColor(titleColor[i]) + gc.setColor(.2+.8*titleColor[i][1],.2+.8*titleColor[i][2],.2+.8*titleColor[i][3],.5) gc.translate(-4,-4) for j=1,#titleTriangles[i]do gc.polygon('fill',titleTriangles[i][j]) @@ -108,7 +108,7 @@ for i=1,8 do end --Sure mark -TEXTURE.sure=DOGC{48,64, +TEXTURE.sure=GC.DO{48,64, {'fRect',0,0,10,27}, {'fRect',0,0,48,10}, {'fRect',38,10,10,15}, @@ -118,7 +118,7 @@ TEXTURE.sure=DOGC{48,64, } --Setting icon -TEXTURE.setting=DOGC{64,64, +TEXTURE.setting=GC.DO{64,64, {'setLW',8}, {'dCirc',32,32,18}, {'setLW',10}, @@ -133,10 +133,10 @@ TEXTURE.setting=DOGC{64,64, } --Music mark -TEXTURE.music=DOGC{64,64, - {'setLW',7}, +TEXTURE.music=GC.DO{64,64, + {'setLW',6}, {'line',19,9,60,7}, - {'setLW',4}, + {'setLW',2}, {'line',20,9,20,49}, {'line',59,7,59,47}, {'fElps',11,49,11,8}, @@ -144,15 +144,15 @@ TEXTURE.music=DOGC{64,64, } --Mute mark -TEXTURE.mute=DOGC{64,64, +TEXTURE.mute=GC.DO{64,64, {'mDraw',TEXTURE.music,32,32,0,.9}, - {'setLW',5}, + {'setLW',4}, {'line',6,6,57,57}, } --Language mark -TEXTURE.language=DOGC{64,64, - {'setLW',4}, +TEXTURE.language=GC.DO{64,64, + {'setLW',2}, {'dCirc',32,32,30}, {'line',2,31,62,31}, {'line',31,2,31,62}, @@ -161,29 +161,30 @@ TEXTURE.language=DOGC{64,64, } --Info. mark -TEXTURE.info=DOGC{50,50, - {'setLW',5}, +TEXTURE.info=GC.DO{50,50, + {'setLW',3}, {'dCirc',25,25,22}, {'fRect',22,11,6,6}, {'fRect',22,20,6,20}, } --Question mark -TEXTURE.question=DOGC{50,50, - {'setLW',5}, +TEXTURE.question=GC.DO{50,50, + {'setLW',3}, {'dCirc',25,25,22}, - {'print','?',16,-6}, + {'setFT',40}, + {'print','?',17,-2}, } --More mark -TEXTURE.more=DOGC{60,15, +TEXTURE.more=GC.DO{60,15, {'fCirc',10,7,6}, {'fCirc',30,7,6}, {'fCirc',50,7,6}, } --Back mark -TEXTURE.back=DOGC{60,55, +TEXTURE.back=GC.DO{60,55, {'setLW',6}, {'line',11,10,40,10}, {'line',10,40,40,40}, @@ -193,9 +194,9 @@ TEXTURE.back=DOGC{60,55, } --Quit mark -TEXTURE.quit=DOGC{50,50, +TEXTURE.quit=GC.DO{50,50, {'setCL',1,1,1}, - {'draw',DOGC{50,50, + {'draw',GC.DO{50,50, {'setLW',7}, {'line',5,5,45,45}, {'line',5,45,45,5}, @@ -203,24 +204,29 @@ TEXTURE.quit=DOGC{50,50, } --Quit mark (small) -TEXTURE.quit_small=DOGC{30,30, +TEXTURE.quit_small=GC.DO{30,30, {'setCL',1,1,1}, - {'draw',DOGC{30,30, + {'draw',GC.DO{30,30, {'setLW',4}, {'line',2,2,28,28}, {'line',2,28,28,2}, }} } +TEXTURE.game={ + restart=GC.DO{32,32,{'setLW',3},{'dArc',16,16,11,.7,5.5},{'setLW',2.5},{'line',21,.7,24,8,16,11}}, + pause=GC.DO{18,23,{'fRect',0,0,3,23},{'fRect',15,0,3,23}}, +} + --Replay speed buttons TEXTURE.rep={ - rep0=DOGC{50,50,{'fRect',11,8,8,34},{'fRect',31,8,8,34}}, - repP8=DOGC{50,50,{'setFT',15},{'print',"0.125x",0,15}}, - repP2=DOGC{50,50,{'setFT',25},{'print',"0.5x",0,8}}, - rep1=DOGC{50,50,{'setFT',30},{'print',"1x",7,3}}, - rep2=DOGC{50,50,{'setFT',30},{'print',"2x",7,3}}, - rep5=DOGC{50,50,{'setFT',30},{'print',"5x",7,3}}, - step=DOGC{50,50,{'setFT',30},{'fRect',12,5,4,40},{'setLW',4},{'line',25,14,41,25,25,36}}, + rep0=GC.DO{50,50,{'fRect',11,8,8,34},{'fRect',31,8,8,34}}, + repP8=GC.DO{50,50,{'setFT',15},{'print',"0.125x",0,15}}, + repP2=GC.DO{50,50,{'setFT',25},{'print',"0.5x",0,8}}, + rep1=GC.DO{50,50,{'setFT',30},{'print',"1x",7,3}}, + rep2=GC.DO{50,50,{'setFT',30},{'print',"2x",7,3}}, + rep5=GC.DO{50,50,{'setFT',30},{'print',"5x",7,3}}, + step=GC.DO{50,50,{'setFT',30},{'fRect',12,7,4,36},{'setLW',4},{'line',25,14,41,25,25,36}}, } gc.setCanvas() diff --git a/parts/updateLog.lua b/parts/updateLog.lua index edf90eee..2949b088 100644 --- a/parts/updateLog.lua +++ b/parts/updateLog.lua @@ -1,12 +1,12 @@ return STRING.split([=[ 未来模式: - 任务生存; 对称; 拼方形; 限高无尽挖掘; 连击练习; backfire对战 - 极简教程/考试; 大爆炸; 教学关; 术语问答; 仅4lPC - OSD; 强制Misdrop; 涂色模式(模仿喷喷, designed by teatube) + 任务生存; 对称; 大爆炸; 拼方形; 限高无尽挖掘; 连击练习; backfire对战 + 经典模式分离(9/15/18/19/29); OSD; 强制Misdrop; 拼大于号; 仅4lPC + 极简教程/考试; 教学关; 术语问答; 涂色模式(模仿喷喷, designed by teatube) 未来大游戏: Puyo; Bubble; 2048; 花仙子方块 未来Mod: - 修改颜色配置; 只显示场地边框线/顶线; 骨块皮肤; 隐藏hold + 修改颜色配置; 只显示场地边框线/顶线; 隐藏hold 未来按键: 移动左4~右5(+硬降) (共18键) 临时启用瞬间移动; 临时禁用das @@ -19,8 +19,8 @@ return STRING.split([=[ Tetra-link; 速算(前缀后缀表达式,二八十六进制) 连连看; 求合体; 坦克大战; 扫雷; 接水管 其他未来内容: - 可调场地宽度; 可调攻击系统; 组队战; 实时统计数据可视化 - 重做模式选择UI; 重做模组UI; 高级自定义序列 + 大型任务树模式; 可调场地宽度; 可调攻击系统; 组队战; 实时统计数据可视化 + 重做模式选择UI; 重做模组UI; 高级自定义序列; 加速下落 方块位移/旋转动画; 更好的手柄支持; 场地格子边缘线 spike相关统计数据; 模式数据分析; 简单TAS工具 音效包; 手势操作; 特殊控件(虚拟摇杆等) @@ -29,24 +29,34 @@ return STRING.split([=[ 更细节的DAS选项; 成就系统; 拓展主题系统 工程编译到字节码; task-Z(新AI) 等级系统; 收集向抽奖玩法; 自适应UI - 自动跳帧; 多方块; 超60帧; 第一次启动相关引导 + 自动跳帧; 多方块; 超60帧 0.16.0: 空间站 Space station 新增: - 新模式:TSD-Ultimate - 新模式:Stack #142 - 新BGM:Beat5th(用于竞速五连块) - 新BGM:Here(用于生存第四/五难度) - 新BGM:Shift(用于挖掘) - 新BGM:There(用于堆积) - 新BGM:Secret8th Remix(用于master-hard) + 新模式: + TSD-Ultimate + Stack #142 + 新BGM: + Beat5th(用于竞速五连块) + Here(用于生存第四/五难度) + Shift(用于挖掘) + There(用于堆积) + Secret8th Remix(用于master-hard) + 重构旋转系统模块,支持非标/无旋转中心,新增: + BiRS(Bias RS,实验性) + ASC,ASCplus(添加实验性180度踢墙) + Classic,Classic_plus(添加180度旋转) #173 + 每个旋转系统有自己独特的旋转中心样式 新增小亚(xiaoya)语音包 - 旋转系统新增BiRS(Bias RS)(实验性),ASC,ASCplus(添加180度踢墙,实验性) + 添加重开/暂停按钮位置设定 可以通过剪切板导入/导出录像 - 自定义游戏的序列任务场地等数据退出保存 第一次启动会自动进入语言设置菜单 #150 新增noInitSZO模式参数,自动跳过开局SZO(目前仅用于马拉松/20G模式) #121 + 自定义游戏的序列任务场地等数据退出保存 + 把一个隐藏模式的入口加回来 改动: + 游戏内和暂停的界面重做 + ui整体调整(添加圆角,减小线宽,减小饱和度) 更换更简洁的加载动画,合并intro场景 调整TRS中S5和Z5的踢墙表,增加Ospin时SZ按反的尝试 回放时版面遮挡会变成半透明 #143 @@ -59,12 +69,13 @@ return STRING.split([=[ resetall命令最后一瞬间才删除文件 #133 马拉松模式添加倒计时线 #153 旋转系统可以开关每个方块是否显示旋转中心(TRS关闭O和X的中心显示) + 调整几个旋转系统的名字 减少AI与自定义序列同开的限制 #136 修改debug模式鼠标位置显示方式 增加滑条控件测试声音的间隔 声音设置界面添加静音按钮 微调wing背景 - 更新历史开始附带github上的issue编号 + 更新历史开始附带github上的issue编号(如果有) 代码: 重构WS模块,可能解决部分联网游戏中的概率thread error问题 升级BGM/IMG/SKIN模块,资源不再需要启动时加载好,提升加载速度节约资源占用 @@ -141,7 +152,7 @@ return STRING.split([=[ REPLAY不再需要保存到本地的数据,每次启动自动刷新录像文件列表 字符串拓展模块和DATA模块新增方法 修复: - DOGC模块创建超过系统限制大小的画布导致报错 + GC.DO模块创建超过系统限制大小的画布导致报错 玩家退出房间时移除键错误导致崩溃 0.15.4: 近地轨道 Low Earth Orbit diff --git a/parts/users.lua b/parts/users.lua index 2e2510d5..4ec6ee73 100644 --- a/parts/users.lua +++ b/parts/users.lua @@ -9,12 +9,12 @@ local emptyUser={ local defaultAvatar={} for i=1,29 do local img=TEXTURE.miniBlock[i] - defaultAvatar[i]=DOGC{128,128, + defaultAvatar[i]=GC.DO{128,128, {'clear',.1,.1,.1}, {'draw',img,63,63,.2,30,30,img:getWidth()/2,img:getHeight()/2}, } end -local errorAvatar=DOGC{128,128, +local errorAvatar=GC.DO{128,128, {'setCL',1,.2,.15}, {'setLW',10}, {'line',10,10,117,117}, diff --git a/parts/virtualKey.lua b/parts/virtualKey.lua index 3b175263..7d2471c4 100644 --- a/parts/virtualKey.lua +++ b/parts/virtualKey.lua @@ -8,31 +8,31 @@ local VK_org=VK_org local skin=1 local buttonImages={ - DOGC{200,200,{'setLW',4},{'dCirc',100,100,98},{'dCirc',100,100,90}}, - DOGC{200,200,{'setLW',4},{'dCirc',100,100,98,8},{'dCirc',100,100,90,8}}, - DOGC{200,200,{'setLW',4},{'dCirc',100,100,98,6},{'dCirc',100,100,90,6}}, - DOGC{200,200,{'setLW',4},{'dCirc',100,100,98,4},{'dCirc',100,100,89,4}}, - DOGC{200,200,{'setLW',4},{'dRect',31,31,138,138},{'dRect',39,39,122,122}}, + GC.DO{200,200,{'setLW',4},{'dCirc',100,100,98},{'dCirc',100,100,90}}, + GC.DO{200,200,{'setLW',4},{'dCirc',100,100,98,8},{'dCirc',100,100,90,8}}, + GC.DO{200,200,{'setLW',4},{'dCirc',100,100,98,6},{'dCirc',100,100,90,6}}, + GC.DO{200,200,{'setLW',4},{'dCirc',100,100,98,4},{'dCirc',100,100,89,4}}, + GC.DO{200,200,{'setLW',4},{'dRect',31,31,138,138},{'dRect',39,39,122,122}}, } local rippleImages={ - DOGC{200,200,{'setLW',4},{'dCirc',100,100,98}}, - DOGC{200,200,{'setLW',4},{'dCirc',100,100,98,8}}, - DOGC{200,200,{'setLW',4},{'dCirc',100,100,98,6}}, - DOGC{200,200,{'setLW',4},{'dCirc',100,100,98,4}}, - DOGC{200,200,{'setLW',4},{'dRect',31,31,138,138}}, + GC.DO{200,200,{'setLW',4},{'dCirc',100,100,98}}, + GC.DO{200,200,{'setLW',4},{'dCirc',100,100,98,8}}, + GC.DO{200,200,{'setLW',4},{'dCirc',100,100,98,6}}, + GC.DO{200,200,{'setLW',4},{'dCirc',100,100,98,4}}, + GC.DO{200,200,{'setLW',4},{'dRect',31,31,138,138}}, } local holdImages={ - DOGC{200,200,{'fCirc',100,100,86}}, - DOGC{200,200,{'fCirc',100,100,86,8}}, - DOGC{200,200,{'fCirc',100,100,85,6}}, - DOGC{200,200,{'fCirc',100,100,83,4}}, - DOGC{200,200,{'fRect',43,43,114,114}}, + GC.DO{200,200,{'fCirc',100,100,86}}, + GC.DO{200,200,{'fCirc',100,100,86,8}}, + GC.DO{200,200,{'fCirc',100,100,85,6}}, + GC.DO{200,200,{'fCirc',100,100,83,4}}, + GC.DO{200,200,{'fRect',43,43,114,114}}, } --Virtualkey icons local VKIcon={} gc.setDefaultFilter('nearest','nearest') local VKI=gc.newImage("media/image/virtualkey.png") -for i=1,20 do VKIcon[i]=DOGC{36,36,{'draw',VKI,(i-1)%5*-36,math.floor((i-1)*.2)*-36}}end +for i=1,20 do VKIcon[i]=GC.DO{36,36,{'draw',VKI,(i-1)%5*-36,math.floor((i-1)*.2)*-36}}end gc.setDefaultFilter('linear','linear') --In-game virtualkey layout data