Compare commits
28 Commits
pre0.17.7-
...
v0.17.7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9e442a3073 | ||
|
|
bc8b7e733b | ||
|
|
94aa84e380 | ||
|
|
c462c28640 | ||
|
|
b5fbf9cade | ||
|
|
e88957296f | ||
|
|
9e61cb995a | ||
|
|
89a5a718da | ||
|
|
43649c54a3 | ||
|
|
b2b5c99425 | ||
|
|
9e882e6188 | ||
|
|
e688458cfd | ||
|
|
b7c528f5ac | ||
|
|
c743fdcffc | ||
|
|
56e19dd91e | ||
|
|
308512d36a | ||
|
|
749806e553 | ||
|
|
78223334ee | ||
|
|
7f50161ca7 | ||
|
|
dd872a72b2 | ||
|
|
0df17cb4ee | ||
|
|
27244dae04 | ||
|
|
c472d6cbd7 | ||
|
|
e4c786a5d4 | ||
|
|
e291a070f3 | ||
|
|
6b16fcd5f5 | ||
|
|
d79279d1cd | ||
|
|
03fbfaa577 |
31
.github/workflows/main.yml
vendored
31
.github/workflows/main.yml
vendored
@@ -232,6 +232,7 @@ jobs:
|
||||
|
||||
build-ios:
|
||||
runs-on: macos-latest
|
||||
if: github.event_name != 'pull_request'
|
||||
needs: [get-info, build-core, auto-test]
|
||||
env:
|
||||
OUTPUT_FOLDER: ./build
|
||||
@@ -396,6 +397,7 @@ jobs:
|
||||
|
||||
build-macos-appstore:
|
||||
runs-on: macos-latest
|
||||
if: github.event_name != 'pull_request'
|
||||
needs: [get-info, build-core, auto-test]
|
||||
env:
|
||||
OUTPUT_FOLDER: ./build
|
||||
@@ -487,6 +489,7 @@ jobs:
|
||||
|
||||
build-macos-portable:
|
||||
runs-on: macos-latest
|
||||
if: github.event_name != 'pull_request'
|
||||
needs: [get-info, build-core, auto-test]
|
||||
env:
|
||||
OUTPUT_FOLDER: ./build
|
||||
@@ -697,35 +700,7 @@ jobs:
|
||||
echo "# Summary" >> $GITHUB_STEP_SUMMARY
|
||||
echo "## Version: ${{ needs.get-info.outputs.version-string }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "## Package Name: ${{ needs.get-info.outputs.base-name }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "## Status: " >> $GITHUB_STEP_SUMMARY
|
||||
echo "- Automatic tests: ${{ needs.auto-test.result }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- Core packages: ${{ needs.build-core.result }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- Android packages: ${{ needs.build-android.result }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- iOS packages: ${{ needs.build-ios.result }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- Linux packages: ${{ needs.build-linux.result }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- macOS packages(App Store version): ${{ needs.build-macos-appstore.result }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- macOS packages(Portable version): ${{ needs.build-macos-portable.result }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- Windows packages(Portable version): ${{ needs.build-windows.result }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "## Download links: " >> $GITHUB_STEP_SUMMARY
|
||||
# - name: Display build results
|
||||
# shell: python3 {0}
|
||||
# run: |
|
||||
# import os
|
||||
# with open(os.getenv('GITHUB_STEP_SUMMARY'), 'a') as f:
|
||||
# if "${{ needs.build-core.result }}" == "success":
|
||||
# f.write("- Bare love packages: [WeTransfer](${{ needs.build-core.outputs.download-url }})\n")
|
||||
# if "${{ needs.build-android.result }}" == "success":
|
||||
# f.write("- Android packages: [WeTransfer](${{ needs.build-android.outputs.download-url }})\n")
|
||||
# if "${{ needs.build-ios.result }}" == "success":
|
||||
# f.write("- iOS packages: [WeTransfer](${{ needs.build-ios.outputs.download-url }})\n")
|
||||
# if "${{ needs.build-linux.result }}" == "success":
|
||||
# f.write("- Linux packages: [WeTransfer](${{ needs.build-linux.outputs.download-url }})\n")
|
||||
# if "${{ needs.build-macos-appstore.result }}" == "success":
|
||||
# f.write("- macOS packages(App Store version): [WeTransfer](${{ needs.build-macos-appstore.outputs.download-url }})\n")
|
||||
# if "${{ needs.build-macos-portable.result }}" == "success":
|
||||
# f.write("- macOS packages(Portable version): [WeTransfer](${{ needs.build-macos-portable.outputs.download-url }})\n")
|
||||
# if "${{ needs.build-windows.result }}" == "success":
|
||||
# f.write("- Windows packages: [WeTransfer](${{ needs.build-windows.outputs.download-url }})\n")
|
||||
- name: Display download links
|
||||
shell: python3 {0}
|
||||
run: |
|
||||
|
||||
Submodule Zframework updated: 69e580b988...24864eda21
16
main.lua
16
main.lua
@@ -60,13 +60,13 @@ BGM.setMaxSources(5)
|
||||
VOC.setDiversion(.62)
|
||||
|
||||
WIDGET.setOnChange(function()
|
||||
if SCN.stack[#SCN.stack]~='custom_field' then
|
||||
if SCN.cur~='custom_field' then
|
||||
local colorList=THEME.getThemeColor()
|
||||
if not colorList then return end
|
||||
local rnd=math.random
|
||||
for _,W in next,SCN.scenes[SCN.stack[#SCN.stack]].widgetList do
|
||||
if W.color then
|
||||
W.color=colorList[rnd(#colorList)]
|
||||
if colorList then
|
||||
for _,W in next,SCN.scenes[SCN.cur].widgetList do
|
||||
if W.color then
|
||||
W.color=colorList[math.random(#colorList)]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -218,10 +218,10 @@ do-- Z.setOnFocus
|
||||
TASK.new(task_autoSoundOn)
|
||||
end
|
||||
else
|
||||
if SCN.stack[#SCN.stack]=='game' and SETTING.autoPause then
|
||||
if SCN.cur=='game' and SETTING.autoPause then
|
||||
pauseGame()
|
||||
end
|
||||
if SETTING.autoMute and SCN.stack[#SCN.stack]~='music' then
|
||||
if SETTING.autoMute and SCN.cur~='music' then
|
||||
TASK.removeTask_code(task_autoSoundOn)
|
||||
TASK.new(task_autoSoundOff)
|
||||
end
|
||||
|
||||
@@ -72,7 +72,7 @@ local function _flipList(O)
|
||||
end
|
||||
|
||||
local function _reflect(a)
|
||||
return{
|
||||
return {
|
||||
[03]=_flipList(a[01]),
|
||||
[01]=_flipList(a[03]),
|
||||
[30]=_flipList(a[10]),
|
||||
|
||||
41
parts/backgrounds/galaxy.lua
Normal file
41
parts/backgrounds/galaxy.lua
Normal file
@@ -0,0 +1,41 @@
|
||||
--Space with stars
|
||||
local gc=love.graphics
|
||||
local circle,setColor,hsv=gc.circle,gc.setColor,COLOR.hsv
|
||||
local sin,cos=math.sin,math.cos
|
||||
local back={}
|
||||
|
||||
local sDist,sRev={},{} -- star data in SoA [distance from center, revolution progress, color]
|
||||
|
||||
function back.init()
|
||||
if sDist[1]then return end
|
||||
local max
|
||||
for i=0,20 do
|
||||
max=16*(i+1)
|
||||
for j=1,max do
|
||||
sDist[#sDist+1]=i+math.random()
|
||||
sRev[#sRev+1]=MATH.tau*j/max+MATH.tau*math.random()/max
|
||||
end
|
||||
end
|
||||
end
|
||||
function back.update(dt)
|
||||
for i=1,#sDist do
|
||||
sRev[i]=(sRev[i]+dt/(sDist[i]+1))%MATH.tau
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear()
|
||||
gc.translate(SCR.cx,SCR.cy)
|
||||
gc.scale(SCR.k)
|
||||
gc.rotate(1)
|
||||
for i=1,#sDist do
|
||||
local d,r=sDist[i],sRev[i]
|
||||
if d<5 then
|
||||
setColor(hsv(.088,(d-2)/7,1,.7))
|
||||
else
|
||||
setColor(hsv(.572,d/70+.1,(22-d)/12,.7))
|
||||
end
|
||||
circle('fill',8*d*cos(r),24*d*sin(r),3)
|
||||
end
|
||||
end
|
||||
|
||||
return back
|
||||
145
parts/backgrounds/quarks.lua
Normal file
145
parts/backgrounds/quarks.lua
Normal file
@@ -0,0 +1,145 @@
|
||||
local gc=love.graphics
|
||||
local hsv=COLOR.hsv
|
||||
local circle,push,pop,rot,translate,setColor=gc.circle,gc.push,gc.pop,gc.rotate,gc.translate,gc.setColor
|
||||
local rnd,sin,cos,log,ceil=math.random,math.sin,math.cos,math.log,math.ceil
|
||||
local back={}
|
||||
|
||||
local qX,qY,qdX,qdY={},{},{},{} -- quark data in SoA [size, X, Y, dx, dy, color]
|
||||
|
||||
local ptcclr={{1,0,0},{0,1,0},{0,0,1}}
|
||||
local apcclr={{0,1,1},{1,0,1},{1,1,0}}
|
||||
|
||||
local blasts={} -- data about annihilation blasts from particles and antiparticles colliding
|
||||
local ptc={} -- particle-antiparticle data (antiparticle is a mirror of particle)
|
||||
local nextpair
|
||||
|
||||
local W,H,size
|
||||
local quarkCount=400
|
||||
|
||||
local function spawnQuarkRandom(i)
|
||||
qX[i]=rnd(W)-10 -- X
|
||||
qY[i]=rnd(H)-10 -- Y
|
||||
local theta=rnd()*MATH.tau
|
||||
qdX[i]=cos(theta)*300 -- dx
|
||||
qdY[i]=sin(theta)*300 -- dy
|
||||
end
|
||||
local function spawnQuarkEdge(i)
|
||||
local side=rnd(4)
|
||||
if side==1 then -- Up edge of screen
|
||||
qX[i]=rnd(SCR.x-10,SCR.ex+10)
|
||||
qY[i]=SCR.y-10
|
||||
elseif side==2 then -- Right edge of screen
|
||||
qX[i]=SCR.ex+10
|
||||
qY[i]=rnd(SCR.y-10,SCR.ey+10)
|
||||
elseif side==3 then -- Down edge of screen
|
||||
qX[i]=rnd(SCR.x-10,SCR.ex+10)
|
||||
qY[i]=SCR.ey+10
|
||||
elseif side==4 then -- Left edge of screen
|
||||
qX[i]=SCR.x-10
|
||||
qY[i]=rnd(SCR.y-10,SCR.ey+10)
|
||||
end
|
||||
local theta=rnd()*MATH.tau
|
||||
qdX[i]=cos(theta)*300 -- dx
|
||||
qdY[i]=sin(theta)*300 -- dy
|
||||
end
|
||||
local function spawnParticlePair()
|
||||
ptc[#ptc+1]={
|
||||
x=rnd(W)-10,
|
||||
y=rnd(H)-10,
|
||||
dist=0,
|
||||
theta=rnd()*MATH.tau,
|
||||
v=500,
|
||||
c=rnd(3),
|
||||
}
|
||||
end
|
||||
local function spawnBlast(_x,_y)
|
||||
blasts[#blasts+1]={x=_x,y=_y,t=0}
|
||||
end
|
||||
|
||||
function back.init()
|
||||
qX,qY,qdX,qdY={},{},{},{}
|
||||
blasts={}
|
||||
ptc={}
|
||||
nextpair=0
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
end
|
||||
function back.resize(w,h)
|
||||
W,H=w+20,h+20
|
||||
for i=1,quarkCount do spawnQuarkRandom(i) end
|
||||
size=2.6*SCR.k
|
||||
end
|
||||
function back.update(dt)
|
||||
-- Move far-away quarks
|
||||
for i=1,quarkCount do
|
||||
qX[i]=qX[i]+qdX[i]*dt
|
||||
qY[i]=qY[i]+qdY[i]*dt
|
||||
if qX[i]<SCR.x-26 or qX[i]>SCR.ex+26 or qY[i]<SCR.y-26 or qY[i]>SCR.ey+26 then
|
||||
spawnQuarkEdge(i)
|
||||
end
|
||||
end
|
||||
|
||||
-- Particle pair attraction & destruction
|
||||
for i=#ptc,1,-1 do
|
||||
local p=ptc[i]
|
||||
if p then
|
||||
p.dist=p.dist+p.v*dt
|
||||
p.v=p.v-p.dist^2*dt
|
||||
|
||||
-- Destroy colliding particle pairs
|
||||
if p.dist<=10 and p.v<=0 then
|
||||
spawnBlast(p.x,p.y)
|
||||
table.remove(ptc,i)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Age blasts, delete old blasts
|
||||
for i=#blasts,1,-1 do
|
||||
if blasts[i] then
|
||||
blasts[i].t=blasts[i].t+dt
|
||||
if blasts[i].t>=1 then
|
||||
table.remove(blasts,i)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Spawn particle pairs
|
||||
nextpair=nextpair-dt
|
||||
if nextpair<=0 then
|
||||
spawnParticlePair()
|
||||
nextpair=rnd()*4
|
||||
end
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.04,.01)
|
||||
translate(-10,-10)
|
||||
|
||||
-- Draw quarks in R/G/B
|
||||
setColor(1,0,0,.8) for i=1, math.floor(quarkCount/3) do circle('fill',qX[i],qY[i],size) end
|
||||
setColor(0,1,0,.8) for i=math.floor(quarkCount/3)+1, math.floor(quarkCount*2/3) do circle('fill',qX[i],qY[i],size) end
|
||||
setColor(0,0,1,.8) for i=math.floor(quarkCount*2/3)+1,quarkCount do circle('fill',qX[i],qY[i],size) end
|
||||
|
||||
for i=1,#ptc do
|
||||
local p=ptc[i]
|
||||
push()
|
||||
translate(p.x,p.y)
|
||||
rot(p.theta)
|
||||
|
||||
setColor(ptcclr[p.c])
|
||||
circle('fill', p.dist,0,4*size)
|
||||
setColor(apcclr[p.c])
|
||||
circle('fill',-p.dist,0,4*size)
|
||||
pop()
|
||||
end
|
||||
for i=1,#blasts do
|
||||
local t=blasts[i].t
|
||||
setColor(hsv(-80*t,1-1.7*log(5*t,10),1,1-t))
|
||||
circle('fill',blasts[i].x,blasts[i].y,62*t^.3)
|
||||
end
|
||||
end
|
||||
function back.discard()
|
||||
qX,qY,qdX,qdY,qC=nil
|
||||
ptc,blasts=nil
|
||||
collectgarbage()
|
||||
end
|
||||
return back
|
||||
@@ -62,7 +62,7 @@ local AISpeed={60,50,42,34,27,21,16,12,9,6}
|
||||
]]
|
||||
function BOT.template(arg)
|
||||
if arg.type=='CC' then
|
||||
return{
|
||||
return {
|
||||
type='CC',
|
||||
next=arg.next,
|
||||
hold=arg.hold,
|
||||
@@ -72,7 +72,7 @@ function BOT.template(arg)
|
||||
_20G=arg._20G,
|
||||
}
|
||||
elseif arg.type=='9S' then
|
||||
return{
|
||||
return {
|
||||
type='9S',
|
||||
delay=math.floor(AISpeed[arg.speedLV]),
|
||||
hold=arg.hold,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
version=VERSION.code,
|
||||
|
||||
-- Basic
|
||||
|
||||
@@ -413,7 +413,7 @@ function DATA.parseReplayData(fileName,fileData,ifFull)
|
||||
|
||||
-- Create unavailable replay object
|
||||
::BREAK_cannotParse::
|
||||
return{
|
||||
return {
|
||||
fileName=fileName,
|
||||
available=false,
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
GC.mStr(P.modeData.wave,63,200)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
GC.mStr(P.modeData.wave,63,200)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
hook_drop=function(P)
|
||||
if P.lastPiece.atk>0 then
|
||||
P:receive(nil,P.lastPiece.atk,0,generateLine(P.holeRND:random(10)))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
hook_drop=function(P)
|
||||
if P.lastPiece.atk>0 then
|
||||
P:receive(nil,P.lastPiece.atk,120,generateLine(P.holeRND:random(10)))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
hook_drop=function(P)
|
||||
if P.lastPiece.atk>0 then
|
||||
P:receive(nil,P.lastPiece.atk,30,generateLine(P.holeRND:random(10)))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
hook_drop=function(P)
|
||||
if P.lastPiece.atk>0 then
|
||||
P:receive(nil,P.lastPiece.atk,60,generateLine(P.holeRND:random(10)))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
hook_drop=function(P)
|
||||
if P.lastPiece.row>0 then
|
||||
for _=1,#P.clearedRow do
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
mText(TEXTOBJ.techrash,63,420)
|
||||
setFont(75)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local rem=table.remove
|
||||
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
GC.mStr(P.combo,63,310)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
hook_drop=function(P)
|
||||
if P.lastPiece.row>0 then
|
||||
for _=1,#P.clearedRow do
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
hook_drop=function(P)
|
||||
if P.lastPiece.row==0 then
|
||||
P:lose()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
GC.mStr(("%.1f"):format(P.stat.atk),63,190)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
hook_drop=function(P)
|
||||
if P.garbageBeneath==0 then
|
||||
local D=P.modeData
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=10-P.stat.row
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=1000-P.stat.row
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=20-P.stat.row
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=200-P.stat.row
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=40-P.stat.row
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=400-P.stat.row
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
hook_drop=function(P)
|
||||
if #PLY_ALIVE>1 then
|
||||
P.control=false
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
hook_drop=function(P)
|
||||
if P.stat.piece%7==0 and #PLY_ALIVE>1 then
|
||||
P.control=false
|
||||
|
||||
@@ -23,7 +23,7 @@ local function GetGravity(lvl)
|
||||
lvl<29 and 2 or
|
||||
1
|
||||
end
|
||||
return{
|
||||
return {
|
||||
das=16,arr=6,
|
||||
sddas=6,sdarr=6,
|
||||
irs=false,ims=false,
|
||||
|
||||
@@ -23,7 +23,7 @@ local function GetGravity(lvl)
|
||||
lvl<29 and 2 or
|
||||
1
|
||||
end
|
||||
return{
|
||||
return {
|
||||
das=16,arr=6,
|
||||
sddas=3,sdarr=3,
|
||||
irs=false,ims=false,
|
||||
|
||||
@@ -23,7 +23,7 @@ local function GetGravity(lvl)
|
||||
lvl<29 and 2 or
|
||||
1
|
||||
end
|
||||
return{
|
||||
return {
|
||||
das=16,arr=6,
|
||||
sddas=2,sdarr=2,
|
||||
irs=false,ims=false,
|
||||
|
||||
@@ -4,7 +4,7 @@ local function GetLevelStr(lvl)
|
||||
lvl=lvl%256
|
||||
return list[lvl]
|
||||
end
|
||||
return{
|
||||
return {
|
||||
das=16,arr=6,
|
||||
sddas=1,sdarr=1,
|
||||
irs=false,ims=false,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
drop=5,lock=60,
|
||||
fall=6,
|
||||
mesDisp=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
drop=30,lock=60,
|
||||
fall=10,
|
||||
mesDisp=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
GC.mStr(100-P.stat.dig,63,265)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
GC.mStr(10-P.stat.dig,63,265)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
GC.mStr(400-P.stat.dig,63,265)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
GC.mStr(40-P.stat.dig,63,265)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
GC.mStr(P.modeData.wave,63,310)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
GC.mStr(P.modeData.wave,63,310)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local dropSpeed={50,40,30,25,20,15,12,9,7,5,4,3,2,1,1,.5,.5,.25,.25}
|
||||
|
||||
return{
|
||||
return {
|
||||
drop=60,
|
||||
wait=8,
|
||||
fall=20,
|
||||
|
||||
@@ -10,7 +10,7 @@ local function getRollGoal(P)
|
||||
return goal+(rem>0.3 and 4 or rem*10)
|
||||
end
|
||||
|
||||
return{
|
||||
return {
|
||||
drop=0,lock=15,
|
||||
wait=15,fall=6,
|
||||
noTele=true,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
drop=0,lock=12,
|
||||
wait=10,fall=10,
|
||||
noTele=true,
|
||||
|
||||
@@ -119,7 +119,7 @@ local function getRollGoal()
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
return {
|
||||
drop=64,
|
||||
lock=30,
|
||||
wait=23,
|
||||
|
||||
@@ -2,7 +2,7 @@ local death_lock={12,11,10,9,8, 8,8,7,7,6}
|
||||
local death_wait={10,9, 8, 7,6, 7,6,6,5,5}
|
||||
local death_fall={10,9, 8, 7,6, 7,6,5,5,5}
|
||||
|
||||
return{
|
||||
return {
|
||||
drop=0,
|
||||
lock=death_lock[1],
|
||||
wait=death_wait[1],
|
||||
|
||||
@@ -5,7 +5,7 @@ local inv_hide={20,17,14,11, 8, 5, 3, 2, 1, 0}
|
||||
local hidetimer=0
|
||||
local held=false
|
||||
|
||||
return{
|
||||
return {
|
||||
drop=0,
|
||||
lock=inv_lock[1],
|
||||
wait=inv_wait[1],
|
||||
|
||||
@@ -2,7 +2,7 @@ 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}
|
||||
|
||||
return{
|
||||
return {
|
||||
drop=0,
|
||||
lock=rush_lock[1],
|
||||
wait=rush_wait[1],
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
heightLimit=4,
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
|
||||
@@ -41,7 +41,7 @@ local function _check(P)
|
||||
end
|
||||
end
|
||||
end
|
||||
return{
|
||||
return {
|
||||
sequence='none',
|
||||
RS="SRS",
|
||||
mesDisp=function(P)
|
||||
|
||||
@@ -34,7 +34,7 @@ local function _check(P)
|
||||
end
|
||||
end
|
||||
end
|
||||
return{
|
||||
return {
|
||||
sequence='none',
|
||||
RS="SRS",
|
||||
mesDisp=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
layout='royale',
|
||||
fkey1=function(P)
|
||||
P:changeAtkMode(P.atkMode<3 and P.atkMode+2 or 5-P.atkMode)
|
||||
|
||||
@@ -45,7 +45,7 @@ local function generateGuide(num)
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
return {
|
||||
fkey1=function(P) P.modeData.showGuide=not P.modeData.showGuide end,
|
||||
mesDisp=function(P)
|
||||
mText(TEXTOBJ.grade,63,190)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(45)
|
||||
GC.mStr(("%.1f"):format(P.stat.atk),63,270)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(55)
|
||||
local r=40-P.stat.row
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local oppo={
|
||||
[1]=7,[7]=1,[11]=3,[3]=11,[14]=14,[4]=4,[9]=9,
|
||||
}
|
||||
return{
|
||||
return {
|
||||
skin={
|
||||
1,7,11,3,14,4,9,
|
||||
1,7,2,6,10,2,13,5,9,15,10,11,3,12,2,16,8,4,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
fieldH=20,
|
||||
fillClear=false,
|
||||
mesDisp=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
fieldH=21,
|
||||
fillClear=false,
|
||||
mesDisp=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
GC.mStr(P.modeData.wave,63,310)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
GC.mStr(P.modeData.wave,63,310)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
GC.mStr(P.modeData.wave,63,310)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
GC.mStr(P.modeData.wave,63,310)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
GC.mStr(P.modeData.wave,63,310)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
GC.mStr(P.stat.clear[7][4],63,250)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
GC.mStr(P.modeData.techrash,63,250)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
GC.mStr(P.modeData.tsd,63,250)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
GC.mStr(P.modeData.tsd,63,250)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
setFont(60)
|
||||
GC.mStr(P.modeData.tsd,63,250)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local warnTime={60,90,105,115,116,117,118,119,120}
|
||||
for i=1,#warnTime do warnTime[i]=warnTime[i]*60 end
|
||||
|
||||
return{
|
||||
return {
|
||||
mesDisp=function(P)
|
||||
GC.setLineWidth(2)
|
||||
GC.setColor(.98,.98,.98,.8)
|
||||
@@ -18,7 +18,7 @@ return{
|
||||
GC.mStr(T,63,268)
|
||||
end,
|
||||
task=function(P)
|
||||
BGM.seek(0)
|
||||
BGM.set('all','seek',0)
|
||||
P.modeData.section=1
|
||||
while true do
|
||||
coroutine.yield()
|
||||
|
||||
@@ -800,13 +800,12 @@ do-- function resetGameData(args)
|
||||
collectgarbage()
|
||||
end
|
||||
end
|
||||
do-- function checkWarning()
|
||||
do-- function checkWarning(P,dt)
|
||||
local max=math.max
|
||||
function checkWarning(dt)
|
||||
local P1=PLAYERS[1]
|
||||
if P1.alive then
|
||||
if P1.frameRun%26==0 then
|
||||
local F=P1.field
|
||||
function checkWarning(P,dt)
|
||||
if P.alive then
|
||||
if P.frameRun%26==0 then
|
||||
local F=P.field
|
||||
local height=0-- Max height of row 4~7
|
||||
for x=4,7 do
|
||||
for y=#F,1,-1 do
|
||||
@@ -818,7 +817,7 @@ do-- function checkWarning()
|
||||
end
|
||||
end
|
||||
end
|
||||
GAME.warnLVL0=math.log(height-(P1.gameEnv.fieldH-5)+P1.atkBufferSum*.8)
|
||||
GAME.warnLVL0=math.log(height-(P.gameEnv.fieldH-5)+P.atkBufferSum*.8)
|
||||
end
|
||||
local _=GAME.warnLVL
|
||||
if _<GAME.warnLVL0 then
|
||||
@@ -827,7 +826,7 @@ do-- function checkWarning()
|
||||
_=max(_-.026,0)
|
||||
end
|
||||
GAME.warnLVL=_
|
||||
if GAME.warnLVL>1.126 and P1.frameRun%30==0 then
|
||||
if GAME.warnLVL>1.126 and P.frameRun%30==0 then
|
||||
SFX.fplay('warn_beep',SETTING.sfx_warn)
|
||||
end
|
||||
elseif GAME.warnLVL>0 then
|
||||
|
||||
@@ -22,12 +22,12 @@ RANK_COLORS={
|
||||
}
|
||||
GROUP_COLORS={
|
||||
[0]=COLOR.Z,
|
||||
[1]=COLOR.R,
|
||||
[2]=COLOR.G,
|
||||
[3]=COLOR.B,
|
||||
[4]=COLOR.Y,
|
||||
[5]=COLOR.M,
|
||||
[6]=COLOR.C,
|
||||
[1]={STRING.hexColor'e57373'},
|
||||
[2]={STRING.hexColor'aed581'},
|
||||
[3]={STRING.hexColor'42a5f5'},
|
||||
[4]={STRING.hexColor'ffe082'},
|
||||
[5]={STRING.hexColor'ba68c8'},
|
||||
[6]={STRING.hexColor'80deea'},
|
||||
}
|
||||
|
||||
do-- SVG_TITLE_FILL, SVG_TITLE_LINE
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local HDsearch="https://harddrop.com/wiki?search="
|
||||
local HDwiki="\nFor more information, please visit Hard Drop Wiki. Click on the globe icon to open the link."
|
||||
return{
|
||||
return {
|
||||
{"Translator Note 1",
|
||||
"",
|
||||
"help",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local HDsearch="https://harddrop.com/wiki?search="
|
||||
local HDwiki="\nHard Drop Wikiに詳しい情報があります!"
|
||||
return{
|
||||
return {
|
||||
{"翻訳者からのメモ1",
|
||||
"",
|
||||
"help",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local HDsearch="https://harddrop.com/wiki?search="
|
||||
local HDwiki="\n更多内容见Hard Drop Wiki。"
|
||||
return{
|
||||
return {
|
||||
{"新人须知",
|
||||
"读我 必读 萌新 xinren new noob readme",
|
||||
"help",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
local C=COLOR
|
||||
return{
|
||||
return {
|
||||
loadText={
|
||||
loadSFX="Loading sound effects",
|
||||
loadSample="Loading instrument samples",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
loadText={
|
||||
loadSFX="Cargando efectos de sonido",
|
||||
loadSample="Cargando samples de música",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
fallback='en',
|
||||
sureQuit="Appuyez à nouveau pour sortir",
|
||||
-- sureReset="Press again to reset",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
local C=COLOR
|
||||
return{
|
||||
return {
|
||||
fallback='en',
|
||||
loadText={
|
||||
loadSFX="Memuat efek suara",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
local C=COLOR
|
||||
return{
|
||||
return {
|
||||
fallback='en',
|
||||
loadText={
|
||||
loadSFX="効果音をロード中",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
local C=COLOR
|
||||
return{
|
||||
return {
|
||||
fallback='en',
|
||||
sureQuit="Aparte novamente para sair",
|
||||
-- sureReset="Press again to reset",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
fallback='en',
|
||||
|
||||
loadText={
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
local C=COLOR
|
||||
return{
|
||||
return {
|
||||
loadText={
|
||||
loadSFX="加载音效资源",
|
||||
loadSample="加载乐器采样",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
local C=COLOR
|
||||
return{
|
||||
return {
|
||||
loadText={
|
||||
loadSFX="Load(SFX);",
|
||||
loadSample="Load(Sample);",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
fallback='zh',
|
||||
loadText={
|
||||
loadSFX="加載音效資源",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
{name='sprint_10l', x=0, y=0, size=40,shape=1,icon="sprint1", unlock={'sprint_20l','sprint_40l'}},
|
||||
{name='sprint_20l', x=-200, y=200, size=50,shape=1,icon="sprint1"},
|
||||
{name='sprint_40l', x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={'dig_10l','sprint_100l','marathon_n','sprintPenta','sprintMPH','sprint123','secret_grade'}},
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
{
|
||||
{
|
||||
{4,4,4,3,3,3,7,0,0,0},
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
-- 3*4 shape
|
||||
{{1,3,3},{1,3,4},{1,5,3},{3,1,3},{3,1,4},{3,2,4},{3,3,2},{3,3,5},{3,3,6},{3,3,7},{3,4,1},{3,4,5},{3,4,6},{3,5,3},{3,5,4},{3,5,5},{3,6,3},{3,6,4},{3,7,3},{3,7,4},{5,3,4},{5,3,5},{5,5,1},{5,5,3},{5,7,3},{6,3,3},{6,3,4},{6,6,7},{6,7,6},{7,3,3},{7,3,4},{7,5,3},{7,6,6},{7,7,7}},
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
fall=12,
|
||||
@@ -7,7 +7,7 @@ return{
|
||||
eventSet='attacker_h',
|
||||
bg='rainbow2',bgm='shining terminal',
|
||||
},
|
||||
score=function(P) return{P.modeData.wave,P.stat.time} end,
|
||||
score=function(P) return {P.modeData.wave,P.stat.time} end,
|
||||
scoreDisp=function(D) return D[1].." Waves "..STRING.time(D[2]) end,
|
||||
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
||||
getRank=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
env={
|
||||
drop=5,lock=60,
|
||||
fall=8,
|
||||
@@ -6,7 +6,7 @@ return{
|
||||
eventSet='attacker_u',
|
||||
bg='rainbow2',bgm='shining terminal',
|
||||
},
|
||||
score=function(P) return{P.modeData.wave,P.stat.time} end,
|
||||
score=function(P) return {P.modeData.wave,P.stat.time} end,
|
||||
scoreDisp=function(D) return D[1].." Waves "..STRING.time(D[2]) end,
|
||||
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
||||
getRank=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
env={
|
||||
drop=10,lock=60,
|
||||
freshLimit=15,
|
||||
@@ -13,7 +13,7 @@ return{
|
||||
end,
|
||||
bg='tunnel',bgm='echo',
|
||||
},
|
||||
score=function(P) return{math.min(math.floor(P.stat.atk),100),P.stat.time} 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,
|
||||
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
||||
getRank=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
env={
|
||||
drop=5,lock=45,
|
||||
freshLimit=15,
|
||||
@@ -13,7 +13,7 @@ return{
|
||||
end,
|
||||
bg='blockhole',bgm='echo',
|
||||
},
|
||||
score=function(P) return{math.min(math.floor(P.stat.atk),100),P.stat.time} 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,
|
||||
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
||||
getRank=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
hook_drop={
|
||||
@@ -12,7 +12,7 @@ return{
|
||||
end,
|
||||
bg='tunnel',bgm='echo',
|
||||
},
|
||||
score=function(P) return{math.min(math.floor(P.stat.atk),100),P.stat.time} 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,
|
||||
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
||||
getRank=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
env={
|
||||
drop=2,lock=30,
|
||||
freshLimit=10,
|
||||
@@ -13,7 +13,7 @@ return{
|
||||
end,
|
||||
bg='blockhole',bgm='echo',
|
||||
},
|
||||
score=function(P) return{math.min(math.floor(P.stat.atk),100),P.stat.time} 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,
|
||||
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
||||
getRank=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
env={
|
||||
noTele=true,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
@@ -7,7 +7,7 @@ return{
|
||||
eventSet='big_h',
|
||||
bg='cubes',bgm='push',
|
||||
},
|
||||
score=function(P) return{math.min(P.stat.row,200),P.stat.time} 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,
|
||||
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
||||
getRank=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
env={
|
||||
noTele=true,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
@@ -7,7 +7,7 @@ return{
|
||||
eventSet='big_n',
|
||||
bg='bg2',bgm='push',
|
||||
},
|
||||
score=function(P) return{math.min(P.stat.row,200),P.stat.time} 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,
|
||||
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
||||
getRank=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
env={
|
||||
drop=30,lock=45,
|
||||
freshLimit=10,
|
||||
@@ -7,7 +7,7 @@ return{
|
||||
eventSet='checkLine_200',
|
||||
bg='glow',bgm='sugar fairy',
|
||||
},
|
||||
score=function(P) return{math.min(P.stat.row,200),P.stat.time} 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,
|
||||
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
||||
getRank=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
env={
|
||||
drop=15,lock=45,
|
||||
fall=10,
|
||||
@@ -10,7 +10,7 @@ return{
|
||||
eventSet='checkLine_200',
|
||||
bg='rgb',bgm='sugar fairy',
|
||||
},
|
||||
score=function(P) return{math.min(P.stat.row,200),P.stat.time} 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,
|
||||
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
||||
getRank=function(P)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
return{
|
||||
return {
|
||||
env={
|
||||
drop=10,lock=60,
|
||||
fall=5,
|
||||
@@ -11,7 +11,7 @@ return{
|
||||
eventSet='checkLine_200',
|
||||
bg='rgb',bgm='sugar fairy',
|
||||
},
|
||||
score=function(P) return{math.min(P.stat.row,200),P.stat.time} 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,
|
||||
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
||||
getRank=function(P)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user