Merge branch '26F-Studio-main'
This commit is contained in:
62
.github/workflows/build.yml
vendored
62
.github/workflows/build.yml
vendored
@@ -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
|
||||
11
.github/workflows/getVersion.py
vendored
Normal file
11
.github/workflows/getVersion.py
vendored
Normal file
@@ -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)
|
||||
@@ -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)
|
||||
6
.github/workflows/updateOSXVersion.py
vendored
6
.github/workflows/updateOSXVersion.py
vendored
@@ -1,4 +1,5 @@
|
||||
import re, datetime
|
||||
import getVersion
|
||||
info = r"""<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
@@ -57,9 +58,8 @@ info = r"""<?xml version="1.0" encoding="UTF-8"?>
|
||||
</plist>
|
||||
"""
|
||||
|
||||
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))
|
||||
|
||||
@@ -5,4 +5,4 @@
|
||||
|
||||
集合各种现代方块规则,更多玩法,全新体验。
|
||||
|
||||
官网(建设中) https://home.techmino.org
|
||||
官网(建设中) http://home.techmino.org
|
||||
|
||||
@@ -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={
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
})
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
5
conf.lua
5
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",
|
||||
}
|
||||
|
||||
@@ -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,--游戏结束时需要保存的本局关键信息
|
||||
|
||||
7
main.lua
7
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
|
||||
|
||||
802
parts/RSlist.lua
Normal file
802
parts/RSlist.lua
Normal file
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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?"},
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"},
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -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"},
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -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!"},
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -135,6 +135,7 @@ return{
|
||||
RS="''?",
|
||||
layout="=-=-=",
|
||||
autoPause="A||",
|
||||
menuPos="←M→?",
|
||||
swap="=+=+=",
|
||||
simpMode=".",
|
||||
},
|
||||
|
||||
@@ -25,7 +25,7 @@ return{
|
||||
maxspeed="速度封顶",
|
||||
|
||||
speedLV="速度等级",
|
||||
line="行数",atk="攻",eff="效",
|
||||
piece="块数",line="行数",atk="攻",eff="效",
|
||||
rpm="收每分",tsd="T2",
|
||||
grade="段位",techrash="消四",
|
||||
wave="波数",nextWave="下一波",
|
||||
|
||||
@@ -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{
|
||||
"游戏也是一种艺术形式",
|
||||
"游戏中左下角三个信息分别是分数/时间/极简连击数",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"有三个隐藏模式不能从地图进入,到处找找看吧",
|
||||
"有四个隐藏模式不能从地图进入,到处找找看吧",
|
||||
"有疑问? 先看设置有没有你想要的",
|
||||
"右下角那个问号按钮是游戏说明书",
|
||||
"长期睡眠不足会引起不可逆的脑损伤(变傻)",
|
||||
|
||||
@@ -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)",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user